{ "name": "brainwaves", "productName": "BrainWaves", "version": "1.0.0", "description": "EEG Experiment Desktop Application", "main": "./out/main/index.js", "scripts": { "dev": "node internals/scripts/patchDeps.mjs && electron-vite dev", "build": "electron-vite build", "postbuild": "node internals/scripts/BuildViewers.mjs", "preview": "electron-vite preview", "package": "npm run build && electron-builder build --publish never", "package-all": "npm run build && electron-builder build --mac --win --linux", "package-ci": "npm run build && electron-builder build --publish always", "package-mac": "npm run build && electron-builder build --mac", "package-linux": "npm run build && electron-builder build --linux", "package-win": "npm run build && electron-builder build --win --x64", "postinstall": "electron-builder install-app-deps && node internals/scripts/InstallPyodide.mjs && node internals/scripts/InstallMNE.mjs && node internals/scripts/patchDeps.mjs", "install-pyodide": "node internals/scripts/InstallPyodide.mjs && node internals/scripts/InstallMNE.mjs", "lint": "cross-env NODE_ENV=development eslint . --cache", "lint-fix": "npm run lint -- --fix", "lint-styles": "stylelint '**/*.*(css|scss)'", "lint-styles-fix": "npm run lint-styles -- --fix; exit 0", "postlint-fix": "prettier --single-quote --write '**/*.{ts,tsx,js,jsx,json,html,css,less,scss,yml}'", "postlint-styles-fix": "prettier --single-quote --write '**/*.{css,scss}'", "test": "vitest run", "test:watch": "vitest", "test-all": "npm run lint && npm run lint-styles && npm run typecheck && npm run build && npm test", "tsc": "tsc --noEmit", "typecheck": "tsc --noEmit" }, "lint-staged": { "*.{js,jsx,ts,tsx}": [ "cross-env NODE_ENV=development eslint --cache" ], "{*.json,.{prettierrc,stylelintrc}}": [ "prettier --parser json --write" ], "*.{css,scss}": [ "stylelint --fix", "prettier --single-quote --write" ], "*.{html,md,yml}": [ "prettier --single-quote --write" ] }, "build": { "productName": "BrainWaves", "appId": "com.electron.brainwaves", "asar": true, "files": [ "out/**/*", "node_modules/**/*", "package.json" ], "dmg": { "contents": [ { "x": 130, "y": 220 }, { "x": 410, "y": 220, "type": "link", "path": "/Applications" } ] }, "win": { "target": [ "nsis", "msi" ] }, "linux": { "target": [ "deb", "rpm", "AppImage" ], "category": "Education" }, "directories": { "buildResources": "resources", "output": "release" }, "publish": { "provider": "github", "owner": "makebrainwaves", "repo": "brainwaves", "private": false }, "extraResources": [ { "from": "./src/renderer/experiments/", "to": "experiments", "filter": "**/*" }, { "from": "./src/renderer/utils/webworker/src/", "to": "pyodide", "filter": "**/*" } ] }, "repository": { "type": "git", "url": "git+https://github.com/makebrainwaves/BrainWaves" }, "author": { "name": "Dano Morrison", "email": "dano@neurotechx.com", "url": "https://github.com/makebrainwaves" }, "contributors": [ { "name": "Teon L Brooks", "url": "https://teonbrooks.com" }, { "name": "Yury Shevchenko", "url": "https://yuryshevchenko.com/" } ], "license": "MIT", "keywords": [ "eeg", "electron", "react", "redux", "redux-observable", "muse", "emotiv", "pyodide", "wasm", "lab.js" ], "homepage": "https://github.com/makebrainwaves/BrainWaves/", "devDependencies": { "@babel/plugin-proposal-class-properties": "^7.10.4", "@babel/plugin-proposal-decorators": "^7.10.5", "@testing-library/dom": "^10.4.1", "@testing-library/jest-dom": "^6.4.0", "@testing-library/react": "^16.0.0", "@types/node": "^22.12.0", "@types/react": "^18.x", "@types/react-dom": "^18.x", "@types/react-plotly.js": "^2.6.4", "@types/redux-logger": "^3.0.8", "@typescript-eslint/eslint-plugin": "^8.56.0", "@typescript-eslint/parser": "^8.56.0", "@vitejs/plugin-react": "^4.0.0", "autoprefixer": "^10.4.0", "chalk": "^4.1.0", "cross-env": "^7.0.0", "electron": "^39.6.1", "electron-builder": "^26.8.1", "electron-vite": "^5.0.0", "eslint": "^9.39.2", "eslint-config-prettier": "^10.1.8", "eslint-plugin-import": "^2.32.0", "eslint-plugin-jsx-a11y": "^6.10.2", "eslint-plugin-prettier": "^5.5.5", "eslint-plugin-react": "^7.37.5", "eslint-plugin-react-hooks": "^5.2.0", "husky": "^8.0.0", "jsdom": "^25.0.0", "lint-staged": "^16.2.7", "postcss": "^8.4.0", "prettier": "^3.8.1", "redux-logger": "^3.0.6", "rimraf": "^6.1.3", "sass": "^1.50.0", "stylelint": "^17.3.0", "stylelint-config-standard": "^40.0.0", "tailwindcss": "^3.4.0", "tar-fs": "^2.1.4", "typescript": "^5.0.0", "unbzip2-stream": "1.4.2", "vite": "^7.3.1", "vitest": "^3.0.0" }, "dependencies": { "@electron-toolkit/preload": "^3.0.2", "@electron-toolkit/utils": "^4.0.0", "@fortawesome/fontawesome-free": "^5.13.0", "@neurosity/pipes": "^5.2.1", "@radix-ui/react-dialog": "^1.1.0", "@radix-ui/react-dropdown-menu": "^2.1.0", "@radix-ui/react-select": "^2.2.6", "@radix-ui/react-slot": "^1.1.0", "@reduxjs/toolkit": "^2.11.2", "ajv": "^8.18.0", "caniuse-lite": "^1.0.30001241", "class-variance-authority": "^0.7.0", "clsx": "^2.1.0", "d3": "^7.9.0", "dayjs": "^1.11.19", "electron-log": "^5.4.3", "electron-updater": "^6.8.3", "events": "^3.3.0", "lab.js": "23.0.0-alpha4", "lodash": "^4.17.15", "mkdirp": "^1.0.4", "mousetrap": "^1.6.5", "muse-js": "^3.1.0", "papaparse": "^5.5.3", "pathe": "^2.0.3", "plotly.js": "^3.4.0", "pyodide": "^0.29.3", "rc-slider": "9.2.4", "react": "^18.x", "react-dom": "^18.x", "react-plotly.js": "^2.6.0", "react-redux": "^9.2.0", "react-router-dom": "^6.26.0", "react-toastify": "^11.x", "redux": "^5.x", "redux-observable": "^2.0.0-rc.2", "redux-thunk": "^2.3.0", "rxjs": "^7.8.2", "simple-statistics": "^7.1.0", "simplify-js": "^1.2.4", "tailwind-merge": "^2.3.0", "typesafe-actions": "^5.1.0", "ws": "^8.19.0" }, "overrides": { "react": "^18.x", "react-dom": "^18.x", "yauzl": "^3.2.1" }, "engines": { "node": "^20.19.0 || >=22.12.0", "npm": ">=8.x" }, "prettier": { "singleQuote": true, "trailingComma": "es5" }, "stylelint": { "extends": [ "stylelint-config-standard" ] } }