Files
imphnen-frontend-service/package.json
T
maulanasdqnandClaude Opus 4.6 4240e8eb51 feat: migrate all 5 Vite apps from react-router to TanStack Router
Migrated backoffice, hackathon, dimentorin, gacha, qrcampaign, and
infra from custom react-router file-based routing to TanStack Router
file-based routing following the tanstack-frontend-best-practice
convention.

Key changes per app:
- New routes/ directory with __root.tsx, _public.tsx, _authenticated.tsx
- Auth guards via beforeLoad (replaces old middleware.ts)
- createFileRoute pattern for all page components
- TanStackRouterVite plugin in vite.config for auto route generation
- _components/_hooks folders colocated with routes (ignored by router)
- routeTree.gen.ts auto-generated on dev/build

Convention:
- _public/* routes redirect to dashboard if authenticated
- _authenticated/* routes redirect to /auth/login if not authenticated
- $param for dynamic segments (was [param] in old convention)
- _layout suffix for pathless layout routes

Removed:
- Old src/app/ directories from all apps
- Old src/middleware.ts files
- Custom convertPagesToRoute utility (no longer needed)
- react-router dependency usage (kept in package.json for shared libs)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-11 17:04:14 +07:00

149 lines
4.8 KiB
JSON

{
"name": "@imphnen-frontend-service/source",
"version": "0.0.0",
"license": "MIT",
"scripts": {
"gacha:dev": "nx dev gacha",
"gacha:build": "nx build gacha",
"gacha:test": "nx test gacha",
"gacha:prod": "serve ./dist/apps/gacha",
"gacha:lint": "nx run gacha:lint",
"backoffice:dev": "nx dev backoffice",
"backoffice:build": "nx build backoffice",
"backoffice:test": "nx test backoffice",
"backoffice:prod": "serve ./dist/apps/backoffice",
"backoffice:lint": "nx run backoffice:lint",
"dimentorin:dev": "nx dev dimentorin",
"dimentorin:test": "nx test dimentorin",
"dimentorin:build": "nx build dimentorin",
"dimentorin:prod": "serve ./dist/apps/dimentorin",
"dimentorin:lint": "nx run dimentorin:lint",
"hackathon:dev": "nx dev hackathon",
"hackathon:build": "nx build hackathon",
"hackathon:test": "nx test hackathon",
"hackathon:prod": "serve ./dist/apps/hackathon",
"hackathon:lint": "nx run hackathon:lint",
"landing:dev": "nx serve landing",
"landing:build": "nx build landing",
"landing:prod": "cd ./dist/apps/landing && npx next start",
"landing:openapi": "npx openapi-typescript https://api.imphnen.dev/openapi.json -o ./apps/landing/src/openapi-types.ts",
"qrcampaign:dev": "nx dev qrcampaign",
"qrcampaign:build": "nx build qrcampaign",
"qrcampaign:test": "nx test qrcampaign",
"qrcampaign:prod": "serve ./dist/apps/qrcampaign",
"ui:test": "nx test ui",
"ui:build": "nx build ui"
},
"private": true,
"dependencies": {
"@ant-design/icons": "^6.1.1",
"@astrojs/react": "^5.0.3",
"@hookform/resolvers": "^5.2.2",
"@iconify/react": "^6.0.2",
"@marsidev/react-turnstile": "^1.5.0",
"@radix-ui/react-label": "^2.1.8",
"@radix-ui/react-slot": "^1.2.4",
"@redocly/ajv": "^8.18.1",
"@tailwindcss/vite": "^4.2.2",
"@tanstack/react-query": "^5.95.2",
"@tanstack/react-router": "^1.168.13",
"@tanstack/react-store": "^0.9.3",
"@tanstack/react-table": "^8.21.3",
"@tanstack/router-plugin": "^1.167.12",
"astro": "^6.1.5",
"axios": "^1.14.0",
"class-variance-authority": "^0.7.1",
"clsx": "^2.1.1",
"dayjs": "^1.11.20",
"framer-motion": "^12.38.0",
"graphql": "^16.13.2",
"html2canvas": "^1.4.1",
"js-cookie": "^3.0.5",
"next-themes": "^0.4.6",
"openapi-fetch": "^0.17.0",
"openapi-react-query": "^0.5.4",
"picomatch": "^4.0.4",
"qrcode": "^1.5.4",
"react": "^19.2.4",
"react-dom": "^19.2.4",
"react-hook-form": "^7.72.0",
"react-icons": "^5.6.0",
"react-is": "^19.2.4",
"react-router-dom": "^7.3.0",
"recharts": "^3.8.1",
"sharp": "^0.34.5",
"sonner": "^2.0.7",
"tailwind-merge": "^3.5.0",
"vaul": "^1.1.2",
"zod": "^3.25.76",
"zustand": "^5.0.12"
},
"devDependencies": {
"@babel/core": "^7.29.0",
"@babel/preset-react": "^7.28.5",
"@eslint/compat": "^1.4.1",
"@eslint/eslintrc": "^3.3.5",
"@eslint/js": "^9.39.4",
"@next/eslint-plugin-next": "^16.2.1",
"@nx/devkit": "22.6.3",
"@nx/eslint": "22.6.3",
"@nx/eslint-plugin": "22.6.3",
"@nx/js": "22.6.3",
"@nx/playwright": "22.6.3",
"@nx/react": "22.6.3",
"@nx/vite": "22.6.3",
"@nx/vitest": "22.6.3",
"@nx/web": "22.6.3",
"@nx/workspace": "22.6.3",
"@playwright/test": "^1.58.2",
"@swc-node/register": "1.11.1",
"@swc/cli": "0.8.0",
"@swc/core": "1.15.21",
"@swc/helpers": "0.5.20",
"@tailwindcss/postcss": "^4.2.2",
"@testing-library/dom": "10.4.1",
"@testing-library/jest-dom": "^6.9.1",
"@testing-library/react": "16.3.2",
"@testing-library/user-event": "^14.6.1",
"@types/js-cookie": "^3.0.6",
"@types/node": "^22.19.15",
"@types/qrcode": "^1.5.6",
"@types/react": "^19.2.14",
"@types/react-dom": "^19.2.3",
"@vitejs/plugin-react": "^4.7.0",
"@vitest/coverage-v8": "4.1.2",
"@vitest/ui": "4.1.2",
"ajv": "^6.14.0",
"eslint": "^9.39.4",
"eslint-config-next": "16.2.1",
"eslint-config-prettier": "10.1.8",
"eslint-next-config": "^1.0.3",
"eslint-plugin-import": "2.32.0",
"eslint-plugin-jsx-a11y": "6.10.2",
"eslint-plugin-playwright": "^1.8.3",
"eslint-plugin-react": "7.37.5",
"eslint-plugin-react-hooks": "5.2.0",
"file-loader": "^6.2.0",
"h3": "^1.15.10",
"jiti": "2.6.1",
"jsdom": "~22.1.0",
"nx": "22.6.3",
"openapi-typescript": "^7.13.0",
"postcss": "^8.5.8",
"prettier": "^2.8.8",
"serve": "^14.2.6",
"tailwindcss": "^4.2.2",
"ts-node": "^10.9.2",
"tslib": "^2.8.1",
"tw-animate-css": "^1.4.0",
"typescript": "5.9.3",
"typescript-eslint": "8.58.0",
"vite": "^8.0.8",
"vite-plugin-dts": "~4.5.4",
"vitest": "4.1.2"
},
"nx": {
"includedScripts": []
}
}