CI / lint + typecheck + test + build (push) Canceled after 0s
- Auth: middleware.ts guards /protected via better-auth session cookie; protected page reads session server-side (auth.api.getSession) - Demo wiring (app/demo + components/demo): react-markdown + remark-gfm + shiki CodeBlock, RHF+zod form with react-query mutation + sonner toast, react-table items list (legacy API, table v9), /api/items GET+POST (zod v4 coercion, schema in lib/items.ts shared with unit tests) - Error UX: app/error.tsx (retry + digest), not-found.tsx (404), loading.tsx - Env: lib/env.ts zod-validated (no import-time throw), .env.example sync (NEXT_PUBLIC_BETTER_AUTH_URL), auth-client uses env - Tooling: @vitest/coverage-v8 (test:coverage works), tsconfig cleanup (drop .next/dev/dev/types artifact), README rewrite, demo e2e specs
100 lines
2.6 KiB
JSON
100 lines
2.6 KiB
JSON
{
|
|
"name": "my-app",
|
|
"version": "0.1.0",
|
|
"private": true,
|
|
"scripts": {
|
|
"dev": "NODE_ENV=development next dev",
|
|
"build": "next build",
|
|
"start": "next start",
|
|
"lint": "eslint",
|
|
"lint:fix": "eslint --fix",
|
|
"typecheck": "tsc --noEmit",
|
|
"test": "vitest run",
|
|
"test:watch": "vitest",
|
|
"test:coverage": "vitest run --coverage",
|
|
"test:e2e": "playwright test",
|
|
"format": "prettier --write .",
|
|
"format:check": "prettier --check .",
|
|
"api:generate": "openapi-typescript http://localhost:3000/api/openapi -o types/api.ts",
|
|
"prepare": "husky"
|
|
},
|
|
"lint-staged": {
|
|
"*.{ts,tsx}": [
|
|
"eslint --fix",
|
|
"prettier --write"
|
|
],
|
|
"*.{css,json,md}": [
|
|
"prettier --write"
|
|
]
|
|
},
|
|
"dependencies": {
|
|
"@base-ui/react": "^1.8.0",
|
|
"@hookform/resolvers": "^5.9.1",
|
|
"@shadcn/react": "^0.3.1",
|
|
"@tanstack/react-query": "^5.103.1",
|
|
"@tanstack/react-table": "^9.2.4",
|
|
"better-auth": "^1.7.5",
|
|
"class-variance-authority": "^0.7.1",
|
|
"clsx": "^2.1.1",
|
|
"cmdk": "^1.1.1",
|
|
"cn": "^0.3.0",
|
|
"date-fns": "^4.4.0",
|
|
"embla-carousel-react": "^8.6.0",
|
|
"input-otp": "^1.5.0",
|
|
"ky": "^2.1.0",
|
|
"lucide-react": "^1.47.0",
|
|
"motion": "^13.4.0",
|
|
"next": "16.3.5",
|
|
"next-themes": "^0.4.6",
|
|
"nuqs": "^2.10.1",
|
|
"openapi-fetch": "^0.17.0",
|
|
"react": "19.2.8",
|
|
"react-day-picker": "^10.0.1",
|
|
"react-dom": "19.2.8",
|
|
"react-hook-form": "^7.88.0",
|
|
"react-markdown": "^10.1.0",
|
|
"react-resizable-panels": "^4.12.4",
|
|
"recharts": "^3.10.1",
|
|
"remark-gfm": "^4.0.1",
|
|
"shadcn": "^4.21.0",
|
|
"shiki": "^4.4.3",
|
|
"sonner": "^2.0.8",
|
|
"tailwind-merge": "^3.7.0",
|
|
"tw-animate-css": "^1.4.0",
|
|
"vaul": "^1.1.2",
|
|
"zod": "^4.6.5",
|
|
"zustand": "^5.0.15"
|
|
},
|
|
"devDependencies": {
|
|
"@playwright/test": "^1.63.0",
|
|
"@tailwindcss/postcss": "^4",
|
|
"@testing-library/dom": "^10.4.2",
|
|
"@testing-library/jest-dom": "^7.0.1",
|
|
"@testing-library/react": "^16.3.3",
|
|
"@types/node": "^20",
|
|
"@types/react": "^19",
|
|
"@types/react-dom": "^19",
|
|
"@vitest/coverage-v8": "^5.0.1",
|
|
"eslint": "^9",
|
|
"eslint-config-next": "16.3.5",
|
|
"husky": "^9.1.7",
|
|
"jsdom": "^30.1.0",
|
|
"lint-staged": "^17.5.1",
|
|
"openapi-typescript": "^7.13.0",
|
|
"prettier": "^3.9.8",
|
|
"prettier-plugin-tailwindcss": "^0.8.1",
|
|
"tailwindcss": "^4",
|
|
"typescript": "^5",
|
|
"vitest": "^5.0.1"
|
|
},
|
|
"packageManager": "bun@1.3.14",
|
|
"ignoreScripts": [
|
|
"sharp",
|
|
"unrs-resolver"
|
|
],
|
|
"trustedDependencies": [
|
|
"sharp",
|
|
"unrs-resolver"
|
|
]
|
|
}
|