{ "name": "feishin", "description": "A full featured Jellyfin/Subsonic/Navidrome music player.", "version": "1.0.0-alpha1", "author": { "name": "jeffvli", "email": "jeffvictorli@gmail.com", "url": "https://github.com/jeffvli" }, "main": "packages/main/dist/index.cjs", "scripts": { "build": "npm run build:main && npm run build:preload && npm run build:renderer", "build:main": "cd ./packages/main && vite build", "build:preload": "cd ./packages/preload && vite build", "build:renderer": "cd ./packages/renderer && vite build", "compile": "cross-env MODE=production npm run build && electron-builder build --config .electron-builder.config.js --dir", "test": "npm run test:main && npm run test:preload && npm run test:renderer && npm run test:e2e", "test:e2e": "npm run build && vitest run", "test:main": "vitest run -r packages/main --passWithNoTests", "test:preload": "vitest run -r packages/preload --passWithNoTests", "test:renderer": "vitest run -r packages/renderer --passWithNoTests", "watch": "node scripts/watch.mjs", "lint": "eslint . --ext js,mjs,cjs,ts,mts,cts,tsx", "typecheck:main": "tsc-silent --noEmit -p packages/main/tsconfig.json --suppress 2307@packages", "typecheck:preload": "tsc-silent --noEmit -p packages/preload/tsconfig.json --suppress 2307@packages", "typecheck:renderer": "tsc-silent --noEmit -p packages/renderer/tsconfig.json --suppress 2307@packages", "typecheck": "npm run typecheck:main && npm run typecheck:preload && npm run typecheck:renderer", "postinstall": "cross-env ELECTRON_RUN_AS_NODE=1 electron scripts/update-electron-vendors.mjs", "format": "npx prettier --write \"**/*.{js,mjs,cjs,ts,mts,cts,tsx,json}\"" }, "devDependencies": { "@types/electron-localshortcut": "^3.1.0", "@types/lodash": "^4.14.191", "@types/md5": "^2.3.2", "@types/node": "18.11.10", "@types/react": "^18.0.26", "@types/react-dom": "^18.0.9", "@types/react-slider": "^1.3.1", "@types/react-virtualized-auto-sizer": "^1.0.1", "@types/react-window": "^1.8.5", "@types/react-window-infinite-loader": "^1.0.6", "@types/styled-components": "^5.1.26", "@typescript-eslint/eslint-plugin": "^5.45.1", "@typescript-eslint/parser": "^5.45.1", "cross-env": "7.0.3", "electron": "22.0.0", "electron-builder": "23.6.0", "electron-devtools-installer": "^3.2.0", "eslint": "8.29.0", "eslint-config-airbnb-base": "^15.0.0", "eslint-config-erb": "^4.0.3", "eslint-import-resolver-typescript": "^2.7.1", "eslint-import-resolver-webpack": "^0.13.2", "eslint-plugin-compat": "^4.0.2", "eslint-plugin-import": "^2.26.0", "eslint-plugin-jest": "^26.1.3", "eslint-plugin-jsx-a11y": "^6.6.1", "eslint-plugin-promise": "^6.1.1", "eslint-plugin-react": "^7.31.11", "eslint-plugin-react-hooks": "^4.6.0", "eslint-plugin-sort-keys-fix": "^1.1.2", "eslint-plugin-typescript-sort-keys": "^2.1.0", "happy-dom": "7.7.2", "nano-staged": "0.8.0", "playwright": "1.27.1", "sass": "^1.56.1", "simple-git-hooks": "2.8.1", "stylelint": "^14.16.0", "stylelint-config-rational-order": "^0.1.2", "stylelint-config-standard-scss": "^6.1.0", "stylelint-config-styled-components": "^0.1.1", "stylelint-order": "^5.0.0", "stylelint-processor-styled-components": "^1.10.0", "tsc-silent": "^1.2.2", "typescript": "4.9.3", "unplugin-auto-expose": "0.0.4", "vite": "3.2.4", "vitest": "0.25.3" }, "dependencies": { "@mantine/core": "^5.9.2", "@mantine/dates": "^5.9.2", "@mantine/dropzone": "^5.9.2", "@mantine/form": "^5.9.2", "@mantine/hooks": "^5.9.2", "@mantine/modals": "^5.9.2", "@mantine/notifications": "^5.9.2", "@mantine/spotlight": "^5.9.2", "@tanstack/react-query": "^4.19.1", "@tanstack/react-query-devtools": "^4.19.1", "@vitejs/plugin-react": "^2.2.0", "ag-grid-community": "^28.2.1", "ag-grid-react": "^28.2.1", "electron-localshortcut": "^3.2.1", "electron-store": "^8.1.0", "electron-updater": "5.3.0", "format-duration": "^2.0.0", "framer-motion": "^7.6.19", "immer": "^9.0.16", "is-electron": "^2.2.1", "ky": "^0.32.2", "ky-universal": "^0.11.0", "lodash": "^4.17.21", "md5": "^2.3.0", "memoize-one": "^6.0.0", "nanoid": "^4.0.0", "node-mpv": "^2.0.0-beta.2", "react": "^18.2.0", "react-dom": "^18.2.0", "react-error-boundary": "^3.1.4", "react-i18next": "^11.16.7", "react-icons": "^4.7.1", "react-player": "^2.11.0", "react-router": "^6.4.4", "react-router-dom": "^6.4.4", "react-simple-img": "^3.0.0", "react-slider": "^2.0.4", "react-virtualized-auto-sizer": "^1.0.7", "react-window": "^1.8.8", "react-window-infinite-loader": "^1.0.8", "styled-components": "^5.3.6", "zod": "^3.19.1", "zustand": "^4.1.5" } }