diff --git a/bin/cnc b/bin/cnc index 87292b891..06bc4e033 100755 --- a/bin/cnc +++ b/bin/cnc @@ -1,15 +1,13 @@ #!/usr/bin/env node -require('@babel/polyfill'); - const chalk = require('chalk'); console.warn(chalk.yellow('Warning: The "cnc" executable is deprecated and will be removed in the next major release. Use "cncjs" instead to avoid deprecation.\n')); const launchServer = (process.env.NODE_ENV === 'development') - ? require('../output/server-cli').default - : require('../dist/cncjs/server-cli').default; + ? require('../output/cncjs/server-cli') + : require('../dist/cncjs/server-cli'); launchServer().catch(err => { - console.error('Error:', err); + console.error('Error:', err); }); diff --git a/bin/cncjs b/bin/cncjs index 02a39e53a..40134447c 100755 --- a/bin/cncjs +++ b/bin/cncjs @@ -1,11 +1,9 @@ #!/usr/bin/env node -require('@babel/polyfill'); - const launchServer = (process.env.NODE_ENV === 'development') - ? require('../output/cncjs/server-cli').default - : require('../dist/cncjs/server-cli').default; + ? require('../output/cncjs/server-cli') + : require('../dist/cncjs/server-cli'); launchServer().catch(err => { - console.error('Error:', err); + console.error('Error:', err); }); diff --git a/package.json b/package.json index 9e982c296..a59baf4ef 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "cncjs", - "version": "1.10.0", + "version": "1.10.1", "description": "A web-based interface for CNC milling controller running Grbl, Marlin, Smoothieware, or TinyG", "homepage": "https://github.com/cncjs/cncjs", "author": "Cheton Wu ", @@ -160,12 +160,13 @@ "cli-color": "~1.4.0", "cncjs-controller": "~1.3.0", "colornames": "~1.1.1", - "commander": "~2.20.0", + "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", @@ -196,7 +197,7 @@ "i18next-node-fs-backend": "~2.1.3", "i18next-xhr-backend": "~2.0.1", "infinite-tree": "~1.16.2", - "is-electron": "~2.2.0", + "is-electron": "~2.2.1", "jimp": "^0.10.3", "js-polyfills": "~0.1.42", "jsonwebtoken": "~8.5.1", @@ -242,6 +243,7 @@ "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", diff --git a/scripts/package-sync.js b/scripts/package-sync.js index 3d0c24a1c..35ac6876f 100755 --- a/scripts/package-sync.js +++ b/scripts/package-sync.js @@ -1,9 +1,10 @@ #!/usr/bin/env node /* eslint max-len: 0 */ -const _ = require('lodash'); const fs = require('fs'); const path = require('path'); +const _pick = require('lodash/pick'); +const _uniq = require('lodash/uniq'); const findImports = require('find-imports'); // Copy necessary properties from 'package.json' to 'src/package.json' @@ -14,11 +15,20 @@ const files = [ 'src/*.js', 'src/server/**/*.{js,jsx}' ]; -const deps = [ + +const resolvedImports = findImports(files, { + flatten: true, +}); + +const deps = _uniq([ '@serialport/parser-readline', - '@babel/runtime', // 'babel-runtime' is required for electron app - 'debug' // 'debug' is required for electron app -].concat(findImports(files, { flatten: true })).sort(); + 'core-js', // to polyfill ECMAScript features + 'regenerator-runtime', // needed to use transpiled generator functions + 'debug', // 'debug' is required for electron app + + // e.g. 'lodash/get' → 'lodash' + ...resolvedImports.map(x => x.split('/')[0]), +]).sort(); //pkgApp.name = pkg.name; // Exclude the name field pkgApp.version = pkg.version; @@ -28,7 +38,7 @@ pkgApp.license = pkg.license; pkgApp.repository = pkg.repository; // Copy only Node.js dependencies to application package.json -pkgApp.dependencies = _.pick(pkg.dependencies, deps); +pkgApp.dependencies = _pick(pkg.dependencies, deps); const target = path.resolve(__dirname, '../src/package.json'); const content = JSON.stringify(pkgApp, null, 2); diff --git a/src/package.json b/src/package.json index e61a93328..16626bb74 100644 --- a/src/package.json +++ b/src/package.json @@ -1,6 +1,6 @@ { "name": "cncjs-app", - "version": "1.10.0", + "version": "1.10.1", "productName": "CNCjs", "description": "CNC Milling Controller", "homepage": "https://github.com/cncjs/cncjs", @@ -12,17 +12,17 @@ }, "main": "main.js", "dependencies": { - "@babel/runtime": "~7.4.3", "@serialport/parser-readline": "^10.0.0", "bcrypt-nodejs": "0.0.3", "body-parser": "~1.18.3", "chalk": "~2.4.2", - "commander": "~2.20.0", + "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", "electron-store": "~8.1.0", @@ -41,13 +41,15 @@ "i18next": "~15.0.9", "i18next-express-middleware": "~1.8.0", "i18next-node-fs-backend": "~2.1.3", - "is-electron": "~2.2.0", + "is-electron": "~2.2.1", "jsonwebtoken": "~8.5.1", + "lodash": "~4.17.11", "method-override": "~3.0.0", "minimatch": "~3.0.4", "mkdirp": "~0.5.1", "morgan": "~1.9.1", "range_check": "~1.4.0", + "regenerator-runtime": "~0.13.10", "registry-auth-token": "~3.4.0", "registry-url": "~5.1.0", "rimraf": "~2.6.3", diff --git a/src/server-cli.js b/src/server-cli.js index 2a8e908a9..8d85921a8 100644 --- a/src/server-cli.js +++ b/src/server-cli.js @@ -1,9 +1,12 @@ -/* eslint max-len: 0 */ +/* eslint-disable no-console */ /* eslint no-console: 0 */ -import path from 'path'; -import isElectron from 'is-electron'; -import program from 'commander'; -import pkg from './package.json'; +require('core-js/stable'); // to polyfill ECMAScript features +require('regenerator-runtime/runtime'); // needed to use transpiled generator functions + +const path = require('path'); +const isElectron = require('is-electron'); +const program = require('commander'); +const pkg = require('./package.json'); // Defaults to 'production' process.env.NODE_ENV = process.env.NODE_ENV || 'production'; @@ -51,7 +54,7 @@ const defaultHost = isElectron() ? '127.0.0.1' : '0.0.0.0'; const defaultPort = isElectron() ? 0 : 8000; program - .version(pkg.version) + .version(pkg.version, '--version', 'output the current version') .usage('[options]') .option('-p, --port ', `Set listen port (default: ${defaultPort})`, defaultPort) .option('-H, --host ', `Set listen address or hostname (default: ${defaultHost})`, defaultHost) @@ -88,21 +91,23 @@ if (normalizedArgv.length > 1) { program.parse(normalizedArgv); } -export default () => new Promise((resolve, reject) => { +const options = program.opts(); + +module.exports = () => new Promise((resolve, reject) => { // Change working directory to 'server' before require('./server') process.chdir(path.resolve(__dirname, 'server')); require('./server').createServer({ - port: program.port, - host: program.host, - backlog: program.backlog, - configFile: program.config, - verbosity: program.verbose, - mountPoints: program.mount, - watchDirectory: program.watchDirectory, - accessTokenLifetime: program.accessTokenLifetime, - allowRemoteAccess: !!program.allowRemoteAccess, - controller: program.controller + port: options.port, + host: options.host, + backlog: options.backlog, + configFile: options.config, + verbosity: options.verbose, + mountPoints: options.mount, + watchDirectory: options.watchDirectory, + accessTokenLifetime: options.accessTokenLifetime, + allowRemoteAccess: !!options.allowRemoteAccess, + controller: options.controller }, (err, data) => { if (err) { reject(err); diff --git a/yarn.lock b/yarn.lock index 9bae8c03a..c24b42293 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3488,11 +3488,11 @@ __metadata: linkType: hard "acorn@npm:^8.5.0": - version: 8.8.1 - resolution: "acorn@npm:8.8.1" + version: 8.8.2 + resolution: "acorn@npm:8.8.2" bin: acorn: bin/acorn - checksum: 4079b67283b94935157698831967642f24a075c52ce3feaaaafe095776dfbe15d86a1b33b1e53860fc0d062ed6c83f4284a5c87c85b9ad51853a01173da6097f + checksum: f790b99a1bf63ef160c967e23c46feea7787e531292bb827126334612c234ed489a0dc2c7ba33156416f0ffa8d25bf2b0fdb7f35c2ba60eb3e960572bece4001 languageName: node linkType: hard @@ -5247,9 +5247,9 @@ __metadata: linkType: hard "caniuse-lite@npm:^1.0.0, caniuse-lite@npm:^1.0.30001400": - version: 1.0.30001446 - resolution: "caniuse-lite@npm:1.0.30001446" - checksum: b31a7e1837783afd7f3d4cb742689996c0a09d67394ddaa0609fd2bce00ceea65c448e25f91c03ba0f2d0e345b7e28fd5bc636c6760c949621a654c0effe74b5 + version: 1.0.30001448 + resolution: "caniuse-lite@npm:1.0.30001448" + checksum: 8d8bb7d097a9c80c01a4f8e3e1819cc7fc218114c8cc8773fe35aef898d12ff4e668b132a661a221ab56c022981c1df708fbe8efa09a3ce21dff97eee483cf90 languageName: node linkType: hard @@ -5720,13 +5720,14 @@ __metadata: cli-color: ~1.4.0 cncjs-controller: ~1.3.0 colornames: ~1.1.1 - commander: ~2.20.0 + commander: ~9.1.0 compression: ~1.7.4 concurrently: ~4.1.0 connect-multiparty: ~2.2.0 connect-restreamer: ~1.0.3 consolidate: ~0.15.1 cookie-parser: ~1.4.4 + core-js: ~3.26.1 coveralls: ~3.0.3 cross-env: ~5.2.0 css-loader: ~2.1.1 @@ -5781,7 +5782,7 @@ __metadata: i18next-xhr-backend: ~2.0.1 imports-loader: ~0.8.0 infinite-tree: ~1.16.2 - is-electron: ~2.2.0 + is-electron: ~2.2.1 jimp: ^0.10.3 js-polyfills: ~0.1.42 json-loader: ~0.5.7 @@ -5836,6 +5837,7 @@ __metadata: recompose: ~0.30.0 redux: ~4.0.1 redux-devtools: ~3.5.0 + regenerator-runtime: ~0.13.10 registry-auth-token: ~3.4.0 registry-url: ~5.1.0 rimraf: ~2.6.3 @@ -6035,7 +6037,7 @@ __metadata: languageName: node linkType: hard -"commander@npm:^2.11.0, commander@npm:^2.19.0, commander@npm:^2.20.0, commander@npm:^2.8.1, commander@npm:~2.20.0": +"commander@npm:^2.11.0, commander@npm:^2.19.0, commander@npm:^2.20.0, commander@npm:^2.8.1": version: 2.20.3 resolution: "commander@npm:2.20.3" checksum: ab8c07884e42c3a8dbc5dd9592c606176c7eb5c1ca5ff274bcf907039b2c41de3626f684ea75ccf4d361ba004bbaff1f577d5384c155f3871e456bdf27becf9e @@ -6070,6 +6072,13 @@ __metadata: languageName: node linkType: hard +"commander@npm:~9.1.0": + version: 9.1.0 + resolution: "commander@npm:9.1.0" + checksum: 1428319b6b90600a813c28fe1e413996d1be99bf01afe9ebc4a9fc6f8077ff3e75f11809b2d2f85bd9b13d7cb592154278e9bbfdb16dc5843cef97bcba6a9cfd + languageName: node + linkType: hard + "commondir@npm:^1.0.1": version: 1.0.1 resolution: "commondir@npm:1.0.1" @@ -6450,6 +6459,13 @@ __metadata: languageName: node linkType: hard +"core-js@npm:~3.26.1": + version: 3.26.1 + resolution: "core-js@npm:3.26.1" + checksum: 0a01149f51ff1e9f41d1ea49cc4c9222047949ea597189ede7c4cf8cde3b097766b9c7615acc77c86fe65b4002f20b638a133dfba7b41dba830d707aeeed45ad + languageName: node + linkType: hard + "core-util-is@npm:1.0.2": version: 1.0.2 resolution: "core-util-is@npm:1.0.2" @@ -11492,7 +11508,7 @@ __metadata: languageName: node linkType: hard -"is-electron@npm:~2.2.0": +"is-electron@npm:~2.2.1": version: 2.2.1 resolution: "is-electron@npm:2.2.1" checksum: 06e569aa933a737d418489bb9ca081af62eceb714d4c3d553ad2497610e35494be6dddd010c4e29890c7dd9d0481c2e3e1e9097af9d19df1c52dd5be747d80a0 @@ -16961,7 +16977,7 @@ __metadata: languageName: node linkType: hard -"regenerator-runtime@npm:^0.13.11, regenerator-runtime@npm:^0.13.2, regenerator-runtime@npm:^0.13.3, regenerator-runtime@npm:^0.13.4": +"regenerator-runtime@npm:^0.13.11, regenerator-runtime@npm:^0.13.2, regenerator-runtime@npm:^0.13.3, regenerator-runtime@npm:^0.13.4, regenerator-runtime@npm:~0.13.10": version: 0.13.11 resolution: "regenerator-runtime@npm:0.13.11" checksum: 27481628d22a1c4e3ff551096a683b424242a216fee44685467307f14d58020af1e19660bf2e26064de946bad7eff28950eae9f8209d55723e2d9351e632bbb4 @@ -19771,9 +19787,9 @@ __metadata: linkType: hard "ua-parser-js@npm:^0.7.30": - version: 0.7.32 - resolution: "ua-parser-js@npm:0.7.32" - checksum: 6b6b035dd78a0ab3369f166ab6f26225d823d83630788806d634f16259297a8f4ae6fe0be4e48f4353ac10dffded3971d7745c55d1432fdfc78a893ba58ef044 + version: 0.7.33 + resolution: "ua-parser-js@npm:0.7.33" + checksum: 1510e9ec26fcaf0d8c6ae8f1078a8230e8816f083e1b5f453ea19d06b8ef2b8a596601c92148fd41899e8b3e5f83fa69c42332bd5729b931a721040339831696 languageName: node linkType: hard