Socket
Socket
Sign inDemoInstall

nopt

Package Overview
Dependencies
4
Maintainers
3
Versions
34
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

Comparing version 3.0.6 to 4.0.0

CHANGELOG.md

79

lib/nopt.js

@@ -11,2 +11,3 @@ // info about each config option.

, abbrev = require("abbrev")
, osenv = require("osenv")

@@ -37,10 +38,12 @@ module.exports = exports = nopt

, key
, remain = []
, cooked = args
, original = args.slice(0)
, argv = {
remain: [],
cooked: args,
original: args.slice(0)
}
parse(args, data, remain, types, shorthands)
parse(args, data, argv.remain, types, shorthands)
// now data is full
clean(data, types, exports.typeDefs)
data.argv = {remain:remain,cooked:cooked,original:original}
data.argv = argv
Object.defineProperty(data.argv, 'toString', { value: function () {

@@ -134,7 +137,12 @@ return this.original.map(JSON.stringify).join(" ")

val = String(val)
var homePattern = process.platform === 'win32' ? /^~(\/|\\)/ : /^~\//
if (val.match(homePattern) && process.env.HOME) {
val = path.resolve(process.env.HOME, val.substr(2))
var isWin = process.platform === 'win32'
, homePattern = isWin ? /^~(\/|\\)/ : /^~\//
, home = osenv.home()
if (home && val.match(homePattern)) {
data[k] = path.resolve(home, val.substr(2))
} else {
data[k] = path.resolve(val)
}
data[k] = path.resolve(String(val))
return true

@@ -150,4 +158,4 @@ }

function validateDate (data, k, val) {
debug("validate Date %j %j %j", k, val, Date.parse(val))
var s = Date.parse(val)
debug("validate Date %j %j %j", k, val, s)
if (isNaN(s)) return false

@@ -253,8 +261,8 @@ data[k] = new Date(val)

if (arg.charAt(0) === "-" && arg.length > 1) {
if (arg.indexOf("=") !== -1) {
var at = arg.indexOf('=')
if (at > -1) {
hadEq = true
var v = arg.split("=")
arg = v.shift()
v = v.join("=")
args.splice.apply(args, [i, 1].concat([arg, v]))
var v = arg.substr(at + 1)
arg = arg.substr(0, at)
args.splice(i, 1, arg, v)
}

@@ -283,5 +291,12 @@

var isArray = types[arg] === Array ||
Array.isArray(types[arg]) && types[arg].indexOf(Array) !== -1
var argType = types[arg]
var isTypeArray = Array.isArray(argType)
if (isTypeArray && argType.length === 1) {
isTypeArray = false
argType = argType[0]
}
var isArray = argType === Array ||
isTypeArray && argType.indexOf(Array) !== -1
// allow unknown things to be arrays if specified multiple times.

@@ -298,8 +313,8 @@ if (!types.hasOwnProperty(arg) && data.hasOwnProperty(arg)) {

var isBool = typeof no === 'boolean' ||
types[arg] === Boolean ||
Array.isArray(types[arg]) && types[arg].indexOf(Boolean) !== -1 ||
(typeof types[arg] === 'undefined' && !hadEq) ||
argType === Boolean ||
isTypeArray && argType.indexOf(Boolean) !== -1 ||
(typeof argType === 'undefined' && !hadEq) ||
(la === "false" &&
(types[arg] === null ||
Array.isArray(types[arg]) && ~types[arg].indexOf(null)))
(argType === null ||
isTypeArray && ~argType.indexOf(null)))

@@ -318,8 +333,8 @@ if (isBool) {

// also support "foo":[Boolean, "bar"] and "--foo bar"
if (Array.isArray(types[arg]) && la) {
if (~types[arg].indexOf(la)) {
if (isTypeArray && la) {
if (~argType.indexOf(la)) {
// an explicit type
val = la
i ++
} else if ( la === "null" && ~types[arg].indexOf(null) ) {
} else if ( la === "null" && ~argType.indexOf(null) ) {
// null allowed

@@ -330,7 +345,7 @@ val = null

!isNaN(la) &&
~types[arg].indexOf(Number) ) {
~argType.indexOf(Number) ) {
// number
val = +la
i ++
} else if ( !la.match(/^-[^-]/) && ~types[arg].indexOf(String) ) {
} else if ( !la.match(/^-[^-]/) && ~argType.indexOf(String) ) {
// string

@@ -348,4 +363,10 @@ val = la

if (types[arg] === String && la === undefined)
la = ""
if (argType === String) {
if (la === undefined) {
la = ""
} else if (la.match(/^-{1,2}[^-]+/)) {
la = ""
i --
}
}

@@ -352,0 +373,0 @@ if (la && la.match(/^-{2,}$/)) {

{
"name": "nopt",
"version": "3.0.6",
"version": "4.0.0",
"description": "Option parsing for Node, supporting types, shorthands, etc. Used by npm.",

@@ -17,7 +17,8 @@ "author": "Isaac Z. Schlueter <i@izs.me> (http://blog.izs.me/)",

"dependencies": {
"abbrev": "1"
"abbrev": "1",
"osenv": "^0.1.4"
},
"devDependencies": {
"tap": "^1.2.0"
"tap": "^8.0.1"
}
}

@@ -22,27 +22,28 @@ If you want to write an option parser, and have it be good, there are

// my-program.js
var nopt = require("nopt")
, Stream = require("stream").Stream
, path = require("path")
, knownOpts = { "foo" : [String, null]
, "bar" : [Stream, Number]
, "baz" : path
, "bloo" : [ "big", "medium", "small" ]
, "flag" : Boolean
, "pick" : Boolean
, "many1" : [String, Array]
, "many2" : [path]
}
, shortHands = { "foofoo" : ["--foo", "Mr. Foo"]
, "b7" : ["--bar", "7"]
, "m" : ["--bloo", "medium"]
, "p" : ["--pick"]
, "f" : ["--flag"]
}
// everything is optional.
// knownOpts and shorthands default to {}
// arg list defaults to process.argv
// slice defaults to 2
, parsed = nopt(knownOpts, shortHands, process.argv, 2)
console.log(parsed)
```javascript
// my-program.js
var nopt = require("nopt")
, Stream = require("stream").Stream
, path = require("path")
, knownOpts = { "foo" : [String, null]
, "bar" : [Stream, Number]
, "baz" : path
, "bloo" : [ "big", "medium", "small" ]
, "flag" : Boolean
, "pick" : Boolean
, "many1" : [String, Array]
, "many2" : [path, Array]
}
, shortHands = { "foofoo" : ["--foo", "Mr. Foo"]
, "b7" : ["--bar", "7"]
, "m" : ["--bloo", "medium"]
, "p" : ["--pick"]
, "f" : ["--flag"]
}
// everything is optional.
// knownOpts and shorthands default to {}
// arg list defaults to process.argv
// slice defaults to 2
, parsed = nopt(knownOpts, shortHands, process.argv, 2)
console.log(parsed)

@@ -49,0 +50,0 @@ This would give you support for any of the following:

var nopt = require("../")
, test = require('tap').test
, isWin = process.platform === 'win32'
test("passing a string results in a string", function (t) {

@@ -18,7 +18,37 @@ var parsed = nopt({ key: String }, {}, ["--key", "myvalue"], 0)

test("~ path is resolved to $HOME", function (t) {
// https://github.com/npm/nopt/issues/65
test("Empty String should not swallow next flag", function (t) {
var parsed = nopt({ empty: String, foo: String }, {}, ["--empty", "--foo"], 0)
t.same(parsed.empty, "")
t.same(parsed.foo, "")
t.end()
})
// https://github.com/npm/nopt/issues/66
test("Empty String should not be true when type is single item Array", function (t) {
var parsed = nopt({ 'foo': [String] }, {}, ["--foo"], 0)
t.same(parsed.foo, "")
t.end()
})
test("~ path is resolved to " + (isWin ? '%USERPROFILE%' : '$HOME'), function (t) {
var path = require("path")
if (!process.env.HOME) process.env.HOME = "/tmp"
var parsed = nopt({key: path}, {}, ["--key=~/val"], 0)
t.same(parsed.key, path.resolve(process.env.HOME, "val"))
, the
if (isWin) {
the = {
key: 'USERPROFILE',
dir: 'C:\\temp',
val: '~\\val'
}
} else {
the = {
key: 'HOME',
dir: '/tmp',
val: '~/val'
}
}
if (!process.env[the.key]) process.env[the.key] = v.dir
var parsed = nopt({key: path}, {}, ["--key=" + the.val], 0)
t.same(parsed.key, path.resolve(process.env[the.key], "val"))
t.end()

@@ -152,3 +182,3 @@ })

,["--logfd=10", {logfd:10}, []]
,["--tmp=/tmp -tar=gtar",{tmp:"/tmp",tar:"gtar"},[]]
,["--tmp=/tmp -tar=gtar", {tmp: isWin ? "C:\\tmp" : "/tmp",tar:"gtar"},[]]
,["--tmp=tmp -tar=gtar",

@@ -155,0 +185,0 @@ {tmp:path.resolve(process.cwd(), "tmp"),tar:"gtar"},[]]

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc