trails/package.json
Ullrich Schäfer 2ac4014521
Standardize monorepo pipeline: test, lint, typecheck across all workspaces
Previously only 2-3 workspaces participated in each turbo task. This
expands test, lint, and typecheck to cover all 11 workspaces with
parallel execution and caching.

Test pipeline:
- Move from single root vitest to per-workspace test scripts via turbo
- Shared vitest config (vitest.shared.ts) with passWithNoTests
- Per-workspace configs re-export the shared base
- Mobile uses Jest (jest-expo + React Native Testing Library)
- Add node-environment GPX tests verifying linkedom fallback
- Add i18n mobile init tests
- Exclude apps/mobile from root vitest (uses Jest separately)

Lint pipeline:
- Add eslint lint script to all 9 previously unlinted workspaces
- Standardize all scripts to "eslint ." with shared root config
- Add .expo/ to global ESLint ignores
- Fix lint errors: unused imports in api/types, export parseGpx

Typecheck pipeline:
- Add "typecheck": "tsc" to all 8 packages
- Add @types/node (catalog) to gpx and db packages
- Fix mobile app.config.ts: remove deprecated experiments.monorepo
  and newArchEnabled (both default in Expo SDK 55)
- Add allowImportingTsExtensions to mobile tsconfig

Shared package compatibility (mobile-app Phase 1.3):
- Add linkedom as explicit dependency to @trails-cool/gpx
- Add initI18nMobile() export to @trails-cool/i18n
- Confirm @trails-cool/types is pure interfaces (no DOM deps)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-13 00:00:43 +02:00

79 lines
2.4 KiB
JSON

{
"name": "trails.cool",
"private": true,
"description": "Collaborative route planning + federated activity sharing for outdoor enthusiasts",
"type": "module",
"license": "MIT",
"packageManager": "pnpm@10.33.0",
"engines": {
"node": ">=20"
},
"scripts": {
"dev": "turbo dev",
"build": "turbo build",
"lint": "turbo lint",
"test": "turbo test",
"test:watch": "vitest",
"test:e2e": "playwright test",
"test:e2e:ui": "playwright test --ui",
"typecheck": "turbo typecheck",
"db:push": "drizzle-kit push --config packages/db/drizzle.config.ts --force",
"db:studio": "drizzle-kit studio --config packages/db/drizzle.config.ts",
"dev:services": "docker compose -f docker-compose.dev.yml up -d",
"dev:full": "./scripts/dev.sh",
"dev:mobile": "pnpm --filter @trails-cool/mobile start",
"dev:mobile:ios": "pnpm --filter @trails-cool/mobile ios",
"dev:mobile:android": "pnpm --filter @trails-cool/mobile android"
},
"pnpm": {
"overrides": {
"picomatch@>=4.0.0 <4.0.4": "4.0.4",
"brace-expansion@>=4.0.0 <5.0.5": "5.0.5",
"path-to-regexp@<0.1.13": "0.1.13",
"lodash@<4.18.1": "4.18.1"
},
"onlyBuiltDependencies": [
"@sentry/cli",
"esbuild"
]
},
"devDependencies": {
"@eslint/js": "^10.0.1",
"@playwright/test": "^1.59.1",
"@react-router/dev": "catalog:",
"@react-router/node": "catalog:",
"@react-router/serve": "catalog:",
"@sentry/vite-plugin": "^5.2.0",
"@tailwindcss/vite": "catalog:",
"@testing-library/jest-dom": "^6.9.1",
"@testing-library/react": "^16.3.2",
"@types/geojson": "^7946.0.16",
"@types/leaflet": "^1.9.21",
"@types/react": "catalog:",
"@types/react-dom": "catalog:",
"drizzle-kit": "catalog:",
"drizzle-orm": "catalog:",
"drizzle-postgis": "catalog:",
"eslint": "^10.2.0",
"eslint-config-prettier": "^10.1.8",
"fit-file-parser": "^2.3.3",
"i18next": "^26.0.3",
"i18next-browser-languagedetector": "^8.2.1",
"jsdom": "^29.0.2",
"leaflet": "^1.9.4",
"linkedom": "^0.18.12",
"playwright": "^1.59.1",
"postgres": "catalog:",
"prettier": "^3.8.2",
"react": "catalog:",
"react-dom": "catalog:",
"react-i18next": "^17.0.2",
"react-leaflet": "^5.0.0",
"react-router": "catalog:",
"tailwindcss": "catalog:",
"turbo": "^2.9.6",
"typescript-eslint": "^8.58.1",
"vite": "catalog:",
"vitest": "^4.1.4"
}
}