mirror of
https://github.com/navidrome/navidrome.git
synced 2026-08-04 03:02:37 -04:00
The UI pulled in the `blurhash` dependency for one function, `decode`, called from a single component. The decoder is ~80 lines of well-specified arithmetic, so carrying a dependency for it costs more in supply chain and bundle than it saves. Equivalence was proven against the package before removing it: 84 hashes — three real ones plus every component count from 1x1 to 9x9 — decoded at six sizes, compared byte for byte, plus parity on which malformed inputs throw. Those pixel values are now pinned in the spec, so drift from the reference algorithm fails. The punch parameter is dropped rather than reproduced: no caller passes one, and the package applies `punch | 1`, which silently turns a punch of 2 into 3.
90 lines
2.7 KiB
JSON
90 lines
2.7 KiB
JSON
{
|
|
"name": "ui",
|
|
"private": true,
|
|
"type": "module",
|
|
"scripts": {
|
|
"start": "vite",
|
|
"build": "vite build",
|
|
"serve": "vite preview",
|
|
"test:watch": "vitest",
|
|
"test": "vitest --watch=false",
|
|
"test:coverage": "vitest run --coverage --watch=false",
|
|
"type-check": "tsc --noEmit",
|
|
"lint": "eslint . --ext ts,tsx,js,jsx --report-unused-disable-directives --max-warnings 0",
|
|
"prettier": "prettier --write ./src",
|
|
"check-formatting": "prettier -c ./src",
|
|
"postinstall": "bin/update-workbox.sh"
|
|
},
|
|
"dependencies": {
|
|
"@jsonforms/core": "^2.5.2",
|
|
"@jsonforms/material-renderers": "^2.5.2",
|
|
"@jsonforms/react": "^2.5.2",
|
|
"@material-ui/core": "^4.12.4",
|
|
"@material-ui/icons": "^4.11.3",
|
|
"@material-ui/lab": "^4.0.0-alpha.61",
|
|
"@material-ui/styles": "^4.11.5",
|
|
"blueimp-md5": "^2.19.0",
|
|
"clsx": "^2.1.1",
|
|
"connected-react-router": "^6.9.3",
|
|
"deepmerge": "^4.3.1",
|
|
"dompurify": "^3.3.2",
|
|
"history": "^4.10.1",
|
|
"inflection": "^3.0.2",
|
|
"jwt-decode": "^4.0.0",
|
|
"lodash.throttle": "^4.1.1",
|
|
"navidrome-music-player": "4.25.4",
|
|
"prop-types": "^15.8.1",
|
|
"ra-data-json-server": "^3.19.12",
|
|
"ra-i18n-polyglot": "^3.19.12",
|
|
"react": "^17.0.2",
|
|
"react-admin": "^3.19.12",
|
|
"react-dnd": "^14.0.5",
|
|
"react-dnd-html5-backend": "^14.1.0",
|
|
"react-dom": "^17.0.2",
|
|
"react-drag-listview": "^0.1.9",
|
|
"react-ga": "^3.3.1",
|
|
"react-hotkeys": "^2.0.0",
|
|
"react-icons": "^5.5.0",
|
|
"react-image-lightbox": "^5.1.4",
|
|
"react-measure": "^2.5.2",
|
|
"react-redux": "^7.2.9",
|
|
"react-router-dom": "^5.3.4",
|
|
"redux": "^4.2.1",
|
|
"redux-saga": "^1.4.2",
|
|
"uuid": "^13.0.0",
|
|
"workbox-cli": "^7.3.0"
|
|
},
|
|
"devDependencies": {
|
|
"@testing-library/jest-dom": "^6.6.3",
|
|
"@testing-library/react": "^12.1.5",
|
|
"@testing-library/react-hooks": "^7.0.2",
|
|
"@testing-library/user-event": "^14.6.1",
|
|
"@types/node": "^24.9.1",
|
|
"@types/react": "^17.0.89",
|
|
"@types/react-dom": "^17.0.26",
|
|
"@typescript-eslint/eslint-plugin": "^6.21.0",
|
|
"@typescript-eslint/parser": "^6.21.0",
|
|
"@vitejs/plugin-react": "^5.1.0",
|
|
"@vitest/coverage-v8": "^4.0.3",
|
|
"eslint": "^8.57.1",
|
|
"eslint-config-prettier": "^10.1.8",
|
|
"eslint-plugin-jsx-a11y": "^6.10.2",
|
|
"eslint-plugin-react": "^7.37.5",
|
|
"eslint-plugin-react-hooks": "^5.2.0",
|
|
"eslint-plugin-react-refresh": "^0.4.24",
|
|
"happy-dom": "^20.0.8",
|
|
"jsdom": "^26.1.0",
|
|
"prettier": "^3.6.2",
|
|
"ra-test": "^3.19.12",
|
|
"typescript": "^5.8.3",
|
|
"vite": "^7.3.2",
|
|
"vite-plugin-pwa": "^1.1.0",
|
|
"vitest": "^4.0.3"
|
|
},
|
|
"overrides": {
|
|
"vite": {
|
|
"rollup": "npm:@rollup/wasm-node"
|
|
}
|
|
}
|
|
}
|