{
    "name": "feishin",
    "productName": "Feishin",
    "description": "Feishin music server",
    "version": "0.11.1",
    "scripts": {
        "build": "concurrently \"npm run build:main\" \"npm run build:renderer\" \"npm run build:remote\"",
        "build:main": "cross-env NODE_ENV=production TS_NODE_TRANSPILE_ONLY=true webpack --config ./.erb/configs/webpack.config.main.prod.ts",
        "build:remote": "cross-env NODE_ENV=production TS_NODE_TRANSPILE_ONLY=true webpack --config ./.erb/configs/webpack.config.remote.prod.ts",
        "build:renderer": "cross-env NODE_ENV=production TS_NODE_TRANSPILE_ONLY=true webpack --config ./.erb/configs/webpack.config.renderer.prod.ts",
        "build:web": "cross-env NODE_ENV=production TS_NODE_TRANSPILE_ONLY=true webpack --config ./.erb/configs/webpack.config.web.prod.ts",
        "build:docker": "docker build -t jeffvli/feishin .",
        "rebuild": "electron-rebuild --parallel --types prod,dev,optional --module-dir release/app",
        "lint": "concurrently \"npm run lint:code\" \"npm run lint:styles\"",
        "lint:code": "cross-env NODE_ENV=development eslint . --ext .js,.jsx,.ts,.tsx --fix",
        "lint:styles": "npx stylelint **/*.tsx --fix",
        "package": "node --import tsx ./.erb/scripts/clean.js dist && npm run build && electron-builder build --publish never",
        "package:pr": "node --import tsx ./.erb/scripts/clean.js dist && npm run build && electron-builder build --publish never --win --mac --linux",
        "package:dev": "node --import tsx ./.erb/scripts/clean.js dist && npm run build && electron-builder build --publish never --dir",
        "postinstall": "node --import tsx .erb/scripts/check-native-dep.js && electron-builder install-app-deps && cross-env NODE_ENV=development TS_NODE_TRANSPILE_ONLY=true webpack --config ./.erb/configs/webpack.config.renderer.dev.dll.ts",
        "start": "node --import tsx ./.erb/scripts/check-port-in-use.js && npm run start:renderer",
        "start:main": "cross-env NODE_ENV=development  NODE_OPTIONS=\"--import tsx\" electron -r ts-node/register/transpile-only ./src/main/main.ts",
        "start:preload": "cross-env NODE_ENV=development TS_NODE_TRANSPILE_ONLY=true webpack --config ./.erb/configs/webpack.config.preload.dev.ts",
        "start:remote": "cross-env NODE_ENV=developemnt TS_NODE_TRANSPILE_ONLY=true webpack --config ./.erb/configs/webpack.config.remote.dev.ts",
        "start:renderer": "cross-env NODE_ENV=development TS_NODE_TRANSPILE_ONLY=true webpack serve --config ./.erb/configs/webpack.config.renderer.dev.ts",
        "start:web": "cross-env NODE_ENV=development TS_NODE_TRANSPILE_ONLY=true webpack serve --config ./.erb/configs/webpack.config.renderer.web.ts",
        "test": "jest",
        "prepare": "husky install",
        "i18next": "i18next -c src/i18n/i18next-parser.config.js",
        "prod:buildserver": "pwsh -c \"./scripts/server-build.ps1\"",
        "prod:publishserver": "pwsh -c \"./scripts/server-publish.ps1\""
    },
    "lint-staged": {
        "*.{js,jsx,ts,tsx}": [
            "cross-env NODE_ENV=development eslint --cache"
        ],
        "*.json,.{eslintrc,prettierrc}": [
            "prettier --ignore-path .eslintignore --parser json --write"
        ],
        "*.{css,scss}": [
            "prettier --ignore-path .eslintignore --single-quote --write"
        ],
        "*.{html,md,yml}": [
            "prettier --ignore-path .eslintignore --single-quote --write"
        ]
    },
    "build": {
        "productName": "Feishin",
        "appId": "org.jeffvli.feishin",
        "artifactName": "${productName}-${version}-${os}-${arch}.${ext}",
        "asar": true,
        "asarUnpack": "**\\*.{node,dll}",
        "files": [
            "dist",
            "node_modules",
            "package.json"
        ],
        "afterSign": ".erb/scripts/notarize.js",
        "electronVersion": "31.2.0",
        "mac": {
            "target": {
                "target": "default",
                "arch": [
                    "arm64",
                    "x64"
                ]
            },
            "icon": "assets/icons/icon.icns",
            "type": "distribution",
            "hardenedRuntime": true,
            "entitlements": "assets/entitlements.mac.plist",
            "entitlementsInherit": "assets/entitlements.mac.plist",
            "gatekeeperAssess": false
        },
        "dmg": {
            "contents": [
                {
                    "x": 130,
                    "y": 220
                },
                {
                    "x": 410,
                    "y": 220,
                    "type": "link",
                    "path": "/Applications"
                }
            ]
        },
        "win": {
            "target": [
                "nsis",
                "zip"
            ],
            "icon": "assets/icons/icon.ico"
        },
        "deb": {
            "depends": [
                "libgssapi_krb5.so.2",
                "libavahi-common.so.3",
                "libavahi-client.so.3",
                "libkrb5.so.3",
                "libkrb5support.so.0",
                "libkeyutils.so.1",
                "libcups.so.2"
            ]
        },
        "rpm": {
            "depends": [
                "libgssapi_krb5.so.2",
                "libavahi-common.so.3",
                "libavahi-client.so.3",
                "libkrb5.so.3",
                "libkrb5support.so.0",
                "libkeyutils.so.1",
                "libcups.so.2"
            ]
        },
        "freebsd": {
            "depends": [
                "libgssapi_krb5.so.2",
                "libavahi-common.so.3",
                "libavahi-client.so.3",
                "libkrb5.so.3",
                "libkrb5support.so.0",
                "libkeyutils.so.1",
                "libcups.so.2"
            ]
        },
        "linux": {
            "target": [
                "AppImage",
                "tar.xz"
            ],
            "icon": "assets/icons/icon.png",
            "category": "AudioVideo;Audio;Player"
        },
        "directories": {
            "app": "release/app",
            "buildResources": "assets",
            "output": "release/build"
        },
        "extraResources": [
            "./assets/**"
        ],
        "publish": {
            "provider": "github",
            "owner": "jeffvli",
            "repo": "feishin"
        }
    },
    "repository": {
        "type": "git",
        "url": "git+https://github.com/jeffvli/feishin.git"
    },
    "author": {
        "name": "jeffvli",
        "url": "https://github.com/jeffvli/"
    },
    "contributors": [],
    "license": "GPL-3.0",
    "bugs": {
        "url": "https://github.com/jeffvli/feishin/issues"
    },
    "keywords": [
        "subsonic",
        "navidrome",
        "airsonic",
        "jellyfin",
        "react",
        "electron"
    ],
    "homepage": "https://github.com/jeffvli/feishin",
    "jest": {
        "testURL": "http://localhost/",
        "testEnvironment": "jsdom",
        "transform": {
            "\\.(ts|tsx|js|jsx)$": "ts-jest"
        },
        "moduleNameMapper": {
            "\\.(jpg|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga)$": "<rootDir>/.erb/mocks/fileMock.js",
            "\\.(css|less|sass|scss)$": "identity-obj-proxy"
        },
        "moduleFileExtensions": [
            "js",
            "jsx",
            "ts",
            "tsx",
            "json"
        ],
        "moduleDirectories": [
            "node_modules",
            "release/app/node_modules"
        ],
        "testPathIgnorePatterns": [
            "release/app/dist"
        ],
        "setupFiles": [
            "./.erb/scripts/check-build-exists.ts"
        ]
    },
    "devDependencies": {
        "@electron/rebuild": "^3.6.0",
        "@pmmmwh/react-refresh-webpack-plugin": "0.5.5",
        "@stylelint/postcss-css-in-js": "^0.38.0",
        "@teamsupercell/typings-for-css-modules-loader": "^2.5.1",
        "@testing-library/jest-dom": "^5.16.4",
        "@testing-library/react": "^13.0.0",
        "@types/dompurify": "^3.0.5",
        "@types/electron-localshortcut": "^3.1.0",
        "@types/jest": "^27.4.1",
        "@types/lodash": "^4.14.188",
        "@types/md5": "^2.3.2",
        "@types/node": "^17.0.23",
        "@types/react": "^18.0.25",
        "@types/react-dom": "^18.0.8",
        "@types/react-test-renderer": "^17.0.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",
        "@types/terser-webpack-plugin": "^5.0.4",
        "@types/webpack-bundle-analyzer": "^4.4.1",
        "@types/webpack-env": "^1.16.3",
        "@typescript-eslint/eslint-plugin": "^5.47.0",
        "@typescript-eslint/parser": "^5.47.0",
        "browserslist-config-erb": "^0.0.3",
        "chalk": "^4.1.2",
        "concurrently": "^7.1.0",
        "core-js": "^3.21.1",
        "cross-env": "^7.0.3",
        "css-loader": "^6.7.1",
        "css-minimizer-webpack-plugin": "^3.4.1",
        "detect-port": "^1.3.0",
        "electron": "^31.2.0",
        "electron-builder": "^24.13.3",
        "electron-devtools-installer": "^3.2.0",
        "electron-notarize": "^1.2.1",
        "electronmon": "^2.0.2",
        "eslint": "^8.30.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.2.0",
        "eslint-plugin-import": "^2.26.0",
        "eslint-plugin-jest": "^26.1.3",
        "eslint-plugin-jsx-a11y": "^6.5.1",
        "eslint-plugin-promise": "^6.0.0",
        "eslint-plugin-react": "^7.29.4",
        "eslint-plugin-react-hooks": "^4.4.0",
        "eslint-plugin-sort-keys-fix": "^1.1.2",
        "eslint-plugin-typescript-sort-keys": "^2.1.0",
        "file-loader": "^6.2.0",
        "html-webpack-plugin": "^5.5.0",
        "husky": "^7.0.4",
        "i18next-parser": "^9.0.2",
        "identity-obj-proxy": "^3.0.0",
        "jest": "^27.5.1",
        "lint-staged": "^12.3.7",
        "mini-css-extract-plugin": "^2.6.0",
        "postcss-scss": "^4.0.4",
        "postcss-styled-syntax": "^0.5.0",
        "postcss-syntax": "^0.36.2",
        "prettier": "^3.3.3",
        "react-refresh": "^0.12.0",
        "react-refresh-typescript": "^2.0.4",
        "react-test-renderer": "^18.0.0",
        "rimraf": "^3.0.2",
        "sass": "^1.49.11",
        "sass-loader": "^12.6.0",
        "style-loader": "^3.3.1",
        "stylelint": "^15.10.3",
        "stylelint-config-css-modules": "^4.3.0",
        "stylelint-config-recess-order": "^4.3.0",
        "stylelint-config-standard": "^34.0.0",
        "stylelint-config-standard-scss": "^4.0.0",
        "stylelint-config-styled-components": "^0.1.1",
        "terser-webpack-plugin": "^5.3.1",
        "ts-jest": "^27.1.4",
        "ts-loader": "^9.2.8",
        "ts-node": "^10.9.2",
        "tsconfig-paths-webpack-plugin": "^4.0.0",
        "tsx": "^4.16.2",
        "typescript": "^5.2.2",
        "typescript-plugin-styled-components": "^3.0.0",
        "url-loader": "^4.1.1",
        "webpack": "^5.94.0",
        "webpack-bundle-analyzer": "^4.5.0",
        "webpack-cli": "^4.9.2",
        "webpack-dev-server": "^4.8.0",
        "webpack-merge": "^5.8.0"
    },
    "dependencies": {
        "@ag-grid-community/client-side-row-model": "^28.2.1",
        "@ag-grid-community/core": "^28.2.1",
        "@ag-grid-community/infinite-row-model": "^28.2.1",
        "@ag-grid-community/react": "^28.2.1",
        "@ag-grid-community/styles": "^28.2.1",
        "@emotion/react": "^11.10.4",
        "@mantine/core": "^6.0.17",
        "@mantine/dates": "^6.0.17",
        "@mantine/form": "^6.0.17",
        "@mantine/hooks": "^6.0.17",
        "@mantine/modals": "^6.0.17",
        "@mantine/notifications": "^6.0.17",
        "@mantine/utils": "^6.0.17",
        "@tanstack/react-query": "^4.32.1",
        "@tanstack/react-query-devtools": "^4.32.1",
        "@tanstack/react-query-persist-client": "^4.32.1",
        "@ts-rest/core": "^3.23.0",
        "@xhayper/discord-rpc": "^1.0.24",
        "audiomotion-analyzer": "^4.5.0",
        "auto-text-size": "^0.2.3",
        "axios": "^1.6.0",
        "clsx": "^2.0.0",
        "cmdk": "^0.2.0",
        "dayjs": "^1.11.6",
        "dompurify": "^3.1.6",
        "electron-debug": "^3.2.0",
        "electron-localshortcut": "^3.2.1",
        "electron-log": "^5.1.1",
        "electron-store": "^8.1.0",
        "electron-updater": "^6.3.1",
        "fast-average-color": "^9.3.0",
        "format-duration": "^2.0.0",
        "framer-motion": "^11.0.0",
        "fuse.js": "^6.6.2",
        "history": "^5.3.0",
        "i18next": "^21.10.0",
        "idb-keyval": "^6.2.1",
        "immer": "^9.0.21",
        "is-electron": "^2.2.2",
        "lodash": "^4.17.21",
        "md5": "^2.3.0",
        "memoize-one": "^6.0.0",
        "nanoid": "^3.3.3",
        "net": "^1.0.2",
        "node-mpv": "github:jeffvli/Node-MPV#32b4d64395289ad710c41d481d2707a7acfc228f",
        "overlayscrollbars": "^2.2.1",
        "overlayscrollbars-react": "^0.5.1",
        "react": "^18.2.0",
        "react-dom": "^18.2.0",
        "react-error-boundary": "^3.1.4",
        "react-i18next": "^11.18.6",
        "react-icons": "^4.10.1",
        "react-player": "^2.11.0",
        "react-router": "^6.16.0",
        "react-router-dom": "^6.16.0",
        "react-simple-img": "^3.0.0",
        "react-virtualized-auto-sizer": "^1.0.17",
        "react-window": "^1.8.9",
        "react-window-infinite-loader": "^1.0.9",
        "semver": "^7.5.4",
        "styled-components": "^6.0.8",
        "swiper": "^9.3.1",
        "zod": "^3.22.3",
        "zustand": "^4.3.9"
    },
    "resolutions": {
        "styled-components": "^6"
    },
    "devEngines": {
        "node": ">=18.x",
        "npm": ">=7.x"
    },
    "browserslist": [],
    "electronmon": {
        "patterns": [
            "!server",
            "!src/renderer"
        ]
    }
}
