{
  "name": "cncjs",
  "version": "1.11.5",
  "description": "A web-based interface for CNC milling controller running Grbl, Marlin, Smoothieware, or TinyG",
  "homepage": "https://github.com/cncjs/cncjs",
  "author": "Cheton Wu <cheton@gmail.com>",
  "main": "./dist/cncjs/server-cli.js",
  "bin": {
    "cnc": "./bin/cnc",
    "cncjs": "./bin/cncjs"
  },
  "files": [
    "bin",
    "dist",
    "static"
  ],
  "repository": {
    "type": "git",
    "url": "git@github.com:cncjs/cncjs.git"
  },
  "license": "MIT",
  "engines": {
    "node": ">=18"
  },
  "preferGlobal": true,
  "scripts": {
    "build": "yarn build-prod",
    "build-latest": "bash scripts/build-latest.sh",
    "build-dev": "bash scripts/build-dev.sh",
    "build-prod": "bash scripts/build-prod.sh",
    "clean": "del dist output",
    "electron": "electron",
    "electron-builder": "electron-builder",
    "electron-builder:debug": "cross-env DEBUG=electron-builder electron-builder",
    "electron-rebuild": "electron-rebuild",
    "github-release": "github-release",
    "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": "bash -c 'scripts/electron-builder.sh --linux --x64 --arm64 --armv7l'",
    "build:linux-x64": "bash -c 'scripts/electron-builder.sh --linux --x64'",
    "build:linux-armv7l": "bash -c 'scripts/electron-builder.sh --linux --armv7l'",
    "build:linux-arm64": "bash -c 'scripts/electron-builder.sh --linux --arm64'",
    "build:windows": "bash -c 'scripts/electron-builder.sh --windows --x64'",
    "build:windows-x64": "bash -c 'scripts/electron-builder.sh --windows --x64'",
    "start-electron": "electron ./dist/cncjs/main",
    "start-prod": "yarn build-prod && NODE_ENV=production ./bin/cncjs",
    "dev": "yarn run build-dev && concurrently --names \"start-app-dev,start-server-dev\" \"yarn run start-app-dev\" \"yarn run start-server-dev\"",
    "win-dev": "powershell -ExecutionPolicy Bypass -File scripts/build-dev.ps1 && concurrently --names \"start-app-dev,start-server-dev\" \"npm run start-app-dev\" \"npm run start-server-dev\"",
    "start-app-dev": "cross-env NODE_ENV=development webpack serve --progress --config webpack.config.development.js",
    "start-server-dev": "cross-env NODE_ENV=development ./bin/cncjs --port 8000 -m /widget:https://cncjs.github.io/cncjs-widget-boilerplate/v1/",
    "lint": "concurrently --kill-others-on-fail --names \"i18nlint,eslint,stylint\" \"yarn i18nlint\" \"yarn eslint\" \"yarn stylint\"",
    "eslint": "eslint --color src/**/*.js src/app/**/*.jsx scripts/**/*.js",
    "eslint-debug": "cross-env DEBUG=\"eslint:glob-util,eslint:config-*,eslint:cli*\" eslint --cache --color --quiet src/**/*.js src/app/**/*.jsx scripts/**/*.js",
    "i18nlint": "bash -c 'find src/{app,server}/i18n -type f -name \"*.json\" | xargs -L1 -I{} -- bash -c \"echo Linting {}; jsonlint -q {}\"'",
    "stylint": "stylint src/app",
    "test": "jest",
    "postinstall": "opencollective postinstall",
    "ci-dispatch": "gh workflow run ci.yml --repo cncjs/cncjs --ref",
    "ci-version": "changeset version && node scripts/package-sync.js && yarn install --mode=update-lockfile",
    "ci-publish": "yarn build && changeset publish"
  },
  "build": {
    "appId": "org.cncjs",
    "asar": false,
    "asarUnpack": [],
    "productName": "CNCjs",
    "directories": {
      "buildResources": "electron-build",
      "output": "output",
      "app": "dist/cncjs"
    },
    "publish": [],
    "mac": {
      "category": "public.app-category.productivity",
      "target": [
        "dmg"
      ],
      "icon": "electron-build/icon.icns"
    },
    "dmg": {
      "background": "electron-build/background.png",
      "icon": "electron-build/icon.icns",
      "iconSize": 80,
      "iconTextSize": 12,
      "contents": [
        {
          "x": 448,
          "y": 344,
          "type": "link",
          "path": "/Applications"
        },
        {
          "x": 192,
          "y": 344,
          "type": "file"
        }
      ]
    },
    "win": {
      "target": [
        "nsis"
      ],
      "icon": "electron-build/icon.ico"
    },
    "linux": {
      "category": "Utility",
      "target": [
        "AppImage",
        "deb",
        "rpm"
      ]
    }
  },
  "keywords": [
    "cncjs",
    "arduino",
    "raspberry",
    "pi",
    "cnc",
    "gcode",
    "grbl",
    "smoothie",
    "smoothieware",
    "tinyg",
    "g2core",
    "react",
    "socket.io"
  ],
  "dependencies": {
    "@serialport/parser-readline": "^10.0.0",
    "@trendmicro/react-anchor": "~0.5.6",
    "@trendmicro/react-breadcrumbs": "~0.5.5",
    "@trendmicro/react-buttons": "~1.3.1",
    "@trendmicro/react-checkbox": "~3.4.1",
    "@trendmicro/react-datepicker": "~1.0.0-alpha.6",
    "@trendmicro/react-dropdown": "~1.3.0",
    "@trendmicro/react-form-control": "~0.1.0",
    "@trendmicro/react-grid-system": "~0.2.0",
    "@trendmicro/react-iframe": "~0.3.1",
    "@trendmicro/react-interpolate": "~0.5.5",
    "@trendmicro/react-loader": "~0.6.1",
    "@trendmicro/react-modal": "~2.2.2",
    "@trendmicro/react-navs": "~0.11.6",
    "@trendmicro/react-notifications": "~1.0.1",
    "@trendmicro/react-paginations": "~0.6.1",
    "@trendmicro/react-popover": "~0.4.0",
    "@trendmicro/react-portal": "~0.4.3",
    "@trendmicro/react-radio": "~3.2.2",
    "@trendmicro/react-table": "~1.0.1-alpha.2",
    "@trendmicro/react-toggle-switch": "~0.5.7",
    "@trendmicro/react-tooltip": "~0.6.0",
    "@trendmicro/react-validation": "~0.1.0",
    "bcrypt-nodejs": "0.0.3",
    "body-parser": "~1.18.3",
    "bootstrap": "~3.3.7",
    "chained-function": "~0.5.0",
    "chalk": "~4.1.1",
    "classnames": "~2.2.6",
    "cncjs-controller": "~1.3.0",
    "colornames": "~1.1.1",
    "commander": "~9.1.0",
    "compression": "~1.7.4",
    "connect-multiparty": "~2.2.0",
    "connect-restreamer": "~1.0.3",
    "consolidate": "~0.15.1",
    "cookie-parser": "~1.4.4",
    "core-js": "~3.26.1",
    "debug": "~4.1.1",
    "deep-keys": "~0.5.0",
    "detect-browser": "~4.4.0",
    "electron-store": "~8.1.0",
    "ensure-type": "^1.5.1",
    "errorhandler": "~1.5.0",
    "escodegen": "~1.11.1",
    "esprima": "~4.0.1",
    "expand-tilde": "~2.0.2",
    "expr-eval": "~1.2.2",
    "express": "~4.16.4",
    "express-jwt": "~5.3.1",
    "express-session": "~1.16.1",
    "final-form": "~4.12.0",
    "font-awesome": "~4.7.0",
    "frac": "~1.1.2",
    "gcode-interpreter": "^3.0.0",
    "gcode-parser": "^2.2.0",
    "gcode-toolpath": "^3.0.0",
    "history": "~4.9.0",
    "hogan.js": "~3.0.2",
    "http-proxy": "~1.18.1",
    "i18next": "~25.8.17",
    "i18next-browser-languagedetector": "~8.2.1",
    "i18next-express-middleware": "~1.8.0",
    "i18next-fs-backend": "~2.6.6",
    "i18next-http-backend": "~3.0.2",
    "i18next-http-middleware": "~3.9.2",
    "i18next-node-fs-backend": "~2.1.3",
    "infinite-tree": "~1.16.2",
    "is-electron": "~2.2.1",
    "jimp": "^0.10.3",
    "js-polyfills": "~0.1.42",
    "jsonwebtoken": "~9.0.0",
    "jsuri": "~1.3.1",
    "keycode": "~2.2.0",
    "lodash": "~4.17.11",
    "memoize-one": "~5.0.4",
    "method-override": "~3.0.0",
    "minimatch": "~3.1.4",
    "mkdirp": "~0.5.1",
    "moment": "~2.24.0",
    "morgan": "~1.9.1",
    "mousetrap": "~1.6.3",
    "namespace-constants": "~0.5.0",
    "normalize.css": "~8.0.1",
    "opencollective": "~1.0.3",
    "perfect-scrollbar": "~1.4.0",
    "prop-types": "~15.7.2",
    "pubsub-js": "~1.7.0",
    "push.js": "~1.0.9",
    "qs": "~6.7.0",
    "range_check": "~1.4.0",
    "rc-slider": "~8.6.9",
    "react": "~15.6.2",
    "react-bootstrap": "~0.32.1",
    "react-dom": "~15.6.2",
    "react-dropzone": "~4.2.13",
    "react-facebook-loading": "~0.6.2",
    "react-final-form": "~3.7.0",
    "react-foreach": "~0.1.1",
    "react-ga4": "^2.1.0",
    "react-i18next": "^8.0.0",
    "react-icon-base": "~2.1.2",
    "react-infinite-tree": "~0.7.1",
    "react-redux": "~5.0.7",
    "react-repeatable": "~1.1.1",
    "react-router": "~4.3.1",
    "react-router-dom": "~4.3.1",
    "react-router-redux": "~5.0.0-alpha.6",
    "react-select": "~1.2.1",
    "react-sortablejs": "~1.5.1",
    "react-tiny-virtual-list": "~2.2.0",
    "react-toggle": "~4.0.2",
    "recompose": "~0.30.0",
    "redux": "~4.0.1",
    "regenerator-runtime": "~0.13.10",
    "registry-auth-token": "~3.4.0",
    "registry-url": "~5.1.0",
    "rimraf": "~2.6.3",
    "semver": "~6.0.0",
    "serialport": "^10.0.0",
    "serve-favicon": "~2.5.0",
    "serve-static": "~1.13.2",
    "session-file-store": "~1.2.0",
    "sha1": "~1.1.1",
    "shortid": "~2.2.14",
    "socket.io": "~2.2.0",
    "socket.io-client": "~2.2.0",
    "socketio-jwt": "~4.5.0",
    "sortablejs": "~1.9.0",
    "spawn-default-shell": "~2.0.0",
    "styled-components": "~3.4.9",
    "superagent": "~3.8.3",
    "superagent-use": "~0.1.0",
    "three": "~0.103.0",
    "universal-logger": "~1.0.1",
    "universal-logger-browser": "~1.0.2",
    "uuid": "~3.3.2",
    "watch": "~1.0.2",
    "webappengine": "~1.2.0",
    "winston": "~3.14.1",
    "xterm": "~3.0.2"
  },
  "devDependencies": {
    "@babel/cli": "^7.25.9",
    "@babel/core": "^7.26.0",
    "@babel/eslint-parser": "^7.25.9",
    "@babel/eslint-plugin": "^7.25.9",
    "@babel/node": "^7.26.0",
    "@babel/plugin-transform-runtime": "^7.25.9",
    "@babel/preset-env": "^7.28.6",
    "@babel/preset-react": "^7.25.9",
    "@babel/register": "^7.25.9",
    "@changesets/cli": "^2.31.0",
    "@electron/rebuild": "^3.7.2",
    "@pmmmwh/react-refresh-webpack-plugin": "^0.5.15",
    "babel-core": "~7.0.0-bridge.0",
    "babel-eslint": "~10.0.1",
    "babel-loader": "~8.0.5",
    "babel-plugin-lodash": "~3.3.4",
    "boolean": "~1.0.0",
    "bundle-loader": "~0.5.6",
    "concurrently": "~4.1.0",
    "coveralls": "~3.0.3",
    "cross-env": "~5.2.0",
    "crypto-browserify": "^3.12.0",
    "css-loader": "~3.0.0",
    "del-cli": "~3.0.1",
    "dotenv": "~7.0.0",
    "electron": "~22.0.3",
    "electron-builder": "~23.6.0",
    "eslint": "^8.0.0",
    "eslint-config-trendmicro": "^3.2.0",
    "eslint-import-resolver-node": "^0.3.9",
    "eslint-import-resolver-webpack": "^0.13.9",
    "eslint-plugin-import": "^2.31.0",
    "eslint-plugin-jest": "^28.8.3",
    "eslint-plugin-jsx-a11y": "^6.10.2",
    "eslint-plugin-react": "^7.37.2",
    "eslint-webpack-plugin": "^4.2.0",
    "eventsource-polyfill": "~0.9.6",
    "file-loader": "~6.2.0",
    "find-imports": "~1.1.0",
    "github-release-cli": "~2.0.0",
    "glob": "~7.1.3",
    "html-webpack-plugin": "~5.6.0",
    "i18next-scanner": "~4.6.0",
    "imports-loader": "~0.8.0",
    "jest": "^30.2.0",
    "json-loader": "~0.5.7",
    "jsonlint": "^1.6.3",
    "mini-css-extract-plugin": "~2.9.0",
    "nib": "~1.2.0",
    "path-browserify": "^1.0.1",
    "pre-push": "~0.1.1",
    "progress": "~2.0.3",
    "react-refresh": "^0.14.2",
    "redux-devtools": "~3.5.0",
    "run-sequence": "~2.2.1",
    "stream-browserify": "^3.0.0",
    "style-loader": "~0.23.1",
    "stylint": "~1.5.9",
    "stylint-loader": "~1.0.0",
    "stylus": "~0.63.0",
    "stylus-loader": "~8.1.0",
    "text-table": "~0.2.0",
    "timers-browserify": "^2.0.12",
    "transform-loader": "~0.2.4",
    "url-loader": "~4.1.1",
    "webpack": "~5.94.0",
    "webpack-cli": "^5.1.4",
    "webpack-dev-server": "^5.1.0",
    "webpack-node-externals": "~1.7.2"
  },
  "jest": {
    "transform": {
      "^.+\\.js$": [
        "babel-jest",
        {
          "configFile": false,
          "presets": [
            [
              "@babel/preset-env",
              {
                "targets": {
                  "node": "current"
                }
              }
            ]
          ]
        }
      ]
    },
    "clearMocks": true,
    "collectCoverage": true,
    "collectCoverageFrom": [
      "<rootDir>/src/server/**/*.js",
      "!<rootDir>/src/server/**/*.test.js",
      "!<rootDir>/src/server/**/__tests__/**"
    ],
    "coverageReporters": [
      "lcov",
      "text",
      "html"
    ],
    "modulePathIgnorePatterns": [
      "<rootDir>/build"
    ],
    "setupFiles": [],
    "setupFilesAfterEnv": [
      "<rootDir>/jest-setup.js"
    ],
    "snapshotSerializers": [],
    "testEnvironment": "node",
    "testMatch": [
      "<rootDir>/src/server/**/__tests__/**/*.test.js",
      "<rootDir>/grbl-simulator/__tests__/**/*.test.js"
    ],
    "testPathIgnorePatterns": [
      "/node_modules/"
    ],
    "testTimeout": 10000
  },
  "pre-push": [
    "eslint-debug"
  ],
  "collective": {
    "type": "opencollective",
    "url": "https://opencollective.com/cncjs"
  }
}