{ "name": "sonixd", "productName": "Sonixd", "description": "A full-featured Subsonic/Jellyfin compatible desktop client", "scripts": { "build": "concurrently \"yarn build:main\" \"yarn build:renderer\"", "build:main": "cross-env NODE_ENV=production webpack --config ./.erb/configs/webpack.config.main.prod.babel.js", "build:renderer": "cross-env NODE_ENV=production webpack --config ./.erb/configs/webpack.config.renderer.prod.babel.js", "rebuild": "electron-rebuild --parallel --types prod,dev,optional --module-dir src", "lint": "cross-env NODE_ENV=development eslint . --cache --ext .js,.jsx,.ts,.tsx", "package": "yarn build && electron-builder build --publish never", "postinstall": "node -r @babel/register .erb/scripts/CheckNativeDep.js && electron-builder install-app-deps && yarn cross-env NODE_ENV=development webpack --config ./.erb/configs/webpack.config.renderer.dev.dll.babel.js && opencollective-postinstall && yarn-deduplicate yarn.lock", "start": "node -r @babel/register ./.erb/scripts/CheckPortInUse.js && yarn start:renderer", "start:main": "cross-env NODE_ENV=development electron -r ./.erb/scripts/BabelRegister ./src/main.dev.js", "start:renderer": "cross-env NODE_ENV=development webpack serve --config ./.erb/configs/webpack.config.renderer.dev.babel.js", "test": "jest", "i18next": "i18next -c src/i18n/i18next-parser.config.js" }, "lint-staged": { "*.{js,jsx,ts,tsx}": [ "cross-env NODE_ENV=development eslint --cache" ], "{*.json,.{babelrc,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": "Sonixd", "appId": "org.erb.sonixd", "artifactName": "${productName}-${version}-${os}-${arch}.${ext}", "files": [ "dist/", "node_modules/", "index.html", "main.prod.js", "main.prod.js.map", "package.json", "img/" ], "afterSign": ".erb/scripts/Notarize.js", "nsis": { "oneClick": false, "allowToChangeInstallationDirectory": true }, "mac": { "target": { "target": "default", "arch": [ "arm64", "x64" ] }, "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" ] }, "linux": { "target": [ "AppImage", "tar.xz" ], "category": "Development" }, "directories": { "app": "src", "buildResources": "assets", "output": "release" }, "extraResources": [ "./assets/**" ], "publish": { "provider": "github", "owner": "jeffvli", "repo": "sonixd" } }, "repository": { "type": "git", "url": "git+https://github.com/jeffvli/sonixd.git" }, "author": { "name": "jeffvli", "url": "https://github.com/jeffvli/" }, "contributors": [], "license": "GPL-3.0", "bugs": { "url": "https://github.com/jeffvli/sonixd/issues" }, "keywords": [ "electron", "react", "typescript" ], "homepage": "https://github.com/jeffvli/sonixd#readme", "jest": { "testEnvironmentOptions": { "url": "http://localhost/" }, "moduleNameMapper": { "\\.(jpg|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga)$": "/.erb/mocks/fileMock.js", "\\.(css|less|sass|scss)$": "identity-obj-proxy", "electron-store": "/.erb/mocks/electronStoreMock.js" }, "moduleFileExtensions": [ "js", "jsx", "ts", "tsx", "json" ], "moduleDirectories": [ "node_modules", "src/node_modules" ], "setupFiles": [ "./.erb/scripts/CheckBuildsExist.js" ] }, "devDependencies": { "@babel/core": "^7.12.9", "@babel/eslint-parser": "^7.19.1", "@babel/plugin-proposal-class-properties": "^7.12.1", "@babel/plugin-proposal-decorators": "^7.12.1", "@babel/plugin-proposal-do-expressions": "^7.12.1", "@babel/plugin-proposal-export-default-from": "^7.12.1", "@babel/plugin-proposal-export-namespace-from": "^7.12.1", "@babel/plugin-proposal-function-bind": "^7.12.1", "@babel/plugin-proposal-function-sent": "^7.12.1", "@babel/plugin-proposal-json-strings": "^7.12.1", "@babel/plugin-proposal-logical-assignment-operators": "^7.12.1", "@babel/plugin-proposal-nullish-coalescing-operator": "^7.12.1", "@babel/plugin-proposal-optional-chaining": "^7.12.7", "@babel/plugin-proposal-pipeline-operator": "^7.12.1", "@babel/plugin-proposal-throw-expressions": "^7.12.1", "@babel/plugin-syntax-dynamic-import": "^7.8.3", "@babel/plugin-syntax-import-meta": "^7.10.4", "@babel/plugin-transform-react-constant-elements": "^7.12.1", "@babel/plugin-transform-react-inline-elements": "^7.12.1", "@babel/plugin-transform-runtime": "^7.12.1", "@babel/preset-env": "^7.12.7", "@babel/preset-react": "^7.12.7", "@babel/preset-typescript": "^7.12.7", "@babel/register": "^7.12.1", "@electron/notarize": "^1.2.3", "@electron/rebuild": "^3.2.10", "@pmmmwh/react-refresh-webpack-plugin": "^0.5.5", "@teamsupercell/typings-for-css-modules-loader": "^2.4.0", "@testing-library/jest-dom": "^5.16.5", "@testing-library/react": "^13.4.0", "@types/discord-rpc": "^4.0.2", "@types/history": "4.7.6", "@types/jest": "^26.0.15", "@types/lodash": "^4.14.172", "@types/md5": "^2.3.1", "@types/node": "14.18.0", "@types/randomstring": "^1.1.7", "@types/react": "^18.0.2", "@types/react-dom": "^18.0.2", "@types/react-lazy-load-image-component": "^1.5.2", "@types/react-redux": "^7.1.18", "@types/react-router-dom": "^5.1.6", "@types/react-slider": "^1.3.1", "@types/react-test-renderer": "^18.0.0", "@types/react-transition-group": "^4.4.4", "@types/react-virtualized": "^9.21.21", "@types/react-virtualized-auto-sizer": "^1.0.1", "@types/react-window": "^1.8.5", "@types/redux-mock-store": "^1.0.3", "@types/styled-components": "^5.1.14", "@types/webpack-env": "^1.15.2", "@typescript-eslint/eslint-plugin": "^4.8.1", "@typescript-eslint/parser": "^4.8.1", "babel-jest": "^26.1.0", "babel-loader": "^8.2.2", "babel-plugin-dev-expression": "^0.2.2", "babel-plugin-transform-react-remove-prop-types": "^0.4.24", "browserslist-config-erb": "^0.0.1", "chalk": "^4.1.0", "concurrently": "^5.3.0", "core-js": "^3.6.5", "cross-env": "^7.0.2", "css-loader": "^5.0.1", "css-minimizer-webpack-plugin": "^3.4.1", "detect-port": "^1.3.0", "electron": "22.3.1", "electron-builder": "^23.0.2", "electron-devtools-installer": "git+https://github.com/MarshallOfSound/electron-devtools-installer.git", "eslint": "^7.5.0", "eslint-config-airbnb": "^18.2.0", "eslint-config-airbnb-typescript": "^12.0.0", "eslint-config-erb": "^2.0.0", "eslint-config-prettier": "^6.11.0", "eslint-import-resolver-webpack": "^0.13.0", "eslint-plugin-compat": "^3.8.0", "eslint-plugin-import": "^2.22.0", "eslint-plugin-jest": "^24.1.3", "eslint-plugin-jsx-a11y": "6.4.1", "eslint-plugin-prettier": "^3.1.4", "eslint-plugin-promise": "^4.2.1", "eslint-plugin-react": "^7.20.6", "eslint-plugin-react-hooks": "^4.0.8", "file-loader": "^6.0.0", "husky": "^4.2.5", "identity-obj-proxy": "^3.0.0", "jest": "^26.1.0", "less": "3.7.0", "less-loader": "7.3.0", "lint-staged": "^10.2.11", "mini-css-extract-plugin": "^2.1.0", "opencollective-postinstall": "^2.0.3", "prettier": "^2.0.5", "react-refresh": "^0.10.0", "react-test-renderer": "^18.0.1", "redux-mock-store": "^1.5.4", "rimraf": "^3.0.0", "sass-loader": "^12.2.0", "style-loader": "^2.0.0", "terser-webpack-plugin": "^5.0.3", "tsc-silent": "^1.2.1", "typescript": "^4.0.5 < 4.6.0", "url-loader": "^4.1.0", "webpack": "^5.5.1", "webpack-bundle-analyzer": "^4.1.0", "webpack-cli": "^4.2.0", "webpack-dev-server": "^4.0.0", "webpack-merge": "^5.4.0", "yarn-deduplicate": "^3.1.0" }, "dependencies": { "@reduxjs/toolkit": "^1.6.1", "array-move": "^3.0.1", "axios": "^0.21.1", "axios-retry": "^3.1.9", "chart.js": "^3.9.1", "discord-rpc": "^4.0.1", "electron-debug": "^3.1.0", "electron-localshortcut": "^3.2.1", "electron-log": "^4.2.4", "electron-redux": "^1.5.4", "electron-store": "^8.1.0", "electron-updater": "^4.3.4", "fast-average-color": "^7.0.1", "format-duration": "^1.4.0", "history": "^5.0.0", "i18next": "^21.6.5", "i18next-parser": "^6.3.0", "image-downloader": "^4.0.3", "lodash": "^4.17.21", "md5": "^2.3.0", "moment": "^2.29.1", "nanoid": "^3.1.23", "nodejs-fs-utils": "^1.2.5", "randomstring": "^1.2.1", "react": "^18.0.2", "react-audio-player": "^0.17.0", "react-chartjs-2": "^4.3.1", "react-dom": "^18.0.2", "react-helmet-async": "^1.1.2", "react-hotkeys-hook": "^3.4.3", "react-i18next": "^11.15.3", "react-lazy-load-image-component": "^1.5.1", "react-query": "^3.19.1", "react-redux": "^7.2.4", "react-router-dom": "^5.2.0", "react-slider": "^2.0.0", "react-use": "^17.3.2", "react-virtualized-auto-sizer": "^1.0.6", "react-window": "^1.8.6", "regenerator-runtime": "^0.13.5", "rsuite": "^4.10.2", "sass": "^1.49.11", "source-map-support": "^0.5.19", "styled-components": "^5" }, "resolutions": { "@types/react": "^18.0.0", "glob-parent": "^5.1.2", "styled-components": "^5" }, "devEngines": { "node": ">=12.13.0", "npm": ">=6.x", "yarn": ">=1.21.3" }, "browserslist": [], "renovate": { "extends": [ "bliss" ], "baseBranches": [ "next" ] }, "husky": { "hooks": { "pre-commit": "lint-staged" } } }