mirror of
https://github.com/mauriceboe/TREK.git
synced 2026-10-18 21:16:47 +00:00
88d196bae8
Most features have a desktop view and a phone view, and each carried its own copy of the feature's logic, so SonarCloud's duplication condition was the gate a pull request touching both failed most often, and only after a scan of twenty minutes. lint:dup finds the same copies before the push. It runs jscpd's detector (@jscpd/core with @jscpd/tokenizer) over the source files under src/ at the thresholds the SonarCloud gate applies to TypeScript, 100 tokens over at least 10 lines, and counts per file the lines inside a block that repeats elsewhere or in the same file. Tests and declaration files are left out as Sonar leaves them out, and .ts and .tsx are read as one language, so a hook that repeats a view's code is a copy too. The files are read sorted and with readText, so every machine counts the same. scripts/dup-baseline.json holds the files that still hold copies with their count; a file may hold no more than its entry, a file without an entry none, and an entry above its file or for a file that is gone fails until --update lowers it. --list prints every block with its other side. The engine packages are used instead of the jscpd command, which walks the tree in file system order, skips files past its size limits without a word and drops every result once it meets a file it has no format for.
122 lines
4.2 KiB
JSON
122 lines
4.2 KiB
JSON
{
|
|
"name": "@trek/client",
|
|
"version": "4.3.3",
|
|
"engines": {
|
|
"node": "^22.22.2 || ^24.15.0 || >=26.0.0"
|
|
},
|
|
"private": true,
|
|
"type": "module",
|
|
"scripts": {
|
|
"dev": "vite",
|
|
"prebuild": "node scripts/patch-maplibre.mjs && node scripts/generate-icons.mjs",
|
|
"build": "vite build",
|
|
"build:analyze": "vite build --mode analyze",
|
|
"preview": "vite preview",
|
|
"typecheck": "tsc --noEmit",
|
|
"test": "vitest run",
|
|
"test:unit": "vitest run tests/unit",
|
|
"test:integration": "vitest run tests/integration src/**/*.test.{ts,tsx}",
|
|
"test:watch": "vitest",
|
|
"test:coverage": "vitest run --coverage",
|
|
"lint": "eslint .",
|
|
"lint:check": "eslint .",
|
|
"lint:warnings": "node scripts/eslint-ratchet.mjs",
|
|
"lint:pages": "node scripts/check-page-pattern.mjs",
|
|
"lint:rtl": "node scripts/rtl-lint.mjs",
|
|
"lint:size": "node scripts/size-lint.mjs",
|
|
"lint:format": "node scripts/format-lint.mjs",
|
|
"lint:layers": "node scripts/layer-lint.mjs",
|
|
"lint:offline": "node scripts/offline-lint.mjs",
|
|
"lint:dup": "node scripts/dup-lint.mjs",
|
|
"lint:skips": "node scripts/skip-lint.mjs",
|
|
"lint:i18n-keys": "node scripts/i18n-keys.mjs",
|
|
"check:gl-split": "node scripts/check-gl-split.mjs",
|
|
"theme:lint": "node scripts/theme-lint.mjs",
|
|
"theme:lint:strict": "node scripts/theme-lint.mjs --strict",
|
|
"e2e": "playwright test",
|
|
"shots": "playwright test --project=screenshots",
|
|
"help:media": "node e2e/help/run.mjs",
|
|
"help:media:promote": "node e2e/help/promote.mjs",
|
|
"shots:promote": "node e2e/screenshots/promote.mjs",
|
|
"e2e:report": "playwright show-report",
|
|
"format": "prettier --write \"src/**/*.tsx\" \"src/**/*.css\"",
|
|
"format:check": "prettier --check \"src/**/*.tsx\" \"src/**/*.css\"",
|
|
"postinstall": "node scripts/patch-maplibre.mjs",
|
|
"predev": "node scripts/patch-maplibre.mjs"
|
|
},
|
|
"dependencies": {
|
|
"@fontsource/bebas-neue": "^5.3.0",
|
|
"@fontsource/eb-garamond": "^5.3.0",
|
|
"@fontsource/geist-sans": "^5.3.0",
|
|
"@fontsource/inter": "^5.3.0",
|
|
"@fontsource/lora": "^5.3.0",
|
|
"@fontsource/museomoderno": "^5.3.0",
|
|
"@fontsource/playfair-display": "^5.3.0",
|
|
"@fontsource/poppins": "^5.3.0",
|
|
"@mapbox/mapbox-gl-rtl-text": "^0.4.0",
|
|
"@maplibre/maplibre-gl-leaflet": "0.1.4",
|
|
"@simplewebauthn/browser": "^13.3.0",
|
|
"@trek/shared": "*",
|
|
"axios": "^1.20.0",
|
|
"dexie": "^4.4.6",
|
|
"drag-drop-touch": "^1.3.1",
|
|
"heic-to": "^1.5.2",
|
|
"iso-3166-2": "^1.0.0",
|
|
"leaflet": "^1.9.4",
|
|
"lucide-react": "^0.577.0",
|
|
"mapbox-gl": "^3.31.0",
|
|
"maplibre-gl": "5.24.0",
|
|
"plyr": "^3.8.4",
|
|
"react": "^19.3.0",
|
|
"react-dom": "^19.3.0",
|
|
"react-dropzone": "^14.4.1",
|
|
"react-leaflet": "^5.0.0",
|
|
"react-leaflet-cluster": "^4.1.3",
|
|
"react-markdown": "^10.1.0",
|
|
"react-router": "^7.18.4",
|
|
"rehype-sanitize": "^6.0.0",
|
|
"remark-breaks": "^4.0.0",
|
|
"remark-gfm": "^4.0.1",
|
|
"tz-lookup": "^6.1.25",
|
|
"zod": "^4.6.5",
|
|
"zustand": "^5.0.15"
|
|
},
|
|
"devDependencies": {
|
|
"@eslint/js": "^10.0.1",
|
|
"@jscpd/core": "^4.2.5",
|
|
"@jscpd/tokenizer": "^4.2.6",
|
|
"@playwright/test": "^1.63.0",
|
|
"@testing-library/jest-dom": "^6.10.0",
|
|
"@testing-library/react": "^16.3.3",
|
|
"@testing-library/user-event": "^14.6.7",
|
|
"@trivago/prettier-plugin-sort-imports": "^6.0.2",
|
|
"@types/leaflet": "^1.9.22",
|
|
"@types/node": "^25.9.8",
|
|
"@types/react": "^19.3.0",
|
|
"@types/react-dom": "^19.3.0",
|
|
"@vitejs/plugin-react": "^6.1.1",
|
|
"@vitest/coverage-v8": "^4.1.11",
|
|
"autoprefixer": "^10.6.1",
|
|
"eslint": "^10.11.0",
|
|
"eslint-config-flat-gitignore": "^2.4.0",
|
|
"eslint-config-prettier": "^10.1.8",
|
|
"eslint-plugin-react-hooks": "^7.1.1",
|
|
"eslint-plugin-react-refresh": "^0.5.7",
|
|
"fake-indexeddb": "^6.2.5",
|
|
"jsdom": "^29.1.1",
|
|
"msw": "^2.15.0",
|
|
"postcss": "^8.5.28",
|
|
"prettier": "^3.9.8",
|
|
"prettier-plugin-organize-imports": "^4.3.0",
|
|
"prettier-plugin-tailwindcss": "^0.8.1",
|
|
"rollup-plugin-visualizer": "^7.1.1",
|
|
"sharp": "^0.35.4",
|
|
"tailwindcss": "^3.4.19",
|
|
"typescript": "^6.0.3",
|
|
"typescript-eslint": "^8.70.0",
|
|
"vite": "8.3.0",
|
|
"vite-plugin-pwa": "^1.3.0",
|
|
"vitest": "^4.1.11"
|
|
}
|
|
}
|