mirror of
https://github.com/Sendouc/sendou.ink.git
synced 2026-06-20 19:43:49 -05:00
i18next-locales-sync stores plural keys for languages with a single CLDR plural category (zh/ja/ko) under the bare singular key, and silently drops suffixed _one/_other keys for those languages. Add a pre-sync step that collapses such keys into the singular form so the translations survive, and restore the zh analyzer keys that were dropped this way.
128 lines
5.2 KiB
JSON
128 lines
5.2 KiB
JSON
{
|
|
"name": "sendou.ink",
|
|
"version": "3.0.0",
|
|
"private": true,
|
|
"packageManager": "pnpm@11.0.9",
|
|
"sideEffects": false,
|
|
"type": "module",
|
|
"scripts": {
|
|
"deploy": "pnpm install --frozen-lockfile && pnpm run build",
|
|
"build": "react-router build",
|
|
"dev": "cross-env DB_PATH=db.sqlite3 pnpm run migrate up && pnpm run setup && react-router dev --host",
|
|
"dev:sentry": "NODE_OPTIONS='--import ./instrument.server.mjs' pnpm dev",
|
|
"dev:prod": "cross-env DB_PATH=db-prod.sqlite3 VITE_PROD_MODE=true react-router dev --host",
|
|
"start": "pnpm run migrate up && NODE_ENV=production NODE_OPTIONS='--import ./instrument.server.mjs' react-router-serve ./build/server/index.js",
|
|
"migrate": "ley",
|
|
"migrate:prod": "cross-env DB_PATH=db-prod.sqlite3 pnpm run migrate up",
|
|
"check-translation-jsons": "node --experimental-strip-types scripts/check-translation-jsons.ts",
|
|
"check-translation-jsons:no-write": "node --experimental-strip-types scripts/check-translation-jsons.ts --no-write",
|
|
"check-homemade-badges": "node --experimental-strip-types scripts/check-homemade-badges.ts",
|
|
"check-articles": "vite-node scripts/check-articles.ts",
|
|
"refresh-prod-db": "node --experimental-strip-types scripts/refresh-prod-db.ts && pnpm run migrate:prod",
|
|
"biome:check": "biome check --error-on-warnings .",
|
|
"biome:fix": "biome check --error-on-warnings --write .",
|
|
"biome:fix:unsafe": "biome check --error-on-warnings --write --unsafe .",
|
|
"typecheck": "react-router typegen && tsc --noEmit",
|
|
"typecheck:scripts": "tsc --noEmit -p scripts",
|
|
"test:unit:browser": "cross-env VITE_SITE_DOMAIN=http://localhost:5173 BROWSER_HEADLESS=true vitest --silent=passed-only run",
|
|
"test:browser:ui": "cross-env VITE_SITE_DOMAIN=http://localhost:5173 vitest --silent=passed-only --project browser",
|
|
"test:unit:browser:ui": "cross-env VITE_SITE_DOMAIN=http://localhost:5173 vitest --silent=passed-only",
|
|
"test:e2e": "playwright test",
|
|
"test:e2e:flaky-detect": "playwright test --repeat-each=10 --max-failures=1",
|
|
"test:e2e:generate-seeds": "cross-env DB_PATH=db-test.sqlite3 pnpm run migrate up && cross-env DB_PATH=db-test.sqlite3 vite-node scripts/generate-e2e-seed-dbs.ts",
|
|
"check-test-db-migrations": "node --experimental-strip-types scripts/check-test-db-migrations.ts",
|
|
"checks": "pnpm run biome:fix && pnpm run test:unit:browser && pnpm run check-translation-jsons && pnpm run typecheck && pnpm run knip && pnpm run check-test-db-migrations",
|
|
"setup": "cross-env DB_PATH=db.sqlite3 vite-node ./scripts/setup.ts",
|
|
"i18n:sync": "node --experimental-strip-types scripts/collapse-single-plural-keys.ts && i18next-locales-sync -e true -p en -s da de es-ES es-US fr-CA fr-EU he it ja ko nl pl pt-BR ru zh -l locales && pnpm run biome:fix",
|
|
"knip": "knip",
|
|
"sync-weapon-params": "vite-node scripts/sync-weapon-params.ts"
|
|
},
|
|
"dependencies": {
|
|
"@aws-sdk/client-s3": "3.1061.0",
|
|
"@aws-sdk/lib-storage": "3.1061.0",
|
|
"@date-fns/tz": "1.5.0",
|
|
"@dnd-kit/core": "6.3.1",
|
|
"@dnd-kit/modifiers": "9.0.0",
|
|
"@dnd-kit/sortable": "10.0.0",
|
|
"@dnd-kit/utilities": "3.2.2",
|
|
"@epic-web/cachified": "5.6.2",
|
|
"@faker-js/faker": "10.4.0",
|
|
"@formatjs/intl-durationformat": "0.10.13",
|
|
"@internationalized/date": "3.12.2",
|
|
"@react-router/node": "7.16.0",
|
|
"@react-router/serve": "7.15.0",
|
|
"@remix-run/form-data-parser": "0.17.3",
|
|
"@sentry/react-router": "^10.56.0",
|
|
"@tldraw/tldraw": "3.12.1",
|
|
"@zumer/snapdom": "2.12.8",
|
|
"better-sqlite3": "12.10.0",
|
|
"clsx": "2.1.1",
|
|
"compressorjs": "1.3.0",
|
|
"date-fns": "4.4.0",
|
|
"edmonds-blossom-fixed": "1.0.1",
|
|
"gray-matter": "4.0.3",
|
|
"i18next": "26.3.1",
|
|
"i18next-browser-languagedetector": "8.2.1",
|
|
"i18next-http-backend": "4.0.0",
|
|
"ics": "3.12.0",
|
|
"isbot": "5.1.40",
|
|
"jsoncrush": "1.1.8",
|
|
"kysely": "0.29.0",
|
|
"lucide-react": "1.17.0",
|
|
"markdown-to-jsx": "9.8.1",
|
|
"nanoid": "5.1.11",
|
|
"neverthrow": "8.2.0",
|
|
"node-cron": "4.2.1",
|
|
"nprogress": "0.2.0",
|
|
"openskill": "4.1.1",
|
|
"p-limit": "7.3.0",
|
|
"partysocket": "1.1.19",
|
|
"qrcode.react": "4.2.0",
|
|
"react": "19.2.7",
|
|
"react-aria-components": "1.18.0",
|
|
"react-charts": "3.0.0-beta.57",
|
|
"react-dom": "19.2.7",
|
|
"react-error-boundary": "6.1.2",
|
|
"react-flip-toolkit": "7.2.4",
|
|
"react-i18next": "17.0.8",
|
|
"react-router": "7.16.0",
|
|
"react-use-draggable-scroll": "0.4.7",
|
|
"remeda": "2.37.0",
|
|
"remix-auth": "4.2.0",
|
|
"remix-auth-oauth2": "3.4.1",
|
|
"remix-i18next": "7.5.0",
|
|
"slugify": "1.6.9",
|
|
"swr": "2.4.1",
|
|
"web-haptics": "0.0.6",
|
|
"web-push": "3.6.7",
|
|
"zod": "4.4.3"
|
|
},
|
|
"devDependencies": {
|
|
"@babel/preset-typescript": "7.29.7",
|
|
"@biomejs/biome": "2.4.16",
|
|
"@playwright/test": "1.60.0",
|
|
"@react-router/dev": "7.16.0",
|
|
"@types/better-sqlite3": "7.6.13",
|
|
"@types/node": "25.9.1",
|
|
"@types/node-cron": "3.0.11",
|
|
"@types/nprogress": "0.2.3",
|
|
"@types/react": "19.2.16",
|
|
"@types/react-dom": "19.2.3",
|
|
"@types/web-push": "3.6.4",
|
|
"@vitest/browser-playwright": "4.1.8",
|
|
"@vitest/ui": "4.1.8",
|
|
"babel-plugin-react-compiler": "19.1.0-rc.3",
|
|
"cross-env": "10.1.0",
|
|
"i18next-locales-sync": "2.1.1",
|
|
"knip": "6.15.0",
|
|
"ley": "0.8.1",
|
|
"sql-formatter": "15.8.0",
|
|
"typescript": "6.0.3",
|
|
"vite": "8.0.16",
|
|
"vite-node": "6.0.0",
|
|
"vite-plugin-babel": "1.7.3",
|
|
"vitest": "4.1.8",
|
|
"vitest-browser-react": "2.2.0"
|
|
}
|
|
}
|