diff options
author | Rebecca Turner <me@re-becca.org> | 2017-04-12 21:47:49 -0700 |
---|---|---|
committer | Jeremiah Senkpiel <fishrock123@rocketmail.com> | 2017-04-25 10:52:01 -0400 |
commit | 00842604483e4c2e622dfdb3a97440e07646158f (patch) | |
tree | f3346902636a44b6037652523767636bf7e4f2c9 /deps/npm/node_modules/aproba | |
parent | 061c5da010e0d249379618382a499840d38247b8 (diff) | |
download | node-new-00842604483e4c2e622dfdb3a97440e07646158f.tar.gz |
deps: upgrade npm to 4.5.0
PR-URL: https://github.com/nodejs/node/pull/12480
Reviewed-By: Jeremiah Senkpiel <fishrock123@rocketmail.com>
Diffstat (limited to 'deps/npm/node_modules/aproba')
-rw-r--r-- | deps/npm/node_modules/aproba/README.md | 36 | ||||
-rw-r--r-- | deps/npm/node_modules/aproba/index.js | 101 | ||||
-rw-r--r-- | deps/npm/node_modules/aproba/package.json | 53 |
3 files changed, 130 insertions, 60 deletions
diff --git a/deps/npm/node_modules/aproba/README.md b/deps/npm/node_modules/aproba/README.md index 8246a9cc6e..a9d38222a7 100644 --- a/deps/npm/node_modules/aproba/README.md +++ b/deps/npm/node_modules/aproba/README.md @@ -29,7 +29,8 @@ N | typeof == number F | typeof == function O | typeof == object and not type A and not type E B | typeof == boolean -E | instanceof Error OR null +E | instanceof Error OR null **(special: see below)** +Z | == null Validation failures throw one of three exception types, distinguished by a `code` property of `EMISSINGARG`, `EINVALIDTYPE` or `ETOOMANYARGS`. @@ -37,8 +38,37 @@ Validation failures throw one of three exception types, distinguished by a If you pass in an invalid type then it will throw with a code of `EUNKNOWNTYPE`. -If an error argument is found and is not null then the remaining arguments -will not be validated. +If an **error** argument is found and is not null then the remaining +arguments are optional. That is, if you say `ESO` then that's like using a +non-magical `E` in: `E|ESO|ZSO`. + +### But I have optional arguments?! + +You can provide more than one signature by separating them with pipes `|`. +If any signature matches the arguments then they'll be considered valid. + +So for example, say you wanted to write a signature for +`fs.createWriteStream`. The docs for it describe it thusly: + +``` +fs.createWriteStream(path[, options]) +``` + +This would be a signature of `SO|S`. That is, a string and and object, or +just a string. + +Now, if you read the full `fs` docs, you'll see that actually path can ALSO +be a buffer. And options can be a string, that is: +``` +path <String> | <Buffer> +options <String> | <Object> +``` + +To reproduce this you have to fully enumerate all of the possible +combinations and that implies a signature of `SO|SS|OO|OS|S|O`. The +awkwardness is a feature: It reminds you of the complexity you're adding to +your API when you do this sort of thing. + ### Why this exists diff --git a/deps/npm/node_modules/aproba/index.js b/deps/npm/node_modules/aproba/index.js index bb5ac3cda6..bc6ed1f17b 100644 --- a/deps/npm/node_modules/aproba/index.js +++ b/deps/npm/node_modules/aproba/index.js @@ -1,36 +1,64 @@ 'use strict' function isArguments (thingy) { - return typeof thingy === 'object' && thingy.hasOwnProperty('callee') + return thingy != null && typeof thingy === 'object' && thingy.hasOwnProperty('callee') } var types = { - '*': ['any', function () { return true }], - A: ['array', function (thingy) { return Array.isArray(thingy) || isArguments(thingy) }], - S: ['string', function (thingy) { return typeof thingy === 'string' }], - N: ['number', function (thingy) { return typeof thingy === 'number' }], - F: ['function', function (thingy) { return typeof thingy === 'function' }], - O: ['object', function (thingy) { return typeof thingy === 'object' && !types.A[1](thingy) && !types.E[1](thingy) }], - B: ['boolean', function (thingy) { return typeof thingy === 'boolean' }], - E: ['error', function (thingy) { return thingy instanceof Error }] -} - -var validate = module.exports = function (schema, args) { - if (!schema) throw missingRequiredArg(0, 'schema') + '*': {label: 'any', check: function () { return true }}, + A: {label: 'array', check: function (thingy) { return Array.isArray(thingy) || isArguments(thingy) }}, + S: {label: 'string', check: function (thingy) { return typeof thingy === 'string' }}, + N: {label: 'number', check: function (thingy) { return typeof thingy === 'number' }}, + F: {label: 'function', check: function (thingy) { return typeof thingy === 'function' }}, + O: {label: 'object', check: function (thingy) { return typeof thingy === 'object' && thingy != null && !types.A.check(thingy) && !types.E.check(thingy) }}, + B: {label: 'boolean', check: function (thingy) { return typeof thingy === 'boolean' }}, + E: {label: 'error', check: function (thingy) { return thingy instanceof Error }}, + Z: {label: 'null', check: function (thingy) { return thingy == null }} +} + +var validate = module.exports = function (rawSchemas, args) { + if (arguments.length !== 2) throw wrongNumberOfArgs(['SA'], arguments.length) + if (!rawSchemas) throw missingRequiredArg(0, 'rawSchemas') if (!args) throw missingRequiredArg(1, 'args') - if (!types.S[1](schema)) throw invalidType(0, 'string', schema) - if (!types.A[1](args)) throw invalidType(1, 'array', args) - for (var ii = 0; ii < schema.length; ++ii) { - var type = schema[ii] - if (!types[type]) throw unknownType(ii, type) - var typeLabel = types[type][0] - var typeCheck = types[type][1] - if (type === 'E' && args[ii] == null) continue - if (args[ii] == null) throw missingRequiredArg(ii) - if (!typeCheck(args[ii])) throw invalidType(ii, typeLabel, args[ii]) - if (type === 'E') return + if (!types.S.check(rawSchemas)) throw invalidType(0, ['string'], rawSchemas) + if (!types.A.check(args)) throw invalidType(1, ['array'], args) + var schemas = rawSchemas.split('|') + var arity = {} + function addSchema (schema) { + var group = arity[schema.length] = arity[schema.length] || [] + if (group.indexOf(schema) === -1) group.push(schema) + } + schemas.forEach(function (schema) { + for (var ii = 0; ii < schema.length; ++ii) { + var type = schema[ii] + if (!types[type]) throw unknownType(ii, type) + } + if (/E.*E/.test(schema)) throw moreThanOneError(schema) + addSchema(schema) + if (/E/.test(schema)) { + addSchema(schema.replace(/E.*$/, 'E')) + addSchema(schema.replace(/E/, 'Z')) + if (schema.length === 1) addSchema('') + } + }) + var matching = arity[args.length] + if (!matching) { + throw wrongNumberOfArgs(Object.keys(arity), args.length) + } + for (var ii = 0; ii < args.length; ++ii) { + var newMatching = matching.filter(function (schema) { + var type = schema[ii] + var typeCheck = types[type].check + return typeCheck(args[ii]) + }) + if (!newMatching.length) { + var labels = matching.map(function (schema) { + return types[schema[ii]].label + }).filter(function (schema) { return schema != null }) + throw invalidType(ii, labels, args[ii]) + } + matching = newMatching } - if (schema.length < args.length) throw tooManyArgs(schema.length, args.length) } function missingRequiredArg (num) { @@ -41,17 +69,30 @@ function unknownType (num, type) { return newException('EUNKNOWNTYPE', 'Unknown type ' + type + ' in argument #' + (num + 1)) } -function invalidType (num, expectedType, value) { +function invalidType (num, expectedTypes, value) { var valueType Object.keys(types).forEach(function (typeCode) { - if (types[typeCode][1](value)) valueType = types[typeCode][0] + if (types[typeCode].check(value)) valueType = types[typeCode].label }) return newException('EINVALIDTYPE', 'Argument #' + (num + 1) + ': Expected ' + - expectedType + ' but got ' + valueType) + englishList(expectedTypes) + ' but got ' + valueType) +} + +function englishList (list) { + return list.join(', ').replace(/, ([^,]+)$/, ' or $1') +} + +function wrongNumberOfArgs (expected, got) { + var english = englishList(expected) + var args = expected.every(function (ex) { return ex.length === 1 }) + ? 'argument' + : 'arguments' + return newException('EWRONGARGCOUNT', 'Expected ' + english + ' ' + args + ' but got ' + got) } -function tooManyArgs (expected, got) { - return newException('ETOOMANYARGS', 'Too many arguments, expected ' + expected + ' and got ' + got) +function moreThanOneError (schema) { + return newException('ETOOMANYERRORTYPES', + 'Only one error type per argument signature is allowed, more than one found in "' + schema + '"') } function newException (code, msg) { diff --git a/deps/npm/node_modules/aproba/package.json b/deps/npm/node_modules/aproba/package.json index b5e08a31c1..dfe2377542 100644 --- a/deps/npm/node_modules/aproba/package.json +++ b/deps/npm/node_modules/aproba/package.json @@ -2,52 +2,51 @@ "_args": [ [ { - "raw": "aproba@~1.0.3", + "raw": "aproba@latest", "scope": null, "escapedName": "aproba", "name": "aproba", - "rawSpec": "~1.0.3", - "spec": ">=1.0.3 <1.1.0", - "type": "range" + "rawSpec": "latest", + "spec": "latest", + "type": "tag" }, - "/Users/rebecca/code/npm" + "/Users/zkat/Documents/code/npm" ] ], - "_from": "aproba@>=1.0.3 <1.1.0", - "_id": "aproba@1.0.4", + "_from": "aproba@latest", + "_id": "aproba@1.1.1", "_inCache": true, - "_installable": true, "_location": "/aproba", - "_nodeVersion": "4.4.0", + "_nodeVersion": "7.5.0", "_npmOperationalInternal": { - "host": "packages-12-west.internal.npmjs.com", - "tmp": "tmp/aproba-1.0.4.tgz_1466718885402_0.5348939662799239" + "host": "packages-18-east.internal.npmjs.com", + "tmp": "tmp/aproba-1.1.1.tgz_1486593129508_0.5718816472217441" }, "_npmUser": { "name": "iarna", "email": "me@re-becca.org" }, - "_npmVersion": "3.10.2", + "_npmVersion": "4.2.0", "_phantomChildren": {}, "_requested": { - "raw": "aproba@~1.0.3", + "raw": "aproba@latest", "scope": null, "escapedName": "aproba", "name": "aproba", - "rawSpec": "~1.0.3", - "spec": ">=1.0.3 <1.1.0", - "type": "range" + "rawSpec": "latest", + "spec": "latest", + "type": "tag" }, "_requiredBy": [ "#USER", "/", "/npmlog/gauge" ], - "_resolved": "https://registry.npmjs.org/aproba/-/aproba-1.0.4.tgz", - "_shasum": "2713680775e7614c8ba186c065d4e2e52d1072c0", + "_resolved": "https://registry.npmjs.org/aproba/-/aproba-1.1.1.tgz", + "_shasum": "95d3600f07710aa0e9298c726ad5ecf2eacbabab", "_shrinkwrap": null, - "_spec": "aproba@~1.0.3", - "_where": "/Users/rebecca/code/npm", + "_spec": "aproba@latest", + "_where": "/Users/zkat/Documents/code/npm", "author": { "name": "Rebecca Turner", "email": "me@re-becca.org" @@ -58,20 +57,20 @@ "dependencies": {}, "description": "A rediculously light-weight argument validator", "devDependencies": { - "standard": "^7.1.2", - "tap": "^5.7.3" + "standard": "^8.6.0", + "tap": "^10.0.2" }, "directories": { "test": "test" }, "dist": { - "shasum": "2713680775e7614c8ba186c065d4e2e52d1072c0", - "tarball": "https://registry.npmjs.org/aproba/-/aproba-1.0.4.tgz" + "shasum": "95d3600f07710aa0e9298c726ad5ecf2eacbabab", + "tarball": "https://registry.npmjs.org/aproba/-/aproba-1.1.1.tgz" }, "files": [ "index.js" ], - "gitHead": "c6c8f82d519b9ec3816f20f23a9101083c022200", + "gitHead": "e7c76b4b42356092db3cd9e2d9388a0134845eb2", "homepage": "https://github.com/iarna/aproba", "keywords": [ "argument", @@ -93,7 +92,7 @@ "url": "git+https://github.com/iarna/aproba.git" }, "scripts": { - "test": "standard && tap test/*.js" + "test": "standard && tap -j3 test/*.js" }, - "version": "1.0.4" + "version": "1.1.1" } |