- Delete old Vite+Svelte frontend - Initialize new SvelteKit project with TypeScript - Configure Tailwind CSS v4 + DaisyUI - Implement JWT authentication with auto-refresh - Create login page with form validation (Zod) - Add protected route guards - Update Docker configuration for single-stage build - Add E2E tests with Playwright (6/11 passing) - Fix Svelte 5 reactivity with $state() runes Known issues: - 5 E2E tests failing (timing/async issues) - Token refresh implementation needs debugging - Validation error display timing
@ark/schema
Underlying schema language parsed from arktype syntax.
The parts of ArkType's type system that exist in TS (i.e. not runtime-only constraints like bounds, divisors, custom predicates, morphs etc.) are structured like this:
- Union: a set of intersections
- Intersection: a set of a basis and constraints
- Basis: this is the base type to which refinements like props are applied. It is one of three things, getting narrower as you move down the list:
- Domain:
"string" | "number" | "bigint" | "object" | "symbol"parallels built-in TS keywords for non-enumerable value sets - Proto: Must be an
instanceofsome class (implies domain"object") - Unit: Must
===some value (can be intersected with any other constraint and reduced to itself or a disjoint)
- Domain:
- Constraint: an individual condition that must be satisfied:
- Required: must have a specified literal string or symbol key and a value that conforms to a specified union or intersection
- Optional: Required conditions met or the specified key is not present
- Index: all keys that satisfy an index type must have values satisfying the corresponding value type
In this system, L extends/subtypes/is assignable to R if and only if the intersection L & R is equal to L.