Files
TREK/shared/package.json
T
Maurice a965b2c75e perf(shared): keep the DOMPurify sanitisers out of the root barrel
isomorphic-dompurify builds a jsdom window as soon as it loads on Node,
and the root barrel is what the server and each of its ~900 test files
import, so every one of them loaded jsdom without ever sanitising. The
sanitisers move behind @trek/shared/sanitize (a build entry of its own,
like roadtrip), escapeHtml stays in the root from its own module, and
the client's translation context imports the sanitiser from the subpath.
The production server stops loading jsdom at boot as well.
2026-10-20 08:22:40 +02:00

112 lines
3.1 KiB
JSON

{
"name": "@trek/shared",
"version": "4.3.3",
"engines": {
"node": "^22.22.2 || ^24.15.0 || >=26.0.0"
},
"private": true,
"description": "Shared API contracts (Zod schemas) — single source of truth for TREK server and client.",
"type": "module",
"main": "./dist/index.cjs",
"module": "./dist/index.mjs",
"types": "./dist/index.d.cts",
"exports": {
".": {
"import": {
"types": "./dist/index.d.mts",
"default": "./dist/index.mjs"
},
"require": {
"types": "./dist/index.d.cts",
"default": "./dist/index.cjs"
}
},
"./i18n": {
"import": {
"types": "./dist/i18n/index.d.mts",
"default": "./dist/i18n/index.mjs"
},
"require": {
"types": "./dist/i18n/index.d.cts",
"default": "./dist/i18n/index.cjs"
}
},
"./i18n/*": {
"import": {
"types": "./dist/i18n/*/index.d.mts",
"default": "./dist/i18n/*/index.mjs"
},
"require": {
"types": "./dist/i18n/*/index.d.cts",
"default": "./dist/i18n/*/index.cjs"
}
},
"./roadtrip": {
"import": {
"types": "./dist/roadtrip/planning.d.mts",
"default": "./dist/roadtrip/planning.mjs"
},
"require": {
"types": "./dist/roadtrip/planning.d.cts",
"default": "./dist/roadtrip/planning.cjs"
}
},
"./sanitize": {
"import": {
"types": "./dist/sanitize/sanitize.d.mts",
"default": "./dist/sanitize/sanitize.mjs"
},
"require": {
"types": "./dist/sanitize/sanitize.d.cts",
"default": "./dist/sanitize/sanitize.cjs"
}
}
},
"typesVersions": {
"*": {
"i18n": [
"./dist/i18n/index.d.cts"
],
"i18n/*": [
"./dist/i18n/*/index.d.cts"
]
}
},
"scripts": {
"build": "tsdown",
"build:watch": "tsdown --watch --no-clean",
"test": "vitest run",
"test:watch": "vitest",
"test:coverage": "vitest run --coverage",
"typecheck": "tsc --noEmit",
"format": "prettier --write \"src/**/*.ts\"",
"format:check": "prettier --check \"src/**/*.ts\"",
"lint": "eslint \"src/**/*.ts\"",
"lint:fix": "eslint --fix \"src/**/*.ts\"",
"lint:format": "node scripts/format-lint.mjs",
"i18n:parity": "node scripts/i18n-parity.mjs",
"i18n:parity:strict": "node scripts/i18n-parity.mjs --strict",
"contracts:open": "node scripts/open-request-schemas.mjs",
"i18n:untranslated": "node scripts/i18n-untranslated.mjs",
"i18n:untranslated:update": "node scripts/i18n-untranslated.mjs --update"
},
"dependencies": {
"isomorphic-dompurify": "^3.23.0",
"zod": "^4.6.5"
},
"devDependencies": {
"@eslint/js": "^10.0.1",
"@trivago/prettier-plugin-sort-imports": "^6.0.2",
"@vitest/coverage-v8": "^4.1.11",
"eslint": "^10.11.0",
"eslint-config-flat-gitignore": "^2.4.0",
"eslint-config-prettier": "^10.1.8",
"prettier": "3.9.8",
"prettier-plugin-organize-imports": "^4.3.0",
"tsdown": "^0.23.0",
"typescript": "^6.0.3",
"typescript-eslint": "^8.70.0",
"vitest": "^4.1.11"
}
}