Files
navidrome/ui/package.json
Deluan 69291edda7 refactor(ui): replace the blurhash package with a local decoder
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.
2026-07-28 21:51:32 -04:00

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"
}
}
}