Standard Alpine evaluates every attribute expression through new Function(), which a strict Content-Security-Policy cannot allow. Swap to the official CSP-safe build (@alpinejs/csp), whose parser evaluates expressions against registered component scope without eval. script-src now carries only 'self' and 'unsafe-inline' (the latter still required by the pre-paint theme flash guard). Bindings rewritten out of the unsupported expression shapes: - 21 multi-statement sequences across admin, audio_reader, docs, header, index, and reader became single component methods (init/loadWatchStatus hooks, commitScrub, pickSkip, pickSpeed, pickDefaultSpeed, chooseSleepOption, chooseSleepClockMode, toggleFxInvert, openPageThumbs, submitNote, clearSearch, pickReadingTheme) - the header sidebar's inline x-data (openPanel/themeMode IIFE) became a registered sidebarShell component; openPanel itself moved to the header root so every sidebar panel shares one open state - the appearance-panel moved into the component init() - header init() now also seeds openPanel from localStorage (or the admin section on /admin pages) Alpine magics (, , , ) remain available — the CSP evaluator injects them into scope. The Playwright suite covers the converted surfaces end to end.
45 lines
1.6 KiB
JSON
45 lines
1.6 KiB
JSON
{
|
|
"name": "bookhoard",
|
|
"version": "1.0.0",
|
|
"description": "A self-hosted ebook management system",
|
|
"scripts": {
|
|
"build:css": "tailwindcss -i ./web/static/input.css -o ./web/static/style.css --watch",
|
|
"build:css:prod": "tailwindcss -i ./web/static/input.css -o ./web/static/style.css --minify",
|
|
"build:ts": "cp node_modules/htmx.org/dist/htmx.min.js web/static/htmx.min.js && vp build",
|
|
"build:ts:dev": "cp node_modules/htmx.org/dist/htmx.min.js web/static/htmx.min.js && vp build --mode development",
|
|
"build:ts:watch": "cp node_modules/htmx.org/dist/htmx.min.js web/static/htmx.min.js && vp build --watch",
|
|
"build": "npm run build:ts && npm run build:css:prod",
|
|
"dev": "npm run build:ts:dev && npm run build:css",
|
|
"test": "vp test web/src"
|
|
},
|
|
"dependencies": {
|
|
"@bookhoard/foliate-js": "git+https://git.linuxhg.com/Bookhoard/foliate-js.git#f622841",
|
|
"alpinejs": "^3.15.8",
|
|
"chart.js": "^4.5.1",
|
|
"dompurify": "^3.4.16",
|
|
"fflate": "^0.8.3",
|
|
"htmx.org": "^2.0.8",
|
|
"markdown-it": "^15.0.2",
|
|
"markdown-it-footnote": "^4.0.0",
|
|
"turndown": "^7.2.4",
|
|
"turndown-plugin-gfm": "^1.0.2"
|
|
},
|
|
"devDependencies": {
|
|
"@alpinejs/csp": "^3.15.8",
|
|
"@playwright/test": "^1.64.1",
|
|
"@tailwindcss/forms": "^0.5.11",
|
|
"@tailwindcss/typography": "^0.5.19",
|
|
"@types/turndown": "^5.0.6",
|
|
"jsdom": "^30.1.3",
|
|
"knip": "^6.43.0",
|
|
"playwright": "^1.64.1",
|
|
"tailwindcss": "^3.4.19",
|
|
"typescript": "^5.9.3",
|
|
"vite": "npm:@voidzero-dev/vite-plus-core@1.3.0",
|
|
"vite-plus": "1.3.0"
|
|
},
|
|
"overrides": {
|
|
"vite": "npm:@voidzero-dev/vite-plus-core@1.3.0"
|
|
}
|
|
}
|