Files
plane/apps/admin/package.json
T
Aaron Reisman 28ed897902 feat(i18n): add type-safe translations with AST-based key validation
- Rewrite @plane/i18n package with type-safe t() function
- Generate TypeScript types from English translation JSON
- Fix ICU plural format parsing in type generator
- Add 'as const' assertions to i18n fields in constants
- Create AST-based check:i18n script for each app
- Add turbo task for parallel i18n validation
- Convert translation files from TS to JSON format
- Rename locale directories (ua→uk, vi-VN→vi, tr-TR→tr)
- Add missing translation keys and fix key mismatches
- Export KeysWithoutParams type for dynamic key handling

Scripts:
- pnpm check:i18n (per app) - AST-based missing key detection
- pnpm i18n:validate - Cross-locale validation
- pnpm i18n:generate-types - Generate TS types from JSON

All apps pass type checking with 0 errors.
2025-12-22 22:27:44 +07:00

68 lines
2.3 KiB
JSON

{
"name": "admin",
"description": "Admin UI for Plane",
"version": "1.2.0",
"license": "AGPL-3.0",
"private": true,
"type": "module",
"scripts": {
"dev": "react-router dev --port 3001",
"build": "react-router build",
"preview": "react-router build && serve -s build/client -l 3001",
"start": "serve -s build/client -l 3001",
"clean": "rm -rf .turbo && rm -rf .next && rm -rf node_modules && rm -rf dist && rm -rf build",
"check:i18n": "tsx ../../packages/i18n/scripts/check-app-keys.ts",
"check:lint": "eslint . --cache --cache-location node_modules/.cache/eslint/ --max-warnings=485",
"check:types": "react-router typegen && tsc --noEmit",
"check:format": "prettier . --cache --check",
"fix:lint": "eslint . --cache --cache-location node_modules/.cache/eslint/ --fix --max-warnings=485",
"fix:format": "prettier . --cache --write"
},
"dependencies": {
"@bprogress/core": "catalog:",
"@fontsource-variable/inter": "5.2.8",
"@fontsource/ibm-plex-mono": "5.2.7",
"@fontsource/material-symbols-rounded": "5.2.30",
"@headlessui/react": "^1.7.19",
"@plane/constants": "workspace:*",
"@plane/hooks": "workspace:*",
"@plane/propel": "workspace:*",
"@plane/services": "workspace:*",
"@plane/types": "workspace:*",
"@plane/ui": "workspace:*",
"@plane/utils": "workspace:*",
"@react-router/node": "catalog:",
"@sentry/react-router": "catalog:",
"@tanstack/react-virtual": "^3.13.12",
"@tanstack/virtual-core": "^3.13.12",
"axios": "catalog:",
"isbot": "^5.1.31",
"lodash-es": "catalog:",
"lucide-react": "catalog:",
"mobx": "catalog:",
"mobx-react": "catalog:",
"next-themes": "0.4.6",
"react": "catalog:",
"react-dom": "catalog:",
"react-hook-form": "7.51.5",
"react-router": "catalog:",
"react-router-dom": "catalog:",
"serve": "14.2.5",
"swr": "catalog:",
"uuid": "catalog:"
},
"devDependencies": {
"@dotenvx/dotenvx": "catalog:",
"@plane/tailwind-config": "workspace:*",
"@plane/typescript-config": "workspace:*",
"@react-router/dev": "catalog:",
"@types/lodash-es": "catalog:",
"@types/node": "catalog:",
"@types/react": "catalog:",
"@types/react-dom": "catalog:",
"typescript": "catalog:",
"vite": "catalog:",
"vite-tsconfig-paths": "^5.1.4"
}
}