UNPKG

serialport-v5

Version:

fork with electron support of Node.js package to access serial ports. Linux, OSX and Windows. Welcome your robotic JavaScript overlords. Better yet, program them!

195 lines (165 loc) 4.36 kB
"use strict"; /** * Module exports. */ module.exports = exports; /** * Module dependencies. */ var path = require('path'); var nopt = require('nopt'); var log = require('npmlog'); log.disableProgress(); var EE = require('events').EventEmitter; var inherits = require('util').inherits; var commands = [ 'clean', 'install', 'reinstall', 'build', 'rebuild', 'package', 'testpackage', 'publish', 'unpublish', 'info', 'testbinary', 'reveal', 'configure' ]; var aliases = {}; // differentiate node-pre-gyp's logs from npm's log.heading = 'node-pre-gyp'; exports.find = require('./pre-binding').find; function Run() { var self = this; this.commands = {}; commands.forEach(function (command) { self.commands[command] = function (argv, callback) { log.verbose('command', command, argv); return require('./' + command)(self, argv, callback); }; }); } inherits(Run, EE); exports.Run = Run; var proto = Run.prototype; /** * Export the contents of the package.json. */ proto.package = require('../package.json'); /** * nopt configuration definitions */ proto.configDefs = { help: Boolean, // everywhere arch: String, // 'configure' debug: Boolean, // 'build' directory: String, // bin proxy: String, // 'install' loglevel: String, // everywhere }; /** * nopt shorthands */ proto.shorthands = { release: '--no-debug', C: '--directory', debug: '--debug', j: '--jobs', silent: '--loglevel=silent', silly: '--loglevel=silly', verbose: '--loglevel=verbose', }; /** * expose the command aliases for the bin file to use. */ proto.aliases = aliases; /** * Parses the given argv array and sets the 'opts', * 'argv' and 'command' properties. */ proto.parseArgv = function parseOpts (argv) { this.opts = nopt(this.configDefs, this.shorthands, argv); this.argv = this.opts.argv.remain.slice(); var commands = this.todo = []; // create a copy of the argv array with aliases mapped argv = this.argv.map(function (arg) { // is this an alias? if (arg in this.aliases) { arg = this.aliases[arg]; } return arg; }, this); // process the mapped args into "command" objects ("name" and "args" props) argv.slice().forEach(function (arg) { if (arg in this.commands) { var args = argv.splice(0, argv.indexOf(arg)); argv.shift(); if (commands.length > 0) { commands[commands.length - 1].args = args; } commands.push({ name: arg, args: [] }); } }, this); if (commands.length > 0) { commands[commands.length - 1].args = argv.splice(0); } // support for inheriting config env variables from npm var npm_config_prefix = 'npm_config_'; Object.keys(process.env).forEach(function (name) { if (name.indexOf(npm_config_prefix) !== 0) return; var val = process.env[name]; if (name === npm_config_prefix + 'loglevel') { log.level = val; } else { // add the user-defined options to the config name = name.substring(npm_config_prefix.length); // avoid npm argv clobber already present args // which avoids problem of 'npm test' calling // script that runs unique npm install commands if (name === 'argv') { if (this.opts.argv && this.opts.argv.remain && this.opts.argv.remain.length) { // do nothing } else { this.opts[name] = val; } } else { this.opts[name] = val; } } }, this); if (this.opts.loglevel) { log.level = this.opts.loglevel; } log.resume(); }; /** * Returns the usage instructions for node-pre-gyp. */ proto.usage = function usage () { var str = [ '', ' Usage: node-pre-gyp <command> [options]', '', ' where <command> is one of:', commands.map(function (c) { return ' - ' + c + ' - ' + require('./' + c).usage; }).join('\n'), '', 'node-pre-gyp@' + this.version + ' ' + path.resolve(__dirname, '..'), 'node@' + process.versions.node ].join('\n'); return str; }; /** * Version number getter. */ Object.defineProperty(proto, 'version', { get: function () { return this.package.version; }, enumerable: true });