From 078af1f3f5b0b24f4a9274321bbbda1b439be77f Mon Sep 17 00:00:00 2001 From: FIlip Dorian Pindej Date: Sat, 21 Mar 2026 03:06:29 +0100 Subject: [PATCH 1/3] feat(templates): sync Claude Code setup from netrock PR #462 Sync comprehensive Claude Code improvements to the generator template: - CLAUDE.md: Add Delegation Rule (orchestrator does not write app code directly), update Agent Team intro, add autonomous behavior rows - settings.json: Add full permissions section (42 allow, 30 deny) with cross-platform coverage (Unix, PowerShell, cmd.exe) - Rules files: 5 concise quick-reference files extending CLAUDE.md - Skills: /verify and /address-review - auto-format.mjs: Fix shell injection (execFileSync with args array) - validate-bash.mjs: Add npm install block, fix -- separator bypass - stop-quality-gate.mjs: Add branch check, fix output schema - settings.local.json.example: Template for user-specific overrides - .gitignore: Add settings.local.json entry --- templates/.claude/hooks/auto-format.mjs | 7 +- templates/.claude/hooks/stop-quality-gate.mjs | 7 +- templates/.claude/hooks/validate-bash.mjs | 6 +- templates/.claude/rules/backend-api.md | 21 +++++ templates/.claude/rules/database.md | 25 ++++++ templates/.claude/rules/frontend-svelte.md | 24 ++++++ templates/.claude/rules/infrastructure.md | 22 +++++ templates/.claude/rules/testing.md | 25 ++++++ templates/.claude/settings.json | 85 +++++++++++++++++++ templates/.claude/settings.local.json.example | 15 ++++ .../.claude/skills/address-review/SKILL.md | 73 ++++++++++++++++ templates/.claude/skills/verify/SKILL.md | 22 +++++ templates/.gitignore | 3 + templates/CLAUDE.md | 21 ++++- 14 files changed, 350 insertions(+), 6 deletions(-) create mode 100644 templates/.claude/rules/backend-api.md create mode 100644 templates/.claude/rules/database.md create mode 100644 templates/.claude/rules/frontend-svelte.md create mode 100644 templates/.claude/rules/infrastructure.md create mode 100644 templates/.claude/rules/testing.md create mode 100644 templates/.claude/settings.local.json.example create mode 100644 templates/.claude/skills/address-review/SKILL.md create mode 100644 templates/.claude/skills/verify/SKILL.md diff --git a/templates/.claude/hooks/auto-format.mjs b/templates/.claude/hooks/auto-format.mjs index 5a2cb07..11e0d89 100644 --- a/templates/.claude/hooks/auto-format.mjs +++ b/templates/.claude/hooks/auto-format.mjs @@ -2,7 +2,7 @@ // PostToolUse hook: auto-formats files after Write|Edit operations import { readFileSync, existsSync, readdirSync } from 'fs'; -import { execSync } from 'child_process'; +import { execFileSync } from 'child_process'; import { resolve, extname } from 'path'; let input; @@ -25,8 +25,9 @@ try { const backendDir = resolve(projectDir, 'src/backend'); const slnx = readdirSync(backendDir).find((f) => f.endsWith('.slnx')); if (slnx) { - execSync( - `dotnet format "${resolve(backendDir, slnx)}" --include "${filePath}" --no-restore`, + execFileSync( + 'dotnet', + ['format', resolve(backendDir, slnx), '--include', filePath, '--no-restore'], { stdio: 'ignore' }, ); } diff --git a/templates/.claude/hooks/stop-quality-gate.mjs b/templates/.claude/hooks/stop-quality-gate.mjs index c0da964..85ec696 100644 --- a/templates/.claude/hooks/stop-quality-gate.mjs +++ b/templates/.claude/hooks/stop-quality-gate.mjs @@ -12,6 +12,12 @@ const git = (cmd) => let warnings = ''; try { + // Check if on main/master branch + const branch = git('git rev-parse --abbrev-ref HEAD').trim(); + if (branch === 'main' || branch === 'master') { + warnings += `On ${branch} branch! Create a feature branch before committing. `; + } + // Check for uncommitted changes let hasChanges = false; try { @@ -47,7 +53,6 @@ try { if (warnings) { console.log( JSON.stringify({ - hookSpecificOutput: { hookEventName: 'Stop' }, systemMessage: `Quality gate: ${warnings}`, }), ); diff --git a/templates/.claude/hooks/validate-bash.mjs b/templates/.claude/hooks/validate-bash.mjs index 0dd7057..03189d2 100644 --- a/templates/.claude/hooks/validate-bash.mjs +++ b/templates/.claude/hooks/validate-bash.mjs @@ -15,6 +15,10 @@ const command = input?.tool_input?.command; if (!command) process.exit(0); const blocks = [ + { + pattern: /(^|[;&|])\s*npm\s+install\b/, + msg: 'Use pnpm, not npm. Run: pnpm install', + }, { pattern: /git\s+push\s+.*--force(?!-)/, msg: 'Force push blocked. Use --force-with-lease if you must, or ask the user first.', @@ -32,7 +36,7 @@ const blocks = [ msg: 'git clean blocked - this removes untracked files permanently.', }, { - pattern: /git\s+(checkout|restore)\s+\.\s*$/m, + pattern: /git\s+(checkout|restore)\s+(--\s+)?\.\s*$/m, msg: 'Discarding all changes blocked. Specify individual files.', }, { diff --git a/templates/.claude/rules/backend-api.md b/templates/.claude/rules/backend-api.md new file mode 100644 index 0000000..b8a6643 --- /dev/null +++ b/templates/.claude/rules/backend-api.md @@ -0,0 +1,21 @@ +# Backend API Rules + +Extends CLAUDE.md Hard Rules with implementation patterns. + +## Error Handling +- `ProblemFactory.Create(result.Error, result.ErrorType)` for error responses - never `NotFound()`, `BadRequest()`, or anonymous objects +- Client-facing error messages: `ErrorMessages.*` constants only - runtime values go in `ILogger`, never in `Result.Failure()` + +## Controllers +- Authenticated endpoints extend `ApiController` - public endpoints use `ControllerBase` directly +- Always: `/// `, `[ProducesResponseType]` per status code, `CancellationToken` as last param +- Never `/// ` - it leaks into OpenAPI `requestBody.description` +- `[ProducesResponseType]` without `typeof(...)` on error codes (400, 401, 403, 404, 429) + +## Authorization +- `[RequirePermission("permission.name")]` on actions - never class-level `[Authorize(Roles)]` on permission controllers +- Role hierarchy enforced: cannot manage users at/above your rank + +## Entities +- Extend `BaseEntity`, private setters, invariants via methods, protected parameterless ctor for EF +- Soft delete via `entity.SoftDelete()` / `entity.Restore()` - never set `IsDeleted` directly diff --git a/templates/.claude/rules/database.md b/templates/.claude/rules/database.md new file mode 100644 index 0000000..7ce9509 --- /dev/null +++ b/templates/.claude/rules/database.md @@ -0,0 +1,25 @@ +# Database Rules + +Extends CLAUDE.md with EF Core patterns and commands. + +## Entity Configuration +- Inherit `BaseEntityConfiguration` (public abstract), override `ConfigureEntity` +- Derived configurations are `internal` - auto-discovered via `ApplyConfigurationsFromAssembly()` +- Default `public` schema - named schemas only for existing grouped features (e.g., `"auth"`) +- `.HasComment()` on all enum columns documenting values +- Boolean naming: `Is*`/`Has*` in C#, prefix-free column names via `HasColumnName` + +## Migrations +- Command: `dotnet ef migrations add {Name} --project src/backend/MyProject.Infrastructure --startup-project src/backend/MyProject.WebApi --output-dir Persistence/Migrations` +- Seeding: roles via `AppRoles.All` (reflection), permissions via `SeedRolePermissionsAsync()` + +## Repository Pattern +- `IBaseEntityRepository` for CRUD with automatic soft-delete filtering (global query filter) +- Custom repos: extend `IBaseEntityRepository` in Application, implement in Infrastructure +- Never expose `IQueryable` across layer boundaries +- Pagination: `Paginate(pageNumber, pageSize)` extension on `IQueryable` + +## Query Rules +- No string interpolation in LINQ/SQL queries - parameterized only +- `IReadOnlyList` on public interfaces - never expose `List` or `T[]` +- `HybridCache` for caching with keys from `CacheKeys` constants diff --git a/templates/.claude/rules/frontend-svelte.md b/templates/.claude/rules/frontend-svelte.md new file mode 100644 index 0000000..ab02203 --- /dev/null +++ b/templates/.claude/rules/frontend-svelte.md @@ -0,0 +1,24 @@ +# Frontend Svelte Rules + +Extends CLAUDE.md Hard Rules with implementation patterns. + +## Svelte 5 +- Reactive state in `.svelte.ts` files in `$lib/state/` only - never mix with pure `.ts` utils + +## API Client +- File uploads: native `fetch()` with `FormData` - not `browserClient` (openapi-fetch breaks with multipart) +- Error handling: `getErrorMessage(error, fallback)` for simple errors, `handleMutationError()` for forms with validation + +## Styling +- `h-dvh` not `h-screen` for full-height layouts +- Content grids: `lg:grid-cols-2` (not `xl:`), page content: `max-w-7xl mx-auto` +- Buttons: default size with `w-full sm:w-auto`, right-aligned via `sm:justify-end` +- Animations with `motion-safe:` prefix + +## TypeScript +- `noUncheckedIndexedAccess: true` - guard array/object index access + +## i18n +- Keys: `{domain}_{feature}_{element}`, add to correct feature file in ALL locale directories +- Import: `import * as m from '$lib/paraglide/messages'` +- Paraglide module errors in svelte-check are expected (generated at build time) - ignore them diff --git a/templates/.claude/rules/infrastructure.md b/templates/.claude/rules/infrastructure.md new file mode 100644 index 0000000..3c86c7a --- /dev/null +++ b/templates/.claude/rules/infrastructure.md @@ -0,0 +1,22 @@ +# Infrastructure Rules + +Extends CLAUDE.md with Aspire, NuGet, and Docker patterns. + +## Aspire (Local Dev) +- Run: `dotnet run --project src/backend/MyProject.AppHost` +- Launches PostgreSQL, MinIO, MailPit, API, and Frontend +- Logging: Serilog bridges to OTEL via `writeToProviders: true` - do NOT add `Serilog.Sinks.OpenTelemetry` (causes duplicate logs) + +## NuGet +- To add: `` in `Directory.Packages.props`, `` in `.csproj` + +## Docker Security +- Read-only root filesystem, no-new-privileges, drop all capabilities +- Secrets in env vars or `.env` - never in code or committed config +- Database credentials never in connection strings in logs +- Health check endpoints must not leak sensitive info + +## Options Pattern +- `public sealed class {Name}Options` with `const string SectionName` +- `[Required]` on mandatory fields, `string.Empty` default for required strings +- Register with `BindConfiguration`, `ValidateDataAnnotations`, `ValidateOnStart` diff --git a/templates/.claude/rules/testing.md b/templates/.claude/rules/testing.md new file mode 100644 index 0000000..e4c8ee7 --- /dev/null +++ b/templates/.claude/rules/testing.md @@ -0,0 +1,25 @@ +# Testing Rules + +Extends CLAUDE.md with test project structure and patterns. + +## Backend Test Projects +- `Unit.Tests` - pure logic (Shared, Domain, Application), no mocks, no DI +- `Component.Tests` - service logic with `TestDbContextFactory` (InMemory), `NSubstitute`, `IdentityMockHelpers` +- `Api.Tests` - full HTTP pipeline with `CustomWebApplicationFactory`, `TestAuthHandler` +- `Architecture.Tests` - layer deps, naming, visibility via NetArchTest + +## Backend API Test Auth +- Default: `"Authorization", "Test"` header (basic user) +- Specific permissions: `TestAuth.WithPermissions(...)` +- Superuser: `TestAuth.Superuser()` +- Response contracts: frozen records in `Contracts/ResponseContracts.cs` + +## Frontend Testing +- Co-locate: `foo.ts` -> `foo.test.ts` +- Explicit imports: `import { describe, it, expect, vi } from 'vitest'` +- Default env is `node` - add `// @vitest-environment jsdom` for DOM tests +- `restoreMocks: true` handles cleanup globally - no manual restore needed + +## General +- No conditional tests - always assert deterministic outcomes +- No `any` in test code - type mocks properly diff --git a/templates/.claude/settings.json b/templates/.claude/settings.json index 6914ec1..6c9e897 100644 --- a/templates/.claude/settings.json +++ b/templates/.claude/settings.json @@ -1,4 +1,89 @@ { + "permissions": { + "allow": [ + "Bash(pnpm *)", + "Bash(pnpm)", + "Bash(dotnet *)", + "Bash(git status*)", + "Bash(git diff*)", + "Bash(git log*)", + "Bash(git branch*)", + "Bash(git checkout*)", + "Bash(git switch*)", + "Bash(git add *)", + "Bash(git commit *)", + "Bash(git push *)", + "Bash(git rebase*)", + "Bash(git stash*)", + "Bash(git cat-file*)", + "Bash(git rev-parse*)", + "Bash(git show *)", + "Bash(git fetch*)", + "Bash(git ls-files*)", + "Bash(git merge *)", + "Bash(git tag *)", + "Bash(git remote *)", + "Bash(gh pr *)", + "Bash(gh issue *)", + "Bash(gh api *)", + "Bash(gh repo view*)", + "Bash(gh run *)", + "Bash(gh release *)", + "Bash(ls *)", + "Bash(mkdir *)", + "Bash(docker *)", + "Bash(which *)", + "Bash(head *)", + "Bash(tail *)", + "Bash(wc *)", + "Write(*.env.example)", + "Write(*.env.test)", + "Edit(*.env.example)", + "Edit(*.env.test)" + ], + "deny": [ + "Bash(git push --force *main*)", + "Bash(git push --force *master*)", + "Bash(git push origin main*)", + "Bash(git push origin master*)", + "Bash(git push * HEAD:main*)", + "Bash(git push * HEAD:master*)", + "Bash(gh auth *)", + "Bash(gh secret *)", + "Bash(gh repo delete*)", + "Bash(gh repo fork*)", + "Bash(gh ssh-key *)", + "Bash(gh gpg-key *)", + "Bash(gh api *--method DELETE*)", + "Bash(gh api *-X DELETE*)", + "Bash(gh repo edit*)", + "Bash(rm -rf /)", + "Bash(rm -rf ~*)", + "Bash(rm -rf ..*)", + "Bash(rm -rf src)", + "Bash(git checkout main && git merge*)", + "Bash(git checkout master && git merge*)", + "Bash(git switch main && git merge*)", + "Bash(git switch master && git merge*)", + "Bash(curl * | sh*)", + "Bash(curl * | bash*)", + "Bash(wget * | sh*)", + "Bash(Remove-Item * -Recurse*)", + "Bash(rd /s *)", + "Bash(rmdir /s *)", + "Bash(del /s *)", + "Bash(Invoke-Expression *)", + "Bash(iex *)", + "Bash(iwr * | iex*)", + "Bash(Invoke-WebRequest * | Invoke-Expression*)", + "Write(.env)", + "Write(.env.local)", + "Edit(.env)", + "Edit(.env.local)", + "Write(pnpm-lock.yaml)", + "Edit(pnpm-lock.yaml)" + ] + }, "hooks": { "SessionStart": [ { diff --git a/templates/.claude/settings.local.json.example b/templates/.claude/settings.local.json.example new file mode 100644 index 0000000..4039e88 --- /dev/null +++ b/templates/.claude/settings.local.json.example @@ -0,0 +1,15 @@ +{ + "// README": "Copy to .claude/settings.local.json and customize. This file is gitignored.", + "// examples": "Uncomment patterns you need. Deny rules take precedence over allow.", + "permissions": { + "allow": [ + "// Bash(npm *)", + "// Bash(yarn *)", + "// Bash(kubectl *)", + "// Bash(terraform *)", + "// Bash(az *)", + "// Bash(aws *)" + ], + "deny": [] + } +} diff --git a/templates/.claude/skills/address-review/SKILL.md b/templates/.claude/skills/address-review/SKILL.md new file mode 100644 index 0000000..07da72a --- /dev/null +++ b/templates/.claude/skills/address-review/SKILL.md @@ -0,0 +1,73 @@ +--- +description: Read PR review comments from GitHub, evaluate, address, and reply +user_invocable: true +argument-hint: '[PR number]' +--- + +# /address-review + +Read review comments on a GitHub PR, evaluate each one, and address it appropriately. + +## Steps + +1. **Resolve the PR number.** If an argument is provided, use it. Otherwise, detect from current branch: + +```bash +gh pr view --json number,title,url +``` + +2. **Fetch all review comments** (includes inline code comments and review threads): + +```bash +gh api repos/{owner}/{repo}/pulls/{number}/comments +gh api repos/{owner}/{repo}/pulls/{number}/reviews +``` + +Filter to only unresolved threads with actual review content. Read the full thread (all replies in each discussion), not just the first comment. + +3. **For each unresolved thread, evaluate what type of comment it is:** + +### A. Change request ("change this", "use X instead of Y", "add Z") + +1. Read the referenced file + surrounding context +2. Evaluate if the change is correct, factual, and worth it +3. If yes: make the change, reply with what was changed and which commit +4. If the change would break something or is incorrect: explain why and propose an alternative + +### B. Question ("why is this here?", "doesn't X already handle...?") + +Reply with a clear explanation. Reference specific code/docs. If the answer reveals a real issue, fix it too. + +### C. Suggestion / discussion ("we could...", "what if we...") + +Evaluate effort vs impact. Reply with one of: + +- "Good idea, I'll do it in this PR" (and do it) +- "Makes sense, but better as a follow-up" (explain why) +- "I don't think it's needed because..." (explain reasoning) + +### D. Factual correction ("that's not true", "table doesn't have column X") + +Verify the claim by reading the actual code/schema. If the reviewer is right, fix it. If wrong, explain with evidence. + +4. **Reply to each thread:** + +```bash +gh api repos/{owner}/{repo}/pulls/{number}/comments/{comment_id}/replies --method POST -f "body=" +``` + +Do NOT resolve threads that need further discussion from the reviewer. + +5. **After addressing all comments**, run `/verify`. + +6. **Commit and push** with a descriptive message like `fix: address review - `. + +## Rules + +- Read the FULL thread before responding (earlier replies give context) +- Reference specific commits when you make a change +- If a change requires a migration, new endpoint, or significant scope: discuss before implementing +- Never resolve a thread without either fixing the code or explaining why no change is needed +- Group related fixes into a single commit when they address the same concern +- Run `/verify` before pushing +- No em dashes in replies diff --git a/templates/.claude/skills/verify/SKILL.md b/templates/.claude/skills/verify/SKILL.md new file mode 100644 index 0000000..b47f9aa --- /dev/null +++ b/templates/.claude/skills/verify/SKILL.md @@ -0,0 +1,22 @@ +--- +description: Run full verification (backend build+test, frontend test+lint+check) +user_invocable: true +--- + +# /verify + +Run the full post-change verification pipeline. Report the result of each step. If any step fails, stop and show the errors. + +## Backend (run when `src/backend/` changed) + +```bash +dotnet build src/backend/MyProject.slnx && dotnet test src/backend/MyProject.slnx -c Release +``` + +## Frontend (run when `src/frontend/` changed) + +```bash +cd src/frontend && pnpm run test && pnpm run format && pnpm run lint && pnpm run check +``` + +If unsure which stack changed, run both. Fix all failures before reporting success. diff --git a/templates/.gitignore b/templates/.gitignore index dfc879c..a37973a 100644 --- a/templates/.gitignore +++ b/templates/.gitignore @@ -458,3 +458,6 @@ $RECYCLE.BIN/ # Legacy root .env (not used - config is in appsettings.json and src/frontend/.env.local) /.env + +# Claude Code local settings (user-specific permission overrides) +.claude/settings.local.json diff --git a/templates/CLAUDE.md b/templates/CLAUDE.md index 43fcfdd..a2b13f3 100644 --- a/templates/CLAUDE.md +++ b/templates/CLAUDE.md @@ -29,6 +29,22 @@ Backend layers: WebApi -> Application <- Infrastructure -> Domain + Shared - No dead code - remove unused imports, variables, functions, files, and stale references in the same commit - No em dashes - never use `---` anywhere (code, comments, docs, UI). Use `-` or rewrite the sentence. +## Delegation Rule + +The top-level agent is an orchestrator. It does not write application code in `src/` - that goes to specialized agents. + +**Default (application code in `src/`):** +- Delegate implementation to `backend-engineer` +- Run relevant reviewers in parallel after implementation completes +- Run `filemap-checker` after modifying files with known consumers + +**Orchestrator handles directly (no delegation needed):** +- Documentation, configuration, and tooling files (`.claude/`, `CLAUDE.md`, `FILEMAP.md`, `.gitignore`, `docs/`, CI/CD) +- Quick answers, planning, research, and code review +- Commits, PRs, and git operations + +**User override:** If the user explicitly asks to skip delegation ("do it yourself", "directly", "don't delegate", "just fix it"), the orchestrator implements directly regardless of scope. + ## Breaking Changes The backend API is public-facing. Treat every contract change with the same care as a published library. @@ -68,10 +84,13 @@ Do these automatically - never wait to be asked: | **Adding any feature** | Write tests alongside the implementation - component, API integration, validator as applicable. | | **Build/test failure** | Read the error, fix it, re-run. Repeat until green. Don't stop and report the error unless stuck after 3 attempts. | | **Unclear requirement** | Infer from context and existing patterns first. Ask the user only when genuinely ambiguous (multiple valid approaches with different tradeoffs). | +| **Backend-only task** | Delegate to `backend-engineer` (unless user overrides). Run `backend-reviewer` in parallel after. | +| **After any implementation** | Run relevant reviewers in parallel (backend-reviewer, security-reviewer as applicable). | +| **After modifying shared files** | Run `filemap-checker` to verify all downstream consumers are updated. | ## Agent Team -Delegate to the right agent for the task. Run reviewers in parallel when reviewing. +All application code in `src/` goes to specialized agents. User override is the only exception (see Delegation Rule). Run reviewers in parallel after every implementation. | Agent | Role | When to use | | ------------------ | -------------------------- | -------------------------------- | From 962decad4c75e87b0e812aa46a886f6f6ecbd4e2 Mon Sep 17 00:00:00 2001 From: FIlip Dorian Pindej Date: Sat, 21 Mar 2026 03:18:07 +0100 Subject: [PATCH 2/3] fix(manifests): register Claude Code rules, skills, and settings in manifests The PR #462 sync added 8 new template files (5 rules, 2 skills, settings example) but did not register them in manifests, so they would never appear in generated projects. Adds manifest entries, @feature markers for auth/frontend-specific content, and bumps to 0.9.0. --- CHANGELOG.md | 21 +++++++++++++++++++ packages/core/package.json | 2 +- packages/core/src/features/definitions.ts | 8 +++---- packages/core/src/manifests/claude-skills.ts | 5 ++++- packages/core/src/manifests/claude.ts | 6 ++++++ packages/core/src/manifests/frontend.ts | 3 +++ .../__snapshots__/snapshot.test.ts.snap | 10 +++++++++ packages/web/package.json | 2 +- templates/.claude/rules/backend-api.md | 8 +++++++ templates/.claude/rules/database.md | 9 ++++++++ templates/.claude/rules/testing.md | 18 ++++++++++++++++ templates/.claude/skills/verify/SKILL.md | 4 ++++ templates/CLAUDE.md | 8 ++++--- 13 files changed, 94 insertions(+), 10 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2a7f774..32c9553 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,27 @@ All notable changes to the netrock generator will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/). +## [0.9.0] - 2026-03-21 + +### Added + +- Claude Code rules files in generated projects: backend-api, database, infrastructure, testing patterns (quick-reference for orchestrator) +- Frontend Svelte rules file (included when SvelteKit frontend is selected) +- `/verify` skill for running full backend build+test and frontend test+lint+check +- `/address-review` skill for reading, evaluating, and addressing PR review comments +- Claude Code permissions in generated projects (42 allow rules, 30 deny rules with cross-platform coverage) +- `settings.local.json.example` for user-specific permission overrides +- Delegation Rule in generated CLAUDE.md (orchestrator delegates `src/` code to specialized agents) +- Stop-quality-gate hook now warns when session ends on main/master branch + +### Fixed + +- Shell injection vulnerability in auto-format hook (replaced `execSync` string interpolation with `execFileSync` args array) +- Validate-bash hook now catches `git checkout -- .` variant (broadened regex) +- Validate-bash hook blocks `npm install` (enforces pnpm-only) +- Feature-gated `@feature` markers on auth-specific content in rules files (authorization, seeding, test auth) +- Feature-gated `@feature frontend` on frontend testing rules and verify skill frontend section + ## [0.8.3] - 2026-03-14 ### Added diff --git a/packages/core/package.json b/packages/core/package.json index f7543cb..a055a4a 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@netrock/core", - "version": "0.8.3", + "version": "0.9.0", "type": "module", "main": "./dist/index.js", "types": "./dist/index.d.ts", diff --git a/packages/core/src/features/definitions.ts b/packages/core/src/features/definitions.ts index 10bf4c9..f098710 100644 --- a/packages/core/src/features/definitions.ts +++ b/packages/core/src/features/definitions.ts @@ -152,9 +152,9 @@ export const featureDefinitions: Feature[] = [ id: 'claude', name: 'Claude agent team', description: - 'CLAUDE.md, FILEMAP.md, 8 specialized agents, and 4 lifecycle hooks for AI-assisted development', + 'CLAUDE.md, FILEMAP.md, 8 specialized agents, 5 rules files, and 4 lifecycle hooks for AI-assisted development', details: - 'Adds project-specific Claude Code configuration: CLAUDE.md with project rules and conventions, FILEMAP.md for change impact tracking, 8 specialized agents (backend engineer, reviewers, test writer, etc.), and 4 lifecycle hooks for auto-formatting and safety gates.', + 'Adds project-specific Claude Code configuration: CLAUDE.md with project rules, delegation model, and conventions, FILEMAP.md for change impact tracking, 8 specialized agents (backend engineer, reviewers, test writer, etc.), 5 rules files (backend API, database, infrastructure, testing, frontend), and 4 lifecycle hooks for auto-formatting and safety gates.', dependencies: ['core'], required: false, defaultEnabled: true, @@ -164,9 +164,9 @@ export const featureDefinitions: Feature[] = [ id: 'claude-skills', name: 'Claude skills & conventions', description: - '22 Claude Code skills, 3 convention references, and skill assets for code generation', + '24 Claude Code skills, 3 convention references, permissions config, and skill assets for code generation', details: - 'Adds slash-command skills for common workflows: adding permissions, background jobs, email templates, API endpoints, and more. Includes convention reference documents that agents auto-load for consistent code style. Skills generate code following established project patterns.', + 'Adds slash-command skills for common workflows: /verify, /address-review, adding permissions, background jobs, email templates, API endpoints, and more. Includes convention reference documents that agents auto-load for consistent code style, permission allow/deny lists for safe tool usage, and a local settings example for user overrides.', dependencies: ['claude'], required: false, defaultEnabled: true, diff --git a/packages/core/src/manifests/claude-skills.ts b/packages/core/src/manifests/claude-skills.ts index 0ea8cde..f358816 100644 --- a/packages/core/src/manifests/claude-skills.ts +++ b/packages/core/src/manifests/claude-skills.ts @@ -5,8 +5,9 @@ export function registerClaudeSkillsManifest(): void { registerManifest({ featureId: 'claude-skills', files: [ - // Settings (hooks config) + // Settings (hooks config + permissions) { path: '.claude/settings.json', templated: false }, + { path: '.claude/settings.local.json.example', templated: false }, // Convention skills (auto-injected into agents, not user-invocable) { path: '.claude/skills/backend-conventions/SKILL.md', templated: true }, @@ -22,6 +23,8 @@ export function registerClaudeSkillsManifest(): void { { path: '.claude/skills/review-pr/references/conventions-summary.md', templated: true }, // Generic skills (always available) + { path: '.claude/skills/address-review/SKILL.md', templated: false }, + { path: '.claude/skills/verify/SKILL.md', templated: true }, { path: '.claude/skills/add-ci-area/SKILL.md', templated: false }, { path: '.claude/skills/add-env-var/SKILL.md', templated: true }, { path: '.claude/skills/add-options-class/SKILL.md', templated: false }, diff --git a/packages/core/src/manifests/claude.ts b/packages/core/src/manifests/claude.ts index 9fd3a57..5e5acfb 100644 --- a/packages/core/src/manifests/claude.ts +++ b/packages/core/src/manifests/claude.ts @@ -14,6 +14,12 @@ export function registerClaudeManifest(): void { { path: '.claude/hooks/auto-format.mjs', templated: false }, { path: '.claude/hooks/stop-quality-gate.mjs', templated: false }, + // Rules (orchestrator quick-reference) + { path: '.claude/rules/backend-api.md', templated: true }, + { path: '.claude/rules/database.md', templated: true }, + { path: '.claude/rules/infrastructure.md', templated: false }, + { path: '.claude/rules/testing.md', templated: true }, + // Agents (backend-relevant) { path: '.claude/agents/backend-engineer.md', templated: false }, { path: '.claude/agents/backend-reviewer.md', templated: false }, diff --git a/packages/core/src/manifests/frontend.ts b/packages/core/src/manifests/frontend.ts index 671b95f..f23dec6 100644 --- a/packages/core/src/manifests/frontend.ts +++ b/packages/core/src/manifests/frontend.ts @@ -5,6 +5,9 @@ export function registerFrontendManifest(): void { registerManifest({ featureId: 'frontend', files: [ + // Claude Code rules (frontend-specific) + { path: '.claude/rules/frontend-svelte.md', templated: false }, + { path: 'src/frontend/.dockerignore', templated: false }, { path: 'src/frontend/.env.example', templated: false }, { path: 'src/frontend/.env.test', templated: false }, diff --git a/packages/core/tests/integration/__snapshots__/snapshot.test.ts.snap b/packages/core/tests/integration/__snapshots__/snapshot.test.ts.snap index acd99ea..aebcb63 100644 --- a/packages/core/tests/integration/__snapshots__/snapshot.test.ts.snap +++ b/packages/core/tests/integration/__snapshots__/snapshot.test.ts.snap @@ -2058,6 +2058,7 @@ exports[`file list snapshots > core-only file list 1`] = ` exports[`file list snapshots > frontend + admin (no jobs/oauth) file list 1`] = ` [ + ".claude/rules/frontend-svelte.md", ".config/dotnet-tools.json", ".gitignore", "README.md", @@ -2674,6 +2675,7 @@ exports[`file list snapshots > frontend + admin (no jobs/oauth) file list 1`] = exports[`file list snapshots > frontend full file list 1`] = ` [ + ".claude/rules/frontend-svelte.md", ".config/dotnet-tools.json", ".gitignore", "README.md", @@ -3464,6 +3466,7 @@ exports[`file list snapshots > frontend full file list 1`] = ` exports[`file list snapshots > frontend minimal (core + auth + frontend) file list 1`] = ` [ + ".claude/rules/frontend-svelte.md", ".config/dotnet-tools.json", ".gitignore", "README.md", @@ -4019,7 +4022,12 @@ exports[`file list snapshots > full preset file list 1`] = ` ".claude/hooks/session-start.mjs", ".claude/hooks/stop-quality-gate.mjs", ".claude/hooks/validate-bash.mjs", + ".claude/rules/backend-api.md", + ".claude/rules/database.md", + ".claude/rules/infrastructure.md", + ".claude/rules/testing.md", ".claude/settings.json", + ".claude/settings.local.json.example", ".claude/skills/add-aspire-dep/SKILL.md", ".claude/skills/add-background-job/SKILL.md", ".claude/skills/add-ci-area/SKILL.md", @@ -4030,6 +4038,7 @@ exports[`file list snapshots > full preset file list 1`] = ` ".claude/skills/add-rate-limit/SKILL.md", ".claude/skills/add-route-constraint/SKILL.md", ".claude/skills/add-test/SKILL.md", + ".claude/skills/address-review/SKILL.md", ".claude/skills/backend-conventions/SKILL.md", ".claude/skills/create-issue/SKILL.md", ".claude/skills/create-pr/SKILL.md", @@ -4049,6 +4058,7 @@ exports[`file list snapshots > full preset file list 1`] = ` ".claude/skills/review-pr/SKILL.md", ".claude/skills/review-pr/references/conventions-summary.md", ".claude/skills/security-conventions/SKILL.md", + ".claude/skills/verify/SKILL.md", ".config/dotnet-tools.json", ".gitignore", "CLAUDE.md", diff --git a/packages/web/package.json b/packages/web/package.json index 185a7cd..28a2283 100644 --- a/packages/web/package.json +++ b/packages/web/package.json @@ -1,7 +1,7 @@ { "name": "@netrock/web", "private": true, - "version": "0.8.3", + "version": "0.9.0", "type": "module", "scripts": { "dev": "vite dev", diff --git a/templates/.claude/rules/backend-api.md b/templates/.claude/rules/backend-api.md index b8a6643..9dcc06f 100644 --- a/templates/.claude/rules/backend-api.md +++ b/templates/.claude/rules/backend-api.md @@ -3,19 +3,27 @@ Extends CLAUDE.md Hard Rules with implementation patterns. ## Error Handling + - `ProblemFactory.Create(result.Error, result.ErrorType)` for error responses - never `NotFound()`, `BadRequest()`, or anonymous objects - Client-facing error messages: `ErrorMessages.*` constants only - runtime values go in `ILogger`, never in `Result.Failure()` ## Controllers + - Authenticated endpoints extend `ApiController` - public endpoints use `ControllerBase` directly - Always: `/// `, `[ProducesResponseType]` per status code, `CancellationToken` as last param - Never `/// ` - it leaks into OpenAPI `requestBody.description` - `[ProducesResponseType]` without `typeof(...)` on error codes (400, 401, 403, 404, 429) +# @feature auth + ## Authorization + - `[RequirePermission("permission.name")]` on actions - never class-level `[Authorize(Roles)]` on permission controllers - Role hierarchy enforced: cannot manage users at/above your rank +# @end + ## Entities + - Extend `BaseEntity`, private setters, invariants via methods, protected parameterless ctor for EF - Soft delete via `entity.SoftDelete()` / `entity.Restore()` - never set `IsDeleted` directly diff --git a/templates/.claude/rules/database.md b/templates/.claude/rules/database.md index 7ce9509..0d3882f 100644 --- a/templates/.claude/rules/database.md +++ b/templates/.claude/rules/database.md @@ -3,6 +3,7 @@ Extends CLAUDE.md with EF Core patterns and commands. ## Entity Configuration + - Inherit `BaseEntityConfiguration` (public abstract), override `ConfigureEntity` - Derived configurations are `internal` - auto-discovered via `ApplyConfigurationsFromAssembly()` - Default `public` schema - named schemas only for existing grouped features (e.g., `"auth"`) @@ -10,16 +11,24 @@ Extends CLAUDE.md with EF Core patterns and commands. - Boolean naming: `Is*`/`Has*` in C#, prefix-free column names via `HasColumnName` ## Migrations + - Command: `dotnet ef migrations add {Name} --project src/backend/MyProject.Infrastructure --startup-project src/backend/MyProject.WebApi --output-dir Persistence/Migrations` + +# @feature auth + - Seeding: roles via `AppRoles.All` (reflection), permissions via `SeedRolePermissionsAsync()` +# @end + ## Repository Pattern + - `IBaseEntityRepository` for CRUD with automatic soft-delete filtering (global query filter) - Custom repos: extend `IBaseEntityRepository` in Application, implement in Infrastructure - Never expose `IQueryable` across layer boundaries - Pagination: `Paginate(pageNumber, pageSize)` extension on `IQueryable` ## Query Rules + - No string interpolation in LINQ/SQL queries - parameterized only - `IReadOnlyList` on public interfaces - never expose `List` or `T[]` - `HybridCache` for caching with keys from `CacheKeys` constants diff --git a/templates/.claude/rules/testing.md b/templates/.claude/rules/testing.md index e4c8ee7..a4dc3d9 100644 --- a/templates/.claude/rules/testing.md +++ b/templates/.claude/rules/testing.md @@ -3,23 +3,41 @@ Extends CLAUDE.md with test project structure and patterns. ## Backend Test Projects + - `Unit.Tests` - pure logic (Shared, Domain, Application), no mocks, no DI - `Component.Tests` - service logic with `TestDbContextFactory` (InMemory), `NSubstitute`, `IdentityMockHelpers` + +# @feature auth + - `Api.Tests` - full HTTP pipeline with `CustomWebApplicationFactory`, `TestAuthHandler` + +# @end + - `Architecture.Tests` - layer deps, naming, visibility via NetArchTest +# @feature auth + ## Backend API Test Auth + - Default: `"Authorization", "Test"` header (basic user) - Specific permissions: `TestAuth.WithPermissions(...)` - Superuser: `TestAuth.Superuser()` - Response contracts: frozen records in `Contracts/ResponseContracts.cs` +# @end + +# @feature frontend + ## Frontend Testing + - Co-locate: `foo.ts` -> `foo.test.ts` - Explicit imports: `import { describe, it, expect, vi } from 'vitest'` - Default env is `node` - add `// @vitest-environment jsdom` for DOM tests - `restoreMocks: true` handles cleanup globally - no manual restore needed +# @end + ## General + - No conditional tests - always assert deterministic outcomes - No `any` in test code - type mocks properly diff --git a/templates/.claude/skills/verify/SKILL.md b/templates/.claude/skills/verify/SKILL.md index b47f9aa..5794d89 100644 --- a/templates/.claude/skills/verify/SKILL.md +++ b/templates/.claude/skills/verify/SKILL.md @@ -13,10 +13,14 @@ Run the full post-change verification pipeline. Report the result of each step. dotnet build src/backend/MyProject.slnx && dotnet test src/backend/MyProject.slnx -c Release ``` + + ## Frontend (run when `src/frontend/` changed) ```bash cd src/frontend && pnpm run test && pnpm run format && pnpm run lint && pnpm run check ``` + + If unsure which stack changed, run both. Fix all failures before reporting success. diff --git a/templates/CLAUDE.md b/templates/CLAUDE.md index a2b13f3..1be549d 100644 --- a/templates/CLAUDE.md +++ b/templates/CLAUDE.md @@ -34,11 +34,13 @@ Backend layers: WebApi -> Application <- Infrastructure -> Domain + Shared The top-level agent is an orchestrator. It does not write application code in `src/` - that goes to specialized agents. **Default (application code in `src/`):** + - Delegate implementation to `backend-engineer` - Run relevant reviewers in parallel after implementation completes - Run `filemap-checker` after modifying files with known consumers **Orchestrator handles directly (no delegation needed):** + - Documentation, configuration, and tooling files (`.claude/`, `CLAUDE.md`, `FILEMAP.md`, `.gitignore`, `docs/`, CI/CD) - Quick answers, planning, research, and code review - Commits, PRs, and git operations @@ -84,9 +86,9 @@ Do these automatically - never wait to be asked: | **Adding any feature** | Write tests alongside the implementation - component, API integration, validator as applicable. | | **Build/test failure** | Read the error, fix it, re-run. Repeat until green. Don't stop and report the error unless stuck after 3 attempts. | | **Unclear requirement** | Infer from context and existing patterns first. Ask the user only when genuinely ambiguous (multiple valid approaches with different tradeoffs). | -| **Backend-only task** | Delegate to `backend-engineer` (unless user overrides). Run `backend-reviewer` in parallel after. | -| **After any implementation** | Run relevant reviewers in parallel (backend-reviewer, security-reviewer as applicable). | -| **After modifying shared files** | Run `filemap-checker` to verify all downstream consumers are updated. | +| **Backend-only task** | Delegate to `backend-engineer` (unless user overrides). Run `backend-reviewer` in parallel after. | +| **After any implementation** | Run relevant reviewers in parallel. | +| **After modifying shared files** | Run `filemap-checker` to verify all downstream consumers are updated. | ## Agent Team From cdda5b6b66687ba153e902dd6ca37ab7860024c4 Mon Sep 17 00:00:00 2001 From: FIlip Dorian Pindej Date: Sat, 21 Mar 2026 03:21:11 +0100 Subject: [PATCH 3/3] chore(templates): sync dependabot updates from web-app-template Syncs 3 dependabot PRs (#458, #459, #460): .NET 10.0.5, NuGet package bumps, and frontend dependency updates (SvelteKit 2.55, Svelte 5.53.12, Paraglide 2.15). --- CHANGELOG.md | 16 + packages/core/package.json | 2 +- packages/web/package.json | 2 +- templates/.config/dotnet-tools.json | 22 +- .../src/backend/Directory.Packages.props | 18 +- templates/src/frontend/package.json | 8 +- templates/src/frontend/pnpm-lock.yaml | 397 +++++++++--------- 7 files changed, 250 insertions(+), 215 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 32c9553..8c3a732 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,22 @@ All notable changes to the netrock generator will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/). +## [0.9.1] - 2026-03-21 + +### Changed + +- Backend: .NET 10.0.3 to 10.0.5 (framework, EF tools) +- Backend: Microsoft.Extensions.Caching.Hybrid, Http.Resilience, ServiceDiscovery 10.3.0 to 10.4.0 +- Backend: Npgsql.EntityFrameworkCore.PostgreSQL 10.0.0 to 10.0.1 +- Backend: OpenTelemetry.Instrumentation.AspNetCore 1.15.0 to 1.15.1 +- Backend: Scalar.AspNetCore 2.13.2 to 2.13.9 +- Backend: AWSSDK.S3 3.7.510.14 to 3.7.511.1 +- Backend: Microsoft.Extensions.TimeProvider.Testing 10.3.0 to 10.4.0 +- Frontend: @inlang/paraglide-js 2.13.2 to 2.15.0 +- Frontend: @sveltejs/kit 2.53.4 to 2.55.0 +- Frontend: svelte 5.53.8 to 5.53.12 +- Frontend: typescript-eslint 8.57.0 to 8.57.1 + ## [0.9.0] - 2026-03-21 ### Added diff --git a/packages/core/package.json b/packages/core/package.json index a055a4a..3595b5c 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@netrock/core", - "version": "0.9.0", + "version": "0.9.1", "type": "module", "main": "./dist/index.js", "types": "./dist/index.d.ts", diff --git a/packages/web/package.json b/packages/web/package.json index 28a2283..da4ed93 100644 --- a/packages/web/package.json +++ b/packages/web/package.json @@ -1,7 +1,7 @@ { "name": "@netrock/web", "private": true, - "version": "0.9.0", + "version": "0.9.1", "type": "module", "scripts": { "dev": "vite dev", diff --git a/templates/.config/dotnet-tools.json b/templates/.config/dotnet-tools.json index a6e4e06..b6f4c2f 100644 --- a/templates/.config/dotnet-tools.json +++ b/templates/.config/dotnet-tools.json @@ -1,11 +1,13 @@ { - "version": 1, - "isRoot": true, - "tools": { - "dotnet-ef": { - "version": "10.0.3", - "commands": ["dotnet-ef"], - "rollForward": false - } - } -} + "version": 1, + "isRoot": true, + "tools": { + "dotnet-ef": { + "version": "10.0.5", + "commands": [ + "dotnet-ef" + ], + "rollForward": false + } + } +} \ No newline at end of file diff --git a/templates/src/backend/Directory.Packages.props b/templates/src/backend/Directory.Packages.props index d0a6740..5d5a259 100644 --- a/templates/src/backend/Directory.Packages.props +++ b/templates/src/backend/Directory.Packages.props @@ -1,7 +1,7 @@ true - 10.0.3 + 10.0.5 @@ -9,7 +9,7 @@ - + @@ -25,18 +25,18 @@ - + - - + + - + - + @@ -54,7 +54,7 @@ - + @@ -69,7 +69,7 @@ - + diff --git a/templates/src/frontend/package.json b/templates/src/frontend/package.json index f08d2f4..3cdf5f5 100644 --- a/templates/src/frontend/package.json +++ b/templates/src/frontend/package.json @@ -20,10 +20,10 @@ "devDependencies": { "@eslint/compat": "^1.4.0", "@eslint/js": "^9.39.1", - "@inlang/paraglide-js": "^2.13.2", + "@inlang/paraglide-js": "^2.15.0", "@lucide/svelte": "^0.577.0", "@sveltejs/adapter-node": "^5.5.4", - "@sveltejs/kit": "^2.53.4", + "@sveltejs/kit": "^2.55.0", "@sveltejs/vite-plugin-svelte": "^6.2.4", "@tailwindcss/vite": "^4.2.1", "@types/node": "^22", @@ -36,13 +36,13 @@ "prettier": "^3.8.1", "prettier-plugin-svelte": "^3.5.1", "prettier-plugin-tailwindcss": "^0.7.2", - "svelte": "^5.53.8", + "svelte": "^5.53.12", "svelte-check": "^4.4.5", "sveltekit-superforms": "^2.30.0", "tailwindcss": "^4.2.1", "tailwindcss-animate": "^1.0.7", "typescript": "^5.9.3", - "typescript-eslint": "^8.57.0", + "typescript-eslint": "^8.57.1", "vite": "^7.3.1", "vitest": "^3.2.1", "zod": "4.3.6" diff --git a/templates/src/frontend/pnpm-lock.yaml b/templates/src/frontend/pnpm-lock.yaml index d80d185..aade672 100644 --- a/templates/src/frontend/pnpm-lock.yaml +++ b/templates/src/frontend/pnpm-lock.yaml @@ -16,7 +16,7 @@ importers: version: 1.5.6 bits-ui: specifier: ^2.16.3 - version: 2.16.3(@internationalized/date@3.12.0)(@sveltejs/kit@2.53.4(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.53.9)(vite@7.3.1(@types/node@22.19.11)(jiti@2.6.1)(lightningcss@1.31.1)))(svelte@5.53.9)(typescript@5.9.3)(vite@7.3.1(@types/node@22.19.11)(jiti@2.6.1)(lightningcss@1.31.1)))(svelte@5.53.9) + version: 2.16.3(@internationalized/date@3.12.0)(@sveltejs/kit@2.55.0(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.53.12)(vite@7.3.1(@types/node@22.19.11)(jiti@2.6.1)(lightningcss@1.31.1)))(svelte@5.53.12)(typescript@5.9.3)(vite@7.3.1(@types/node@22.19.11)(jiti@2.6.1)(lightningcss@1.31.1)))(svelte@5.53.12) clsx: specifier: ^2.1.1 version: 2.1.1 @@ -31,10 +31,10 @@ importers: version: 1.5.4 svelte-easy-crop: specifier: ^5.0.0 - version: 5.0.0(svelte@5.53.9) + version: 5.0.0(svelte@5.53.12) svelte-sonner: specifier: ^1.1.0 - version: 1.1.0(svelte@5.53.9) + version: 1.1.0(svelte@5.53.12) tailwind-merge: specifier: ^3.5.0 version: 3.5.0 @@ -49,20 +49,20 @@ importers: specifier: ^9.39.1 version: 9.39.2 '@inlang/paraglide-js': - specifier: ^2.13.2 - version: 2.14.0 + specifier: ^2.15.0 + version: 2.15.0 '@lucide/svelte': specifier: ^0.577.0 - version: 0.577.0(svelte@5.53.9) + version: 0.577.0(svelte@5.53.12) '@sveltejs/adapter-node': specifier: ^5.5.4 - version: 5.5.4(@sveltejs/kit@2.53.4(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.53.9)(vite@7.3.1(@types/node@22.19.11)(jiti@2.6.1)(lightningcss@1.31.1)))(svelte@5.53.9)(typescript@5.9.3)(vite@7.3.1(@types/node@22.19.11)(jiti@2.6.1)(lightningcss@1.31.1))) + version: 5.5.4(@sveltejs/kit@2.55.0(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.53.12)(vite@7.3.1(@types/node@22.19.11)(jiti@2.6.1)(lightningcss@1.31.1)))(svelte@5.53.12)(typescript@5.9.3)(vite@7.3.1(@types/node@22.19.11)(jiti@2.6.1)(lightningcss@1.31.1))) '@sveltejs/kit': - specifier: ^2.53.4 - version: 2.53.4(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.53.9)(vite@7.3.1(@types/node@22.19.11)(jiti@2.6.1)(lightningcss@1.31.1)))(svelte@5.53.9)(typescript@5.9.3)(vite@7.3.1(@types/node@22.19.11)(jiti@2.6.1)(lightningcss@1.31.1)) + specifier: ^2.55.0 + version: 2.55.0(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.53.12)(vite@7.3.1(@types/node@22.19.11)(jiti@2.6.1)(lightningcss@1.31.1)))(svelte@5.53.12)(typescript@5.9.3)(vite@7.3.1(@types/node@22.19.11)(jiti@2.6.1)(lightningcss@1.31.1)) '@sveltejs/vite-plugin-svelte': specifier: ^6.2.4 - version: 6.2.4(svelte@5.53.9)(vite@7.3.1(@types/node@22.19.11)(jiti@2.6.1)(lightningcss@1.31.1)) + version: 6.2.4(svelte@5.53.12)(vite@7.3.1(@types/node@22.19.11)(jiti@2.6.1)(lightningcss@1.31.1)) '@tailwindcss/vite': specifier: ^4.2.1 version: 4.2.1(vite@7.3.1(@types/node@22.19.11)(jiti@2.6.1)(lightningcss@1.31.1)) @@ -77,10 +77,10 @@ importers: version: 10.1.8(eslint@9.39.2(jiti@2.6.1)) eslint-plugin-svelte: specifier: ^3.15.2 - version: 3.15.2(eslint@9.39.2(jiti@2.6.1))(svelte@5.53.9) + version: 3.15.2(eslint@9.39.2(jiti@2.6.1))(svelte@5.53.12) formsnap: specifier: ^2.0.1 - version: 2.0.1(svelte@5.53.9)(sveltekit-superforms@2.30.0(@sveltejs/kit@2.53.4(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.53.9)(vite@7.3.1(@types/node@22.19.11)(jiti@2.6.1)(lightningcss@1.31.1)))(svelte@5.53.9)(typescript@5.9.3)(vite@7.3.1(@types/node@22.19.11)(jiti@2.6.1)(lightningcss@1.31.1)))(@types/json-schema@7.0.15)(svelte@5.53.9)(typescript@5.9.3)) + version: 2.0.1(svelte@5.53.12)(sveltekit-superforms@2.30.0(@sveltejs/kit@2.55.0(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.53.12)(vite@7.3.1(@types/node@22.19.11)(jiti@2.6.1)(lightningcss@1.31.1)))(svelte@5.53.12)(typescript@5.9.3)(vite@7.3.1(@types/node@22.19.11)(jiti@2.6.1)(lightningcss@1.31.1)))(@types/json-schema@7.0.15)(svelte@5.53.12)(typescript@5.9.3)) globals: specifier: ^17.4.0 version: 17.4.0 @@ -92,19 +92,19 @@ importers: version: 3.8.1 prettier-plugin-svelte: specifier: ^3.5.1 - version: 3.5.1(prettier@3.8.1)(svelte@5.53.9) + version: 3.5.1(prettier@3.8.1)(svelte@5.53.12) prettier-plugin-tailwindcss: specifier: ^0.7.2 - version: 0.7.2(prettier-plugin-svelte@3.5.1(prettier@3.8.1)(svelte@5.53.9))(prettier@3.8.1) + version: 0.7.2(prettier-plugin-svelte@3.5.1(prettier@3.8.1)(svelte@5.53.12))(prettier@3.8.1) svelte: - specifier: ^5.53.8 - version: 5.53.9 + specifier: ^5.53.12 + version: 5.53.12 svelte-check: specifier: ^4.4.5 - version: 4.4.5(picomatch@4.0.3)(svelte@5.53.9)(typescript@5.9.3) + version: 4.4.5(picomatch@4.0.3)(svelte@5.53.12)(typescript@5.9.3) sveltekit-superforms: specifier: ^2.30.0 - version: 2.30.0(@sveltejs/kit@2.53.4(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.53.9)(vite@7.3.1(@types/node@22.19.11)(jiti@2.6.1)(lightningcss@1.31.1)))(svelte@5.53.9)(typescript@5.9.3)(vite@7.3.1(@types/node@22.19.11)(jiti@2.6.1)(lightningcss@1.31.1)))(@types/json-schema@7.0.15)(svelte@5.53.9)(typescript@5.9.3) + version: 2.30.0(@sveltejs/kit@2.55.0(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.53.12)(vite@7.3.1(@types/node@22.19.11)(jiti@2.6.1)(lightningcss@1.31.1)))(svelte@5.53.12)(typescript@5.9.3)(vite@7.3.1(@types/node@22.19.11)(jiti@2.6.1)(lightningcss@1.31.1)))(@types/json-schema@7.0.15)(svelte@5.53.12)(typescript@5.9.3) tailwindcss: specifier: ^4.2.1 version: 4.2.1 @@ -115,8 +115,8 @@ importers: specifier: ^5.9.3 version: 5.9.3 typescript-eslint: - specifier: ^8.57.0 - version: 8.57.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) + specifier: ^8.57.1 + version: 8.57.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) vite: specifier: ^7.3.1 version: 7.3.1(@types/node@22.19.11)(jiti@2.6.1)(lightningcss@1.31.1) @@ -353,14 +353,14 @@ packages: '@exodus/schemasafe@1.3.0': resolution: {integrity: sha512-5Aap/GaRupgNx/feGBwLLTVv8OQFfv3pq2lPRzPg9R+IOBnDgghTGW7l7EuVXOvg5cc/xSAlRW8rBrjIC3Nvqw==} - '@floating-ui/core@1.7.4': - resolution: {integrity: sha512-C3HlIdsBxszvm5McXlB8PeOEWfBhcGBTZGkGlWc2U0KFY5IwG5OQEuQ8rq52DZmcHDlPLd+YFBK+cZcytwIFWg==} + '@floating-ui/core@1.7.5': + resolution: {integrity: sha512-1Ih4WTWyw0+lKyFMcBHGbb5U5FtuHJuujoyyr5zTaWS5EYMeT6Jb2AuDeftsCsEuchO+mM2ij5+q9crhydzLhQ==} - '@floating-ui/dom@1.7.5': - resolution: {integrity: sha512-N0bD2kIPInNHUHehXhMke1rBGs1dwqvC9O9KYMyyjK7iXt7GAhnro7UlcuYcGdS/yYOlq0MAVgrow8IbWJwyqg==} + '@floating-ui/dom@1.7.6': + resolution: {integrity: sha512-9gZSAI5XM36880PPMm//9dfiEngYoC6Am2izES1FF406YFsjvyBMmeJ2g4SAju3xWwtuynNRFL2s9hgxpLI5SQ==} - '@floating-ui/utils@0.2.10': - resolution: {integrity: sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==} + '@floating-ui/utils@0.2.11': + resolution: {integrity: sha512-RiB/yIh78pcIxl6lLMG0CgBXAZ2Y0eVHqMPYugu+9U0AeT6YBeiJpf7lbdJNIugFP5SIjwNRgo4DhR1Qxi26Gg==} '@hapi/hoek@9.3.0': resolution: {integrity: sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==} @@ -384,15 +384,15 @@ packages: resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==} engines: {node: '>=18.18'} - '@inlang/paraglide-js@2.14.0': - resolution: {integrity: sha512-6Tno8RvEhnALdgueWNQACiEm3YM6hAfbxnYB+JWML9p5s1O4t0DOqgU9YD8fwpixOnZbU6cJRkvt4v9acXDioA==} + '@inlang/paraglide-js@2.15.0': + resolution: {integrity: sha512-2ZOa9nssVn4tjkKskqb88KP5A7cTIjo8AiM9xnPvH+vBhRIRenO+ftAbVOHhHcHjcFxy2QFcOfBAH/Cw1LIsUg==} hasBin: true '@inlang/recommend-sherlock@0.2.1': resolution: {integrity: sha512-ckv8HvHy/iTqaVAEKrr+gnl+p3XFNwe5D2+6w6wJk2ORV2XkcRkKOJ/XsTUJbPSiyi4PI+p+T3bqbmNx/rDUlg==} - '@inlang/sdk@2.7.0': - resolution: {integrity: sha512-yJNBD0o8i29TTJqWX5uDRHxnalDGcsUDctxepzFXsUfkzqGWfiFBxODdxvReqvM2CuKAAOo/kib/F1UcgdYFNQ==} + '@inlang/sdk@2.8.0': + resolution: {integrity: sha512-w1jysvUDTMgCaONklIgOJAp9dUDl0UhLbsdqfWEwY/GIqoc9IwpuHsrP3pzC+h3DfOpkMMDnDkTpPv8kIZ98iA==} engines: {node: '>=18.0.0'} '@internationalized/date@3.12.0': @@ -783,8 +783,8 @@ packages: peerDependencies: '@sveltejs/kit': ^2.4.0 - '@sveltejs/kit@2.53.4': - resolution: {integrity: sha512-iAIPEahFgDJJyvz8g0jP08KvqnM6JvdW8YfsygZ+pMeMvyM2zssWMltcsotETvjSZ82G3VlitgDtBIvpQSZrTA==} + '@sveltejs/kit@2.55.0': + resolution: {integrity: sha512-MdFRjevVxmAknf2NbaUkDF16jSIzXMWd4Nfah0Qp8TtQVoSp3bV4jKt8mX7z7qTUTWvgSaxtR0EG5WJf53gcuA==} engines: {node: '>=18.13'} hasBin: true peerDependencies: @@ -814,8 +814,8 @@ packages: svelte: ^5.0.0 vite: ^6.3.0 || ^7.0.0 - '@swc/helpers@0.5.18': - resolution: {integrity: sha512-TXTnIcNJQEKwThMMqBXsZ4VGAza6bvN4pa41Rkqoio6QBKMvo+5lexeTMScGCIxtzgQJzElcvIltani+adC5PQ==} + '@swc/helpers@0.5.19': + resolution: {integrity: sha512-QamiFeIK3txNjgUTNppE6MiG3p7TdninpZu0E0PbqVh1a9FNLT2FRhisaa4NcaX52XVhA5l7Pk58Ft7Sqi/2sA==} '@tailwindcss/node@4.2.1': resolution: {integrity: sha512-jlx6sLk4EOwO6hHe1oCGm1Q4AN/s0rSrTTPBGPM0/RQ6Uylwq17FuU8IeJJKEjtc6K6O07zsvP+gDO6MMWo7pg==} @@ -957,63 +957,63 @@ packages: '@types/json-schema': optional: true - '@typescript-eslint/eslint-plugin@8.57.0': - resolution: {integrity: sha512-qeu4rTHR3/IaFORbD16gmjq9+rEs9fGKdX0kF6BKSfi+gCuG3RCKLlSBYzn/bGsY9Tj7KE/DAQStbp8AHJGHEQ==} + '@typescript-eslint/eslint-plugin@8.57.1': + resolution: {integrity: sha512-Gn3aqnvNl4NGc6x3/Bqk1AOn0thyTU9bqDRhiRnUWezgvr2OnhYCWCgC8zXXRVqBsIL1pSDt7T9nJUe0oM0kDQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - '@typescript-eslint/parser': ^8.57.0 + '@typescript-eslint/parser': ^8.57.1 eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/parser@8.57.0': - resolution: {integrity: sha512-XZzOmihLIr8AD1b9hL9ccNMzEMWt/dE2u7NyTY9jJG6YNiNthaD5XtUHVF2uCXZ15ng+z2hT3MVuxnUYhq6k1g==} + '@typescript-eslint/parser@8.57.1': + resolution: {integrity: sha512-k4eNDan0EIMTT/dUKc/g+rsJ6wcHYhNPdY19VoX/EOtaAG8DLtKCykhrUnuHPYvinn5jhAPgD2Qw9hXBwrahsw==} 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.0.0' - '@typescript-eslint/project-service@8.57.0': - resolution: {integrity: sha512-pR+dK0BlxCLxtWfaKQWtYr7MhKmzqZxuii+ZjuFlZlIGRZm22HnXFqa2eY+90MUz8/i80YJmzFGDUsi8dMOV5w==} + '@typescript-eslint/project-service@8.57.1': + resolution: {integrity: sha512-vx1F37BRO1OftsYlmG9xay1TqnjNVlqALymwWVuYTdo18XuKxtBpCj1QlzNIEHlvlB27osvXFWptYiEWsVdYsg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/scope-manager@8.57.0': - resolution: {integrity: sha512-nvExQqAHF01lUM66MskSaZulpPL5pgy5hI5RfrxviLgzZVffB5yYzw27uK/ft8QnKXI2X0LBrHJFr1TaZtAibw==} + '@typescript-eslint/scope-manager@8.57.1': + resolution: {integrity: sha512-hs/QcpCwlwT2L5S+3fT6gp0PabyGk4Q0Rv2doJXA0435/OpnSR3VRgvrp8Xdoc3UAYSg9cyUjTeFXZEPg/3OKg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/tsconfig-utils@8.57.0': - resolution: {integrity: sha512-LtXRihc5ytjJIQEH+xqjB0+YgsV4/tW35XKX3GTZHpWtcC8SPkT/d4tqdf1cKtesryHm2bgp6l555NYcT2NLvA==} + '@typescript-eslint/tsconfig-utils@8.57.1': + resolution: {integrity: sha512-0lgOZB8cl19fHO4eI46YUx2EceQqhgkPSuCGLlGi79L2jwYY1cxeYc1Nae8Aw1xjgW3PKVDLlr3YJ6Bxx8HkWg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/type-utils@8.57.0': - resolution: {integrity: sha512-yjgh7gmDcJ1+TcEg8x3uWQmn8ifvSupnPfjP21twPKrDP/pTHlEQgmKcitzF/rzPSmv7QjJ90vRpN4U+zoUjwQ==} + '@typescript-eslint/type-utils@8.57.1': + resolution: {integrity: sha512-+Bwwm0ScukFdyoJsh2u6pp4S9ktegF98pYUU0hkphOOqdMB+1sNQhIz8y5E9+4pOioZijrkfNO/HUJVAFFfPKA==} 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.0.0' - '@typescript-eslint/types@8.57.0': - resolution: {integrity: sha512-dTLI8PEXhjUC7B9Kre+u0XznO696BhXcTlOn0/6kf1fHaQW8+VjJAVHJ3eTI14ZapTxdkOmc80HblPQLaEeJdg==} + '@typescript-eslint/types@8.57.1': + resolution: {integrity: sha512-S29BOBPJSFUiblEl6RzPPjJt6w25A6XsBqRVDt53tA/tlL8q7ceQNZHTjPeONt/3S7KRI4quk+yP9jK2WjBiPQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/typescript-estree@8.57.0': - resolution: {integrity: sha512-m7faHcyVg0BT3VdYTlX8GdJEM7COexXxS6KqGopxdtkQRvBanK377QDHr4W/vIPAR+ah9+B/RclSW5ldVniO1Q==} + '@typescript-eslint/typescript-estree@8.57.1': + resolution: {integrity: sha512-ybe2hS9G6pXpqGtPli9Gx9quNV0TWLOmh58ADlmZe9DguLq0tiAKVjirSbtM1szG6+QH6rVXyU6GTLQbWnMY+g==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/utils@8.57.0': - resolution: {integrity: sha512-5iIHvpD3CZe06riAsbNxxreP+MuYgVUsV0n4bwLH//VJmgtt54sQeY2GszntJ4BjYCpMzrfVh2SBnUQTtys2lQ==} + '@typescript-eslint/utils@8.57.1': + resolution: {integrity: sha512-XUNSJ/lEVFttPMMoDVA2r2bwrl8/oPx8cURtczkSEswY5T3AeLmCy+EKWQNdL4u0MmAHOjcWrqJp2cdvgjn8dQ==} 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.0.0' - '@typescript-eslint/visitor-keys@8.57.0': - resolution: {integrity: sha512-zm6xx8UT/Xy2oSr2ZXD0pZo7Jx2XsCoID2IUh9YSTFRu7z+WdwYTRk6LhUftm1crwqbuoF6I8zAFeCMw0YjwDg==} + '@typescript-eslint/visitor-keys@8.57.1': + resolution: {integrity: sha512-YWnmJkXbofiz9KbnbbwuA2rpGkFPLbAIetcCNO6mJ8gdhdZ/v7WDXsoGFAJuM6ikUFKTlSQnjWnVO4ux+UzS6A==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@valibot/to-json-schema@1.5.0': @@ -1131,8 +1131,8 @@ packages: brace-expansion@2.0.2: resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==} - brace-expansion@5.0.3: - resolution: {integrity: sha512-fy6KJm2RawA5RcHkLa1z/ScpBeA762UF9KmZQxwIbDtRJrgLzM10depAiEQ+CXYcoiqW1/m96OAAoke2nE9EeA==} + brace-expansion@5.0.4: + resolution: {integrity: sha512-h+DEnpVvxmfVefa4jFbCf5HdH5YMDXRsmKflpf1pILZWRFlTbJpxeU55nJl4Smt5HQaGzg1o6RHFPJaOqnmBDg==} engines: {node: 18 || 20 || >=22} cac@6.7.14: @@ -1267,6 +1267,9 @@ packages: devalue@5.6.3: resolution: {integrity: sha512-nc7XjUU/2Lb+SvEFVGcWLiKkzfw8+qHI7zn8WYXKkLMgfGSHbgCEaR6bJpev8Cm6Rmrb19Gfd/tZvGqx9is3wg==} + devalue@5.6.4: + resolution: {integrity: sha512-Gp6rDldRsFh/7XuouDbxMH3Mx8GMCcgzIb1pDTvNyn8pZGQ22u+Wa+lGV9dQCltFQ7uVw0MhRyb8XDskNFOReA==} + dijkstrajs@1.0.3: resolution: {integrity: sha512-qiSlmBq9+BCdCA/L46dw8Uy93mloxsPSbwnm5yrKn2vMPiy8KyAskTF6zuV/j5BMsmOGZDPs7KjU+mjb670kfA==} @@ -1353,8 +1356,8 @@ packages: resolution: {integrity: sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==} engines: {node: '>=0.10'} - esrap@2.2.3: - resolution: {integrity: sha512-8fOS+GIGCQZl/ZIlhl59htOlms6U8NvX6ZYgYHpRU/b6tVSh3uHkOHZikl3D4cMbYM0JlpBe+p/BkZEi8J9XIQ==} + esrap@2.2.4: + resolution: {integrity: sha512-suICpxAmZ9A8bzJjEl/+rLJiDKC0X4gYWUxT6URAWBLvlXmtbZd5ySMu/N2ZGEtMCAmflUDPSehrP9BQcsGcSg==} esrecurse@4.3.0: resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} @@ -1701,8 +1704,8 @@ packages: memoize-weak@1.0.2: resolution: {integrity: sha512-gj39xkrjEw7nCn4nJ1M5ms6+MyMlyiGmttzsqAUsAKn6bYKwuTHh/AO3cKPF8IBrTIYTxb0wWXFs3E//Y8VoWQ==} - minimatch@10.2.2: - resolution: {integrity: sha512-+G4CpNBxa5MprY+04MbgOw1v7So6n5JY166pFi9KfYwT78fxScCeSNQSNzp6dpPSW2rONOps6Ocam1wFhCgoVw==} + minimatch@10.2.4: + resolution: {integrity: sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg==} engines: {node: 18 || 20 || >=22} minimatch@3.1.2: @@ -1847,6 +1850,10 @@ packages: resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==} engines: {node: ^10 || ^12 || >=14} + postcss@8.5.8: + resolution: {integrity: sha512-OW/rX8O/jXnm82Ey1k44pObPtdblfiuWnrd8X7GJ7emImCOstunGbXUpp7HdBrFQX6rJzn3sPT397Wp5aCwCHg==} + engines: {node: ^10 || ^12 || >=14} + prelude-ls@1.2.1: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} @@ -2072,9 +2079,9 @@ packages: peerDependencies: svelte: ^5.0.0 - svelte-eslint-parser@1.4.1: - resolution: {integrity: sha512-1eqkfQ93goAhjAXxZiu1SaKI9+0/sxp4JIWQwUpsz7ybehRE5L8dNuz7Iry7K22R47p5/+s9EM+38nHV2OlgXA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0, pnpm: 10.24.0} + svelte-eslint-parser@1.6.0: + resolution: {integrity: sha512-qoB1ehychT6OxEtQAqc/guSqLS20SlA53Uijl7x375s8nlUT0lb9ol/gzraEEatQwsyPTJo87s2CmKL9Xab+Uw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0, pnpm: 10.30.3} peerDependencies: svelte: ^3.37.0 || ^4.0.0 || ^5.0.0 peerDependenciesMeta: @@ -2098,8 +2105,8 @@ packages: peerDependencies: svelte: ^5.0.0-next.126 - svelte@5.53.9: - resolution: {integrity: sha512-MwDfWsN8qZzeP0jlQsWF4k/4B3csb3IbzCRggF+L/QqY7T8bbKvnChEo1cPZztF51HJQhilDbevWYl2LvXbquA==} + svelte@5.53.12: + resolution: {integrity: sha512-4x/uk4rQe/d7RhfvS8wemTfNjQ0bJbKvamIzRBfTe2eHHjzBZ7PZicUQrC2ryj83xxEacfA1zHKd1ephD1tAxA==} engines: {node: '>=18'} sveltekit-superforms@2.30.0: @@ -2199,8 +2206,8 @@ packages: typebox@1.1.5: resolution: {integrity: sha512-TBdiM4mSppvWdmRDK5PoocxrMOqGIU9TxmS9zdHH+k8S/+2SIaNlPfMlx3f6hISxma14t2yX7SRySg7+TYYT9w==} - typescript-eslint@8.57.0: - resolution: {integrity: sha512-W8GcigEMEeB07xEZol8oJ26rigm3+bfPHxHvwbYUlu1fUDsGuQ7Hiskx5xGW/xM4USc9Ephe3jtv7ZYPQntHeA==} + typescript-eslint@8.57.1: + resolution: {integrity: sha512-fLvZWf+cAGw3tqMCYzGIU6yR8K+Y9NT2z23RwOjlNFF2HwSB3KhdEFI5lSBv8tNmFkkBShSjsCjzx1vahZfISA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 @@ -2546,16 +2553,16 @@ snapshots: '@exodus/schemasafe@1.3.0': optional: true - '@floating-ui/core@1.7.4': + '@floating-ui/core@1.7.5': dependencies: - '@floating-ui/utils': 0.2.10 + '@floating-ui/utils': 0.2.11 - '@floating-ui/dom@1.7.5': + '@floating-ui/dom@1.7.6': dependencies: - '@floating-ui/core': 1.7.4 - '@floating-ui/utils': 0.2.10 + '@floating-ui/core': 1.7.5 + '@floating-ui/utils': 0.2.11 - '@floating-ui/utils@0.2.10': {} + '@floating-ui/utils@0.2.11': {} '@hapi/hoek@9.3.0': optional: true @@ -2576,10 +2583,10 @@ snapshots: '@humanwhocodes/retry@0.4.3': {} - '@inlang/paraglide-js@2.14.0': + '@inlang/paraglide-js@2.15.0': dependencies: '@inlang/recommend-sherlock': 0.2.1 - '@inlang/sdk': 2.7.0 + '@inlang/sdk': 2.8.0 commander: 11.1.0 consola: 3.4.0 json5: 2.2.3 @@ -2592,7 +2599,7 @@ snapshots: dependencies: comment-json: 4.6.2 - '@inlang/sdk@2.7.0': + '@inlang/sdk@2.8.0': dependencies: '@lix-js/sdk': 0.4.7 '@sinclair/typebox': 0.31.28 @@ -2604,7 +2611,7 @@ snapshots: '@internationalized/date@3.12.0': dependencies: - '@swc/helpers': 0.5.18 + '@swc/helpers': 0.5.19 '@jridgewell/gen-mapping@0.3.13': dependencies: @@ -2639,9 +2646,9 @@ snapshots: '@lix-js/server-protocol-schema@0.1.1': {} - '@lucide/svelte@0.577.0(svelte@5.53.9)': + '@lucide/svelte@0.577.0(svelte@5.53.12)': dependencies: - svelte: 5.53.9 + svelte: 5.53.12 '@polka/url@1.0.0-next.29': {} @@ -2878,52 +2885,52 @@ snapshots: dependencies: acorn: 8.16.0 - '@sveltejs/adapter-node@5.5.4(@sveltejs/kit@2.53.4(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.53.9)(vite@7.3.1(@types/node@22.19.11)(jiti@2.6.1)(lightningcss@1.31.1)))(svelte@5.53.9)(typescript@5.9.3)(vite@7.3.1(@types/node@22.19.11)(jiti@2.6.1)(lightningcss@1.31.1)))': + '@sveltejs/adapter-node@5.5.4(@sveltejs/kit@2.55.0(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.53.12)(vite@7.3.1(@types/node@22.19.11)(jiti@2.6.1)(lightningcss@1.31.1)))(svelte@5.53.12)(typescript@5.9.3)(vite@7.3.1(@types/node@22.19.11)(jiti@2.6.1)(lightningcss@1.31.1)))': dependencies: '@rollup/plugin-commonjs': 29.0.0(rollup@4.59.0) '@rollup/plugin-json': 6.1.0(rollup@4.59.0) '@rollup/plugin-node-resolve': 16.0.3(rollup@4.59.0) - '@sveltejs/kit': 2.53.4(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.53.9)(vite@7.3.1(@types/node@22.19.11)(jiti@2.6.1)(lightningcss@1.31.1)))(svelte@5.53.9)(typescript@5.9.3)(vite@7.3.1(@types/node@22.19.11)(jiti@2.6.1)(lightningcss@1.31.1)) + '@sveltejs/kit': 2.55.0(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.53.12)(vite@7.3.1(@types/node@22.19.11)(jiti@2.6.1)(lightningcss@1.31.1)))(svelte@5.53.12)(typescript@5.9.3)(vite@7.3.1(@types/node@22.19.11)(jiti@2.6.1)(lightningcss@1.31.1)) rollup: 4.59.0 - '@sveltejs/kit@2.53.4(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.53.9)(vite@7.3.1(@types/node@22.19.11)(jiti@2.6.1)(lightningcss@1.31.1)))(svelte@5.53.9)(typescript@5.9.3)(vite@7.3.1(@types/node@22.19.11)(jiti@2.6.1)(lightningcss@1.31.1))': + '@sveltejs/kit@2.55.0(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.53.12)(vite@7.3.1(@types/node@22.19.11)(jiti@2.6.1)(lightningcss@1.31.1)))(svelte@5.53.12)(typescript@5.9.3)(vite@7.3.1(@types/node@22.19.11)(jiti@2.6.1)(lightningcss@1.31.1))': dependencies: '@standard-schema/spec': 1.1.0 '@sveltejs/acorn-typescript': 1.0.9(acorn@8.16.0) - '@sveltejs/vite-plugin-svelte': 6.2.4(svelte@5.53.9)(vite@7.3.1(@types/node@22.19.11)(jiti@2.6.1)(lightningcss@1.31.1)) + '@sveltejs/vite-plugin-svelte': 6.2.4(svelte@5.53.12)(vite@7.3.1(@types/node@22.19.11)(jiti@2.6.1)(lightningcss@1.31.1)) '@types/cookie': 0.6.0 acorn: 8.16.0 cookie: 0.6.0 - devalue: 5.6.3 + devalue: 5.6.4 esm-env: 1.2.2 kleur: 4.1.5 magic-string: 0.30.21 mrmime: 2.0.1 set-cookie-parser: 3.0.1 sirv: 3.0.2 - svelte: 5.53.9 + svelte: 5.53.12 vite: 7.3.1(@types/node@22.19.11)(jiti@2.6.1)(lightningcss@1.31.1) optionalDependencies: typescript: 5.9.3 - '@sveltejs/vite-plugin-svelte-inspector@5.0.2(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.53.9)(vite@7.3.1(@types/node@22.19.11)(jiti@2.6.1)(lightningcss@1.31.1)))(svelte@5.53.9)(vite@7.3.1(@types/node@22.19.11)(jiti@2.6.1)(lightningcss@1.31.1))': + '@sveltejs/vite-plugin-svelte-inspector@5.0.2(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.53.12)(vite@7.3.1(@types/node@22.19.11)(jiti@2.6.1)(lightningcss@1.31.1)))(svelte@5.53.12)(vite@7.3.1(@types/node@22.19.11)(jiti@2.6.1)(lightningcss@1.31.1))': dependencies: - '@sveltejs/vite-plugin-svelte': 6.2.4(svelte@5.53.9)(vite@7.3.1(@types/node@22.19.11)(jiti@2.6.1)(lightningcss@1.31.1)) + '@sveltejs/vite-plugin-svelte': 6.2.4(svelte@5.53.12)(vite@7.3.1(@types/node@22.19.11)(jiti@2.6.1)(lightningcss@1.31.1)) obug: 2.1.1 - svelte: 5.53.9 + svelte: 5.53.12 vite: 7.3.1(@types/node@22.19.11)(jiti@2.6.1)(lightningcss@1.31.1) - '@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.53.9)(vite@7.3.1(@types/node@22.19.11)(jiti@2.6.1)(lightningcss@1.31.1))': + '@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.53.12)(vite@7.3.1(@types/node@22.19.11)(jiti@2.6.1)(lightningcss@1.31.1))': dependencies: - '@sveltejs/vite-plugin-svelte-inspector': 5.0.2(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.53.9)(vite@7.3.1(@types/node@22.19.11)(jiti@2.6.1)(lightningcss@1.31.1)))(svelte@5.53.9)(vite@7.3.1(@types/node@22.19.11)(jiti@2.6.1)(lightningcss@1.31.1)) + '@sveltejs/vite-plugin-svelte-inspector': 5.0.2(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.53.12)(vite@7.3.1(@types/node@22.19.11)(jiti@2.6.1)(lightningcss@1.31.1)))(svelte@5.53.12)(vite@7.3.1(@types/node@22.19.11)(jiti@2.6.1)(lightningcss@1.31.1)) deepmerge: 4.3.1 magic-string: 0.30.21 obug: 2.1.1 - svelte: 5.53.9 + svelte: 5.53.12 vite: 7.3.1(@types/node@22.19.11)(jiti@2.6.1)(lightningcss@1.31.1) vitefu: 1.1.1(vite@7.3.1(@types/node@22.19.11)(jiti@2.6.1)(lightningcss@1.31.1)) - '@swc/helpers@0.5.18': + '@swc/helpers@0.5.19': dependencies: tslib: 2.8.1 @@ -3037,14 +3044,14 @@ snapshots: '@types/json-schema': 7.0.15 optional: true - '@typescript-eslint/eslint-plugin@8.57.0(@typescript-eslint/parser@8.57.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/eslint-plugin@8.57.1(@typescript-eslint/parser@8.57.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)': dependencies: '@eslint-community/regexpp': 4.12.2 - '@typescript-eslint/parser': 8.57.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/scope-manager': 8.57.0 - '@typescript-eslint/type-utils': 8.57.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/utils': 8.57.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/visitor-keys': 8.57.0 + '@typescript-eslint/parser': 8.57.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/scope-manager': 8.57.1 + '@typescript-eslint/type-utils': 8.57.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/utils': 8.57.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/visitor-keys': 8.57.1 eslint: 9.39.2(jiti@2.6.1) ignore: 7.0.5 natural-compare: 1.4.0 @@ -3053,41 +3060,41 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.57.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/parser@8.57.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)': dependencies: - '@typescript-eslint/scope-manager': 8.57.0 - '@typescript-eslint/types': 8.57.0 - '@typescript-eslint/typescript-estree': 8.57.0(typescript@5.9.3) - '@typescript-eslint/visitor-keys': 8.57.0 + '@typescript-eslint/scope-manager': 8.57.1 + '@typescript-eslint/types': 8.57.1 + '@typescript-eslint/typescript-estree': 8.57.1(typescript@5.9.3) + '@typescript-eslint/visitor-keys': 8.57.1 debug: 4.4.3(supports-color@10.2.2) eslint: 9.39.2(jiti@2.6.1) typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/project-service@8.57.0(typescript@5.9.3)': + '@typescript-eslint/project-service@8.57.1(typescript@5.9.3)': dependencies: - '@typescript-eslint/tsconfig-utils': 8.57.0(typescript@5.9.3) - '@typescript-eslint/types': 8.57.0 + '@typescript-eslint/tsconfig-utils': 8.57.1(typescript@5.9.3) + '@typescript-eslint/types': 8.57.1 debug: 4.4.3(supports-color@10.2.2) typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/scope-manager@8.57.0': + '@typescript-eslint/scope-manager@8.57.1': dependencies: - '@typescript-eslint/types': 8.57.0 - '@typescript-eslint/visitor-keys': 8.57.0 + '@typescript-eslint/types': 8.57.1 + '@typescript-eslint/visitor-keys': 8.57.1 - '@typescript-eslint/tsconfig-utils@8.57.0(typescript@5.9.3)': + '@typescript-eslint/tsconfig-utils@8.57.1(typescript@5.9.3)': dependencies: typescript: 5.9.3 - '@typescript-eslint/type-utils@8.57.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/type-utils@8.57.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)': dependencies: - '@typescript-eslint/types': 8.57.0 - '@typescript-eslint/typescript-estree': 8.57.0(typescript@5.9.3) - '@typescript-eslint/utils': 8.57.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/types': 8.57.1 + '@typescript-eslint/typescript-estree': 8.57.1(typescript@5.9.3) + '@typescript-eslint/utils': 8.57.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) debug: 4.4.3(supports-color@10.2.2) eslint: 9.39.2(jiti@2.6.1) ts-api-utils: 2.4.0(typescript@5.9.3) @@ -3095,16 +3102,16 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/types@8.57.0': {} + '@typescript-eslint/types@8.57.1': {} - '@typescript-eslint/typescript-estree@8.57.0(typescript@5.9.3)': + '@typescript-eslint/typescript-estree@8.57.1(typescript@5.9.3)': dependencies: - '@typescript-eslint/project-service': 8.57.0(typescript@5.9.3) - '@typescript-eslint/tsconfig-utils': 8.57.0(typescript@5.9.3) - '@typescript-eslint/types': 8.57.0 - '@typescript-eslint/visitor-keys': 8.57.0 + '@typescript-eslint/project-service': 8.57.1(typescript@5.9.3) + '@typescript-eslint/tsconfig-utils': 8.57.1(typescript@5.9.3) + '@typescript-eslint/types': 8.57.1 + '@typescript-eslint/visitor-keys': 8.57.1 debug: 4.4.3(supports-color@10.2.2) - minimatch: 10.2.2 + minimatch: 10.2.4 semver: 7.7.4 tinyglobby: 0.2.15 ts-api-utils: 2.4.0(typescript@5.9.3) @@ -3112,20 +3119,20 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.57.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/utils@8.57.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)': dependencies: '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.2(jiti@2.6.1)) - '@typescript-eslint/scope-manager': 8.57.0 - '@typescript-eslint/types': 8.57.0 - '@typescript-eslint/typescript-estree': 8.57.0(typescript@5.9.3) + '@typescript-eslint/scope-manager': 8.57.1 + '@typescript-eslint/types': 8.57.1 + '@typescript-eslint/typescript-estree': 8.57.1(typescript@5.9.3) eslint: 9.39.2(jiti@2.6.1) typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/visitor-keys@8.57.0': + '@typescript-eslint/visitor-keys@8.57.1': dependencies: - '@typescript-eslint/types': 8.57.0 + '@typescript-eslint/types': 8.57.1 eslint-visitor-keys: 5.0.1 '@valibot/to-json-schema@1.5.0(valibot@1.2.0(typescript@5.9.3))': @@ -3239,15 +3246,15 @@ snapshots: balanced-match@4.0.4: {} - bits-ui@2.16.3(@internationalized/date@3.12.0)(@sveltejs/kit@2.53.4(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.53.9)(vite@7.3.1(@types/node@22.19.11)(jiti@2.6.1)(lightningcss@1.31.1)))(svelte@5.53.9)(typescript@5.9.3)(vite@7.3.1(@types/node@22.19.11)(jiti@2.6.1)(lightningcss@1.31.1)))(svelte@5.53.9): + bits-ui@2.16.3(@internationalized/date@3.12.0)(@sveltejs/kit@2.55.0(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.53.12)(vite@7.3.1(@types/node@22.19.11)(jiti@2.6.1)(lightningcss@1.31.1)))(svelte@5.53.12)(typescript@5.9.3)(vite@7.3.1(@types/node@22.19.11)(jiti@2.6.1)(lightningcss@1.31.1)))(svelte@5.53.12): dependencies: - '@floating-ui/core': 1.7.4 - '@floating-ui/dom': 1.7.5 + '@floating-ui/core': 1.7.5 + '@floating-ui/dom': 1.7.6 '@internationalized/date': 3.12.0 esm-env: 1.2.2 - runed: 0.35.1(@sveltejs/kit@2.53.4(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.53.9)(vite@7.3.1(@types/node@22.19.11)(jiti@2.6.1)(lightningcss@1.31.1)))(svelte@5.53.9)(typescript@5.9.3)(vite@7.3.1(@types/node@22.19.11)(jiti@2.6.1)(lightningcss@1.31.1)))(svelte@5.53.9) - svelte: 5.53.9 - svelte-toolbelt: 0.10.6(@sveltejs/kit@2.53.4(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.53.9)(vite@7.3.1(@types/node@22.19.11)(jiti@2.6.1)(lightningcss@1.31.1)))(svelte@5.53.9)(typescript@5.9.3)(vite@7.3.1(@types/node@22.19.11)(jiti@2.6.1)(lightningcss@1.31.1)))(svelte@5.53.9) + runed: 0.35.1(@sveltejs/kit@2.55.0(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.53.12)(vite@7.3.1(@types/node@22.19.11)(jiti@2.6.1)(lightningcss@1.31.1)))(svelte@5.53.12)(typescript@5.9.3)(vite@7.3.1(@types/node@22.19.11)(jiti@2.6.1)(lightningcss@1.31.1)))(svelte@5.53.12) + svelte: 5.53.12 + svelte-toolbelt: 0.10.6(@sveltejs/kit@2.55.0(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.53.12)(vite@7.3.1(@types/node@22.19.11)(jiti@2.6.1)(lightningcss@1.31.1)))(svelte@5.53.12)(typescript@5.9.3)(vite@7.3.1(@types/node@22.19.11)(jiti@2.6.1)(lightningcss@1.31.1)))(svelte@5.53.12) tabbable: 6.4.0 transitivePeerDependencies: - '@sveltejs/kit' @@ -3261,7 +3268,7 @@ snapshots: dependencies: balanced-match: 1.0.2 - brace-expansion@5.0.3: + brace-expansion@5.0.4: dependencies: balanced-match: 4.0.4 @@ -3366,6 +3373,8 @@ snapshots: devalue@5.6.3: {} + devalue@5.6.4: {} + dijkstrajs@1.0.3: {} dlv@1.1.3: @@ -3421,7 +3430,7 @@ snapshots: dependencies: eslint: 9.39.2(jiti@2.6.1) - eslint-plugin-svelte@3.15.2(eslint@9.39.2(jiti@2.6.1))(svelte@5.53.9): + eslint-plugin-svelte@3.15.2(eslint@9.39.2(jiti@2.6.1))(svelte@5.53.12): dependencies: '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.2(jiti@2.6.1)) '@jridgewell/sourcemap-codec': 1.5.5 @@ -3429,13 +3438,13 @@ snapshots: esutils: 2.0.3 globals: 16.5.0 known-css-properties: 0.37.0 - postcss: 8.5.6 - postcss-load-config: 3.1.4(postcss@8.5.6) - postcss-safe-parser: 7.0.1(postcss@8.5.6) + postcss: 8.5.8 + postcss-load-config: 3.1.4(postcss@8.5.8) + postcss-safe-parser: 7.0.1(postcss@8.5.8) semver: 7.7.4 - svelte-eslint-parser: 1.4.1(svelte@5.53.9) + svelte-eslint-parser: 1.6.0(svelte@5.53.12) optionalDependencies: - svelte: 5.53.9 + svelte: 5.53.12 transitivePeerDependencies: - ts-node @@ -3505,9 +3514,10 @@ snapshots: dependencies: estraverse: 5.3.0 - esrap@2.2.3: + esrap@2.2.4: dependencies: '@jridgewell/sourcemap-codec': 1.5.5 + '@typescript-eslint/types': 8.57.1 esrecurse@4.3.0: dependencies: @@ -3565,11 +3575,11 @@ snapshots: flatted@3.3.3: {} - formsnap@2.0.1(svelte@5.53.9)(sveltekit-superforms@2.30.0(@sveltejs/kit@2.53.4(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.53.9)(vite@7.3.1(@types/node@22.19.11)(jiti@2.6.1)(lightningcss@1.31.1)))(svelte@5.53.9)(typescript@5.9.3)(vite@7.3.1(@types/node@22.19.11)(jiti@2.6.1)(lightningcss@1.31.1)))(@types/json-schema@7.0.15)(svelte@5.53.9)(typescript@5.9.3)): + formsnap@2.0.1(svelte@5.53.12)(sveltekit-superforms@2.30.0(@sveltejs/kit@2.55.0(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.53.12)(vite@7.3.1(@types/node@22.19.11)(jiti@2.6.1)(lightningcss@1.31.1)))(svelte@5.53.12)(typescript@5.9.3)(vite@7.3.1(@types/node@22.19.11)(jiti@2.6.1)(lightningcss@1.31.1)))(@types/json-schema@7.0.15)(svelte@5.53.12)(typescript@5.9.3)): dependencies: - svelte: 5.53.9 - svelte-toolbelt: 0.5.0(svelte@5.53.9) - sveltekit-superforms: 2.30.0(@sveltejs/kit@2.53.4(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.53.9)(vite@7.3.1(@types/node@22.19.11)(jiti@2.6.1)(lightningcss@1.31.1)))(svelte@5.53.9)(typescript@5.9.3)(vite@7.3.1(@types/node@22.19.11)(jiti@2.6.1)(lightningcss@1.31.1)))(@types/json-schema@7.0.15)(svelte@5.53.9)(typescript@5.9.3) + svelte: 5.53.12 + svelte-toolbelt: 0.5.0(svelte@5.53.12) + sveltekit-superforms: 2.30.0(@sveltejs/kit@2.55.0(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.53.12)(vite@7.3.1(@types/node@22.19.11)(jiti@2.6.1)(lightningcss@1.31.1)))(svelte@5.53.12)(typescript@5.9.3)(vite@7.3.1(@types/node@22.19.11)(jiti@2.6.1)(lightningcss@1.31.1)))(@types/json-schema@7.0.15)(svelte@5.53.12)(typescript@5.9.3) fsevents@2.3.3: optional: true @@ -3774,9 +3784,9 @@ snapshots: memoize-weak@1.0.2: {} - minimatch@10.2.2: + minimatch@10.2.4: dependencies: - brace-expansion: 5.0.3 + brace-expansion: 5.0.4 minimatch@3.1.2: dependencies: @@ -3872,20 +3882,20 @@ snapshots: pngjs@5.0.0: {} - postcss-load-config@3.1.4(postcss@8.5.6): + postcss-load-config@3.1.4(postcss@8.5.8): dependencies: lilconfig: 2.1.0 yaml: 1.10.2 optionalDependencies: - postcss: 8.5.6 + postcss: 8.5.8 - postcss-safe-parser@7.0.1(postcss@8.5.6): + postcss-safe-parser@7.0.1(postcss@8.5.8): dependencies: - postcss: 8.5.6 + postcss: 8.5.8 - postcss-scss@4.0.9(postcss@8.5.6): + postcss-scss@4.0.9(postcss@8.5.8): dependencies: - postcss: 8.5.6 + postcss: 8.5.8 postcss-selector-parser@7.1.1: dependencies: @@ -3898,18 +3908,24 @@ snapshots: picocolors: 1.1.1 source-map-js: 1.2.1 + postcss@8.5.8: + dependencies: + nanoid: 3.3.11 + picocolors: 1.1.1 + source-map-js: 1.2.1 + prelude-ls@1.2.1: {} - prettier-plugin-svelte@3.5.1(prettier@3.8.1)(svelte@5.53.9): + prettier-plugin-svelte@3.5.1(prettier@3.8.1)(svelte@5.53.12): dependencies: prettier: 3.8.1 - svelte: 5.53.9 + svelte: 5.53.12 - prettier-plugin-tailwindcss@0.7.2(prettier-plugin-svelte@3.5.1(prettier@3.8.1)(svelte@5.53.9))(prettier@3.8.1): + prettier-plugin-tailwindcss@0.7.2(prettier-plugin-svelte@3.5.1(prettier@3.8.1)(svelte@5.53.12))(prettier@3.8.1): dependencies: prettier: 3.8.1 optionalDependencies: - prettier-plugin-svelte: 3.5.1(prettier@3.8.1)(svelte@5.53.9) + prettier-plugin-svelte: 3.5.1(prettier@3.8.1)(svelte@5.53.12) prettier@3.8.1: {} @@ -4005,19 +4021,19 @@ snapshots: '@rollup/rollup-win32-x64-msvc': 4.59.0 fsevents: 2.3.3 - runed@0.28.0(svelte@5.53.9): + runed@0.28.0(svelte@5.53.12): dependencies: esm-env: 1.2.2 - svelte: 5.53.9 + svelte: 5.53.12 - runed@0.35.1(@sveltejs/kit@2.53.4(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.53.9)(vite@7.3.1(@types/node@22.19.11)(jiti@2.6.1)(lightningcss@1.31.1)))(svelte@5.53.9)(typescript@5.9.3)(vite@7.3.1(@types/node@22.19.11)(jiti@2.6.1)(lightningcss@1.31.1)))(svelte@5.53.9): + runed@0.35.1(@sveltejs/kit@2.55.0(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.53.12)(vite@7.3.1(@types/node@22.19.11)(jiti@2.6.1)(lightningcss@1.31.1)))(svelte@5.53.12)(typescript@5.9.3)(vite@7.3.1(@types/node@22.19.11)(jiti@2.6.1)(lightningcss@1.31.1)))(svelte@5.53.12): dependencies: dequal: 2.0.3 esm-env: 1.2.2 lz-string: 1.5.0 - svelte: 5.53.9 + svelte: 5.53.12 optionalDependencies: - '@sveltejs/kit': 2.53.4(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.53.9)(vite@7.3.1(@types/node@22.19.11)(jiti@2.6.1)(lightningcss@1.31.1)))(svelte@5.53.9)(typescript@5.9.3)(vite@7.3.1(@types/node@22.19.11)(jiti@2.6.1)(lightningcss@1.31.1)) + '@sveltejs/kit': 2.55.0(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.53.12)(vite@7.3.1(@types/node@22.19.11)(jiti@2.6.1)(lightningcss@1.31.1)))(svelte@5.53.12)(typescript@5.9.3)(vite@7.3.1(@types/node@22.19.11)(jiti@2.6.1)(lightningcss@1.31.1)) sade@1.8.1: dependencies: @@ -4085,54 +4101,55 @@ snapshots: supports-preserve-symlinks-flag@1.0.0: {} - svelte-check@4.4.5(picomatch@4.0.3)(svelte@5.53.9)(typescript@5.9.3): + svelte-check@4.4.5(picomatch@4.0.3)(svelte@5.53.12)(typescript@5.9.3): dependencies: '@jridgewell/trace-mapping': 0.3.31 chokidar: 4.0.3 fdir: 6.5.0(picomatch@4.0.3) picocolors: 1.1.1 sade: 1.8.1 - svelte: 5.53.9 + svelte: 5.53.12 typescript: 5.9.3 transitivePeerDependencies: - picomatch - svelte-easy-crop@5.0.0(svelte@5.53.9): + svelte-easy-crop@5.0.0(svelte@5.53.12): dependencies: - svelte: 5.53.9 + svelte: 5.53.12 - svelte-eslint-parser@1.4.1(svelte@5.53.9): + svelte-eslint-parser@1.6.0(svelte@5.53.12): dependencies: eslint-scope: 8.4.0 eslint-visitor-keys: 4.2.1 espree: 10.4.0 - postcss: 8.5.6 - postcss-scss: 4.0.9(postcss@8.5.6) + postcss: 8.5.8 + postcss-scss: 4.0.9(postcss@8.5.8) postcss-selector-parser: 7.1.1 + semver: 7.7.4 optionalDependencies: - svelte: 5.53.9 + svelte: 5.53.12 - svelte-sonner@1.1.0(svelte@5.53.9): + svelte-sonner@1.1.0(svelte@5.53.12): dependencies: - runed: 0.28.0(svelte@5.53.9) - svelte: 5.53.9 + runed: 0.28.0(svelte@5.53.12) + svelte: 5.53.12 - svelte-toolbelt@0.10.6(@sveltejs/kit@2.53.4(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.53.9)(vite@7.3.1(@types/node@22.19.11)(jiti@2.6.1)(lightningcss@1.31.1)))(svelte@5.53.9)(typescript@5.9.3)(vite@7.3.1(@types/node@22.19.11)(jiti@2.6.1)(lightningcss@1.31.1)))(svelte@5.53.9): + svelte-toolbelt@0.10.6(@sveltejs/kit@2.55.0(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.53.12)(vite@7.3.1(@types/node@22.19.11)(jiti@2.6.1)(lightningcss@1.31.1)))(svelte@5.53.12)(typescript@5.9.3)(vite@7.3.1(@types/node@22.19.11)(jiti@2.6.1)(lightningcss@1.31.1)))(svelte@5.53.12): dependencies: clsx: 2.1.1 - runed: 0.35.1(@sveltejs/kit@2.53.4(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.53.9)(vite@7.3.1(@types/node@22.19.11)(jiti@2.6.1)(lightningcss@1.31.1)))(svelte@5.53.9)(typescript@5.9.3)(vite@7.3.1(@types/node@22.19.11)(jiti@2.6.1)(lightningcss@1.31.1)))(svelte@5.53.9) + runed: 0.35.1(@sveltejs/kit@2.55.0(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.53.12)(vite@7.3.1(@types/node@22.19.11)(jiti@2.6.1)(lightningcss@1.31.1)))(svelte@5.53.12)(typescript@5.9.3)(vite@7.3.1(@types/node@22.19.11)(jiti@2.6.1)(lightningcss@1.31.1)))(svelte@5.53.12) style-to-object: 1.0.14 - svelte: 5.53.9 + svelte: 5.53.12 transitivePeerDependencies: - '@sveltejs/kit' - svelte-toolbelt@0.5.0(svelte@5.53.9): + svelte-toolbelt@0.5.0(svelte@5.53.12): dependencies: clsx: 2.1.1 style-to-object: 1.0.14 - svelte: 5.53.9 + svelte: 5.53.12 - svelte@5.53.9: + svelte@5.53.12: dependencies: '@jridgewell/remapping': 2.3.5 '@jridgewell/sourcemap-codec': 1.5.5 @@ -4143,20 +4160,20 @@ snapshots: aria-query: 5.3.1 axobject-query: 4.1.0 clsx: 2.1.1 - devalue: 5.6.3 + devalue: 5.6.4 esm-env: 1.2.2 - esrap: 2.2.3 + esrap: 2.2.4 is-reference: 3.0.3 locate-character: 3.0.0 magic-string: 0.30.21 zimmerframe: 1.1.4 - sveltekit-superforms@2.30.0(@sveltejs/kit@2.53.4(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.53.9)(vite@7.3.1(@types/node@22.19.11)(jiti@2.6.1)(lightningcss@1.31.1)))(svelte@5.53.9)(typescript@5.9.3)(vite@7.3.1(@types/node@22.19.11)(jiti@2.6.1)(lightningcss@1.31.1)))(@types/json-schema@7.0.15)(svelte@5.53.9)(typescript@5.9.3): + sveltekit-superforms@2.30.0(@sveltejs/kit@2.55.0(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.53.12)(vite@7.3.1(@types/node@22.19.11)(jiti@2.6.1)(lightningcss@1.31.1)))(svelte@5.53.12)(typescript@5.9.3)(vite@7.3.1(@types/node@22.19.11)(jiti@2.6.1)(lightningcss@1.31.1)))(@types/json-schema@7.0.15)(svelte@5.53.12)(typescript@5.9.3): dependencies: - '@sveltejs/kit': 2.53.4(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.53.9)(vite@7.3.1(@types/node@22.19.11)(jiti@2.6.1)(lightningcss@1.31.1)))(svelte@5.53.9)(typescript@5.9.3)(vite@7.3.1(@types/node@22.19.11)(jiti@2.6.1)(lightningcss@1.31.1)) + '@sveltejs/kit': 2.55.0(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.53.12)(vite@7.3.1(@types/node@22.19.11)(jiti@2.6.1)(lightningcss@1.31.1)))(svelte@5.53.12)(typescript@5.9.3)(vite@7.3.1(@types/node@22.19.11)(jiti@2.6.1)(lightningcss@1.31.1)) devalue: 5.6.3 memoize-weak: 1.0.2 - svelte: 5.53.9 + svelte: 5.53.12 ts-deepmerge: 7.0.3 optionalDependencies: '@exodus/schemasafe': 1.3.0 @@ -4243,12 +4260,12 @@ snapshots: typebox@1.1.5: optional: true - typescript-eslint@8.57.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3): + typescript-eslint@8.57.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3): dependencies: - '@typescript-eslint/eslint-plugin': 8.57.0(@typescript-eslint/parser@8.57.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/parser': 8.57.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/typescript-estree': 8.57.0(typescript@5.9.3) - '@typescript-eslint/utils': 8.57.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/eslint-plugin': 8.57.1(@typescript-eslint/parser@8.57.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/parser': 8.57.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/typescript-estree': 8.57.1(typescript@5.9.3) + '@typescript-eslint/utils': 8.57.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) eslint: 9.39.2(jiti@2.6.1) typescript: 5.9.3 transitivePeerDependencies: