diff --git a/.changeset/slow-times-sink.md b/.changeset/slow-times-sink.md
new file mode 100644
index 00000000..9186f70e
--- /dev/null
+++ b/.changeset/slow-times-sink.md
@@ -0,0 +1,5 @@
+---
+'dotenv-diff': patch
+---
+
+regex to catch svelte v3 env variables
diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml
index 34edfb5b..d491ff3e 100644
--- a/.github/workflows/codeql.yml
+++ b/.github/workflows/codeql.yml
@@ -26,12 +26,12 @@ jobs:
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
- name: Initialize CodeQL
- uses: github/codeql-action/init@2892aa5e19bbd11bc0cff5427e3b750a04d9e3c2 # v4.38.2
+ uses: github/codeql-action/init@6f2ac81f5cd81fe351a197ba0b00d91d03cd2aee # v4.39.0
with:
languages: javascript-typescript
build-mode: none
- name: Perform CodeQL Analysis
- uses: github/codeql-action/analyze@2892aa5e19bbd11bc0cff5427e3b750a04d9e3c2 # v4.38.2
+ uses: github/codeql-action/analyze@6f2ac81f5cd81fe351a197ba0b00d91d03cd2aee # v4.39.0
with:
category: '/language:javascript-typescript'
diff --git a/.github/workflows/scorecard.yml b/.github/workflows/scorecard.yml
index ba7fdc4b..ab30e467 100644
--- a/.github/workflows/scorecard.yml
+++ b/.github/workflows/scorecard.yml
@@ -45,6 +45,6 @@ jobs:
retention-days: 5
- name: Upload to code-scanning
- uses: github/codeql-action/upload-sarif@2892aa5e19bbd11bc0cff5427e3b750a04d9e3c2 # v4.38.2
+ uses: github/codeql-action/upload-sarif@6f2ac81f5cd81fe351a197ba0b00d91d03cd2aee # v4.39.0
with:
sarif_file: results.sarif
diff --git a/docs/capabilities.md b/docs/capabilities.md
index 7dffa0bf..d3e84474 100644
--- a/docs/capabilities.md
+++ b/docs/capabilities.md
@@ -43,6 +43,16 @@ const { MY_KEY } = privateEnv
import { MY_KEY } from '$env/static/private';
import { MY_KEY } from '$env/static/public';
MY_KEY
+
+// SvelteKit 3 – named imports from $app/env
+import { MY_KEY } from '$app/env/private';
+import { MY_KEY, OTHER_KEY as alias } from '$app/env/public';
+
+// SvelteKit 3 – declarations in src/env.ts (top-level keys count as used)
+export const variables = defineEnvVars({
+ MY_KEY: {},
+ OTHER_KEY: { public: true },
+});
```
Docker Compose files are also scanned for shell-style interpolation, so
diff --git a/docs/frameworks/sveltekit_warnings.md b/docs/frameworks/sveltekit_warnings.md
index b6993588..f702847b 100644
--- a/docs/frameworks/sveltekit_warnings.md
+++ b/docs/frameworks/sveltekit_warnings.md
@@ -105,7 +105,23 @@ Warning:
`$env/static/public variables must start with "PUBLIC_"`
-## 9 Sensitive-looking `PUBLIC_` / `VITE_` names trigger exposure warnings
+## 9 `$app/env/private` cannot be used in client-side code
+
+SvelteKit 3 replaces the `$env/*` modules with `$app/env/private` and `$app/env/public`.
+
+```svelte
+
+```
+
+Warning:
+
+`$app/env/private cannot be used in client-side code`
+
+**Note:** `$app/env/public` has no `PUBLIC_` prefix rule. In SvelteKit 3 a variable is exposed to the browser via `public: true` in `defineEnvVars`, not via its name.
+
+## 10 Sensitive-looking `PUBLIC_` / `VITE_` names trigger exposure warnings
If a client-exposed name contains `SECRET`, `PRIVATE`, or `PASSWORD`, a warning is produced.
@@ -128,6 +144,7 @@ Warning:
- `$env/dynamic/public` → must use `PUBLIC_*`
- `$env/static/private` → server-only, never `PUBLIC_*`
- `$env/static/public` → must use `PUBLIC_*`
+- `$app/env/private` → server-only
- Sensitive client-exposed names (`PUBLIC_*`/`VITE_*`) → warning
## Best practices
diff --git a/package.json b/package.json
index cf757241..5dda9c2c 100644
--- a/package.json
+++ b/package.json
@@ -32,18 +32,18 @@
"@repo/eslint-config": "workspace:*",
"@repo/tsconfig": "workspace:*",
"@repo/vitest": "workspace:*",
- "@types/node": "^26.6.4",
+ "@types/node": "^26.6.5",
"@types/prompts": "^2.4.9",
- "@typescript-eslint/eslint-plugin": "^8.71.0",
- "@typescript-eslint/parser": "^8.71.0",
+ "@typescript-eslint/eslint-plugin": "^8.71.2",
+ "@typescript-eslint/parser": "^8.71.2",
"@vitest/coverage-v8": "5.0.3",
- "eslint": "^10.12.0",
+ "eslint": "^10.13.0",
"husky": "^9.1.7",
"lint-staged": "^17.6.0",
- "prettier": "^3.9.9",
- "turbo": "^2.11.7",
+ "prettier": "^3.9.10",
+ "turbo": "^2.11.9",
"typescript": "^6.0.3",
- "vitest": "^5.0.3"
+ "vitest": "^5.0.5"
},
"packageManager": "pnpm@11.24.0"
}
diff --git a/packages/@repo/eslint-config/package.json b/packages/@repo/eslint-config/package.json
index c1f0a264..9d50782a 100644
--- a/packages/@repo/eslint-config/package.json
+++ b/packages/@repo/eslint-config/package.json
@@ -12,8 +12,8 @@
"format": "prettier --write \"**/*.{ts,js,json,md,yml}\""
},
"devDependencies": {
- "@typescript-eslint/eslint-plugin": "^8.71.0",
- "@typescript-eslint/parser": "^8.71.0",
- "eslint": "^10.12.0"
+ "@typescript-eslint/eslint-plugin": "^8.71.2",
+ "@typescript-eslint/parser": "^8.71.2",
+ "eslint": "^10.13.0"
}
}
diff --git a/packages/cli/src/commands/compare.ts b/packages/cli/src/commands/compare.ts
index 4af94500..c2def83e 100644
--- a/packages/cli/src/commands/compare.ts
+++ b/packages/cli/src/commands/compare.ts
@@ -374,11 +374,11 @@ function findDuplicates(
function isAllOk(filtered: Filtered): boolean {
return (
filtered.missing.length === 0 &&
- (filtered.extra?.length ?? 0) === 0 &&
- (filtered.empty?.length ?? 0) === 0 &&
+ !filtered.extra?.length &&
+ !filtered.empty?.length &&
filtered.duplicatesEnv.length === 0 &&
filtered.duplicatesEx.length === 0 &&
- (filtered.mismatches?.length ?? 0) === 0 &&
+ !filtered.mismatches?.length &&
!filtered.gitignoreIssue
);
}
diff --git a/packages/cli/src/core/frameworks/sveltekitRules.ts b/packages/cli/src/core/frameworks/sveltekitRules.ts
index cc92dd54..75abebc4 100644
--- a/packages/cli/src/core/frameworks/sveltekitRules.ts
+++ b/packages/cli/src/core/frameworks/sveltekitRules.ts
@@ -158,6 +158,22 @@ export function applySvelteKitRules(
return;
}
+ // $app/env/private (SvelteKit 3)
+ if (
+ u.pattern === 'sveltekit' &&
+ u.imports?.includes('$app/env/private') &&
+ (isSvelteFile || isClientFile)
+ ) {
+ warnings.push({
+ variable: u.variable,
+ reason: '$app/env/private cannot be used in client-side code',
+ file: normalizedFile,
+ line: u.line,
+ framework: 'sveltekit',
+ });
+ return;
+ }
+
// Warn if PUBLIC_ or VITE_ contains sensitive keywords
if (
(u.variable.startsWith('PUBLIC_') || u.variable.startsWith('VITE_')) &&
diff --git a/packages/cli/src/core/scan/patterns.ts b/packages/cli/src/core/scan/patterns.ts
index 2e409666..351ee6df 100644
--- a/packages/cli/src/core/scan/patterns.ts
+++ b/packages/cli/src/core/scan/patterns.ts
@@ -19,12 +19,14 @@ type Pattern = {
const ENV_VAR_NAME_PATTERN = /^[A-Z_][A-Z0-9_]*$/;
/**
- * Matches SvelteKit $env imports to collect import sources per file.
+ * Matches SvelteKit env imports to collect import sources per file.
+ * Covers the legacy `$env/*` modules and the SvelteKit 3 `$app/env/*` modules.
* Example: import { env } from '$env/dynamic/private'
* Example: import { PUBLIC_URL } from '$env/static/public'
+ * Example: import { API_KEY } from '$app/env/private'
*/
export const SVELTEKIT_IMPORT_REGEX =
- /import\s+(?:\{[^}]*\}|\w+)\s+from\s+['"](?\$env\/(?:static|dynamic)\/(?:private|public))['"]/g;
+ /import\s+(?:\{[^}]*\}|\w+)\s+from\s+['"](?\$env\/(?:static|dynamic)\/(?:private|public)|\$app\/env\/(?:private|public))['"]/g;
/**
* Matches aliased SvelteKit env imports.
@@ -71,6 +73,92 @@ export function buildSveltekitAliasPatterns(
];
}
+/**
+ * Extracts the imported names from a named import list, ignoring local aliases.
+ * Example: "A, B as b, type C" → ["A", "B", "C"]
+ */
+function parseNamedImports(content: string | undefined): string[] {
+ if (!content) return [];
+ return content
+ .split(',')
+ .map((part) => part.trim().replace(/^type\s+/, ''))
+ .map((part) => part.split(/\s+as\s+/)[0]!.trim())
+ .filter((key) => ENV_VAR_NAME_PATTERN.test(key));
+}
+
+/**
+ * Extracts the top-level keys of the object literal passed to
+ * `defineEnvVars({ ... })` (SvelteKit 3 `src/env.ts`). Nested config objects
+ * (`{ public: true, schema: ... }`), strings and comments are skipped.
+ * @param source - The full file content.
+ * @param start - Offset of the opening `{` of the object literal.
+ */
+function parseDefineEnvVarsKeys(source: string, start: number): string[] {
+ const keys: string[] = [];
+ let depth = 0;
+ // True when the next token at depth 1 is in key position.
+ let expectKey = false;
+
+ for (let i = start; i < source.length; i++) {
+ const ch = source[i]!;
+
+ // Skip comments
+ if (ch === '/' && source[i + 1] === '/') {
+ const end = source.indexOf('\n', i);
+ i = end === -1 ? source.length : end;
+ continue;
+ }
+ if (ch === '/' && source[i + 1] === '*') {
+ const end = source.indexOf('*/', i + 2);
+ i = end === -1 ? source.length : end + 1;
+ continue;
+ }
+
+ // Strings (quoted keys at depth 1 are captured, everything else skipped)
+ if (ch === '"' || ch === "'" || ch === '`') {
+ let j = i + 1;
+ while (j < source.length && source[j] !== ch) {
+ if (source[j] === '\\') j++;
+ j++;
+ }
+ if (depth === 1 && expectKey) {
+ const key = source.slice(i + 1, j);
+ if (ENV_VAR_NAME_PATTERN.test(key)) keys.push(key);
+ expectKey = false;
+ }
+ i = j;
+ continue;
+ }
+
+ if (ch === '{' || ch === '[' || ch === '(') {
+ depth++;
+ if (depth === 1) expectKey = true;
+ continue;
+ }
+ if (ch === '}' || ch === ']' || ch === ')') {
+ depth--;
+ if (depth === 0) break;
+ continue;
+ }
+
+ if (depth !== 1) continue;
+
+ if (ch === ',') {
+ expectKey = true;
+ continue;
+ }
+
+ if (expectKey && /[A-Za-z_$]/.test(ch)) {
+ const ident = /^[A-Za-z_$][\w$]*/.exec(source.slice(i))![0];
+ if (ENV_VAR_NAME_PATTERN.test(ident)) keys.push(ident);
+ expectKey = false;
+ i += ident.length - 1;
+ }
+ }
+
+ return keys;
+}
+
/**
* Framework-specific regex patterns for detecting environment variable usage
* across different runtimes and frameworks.
@@ -156,6 +244,31 @@ export const ENV_PATTERNS: Pattern[] = [
/import\s*\{\s*([A-Z_][A-Z0-9_]*)\s*\}\s*from\s*['"]\$env\/static\/(?:private|public)['"]/g,
},
+ // SvelteKit 3 named imports (single, multiple, aliased, multiline)
+ // import { PUBLIC_SENTRY_DSN } from '$app/env/public';
+ // import { API_KEY, OTHER_KEY as other } from '$app/env/private';
+ {
+ name: 'sveltekit' as const,
+ regex: /import\s*\{([^}]*)\}\s*from\s*['"]\$app\/env\/private['"]/g,
+ sourceModule: '$app/env/private',
+ processor: (match) => parseNamedImports(match[1]),
+ },
+ {
+ name: 'sveltekit' as const,
+ regex: /import\s*\{([^}]*)\}\s*from\s*['"]\$app\/env\/public['"]/g,
+ sourceModule: '$app/env/public',
+ processor: (match) => parseNamedImports(match[1]),
+ },
+
+ // SvelteKit 3 env declarations in src/env.ts
+ // export const variables = defineEnvVars({ API_KEY: {}, PUBLIC_URL: { public: true } });
+ {
+ name: 'sveltekit' as const,
+ regex: /\bdefineEnvVars\s*\(\s*(?=\{)/g,
+ processor: (match) =>
+ parseDefineEnvVarsKeys(match.input, match.index + match[0].length),
+ },
+
// Bare env object accessor (framework resolved from file context at scan time)
// env.SECRET — SvelteKit `$env/dynamic/*` or Vite `loadEnv(...)` result
{
diff --git a/packages/cli/test/unit/core/frameworks/sveltekitRules.test.ts b/packages/cli/test/unit/core/frameworks/sveltekitRules.test.ts
index f9f96a6b..5eb08a68 100644
--- a/packages/cli/test/unit/core/frameworks/sveltekitRules.test.ts
+++ b/packages/cli/test/unit/core/frameworks/sveltekitRules.test.ts
@@ -27,6 +27,46 @@ describe('applySvelteKitRules', () => {
vi.clearAllMocks();
});
+ // $app/env/private (SvelteKit 3)
+ it('warns when $app/env/private is used in client code', () => {
+ applySvelteKitRules(
+ {
+ ...baseUsage,
+ pattern: 'sveltekit',
+ variable: 'API_KEY',
+ file: 'src/routes/+page.svelte',
+ imports: ['$app/env/private'],
+ },
+ warnings,
+ );
+ expect(warnings).toHaveLength(1);
+ expect(warnings[0]!.reason).toContain('$app/env/private');
+ });
+
+ it('allows $app/env/private in server files and $app/env/public anywhere', () => {
+ applySvelteKitRules(
+ {
+ ...baseUsage,
+ pattern: 'sveltekit',
+ variable: 'API_KEY',
+ file: 'src/routes/+page.server.ts',
+ imports: ['$app/env/private'],
+ },
+ warnings,
+ );
+ applySvelteKitRules(
+ {
+ ...baseUsage,
+ pattern: 'sveltekit',
+ variable: 'SENTRY_DSN',
+ file: 'src/routes/+page.svelte',
+ imports: ['$app/env/public'],
+ },
+ warnings,
+ );
+ expect(warnings).toHaveLength(0);
+ });
+
it('ignores node_modules', () => {
applySvelteKitRules(
{ ...baseUsage, file: 'src/node_modules/pkg/index.js' },
diff --git a/packages/cli/test/unit/core/scan/computeExitDecision.test.ts b/packages/cli/test/unit/core/scan/computeExitDecision.test.ts
index 80c6e84b..3c78fc12 100644
--- a/packages/cli/test/unit/core/scan/computeExitDecision.test.ts
+++ b/packages/cli/test/unit/core/scan/computeExitDecision.test.ts
@@ -175,6 +175,17 @@ describe('computeExitDecision', () => {
});
}
+ it('passes under --strict when secrets and logged are undefined', () => {
+ const result = computeExitDecision(
+ scan({
+ secrets: undefined,
+ logged: undefined,
+ } as unknown as Partial),
+ { strict: true },
+ );
+ expect(result.exitWithError).toBe(false);
+ });
+
it('does not fail on expire warnings beyond the strict threshold', () => {
const result = computeExitDecision(
scan({
diff --git a/packages/cli/test/unit/core/scan/patterns.test.ts b/packages/cli/test/unit/core/scan/patterns.test.ts
index 9fb00059..e87c4309 100644
--- a/packages/cli/test/unit/core/scan/patterns.test.ts
+++ b/packages/cli/test/unit/core/scan/patterns.test.ts
@@ -428,6 +428,99 @@ describe('scanFile - Pattern Detection', () => {
});
});
+ describe('SvelteKit 3 $app/env imports', () => {
+ it('detects import from $app/env/public', () => {
+ const code = `import * as Sentry from '@sentry/sveltekit';
+import { PUBLIC_SENTRY_DSN } from '$app/env/public';
+
+Sentry.init({ dsn: PUBLIC_SENTRY_DSN });`;
+ const result = scanFile('test.ts', code, baseOpts);
+
+ expect(result).toHaveLength(1);
+ expect(result[0]).toMatchObject({
+ variable: 'PUBLIC_SENTRY_DSN',
+ pattern: 'sveltekit',
+ imports: ['$app/env/public'],
+ });
+ });
+
+ it('detects import from $app/env/private', () => {
+ const code = "import { ADRESSEVAELGER_TOKEN } from '$app/env/private';";
+ const result = scanFile('test.ts', code, baseOpts);
+
+ expect(result).toHaveLength(1);
+ expect(result[0]).toMatchObject({
+ variable: 'ADRESSEVAELGER_TOKEN',
+ imports: ['$app/env/private'],
+ });
+ });
+
+ it('detects multiple, aliased and multiline imports', () => {
+ const code = `import {
+ API_KEY,
+ DB_URL as dbUrl,
+} from "$app/env/private";`;
+ const result = scanFile('test.ts', code, baseOpts);
+
+ expect(result.map((u) => u.variable)).toEqual(['API_KEY', 'DB_URL']);
+ });
+
+ it('does not match $app/env (non-variable module)', () => {
+ const code = "import { building } from '$app/env';";
+ const result = scanFile('test.ts', code, baseOpts);
+
+ expect(result).toHaveLength(0);
+ });
+ });
+
+ describe('SvelteKit 3 defineEnvVars', () => {
+ it('detects top-level keys declared in src/env.ts', () => {
+ const code = `import { defineEnvVars } from '@sveltejs/kit/env';
+import * as v from 'valibot';
+
+export const variables = defineEnvVars({
+ // Sentry
+ PUBLIC_SENTRY_DSN: { public: true, schema: v.pipe(v.string(), v.url()) },
+ 'ADRESSEVAELGER_TOKEN': {},
+ NESTED: { description: 'not { a: KEY }', schema: (value) => ({ OTHER: value }) },
+ /* COMMENTED_OUT: {}, */
+});`;
+ const result = scanFile('src/env.ts', code, baseOpts);
+
+ expect(result.map((u) => u.variable)).toEqual([
+ 'PUBLIC_SENTRY_DSN',
+ 'ADRESSEVAELGER_TOKEN',
+ 'NESTED',
+ ]);
+ expect(result[0]).toMatchObject({ pattern: 'sveltekit', line: 4 });
+ });
+
+ it('ignores non env-var keys, escaped quotes and lowercase string keys', () => {
+ const code = `defineEnvVars({
+ lowerCase: {},
+ 'not-valid': {},
+ API_KEY: { description: 'it\\'s { tricky }' },
+});`;
+ const result = scanFile('src/env.ts', code, baseOpts);
+
+ expect(result.map((u) => u.variable)).toEqual(['API_KEY']);
+ });
+
+ it('handles a trailing line comment without a newline', () => {
+ const code = 'defineEnvVars({ API_KEY: {} // trailing';
+ const result = scanFile('src/env.ts', code, baseOpts);
+
+ expect(result.map((u) => u.variable)).toEqual(['API_KEY']);
+ });
+
+ it('handles an unterminated block comment', () => {
+ const code = 'defineEnvVars({ API_KEY: {}, /* OTHER_KEY: {}';
+ const result = scanFile('src/env.ts', code, baseOpts);
+
+ expect(result.map((u) => u.variable)).toEqual(['API_KEY']);
+ });
+ });
+
describe('SvelteKit Invalid Dynamic Named Imports', () => {
it('detects invalid named import from $env/dynamic/private', () => {
const code = "import { SECRET_KEY } from '$env/dynamic/private';";
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 2346bc5f..ec9a8f69 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -27,23 +27,23 @@ importers:
specifier: workspace:*
version: link:packages/@repo/vitest
'@types/node':
- specifier: ^26.6.4
- version: 26.6.4
+ specifier: ^26.6.5
+ version: 26.6.5
'@types/prompts':
specifier: ^2.4.9
version: 2.4.9
'@typescript-eslint/eslint-plugin':
- specifier: ^8.71.0
- version: 8.71.0(@typescript-eslint/parser@8.71.0(eslint@10.12.0(supports-color@7.2.0))(supports-color@7.2.0)(typescript@6.0.3))(eslint@10.12.0(supports-color@7.2.0))(supports-color@7.2.0)(typescript@6.0.3)
+ specifier: ^8.71.2
+ version: 8.71.2(@typescript-eslint/parser@8.71.2(eslint@10.13.0(supports-color@7.2.0))(supports-color@7.2.0)(typescript@6.0.3))(eslint@10.13.0(supports-color@7.2.0))(supports-color@7.2.0)(typescript@6.0.3)
'@typescript-eslint/parser':
- specifier: ^8.71.0
- version: 8.71.0(eslint@10.12.0(supports-color@7.2.0))(supports-color@7.2.0)(typescript@6.0.3)
+ specifier: ^8.71.2
+ version: 8.71.2(eslint@10.13.0(supports-color@7.2.0))(supports-color@7.2.0)(typescript@6.0.3)
'@vitest/coverage-v8':
specifier: 5.0.3
- version: 5.0.3(vitest@5.0.3)
+ version: 5.0.3(vitest@5.0.5)
eslint:
- specifier: ^10.12.0
- version: 10.12.0(supports-color@7.2.0)
+ specifier: ^10.13.0
+ version: 10.13.0(supports-color@7.2.0)
husky:
specifier: ^9.1.7
version: 9.1.7
@@ -51,29 +51,29 @@ importers:
specifier: ^17.6.0
version: 17.6.0
prettier:
- specifier: ^3.9.9
- version: 3.9.9
+ specifier: ^3.9.10
+ version: 3.9.10
turbo:
- specifier: ^2.11.7
- version: 2.11.7
+ specifier: ^2.11.9
+ version: 2.11.9
typescript:
specifier: ^6.0.3
version: 6.0.3
vitest:
- specifier: ^5.0.3
- version: 5.0.3(@types/node@26.6.4)(@vitest/coverage-v8@5.0.3)(vite@7.3.6(@types/node@26.6.4)(yaml@2.9.1))
+ specifier: ^5.0.5
+ version: 5.0.5(@types/node@26.6.5)(@vitest/coverage-v8@5.0.3)(vite@7.3.6(@types/node@26.6.5)(yaml@2.9.1))
packages/@repo/eslint-config:
devDependencies:
'@typescript-eslint/eslint-plugin':
- specifier: ^8.71.0
- version: 8.71.0(@typescript-eslint/parser@8.71.0(eslint@10.12.0(supports-color@7.2.0))(supports-color@7.2.0)(typescript@6.0.3))(eslint@10.12.0(supports-color@7.2.0))(supports-color@7.2.0)(typescript@6.0.3)
+ specifier: ^8.71.2
+ version: 8.71.2(@typescript-eslint/parser@8.71.2(eslint@10.13.0(supports-color@7.2.0))(supports-color@7.2.0)(typescript@6.0.3))(eslint@10.13.0(supports-color@7.2.0))(supports-color@7.2.0)(typescript@6.0.3)
'@typescript-eslint/parser':
- specifier: ^8.71.0
- version: 8.71.0(eslint@10.12.0(supports-color@7.2.0))(supports-color@7.2.0)(typescript@6.0.3)
+ specifier: ^8.71.2
+ version: 8.71.2(eslint@10.13.0(supports-color@7.2.0))(supports-color@7.2.0)(typescript@6.0.3)
eslint:
- specifier: ^10.12.0
- version: 10.12.0(supports-color@7.2.0)
+ specifier: ^10.13.0
+ version: 10.13.0(supports-color@7.2.0)
packages/@repo/tsconfig: {}
@@ -572,33 +572,33 @@ packages:
cpu: [x64]
os: [win32]
- '@turbo/darwin-64@2.11.7':
- resolution: {integrity: sha512-Z2LFOxwbiJueD1miByXJS/BrW21vv6YaQXZustty5jEX4vQYw6zyh101Sz1QO7WG0mqBzKagZ/DoAeeujI0/Sw==}
+ '@turbo/darwin-64@2.11.9':
+ resolution: {integrity: sha512-OkW+EESJjo248CThWe9DfuUqzGcRwHe1DXKWRw9DSZ0lMkocKbbwNMjWVCiO+WNBcARDM0ibu0c9SbuIe4mw6w==}
cpu: [x64]
os: [darwin]
- '@turbo/darwin-arm64@2.11.7':
- resolution: {integrity: sha512-Vhv8ybgIflosNDSSRD9fNXHlCFA60dsGyTqQmc7l28SEX5jOaweCCD4BBYNd8/p0WGkw3e7tZbfA9w6FsujGvw==}
+ '@turbo/darwin-arm64@2.11.9':
+ resolution: {integrity: sha512-NIbFEogMaIyOi2egLH7XtuW0DXmPOpydnanyB3rw/WXCPYl1OAFRPHPGixIaakGnfNLey8LMmKemgNtqtFKdcg==}
cpu: [arm64]
os: [darwin]
- '@turbo/linux-64@2.11.7':
- resolution: {integrity: sha512-rAqRp3blQKk1+ylMGlZHAW0eJjVNuuGUm4ZrC6RU1Im8tLryvaO4a2zLQ/FQi1TRlmKqKV9YXBki2YeytlLbXA==}
+ '@turbo/linux-64@2.11.9':
+ resolution: {integrity: sha512-RkD/Atqqek2WNnYJlmPogZpXjAW+cSsPXDn7E0mufSNN86ClXCSKme/BBYMeIvPoFZ4egPJLF+JpYkuuNkMYhg==}
cpu: [x64]
os: [android, linux]
- '@turbo/linux-arm64@2.11.7':
- resolution: {integrity: sha512-thVYGov7S+llXAxrl3kBb/efalav0xhrjl5NHCR6AfKx14JkbqaetvbVwyss4FvZ9rt+Pv3xsTb+8SIYix8DTg==}
+ '@turbo/linux-arm64@2.11.9':
+ resolution: {integrity: sha512-iW/0YGS9D9YlgD4ad2IEEolD9PuNJGdkEI650AELLln8YaGsloiH8QyTUnajjxPufMuY/eWRWxO+PMBYsGvVlA==}
cpu: [arm64]
os: [android, linux]
- '@turbo/windows-64@2.11.7':
- resolution: {integrity: sha512-ZIoKT7J7KutgYl4bGxmmgeUQjG+7E0nY8BF9dxUOiMH2vdTsM4JQ2uSwTYFkTR2Llbg6ghGjSmuZ8LQtkLEYjg==}
+ '@turbo/windows-64@2.11.9':
+ resolution: {integrity: sha512-rg/kuQmSm9m/z8W5HYHLMSnTbLDXBs/9liVZh9YnfkGYm0DlFj2SV9/0fQy/EpJTq81O36kMb7p8Fmt9f67ocA==}
cpu: [x64]
os: [win32]
- '@turbo/windows-arm64@2.11.7':
- resolution: {integrity: sha512-88Xv2f7SLGVJ68lRRx8o375dKmnZYNdDtvlKcPA0kZpcF93eAQd8l96BKQ0/AMHG0bMJA0Z5QqoqtetxzNsC+g==}
+ '@turbo/windows-arm64@2.11.9':
+ resolution: {integrity: sha512-PgjBpLPW/WDsKzeBmNuw2QHtPxT/PtcloN3rHFTqVyMsqkLlyHVJbSusuhYoYFdi08lZ9Stryw66UOuPg/yW0w==}
cpu: [arm64]
os: [win32]
@@ -617,69 +617,69 @@ packages:
'@types/json-schema@7.0.15':
resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==}
- '@types/node@26.6.4':
- resolution: {integrity: sha512-ldVPDCzj7fsaGZrLB0NuHuTvJcsNasysBAqMolr/cgxrLd1xbqxIr3XJiPnHHJUCxj5sNF1vnRj9aWnrVh5Jcg==}
+ '@types/node@26.6.5':
+ resolution: {integrity: sha512-uMzsv9stDdofIZBx4UGh4Z9ZgXnGC9seRDscilBcTHAeOFk67MZg/k9bWVfO+bk4qZmG+l52hRnLwUiH2LnJTg==}
'@types/prompts@2.4.9':
resolution: {integrity: sha512-qTxFi6Buiu8+50/+3DGIWLHM6QuWsEKugJnnP6iv2Mc4ncxE4A/OJkjuVOA+5X0X1S/nq5VJRa8Lu+nwcvbrKA==}
- '@typescript-eslint/eslint-plugin@8.71.0':
- resolution: {integrity: sha512-pqcS9c1HxZTHt7End4nXqd0s5lJrrFzrgCkKFJrsbUnaL6M3+6oBFZaslg6Gjsl3argl2DDRFROnXARaZ2e4Nw==}
+ '@typescript-eslint/eslint-plugin@8.71.2':
+ resolution: {integrity: sha512-K72/pvT7qpm8q3k8G5u93NCSN1RcLxX5h7Gw0bQpbMXviBHeY6Nx1WEwmk9wP+eKTSQ8ecxvcgt/ZX/rB938xQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
- '@typescript-eslint/parser': ^8.71.0
+ '@typescript-eslint/parser': ^8.71.2
eslint: ^8.57.0 || ^9.0.0 || ^10.0.0
typescript: '>=4.8.4 <6.1.0'
- '@typescript-eslint/parser@8.71.0':
- resolution: {integrity: sha512-CG4nPk1f2zc8yw4pALqHsFYH2hdo+h1T9daSp21+Hnxi9LOE3GT9hAfTKJCBXVNM2GmYs1eMEP615wPoeOgk3A==}
+ '@typescript-eslint/parser@8.71.2':
+ resolution: {integrity: sha512-aTtmZjp/x3gsGHkDs04/1I8kNogBJkpQaeGaN0PfiG43NzDEmW2n+OP5im9wfsvyX0yP1UZWBrAGtDBfH9jEVw==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
eslint: ^8.57.0 || ^9.0.0 || ^10.0.0
typescript: '>=4.8.4 <6.1.0'
- '@typescript-eslint/project-service@8.71.0':
- resolution: {integrity: sha512-aABjw5rjBacYONVPaPiWOCjJu0vEF4a25iQuodlmQYL1trtLZ0X/y+2Vzl3BKI1odM4LnwLE1oUDXYp1wzx1TQ==}
+ '@typescript-eslint/project-service@8.71.2':
+ resolution: {integrity: sha512-Pd68GsLVh5ZXlcEccFPdhSOvtHZ/2WU0XsA8zmXOS3F158lVlcTLhfQ6qvtL1RzbMie0Kp8xtbVwAg4nejKPHw==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
typescript: '>=4.8.4 <6.1.0'
- '@typescript-eslint/scope-manager@8.71.0':
- resolution: {integrity: sha512-gWF0BhUcnjZxSpLE8ngS/59n2SB0J3YqRxvX1+2aoRJk9hNtHSLOV+TcarFiOr5ipXm3yc1QrI4c9YZc8zyCxw==}
+ '@typescript-eslint/scope-manager@8.71.2':
+ resolution: {integrity: sha512-YF4wgg5iUX5Obywoac27B56FhozMNFhdJSbh11H5GBAwmBtfyRhmgTQqW9tRNNmHDvsZ2CX6UGzoz+YfYn2Leg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- '@typescript-eslint/tsconfig-utils@8.71.0':
- resolution: {integrity: sha512-Z1UlWHADEK2Mlb9NpWfDeSjqoZ5EyrOv4R3eQpbkzqn/EwaIdOpXXupEA1+0ZIOSJSZZDBHG0BrQyN8zUG6Pwg==}
+ '@typescript-eslint/tsconfig-utils@8.71.2':
+ resolution: {integrity: sha512-jz49TAWokm/7yWD9/o837nYax9DyALxIPOImdImvVzo6canBCZYzin8zJyqNR5k1j9K1DE0bVvr0XYB+99uAdg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
typescript: '>=4.8.4 <6.1.0'
- '@typescript-eslint/type-utils@8.71.0':
- resolution: {integrity: sha512-i8uO1qbdxeKgRnS5sCRt6On3/nfo2d2DwQe3Yvjx543zLy7r8ySqRuPPiIIXAhS03U0v5NfAFx+rUgxFzKKwNw==}
+ '@typescript-eslint/type-utils@8.71.2':
+ resolution: {integrity: sha512-cC8UaalCViJkb3rH/xLIvidEwoFRtMZMUqDjjJMGEKaTFwYRHYBcoczlEGHuvkHEO8svRDrgZ0yQgOArFmwang==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
eslint: ^8.57.0 || ^9.0.0 || ^10.0.0
typescript: '>=4.8.4 <6.1.0'
- '@typescript-eslint/types@8.71.0':
- resolution: {integrity: sha512-cJ4OoxPGWvFnBTnSZyaU+qJzGTqPTGJY+gDchj6cRyLRdmIdt4rcsE4twj+zPfrNiWuVi38wijHzShL++Z9atQ==}
+ '@typescript-eslint/types@8.71.2':
+ resolution: {integrity: sha512-y5Ukl3oVp7e/VGxqIoEXoeb/Roj71PAJ4WG/N/RGj+eeDvKRLM15kGr9MijLbN0i03S52zxu31Z98E5gWChJKw==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- '@typescript-eslint/typescript-estree@8.71.0':
- resolution: {integrity: sha512-PEEF4G5sLLWAS5BpPrUvms4ySZkiBQQZM4z+3ReI46axK5Vqr/vXBQatJQIZZOYdGyPUAKTtsrWzpqKuU+3DEw==}
+ '@typescript-eslint/typescript-estree@8.71.2':
+ resolution: {integrity: sha512-DgNOEsl4pdYzwSL+N/Cl33tX1Hlw3FvId73LnKXfq7jnrF2viOEn7X+P7RBkkSWCVm92gnWd28GIC5vJuLREeA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
typescript: '>=4.8.4 <6.1.0'
- '@typescript-eslint/utils@8.71.0':
- resolution: {integrity: sha512-pKR/tEMVrXZG23UFKUn5BQf3zfmfk7KQceI2cGzywZ5nxM5Eu3hEJU1utjWzydtzBbcJAQhHN8iPCxobHpPcZQ==}
+ '@typescript-eslint/utils@8.71.2':
+ resolution: {integrity: sha512-RyKa1G1M9rKHDhrk+HJtiF1MvLD5Ux2JW3TSkzw+02pRALdpJb+QzG1Y5em+LvCgzGwgg8H7mBRFKljNz7ImPw==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
eslint: ^8.57.0 || ^9.0.0 || ^10.0.0
typescript: '>=4.8.4 <6.1.0'
- '@typescript-eslint/visitor-keys@8.71.0':
- resolution: {integrity: sha512-8eQ9R218XORK+KLosnf4bu/QsUXvUyVwTbArg7/0NMB1Pu87OJKvj4nhFblkYE8gQV73mW1dx1ptlPCkwRGa7A==}
+ '@typescript-eslint/visitor-keys@8.71.2':
+ resolution: {integrity: sha512-zozlN0UA32bSG2zkKAgQyRYSbEISVoyU6vvkKYo2aSny74D8Jh4e+POkJ6Lk0dlezZi5x7TtD+88Xb06IB8nhg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@vitest/coverage-v8@5.0.3':
@@ -699,10 +699,10 @@ packages:
resolution: {integrity: sha512-gUsfXZJbzPamoIY5TvHFiMMoXESBrUMo+xqaj+rYrWI69+EnvRlYBlP96ZnHPY4vX8kyUpgAnFUCg5wZG/HkDQ==}
engines: {node: '>=22'}
- '@vitest/mocker@5.0.3':
- resolution: {integrity: sha512-T8sWAIbkSyAjkwTcaEc3Iu0o9A27X1/kdXrizhZkGuSKScRQtRzclfAMpOTcGdXCsqxeWlpGy3XjqaW8CpLORg==}
+ '@vitest/mocker@5.0.5':
+ resolution: {integrity: sha512-xLL3lkDegJZw+MGoGaCCsFayDZthGgpAtr3Vziyfc4p7xH89K7KRPcRBBh/kEYm0Aqkt5DtTmkYpBtRV/FrHZg==}
peerDependencies:
- msw: ^2.4.9
+ msw: ^2.4.9 || ^3.0.0
vite: ^7.3.6
peerDependenciesMeta:
msw:
@@ -710,8 +710,8 @@ packages:
vite:
optional: true
- '@vitest/spy@5.0.3':
- resolution: {integrity: sha512-XhFysQTB8AZ+P4gMi+Lpo99vg2AZi0qKpaB9yXQl37+CaMEAPO3iH/wGVnSyL5MPERiLezpqTVtrR6UZH5GCXg==}
+ '@vitest/spy@5.0.5':
+ resolution: {integrity: sha512-lwJRExuH417257Q5wv9QYugN9IMJkoxcrKrYxGPQkBzl7wlNpTUxD/5yNX4ESKVUIShKPgkGchYPFMWOOk0wzw==}
acorn-jsx@5.3.2:
resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==}
@@ -741,8 +741,8 @@ packages:
resolution: {integrity: sha512-YovQ3rzhaLMIrDjNDMkNS01tea93qhEhG5xy8f6+R0l+dw3Ki+5sCoIoI942iuLZTHWogWktgwVDhU09iNEimQ==}
engines: {node: 20 || >=22}
- cac@7.0.0:
- resolution: {integrity: sha512-tixWYgm5ZoOD+3g6UTea91eow5z6AAHaho3g0V9CNSNb45gM8SmflpAc+GRd1InC4AqN/07Unrgp56Y94N9hJQ==}
+ cac@7.1.0:
+ resolution: {integrity: sha512-LMDU/U2yA4IPIY8KT0NsNPWEYZvAMkbgyspxJ6btJaYV+WMDOHAZCmB0lsTObiHaRS1V/ztKAl7+TSkTqXyeoA==}
engines: {node: '>=20.19.0'}
cacheable@2.5.0:
@@ -800,8 +800,8 @@ packages:
resolution: {integrity: sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==}
engines: {node: ^20.19.0 || ^22.13.0 || >=24}
- eslint@10.12.0:
- resolution: {integrity: sha512-npHjrHb2o4ehH3mE+YuxABR+0gyb0aVWCIolgJDArwCiHEIsonBm3ZKjel5b0U5+a+MbEvIyRCGCzD3eKKK2NA==}
+ eslint@10.13.0:
+ resolution: {integrity: sha512-UohDjD4zSzEwhf58M3O7vc/ycc8O1I7dNlhtD0WxE8Px8EHNJKtUwzBqrzeGhisRuv2ag4sAYswszCJRgKXYUg==}
engines: {node: ^20.19.0 || ^22.13.0 || >=24}
hasBin: true
peerDependencies:
@@ -961,8 +961,8 @@ packages:
resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==}
engines: {node: '>=6'}
- launch-editor@2.14.1:
- resolution: {integrity: sha512-QWBrQsMpH7gPr965dsKD/3cKWiNoTjpATQf++Xq63N6sKRGMwlVXz41O1IZTMfZQgBctD/K5Zt06+/I6pP6+HA==}
+ launch-editor@2.14.2:
+ resolution: {integrity: sha512-NHJEb30MGBCkmZXLZwz25t37QR4aY03ZzPYUJXOJaOa92uWwExI9SBQUuIznBYc1xkD7cJNGX7oc3Nl3sq2kQQ==}
levn@0.4.1:
resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==}
@@ -1002,6 +1002,10 @@ packages:
resolution: {integrity: sha512-XrsrhT5sybtKI6wakr2SPOlGZWWYbUXZ7a0jT8/QOeAPau+1X/bSegNe5YR75oJmEZQbKningirmGOEJCIk61Q==}
engines: {node: '>=12.20.0'}
+ obug@3.0.0:
+ resolution: {integrity: sha512-5vvB5+W7ePv+p3uqxi+RcW1XAzLW0/hxt3/4X4Lc4qHudzOhmBiBwOY6DRob4WnanAEGvNcLjF+KNOufrUoEQw==}
+ engines: {node: '>=12.20.0'}
+
optionator@0.9.4:
resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==}
engines: {node: '>= 0.8.0'}
@@ -1040,8 +1044,8 @@ packages:
resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==}
engines: {node: '>= 0.8.0'}
- prettier@3.9.9:
- resolution: {integrity: sha512-Z/CJHIkdujO/OtN7nXUii0Rf3VT5SRuhjBA82Xvu2XhBUgX3nhP67T0LHceBdQLex7OOFGTox+Q5Yg8Jk2Qivg==}
+ prettier@3.9.10:
+ resolution: {integrity: sha512-skGHTH1Yb9QvaTC4hWnRTzEYtCpApF0UMBPz+t/0ZPzP8ihefo/btKd+QA7pUE0fEwA1SbS/NmhyEcstdXOIdA==}
engines: {node: '>=14'}
hasBin: true
@@ -1100,8 +1104,8 @@ packages:
resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
engines: {node: '>=8'}
- tinybench@6.2.0:
- resolution: {integrity: sha512-78U2TlB2CnVenajOFzf3BKSm0J6oz5L0NV7g32LCPccvYc0lbWvys4d3uUUCS2B1N8PAf2+aekR8i1KbC3HO7Q==}
+ tinybench@6.2.2:
+ resolution: {integrity: sha512-nIZ2N2dFpjBsg2hgitKu7mA+FvsIJuGJOwysRngmVRRmWgR/UyPjwJj8c/fT/dhm8EkHnF5EOogRf+0Z2qrimA==}
engines: {node: '>=20.0.0'}
tinyexec@1.3.1:
@@ -1122,8 +1126,8 @@ packages:
peerDependencies:
typescript: '>=4.8.4'
- turbo@2.11.7:
- resolution: {integrity: sha512-RhXHbqfvY6o3xt/zSHCwSNwLrZlXiqHzewi4eAj9PtZ1T1CqgMJ2yIDb7SKPTG9IikTm925mfzL6hldQVdyNWw==}
+ turbo@2.11.9:
+ resolution: {integrity: sha512-k2ev5dv9OgP2pJwaPuydkZdid+haX2U5TDGcPtpAz0gb0nbRR3eXY/cpfrlvHih52YRTxWIcRVKc0ri3C2Scrg==}
hasBin: true
type-check@0.4.0:
@@ -1181,20 +1185,20 @@ packages:
yaml:
optional: true
- vitest@5.0.3:
- resolution: {integrity: sha512-xMw97S3rjdtj5dkVat7jCsqWBpvchs3RlpQctUqwJD0KkERk40vz2fJ77lDwW/Vzh/pk18eItYAzkodhSes3jQ==}
+ vitest@5.0.5:
+ resolution: {integrity: sha512-cPODOMF8YnkiiYtDdHo6n4wWmBrOBBbOIYH2d33M4l3CdNn72h+qMmO6uXffUN6A5AZFXNND/d+krS9mgkXRfg==}
engines: {node: ^22.12.0 || ^24.0.0 || >=26.0.0}
hasBin: true
peerDependencies:
'@edge-runtime/vm': '*'
'@opentelemetry/api': ^1.9.0
'@types/node': ^22.0.0 || >=24.0.0
- '@vitest/browser-playwright': 5.0.3
- '@vitest/browser-preview': 5.0.3
+ '@vitest/browser-playwright': 5.0.5
+ '@vitest/browser-preview': 5.0.5
'@vitest/browser-webdriverio': ^5.0.0-beta.5 || >=5.0.0
- '@vitest/coverage-istanbul': 5.0.3
- '@vitest/coverage-v8': 5.0.3
- '@vitest/ui': 5.0.3
+ '@vitest/coverage-istanbul': 5.0.5
+ '@vitest/coverage-v8': 5.0.5
+ '@vitest/ui': 5.0.5
happy-dom: '*'
jsdom: '*'
vite: ^7.3.6
@@ -1314,9 +1318,9 @@ snapshots:
'@clack/prompts': 1.8.1
'@manypkg/get-packages': 3.1.0
'@pnpm/deps.graph-sequencer': 1100.0.1
- cac: 7.0.0
+ cac: 7.1.0
import-meta-resolve: 4.2.0
- launch-editor: 2.14.1
+ launch-editor: 2.14.2
package-manager-detector: 1.9.0
semver: 7.8.5
tinyexec: 1.3.1
@@ -1468,9 +1472,9 @@ snapshots:
'@esbuild/win32-x64@0.28.1':
optional: true
- '@eslint-community/eslint-utils@4.10.1(eslint@10.12.0(supports-color@7.2.0))':
+ '@eslint-community/eslint-utils@4.10.1(eslint@10.13.0(supports-color@7.2.0))':
dependencies:
- eslint: 10.12.0(supports-color@7.2.0)
+ eslint: 10.13.0(supports-color@7.2.0)
eslint-visitor-keys: 3.4.3
'@eslint-community/regexpp@4.12.2': {}
@@ -1623,22 +1627,22 @@ snapshots:
'@rollup/rollup-win32-x64-msvc@4.62.2':
optional: true
- '@turbo/darwin-64@2.11.7':
+ '@turbo/darwin-64@2.11.9':
optional: true
- '@turbo/darwin-arm64@2.11.7':
+ '@turbo/darwin-arm64@2.11.9':
optional: true
- '@turbo/linux-64@2.11.7':
+ '@turbo/linux-64@2.11.9':
optional: true
- '@turbo/linux-arm64@2.11.7':
+ '@turbo/linux-arm64@2.11.9':
optional: true
- '@turbo/windows-64@2.11.7':
+ '@turbo/windows-64@2.11.9':
optional: true
- '@turbo/windows-arm64@2.11.7':
+ '@turbo/windows-arm64@2.11.9':
optional: true
'@types/chai@5.2.3':
@@ -1654,24 +1658,24 @@ snapshots:
'@types/json-schema@7.0.15': {}
- '@types/node@26.6.4':
+ '@types/node@26.6.5':
dependencies:
undici-types: 8.9.0
'@types/prompts@2.4.9':
dependencies:
- '@types/node': 26.6.4
+ '@types/node': 26.6.5
kleur: 3.0.3
- '@typescript-eslint/eslint-plugin@8.71.0(@typescript-eslint/parser@8.71.0(eslint@10.12.0(supports-color@7.2.0))(supports-color@7.2.0)(typescript@6.0.3))(eslint@10.12.0(supports-color@7.2.0))(supports-color@7.2.0)(typescript@6.0.3)':
+ '@typescript-eslint/eslint-plugin@8.71.2(@typescript-eslint/parser@8.71.2(eslint@10.13.0(supports-color@7.2.0))(supports-color@7.2.0)(typescript@6.0.3))(eslint@10.13.0(supports-color@7.2.0))(supports-color@7.2.0)(typescript@6.0.3)':
dependencies:
'@eslint-community/regexpp': 4.12.2
- '@typescript-eslint/parser': 8.71.0(eslint@10.12.0(supports-color@7.2.0))(supports-color@7.2.0)(typescript@6.0.3)
- '@typescript-eslint/scope-manager': 8.71.0
- '@typescript-eslint/type-utils': 8.71.0(eslint@10.12.0(supports-color@7.2.0))(supports-color@7.2.0)(typescript@6.0.3)
- '@typescript-eslint/utils': 8.71.0(eslint@10.12.0(supports-color@7.2.0))(supports-color@7.2.0)(typescript@6.0.3)
- '@typescript-eslint/visitor-keys': 8.71.0
- eslint: 10.12.0(supports-color@7.2.0)
+ '@typescript-eslint/parser': 8.71.2(eslint@10.13.0(supports-color@7.2.0))(supports-color@7.2.0)(typescript@6.0.3)
+ '@typescript-eslint/scope-manager': 8.71.2
+ '@typescript-eslint/type-utils': 8.71.2(eslint@10.13.0(supports-color@7.2.0))(supports-color@7.2.0)(typescript@6.0.3)
+ '@typescript-eslint/utils': 8.71.2(eslint@10.13.0(supports-color@7.2.0))(supports-color@7.2.0)(typescript@6.0.3)
+ '@typescript-eslint/visitor-keys': 8.71.2
+ eslint: 10.13.0(supports-color@7.2.0)
ignore: 7.0.12
natural-compare: 1.4.0
ts-api-utils: 2.5.0(typescript@6.0.3)
@@ -1679,56 +1683,56 @@ snapshots:
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/parser@8.71.0(eslint@10.12.0(supports-color@7.2.0))(supports-color@7.2.0)(typescript@6.0.3)':
+ '@typescript-eslint/parser@8.71.2(eslint@10.13.0(supports-color@7.2.0))(supports-color@7.2.0)(typescript@6.0.3)':
dependencies:
- '@typescript-eslint/scope-manager': 8.71.0
- '@typescript-eslint/types': 8.71.0
- '@typescript-eslint/typescript-estree': 8.71.0(supports-color@7.2.0)(typescript@6.0.3)
- '@typescript-eslint/visitor-keys': 8.71.0
+ '@typescript-eslint/scope-manager': 8.71.2
+ '@typescript-eslint/types': 8.71.2
+ '@typescript-eslint/typescript-estree': 8.71.2(supports-color@7.2.0)(typescript@6.0.3)
+ '@typescript-eslint/visitor-keys': 8.71.2
debug: 4.4.3(supports-color@7.2.0)
- eslint: 10.12.0(supports-color@7.2.0)
+ eslint: 10.13.0(supports-color@7.2.0)
typescript: 6.0.3
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/project-service@8.71.0(supports-color@7.2.0)(typescript@6.0.3)':
+ '@typescript-eslint/project-service@8.71.2(supports-color@7.2.0)(typescript@6.0.3)':
dependencies:
- '@typescript-eslint/tsconfig-utils': 8.71.0(typescript@6.0.3)
- '@typescript-eslint/types': 8.71.0
+ '@typescript-eslint/tsconfig-utils': 8.71.2(typescript@6.0.3)
+ '@typescript-eslint/types': 8.71.2
debug: 4.4.3(supports-color@7.2.0)
typescript: 6.0.3
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/scope-manager@8.71.0':
+ '@typescript-eslint/scope-manager@8.71.2':
dependencies:
- '@typescript-eslint/types': 8.71.0
- '@typescript-eslint/visitor-keys': 8.71.0
+ '@typescript-eslint/types': 8.71.2
+ '@typescript-eslint/visitor-keys': 8.71.2
- '@typescript-eslint/tsconfig-utils@8.71.0(typescript@6.0.3)':
+ '@typescript-eslint/tsconfig-utils@8.71.2(typescript@6.0.3)':
dependencies:
typescript: 6.0.3
- '@typescript-eslint/type-utils@8.71.0(eslint@10.12.0(supports-color@7.2.0))(supports-color@7.2.0)(typescript@6.0.3)':
+ '@typescript-eslint/type-utils@8.71.2(eslint@10.13.0(supports-color@7.2.0))(supports-color@7.2.0)(typescript@6.0.3)':
dependencies:
- '@typescript-eslint/types': 8.71.0
- '@typescript-eslint/typescript-estree': 8.71.0(supports-color@7.2.0)(typescript@6.0.3)
- '@typescript-eslint/utils': 8.71.0(eslint@10.12.0(supports-color@7.2.0))(supports-color@7.2.0)(typescript@6.0.3)
+ '@typescript-eslint/types': 8.71.2
+ '@typescript-eslint/typescript-estree': 8.71.2(supports-color@7.2.0)(typescript@6.0.3)
+ '@typescript-eslint/utils': 8.71.2(eslint@10.13.0(supports-color@7.2.0))(supports-color@7.2.0)(typescript@6.0.3)
debug: 4.4.3(supports-color@7.2.0)
- eslint: 10.12.0(supports-color@7.2.0)
+ eslint: 10.13.0(supports-color@7.2.0)
ts-api-utils: 2.5.0(typescript@6.0.3)
typescript: 6.0.3
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/types@8.71.0': {}
+ '@typescript-eslint/types@8.71.2': {}
- '@typescript-eslint/typescript-estree@8.71.0(supports-color@7.2.0)(typescript@6.0.3)':
+ '@typescript-eslint/typescript-estree@8.71.2(supports-color@7.2.0)(typescript@6.0.3)':
dependencies:
- '@typescript-eslint/project-service': 8.71.0(supports-color@7.2.0)(typescript@6.0.3)
- '@typescript-eslint/tsconfig-utils': 8.71.0(typescript@6.0.3)
- '@typescript-eslint/types': 8.71.0
- '@typescript-eslint/visitor-keys': 8.71.0
+ '@typescript-eslint/project-service': 8.71.2(supports-color@7.2.0)(typescript@6.0.3)
+ '@typescript-eslint/tsconfig-utils': 8.71.2(typescript@6.0.3)
+ '@typescript-eslint/types': 8.71.2
+ '@typescript-eslint/visitor-keys': 8.71.2
debug: 4.4.3(supports-color@7.2.0)
minimatch: 10.2.6
semver: 7.8.5
@@ -1738,23 +1742,23 @@ snapshots:
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/utils@8.71.0(eslint@10.12.0(supports-color@7.2.0))(supports-color@7.2.0)(typescript@6.0.3)':
+ '@typescript-eslint/utils@8.71.2(eslint@10.13.0(supports-color@7.2.0))(supports-color@7.2.0)(typescript@6.0.3)':
dependencies:
- '@eslint-community/eslint-utils': 4.10.1(eslint@10.12.0(supports-color@7.2.0))
- '@typescript-eslint/scope-manager': 8.71.0
- '@typescript-eslint/types': 8.71.0
- '@typescript-eslint/typescript-estree': 8.71.0(supports-color@7.2.0)(typescript@6.0.3)
- eslint: 10.12.0(supports-color@7.2.0)
+ '@eslint-community/eslint-utils': 4.10.1(eslint@10.13.0(supports-color@7.2.0))
+ '@typescript-eslint/scope-manager': 8.71.2
+ '@typescript-eslint/types': 8.71.2
+ '@typescript-eslint/typescript-estree': 8.71.2(supports-color@7.2.0)(typescript@6.0.3)
+ eslint: 10.13.0(supports-color@7.2.0)
typescript: 6.0.3
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/visitor-keys@8.71.0':
+ '@typescript-eslint/visitor-keys@8.71.2':
dependencies:
- '@typescript-eslint/types': 8.71.0
+ '@typescript-eslint/types': 8.71.2
eslint-visitor-keys: 5.0.1
- '@vitest/coverage-v8@5.0.3(vitest@5.0.3)':
+ '@vitest/coverage-v8@5.0.3(vitest@5.0.5)':
dependencies:
'@bcoe/v8-coverage': 1.0.2
'@vitest/istanbul-lib-coverage': 1.0.2
@@ -1764,7 +1768,7 @@ snapshots:
obug: 2.2.1
std-env: 4.3.0
tinyrainbow: 3.2.0
- vitest: 5.0.3(@types/node@26.6.4)(@vitest/coverage-v8@5.0.3)(vite@7.3.6(@types/node@26.6.4)(yaml@2.9.1))
+ vitest: 5.0.5(@types/node@26.6.5)(@vitest/coverage-v8@5.0.3)(vite@7.3.6(@types/node@26.6.5)(yaml@2.9.1))
'@vitest/istanbul-lib-coverage@1.0.2': {}
@@ -1772,16 +1776,16 @@ snapshots:
dependencies:
'@vitest/istanbul-lib-coverage': 1.0.2
- '@vitest/mocker@5.0.3(vite@7.3.6(@types/node@26.6.4)(yaml@2.9.1))':
+ '@vitest/mocker@5.0.5(vite@7.3.6(@types/node@26.6.5)(yaml@2.9.1))':
dependencies:
'@jridgewell/trace-mapping': 0.3.31
- '@vitest/spy': 5.0.3
+ '@vitest/spy': 5.0.5
estree-walker: 3.0.3
magic-string: 1.4.3
optionalDependencies:
- vite: 7.3.6(@types/node@26.6.4)(yaml@2.9.1)
+ vite: 7.3.6(@types/node@26.6.5)(yaml@2.9.1)
- '@vitest/spy@5.0.3': {}
+ '@vitest/spy@5.0.5': {}
acorn-jsx@5.3.2(acorn@8.19.0):
dependencies:
@@ -1810,7 +1814,7 @@ snapshots:
dependencies:
balanced-match: 4.0.4
- cac@7.0.0: {}
+ cac@7.1.0: {}
cacheable@2.5.0:
dependencies:
@@ -1884,9 +1888,9 @@ snapshots:
eslint-visitor-keys@5.0.1: {}
- eslint@10.12.0(supports-color@7.2.0):
+ eslint@10.13.0(supports-color@7.2.0):
dependencies:
- '@eslint-community/eslint-utils': 4.10.1(eslint@10.12.0(supports-color@7.2.0))
+ '@eslint-community/eslint-utils': 4.10.1(eslint@10.13.0(supports-color@7.2.0))
'@eslint-community/regexpp': 4.12.2
'@eslint/config-array': 0.23.5(supports-color@7.2.0)
'@eslint/config-helpers': 0.7.0
@@ -2038,7 +2042,7 @@ snapshots:
kleur@3.0.3: {}
- launch-editor@2.14.1:
+ launch-editor@2.14.2:
dependencies:
picocolors: 1.1.1
shell-quote: 1.12.0
@@ -2082,6 +2086,8 @@ snapshots:
obug@2.2.1: {}
+ obug@3.0.0: {}
+
optionator@0.9.4:
dependencies:
deep-is: 0.1.4
@@ -2117,7 +2123,7 @@ snapshots:
prelude-ls@1.2.1: {}
- prettier@3.9.9: {}
+ prettier@3.9.10: {}
prompts@2.4.2:
dependencies:
@@ -2186,7 +2192,7 @@ snapshots:
has-flag: 4.0.0
optional: true
- tinybench@6.2.0: {}
+ tinybench@6.2.2: {}
tinyexec@1.3.1: {}
@@ -2201,14 +2207,14 @@ snapshots:
dependencies:
typescript: 6.0.3
- turbo@2.11.7:
+ turbo@2.11.9:
optionalDependencies:
- '@turbo/darwin-64': 2.11.7
- '@turbo/darwin-arm64': 2.11.7
- '@turbo/linux-64': 2.11.7
- '@turbo/linux-arm64': 2.11.7
- '@turbo/windows-64': 2.11.7
- '@turbo/windows-arm64': 2.11.7
+ '@turbo/darwin-64': 2.11.9
+ '@turbo/darwin-arm64': 2.11.9
+ '@turbo/linux-64': 2.11.9
+ '@turbo/linux-arm64': 2.11.9
+ '@turbo/windows-64': 2.11.9
+ '@turbo/windows-arm64': 2.11.9
type-check@0.4.0:
dependencies:
@@ -2222,7 +2228,7 @@ snapshots:
dependencies:
punycode: 2.3.1
- vite@7.3.6(@types/node@26.6.4)(yaml@2.9.1):
+ vite@7.3.6(@types/node@26.6.5)(yaml@2.9.1):
dependencies:
esbuild: 0.28.1
fdir: 6.5.0(picomatch@4.0.7)
@@ -2231,29 +2237,29 @@ snapshots:
rollup: 4.62.2
tinyglobby: 0.2.17
optionalDependencies:
- '@types/node': 26.6.4
+ '@types/node': 26.6.5
fsevents: 2.3.3
yaml: 2.9.1
- vitest@5.0.3(@types/node@26.6.4)(@vitest/coverage-v8@5.0.3)(vite@7.3.6(@types/node@26.6.4)(yaml@2.9.1)):
+ vitest@5.0.5(@types/node@26.6.5)(@vitest/coverage-v8@5.0.3)(vite@7.3.6(@types/node@26.6.5)(yaml@2.9.1)):
dependencies:
'@types/chai': 5.2.3
- '@vitest/mocker': 5.0.3(vite@7.3.6(@types/node@26.6.4)(yaml@2.9.1))
+ '@vitest/mocker': 5.0.5(vite@7.3.6(@types/node@26.6.5)(yaml@2.9.1))
chai: 6.3.0
es-module-lexer: 2.3.2
expect-type: 1.4.0
magic-string: 1.4.3
- obug: 2.2.1
+ obug: 3.0.0
picomatch: 4.0.7
std-env: 4.3.0
- tinybench: 6.2.0
+ tinybench: 6.2.2
tinyexec: 1.3.1
tinyglobby: 0.2.17
- vite: 7.3.6(@types/node@26.6.4)(yaml@2.9.1)
+ vite: 7.3.6(@types/node@26.6.5)(yaml@2.9.1)
why-is-node-running: 3.2.1
optionalDependencies:
- '@types/node': 26.6.4
- '@vitest/coverage-v8': 5.0.3(vitest@5.0.3)
+ '@types/node': 26.6.5
+ '@vitest/coverage-v8': 5.0.3(vitest@5.0.5)
transitivePeerDependencies:
- msw