Loading files
This file is pinned to the selected release. Download the original to open it in your design tool.
b841128f4This file is pinned to the selected release. Download the original to open it in your design tool.
{
"name": "gSender",
"version": "1.7.0-Edge-2",
"description": "Electron sender for GRBL based CNC machines",
"author": {
"name": "Sienci Labs <hi@sienci.com>",
"email": "hi@sienci.com"
},
"main": "./dist/gsender/server-cli",
"types": "./dist/gsender/server-cli",
"pkg": {
"scripts": [
"node_modules/axios/dist/**/*.cjs",
"node_modules/axios/dist/**/*.js"
],
"assets": [
"dist/gsender/pendant/**/*",
"node_modules/**/*.node"
]
},
"bin": {
"cnc": "./bin/cnc",
"gsender": "./bin/gsender"
},
"files": [
"bin",
"dist",
"static"
],
"repository": {
"type": "git",
"url": "https://github.com/Sienci-Labs/gsender"
},
"license": "MIT",
"engines": {
"node": ">=18"
},
"preferGlobal": true,
"scripts": {
"prepare": "npm run clean",
"prebuild-latest": "npm run package-sync && bash -c \"cd src; npm version ${npm_package_version}-${COMMIT_COUNT} --allow-same-version\" && node esbuild.config.js --prebuild-only --production",
"prebuild-dev": "npm run package-sync && node esbuild.config.js --prebuild-only",
"prebuild-prod": "npm run package-sync && node esbuild.config.js --prebuild-only --production",
"build": "npm run build-prod",
"build-latest": "concurrently --kill-others-on-fail --names \"build-dev-css,build-prod-server,vite:build,vite:build:pendant\" \"npm run build-dev-css\" \"npm run build-prod-server\" \"npm run vite:build\" \"npm run vite:build:pendant\" && npm run copy-css && npm run prepare-default-plugins",
"build-dev": "concurrently --kill-others-on-fail --names \"build-dev-css,build-dev-server\" \"npm run build-dev-server\" \"npm run build-dev-css\"",
"build-dev-server": "node esbuild.config.js --target=all",
"build-dev-css": "postcss src/app/src/index.css -o src/app/src/application.css --config src/app/postcss.config.cjs",
"build-prod": "concurrently --kill-others-on-fail --names \"build-dev-css,build-prod-server,vite:build,vite:build:pendant\" \"npm run build-dev-css\" \"npm run build-prod-server\" \"npm run vite:build\" \"npm run vite:build:pendant\" && npm run copy-css && npm run prepare-default-plugins",
"build-prod-server": "node esbuild.config.js --production --target=all",
"copy-css": "cross-env mkdir -p dist/gsender/app/src && cp src/app/src/application.css dist/gsender/app/src/",
"prepare-default-plugins": "node scripts/prepare-default-plugins.js",
"prepare-dev-plugins": "node scripts/prepare-dev-plugins.js",
"postbuild-dev-server": "echo 'Static files copied by esbuild'",
"postbuild-prod-server": "echo 'Static files copied by esbuild'",
"clean": "bash -c 'rm -rf ./dist ./output'",
"tailwind-dev": "npx tailwindcss -i src/app/src/index.css -o src/app/src/application.css --config src/app/tailwind.config.ts --watch",
"electron": "electron",
"electron-builder": "electron-builder",
"electron-builder:debug": "cross-env DEBUG=electron-builder electron-builder",
"github-release": "github-release",
"electron-rebuild": "electron-rebuild",
"package-sync": "node scripts/package-sync.js",
"build:macos": "bash -c 'scripts/electron-builder.sh --macos --x64 --arm64'",
"build:macos-x64": "bash -c 'scripts/electron-builder.sh --macos --x64'",
"build:macos-arm64": "bash -c 'scripts/electron-builder.sh --macos --arm64'",
"build:linux-ia32": "bash -c 'scripts/electron-builder.sh --linux --ia32'",
"build:linux-x64": "bash -c 'scripts/electron-builder.sh --linux --x64'",
"build:linux-armv7l": "bash -c 'scripts/electron-builder.sh --linux --armv7l'",
"build:linux": "bash -c 'scripts/electron-builder.sh --linux --x64 --arm64'",
"build:linux-arm64": "bash -c 'scripts/electron-builder.sh --linux --arm64'",
"build:windows-ia32": "bash -c 'scripts/electron-builder.sh --windows --ia32'",
"build:windows-x64": "bash -c 'scripts/electron-builder.sh --windows --x64'",
"build:windows": "bash -c 'scripts/electron-builder.sh --windows --x64'",
"start": "cross-env ./bin/gsender",
"start-electron": "electron ./dist/gsender/main",
"watch-dev": "node esbuild.config.js --watch",
"start-dev": "cross-env NODE_ENV=development ./bin/gsender -vv -p 8000",
"start-dev:nodemon": "nodemon --exec \"node ./bin/gsender -vv -p 8000\"",
"dev": "npm run prebuild-dev && npm run build-dev-server && npm run prepare-dev-plugins && concurrently --kill-others-on-fail --names \"esbuild,server,tailwind\" \"npm run watch-dev\" \"npm run start-dev:nodemon\" \"npm run tailwind-dev\"",
"dev:electron": "npm run build-dev && npm run prepare-dev-plugins && node scripts/electron-hot.js",
"vite:dev": "cd src/app && vite --port 5173 --host --force",
"prod": "npm run build-prod && NODE_ENV=production ./bin/gsender",
"format": "biome format --write .",
"format:check": "biome format .",
"lint": "biome check --formatter-enabled=false .",
"lint:fix": "biome check --write .",
"stylint": "stylint src/app",
"test": "npx jest --config jest.config.js",
"coveralls": "tap test/*.js --coverage --coverage-report=text-lcov --nyc-arg=--require --nyc-arg=esbuild-register | coveralls",
"cy:run": "cypress run",
"test:plugins": "cypress run --config-file cypress.plugins.config.js --browser chrome",
"testgrblhal": "npm run report:clean && (npx cypress run --headed --browser chrome --spec cypress/e2e/grblHal/A_grblHal_master_spec.cy.js || true) && npm run report:merge && npm run report:generate && npm run dashboard:generate && npm run dashboard:open",
"report:clean": "if exist cypress\\reports\\mochawesome\\.jsons rmdir /s /q cypress\\reports\\mochawesome\\.jsons && mkdir cypress\\reports\\mochawesome\\.jsons",
"report:merge": "mochawesome-merge cypress/reports/mochawesome/.jsons/*.json -o cypress/reports/mochawesome/merged.json",
"report:generate": "marge cypress/reports/mochawesome/merged.json -f report --reportDir cypress/reports/html --inline --charts",
"report:open": "start cypress/reports/html/merged.html",
"dashboard:generate": "node cypress/dashboard/generate-dashboard.js",
"dashboard:open": "start cypress/dashboard/report/index.html",
"test:report": "npm run report:clean && (npx cypress run --spec cypress/e2e/grblHal/A_grblHal_master_spec.cy.js || true) && npm run report:merge && npm run report:generate && npm run dashboard:generate",
"cypress:open": "cypress open",
"vite:build": "cross-env NODE_OPTIONS='--max-old-space-size=8192' yarn --cwd ./src/app build",
"vite:build:pendant": "yarn --cwd ./src/pendant build",
"vite:build:pendant-standalone": "vite build --config src/pendant/vite.config.ts --outDir ../../dist/gsender-pendant/pendant --emptyOutDir",
"vite:dev:pendant": "cd src/pendant && vite --port 5174 --host --force",
"prebuild-pendant": "npm run package-sync && node esbuild.config.js --production --prebuild-pendant-only",
"pendant:electron:dev": "npm run build-dev && concurrently --kill-others-on-fail --names \"esbuild,server,vite,electron\" \"npm run watch-dev\" \"npm run start-dev:nodemon\" \"npm run vite:dev:pendant\" \"node scripts/wait-for-url.mjs http://127.0.0.1:5174 && cross-env NODE_ENV=development ELECTRON_RENDERER_URL=http://127.0.0.1:5174 electron ./output/pendant-main\"",
"pendant:build": "npm run prebuild-pendant && concurrently --kill-others-on-fail --names \"build-pendant-bundles,vite:build:pendant\" \"node esbuild.config.js --production --target=pendant\" \"npm run vite:build:pendant-standalone\"",
"build:pendant:mac": "npm run pendant:build && bash -c 'scripts/electron-builder-pendant.sh --macos --x64 --arm64'",
"build:pendant:pi": "npm run pendant:build && bash -c 'scripts/electron-builder-pendant.sh --linux --arm64'",
"build:pendant:win": "npm run pendant:build && bash -c 'scripts/electron-builder-pendant.sh --win --x64'",
"postvite:build": "bash -c \"mkdir -p dist/gsender/app; cp -af src/app/{favicon.ico,images,assets} dist/gsender/app/\"",
"install:packages": "yarn install && yarn install --prefix /src/app",
"check-types": "node ./src/app/node_modules/typescript/bin/tsc --noEmit -p ./src/app",
"test:unit": "jest",
"test:unit:watch": "jest --watch",
"test:app": "yarn --cwd src/app test"
},
"build": {
"appId": "org.sienci.gsender-edge",
"extraMetadata": {
"main": "./main.js"
},
"afterSign": "./notarize.js",
"extends": null,
"artifactName": "${name}-${version}-${arch}.${ext}",
"asar": true,
"asarUnpack": [
"**/*.node",
"**/*.{dll,so,dylib,exe}"
],
"productName": "gSender Edge",
"generateUpdatesFilesForAllChannels": true,
"npmRebuild": false,
"compression": "normal",
"removePackageScripts": true,
"buildDependenciesFromSource": false,
"files": [
"**/*",
"!**/*.map"
],
"extraFiles": [
{
"from": "dist/gsender/plugins/",
"to": "plugins/"
}
],
"extraResources": [
"./node_modules/@electron/remote/**"
],
"directories": {
"buildResources": "electron-build",
"output": "output",
"app": "dist/gsender"
},
"nsis": {
"allowToChangeInstallationDirectory": true,
"oneClick": false,
"license": "LICENSE",
"perMachine": true,
"installerSidebar": "electron-build/sidebar.bmp",
"createDesktopShortcut": false,
"createStartMenuShortcut": false,
"include": "electron-build/installer.nsh"
},
"mac": {
"category": "public.app-category.productivity",
"target": [
"dmg"
],
"icon": "electron-build/icon.icns",
"electronUpdaterCompatibility": ">=2.16",
"darkModeSupport": true,
"mergeASARs": false,
"hardenedRuntime": true,
"entitlements": "electron-build/entitlements.mac.plist",
"entitlementsInherit": "electron-build/entitlements.mac.plist"
},
"dmg": {
"background": "electron-build/background.png",
"icon": "electron-build/icon.icns",
"iconSize": 80,
"iconTextSize": 12,
"writeUpdateInfo": false,
"contents": [
{
"x": 448,
"y": 344,
"type": "link",
"path": "/Applications"
},
{
"x": 192,
"y": 344,
"type": "file"
}
]
},
"win": {
"target": [
"nsis"
],
"icon": "electron-build/icon.ico",
"signtoolOptions": {
"sign": "./WindowsSigner.js"
}
},
"linux": {
"category": "Utility",
"icon": "electron-build/icon-square.png",
"target": [
"AppImage",
"deb"
]
},
"fileAssociations": [
{
"ext": "gcode",
"name": "G-Code File",
"description": "G-Code CNC machining file",
"role": "Viewer",
"icon": "file_association_icon"
},
{
"ext": "gc",
"name": "G-Code File",
"description": "G-Code CNC machining file",
"role": "Viewer",
"icon": "file_association_icon"
},
{
"ext": "nc",
"name": "G-Code File",
"description": "G-Code CNC machining file",
"role": "Viewer",
"icon": "file_association_icon"
},
{
"ext": "tap",
"name": "G-Code File",
"description": "G-Code CNC machining file",
"role": "Viewer",
"icon": "file_association_icon"
},
{
"ext": "cnc",
"name": "G-Code File",
"description": "G-Code CNC machining file",
"role": "Viewer",
"icon": "file_association_icon"
}
]
},
"keywords": [
"gsender",
"arduino",
"raspberry",
"pi",
"cnc",
"gcode",
"grbl",
"grblhal",
"react",
"socket.io"
],
"dependencies": {
"@electron/remote": "^2.1.3",
"@posthog/react": "^1.9.0",
"@sentry/electron": "^7.7.1",
"@sentry/react": "^9.28.0",
"@serialport/parser-byte-length": "^13.0.0",
"@serialport/parser-readline": "^13.0.0",
"@sienci/avrgirl-arduino": "^5.0.3",
"@sienci/gviewer": "^0.1.37",
"@types/estree": "^1.0.9",
"acorn": "^8.18.0",
"acorn-walk": "^8.3.5",
"axios": "^1.2.4",
"basic-ftp": "^5.1.0",
"bcrypt-nodejs": "0.0.3",
"buffer-chunks": "^0.1.1",
"chalk": "~2.4.2",
"commander": "^10.0.0",
"compression": "^1.8.1",
"connect-restreamer": "~1.0.3",
"consolidate": "~0.15.1",
"cookie-parser": "~1.4.4",
"cors": "^2.8.5",
"crc-full": "^1.1.0",
"debug": "^4.4.3",
"deep-keys": "~0.5.0",
"electron-log": "^5.4.3",
"electron-store": "^11.0.2",
"electron-updater": "^6.7.3",
"ensure-array": "~1.0.0",
"errorhandler": "~1.5.0",
"escodegen": "~1.11.1",
"esprima": "~4.0.1",
"expand-tilde": "~2.0.2",
"express": "~4.16.4",
"express-jwt": "~5.3.1",
"express-session": "^1.19.0",
"gcode-interpreter": "~2.1.0",
"gcode-parser": "~1.3.6",
"hogan.js": "~3.0.2",
"http-proxy": "~1.18.1",
"i18next": "~15.0.9",
"i18next-fs-backend": "^1.1.4",
"i18next-http-middleware": "^3.2.1",
"is-electron": "^2.2.2",
"is-online": "^9.0.1",
"jsonfile": "^6.2.0",
"jsonwebtoken": "~8.5.1",
"jszip": "^3.10.1",
"lodash": "~4.17.11",
"method-override": "~3.0.0",
"minimatch": "~3.0.4",
"mkdirp": "~0.5.1",
"morgan": "^1.10.1",
"multer": "^1.4.5-lts.1",
"nrf-intel-hex": "^1.3.0",
"posthog-js": "^1.372.5",
"range_check": "~1.4.0",
"react": "^18.2.0",
"react-dom": "^18.2.0",
"react-virtuoso": "^4.18.13",
"registry-auth-token": "~3.4.0",
"registry-url": "~5.1.0",
"rimraf": "~2.6.3",
"semver": "^7.7.4",
"serialport": "^13.0.0",
"serve-favicon": "~2.5.0",
"serve-static": "~1.13.2",
"session-file-store": "^1.5.0",
"shortid": "~2.2.14",
"sirv": "^2.0.4",
"socket.io": "^4.1.3",
"spawn-default-shell": "~2.0.0",
"superagent": "^6.1.0",
"usb": "^2.17.0",
"uuid": "~3.3.2",
"watch": "~1.0.2",
"webappengine": "~1.2.0",
"winreg": "^1.2.5",
"winston": "^3.19.0"
},
"devDependencies": {
"@babel/core": "^7.29.0",
"@babel/preset-env": "^7.25.8",
"@babel/preset-react": "^7.25.8",
"@babel/preset-typescript": "^7.27.1",
"@biomejs/biome": "2.5.11",
"@dnd-kit/core": "^6.3.1",
"@dnd-kit/sortable": "^10.0.0",
"@dnd-kit/utilities": "^3.2.2",
"@electron/notarize": "^3.1.1",
"@electron/rebuild": "^4.0.3",
"@radix-ui/react-accordion": "^1.2.0",
"@radix-ui/react-alert-dialog": "^1.1.1",
"@radix-ui/react-checkbox": "^1.1.1",
"@radix-ui/react-dialog": "^1.1.1",
"@radix-ui/react-dropdown-menu": "^2.1.1",
"@radix-ui/react-label": "^2.1.0",
"@radix-ui/react-navigation-menu": "^1.2.0",
"@radix-ui/react-popover": "^1.1.1",
"@radix-ui/react-progress": "^1.1.0",
"@radix-ui/react-radio-group": "^1.2.0",
"@radix-ui/react-scroll-area": "^1.1.0",
"@radix-ui/react-select": "^2.1.1",
"@radix-ui/react-slider": "^1.2.0",
"@radix-ui/react-slot": "^1.1.0",
"@radix-ui/react-switch": "^1.1.0",
"@radix-ui/react-tabs": "^1.1.0",
"@radix-ui/react-toast": "^1.2.1",
"@radix-ui/react-toggle": "^1.1.0",
"@radix-ui/react-toggle-group": "^1.1.0",
"@radix-ui/react-tooltip": "^1.1.2",
"@react-pdf/renderer": "^4.3.2",
"@reduxjs/toolkit": "^2.2.7",
"@sentry/esbuild-plugin": "^4.4.0",
"@sentry/vite-plugin": "^3.5.0",
"@tanstack/match-sorter-utils": "^8.8.4",
"@tanstack/react-router": "^1.159.6",
"@tanstack/react-table": "^8.9.3",
"@testing-library/dom": "^10.4.1",
"@testing-library/jest-dom": "^6.9.1",
"@testing-library/react": "^16.3.2",
"@testing-library/user-event": "^14.6.1",
"@types/jest": "^30.0.0",
"@types/lodash": "^4.17.21",
"@types/pubsub-js": "^1.8.6",
"@types/react-dom": "^18.3.0",
"@types/react-syntax-highlighter": "^15.5.13",
"@vitejs/plugin-react": "4.3.1",
"@xterm/addon-fit": "^0.10.0",
"@xterm/xterm": "^5.5.0",
"autoprefixer": "^10.4.19",
"babel-plugin-transform-import-meta": "^2.3.3",
"body-parser": "~1.18.3",
"boolean": "~1.0.0",
"chained-function": "~0.5.0",
"chart.js": "^4.4.7",
"class-variance-authority": "^0.7.0",
"classnames": "^2.5.1",
"cli-color": "~1.4.0",
"cmdk": "^1.0.0",
"colornames": "~1.1.1",
"concaveman": "^2.0.0",
"concurrently": "~4.1.0",
"coveralls": "^3.1.1",
"cross-env": "^10.1.0",
"cypress": "^13.4.0",
"cypress-grep": "^3.0.4",
"cypress-mochawesome-reporter": "^4.0.2",
"cypress-multi-reporters": "^2.0.5",
"cypress-real-events": "^1.11.0",
"date-fns": "^4.1.0",
"detect-browser": "~4.4.0",
"dotenv": "~7.0.0",
"electron": "^38.2.0",
"electron-builder": "^26.16.1",
"electron-reloader": "^1.2.3",
"embla-carousel-react": "^8.2.0",
"esbuild": "^0.25.10",
"esbuild-register": "^3.6.0",
"file-saver": "^2.0.5",
"gamepad.js": "^2.1.0",
"github-release-cli": "~1.1.0",
"html-react-parser": "^5.2.2",
"jest": "^30.2.0",
"jest-environment-jsdom": "^30.2.0",
"lucide-react": "^0.428.0",
"memoize-one": "~5.0.4",
"mocha-junit-reporter": "^2.2.1",
"mochawesome": "^7.1.4",
"mochawesome-merge": "^5.1.1",
"mochawesome-report-generator": "^6.3.2",
"moment": "^2.30.1",
"mousetrap": "~1.6.3",
"namespace-constants": "^1.0.1",
"next-themes": "^0.4.3",
"nib": "^1.2.0",
"node-gyp": "^9.3.1",
"nodemon": "^3.1.10",
"objtools": "~2.0.0",
"pkg": "^5.8.1",
"postcss": "^8.4.47",
"postcss-cli": "^11.0.1",
"progress": "~2.0.3",
"prop-types": "^15.8.1",
"pubsub-js": "~1.9.4",
"react-chartjs-2": "^5.3.0",
"react-hook-form": "^7.52.2",
"react-icons": "^5.3.0",
"react-infinite-tree": "~0.7.1",
"react-intersection-observer": "^9.15.1",
"react-markdown": "^8.0.3",
"react-qr-code": "^2.0.11",
"react-redux": "^7.2.4",
"react-responsive": "^10.0.1",
"react-router": "^7.1.5",
"react-select": "^4.3.0",
"react-syntax-highlighter": "^16.1.0",
"redux-devtools": "^3.7.0",
"redux-saga": "^1.1.3",
"sha1": "~1.1.1",
"socket.io-client": "^4.1.3",
"sonner": "^2.0.7",
"stylint": "^2.0.0",
"stylus": "^0.64.0",
"tailwind-variants": "^0.2.1",
"tailwindcss": "^3.4.13",
"tailwindcss-animate": "^1.0.7",
"tap": "~12.6.2",
"three": "^0.182.0",
"ts-jest": "^29.4.6",
"universal-logger": "~1.0.1",
"universal-logger-browser": "~1.0.2",
"use-long-press": "^3.2.0",
"vaul": "^1.1.2",
"vite": "^7.3.1",
"vite-css-modules": "^1.11.1",
"vite-plugin-node-polyfills": "0.23.0",
"vite-tsconfig-paths": "5.0.1",
"xterm": "^5.3.0",
"xterm-addon-fit": "^0.8.0"
},
"resolutions": {
"@react-pdf/image": "3.0.4"
},
"packageManager": "yarn@1.22.22"
}