Serve built Workers directly through pinned Miniflare with persistent D1-compatible storage and startup migrations. Build and verify Docker images in CI; publish main checkpoints to GHCR for manual TrueNAS updates on port 33046. Preserve explicit public-origin checks and LAN-compatible cryptographic operation IDs. Validation: 5,153 offline tests, typecheck, lint and build; 49 HTTP integration cases; HTTPS-origin create/join/chat/seat protection, foreign-origin rejection, exact saved-seat restart and browser asset serving. Independent persistence/proxy review completed. Clean Docker CI and actual NAS installation follow this source checkpoint.
70 lines
2.2 KiB
JSON
70 lines
2.2 KiB
JSON
{
|
|
"name": "sites-project",
|
|
"version": "0.1.0",
|
|
"private": true,
|
|
"engines": {
|
|
"node": ">=22.13.0"
|
|
},
|
|
"scripts": {
|
|
"dev": "vinext dev",
|
|
"build": "vinext build",
|
|
"start": "wrangler dev --config dist/server/wrangler.json",
|
|
"lint": "oxlint",
|
|
"format": "oxfmt",
|
|
"db:generate": "drizzle-kit generate",
|
|
"test": "node --import tsx tools/test.ts",
|
|
"test:multiplayer": "node --import tsx tools/test.ts --suite multiplayer",
|
|
"typecheck": "tsc --noEmit",
|
|
"db:local": "wrangler d1 migrations apply DB --local --config tools/wrangler.local.json --persist-to .wrangler/state",
|
|
"test:unit": "node --import tsx tools/test.ts --suite unit",
|
|
"test:recovery": "node --import tsx tools/test.ts --suite recovery",
|
|
"test:integration": "node --import tsx tools/test.ts --suite integration",
|
|
"test:all": "node --import tsx tools/test.ts --suite all",
|
|
"check": "npm run typecheck && npm run lint && npm test"
|
|
},
|
|
"dependencies": {
|
|
"react": "19.2.6",
|
|
"react-dom": "19.2.6",
|
|
"react-server-dom-webpack": "19.2.6",
|
|
"vinext": "1.0.0-beta.5",
|
|
"drizzle-orm": "0.45.2",
|
|
"@base-ui/react": "1.7.0",
|
|
"@shadcn/react": "0.3.0",
|
|
"class-variance-authority": "0.7.1",
|
|
"clsx": "2.1.1",
|
|
"cmdk": "1.1.1",
|
|
"date-fns": "4.1.0",
|
|
"embla-carousel-react": "8.5.2",
|
|
"input-otp": "1.4.2",
|
|
"lucide-react": "1.31.0",
|
|
"react-day-picker": "9.8.1",
|
|
"react-resizable-panels": "4.5.8",
|
|
"recharts": "3.8.0",
|
|
"shadcn": "4.18.0",
|
|
"tailwind-merge": "3.6.0",
|
|
"tw-animate-css": "1.4.0"
|
|
},
|
|
"devDependencies": {
|
|
"@cloudflare/vite-plugin": "1.37.1",
|
|
"@cloudflare/workers-types": "4.20260515.1",
|
|
"@openai/sites-vite-plugin": "0.2.0",
|
|
"@tailwindcss/postcss": "4.2.1",
|
|
"@types/node": "22.19.19",
|
|
"@types/react": "19.2.14",
|
|
"@types/react-dom": "19.2.3",
|
|
"@vitejs/plugin-react": "6.0.2",
|
|
"@vitejs/plugin-rsc": "0.5.26",
|
|
"oxfmt": "0.61.0",
|
|
"oxlint": "1.76.0",
|
|
"oxlint-tsgolint": "7.0.2001",
|
|
"tailwindcss": "4.2.1",
|
|
"typescript": "5.9.3",
|
|
"vite": "8.0.13",
|
|
"miniflare": "4.20260515.0",
|
|
"wrangler": "4.92.0",
|
|
"drizzle-kit": "0.31.10",
|
|
"tsx": "4.23.13"
|
|
},
|
|
"type": "module"
|
|
}
|