node-pre-gyp
Advanced tools
Comparing version 0.6.1 to 0.6.2
# node-pre-gyp changelog | ||
## 0.6.2 | ||
- Support for io.js >= v1.0.2 | ||
- Deferred require of `request` and `tar` to help speed up command line usage of `node-pre-gyp`. | ||
## 0.6.1 | ||
@@ -4,0 +9,0 @@ |
@@ -7,7 +7,5 @@ | ||
var fs = require('fs') | ||
, tar = require('tar') | ||
, path = require('path') | ||
, zlib = require('zlib') | ||
, log = require('npmlog') | ||
, request = require('request') | ||
, existsAsync = fs.exists || path.exists | ||
@@ -43,3 +41,3 @@ , versioning = require('./util/versioning.js') | ||
try { | ||
req = request(requestOpts) | ||
req = require('request')(requestOpts) | ||
} catch (e) { | ||
@@ -63,3 +61,3 @@ return callback(e) | ||
, gunzip = zlib.createGunzip() | ||
, extracter = tar.Extract({ path: to, strip: 1}); | ||
, extracter = require('tar').Extract({ path: to, strip: 1}); | ||
function afterTarball(err) { | ||
@@ -66,0 +64,0 @@ if (err) return callback(err); |
@@ -12,3 +12,2 @@ | ||
, write = require('fs').createWriteStream | ||
, pack = require('tar-pack').pack | ||
, existsAsync = fs.exists || path.exists | ||
@@ -18,2 +17,3 @@ , mkdirp = require('mkdirp'); | ||
function package(gyp, argv, callback) { | ||
var pack = require('tar-pack').pack; | ||
var package_json = JSON.parse(fs.readFileSync('./package.json')); | ||
@@ -20,0 +20,0 @@ var opts = versioning.evaluate(package_json, gyp.opts); |
@@ -13,3 +13,2 @@ | ||
, read = require('fs').createReadStream | ||
, tar = require('tar') | ||
, zlib = require('zlib') | ||
@@ -27,3 +26,3 @@ | ||
var gunzip = zlib.createGunzip() | ||
var extracter = tar.Extract({ path: to, strip: 1 }); | ||
var extracter = require('tar').Extract({ path: to, strip: 1 }); | ||
function filter_func(entry) { | ||
@@ -30,0 +29,0 @@ // ensure directories are +x |
@@ -313,3 +313,11 @@ { | ||
"v8": "3.26" | ||
}, | ||
"1.0.1": { | ||
"node_abi": 42, | ||
"v8": "3.31" | ||
}, | ||
"1.0.2": { | ||
"node_abi": 42, | ||
"v8": "3.31" | ||
} | ||
} |
@@ -5,10 +5,5 @@ | ||
var fs = require('fs') | ||
, tar = require('tar') | ||
, path = require('path') | ||
, zlib = require('zlib') | ||
, log = require('npmlog') | ||
, semver = require('semver') | ||
, request = require('request') | ||
, win = process.platform == 'win32' | ||
, os = require('os') | ||
, existsSync = fs.existsSync || path.existsSync | ||
@@ -15,0 +10,0 @@ , cp = require('child_process') |
@@ -61,11 +61,70 @@ module.exports = exports; | ||
var target_parts = target_version.split('.').map(function(i) { return +i }); | ||
if (target_parts.length == 3 && (target_parts[1] % 2 == 0)) { | ||
if (target_parts.length != 3) { // parse failed | ||
throw new Error("Unknown target version: " + target_version); | ||
} | ||
/* | ||
The below code tries to infer the last known ABI compatible version | ||
that we have recorded in the abi_crosswalk.json when an exact match | ||
is not possible. The reasons for this to exist are complicated: | ||
- We support passing --target to be able to allow developers to package binaries for versions of node | ||
that are not the same one as they are running. This might also be used in combination with the | ||
--target_arch or --target_platform flags to also package binaries for alternative platforms | ||
- When --target is passed we can't therefore determine the ABI (process.versions.modules) from the node | ||
version that is running in memory | ||
- So, therefore node-pre-gyp keeps an "ABI crosswalk" (lib/util/abi_crosswalk.json) to be able to look | ||
this info up for all versions | ||
- But we cannot easily predict what the future ABI will be for released versions | ||
- And node-pre-gyp needs to be a `bundledDependency` in apps that depend on it in order to work correctly | ||
by being fully available at install time. | ||
- So, the speed of node releases and the bundled nature of node-pre-gyp mean that a new node-pre-gyp release | ||
need to happen for every node.js/io.js/node-webkit/nw.js/atom-shell/etc release that might come online if | ||
you want the `--target` flag to keep working for the latest version | ||
- Which is impractical ^^ | ||
- Hence the below code guesses about future ABI to make the need to update node-pre-gyp less demanding. | ||
In practice then you can have a dependency of your app like `node-sqlite3` that bundles a `node-pre-gyp` that | ||
only knows about node v0.10.33 in the `abi_crosswalk.json` but target node v0.10.34 (which is assumed to be | ||
ABI compatible with v0.10.33). | ||
TODO: use semver module instead of custom version parsing | ||
*/ | ||
var major = target_parts[0]; | ||
// io.js: yeah if node.js ever releases 1.x this will break | ||
// but that is unlikely to happen: https://github.com/iojs/io.js/pull/253#issuecomment-69432616 | ||
if (major === 1) { | ||
// look for last release that is the same major version | ||
// e.g. we assume io.js 1.x is ABI compatible with >= 1.0.0 | ||
var minor = target_parts[1]; | ||
var patch = target_parts[2]; | ||
while (--patch > 0) { | ||
var new_target = '' + target_parts[0] + '.' + target_parts[1] + '.' + patch; | ||
while (true) { | ||
if (minor > 0) --minor; | ||
if (patch > 0) --patch; | ||
var new_target = '' + major + '.' + minor + '.' + patch; | ||
if (abi_crosswalk[new_target]) { | ||
cross_obj = abi_crosswalk[target_version]; | ||
cross_obj = abi_crosswalk[new_target]; | ||
console.log('Warning: node-pre-gyp could not find exact match for ' + target_version); | ||
console.log('Warning: but node-pre-gyp successfully choose ' + new_target + ' as ABI compatible target'); | ||
break; | ||
} | ||
if (minor == 0 && patch == 0) { | ||
break; | ||
} | ||
} | ||
} else if (major === 0) { // node.js | ||
if (target_parts[1] % 2 == 0) { // for stable/even node.js series | ||
// look for the last release that is the same minor release | ||
// e.g. we assume node 0.10.x is ABI compatible with >= 0.10.0 | ||
var minor = target_parts[1]; | ||
var patch = target_parts[2]; | ||
while (--patch > 0) { | ||
var new_target = '' + major + '.' + minor + '.' + patch; | ||
if (abi_crosswalk[new_target]) { | ||
cross_obj = abi_crosswalk[new_target]; | ||
console.log('Warning: node-pre-gyp could not find exact match for ' + target_version); | ||
console.log('Warning: but node-pre-gyp successfully choose ' + new_target + ' as ABI compatible target'); | ||
break; | ||
} | ||
} | ||
} | ||
} | ||
@@ -72,0 +131,0 @@ } |
@@ -65,4 +65,3 @@ { | ||
"_shasum": "857fcabfc3397d2625b8228262e86aa7a011b05d", | ||
"_resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", | ||
"readme": "ERROR: No README data found!" | ||
"_resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz" | ||
} |
@@ -55,4 +55,3 @@ { | ||
"directories": {}, | ||
"_resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.1.tgz", | ||
"readme": "ERROR: No README data found!" | ||
"_resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.1.tgz" | ||
} |
@@ -52,4 +52,3 @@ { | ||
"directories": {}, | ||
"_resolved": "https://registry.npmjs.org/ansi/-/ansi-0.3.0.tgz", | ||
"readme": "ERROR: No README data found!" | ||
"_resolved": "https://registry.npmjs.org/ansi/-/ansi-0.3.0.tgz" | ||
} |
@@ -49,4 +49,3 @@ { | ||
"directories": {}, | ||
"_resolved": "https://registry.npmjs.org/npmlog/-/npmlog-0.1.1.tgz", | ||
"readme": "ERROR: No README data found!" | ||
"_resolved": "https://registry.npmjs.org/npmlog/-/npmlog-0.1.1.tgz" | ||
} |
@@ -57,4 +57,3 @@ { | ||
"_shasum": "7a16ba69729132340506170494bc83f7076fe08f", | ||
"_resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.2.11.tgz", | ||
"readme": "ERROR: No README data found!" | ||
"_resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.2.11.tgz" | ||
} |
@@ -10,6 +10,18 @@ | ||
function encode (obj, section) { | ||
function encode (obj, opt) { | ||
var children = [] | ||
, out = "" | ||
if (typeof opt === "string") { | ||
opt = { | ||
section: opt, | ||
whitespace: false | ||
} | ||
} else { | ||
opt = opt || {} | ||
opt.whitespace = opt.whitespace === true | ||
} | ||
var separator = opt.whitespace ? " = " : "=" | ||
Object.keys(obj).forEach(function (k, _, __) { | ||
@@ -19,3 +31,3 @@ var val = obj[k] | ||
val.forEach(function(item) { | ||
out += safe(k + "[]") + " = " + safe(item) + "\n" | ||
out += safe(k + "[]") + separator + safe(item) + "\n" | ||
}) | ||
@@ -26,8 +38,8 @@ } | ||
} else { | ||
out += safe(k) + " = " + safe(val) + eol | ||
out += safe(k) + separator + safe(val) + eol | ||
} | ||
}) | ||
if (section && out.length) { | ||
out = "[" + safe(section) + "]" + eol + out | ||
if (opt.section && out.length) { | ||
out = "[" + safe(opt.section) + "]" + eol + out | ||
} | ||
@@ -37,3 +49,7 @@ | ||
var nk = dotSplit(k).join('\\.') | ||
var child = encode(obj[k], (section ? section + "." : "") + nk) | ||
var section = (opt.section ? opt.section + "." : "") + nk | ||
var child = encode(obj[k], { | ||
section: section, | ||
whitespace: opt.whitespace | ||
}) | ||
if (out.length && child.length) { | ||
@@ -49,8 +65,8 @@ out += eol | ||
function dotSplit (str) { | ||
return str.replace(/\1/g, '\2LITERAL\\1LITERAL\2') | ||
.replace(/\\\./g, '\1') | ||
return str.replace(/\1/g, '\u0002LITERAL\\1LITERAL\u0002') | ||
.replace(/\\\./g, '\u0001') | ||
.split(/\./).map(function (part) { | ||
return part.replace(/\1/g, '\\.') | ||
.replace(/\2LITERAL\\1LITERAL\2/g, '\1') | ||
}) | ||
.replace(/\2LITERAL\\1LITERAL\2/g, '\u0001') | ||
}) | ||
} | ||
@@ -69,3 +85,3 @@ | ||
lines.forEach(function (line, _, __) { | ||
if (!line || line.match(/^\s*;/)) return | ||
if (!line || line.match(/^\s*[;#]/)) return | ||
var match = line.match(re) | ||
@@ -131,2 +147,7 @@ if (!match) return | ||
function isQuoted (val) { | ||
return (val.charAt(0) === "\"" && val.slice(-1) === "\"") | ||
|| (val.charAt(0) === "'" && val.slice(-1) === "'") | ||
} | ||
function safe (val) { | ||
@@ -137,7 +158,6 @@ return ( typeof val !== "string" | ||
|| (val.length > 1 | ||
&& val.charAt(0) === "\"" | ||
&& val.slice(-1) === "\"") | ||
&& isQuoted(val)) | ||
|| val !== val.trim() ) | ||
? JSON.stringify(val) | ||
: val.replace(/;/g, '\\;') | ||
: val.replace(/;/g, '\\;').replace(/#/g, "\\#") | ||
} | ||
@@ -147,3 +167,7 @@ | ||
val = (val || "").trim() | ||
if (val.charAt(0) === "\"" && val.slice(-1) === "\"") { | ||
if (isQuoted(val)) { | ||
// remove the single quotes before calling JSON.parse | ||
if (val.charAt(0) === "'") { | ||
val = val.substr(1, val.length - 2); | ||
} | ||
try { val = JSON.parse(val) } catch (_) {} | ||
@@ -157,3 +181,3 @@ } else { | ||
if (esc) { | ||
if (c === "\\" || c === ";") | ||
if ("\\;#".indexOf(c) !== -1) | ||
unesc += c | ||
@@ -163,3 +187,3 @@ else | ||
esc = false | ||
} else if (c === ";") { | ||
} else if (";#".indexOf(c) !== -1) { | ||
break | ||
@@ -166,0 +190,0 @@ } else if (c === "\\") { |
@@ -9,3 +9,3 @@ { | ||
"description": "An ini encoder/decoder for node", | ||
"version": "1.1.0", | ||
"version": "1.3.2", | ||
"repository": { | ||
@@ -24,11 +24,15 @@ "type": "git", | ||
"devDependencies": { | ||
"tap": "~0.0.9" | ||
"tap": "~0.4.0" | ||
}, | ||
"_id": "ini@1.1.0", | ||
"dist": { | ||
"shasum": "4e808c2ce144c6c1788918e034d6797bc6cf6281", | ||
"tarball": "http://registry.npmjs.org/ini/-/ini-1.1.0.tgz" | ||
"license": "ISC", | ||
"gitHead": "bbe4a8bb09afa58f724c04ce43a49037cabeadfb", | ||
"bugs": { | ||
"url": "https://github.com/isaacs/ini/issues" | ||
}, | ||
"_from": "ini@~1.1.0", | ||
"_npmVersion": "1.2.2", | ||
"homepage": "https://github.com/isaacs/ini", | ||
"_id": "ini@1.3.2", | ||
"_shasum": "9ebf4a44daf9d89acd07aab9f89a083d887f6dec", | ||
"_from": "ini@~1.3.0", | ||
"_npmVersion": "2.1.9", | ||
"_nodeVersion": "0.10.16", | ||
"_npmUser": { | ||
@@ -44,10 +48,8 @@ "name": "isaacs", | ||
], | ||
"dist": { | ||
"shasum": "9ebf4a44daf9d89acd07aab9f89a083d887f6dec", | ||
"tarball": "http://registry.npmjs.org/ini/-/ini-1.3.2.tgz" | ||
}, | ||
"directories": {}, | ||
"_shasum": "4e808c2ce144c6c1788918e034d6797bc6cf6281", | ||
"_resolved": "https://registry.npmjs.org/ini/-/ini-1.1.0.tgz", | ||
"bugs": { | ||
"url": "https://github.com/isaacs/ini/issues" | ||
}, | ||
"readme": "ERROR: No README data found!", | ||
"homepage": "https://github.com/isaacs/ini" | ||
"_resolved": "https://registry.npmjs.org/ini/-/ini-1.3.2.tgz" | ||
} |
An ini format parser and serializer for node. | ||
Sections are treated as nested objects. Items before the first heading | ||
are saved on the object directly. | ||
Sections are treated as nested objects. Items before the first | ||
heading are saved on the object directly. | ||
@@ -37,18 +37,19 @@ ## Usage | ||
fs.writeFileSync('./config_modified.ini', ini.stringify(config, 'section')) | ||
fs.writeFileSync('./config_modified.ini', ini.stringify(config, { section: 'section' })) | ||
This will result in a file called `config_modified.ini` being written to the filesystem with the following content: | ||
This will result in a file called `config_modified.ini` being written | ||
to the filesystem with the following content: | ||
[section] | ||
scope = local | ||
scope=local | ||
[section.database] | ||
user = dbuser | ||
password = dbpassword | ||
database = use_another_database | ||
user=dbuser | ||
password=dbpassword | ||
database=use_another_database | ||
[section.paths.default] | ||
tmpdir = /tmp | ||
array[] = first value | ||
array[] = second value | ||
array[] = third value | ||
array[] = fourth value | ||
tmpdir=/tmp | ||
array[]=first value | ||
array[]=second value | ||
array[]=third value | ||
array[]=fourth value | ||
@@ -59,16 +60,37 @@ | ||
### decode(inistring) | ||
Decode the ini-style formatted `inistring` into a nested object. | ||
### parse(inistring) | ||
Alias for `decode(inistring)` | ||
### encode(object, [section]) | ||
Encode the object `object` into an ini-style formatted string. If the optional parameter `section` is given, then all top-level properties of the object are put into this section and the `section`-string is prepended to all sub-sections, see the usage example above. | ||
### encode(object, [options]) | ||
### stringify(object, [section]) | ||
Alias for `encode(object, [section])` | ||
Encode the object `object` into an ini-style formatted string. If the | ||
optional parameter `section` is given, then all top-level properties | ||
of the object are put into this section and the `section`-string is | ||
prepended to all sub-sections, see the usage example above. | ||
The `options` object may contain the following: | ||
* `section` A string which will be the first `section` in the encoded | ||
ini data. Defaults to none. | ||
* `whitespace` Boolean to specify whether to put whitespace around the | ||
`=` character. By default, whitespace is omitted, to be friendly to | ||
some persnickety old parsers that don't tolerate it well. But some | ||
find that it's more human-readable and pretty with the whitespace. | ||
For backwards compatibility reasons, if a `string` options is passed | ||
in, then it is assumed to be the `section` value. | ||
### stringify(object, [options]) | ||
Alias for `encode(object, [options])` | ||
### safe(val) | ||
Escapes the string `val` such that it is safe to be used as a key or value in an ini-file. Basically escapes quotes. For example | ||
Escapes the string `val` such that it is safe to be used as a key or | ||
value in an ini-file. Basically escapes quotes. For example | ||
ini.safe('"unsafe string"') | ||
@@ -81,2 +103,3 @@ | ||
### unsafe(val) | ||
Unescapes the string `val` |
@@ -9,24 +9,28 @@ var i = require("../") | ||
, d | ||
, expectE = 'o = p\n' | ||
+ 'a with spaces = b c\n' | ||
+ '" xa n p " = "\\"\\r\\nyoyoyo\\r\\r\\n"\n' | ||
+ '"[disturbing]" = hey you never know\n' | ||
+ 'zr[] = deedee\n' | ||
+ 'ar[] = one\n' | ||
+ 'ar[] = three\n' | ||
+ 'ar[] = this is included\n' | ||
+ 'br = warm\n' | ||
, expectE = 'o=p\n' | ||
+ 'a with spaces=b c\n' | ||
+ '" xa n p "="\\"\\r\\nyoyoyo\\r\\r\\n"\n' | ||
+ '"[disturbing]"=hey you never know\n' | ||
+ 's=something\n' | ||
+ 's1=\"something\'\n' | ||
+ 's2=something else\n' | ||
+ 'zr[]=deedee\n' | ||
+ 'ar[]=one\n' | ||
+ 'ar[]=three\n' | ||
+ 'ar[]=this is included\n' | ||
+ 'br=warm\n' | ||
+ '\n' | ||
+ '[a]\n' | ||
+ 'av = a val\n' | ||
+ 'e = { o: p, a: ' | ||
+ 'av=a val\n' | ||
+ 'e={ o: p, a: ' | ||
+ '{ av: a val, b: { c: { e: "this [value]" ' | ||
+ '} } } }\nj = "\\"{ o: \\"p\\", a: { av:' | ||
+ '} } } }\nj="\\"{ o: \\"p\\", a: { av:' | ||
+ ' \\"a val\\", b: { c: { e: \\"this [value]' | ||
+ '\\" } } } }\\""\n"[]" = a square?\n' | ||
+ 'cr[] = four\ncr[] = eight\n\n' | ||
+'[a.b.c]\ne = 1\n' | ||
+ 'j = 2\n\n[x\\.y\\.z]\nx.y.z = xyz\n\n' | ||
+ '[x\\.y\\.z.a\\.b\\.c]\na.b.c = abc\n' | ||
+ 'nocomment = this\\; this is not a comment\n' | ||
+ '\\" } } } }\\""\n"[]"=a square?\n' | ||
+ 'cr[]=four\ncr[]=eight\n\n' | ||
+'[a.b.c]\ne=1\n' | ||
+ 'j=2\n\n[x\\.y\\.z]\nx.y.z=xyz\n\n' | ||
+ '[x\\.y\\.z.a\\.b\\.c]\na.b.c=abc\n' | ||
+ 'nocomment=this\\; this is not a comment\n' | ||
+ 'noHashComment=this\\# this is not a comment\n' | ||
, expectD = | ||
@@ -37,2 +41,5 @@ { o: 'p', | ||
'[disturbing]': 'hey you never know', | ||
's': 'something', | ||
's1' : '\"something\'', | ||
's2': 'something else', | ||
'zr': ['deedee'], | ||
@@ -52,6 +59,17 @@ 'ar': ['one', 'three', 'this is included'], | ||
'a.b.c': 'abc', | ||
'nocomment': 'this\; this is not a comment' | ||
'nocomment': 'this\; this is not a comment', | ||
noHashComment: 'this\# this is not a comment' | ||
} | ||
} | ||
} | ||
, expectF = '[prefix.log]\n' | ||
+ 'type=file\n\n' | ||
+ '[prefix.log.level]\n' | ||
+ 'label=debug\n' | ||
+ 'value=10\n' | ||
, expectG = '[log]\n' | ||
+ 'type = file\n\n' | ||
+ '[log.level]\n' | ||
+ 'label = debug\n' | ||
+ 'value = 10\n' | ||
@@ -75,1 +93,17 @@ test("decode from file", function (t) { | ||
}) | ||
test("encode with option", function (t) { | ||
var obj = {log: { type:'file', level: {label:'debug', value:10} } } | ||
e = i.encode(obj, {section: 'prefix'}) | ||
t.equal(e, expectF) | ||
t.end() | ||
}) | ||
test("encode with whitespace", function (t) { | ||
var obj = {log: { type:'file', level: {label:'debug', value:10} } } | ||
e = i.encode(obj, {whitespace: true}) | ||
t.equal(e, expectG) | ||
t.end() | ||
}) |
@@ -65,4 +65,3 @@ { | ||
"_shasum": "de3f98543dbf96082be48ad1a0c7cda836301dcf", | ||
"_resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", | ||
"readme": "ERROR: No README data found!" | ||
"_resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz" | ||
} |
@@ -75,4 +75,3 @@ { | ||
"directories": {}, | ||
"_resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-0.1.3.tgz", | ||
"readme": "ERROR: No README data found!" | ||
"_resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-0.1.3.tgz" | ||
} |
{ | ||
"name": "rc", | ||
"version": "0.5.4", | ||
"version": "0.5.5", | ||
"description": "hardwired configuration loader", | ||
@@ -37,5 +37,5 @@ "main": "index.js", | ||
"strip-json-comments": "0.1.x", | ||
"ini": "~1.1.0" | ||
"ini": "~1.3.0" | ||
}, | ||
"gitHead": "b670e6dce7a9295c2629cdb881e78e6ff91875f4", | ||
"gitHead": "eb2ef879b3740bcdf686d9d269977121b3571523", | ||
"bugs": { | ||
@@ -45,6 +45,7 @@ "url": "https://github.com/dominictarr/rc/issues" | ||
"homepage": "https://github.com/dominictarr/rc", | ||
"_id": "rc@0.5.4", | ||
"_shasum": "14169483ccb33b2695a349dbd96ef54e4e92d54f", | ||
"_id": "rc@0.5.5", | ||
"_shasum": "541cc3300f464b6dfe6432d756f0f2dd3e9eb199", | ||
"_from": "rc@~0.5.1", | ||
"_npmVersion": "1.4.26", | ||
"_npmVersion": "2.1.11", | ||
"_nodeVersion": "0.10.31", | ||
"_npmUser": { | ||
@@ -61,8 +62,7 @@ "name": "dominictarr", | ||
"dist": { | ||
"shasum": "14169483ccb33b2695a349dbd96ef54e4e92d54f", | ||
"tarball": "http://registry.npmjs.org/rc/-/rc-0.5.4.tgz" | ||
"shasum": "541cc3300f464b6dfe6432d756f0f2dd3e9eb199", | ||
"tarball": "http://registry.npmjs.org/rc/-/rc-0.5.5.tgz" | ||
}, | ||
"directories": {}, | ||
"_resolved": "https://registry.npmjs.org/rc/-/rc-0.5.4.tgz", | ||
"readme": "ERROR: No README data found!" | ||
"_resolved": "https://registry.npmjs.org/rc/-/rc-0.5.5.tgz" | ||
} |
## Change Log | ||
### v2.51.0 (2014/12/10) | ||
- [#1310](https://github.com/request/request/pull/1310) Revert changes introduced in https://github.com/request/request/pull/1282 (@simov) | ||
### v2.50.0 (2014/12/09) | ||
- [#1308](https://github.com/request/request/pull/1308) Add browser test to keep track of browserify compability. (@eiriksm) | ||
- [#1299](https://github.com/request/request/pull/1299) Add optional support for jsonReviver (@poislagarde) | ||
- [#1277](https://github.com/request/request/pull/1277) Add Coveralls configuration (@simov) | ||
- [#1307](https://github.com/request/request/pull/1307) Upgrade form-data, add back browserify compability. Fixes #455. (@eiriksm) | ||
- [#1305](https://github.com/request/request/pull/1305) Fix typo in README.md (@LewisJEllis) | ||
- [#1288](https://github.com/request/request/pull/1288) Update README.md to explain custom file use case (@cliffcrosland) | ||
### v2.49.0 (2014/11/28) | ||
- [#1295](https://github.com/request/request/pull/1295) fix(proxy): no-proxy false positive (@oliamb) | ||
- [#1292](https://github.com/request/request/pull/1292) Upgrade `caseless` to 0.8.1 (@mmalecki) | ||
- [#1276](https://github.com/request/request/pull/1276) Set transfer encoding for multipart/related to chunked by default (@simov) | ||
- [#1275](https://github.com/request/request/pull/1275) Fix multipart content-type headers detection (@simov) | ||
- [#1269](https://github.com/request/request/pull/1269) adds streams example for review (@tbuchok) | ||
- [#1238](https://github.com/request/request/pull/1238) Add examples README.md (@simov) | ||
### v2.48.0 (2014/11/12) | ||
@@ -4,0 +23,0 @@ - [#1263](https://github.com/request/request/pull/1263) Fixed a syntax error / typo in README.md (@xna2) |
@@ -44,4 +44,3 @@ { | ||
"_shasum": "c57103f7a17fc037f02d7c2e64b602ea223f7d63", | ||
"_resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.5.0.tgz", | ||
"homepage": "https://github.com/mikeal/aws-sign" | ||
"_resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.5.0.tgz" | ||
} |
@@ -52,4 +52,3 @@ { | ||
"_shasum": "6b07085aef9a3ccac6ee53bf9d3df0c1521a5538", | ||
"_resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.1.tgz", | ||
"scripts": {} | ||
"_resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.1.tgz" | ||
} |
@@ -59,4 +59,3 @@ { | ||
"directories": {}, | ||
"_resolved": "https://registry.npmjs.org/bl/-/bl-0.9.3.tgz", | ||
"readme": "ERROR: No README data found!" | ||
"_resolved": "https://registry.npmjs.org/bl/-/bl-0.9.3.tgz" | ||
} |
@@ -29,3 +29,3 @@ function Caseless (dict) { | ||
name = name.toLowerCase() | ||
var result, key | ||
var result, _key | ||
var headers = this.dict | ||
@@ -32,0 +32,0 @@ Object.keys(headers).forEach(function (key) { |
{ | ||
"name": "caseless", | ||
"version": "0.7.0", | ||
"version": "0.8.0", | ||
"description": "Caseless object set/get/has, very useful when working with HTTP headers.", | ||
@@ -30,7 +30,7 @@ "main": "index.js", | ||
}, | ||
"gitHead": "9359e958f196e1aaa2180b551151b2c25826b8f5", | ||
"gitHead": "1bfbf01d4481c057738a64ba284749222a944176", | ||
"homepage": "https://github.com/mikeal/caseless", | ||
"_id": "caseless@0.7.0", | ||
"_shasum": "cbd705ae6229158bb0bc971bf7d7a04bdbd51ff8", | ||
"_from": "caseless@~0.7.0", | ||
"_id": "caseless@0.8.0", | ||
"_shasum": "5bca2881d41437f54b2407ebe34888c7b9ad4f7d", | ||
"_from": "caseless@~0.8.0", | ||
"_npmVersion": "2.0.0", | ||
@@ -48,8 +48,7 @@ "_npmUser": { | ||
"dist": { | ||
"shasum": "cbd705ae6229158bb0bc971bf7d7a04bdbd51ff8", | ||
"tarball": "http://registry.npmjs.org/caseless/-/caseless-0.7.0.tgz" | ||
"shasum": "5bca2881d41437f54b2407ebe34888c7b9ad4f7d", | ||
"tarball": "http://registry.npmjs.org/caseless/-/caseless-0.8.0.tgz" | ||
}, | ||
"directories": {}, | ||
"_resolved": "https://registry.npmjs.org/caseless/-/caseless-0.7.0.tgz", | ||
"readme": "ERROR: No README data found!" | ||
"_resolved": "https://registry.npmjs.org/caseless/-/caseless-0.8.0.tgz" | ||
} |
@@ -37,7 +37,3 @@ { | ||
"_from": "delayed-stream@0.0.5", | ||
"_resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-0.0.5.tgz", | ||
"bugs": { | ||
"url": "https://github.com/felixge/node-delayed-stream/issues" | ||
}, | ||
"readme": "ERROR: No README data found!" | ||
"_resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-0.0.5.tgz" | ||
} |
@@ -58,4 +58,3 @@ { | ||
"_shasum": "0137e657baa5a7541c57ac37ac5fc07d73b4dc1f", | ||
"_resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-0.0.7.tgz", | ||
"readme": "ERROR: No README data found!" | ||
"_resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-0.0.7.tgz" | ||
} |
@@ -43,4 +43,3 @@ { | ||
"_shasum": "6d0e09c4921f94a27f63d3b49c5feff1ea4c5130", | ||
"_resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.5.2.tgz", | ||
"readme": "ERROR: No README data found!" | ||
"_resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.5.2.tgz" | ||
} |
@@ -8,3 +8,3 @@ var CombinedStream = require('combined-stream'); | ||
var fs = require('fs'); | ||
var mime = require('mime'); | ||
var mime = require('mime-types'); | ||
var async = require('async'); | ||
@@ -11,0 +11,0 @@ |
@@ -58,4 +58,3 @@ { | ||
"_shasum": "ac3613b1da9bed1b47510bb4651b8931e47146c7", | ||
"_resolved": "https://registry.npmjs.org/async/-/async-0.9.0.tgz", | ||
"readme": "ERROR: No README data found!" | ||
"_resolved": "https://registry.npmjs.org/async/-/async-0.9.0.tgz" | ||
} |
@@ -9,3 +9,3 @@ { | ||
"description": "A module to create readable \"multipart/form-data\" streams. Can be used to submit forms and file uploads to other web applications.", | ||
"version": "0.1.4", | ||
"version": "0.2.0", | ||
"repository": { | ||
@@ -23,5 +23,5 @@ "type": "git", | ||
"dependencies": { | ||
"async": "~0.9.0", | ||
"combined-stream": "~0.0.4", | ||
"mime": "~1.2.11", | ||
"async": "~0.9.0" | ||
"mime-types": "~2.0.3" | ||
}, | ||
@@ -40,3 +40,3 @@ "licenses": [ | ||
}, | ||
"gitHead": "5f5f4809ea685f32658809fa0f13d7eface0e45a", | ||
"gitHead": "dfc1a2aef40b97807e2ffe477da06cb2c37e259f", | ||
"bugs": { | ||
@@ -46,6 +46,6 @@ "url": "https://github.com/felixge/node-form-data/issues" | ||
"homepage": "https://github.com/felixge/node-form-data", | ||
"_id": "form-data@0.1.4", | ||
"_shasum": "91abd788aba9702b1aabfa8bc01031a2ac9e3b12", | ||
"_from": "form-data@~0.1.0", | ||
"_npmVersion": "1.4.14", | ||
"_id": "form-data@0.2.0", | ||
"_shasum": "26f8bc26da6440e299cbdcfb69035c4f77a6e466", | ||
"_from": "form-data@~0.2.0", | ||
"_npmVersion": "1.4.28", | ||
"_npmUser": { | ||
@@ -78,8 +78,7 @@ "name": "alexindigo", | ||
"dist": { | ||
"shasum": "91abd788aba9702b1aabfa8bc01031a2ac9e3b12", | ||
"tarball": "http://registry.npmjs.org/form-data/-/form-data-0.1.4.tgz" | ||
"shasum": "26f8bc26da6440e299cbdcfb69035c4f77a6e466", | ||
"tarball": "http://registry.npmjs.org/form-data/-/form-data-0.2.0.tgz" | ||
}, | ||
"directories": {}, | ||
"_resolved": "https://registry.npmjs.org/form-data/-/form-data-0.1.4.tgz", | ||
"readme": "ERROR: No README data found!" | ||
"_resolved": "https://registry.npmjs.org/form-data/-/form-data-0.2.0.tgz" | ||
} |
@@ -58,8 +58,3 @@ { | ||
"_shasum": "7a636e9ded4efcefb19cef4947a3c67dfaee911b", | ||
"_resolved": "https://registry.npmjs.org/boom/-/boom-0.4.2.tgz", | ||
"bugs": { | ||
"url": "https://github.com/spumko/boom/issues" | ||
}, | ||
"readme": "ERROR: No README data found!", | ||
"homepage": "https://github.com/spumko/boom" | ||
"_resolved": "https://registry.npmjs.org/boom/-/boom-0.4.2.tgz" | ||
} |
@@ -62,5 +62,3 @@ { | ||
"_shasum": "ed91ff1f17ad13d3748288594f8a48a0d26f325c", | ||
"_resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-0.2.2.tgz", | ||
"readme": "ERROR: No README data found!", | ||
"homepage": "https://github.com/hueniverse/cryptiles" | ||
"_resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-0.2.2.tgz" | ||
} |
@@ -64,8 +64,3 @@ { | ||
"_shasum": "3d322462badf07716ea7eb85baf88079cddce505", | ||
"_resolved": "https://registry.npmjs.org/hoek/-/hoek-0.9.1.tgz", | ||
"bugs": { | ||
"url": "https://github.com/spumko/hoek/issues" | ||
}, | ||
"readme": "ERROR: No README data found!", | ||
"homepage": "https://github.com/spumko/hoek" | ||
"_resolved": "https://registry.npmjs.org/hoek/-/hoek-0.9.1.tgz" | ||
} |
@@ -59,8 +59,3 @@ { | ||
"_shasum": "fb885f18b0f3aad189f824862536bceeec750900", | ||
"_resolved": "https://registry.npmjs.org/sntp/-/sntp-0.2.4.tgz", | ||
"bugs": { | ||
"url": "https://github.com/hueniverse/sntp/issues" | ||
}, | ||
"readme": "ERROR: No README data found!", | ||
"homepage": "https://github.com/hueniverse/sntp" | ||
"_resolved": "https://registry.npmjs.org/sntp/-/sntp-0.2.4.tgz" | ||
} |
@@ -67,5 +67,3 @@ { | ||
"_shasum": "87cd491f9b46e4e2aeaca335416766885d2d1ed9", | ||
"_resolved": "https://registry.npmjs.org/hawk/-/hawk-1.1.1.tgz", | ||
"readme": "ERROR: No README data found!", | ||
"homepage": "https://github.com/hueniverse/hawk" | ||
"_resolved": "https://registry.npmjs.org/hawk/-/hawk-1.1.1.tgz" | ||
} |
@@ -20,3 +20,3 @@ # Abstract | ||
employed on the Internet today. However, it is common place that the burdens of | ||
PKI prevent web service operators from deploying that methodoloy, and so many | ||
PKI prevent web service operators from deploying that methodology, and so many | ||
fall back to Basic authentication, which has poor security characteristics. | ||
@@ -113,3 +113,3 @@ | ||
name followed with an ASCII colon `:` and an ASCII space ` `. | ||
2. If the header name is `request-line` then appened the HTTP request line, | ||
2. If the header name is `request-line` then append the HTTP request line, | ||
otherwise append the header value. | ||
@@ -121,3 +121,3 @@ 3. If value is not the last value then append an ASCII newline `\n`. The string | ||
All requests refer to the following request (body ommitted): | ||
All requests refer to the following request (body omitted): | ||
@@ -188,3 +188,3 @@ POST /foo HTTP/1.1 | ||
scheme over a non-secure transport will leave the request vulnerable to | ||
spoofing, tampering, replay/repudiaton, and integrity violations (if using the | ||
spoofing, tampering, replay/repudiation, and integrity violations (if using the | ||
STRIDE threat-modeling methodology). | ||
@@ -202,3 +202,3 @@ | ||
Nonces are out of scope for this document simply because many service providers | ||
fail to implement them correctly, or do not adopt security specfiications | ||
fail to implement them correctly, or do not adopt security specifications | ||
because of the infrastructure complexity. Given the `header` parameterization, | ||
@@ -242,8 +242,8 @@ a service provider is fully enabled to add nonce semantics into this scheme by | ||
-----BEGIN PUBLIC KEY----- | ||
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDCFENGw33yGihy92pDjZQhl0C3 | ||
6rPJj+CvfSC8+q28hxA161QFNUd13wuCTUcq0Qd2qsBe/2hFyc2DCJJg0h1L78+6 | ||
Z4UMR7EOcpfdUE9Hf3m/hs+FUR45uBJeDK1HSFHD8bHKD6kv8FPGfJTotc+2xjJw | ||
oYi+1hqp1fIekaxsyQIDAQAB | ||
-----END PUBLIC KEY----- | ||
-----BEGIN PUBLIC KEY----- | ||
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDCFENGw33yGihy92pDjZQhl0C3 | ||
6rPJj+CvfSC8+q28hxA161QFNUd13wuCTUcq0Qd2qsBe/2hFyc2DCJJg0h1L78+6 | ||
Z4UMR7EOcpfdUE9Hf3m/hs+FUR45uBJeDK1HSFHD8bHKD6kv8FPGfJTotc+2xjJw | ||
oYi+1hqp1fIekaxsyQIDAQAB | ||
-----END PUBLIC KEY----- | ||
@@ -285,3 +285,3 @@ -----BEGIN RSA PRIVATE KEY----- | ||
Authorization: Signature keyId="Test",algorithm="rsa-sha256",signature="JldXnt8W9t643M2Sce10gqCh/+E7QIYLiI+bSjnFBGCti7s+mPPvOjVb72sbd1FjeOUwPTDpKbrQQORrm+xBYfAwCxF3LBSSzORvyJ5nRFCFxfJ3nlQD6Kdxhw8wrVZX5nSem4A/W3C8qH5uhFTRwF4ruRjh+ENHWuovPgO/HGQ=" | ||
Authorization: Signature keyId="Test",algorithm="rsa-sha256",signature="ATp0r26dbMIxOopqw0OfABDT7CKMIoENumuruOtarj8n/97Q3htHFYpH8yOSQk3Z5zh8UxUym6FYTb5+A0Nz3NRsXJibnYi7brE/4tx5But9kkFGzG+xpUmimN4c3TMN7OFH//+r8hBf7BT9/GmHDUVZT2JzWGLZES2xDOUuMtA=" | ||
@@ -302,3 +302,3 @@ ### All Headers | ||
Authorization: Signature keyId="Test",algorithm="rsa-sha256",headers="request-line host date content-type content-md5 content-length",signature="Gm7W/r+e90REDpWytALMrft4MqZxCmslOTOvwJX17ViEBA5E65QqvWI0vIH3l/vSsGiaMVmuUgzYsJLYMLcm5dGrv1+a+0fCoUdVKPZWHyImQEqpLkopVwqEH67LVECFBqFTAKlQgBn676zrfXQbb+b/VebAsNUtvQMe6cTjnDY=" | ||
Authorization: Signature keyId="Test",algorithm="rsa-sha256",headers="request-line host date content-type content-md5 content-length",signature="H/AaTDkJvLELy4i1RujnKlS6dm8QWiJvEpn9cKRMi49kKF+mohZ15z1r+mF+XiKS5kOOscyS83olfBtsVhYjPg2Ei3/D9D4Mvb7bFm9IaLJgYTFFuQCghrKQQFPiqJN320emjHxFowpIm1BkstnEU7lktH/XdXVBo8a6Uteiztw=" | ||
@@ -22,2 +22,3 @@ // Copyright 2011 Joyent, Inc. All rights reserved. | ||
sshKeyFingerprint: util.fingerprint, | ||
pemToRsaSSHKey: util.pemToRsaSSHKey, | ||
@@ -24,0 +25,0 @@ verify: verify.verifySignature, |
@@ -149,3 +149,2 @@ // Copyright 2012 Joyent, Inc. All rights reserved. | ||
} else { | ||
value = | ||
stringToSign += | ||
@@ -152,0 +151,0 @@ request.method + ' ' + request.path + ' HTTP/' + options.httpVersion; |
@@ -246,5 +246,60 @@ // Copyright 2012 Joyent, Inc. All rights reserved. | ||
return fp; | ||
} | ||
}, | ||
/** | ||
* Converts a PKGCS#8 PEM file to an OpenSSH public key (rsa) | ||
* | ||
* The reverse of the above function. | ||
*/ | ||
pemToRsaSSHKey: function pemToRsaSSHKey(pem, comment) { | ||
assert.equal('string', typeof pem, 'typeof pem'); | ||
// chop off the BEGIN PUBLIC KEY and END PUBLIC KEY portion | ||
var cleaned = pem.split('\n').slice(1, -2).join(''); | ||
var buf = new Buffer(cleaned, 'base64'); | ||
var der = new asn1.BerReader(buf); | ||
der.readSequence(); | ||
der.readSequence(); | ||
var oid = der.readOID(); | ||
assert.equal(oid, '1.2.840.113549.1.1.1', 'pem not in RSA format'); | ||
// Null -- XXX this probably isn't good practice | ||
der.readByte(); | ||
der.readByte(); | ||
// bit string sequence | ||
der.readSequence(0x03); | ||
der.readByte(); | ||
der.readSequence(); | ||
// modulus | ||
assert.equal(der.peek(), asn1.Ber.Integer, 'modulus not an integer'); | ||
der._offset = der.readLength(der.offset + 1); | ||
var modulus = der._buf.slice(der.offset, der.offset + der.length); | ||
der._offset += der.length; | ||
// exponent | ||
assert.equal(der.peek(), asn1.Ber.Integer, 'exponent not an integer'); | ||
der._offset = der.readLength(der.offset + 1); | ||
var exponent = der._buf.slice(der.offset, der.offset + der.length); | ||
der._offset += der.length; | ||
// now, make the key | ||
var type = new Buffer('ssh-rsa'); | ||
var buffer = new Buffer(4 + type.length + 4 + modulus.length + 4 + exponent.length); | ||
var i = 0; | ||
buffer.writeUInt32BE(type.length, i); i += 4; | ||
type.copy(buffer, i); i += type.length; | ||
buffer.writeUInt32BE(exponent.length, i); i += 4; | ||
exponent.copy(buffer, i); i += exponent.length; | ||
buffer.writeUInt32BE(modulus.length, i); i += 4; | ||
modulus.copy(buffer, i); i += modulus.length; | ||
var s = type.toString() + ' ' + buffer.toString('base64') + ' ' + (comment || ''); | ||
return s; | ||
} | ||
}; |
@@ -33,3 +33,3 @@ { | ||
"pretest": "which gjslint; if [[ \"$?\" = 0 ]] ; then gjslint --nojsdoc -r lib -r tst; else echo \"Missing gjslint. Skipping lint\"; fi", | ||
"test": "tap ./tst" | ||
"test": "./node_modules/.bin/tap ./tst" | ||
}, | ||
@@ -58,8 +58,3 @@ "_npmUser": { | ||
"_from": "asn1@0.1.11", | ||
"_resolved": "https://registry.npmjs.org/asn1/-/asn1-0.1.11.tgz", | ||
"bugs": { | ||
"url": "https://github.com/mcavage/node-asn1/issues" | ||
}, | ||
"readme": "ERROR: No README data found!", | ||
"homepage": "https://github.com/mcavage/node-asn1" | ||
"_resolved": "https://registry.npmjs.org/asn1/-/asn1-0.1.11.tgz" | ||
} |
@@ -12,2 +12,3 @@ // Copyright (c) 2012, Mark Cavage. All rights reserved. | ||
var NDEBUG = process.env.NODE_NDEBUG || false; | ||
var UUID_REGEXP = /^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$/; | ||
@@ -57,3 +58,25 @@ | ||
function _instanceof(arg, type, name, stackFunc) { | ||
if (!NDEBUG) { | ||
name = name || type; | ||
stackFunc = stackFunc || _instanceof.caller; | ||
if (!(arg instanceof type)) { | ||
throw new assert.AssertionError({ | ||
message: _(TYPE_REQUIRED, name, type.name), | ||
actual: _getClass(arg), | ||
expected: type.name, | ||
operator: 'instanceof', | ||
stackStartFunction: stackFunc | ||
}); | ||
} | ||
} | ||
} | ||
function _getClass(object) { | ||
return (Object.prototype.toString.call(object).slice(8, -1)); | ||
}; | ||
///--- API | ||
@@ -90,3 +113,3 @@ | ||
throw new assert.AssertionError({ | ||
message: _(TYPE_REQUIRED, name, type), | ||
message: _(TYPE_REQUIRED, name || '', 'Buffer'), | ||
actual: typeof (arg), | ||
@@ -108,2 +131,11 @@ expected: 'buffer', | ||
_assert(arg, 'number', name); | ||
if (!NDEBUG && (isNaN(arg) || !isFinite(arg))) { | ||
throw new assert.AssertionError({ | ||
message: _(TYPE_REQUIRED, name, 'number'), | ||
actual: arg, | ||
expected: 'number', | ||
operator: 'isNaN', | ||
stackStartFunction: number | ||
}); | ||
} | ||
} | ||
@@ -118,14 +150,15 @@ | ||
function stream(arg, name) { | ||
if (!(arg instanceof Stream)) { | ||
throw new assert.AssertionError({ | ||
message: _(TYPE_REQUIRED, name, type), | ||
actual: typeof (arg), | ||
expected: 'Stream', | ||
operator: 'instanceof', | ||
stackStartFunction: buffer | ||
}); | ||
} | ||
_instanceof(arg, Stream, name); | ||
} | ||
function date(arg, name) { | ||
_instanceof(arg, Date, name); | ||
} | ||
function regexp(arg, name) { | ||
_instanceof(arg, RegExp, name); | ||
} | ||
function string(arg, name) { | ||
@@ -136,3 +169,16 @@ _assert(arg, 'string', name); | ||
function uuid(arg, name) { | ||
string(arg, name); | ||
if (!NDEBUG && !UUID_REGEXP.test(arg)) { | ||
throw new assert.AssertionError({ | ||
message: _(TYPE_REQUIRED, name, 'uuid'), | ||
actual: 'string', | ||
expected: 'uuid', | ||
operator: 'test', | ||
stackStartFunction: uuid | ||
}); | ||
} | ||
} | ||
///--- Exports | ||
@@ -143,7 +189,10 @@ | ||
buffer: buffer, | ||
date: date, | ||
func: func, | ||
number: number, | ||
object: object, | ||
regexp: regexp, | ||
stream: stream, | ||
string: string | ||
string: string, | ||
uuid: uuid | ||
}; | ||
@@ -150,0 +199,0 @@ |
@@ -8,16 +8,24 @@ { | ||
"description": "Extra assertions on top of node's assert module", | ||
"version": "0.1.2", | ||
"version": "0.1.5", | ||
"main": "./assert.js", | ||
"dependencies": {}, | ||
"devDependencies": {}, | ||
"optionalDependencies": {}, | ||
"repository": { | ||
"type": "git", | ||
"url": "https://github.com/mcavage/node-assert-plus.git" | ||
}, | ||
"engines": { | ||
"node": ">=0.6" | ||
"node": ">=0.8" | ||
}, | ||
"_id": "assert-plus@0.1.2", | ||
"bugs": { | ||
"url": "https://github.com/mcavage/node-assert-plus/issues" | ||
}, | ||
"dependencies": {}, | ||
"_id": "assert-plus@0.1.5", | ||
"dist": { | ||
"shasum": "d93ffdbb67ac5507779be316a7d65146417beef8", | ||
"tarball": "http://registry.npmjs.org/assert-plus/-/assert-plus-0.1.2.tgz" | ||
"shasum": "ee74009413002d84cec7219c6ac811812e723160", | ||
"tarball": "http://registry.npmjs.org/assert-plus/-/assert-plus-0.1.5.tgz" | ||
}, | ||
"_npmVersion": "1.1.59", | ||
"_from": "assert-plus@^0.1.5", | ||
"_npmVersion": "1.3.11", | ||
"_npmUser": { | ||
@@ -34,6 +42,4 @@ "name": "mcavage", | ||
"directories": {}, | ||
"_shasum": "d93ffdbb67ac5507779be316a7d65146417beef8", | ||
"_from": "assert-plus@0.1.2", | ||
"_resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.1.2.tgz", | ||
"readme": "ERROR: No README data found!" | ||
"_shasum": "ee74009413002d84cec7219c6ac811812e723160", | ||
"_resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.1.5.tgz" | ||
} |
{ | ||
"name": "ctype", | ||
"version": "0.5.2", | ||
"version": "0.5.3", | ||
"description": "read and write binary structures and data types", | ||
@@ -14,6 +14,10 @@ "homepage": "https://github.com/rmustacc/node-ctype", | ||
"main": "ctype.js", | ||
"_id": "ctype@0.5.2", | ||
"repository": { | ||
"type": "git", | ||
"url": "https://github.com/rmustacc/node-ctype.git" | ||
}, | ||
"_id": "ctype@0.5.3", | ||
"dist": { | ||
"shasum": "fe8091d468a373a0b0c9ff8bbfb3425c00973a1d", | ||
"tarball": "http://registry.npmjs.org/ctype/-/ctype-0.5.2.tgz" | ||
"shasum": "82c18c2461f74114ef16c135224ad0b9144ca12f", | ||
"tarball": "http://registry.npmjs.org/ctype/-/ctype-0.5.3.tgz" | ||
}, | ||
@@ -32,6 +36,5 @@ "_npmVersion": "1.1.59", | ||
"directories": {}, | ||
"_shasum": "fe8091d468a373a0b0c9ff8bbfb3425c00973a1d", | ||
"_from": "ctype@0.5.2", | ||
"_resolved": "https://registry.npmjs.org/ctype/-/ctype-0.5.2.tgz", | ||
"readme": "ERROR: No README data found!" | ||
"_shasum": "82c18c2461f74114ef16c135224ad0b9144ca12f", | ||
"_from": "ctype@0.5.3", | ||
"_resolved": "https://registry.npmjs.org/ctype/-/ctype-0.5.3.tgz" | ||
} |
{ | ||
"name": "http-signature", | ||
"description": "Reference implementation of Joyent's HTTP Signature scheme.", | ||
"version": "0.10.1", | ||
"license": "MIT", | ||
"author": { | ||
"name": "Joyent, Inc" | ||
}, | ||
"name": "http-signature", | ||
"description": "Reference implementation of Joyent's HTTP Signature Scheme", | ||
"version": "0.10.0", | ||
"contributors": [ | ||
{ | ||
"name": "Mark Cavage", | ||
"email": "mcavage@gmail.com" | ||
}, | ||
{ | ||
"name": "David I. Lehn", | ||
"email": "dil@lehn.org" | ||
} | ||
], | ||
"repository": { | ||
@@ -12,2 +23,10 @@ "type": "git", | ||
}, | ||
"homepage": "https://github.com/joyent/node-http-signature/", | ||
"bugs": { | ||
"url": "https://github.com/joyent/node-http-signature/issues" | ||
}, | ||
"keywords": [ | ||
"https", | ||
"request" | ||
], | ||
"engines": { | ||
@@ -18,25 +37,21 @@ "node": ">=0.8" | ||
"scripts": { | ||
"test": "tap tst/*.js" | ||
"test": "tap test/*.js" | ||
}, | ||
"dependencies": { | ||
"assert-plus": "0.1.2", | ||
"assert-plus": "^0.1.5", | ||
"asn1": "0.1.11", | ||
"ctype": "0.5.2" | ||
"ctype": "0.5.3" | ||
}, | ||
"devDependencies": { | ||
"node-uuid": "1.4.0", | ||
"node-uuid": "^1.4.1", | ||
"tap": "0.4.2" | ||
}, | ||
"readme": "# node-http-signature\n\nnode-http-signature is a node.js library that has client and server components\nfor Joyent's [HTTP Signature Scheme](http_signing.md).\n\n## Usage\n\nNote the example below signs a request with the same key/cert used to start an\nHTTP server. This is almost certainly not what you actaully want, but is just\nused to illustrate the API calls; you will need to provide your own key\nmanagement in addition to this library.\n\n### Client\n\n var fs = require('fs');\n var https = require('https');\n var httpSignature = require('http-signature');\n\n var key = fs.readFileSync('./key.pem', 'ascii');\n\n var options = {\n host: 'localhost',\n port: 8443,\n path: '/',\n method: 'GET',\n headers: {}\n };\n\n // Adds a 'Date' header in, signs it, and adds the\n // 'Authorization' header in.\n var req = https.request(options, function(res) {\n console.log(res.statusCode);\n });\n\n\n httpSignature.sign(req, {\n key: key,\n keyId: './cert.pem'\n });\n\n req.end();\n\n### Server\n\n var fs = require('fs');\n var https = require('https');\n var httpSignature = require('http-signature');\n\n var options = {\n key: fs.readFileSync('./key.pem'),\n cert: fs.readFileSync('./cert.pem')\n };\n\n https.createServer(options, function (req, res) {\n var rc = 200;\n var parsed = httpSignature.parseRequest(req);\n var pub = fs.readFileSync(parsed.keyId, 'ascii');\n if (!httpSignature.verifySignature(parsed, pub))\n rc = 401;\n\n res.writeHead(rc);\n res.end();\n }).listen(8443);\n\n## Installation\n\n npm install http-signature\n\n## License\n\nMIT.\n\n## Bugs\n\nSee <https://github.com/joyent/node-http-signature/issues>.\n", | ||
"readmeFilename": "README.md", | ||
"_id": "http-signature@0.10.0", | ||
"dist": { | ||
"shasum": "1494e4f5000a83c0f11bcc12d6007c530cb99582", | ||
"tarball": "http://registry.npmjs.org/http-signature/-/http-signature-0.10.0.tgz" | ||
}, | ||
"_id": "http-signature@0.10.1", | ||
"_shasum": "4fbdac132559aa8323121e540779c0a012b27e66", | ||
"_resolved": "https://registry.npmjs.org/http-signature/-/http-signature-0.10.1.tgz", | ||
"_from": "http-signature@~0.10.0", | ||
"_npmVersion": "1.2.18", | ||
"_npmVersion": "1.4.28", | ||
"_npmUser": { | ||
"name": "mcavage", | ||
"email": "mcavage@gmail.com" | ||
"name": "pfmooney", | ||
"email": "patrick.f.mooney@gmail.com" | ||
}, | ||
@@ -47,11 +62,13 @@ "maintainers": [ | ||
"email": "mcavage@gmail.com" | ||
}, | ||
{ | ||
"name": "pfmooney", | ||
"email": "patrick.f.mooney@gmail.com" | ||
} | ||
], | ||
"directories": {}, | ||
"_shasum": "1494e4f5000a83c0f11bcc12d6007c530cb99582", | ||
"_resolved": "https://registry.npmjs.org/http-signature/-/http-signature-0.10.0.tgz", | ||
"bugs": { | ||
"url": "https://github.com/joyent/node-http-signature/issues" | ||
"dist": { | ||
"shasum": "4fbdac132559aa8323121e540779c0a012b27e66", | ||
"tarball": "http://registry.npmjs.org/http-signature/-/http-signature-0.10.1.tgz" | ||
}, | ||
"homepage": "https://github.com/joyent/node-http-signature" | ||
"directories": {} | ||
} |
@@ -9,3 +9,3 @@ # node-http-signature | ||
Note the example below signs a request with the same key/cert used to start an | ||
HTTP server. This is almost certainly not what you actaully want, but is just | ||
HTTP server. This is almost certainly not what you actually want, but is just | ||
used to illustrate the API calls; you will need to provide your own key | ||
@@ -16,51 +16,55 @@ management in addition to this library. | ||
var fs = require('fs'); | ||
var https = require('https'); | ||
var httpSignature = require('http-signature'); | ||
```js | ||
var fs = require('fs'); | ||
var https = require('https'); | ||
var httpSignature = require('http-signature'); | ||
var key = fs.readFileSync('./key.pem', 'ascii'); | ||
var key = fs.readFileSync('./key.pem', 'ascii'); | ||
var options = { | ||
host: 'localhost', | ||
port: 8443, | ||
path: '/', | ||
method: 'GET', | ||
headers: {} | ||
}; | ||
var options = { | ||
host: 'localhost', | ||
port: 8443, | ||
path: '/', | ||
method: 'GET', | ||
headers: {} | ||
}; | ||
// Adds a 'Date' header in, signs it, and adds the | ||
// 'Authorization' header in. | ||
var req = https.request(options, function(res) { | ||
console.log(res.statusCode); | ||
}); | ||
// Adds a 'Date' header in, signs it, and adds the | ||
// 'Authorization' header in. | ||
var req = https.request(options, function(res) { | ||
console.log(res.statusCode); | ||
}); | ||
httpSignature.sign(req, { | ||
key: key, | ||
keyId: './cert.pem' | ||
}); | ||
httpSignature.sign(req, { | ||
key: key, | ||
keyId: './cert.pem' | ||
}); | ||
req.end(); | ||
req.end(); | ||
``` | ||
### Server | ||
var fs = require('fs'); | ||
var https = require('https'); | ||
var httpSignature = require('http-signature'); | ||
```js | ||
var fs = require('fs'); | ||
var https = require('https'); | ||
var httpSignature = require('http-signature'); | ||
var options = { | ||
key: fs.readFileSync('./key.pem'), | ||
cert: fs.readFileSync('./cert.pem') | ||
}; | ||
var options = { | ||
key: fs.readFileSync('./key.pem'), | ||
cert: fs.readFileSync('./cert.pem') | ||
}; | ||
https.createServer(options, function (req, res) { | ||
var rc = 200; | ||
var parsed = httpSignature.parseRequest(req); | ||
var pub = fs.readFileSync(parsed.keyId, 'ascii'); | ||
if (!httpSignature.verifySignature(parsed, pub)) | ||
rc = 401; | ||
https.createServer(options, function (req, res) { | ||
var rc = 200; | ||
var parsed = httpSignature.parseRequest(req); | ||
var pub = fs.readFileSync(parsed.keyId, 'ascii'); | ||
if (!httpSignature.verifySignature(parsed, pub)) | ||
rc = 401; | ||
res.writeHead(rc); | ||
res.end(); | ||
}).listen(8443); | ||
res.writeHead(rc); | ||
res.end(); | ||
}).listen(8443); | ||
``` | ||
@@ -67,0 +71,0 @@ ## Installation |
@@ -47,5 +47,3 @@ { | ||
"_shasum": "4c1f228b5050837eba9d21f50c2e6e320624566e", | ||
"_resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.0.tgz", | ||
"readme": "ERROR: No README data found!", | ||
"homepage": "https://github.com/isaacs/json-stringify-safe" | ||
"_resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.0.tgz" | ||
} |
@@ -67,4 +67,3 @@ { | ||
"directories": {}, | ||
"_resolved": "https://registry.npmjs.org/mime-types/-/mime-types-1.0.2.tgz", | ||
"readme": "ERROR: No README data found!" | ||
"_resolved": "https://registry.npmjs.org/mime-types/-/mime-types-1.0.2.tgz" | ||
} |
@@ -1,2 +0,21 @@ | ||
Copyright (c) 2010-2012 Robert Kieffer | ||
MIT License - http://opensource.org/licenses/mit-license.php | ||
The MIT License (MIT) | ||
Copyright (c) 2010-2012 Robert Kieffer | ||
Permission is hereby granted, free of charge, to any person obtaining a copy | ||
of this software and associated documentation files (the "Software"), to deal | ||
in the Software without restriction, including without limitation the rights | ||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | ||
copies of the Software, and to permit persons to whom the Software is | ||
furnished to do so, subject to the following conditions: | ||
The above copyright notice and this permission notice shall be included in all | ||
copies or substantial portions of the Software. | ||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | ||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | ||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE | ||
SOFTWARE. |
@@ -20,2 +20,8 @@ { | ||
], | ||
"bin": { | ||
"uuid": "./bin/uuid" | ||
}, | ||
"scripts": { | ||
"test": "node test/test.js" | ||
}, | ||
"lib": ".", | ||
@@ -27,15 +33,18 @@ "main": "./uuid.js", | ||
}, | ||
"version": "1.4.1", | ||
"readme": "# node-uuid\n\nSimple, fast generation of [RFC4122](http://www.ietf.org/rfc/rfc4122.txt) UUIDS.\n\nFeatures:\n\n* Generate RFC4122 version 1 or version 4 UUIDs\n* Runs in node.js and all browsers.\n* Registered as a [ComponentJS](https://github.com/component/component) [component](https://github.com/component/component/wiki/Components) ('broofa/node-uuid').\n* Cryptographically strong random # generation on supporting platforms\n* 1.1K minified and gzip'ed (Want something smaller? Check this [crazy shit](https://gist.github.com/982883) out! )\n* [Annotated source code](http://broofa.github.com/node-uuid/docs/uuid.html)\n\n## Getting Started\n\nInstall it in your browser:\n\n```html\n<script src=\"uuid.js\"></script>\n```\n\nOr in node.js:\n\n```\nnpm install node-uuid\n```\n\n```javascript\nvar uuid = require('node-uuid');\n```\n\nThen create some ids ...\n\n```javascript\n// Generate a v1 (time-based) id\nuuid.v1(); // -> '6c84fb90-12c4-11e1-840d-7b25c5ee775a'\n\n// Generate a v4 (random) id\nuuid.v4(); // -> '110ec58a-a0f2-4ac4-8393-c866d813b8d1'\n```\n\n## API\n\n### uuid.v1([`options` [, `buffer` [, `offset`]]])\n\nGenerate and return a RFC4122 v1 (timestamp-based) UUID.\n\n* `options` - (Object) Optional uuid state to apply. Properties may include:\n\n * `node` - (Array) Node id as Array of 6 bytes (per 4.1.6). Default: Randomly generated ID. See note 1.\n * `clockseq` - (Number between 0 - 0x3fff) RFC clock sequence. Default: An internally maintained clockseq is used.\n * `msecs` - (Number | Date) Time in milliseconds since unix Epoch. Default: The current time is used.\n * `nsecs` - (Number between 0-9999) additional time, in 100-nanosecond units. Ignored if `msecs` is unspecified. Default: internal uuid counter is used, as per 4.2.1.2.\n\n* `buffer` - (Array | Buffer) Array or buffer where UUID bytes are to be written.\n* `offset` - (Number) Starting index in `buffer` at which to begin writing.\n\nReturns `buffer`, if specified, otherwise the string form of the UUID\n\nNotes:\n\n1. The randomly generated node id is only guaranteed to stay constant for the lifetime of the current JS runtime. (Future versions of this module may use persistent storage mechanisms to extend this guarantee.)\n\nExample: Generate string UUID with fully-specified options\n\n```javascript\nuuid.v1({\n node: [0x01, 0x23, 0x45, 0x67, 0x89, 0xab],\n clockseq: 0x1234,\n msecs: new Date('2011-11-01').getTime(),\n nsecs: 5678\n}); // -> \"710b962e-041c-11e1-9234-0123456789ab\"\n```\n\nExample: In-place generation of two binary IDs\n\n```javascript\n// Generate two ids in an array\nvar arr = new Array(32); // -> []\nuuid.v1(null, arr, 0); // -> [02 a2 ce 90 14 32 11 e1 85 58 0b 48 8e 4f c1 15]\nuuid.v1(null, arr, 16); // -> [02 a2 ce 90 14 32 11 e1 85 58 0b 48 8e 4f c1 15 02 a3 1c b0 14 32 11 e1 85 58 0b 48 8e 4f c1 15]\n\n// Optionally use uuid.unparse() to get stringify the ids\nuuid.unparse(buffer); // -> '02a2ce90-1432-11e1-8558-0b488e4fc115'\nuuid.unparse(buffer, 16) // -> '02a31cb0-1432-11e1-8558-0b488e4fc115'\n```\n\n### uuid.v4([`options` [, `buffer` [, `offset`]]])\n\nGenerate and return a RFC4122 v4 UUID.\n\n* `options` - (Object) Optional uuid state to apply. Properties may include:\n\n * `random` - (Number[16]) Array of 16 numbers (0-255) to use in place of randomly generated values\n * `rng` - (Function) Random # generator to use. Set to one of the built-in generators - `uuid.mathRNG` (all platforms), `uuid.nodeRNG` (node.js only), `uuid.whatwgRNG` (WebKit only) - or a custom function that returns an array[16] of byte values.\n\n* `buffer` - (Array | Buffer) Array or buffer where UUID bytes are to be written.\n* `offset` - (Number) Starting index in `buffer` at which to begin writing.\n\nReturns `buffer`, if specified, otherwise the string form of the UUID\n\nExample: Generate string UUID with fully-specified options\n\n```javascript\nuuid.v4({\n random: [\n 0x10, 0x91, 0x56, 0xbe, 0xc4, 0xfb, 0xc1, 0xea,\n 0x71, 0xb4, 0xef, 0xe1, 0x67, 0x1c, 0x58, 0x36\n ]\n});\n// -> \"109156be-c4fb-41ea-b1b4-efe1671c5836\"\n```\n\nExample: Generate two IDs in a single buffer\n\n```javascript\nvar buffer = new Array(32); // (or 'new Buffer' in node.js)\nuuid.v4(null, buffer, 0);\nuuid.v4(null, buffer, 16);\n```\n\n### uuid.parse(id[, buffer[, offset]])\n### uuid.unparse(buffer[, offset])\n\nParse and unparse UUIDs\n\n * `id` - (String) UUID(-like) string\n * `buffer` - (Array | Buffer) Array or buffer where UUID bytes are to be written. Default: A new Array or Buffer is used\n * `offset` - (Number) Starting index in `buffer` at which to begin writing. Default: 0\n\nExample parsing and unparsing a UUID string\n\n```javascript\nvar bytes = uuid.parse('797ff043-11eb-11e1-80d6-510998755d10'); // -> <Buffer 79 7f f0 43 11 eb 11 e1 80 d6 51 09 98 75 5d 10>\nvar string = uuid.unparse(bytes); // -> '797ff043-11eb-11e1-80d6-510998755d10'\n```\n\n### uuid.noConflict()\n\n(Browsers only) Set `uuid` property back to it's previous value.\n\nReturns the node-uuid object.\n\nExample:\n\n```javascript\nvar myUuid = uuid.noConflict();\nmyUuid.v1(); // -> '6c84fb90-12c4-11e1-840d-7b25c5ee775a'\n```\n\n## Deprecated APIs\n\nSupport for the following v1.2 APIs is available in v1.3, but is deprecated and will be removed in the next major version.\n\n### uuid([format [, buffer [, offset]]])\n\nuuid() has become uuid.v4(), and the `format` argument is now implicit in the `buffer` argument. (i.e. if you specify a buffer, the format is assumed to be binary).\n\n### uuid.BufferClass\n\nThe class of container created when generating binary uuid data if no buffer argument is specified. This is expected to go away, with no replacement API.\n\n## Testing\n\nIn node.js\n\n```\n> cd test\n> node test.js\n```\n\nIn Browser\n\n```\nopen test/test.html\n```\n\n### Benchmarking\n\nRequires node.js\n\n```\nnpm install uuid uuid-js\nnode benchmark/benchmark.js\n```\n\nFor a more complete discussion of node-uuid performance, please see the `benchmark/README.md` file, and the [benchmark wiki](https://github.com/broofa/node-uuid/wiki/Benchmark)\n\nFor browser performance [checkout the JSPerf tests](http://jsperf.com/node-uuid-performance).\n\n## Release notes\n\n### 1.4.0\n\n* Improved module context detection\n* Removed public RNG functions\n\n### 1.3.2\n\n* Improve tests and handling of v1() options (Issue #24)\n* Expose RNG option to allow for perf testing with different generators\n\n### 1.3.0\n\n* Support for version 1 ids, thanks to [@ctavan](https://github.com/ctavan)!\n* Support for node.js crypto API\n* De-emphasizing performance in favor of a) cryptographic quality PRNGs where available and b) more manageable code\n", | ||
"readmeFilename": "README.md", | ||
"version": "1.4.2", | ||
"licenses": [ | ||
{ | ||
"type": "MIT", | ||
"url": "https://raw.github.com/broofa/node-uuid/master/LICENSE.md" | ||
} | ||
], | ||
"gitHead": "14c42d2568977f7ddfc02399bd2a6b09e2cfbe5f", | ||
"bugs": { | ||
"url": "https://github.com/broofa/node-uuid/issues" | ||
}, | ||
"_id": "node-uuid@1.4.1", | ||
"dist": { | ||
"shasum": "39aef510e5889a3dca9c895b506c73aae1bac048", | ||
"tarball": "http://registry.npmjs.org/node-uuid/-/node-uuid-1.4.1.tgz" | ||
}, | ||
"homepage": "https://github.com/broofa/node-uuid", | ||
"_id": "node-uuid@1.4.2", | ||
"_shasum": "907db3d11b7b6a2cf4f905fb7199f14ae7379ba0", | ||
"_from": "node-uuid@~1.4.0", | ||
"_npmVersion": "1.3.6", | ||
"_npmVersion": "1.4.28", | ||
"_npmUser": { | ||
@@ -51,6 +60,8 @@ "name": "broofa", | ||
], | ||
"dist": { | ||
"shasum": "907db3d11b7b6a2cf4f905fb7199f14ae7379ba0", | ||
"tarball": "http://registry.npmjs.org/node-uuid/-/node-uuid-1.4.2.tgz" | ||
}, | ||
"directories": {}, | ||
"_shasum": "39aef510e5889a3dca9c895b506c73aae1bac048", | ||
"_resolved": "https://registry.npmjs.org/node-uuid/-/node-uuid-1.4.1.tgz", | ||
"homepage": "https://github.com/broofa/node-uuid" | ||
"_resolved": "https://registry.npmjs.org/node-uuid/-/node-uuid-1.4.2.tgz" | ||
} |
@@ -13,2 +13,3 @@ # node-uuid | ||
* [Annotated source code](http://broofa.github.com/node-uuid/docs/uuid.html) | ||
* Comes with a Command Line Interface for generating uuids on the command line | ||
@@ -164,2 +165,38 @@ ## Getting Started | ||
## Command Line Interface | ||
To use the executable, it's probably best to install this library globally. | ||
`npm install -g node-uuid` | ||
Usage: | ||
``` | ||
USAGE: uuid [version] [options] | ||
options: | ||
--help Display this message and exit | ||
``` | ||
`version` must be an RFC4122 version that is supported by this library, which is currently version 1 and version 4 (denoted by "v1" and "v4", respectively). `version` defaults to version 4 when not supplied. | ||
### Examples | ||
``` | ||
> uuid | ||
3a91f950-dec8-4688-ba14-5b7bbfc7a563 | ||
``` | ||
``` | ||
> uuid v1 | ||
9d0b43e0-7696-11e3-964b-250efa37a98e | ||
``` | ||
``` | ||
> uuid v4 | ||
6790ac7c-24ac-4f98-8464-42f6d98a53ae | ||
``` | ||
## Testing | ||
@@ -170,4 +207,3 @@ | ||
``` | ||
> cd test | ||
> node test.js | ||
npm test | ||
``` | ||
@@ -174,0 +210,0 @@ |
@@ -17,5 +17,5 @@ // uuid.js | ||
// Moderately fast, high quality | ||
if (typeof(require) == 'function') { | ||
if (typeof(_global.require) == 'function') { | ||
try { | ||
var _rb = require('crypto').randomBytes; | ||
var _rb = _global.require('crypto').randomBytes; | ||
_rng = _rb && function() {return _rb(16);}; | ||
@@ -53,3 +53,3 @@ } catch(e) {} | ||
// Buffer class to use | ||
var BufferClass = typeof(Buffer) == 'function' ? Buffer : Array; | ||
var BufferClass = typeof(_global.Buffer) == 'function' ? _global.Buffer : Array; | ||
@@ -56,0 +56,0 @@ // Maps for number <-> hex string conversion |
@@ -47,4 +47,3 @@ { | ||
"directories": {}, | ||
"_resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.5.0.tgz", | ||
"readme": "ERROR: No README data found!" | ||
"_resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.5.0.tgz" | ||
} |
@@ -43,7 +43,3 @@ { | ||
"_from": "stringstream@~0.0.4", | ||
"_resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.4.tgz", | ||
"bugs": { | ||
"url": "https://github.com/mhart/StringStream/issues" | ||
}, | ||
"homepage": "https://github.com/mhart/StringStream" | ||
"_resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.4.tgz" | ||
} |
@@ -79,4 +79,3 @@ { | ||
"directories": {}, | ||
"_resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", | ||
"readme": "ERROR: No README data found!" | ||
"_resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz" | ||
} |
@@ -43,4 +43,3 @@ { | ||
"_shasum": "b1184e312ffbcf70b3b4c78e8c219de7ebb1c550", | ||
"_resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.4.0.tgz", | ||
"readme": "ERROR: No README data found!" | ||
"_resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.4.0.tgz" | ||
} |
@@ -10,3 +10,3 @@ { | ||
], | ||
"version": "2.48.0", | ||
"version": "2.51.0", | ||
"author": { | ||
@@ -30,5 +30,5 @@ "name": "Mikeal Rogers", | ||
"bl": "~0.9.0", | ||
"caseless": "~0.7.0", | ||
"caseless": "~0.8.0", | ||
"forever-agent": "~0.5.0", | ||
"form-data": "~0.1.0", | ||
"form-data": "~0.2.0", | ||
"json-stringify-safe": "~5.0.0", | ||
@@ -48,7 +48,16 @@ "mime-types": "~1.0.1", | ||
"scripts": { | ||
"test": "npm run lint && node node_modules/.bin/taper tests/test-*.js", | ||
"test": "npm run lint && node node_modules/.bin/taper tests/test-*.js && npm run test-browser", | ||
"test-browser": "browserify tests/browser/test.js -o tests/browser/test-browser.js && karma start tests/browser/karma.conf.js", | ||
"lint": "node node_modules/.bin/eslint lib/ *.js tests/ && echo Lint passed." | ||
}, | ||
"devDependencies": { | ||
"browserify": "~5.9.1", | ||
"coveralls": "~2.11.2", | ||
"eslint": "0.5.1", | ||
"function-bind": "~1.0.0", | ||
"istanbul": "~0.3.2", | ||
"karma": "~0.12.21", | ||
"karma-cli": "0.0.4", | ||
"karma-phantomjs-launcher": "~0.1.4", | ||
"karma-tap": "~1.0.1", | ||
"rimraf": "~2.2.8", | ||
@@ -58,6 +67,6 @@ "tape": "~3.0.0", | ||
}, | ||
"gitHead": "0d8644ec6e0699a4dba8aad11bc0c10a101c0aec", | ||
"gitHead": "1c8aca6a9205df58660c676005fb8ec4603d5265", | ||
"homepage": "https://github.com/request/request", | ||
"_id": "request@2.48.0", | ||
"_shasum": "3ae2e091c9698282d58a0e6989ece2638f0f1f28", | ||
"_id": "request@2.51.0", | ||
"_shasum": "35d00bbecc012e55f907b1bd9e0dbd577bfef26e", | ||
"_from": "request@2.x", | ||
@@ -77,11 +86,14 @@ "_npmVersion": "1.4.14", | ||
"email": "jnylen@gmail.com" | ||
}, | ||
{ | ||
"name": "fredkschott", | ||
"email": "fkschott@gmail.com" | ||
} | ||
], | ||
"dist": { | ||
"shasum": "3ae2e091c9698282d58a0e6989ece2638f0f1f28", | ||
"tarball": "http://registry.npmjs.org/request/-/request-2.48.0.tgz" | ||
"shasum": "35d00bbecc012e55f907b1bd9e0dbd577bfef26e", | ||
"tarball": "http://registry.npmjs.org/request/-/request-2.51.0.tgz" | ||
}, | ||
"directories": {}, | ||
"_resolved": "https://registry.npmjs.org/request/-/request-2.48.0.tgz", | ||
"readme": "ERROR: No README data found!" | ||
"_resolved": "https://registry.npmjs.org/request/-/request-2.51.0.tgz" | ||
} |
@@ -259,6 +259,7 @@ # Request — Simplified HTTP client | ||
attachments: [ | ||
fs.createReadStream(__dirname + '/attacment1.jpg'), | ||
fs.createReadStream(__dirname + '/attachment1.jpg'), | ||
fs.createReadStream(__dirname + '/attachment2.jpg') | ||
], | ||
// Pass optional meta-data with an 'options' object with style: {value: DATA, options: OPTIONS} | ||
// Use case: for some types of streams, you'll need to provide "file"-related information manually. | ||
// See the `form-data` README for more information about options: https://github.com/felixge/node-form-data | ||
@@ -281,3 +282,3 @@ custom_file: { | ||
For advanced cases, you can the form-data object itself via `r.form()`. This can be modified until the request is fired on the next cycle of the event-loop. (Note that this calling `form()` will clear the currently set form data for that request.) | ||
For advanced cases, you can access the form-data object itself via `r.form()`. This can be modified until the request is fired on the next cycle of the event-loop. (Note that this calling `form()` will clear the currently set form data for that request.) | ||
@@ -318,3 +319,3 @@ ```javascript | ||
{ | ||
'content-type': 'application/json', | ||
'content-type': 'application/json', | ||
body: JSON.stringify({foo: 'bar', _attachments: {'message.txt': {follows: true, length: 18, 'content_type': 'text/plain' }}}) | ||
@@ -543,2 +544,3 @@ }, | ||
* `json` - sets `body` but to JSON representation of value and adds `Content-type: application/json` header. Additionally, parses the response body as JSON. | ||
* `jsonReviver` - a [reviver function](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse) that will be passed to `JSON.parse()` when parsing a JSON response body. | ||
* `preambleCRLF` - append a newline/CRLF before the boundary of your `multipart/form-data` request. | ||
@@ -545,0 +547,0 @@ * `postambleCRLF` - append a newline/CRLF at the end of the boundary of your `multipart/form-data` request. |
@@ -202,3 +202,4 @@ 'use strict' | ||
noProxyItem = noProxyItem.replace(/^\.*/, '.') | ||
if (hostname.indexOf(noProxyItem) === hostname.length - noProxyItem.length) { | ||
var isMatchedAt = hostname.indexOf(noProxyItem) | ||
if (isMatchedAt > -1 && isMatchedAt === hostname.length - noProxyItem.length) { | ||
return null | ||
@@ -1311,3 +1312,3 @@ } | ||
try { | ||
response.body = JSON.parse(response.body) | ||
response.body = JSON.parse(response.body, self._jsonReviver) | ||
} catch (e) {} | ||
@@ -1434,4 +1435,8 @@ } | ||
if (chunked) { | ||
self.setHeader('transfer-encoding', 'chunked') | ||
} | ||
var headerName = self.hasHeader('content-type') | ||
if (!headerName || headerName.indexOf('multipart') === -1) { | ||
if (!headerName || self.headers[headerName].indexOf('multipart') === -1) { | ||
self.setHeader('content-type', 'multipart/related; boundary=' + self.boundary) | ||
@@ -1483,3 +1488,3 @@ } else { | ||
if (typeof val === 'boolean') { | ||
if (typeof self.body === 'object') { | ||
if (self.body !== undefined && self.getHeader('content-type') !== 'application/x-www-form-urlencoded') { | ||
self.body = safeStringify(self.body) | ||
@@ -1497,2 +1502,6 @@ if (!self.hasHeader('content-type')) { | ||
if (typeof self.jsonReviver === 'function') { | ||
self._jsonReviver = self.jsonReviver | ||
} | ||
return self | ||
@@ -1499,0 +1508,0 @@ } |
@@ -71,4 +71,3 @@ { | ||
"directories": {}, | ||
"_resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.2.8.tgz", | ||
"readme": "ERROR: No README data found!" | ||
"_resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.2.8.tgz" | ||
} |
{ | ||
"name": "semver", | ||
"version": "4.1.0", | ||
"version": "4.2.0", | ||
"description": "The semantic version parser used by npm.", | ||
@@ -24,3 +24,3 @@ "main": "semver.js", | ||
}, | ||
"gitHead": "f8db569b9fd00788d14064aaf81854ed81e1337a", | ||
"gitHead": "f353d3337dd9bef990b6873e281342260b4e63ae", | ||
"bugs": { | ||
@@ -30,7 +30,7 @@ "url": "https://github.com/isaacs/node-semver/issues" | ||
"homepage": "https://github.com/isaacs/node-semver", | ||
"_id": "semver@4.1.0", | ||
"_shasum": "bc80a9ff68532814362cc3cfda3c7b75ed9c321c", | ||
"_from": "semver@~4.1.0", | ||
"_npmVersion": "2.1.3", | ||
"_nodeVersion": "0.10.31", | ||
"_id": "semver@4.2.0", | ||
"_shasum": "a571fd4adbe974fe32bd9cb4c5e249606f498423", | ||
"_from": "semver@~4.2.0", | ||
"_npmVersion": "2.1.14", | ||
"_nodeVersion": "0.10.33", | ||
"_npmUser": { | ||
@@ -51,8 +51,7 @@ "name": "isaacs", | ||
"dist": { | ||
"shasum": "bc80a9ff68532814362cc3cfda3c7b75ed9c321c", | ||
"tarball": "http://registry.npmjs.org/semver/-/semver-4.1.0.tgz" | ||
"shasum": "a571fd4adbe974fe32bd9cb4c5e249606f498423", | ||
"tarball": "http://registry.npmjs.org/semver/-/semver-4.2.0.tgz" | ||
}, | ||
"directories": {}, | ||
"_resolved": "https://registry.npmjs.org/semver/-/semver-4.1.0.tgz", | ||
"readme": "ERROR: No README data found!" | ||
"_resolved": "https://registry.npmjs.org/semver/-/semver-4.2.0.tgz" | ||
} |
@@ -19,8 +19,8 @@ semver(1) -- The semantic versioner for npm | ||
Usage: semver <version> [<version> [...]] [-r <range> | -i <inc> | -d <dec>] | ||
Usage: semver <version> [<version> [...]] [-r <range> | -i <inc> | --preid <identifier> | -l | -rv] | ||
Test if version(s) satisfy the supplied range(s), and sort them. | ||
Multiple versions or ranges may be supplied, unless increment | ||
or decrement options are specified. In that case, only a single | ||
version may be used, and it is incremented by the specified level | ||
option is specified. In that case, only a single version may | ||
be used, and it is incremented by the specified level | ||
@@ -105,2 +105,26 @@ Program exits successfully if any valid version satisfies | ||
#### Prerelease Identifiers | ||
The method `.inc` takes an additional `identifier` string argument that | ||
will append the value of the string as a prerelease identifier: | ||
````javascript | ||
> semver.inc('1.2.3', 'pre', 'beta') | ||
'1.2.4-beta.0' | ||
``` | ||
command-line example: | ||
```shell | ||
$ semver 1.2.3 -i prerelease --preid beta | ||
1.2.4-beta.0 | ||
``` | ||
Which then can be used to increment further: | ||
```shell | ||
$ semver 1.2.4-beta.0 -i prerelease | ||
1.2.4-beta.1 | ||
``` | ||
### Advanced Range Syntax | ||
@@ -166,4 +190,2 @@ | ||
Note: this is the same as the `~>` operator in rubygems. | ||
#### Caret Ranges `^1.2.3` `^0.2.5` `^0.0.4` | ||
@@ -251,2 +273,5 @@ | ||
in descending order when passed to `Array.sort()`. | ||
* `diff(v1, v2)`: Returns difference between two versions by the release type | ||
(`major`, `premajor`, `minor`, `preminor`, `patch`, `prepatch`, or `prerelease`), | ||
or null if the versions are the same. | ||
@@ -253,0 +278,0 @@ |
@@ -457,2 +457,29 @@ ;(function(exports) { | ||
exports.diff = diff; | ||
function diff(version1, version2) { | ||
if (eq(version1, version2)) { | ||
return null; | ||
} else { | ||
var v1 = parse(version1); | ||
var v2 = parse(version2); | ||
if (v1.prerelease.length || v2.prerelease.length) { | ||
for (var key in v1) { | ||
if (key === 'major' || key === 'minor' || key === 'patch') { | ||
if (v1[key] !== v2[key]) { | ||
return 'pre'+key; | ||
} | ||
} | ||
} | ||
return 'prerelease'; | ||
} | ||
for (var key in v1) { | ||
if (key === 'major' || key === 'minor' || key === 'patch') { | ||
if (v1[key] !== v2[key]) { | ||
return key; | ||
} | ||
} | ||
} | ||
} | ||
} | ||
exports.compareIdentifiers = compareIdentifiers; | ||
@@ -459,0 +486,0 @@ |
@@ -467,2 +467,29 @@ // export the class if we are in a Node-like system. | ||
exports.diff = diff; | ||
function diff(version1, version2) { | ||
if (eq(version1, version2)) { | ||
return null; | ||
} else { | ||
var v1 = parse(version1); | ||
var v2 = parse(version2); | ||
if (v1.prerelease.length || v2.prerelease.length) { | ||
for (var key in v1) { | ||
if (key === 'major' || key === 'minor' || key === 'patch') { | ||
if (v1[key] !== v2[key]) { | ||
return 'pre'+key; | ||
} | ||
} | ||
} | ||
return 'prerelease'; | ||
} | ||
for (var key in v1) { | ||
if (key === 'major' || key === 'minor' || key === 'patch') { | ||
if (v1[key] !== v2[key]) { | ||
return key; | ||
} | ||
} | ||
} | ||
} | ||
} | ||
exports.compareIdentifiers = compareIdentifiers; | ||
@@ -469,0 +496,0 @@ |
@@ -1,1 +0,1 @@ | ||
(function(e){if(typeof module==="object"&&module.exports===e)e=module.exports=H;e.SEMVER_SPEC_VERSION="2.0.0";var r=e.re=[];var t=e.src=[];var n=0;var i=n++;t[i]="0|[1-9]\\d*";var s=n++;t[s]="[0-9]+";var a=n++;t[a]="\\d*[a-zA-Z-][a-zA-Z0-9-]*";var o=n++;t[o]="("+t[i]+")\\."+"("+t[i]+")\\."+"("+t[i]+")";var f=n++;t[f]="("+t[s]+")\\."+"("+t[s]+")\\."+"("+t[s]+")";var u=n++;t[u]="(?:"+t[i]+"|"+t[a]+")";var l=n++;t[l]="(?:"+t[s]+"|"+t[a]+")";var p=n++;t[p]="(?:-("+t[u]+"(?:\\."+t[u]+")*))";var c=n++;t[c]="(?:-?("+t[l]+"(?:\\."+t[l]+")*))";var h=n++;t[h]="[0-9A-Za-z-]+";var v=n++;t[v]="(?:\\+("+t[h]+"(?:\\."+t[h]+")*))";var m=n++;var g="v?"+t[o]+t[p]+"?"+t[v]+"?";t[m]="^"+g+"$";var w="[v=\\s]*"+t[f]+t[c]+"?"+t[v]+"?";var d=n++;t[d]="^"+w+"$";var y=n++;t[y]="((?:<|>)?=?)";var b=n++;t[b]=t[s]+"|x|X|\\*";var j=n++;t[j]=t[i]+"|x|X|\\*";var $=n++;t[$]="[v=\\s]*("+t[j]+")"+"(?:\\.("+t[j]+")"+"(?:\\.("+t[j]+")"+"(?:"+t[p]+")?"+t[v]+"?"+")?)?";var k=n++;t[k]="[v=\\s]*("+t[b]+")"+"(?:\\.("+t[b]+")"+"(?:\\.("+t[b]+")"+"(?:"+t[c]+")?"+t[v]+"?"+")?)?";var E=n++;t[E]="^"+t[y]+"\\s*"+t[$]+"$";var x=n++;t[x]="^"+t[y]+"\\s*"+t[k]+"$";var R=n++;t[R]="(?:~>?)";var S=n++;t[S]="(\\s*)"+t[R]+"\\s+";r[S]=new RegExp(t[S],"g");var V="$1~";var I=n++;t[I]="^"+t[R]+t[$]+"$";var T=n++;t[T]="^"+t[R]+t[k]+"$";var A=n++;t[A]="(?:\\^)";var C=n++;t[C]="(\\s*)"+t[A]+"\\s+";r[C]=new RegExp(t[C],"g");var M="$1^";var z=n++;t[z]="^"+t[A]+t[$]+"$";var N=n++;t[N]="^"+t[A]+t[k]+"$";var P=n++;t[P]="^"+t[y]+"\\s*("+w+")$|^$";var Z=n++;t[Z]="^"+t[y]+"\\s*("+g+")$|^$";var q=n++;t[q]="(\\s*)"+t[y]+"\\s*("+w+"|"+t[$]+")";r[q]=new RegExp(t[q],"g");var L="$1$2$3";var X=n++;t[X]="^\\s*("+t[$]+")"+"\\s+-\\s+"+"("+t[$]+")"+"\\s*$";var _=n++;t[_]="^\\s*("+t[k]+")"+"\\s+-\\s+"+"("+t[k]+")"+"\\s*$";var O=n++;t[O]="(<|>)?=?\\s*\\*";for(var B=0;B<n;B++){if(!r[B])r[B]=new RegExp(t[B])}e.parse=D;function D(e,t){var n=t?r[d]:r[m];return n.test(e)?new H(e,t):null}e.valid=F;function F(e,r){var t=D(e,r);return t?t.version:null}e.clean=G;function G(e,r){var t=D(e.trim().replace(/^[=v]+/,""),r);return t?t.version:null}e.SemVer=H;function H(e,t){if(e instanceof H){if(e.loose===t)return e;else e=e.version}else if(typeof e!=="string"){throw new TypeError("Invalid Version: "+e)}if(!(this instanceof H))return new H(e,t);this.loose=t;var n=e.trim().match(t?r[d]:r[m]);if(!n)throw new TypeError("Invalid Version: "+e);this.raw=e;this.major=+n[1];this.minor=+n[2];this.patch=+n[3];if(!n[4])this.prerelease=[];else this.prerelease=n[4].split(".").map(function(e){return/^[0-9]+$/.test(e)?+e:e});this.build=n[5]?n[5].split("."):[];this.format()}H.prototype.format=function(){this.version=this.major+"."+this.minor+"."+this.patch;if(this.prerelease.length)this.version+="-"+this.prerelease.join(".");return this.version};H.prototype.inspect=function(){return'<SemVer "'+this+'">'};H.prototype.toString=function(){return this.version};H.prototype.compare=function(e){if(!(e instanceof H))e=new H(e,this.loose);return this.compareMain(e)||this.comparePre(e)};H.prototype.compareMain=function(e){if(!(e instanceof H))e=new H(e,this.loose);return Q(this.major,e.major)||Q(this.minor,e.minor)||Q(this.patch,e.patch)};H.prototype.comparePre=function(e){if(!(e instanceof H))e=new H(e,this.loose);if(this.prerelease.length&&!e.prerelease.length)return-1;else if(!this.prerelease.length&&e.prerelease.length)return 1;else if(!this.prerelease.length&&!e.prerelease.length)return 0;var r=0;do{var t=this.prerelease[r];var n=e.prerelease[r];if(t===undefined&&n===undefined)return 0;else if(n===undefined)return 1;else if(t===undefined)return-1;else if(t===n)continue;else return Q(t,n)}while(++r)};H.prototype.inc=function(e,r){switch(e){case"premajor":this.prerelease.length=0;this.patch=0;this.minor=0;this.major++;this.inc("pre",r);break;case"preminor":this.prerelease.length=0;this.patch=0;this.minor++;this.inc("pre",r);break;case"prepatch":this.prerelease.length=0;this.inc("patch",r);this.inc("pre",r);break;case"prerelease":if(this.prerelease.length===0)this.inc("patch",r);this.inc("pre",r);break;case"major":if(this.minor!==0||this.patch!==0||this.prerelease.length===0)this.major++;this.minor=0;this.patch=0;this.prerelease=[];break;case"minor":if(this.patch!==0||this.prerelease.length===0)this.minor++;this.patch=0;this.prerelease=[];break;case"patch":if(this.prerelease.length===0)this.patch++;this.prerelease=[];break;case"pre":if(this.prerelease.length===0)this.prerelease=[0];else{var t=this.prerelease.length;while(--t>=0){if(typeof this.prerelease[t]==="number"){this.prerelease[t]++;t=-2}}if(t===-1)this.prerelease.push(0)}if(r){if(this.prerelease[0]===r){if(isNaN(this.prerelease[1]))this.prerelease=[r,0]}else this.prerelease=[r,0]}break;default:throw new Error("invalid increment argument: "+e)}this.format();return this};e.inc=J;function J(e,r,t,n){if(typeof t==="string"){n=t;t=undefined}try{return new H(e,t).inc(r,n).version}catch(i){return null}}e.compareIdentifiers=Q;var K=/^[0-9]+$/;function Q(e,r){var t=K.test(e);var n=K.test(r);if(t&&n){e=+e;r=+r}return t&&!n?-1:n&&!t?1:e<r?-1:e>r?1:0}e.rcompareIdentifiers=U;function U(e,r){return Q(r,e)}e.compare=W;function W(e,r,t){return new H(e,t).compare(r)}e.compareLoose=Y;function Y(e,r){return W(e,r,true)}e.rcompare=er;function er(e,r,t){return W(r,e,t)}e.sort=rr;function rr(r,t){return r.sort(function(r,n){return e.compare(r,n,t)})}e.rsort=tr;function tr(r,t){return r.sort(function(r,n){return e.rcompare(r,n,t)})}e.gt=nr;function nr(e,r,t){return W(e,r,t)>0}e.lt=ir;function ir(e,r,t){return W(e,r,t)<0}e.eq=sr;function sr(e,r,t){return W(e,r,t)===0}e.neq=ar;function ar(e,r,t){return W(e,r,t)!==0}e.gte=or;function or(e,r,t){return W(e,r,t)>=0}e.lte=fr;function fr(e,r,t){return W(e,r,t)<=0}e.cmp=ur;function ur(e,r,t,n){var i;switch(r){case"===":if(typeof e==="object")e=e.version;if(typeof t==="object")t=t.version;i=e===t;break;case"!==":if(typeof e==="object")e=e.version;if(typeof t==="object")t=t.version;i=e!==t;break;case"":case"=":case"==":i=sr(e,t,n);break;case"!=":i=ar(e,t,n);break;case">":i=nr(e,t,n);break;case">=":i=or(e,t,n);break;case"<":i=ir(e,t,n);break;case"<=":i=fr(e,t,n);break;default:throw new TypeError("Invalid operator: "+r)}return i}e.Comparator=lr;function lr(e,r){if(e instanceof lr){if(e.loose===r)return e;else e=e.value}if(!(this instanceof lr))return new lr(e,r);this.loose=r;this.parse(e);if(this.semver===pr)this.value="";else this.value=this.operator+this.semver.version}var pr={};lr.prototype.parse=function(e){var t=this.loose?r[P]:r[Z];var n=e.match(t);if(!n)throw new TypeError("Invalid comparator: "+e);this.operator=n[1];if(this.operator==="=")this.operator="";if(!n[2])this.semver=pr;else this.semver=new H(n[2],this.loose)};lr.prototype.inspect=function(){return'<SemVer Comparator "'+this+'">'};lr.prototype.toString=function(){return this.value};lr.prototype.test=function(e){if(this.semver===pr)return true;if(typeof e==="string")e=new H(e,this.loose);return ur(e,this.operator,this.semver,this.loose)};e.Range=cr;function cr(e,r){if(e instanceof cr&&e.loose===r)return e;if(!(this instanceof cr))return new cr(e,r);this.loose=r;this.raw=e;this.set=e.split(/\s*\|\|\s*/).map(function(e){return this.parseRange(e.trim())},this).filter(function(e){return e.length});if(!this.set.length){throw new TypeError("Invalid SemVer Range: "+e)}this.format()}cr.prototype.inspect=function(){return'<SemVer Range "'+this.range+'">'};cr.prototype.format=function(){this.range=this.set.map(function(e){return e.join(" ").trim()}).join("||").trim();return this.range};cr.prototype.toString=function(){return this.range};cr.prototype.parseRange=function(e){var t=this.loose;e=e.trim();var n=t?r[_]:r[X];e=e.replace(n,kr);e=e.replace(r[q],L);e=e.replace(r[S],V);e=e.replace(r[C],M);e=e.split(/\s+/).join(" ");var i=t?r[P]:r[Z];var s=e.split(" ").map(function(e){return vr(e,t)}).join(" ").split(/\s+/);if(this.loose){s=s.filter(function(e){return!!e.match(i)})}s=s.map(function(e){return new lr(e,t)});return s};e.toComparators=hr;function hr(e,r){return new cr(e,r).set.map(function(e){return e.map(function(e){return e.value}).join(" ").trim().split(" ")})}function vr(e,r){e=dr(e,r);e=gr(e,r);e=br(e,r);e=$r(e,r);return e}function mr(e){return!e||e.toLowerCase()==="x"||e==="*"}function gr(e,r){return e.trim().split(/\s+/).map(function(e){return wr(e,r)}).join(" ")}function wr(e,t){var n=t?r[T]:r[I];return e.replace(n,function(e,r,t,n,i){var s;if(mr(r))s="";else if(mr(t))s=">="+r+".0.0 <"+(+r+1)+".0.0";else if(mr(n))s=">="+r+"."+t+".0 <"+r+"."+(+t+1)+".0";else if(i){if(i.charAt(0)!=="-")i="-"+i;s=">="+r+"."+t+"."+n+i+" <"+r+"."+(+t+1)+".0"}else s=">="+r+"."+t+"."+n+" <"+r+"."+(+t+1)+".0";return s})}function dr(e,r){return e.trim().split(/\s+/).map(function(e){return yr(e,r)}).join(" ")}function yr(e,t){var n=t?r[N]:r[z];return e.replace(n,function(e,r,t,n,i){var s;if(mr(r))s="";else if(mr(t))s=">="+r+".0.0 <"+(+r+1)+".0.0";else if(mr(n)){if(r==="0")s=">="+r+"."+t+".0 <"+r+"."+(+t+1)+".0";else s=">="+r+"."+t+".0 <"+(+r+1)+".0.0"}else if(i){if(i.charAt(0)!=="-")i="-"+i;if(r==="0"){if(t==="0")s=">="+r+"."+t+"."+n+i+" <"+r+"."+t+"."+(+n+1);else s=">="+r+"."+t+"."+n+i+" <"+r+"."+(+t+1)+".0"}else s=">="+r+"."+t+"."+n+i+" <"+(+r+1)+".0.0"}else{if(r==="0"){if(t==="0")s=">="+r+"."+t+"."+n+" <"+r+"."+t+"."+(+n+1);else s=">="+r+"."+t+"."+n+" <"+r+"."+(+t+1)+".0"}else s=">="+r+"."+t+"."+n+" <"+(+r+1)+".0.0"}return s})}function br(e,r){return e.split(/\s+/).map(function(e){return jr(e,r)}).join(" ")}function jr(e,t){e=e.trim();var n=t?r[x]:r[E];return e.replace(n,function(e,r,t,n,i,s){var a=mr(t);var o=a||mr(n);var f=o||mr(i);var u=f;if(r==="="&&u)r="";if(a){if(r===">"||r==="<"){e="<0.0.0"}else{e="*"}}else if(r&&u){if(o)n=0;if(f)i=0;if(r===">"){r=">=";if(o){t=+t+1;n=0;i=0}else if(f){n=+n+1;i=0}}else if(r==="<="){r="<";if(o)t=+t+1;else n=+n+1}e=r+t+"."+n+"."+i}else if(o){e=">="+t+".0.0 <"+(+t+1)+".0.0"}else if(f){e=">="+t+"."+n+".0 <"+t+"."+(+n+1)+".0"}return e})}function $r(e,t){return e.trim().replace(r[O],"")}function kr(e,r,t,n,i,s,a,o,f,u,l,p,c){if(mr(t))r="";else if(mr(n))r=">="+t+".0.0";else if(mr(i))r=">="+t+"."+n+".0";else r=">="+r;if(mr(f))o="";else if(mr(u))o="<"+(+f+1)+".0.0";else if(mr(l))o="<"+f+"."+(+u+1)+".0";else if(p)o="<="+f+"."+u+"."+l+"-"+p;else o="<="+o;return(r+" "+o).trim()}cr.prototype.test=function(e){if(!e)return false;if(typeof e==="string")e=new H(e,this.loose);for(var r=0;r<this.set.length;r++){if(Er(this.set[r],e))return true}return false};function Er(e,r){for(var t=0;t<e.length;t++){if(!e[t].test(r))return false}if(r.prerelease.length){for(var t=0;t<e.length;t++){if(e[t].semver===pr)return true;if(e[t].semver.prerelease.length>0){var n=e[t].semver;if(n.major===r.major&&n.minor===r.minor&&n.patch===r.patch)return true}}return false}return true}e.satisfies=xr;function xr(e,r,t){try{r=new cr(r,t)}catch(n){return false}return r.test(e)}e.maxSatisfying=Rr;function Rr(e,r,t){return e.filter(function(e){return xr(e,r,t)}).sort(function(e,r){return er(e,r,t)})[0]||null}e.validRange=Sr;function Sr(e,r){try{return new cr(e,r).range||"*"}catch(t){return null}}e.ltr=Vr;function Vr(e,r,t){return Tr(e,r,"<",t)}e.gtr=Ir;function Ir(e,r,t){return Tr(e,r,">",t)}e.outside=Tr;function Tr(e,r,t,n){e=new H(e,n);r=new cr(r,n);var i,s,a,o,f;switch(t){case">":i=nr;s=fr;a=ir;o=">";f=">=";break;case"<":i=ir;s=or;a=nr;o="<";f="<=";break;default:throw new TypeError('Must provide a hilo val of "<" or ">"')}if(xr(e,r,n)){return false}for(var u=0;u<r.set.length;++u){var l=r.set[u];var p=null;var c=null;l.forEach(function(e){p=p||e;c=c||e;if(i(e.semver,p.semver,n)){p=e}else if(a(e.semver,c.semver,n)){c=e}});if(p.operator===o||p.operator===f){return false}if((!c.operator||c.operator===o)&&s(e,c.semver)){return false}else if(c.operator===f&&a(e,c.semver)){return false}}return true}if(typeof define==="function"&&define.amd)define(e)})(typeof exports==="object"?exports:typeof define==="function"&&define.amd?{}:semver={}); | ||
(function(e){if(typeof module==="object"&&module.exports===e)e=module.exports=H;e.SEMVER_SPEC_VERSION="2.0.0";var r=e.re=[];var t=e.src=[];var n=0;var i=n++;t[i]="0|[1-9]\\d*";var s=n++;t[s]="[0-9]+";var a=n++;t[a]="\\d*[a-zA-Z-][a-zA-Z0-9-]*";var o=n++;t[o]="("+t[i]+")\\."+"("+t[i]+")\\."+"("+t[i]+")";var f=n++;t[f]="("+t[s]+")\\."+"("+t[s]+")\\."+"("+t[s]+")";var u=n++;t[u]="(?:"+t[i]+"|"+t[a]+")";var l=n++;t[l]="(?:"+t[s]+"|"+t[a]+")";var p=n++;t[p]="(?:-("+t[u]+"(?:\\."+t[u]+")*))";var c=n++;t[c]="(?:-?("+t[l]+"(?:\\."+t[l]+")*))";var h=n++;t[h]="[0-9A-Za-z-]+";var v=n++;t[v]="(?:\\+("+t[h]+"(?:\\."+t[h]+")*))";var m=n++;var g="v?"+t[o]+t[p]+"?"+t[v]+"?";t[m]="^"+g+"$";var w="[v=\\s]*"+t[f]+t[c]+"?"+t[v]+"?";var d=n++;t[d]="^"+w+"$";var y=n++;t[y]="((?:<|>)?=?)";var j=n++;t[j]=t[s]+"|x|X|\\*";var b=n++;t[b]=t[i]+"|x|X|\\*";var $=n++;t[$]="[v=\\s]*("+t[b]+")"+"(?:\\.("+t[b]+")"+"(?:\\.("+t[b]+")"+"(?:"+t[p]+")?"+t[v]+"?"+")?)?";var k=n++;t[k]="[v=\\s]*("+t[j]+")"+"(?:\\.("+t[j]+")"+"(?:\\.("+t[j]+")"+"(?:"+t[c]+")?"+t[v]+"?"+")?)?";var E=n++;t[E]="^"+t[y]+"\\s*"+t[$]+"$";var x=n++;t[x]="^"+t[y]+"\\s*"+t[k]+"$";var R=n++;t[R]="(?:~>?)";var S=n++;t[S]="(\\s*)"+t[R]+"\\s+";r[S]=new RegExp(t[S],"g");var V="$1~";var I=n++;t[I]="^"+t[R]+t[$]+"$";var T=n++;t[T]="^"+t[R]+t[k]+"$";var A=n++;t[A]="(?:\\^)";var C=n++;t[C]="(\\s*)"+t[A]+"\\s+";r[C]=new RegExp(t[C],"g");var M="$1^";var z=n++;t[z]="^"+t[A]+t[$]+"$";var N=n++;t[N]="^"+t[A]+t[k]+"$";var P=n++;t[P]="^"+t[y]+"\\s*("+w+")$|^$";var Z=n++;t[Z]="^"+t[y]+"\\s*("+g+")$|^$";var q=n++;t[q]="(\\s*)"+t[y]+"\\s*("+w+"|"+t[$]+")";r[q]=new RegExp(t[q],"g");var L="$1$2$3";var X=n++;t[X]="^\\s*("+t[$]+")"+"\\s+-\\s+"+"("+t[$]+")"+"\\s*$";var _=n++;t[_]="^\\s*("+t[k]+")"+"\\s+-\\s+"+"("+t[k]+")"+"\\s*$";var O=n++;t[O]="(<|>)?=?\\s*\\*";for(var B=0;B<n;B++){if(!r[B])r[B]=new RegExp(t[B])}e.parse=D;function D(e,t){var n=t?r[d]:r[m];return n.test(e)?new H(e,t):null}e.valid=F;function F(e,r){var t=D(e,r);return t?t.version:null}e.clean=G;function G(e,r){var t=D(e.trim().replace(/^[=v]+/,""),r);return t?t.version:null}e.SemVer=H;function H(e,t){if(e instanceof H){if(e.loose===t)return e;else e=e.version}else if(typeof e!=="string"){throw new TypeError("Invalid Version: "+e)}if(!(this instanceof H))return new H(e,t);this.loose=t;var n=e.trim().match(t?r[d]:r[m]);if(!n)throw new TypeError("Invalid Version: "+e);this.raw=e;this.major=+n[1];this.minor=+n[2];this.patch=+n[3];if(!n[4])this.prerelease=[];else this.prerelease=n[4].split(".").map(function(e){return/^[0-9]+$/.test(e)?+e:e});this.build=n[5]?n[5].split("."):[];this.format()}H.prototype.format=function(){this.version=this.major+"."+this.minor+"."+this.patch;if(this.prerelease.length)this.version+="-"+this.prerelease.join(".");return this.version};H.prototype.inspect=function(){return'<SemVer "'+this+'">'};H.prototype.toString=function(){return this.version};H.prototype.compare=function(e){if(!(e instanceof H))e=new H(e,this.loose);return this.compareMain(e)||this.comparePre(e)};H.prototype.compareMain=function(e){if(!(e instanceof H))e=new H(e,this.loose);return U(this.major,e.major)||U(this.minor,e.minor)||U(this.patch,e.patch)};H.prototype.comparePre=function(e){if(!(e instanceof H))e=new H(e,this.loose);if(this.prerelease.length&&!e.prerelease.length)return-1;else if(!this.prerelease.length&&e.prerelease.length)return 1;else if(!this.prerelease.length&&!e.prerelease.length)return 0;var r=0;do{var t=this.prerelease[r];var n=e.prerelease[r];if(t===undefined&&n===undefined)return 0;else if(n===undefined)return 1;else if(t===undefined)return-1;else if(t===n)continue;else return U(t,n)}while(++r)};H.prototype.inc=function(e,r){switch(e){case"premajor":this.prerelease.length=0;this.patch=0;this.minor=0;this.major++;this.inc("pre",r);break;case"preminor":this.prerelease.length=0;this.patch=0;this.minor++;this.inc("pre",r);break;case"prepatch":this.prerelease.length=0;this.inc("patch",r);this.inc("pre",r);break;case"prerelease":if(this.prerelease.length===0)this.inc("patch",r);this.inc("pre",r);break;case"major":if(this.minor!==0||this.patch!==0||this.prerelease.length===0)this.major++;this.minor=0;this.patch=0;this.prerelease=[];break;case"minor":if(this.patch!==0||this.prerelease.length===0)this.minor++;this.patch=0;this.prerelease=[];break;case"patch":if(this.prerelease.length===0)this.patch++;this.prerelease=[];break;case"pre":if(this.prerelease.length===0)this.prerelease=[0];else{var t=this.prerelease.length;while(--t>=0){if(typeof this.prerelease[t]==="number"){this.prerelease[t]++;t=-2}}if(t===-1)this.prerelease.push(0)}if(r){if(this.prerelease[0]===r){if(isNaN(this.prerelease[1]))this.prerelease=[r,0]}else this.prerelease=[r,0]}break;default:throw new Error("invalid increment argument: "+e)}this.format();return this};e.inc=J;function J(e,r,t,n){if(typeof t==="string"){n=t;t=undefined}try{return new H(e,t).inc(r,n).version}catch(i){return null}}e.diff=K;function K(e,r){if(ar(e,r)){return null}else{var t=D(e);var n=D(r);if(t.prerelease.length||n.prerelease.length){for(var i in t){if(i==="major"||i==="minor"||i==="patch"){if(t[i]!==n[i]){return"pre"+i}}}return"prerelease"}for(var i in t){if(i==="major"||i==="minor"||i==="patch"){if(t[i]!==n[i]){return i}}}}}e.compareIdentifiers=U;var Q=/^[0-9]+$/;function U(e,r){var t=Q.test(e);var n=Q.test(r);if(t&&n){e=+e;r=+r}return t&&!n?-1:n&&!t?1:e<r?-1:e>r?1:0}e.rcompareIdentifiers=W;function W(e,r){return U(r,e)}e.compare=Y;function Y(e,r,t){return new H(e,t).compare(r)}e.compareLoose=er;function er(e,r){return Y(e,r,true)}e.rcompare=rr;function rr(e,r,t){return Y(r,e,t)}e.sort=tr;function tr(r,t){return r.sort(function(r,n){return e.compare(r,n,t)})}e.rsort=nr;function nr(r,t){return r.sort(function(r,n){return e.rcompare(r,n,t)})}e.gt=ir;function ir(e,r,t){return Y(e,r,t)>0}e.lt=sr;function sr(e,r,t){return Y(e,r,t)<0}e.eq=ar;function ar(e,r,t){return Y(e,r,t)===0}e.neq=or;function or(e,r,t){return Y(e,r,t)!==0}e.gte=fr;function fr(e,r,t){return Y(e,r,t)>=0}e.lte=ur;function ur(e,r,t){return Y(e,r,t)<=0}e.cmp=lr;function lr(e,r,t,n){var i;switch(r){case"===":if(typeof e==="object")e=e.version;if(typeof t==="object")t=t.version;i=e===t;break;case"!==":if(typeof e==="object")e=e.version;if(typeof t==="object")t=t.version;i=e!==t;break;case"":case"=":case"==":i=ar(e,t,n);break;case"!=":i=or(e,t,n);break;case">":i=ir(e,t,n);break;case">=":i=fr(e,t,n);break;case"<":i=sr(e,t,n);break;case"<=":i=ur(e,t,n);break;default:throw new TypeError("Invalid operator: "+r)}return i}e.Comparator=pr;function pr(e,r){if(e instanceof pr){if(e.loose===r)return e;else e=e.value}if(!(this instanceof pr))return new pr(e,r);this.loose=r;this.parse(e);if(this.semver===cr)this.value="";else this.value=this.operator+this.semver.version}var cr={};pr.prototype.parse=function(e){var t=this.loose?r[P]:r[Z];var n=e.match(t);if(!n)throw new TypeError("Invalid comparator: "+e);this.operator=n[1];if(this.operator==="=")this.operator="";if(!n[2])this.semver=cr;else this.semver=new H(n[2],this.loose)};pr.prototype.inspect=function(){return'<SemVer Comparator "'+this+'">'};pr.prototype.toString=function(){return this.value};pr.prototype.test=function(e){if(this.semver===cr)return true;if(typeof e==="string")e=new H(e,this.loose);return lr(e,this.operator,this.semver,this.loose)};e.Range=hr;function hr(e,r){if(e instanceof hr&&e.loose===r)return e;if(!(this instanceof hr))return new hr(e,r);this.loose=r;this.raw=e;this.set=e.split(/\s*\|\|\s*/).map(function(e){return this.parseRange(e.trim())},this).filter(function(e){return e.length});if(!this.set.length){throw new TypeError("Invalid SemVer Range: "+e)}this.format()}hr.prototype.inspect=function(){return'<SemVer Range "'+this.range+'">'};hr.prototype.format=function(){this.range=this.set.map(function(e){return e.join(" ").trim()}).join("||").trim();return this.range};hr.prototype.toString=function(){return this.range};hr.prototype.parseRange=function(e){var t=this.loose;e=e.trim();var n=t?r[_]:r[X];e=e.replace(n,Er);e=e.replace(r[q],L);e=e.replace(r[S],V);e=e.replace(r[C],M);e=e.split(/\s+/).join(" ");var i=t?r[P]:r[Z];var s=e.split(" ").map(function(e){return mr(e,t)}).join(" ").split(/\s+/);if(this.loose){s=s.filter(function(e){return!!e.match(i)})}s=s.map(function(e){return new pr(e,t)});return s};e.toComparators=vr;function vr(e,r){return new hr(e,r).set.map(function(e){return e.map(function(e){return e.value}).join(" ").trim().split(" ")})}function mr(e,r){e=yr(e,r);e=wr(e,r);e=br(e,r);e=kr(e,r);return e}function gr(e){return!e||e.toLowerCase()==="x"||e==="*"}function wr(e,r){return e.trim().split(/\s+/).map(function(e){return dr(e,r)}).join(" ")}function dr(e,t){var n=t?r[T]:r[I];return e.replace(n,function(e,r,t,n,i){var s;if(gr(r))s="";else if(gr(t))s=">="+r+".0.0 <"+(+r+1)+".0.0";else if(gr(n))s=">="+r+"."+t+".0 <"+r+"."+(+t+1)+".0";else if(i){if(i.charAt(0)!=="-")i="-"+i;s=">="+r+"."+t+"."+n+i+" <"+r+"."+(+t+1)+".0"}else s=">="+r+"."+t+"."+n+" <"+r+"."+(+t+1)+".0";return s})}function yr(e,r){return e.trim().split(/\s+/).map(function(e){return jr(e,r)}).join(" ")}function jr(e,t){var n=t?r[N]:r[z];return e.replace(n,function(e,r,t,n,i){var s;if(gr(r))s="";else if(gr(t))s=">="+r+".0.0 <"+(+r+1)+".0.0";else if(gr(n)){if(r==="0")s=">="+r+"."+t+".0 <"+r+"."+(+t+1)+".0";else s=">="+r+"."+t+".0 <"+(+r+1)+".0.0"}else if(i){if(i.charAt(0)!=="-")i="-"+i;if(r==="0"){if(t==="0")s=">="+r+"."+t+"."+n+i+" <"+r+"."+t+"."+(+n+1);else s=">="+r+"."+t+"."+n+i+" <"+r+"."+(+t+1)+".0"}else s=">="+r+"."+t+"."+n+i+" <"+(+r+1)+".0.0"}else{if(r==="0"){if(t==="0")s=">="+r+"."+t+"."+n+" <"+r+"."+t+"."+(+n+1);else s=">="+r+"."+t+"."+n+" <"+r+"."+(+t+1)+".0"}else s=">="+r+"."+t+"."+n+" <"+(+r+1)+".0.0"}return s})}function br(e,r){return e.split(/\s+/).map(function(e){return $r(e,r)}).join(" ")}function $r(e,t){e=e.trim();var n=t?r[x]:r[E];return e.replace(n,function(e,r,t,n,i,s){var a=gr(t);var o=a||gr(n);var f=o||gr(i);var u=f;if(r==="="&&u)r="";if(a){if(r===">"||r==="<"){e="<0.0.0"}else{e="*"}}else if(r&&u){if(o)n=0;if(f)i=0;if(r===">"){r=">=";if(o){t=+t+1;n=0;i=0}else if(f){n=+n+1;i=0}}else if(r==="<="){r="<";if(o)t=+t+1;else n=+n+1}e=r+t+"."+n+"."+i}else if(o){e=">="+t+".0.0 <"+(+t+1)+".0.0"}else if(f){e=">="+t+"."+n+".0 <"+t+"."+(+n+1)+".0"}return e})}function kr(e,t){return e.trim().replace(r[O],"")}function Er(e,r,t,n,i,s,a,o,f,u,l,p,c){if(gr(t))r="";else if(gr(n))r=">="+t+".0.0";else if(gr(i))r=">="+t+"."+n+".0";else r=">="+r;if(gr(f))o="";else if(gr(u))o="<"+(+f+1)+".0.0";else if(gr(l))o="<"+f+"."+(+u+1)+".0";else if(p)o="<="+f+"."+u+"."+l+"-"+p;else o="<="+o;return(r+" "+o).trim()}hr.prototype.test=function(e){if(!e)return false;if(typeof e==="string")e=new H(e,this.loose);for(var r=0;r<this.set.length;r++){if(xr(this.set[r],e))return true}return false};function xr(e,r){for(var t=0;t<e.length;t++){if(!e[t].test(r))return false}if(r.prerelease.length){for(var t=0;t<e.length;t++){if(e[t].semver===cr)return true;if(e[t].semver.prerelease.length>0){var n=e[t].semver;if(n.major===r.major&&n.minor===r.minor&&n.patch===r.patch)return true}}return false}return true}e.satisfies=Rr;function Rr(e,r,t){try{r=new hr(r,t)}catch(n){return false}return r.test(e)}e.maxSatisfying=Sr;function Sr(e,r,t){return e.filter(function(e){return Rr(e,r,t)}).sort(function(e,r){return rr(e,r,t)})[0]||null}e.validRange=Vr;function Vr(e,r){try{return new hr(e,r).range||"*"}catch(t){return null}}e.ltr=Ir;function Ir(e,r,t){return Ar(e,r,"<",t)}e.gtr=Tr;function Tr(e,r,t){return Ar(e,r,">",t)}e.outside=Ar;function Ar(e,r,t,n){e=new H(e,n);r=new hr(r,n);var i,s,a,o,f;switch(t){case">":i=ir;s=ur;a=sr;o=">";f=">=";break;case"<":i=sr;s=fr;a=ir;o="<";f="<=";break;default:throw new TypeError('Must provide a hilo val of "<" or ">"')}if(Rr(e,r,n)){return false}for(var u=0;u<r.set.length;++u){var l=r.set[u];var p=null;var c=null;l.forEach(function(e){p=p||e;c=c||e;if(i(e.semver,p.semver,n)){p=e}else if(a(e.semver,c.semver,n)){c=e}});if(p.operator===o||p.operator===f){return false}if((!c.operator||c.operator===o)&&s(e,c.semver)){return false}else if(c.operator===f&&a(e,c.semver)){return false}}return true}if(typeof define==="function"&&define.amd)define(e)})(typeof exports==="object"?exports:typeof define==="function"&&define.amd?{}:semver={}); |
@@ -16,2 +16,3 @@ 'use strict'; | ||
var inc = semver.inc; | ||
var diff = semver.diff; | ||
var replaceStars = semver.replaceStars; | ||
@@ -415,2 +416,30 @@ var toComparators = semver.toComparators; | ||
test('\ndiff versions test', function(t) { | ||
// [version1, version2, result] | ||
// diff(version1, version2) -> result | ||
[['1.2.3', '0.2.3', 'major'], | ||
['1.4.5', '0.2.3', 'major'], | ||
['1.2.3', '2.0.0-pre', 'premajor'], | ||
['1.2.3', '1.3.3', 'minor'], | ||
['1.0.1', '1.1.0-pre', 'preminor'], | ||
['1.2.3', '1.2.4', 'patch'], | ||
['1.2.3', '1.2.4-pre', 'prepatch'], | ||
['0.0.1', '0.0.1-pre', 'prerelease'], | ||
['0.0.1', '0.0.1-pre-2', 'prerelease'], | ||
['1.1.0', '1.1.0-pre', 'prerelease'], | ||
['1.1.0-pre-1', '1.1.0-pre-2', 'prerelease'], | ||
['1.0.0', '1.0.0', null] | ||
].forEach(function(v) { | ||
var version1 = v[0]; | ||
var version2 = v[1]; | ||
var wanted = v[2]; | ||
var found = diff(version1, version2); | ||
var cmd = 'diff(' + version1 + ', ' + version2 + ')'; | ||
t.equal(found, wanted, cmd + ' === ' + wanted); | ||
}); | ||
t.end(); | ||
}); | ||
test('\nvalid range test', function(t) { | ||
@@ -417,0 +446,0 @@ // [range, result] |
@@ -61,4 +61,3 @@ { | ||
"_shasum": "06e1ea8082c2cb14e39806e22e2f6f757f92af39", | ||
"_resolved": "https://registry.npmjs.org/debug/-/debug-0.7.4.tgz", | ||
"readme": "ERROR: No README data found!" | ||
"_resolved": "https://registry.npmjs.org/debug/-/debug-0.7.4.tgz" | ||
} |
@@ -51,5 +51,3 @@ { | ||
"_shasum": "eea3033f0c3728139de7b57ab1b0d6d89c353c63", | ||
"_resolved": "https://registry.npmjs.org/fstream-ignore/-/fstream-ignore-0.0.7.tgz", | ||
"readme": "ERROR: No README data found!", | ||
"homepage": "https://github.com/isaacs/fstream-ignore" | ||
"_resolved": "https://registry.npmjs.org/fstream-ignore/-/fstream-ignore-0.0.7.tgz" | ||
} |
@@ -11,2 +11,2 @@ // eeeeeevvvvviiiiiiillllll | ||
var fn = vm.runInThisContext(src) | ||
return fn(exports, require, module, __filename, __dirname) | ||
fn(exports, require, module, __filename, __dirname) |
@@ -9,3 +9,3 @@ { | ||
"description": "A drop-in replacement for fs, making various improvements.", | ||
"version": "3.0.4", | ||
"version": "3.0.5", | ||
"repository": { | ||
@@ -47,3 +47,3 @@ "type": "git", | ||
}, | ||
"gitHead": "d3fd03247ccc4fa8a3eee399307fd266c70efb06", | ||
"gitHead": "a6cd37cff01ac3af8d0ab2fd180290538fabd326", | ||
"bugs": { | ||
@@ -53,6 +53,7 @@ "url": "https://github.com/isaacs/node-graceful-fs/issues" | ||
"homepage": "https://github.com/isaacs/node-graceful-fs", | ||
"_id": "graceful-fs@3.0.4", | ||
"_shasum": "a0306d9b0940e0fc512d33b5df1014e88e0637a3", | ||
"_from": "graceful-fs@~3.0.2", | ||
"_npmVersion": "1.4.28", | ||
"_id": "graceful-fs@3.0.5", | ||
"_shasum": "4a880474bdeb716fe3278cf29792dec38dfac418", | ||
"_from": "graceful-fs@3", | ||
"_npmVersion": "2.1.9", | ||
"_nodeVersion": "0.10.16", | ||
"_npmUser": { | ||
@@ -69,7 +70,7 @@ "name": "isaacs", | ||
"dist": { | ||
"shasum": "a0306d9b0940e0fc512d33b5df1014e88e0637a3", | ||
"tarball": "http://registry.npmjs.org/graceful-fs/-/graceful-fs-3.0.4.tgz" | ||
"shasum": "4a880474bdeb716fe3278cf29792dec38dfac418", | ||
"tarball": "http://registry.npmjs.org/graceful-fs/-/graceful-fs-3.0.5.tgz" | ||
}, | ||
"_resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-3.0.4.tgz", | ||
"_resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-3.0.5.tgz", | ||
"readme": "ERROR: No README data found!" | ||
} |
@@ -62,5 +62,3 @@ { | ||
"_shasum": "15a4806a57547cb2d2dbf27f42e89a8c3451b364", | ||
"_resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-1.2.3.tgz", | ||
"readme": "ERROR: No README data found!", | ||
"homepage": "https://github.com/isaacs/node-graceful-fs" | ||
"_resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-1.2.3.tgz" | ||
} |
@@ -50,8 +50,3 @@ { | ||
"_from": "once@~1.1.1", | ||
"_resolved": "https://registry.npmjs.org/once/-/once-1.1.1.tgz", | ||
"bugs": { | ||
"url": "https://github.com/isaacs/once/issues" | ||
}, | ||
"readme": "ERROR: No README data found!", | ||
"homepage": "https://github.com/isaacs/once" | ||
"_resolved": "https://registry.npmjs.org/once/-/once-1.1.1.tgz" | ||
} |
@@ -52,4 +52,3 @@ { | ||
"_shasum": "6b07085aef9a3ccac6ee53bf9d3df0c1521a5538", | ||
"_resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.1.tgz", | ||
"scripts": {} | ||
"_resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.1.tgz" | ||
} |
@@ -35,3 +35,3 @@ { | ||
}, | ||
"_from": "inherits@~2.0.1", | ||
"_from": "inherits@~2.0.0", | ||
"_npmVersion": "1.3.8", | ||
@@ -38,0 +38,0 @@ "_npmUser": { |
@@ -50,6 +50,3 @@ { | ||
"_shasum": "8a18acfca9a8f4177e09abfc6038939b05d1eedf", | ||
"_resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", | ||
"bugs": { | ||
"url": "https://github.com/juliangruber/isarray/issues" | ||
} | ||
"_resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz" | ||
} |
@@ -52,4 +52,3 @@ { | ||
"directories": {}, | ||
"_resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", | ||
"readme": "ERROR: No README data found!" | ||
"_resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz" | ||
} |
@@ -68,4 +68,3 @@ { | ||
"directories": {}, | ||
"_resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.33.tgz", | ||
"readme": "ERROR: No README data found!" | ||
"_resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.33.tgz" | ||
} |
@@ -53,7 +53,3 @@ { | ||
"_shasum": "c2c401c02dd366138645e917b3a6baa256a9dcab", | ||
"_resolved": "https://registry.npmjs.org/tar-pack/-/tar-pack-2.0.0.tgz", | ||
"bugs": { | ||
"url": "https://github.com/ForbesLindesay/tar-pack/issues" | ||
}, | ||
"homepage": "https://github.com/ForbesLindesay/tar-pack" | ||
"_resolved": "https://registry.npmjs.org/tar-pack/-/tar-pack-2.0.0.tgz" | ||
} |
@@ -64,2 +64,6 @@ // give it a tarball and a path, and it'll dump the contents | ||
this._fst.on('drain', function() { | ||
me.emit('drain') | ||
}) | ||
// this._fst.on("end", function () { | ||
@@ -66,0 +70,0 @@ // console.error("\nEEEE Extract End", me._fst.path) |
@@ -149,3 +149,3 @@ | ||
e.tar_block = this.position / 512 | ||
this.emit("error", e) | ||
return this.emit("error", e) | ||
} | ||
@@ -152,0 +152,0 @@ |
@@ -7,4 +7,4 @@ var fstream = require("../fstream.js") | ||
return !this.basename.match(/^\./) && | ||
!this.basename.match(/^node_modules$/) | ||
!this.basename.match(/^deep-copy$/) | ||
!this.basename.match(/^node_modules$/) && | ||
!this.basename.match(/^deep-copy$/) && | ||
!this.basename.match(/^filter-copy$/) | ||
@@ -11,0 +11,0 @@ } |
@@ -7,3 +7,3 @@ var fstream = require("../fstream.js") | ||
return !this.basename.match(/^\./) && | ||
!this.basename.match(/^node_modules$/) | ||
!this.basename.match(/^node_modules$/) && | ||
!this.basename.match(/^deep-copy$/) | ||
@@ -10,0 +10,0 @@ } |
@@ -5,9 +5,8 @@ var fstream = require("../fstream.js") | ||
var path = require("path") | ||
var children = -1 | ||
var dir = path.dirname(__dirname) | ||
var gotReady = false | ||
var ended = false | ||
tap.test("reader test", function (t) { | ||
var children = -1 | ||
var gotReady = false | ||
var ended = false | ||
@@ -56,1 +55,16 @@ var r = fstream.Reader({ path: dir | ||
}) | ||
tap.test("reader error test", function (t) { | ||
// assumes non-root on a *nix system | ||
var r = fstream.Reader({ path: '/etc/shadow' }) | ||
r.once("error", function (er) { | ||
t.ok(true); | ||
t.end() | ||
}) | ||
r.on("end", function () { | ||
t.fail("reader ended without error"); | ||
t.end() | ||
}) | ||
}) |
@@ -83,2 +83,6 @@ // Basically just a wrapper around an fs.ReadStream | ||
stream.on("error", function (e) { | ||
me.emit("error", e); | ||
}); | ||
me._read() | ||
@@ -85,0 +89,0 @@ } |
@@ -11,2 +11,2 @@ // eeeeeevvvvviiiiiiillllll | ||
var fn = vm.runInThisContext(src) | ||
return fn(exports, require, module, __filename, __dirname) | ||
fn(exports, require, module, __filename, __dirname) |
@@ -9,3 +9,3 @@ { | ||
"description": "A drop-in replacement for fs, making various improvements.", | ||
"version": "3.0.4", | ||
"version": "3.0.5", | ||
"repository": { | ||
@@ -47,3 +47,3 @@ "type": "git", | ||
}, | ||
"gitHead": "d3fd03247ccc4fa8a3eee399307fd266c70efb06", | ||
"gitHead": "a6cd37cff01ac3af8d0ab2fd180290538fabd326", | ||
"bugs": { | ||
@@ -53,6 +53,7 @@ "url": "https://github.com/isaacs/node-graceful-fs/issues" | ||
"homepage": "https://github.com/isaacs/node-graceful-fs", | ||
"_id": "graceful-fs@3.0.4", | ||
"_shasum": "a0306d9b0940e0fc512d33b5df1014e88e0637a3", | ||
"_id": "graceful-fs@3.0.5", | ||
"_shasum": "4a880474bdeb716fe3278cf29792dec38dfac418", | ||
"_from": "graceful-fs@3", | ||
"_npmVersion": "1.4.28", | ||
"_npmVersion": "2.1.9", | ||
"_nodeVersion": "0.10.16", | ||
"_npmUser": { | ||
@@ -69,7 +70,7 @@ "name": "isaacs", | ||
"dist": { | ||
"shasum": "a0306d9b0940e0fc512d33b5df1014e88e0637a3", | ||
"tarball": "http://registry.npmjs.org/graceful-fs/-/graceful-fs-3.0.4.tgz" | ||
"shasum": "4a880474bdeb716fe3278cf29792dec38dfac418", | ||
"tarball": "http://registry.npmjs.org/graceful-fs/-/graceful-fs-3.0.5.tgz" | ||
}, | ||
"_resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-3.0.4.tgz", | ||
"_resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-3.0.5.tgz", | ||
"readme": "ERROR: No README data found!" | ||
} |
@@ -9,3 +9,3 @@ { | ||
"description": "Advanced file system stream things", | ||
"version": "1.0.2", | ||
"version": "1.0.3", | ||
"repository": { | ||
@@ -32,3 +32,3 @@ "type": "git", | ||
"license": "BSD", | ||
"gitHead": "b3b74e92ef4a91ae206fab90b7998c7cd2e4290d", | ||
"gitHead": "d205397b27d93eee5314e9d2d87693e82b560106", | ||
"bugs": { | ||
@@ -38,9 +38,10 @@ "url": "https://github.com/isaacs/fstream/issues" | ||
"homepage": "https://github.com/isaacs/fstream", | ||
"_id": "fstream@1.0.2", | ||
"_shasum": "56930ff1b4d4d7b1a689c8656b3a11e744ab92c6", | ||
"_id": "fstream@1.0.3", | ||
"_shasum": "5ce69767710d7a39c8cd9232470d9426790195da", | ||
"_from": "fstream@^1.0.2", | ||
"_npmVersion": "1.4.23", | ||
"_npmVersion": "2.1.10", | ||
"_nodeVersion": "0.10.33", | ||
"_npmUser": { | ||
"name": "isaacs", | ||
"email": "i@izs.me" | ||
"name": "othiym23", | ||
"email": "ogd@aoaioxxysz.net" | ||
}, | ||
@@ -51,11 +52,14 @@ "maintainers": [ | ||
"email": "i@izs.me" | ||
}, | ||
{ | ||
"name": "othiym23", | ||
"email": "ogd@aoaioxxysz.net" | ||
} | ||
], | ||
"dist": { | ||
"shasum": "56930ff1b4d4d7b1a689c8656b3a11e744ab92c6", | ||
"tarball": "http://registry.npmjs.org/fstream/-/fstream-1.0.2.tgz" | ||
"shasum": "5ce69767710d7a39c8cd9232470d9426790195da", | ||
"tarball": "http://registry.npmjs.org/fstream/-/fstream-1.0.3.tgz" | ||
}, | ||
"directories": {}, | ||
"_resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.2.tgz", | ||
"readme": "ERROR: No README data found!" | ||
"_resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.3.tgz" | ||
} |
@@ -9,3 +9,3 @@ { | ||
"description": "tar for node", | ||
"version": "1.0.2", | ||
"version": "1.0.3", | ||
"repository": { | ||
@@ -31,3 +31,3 @@ "type": "git", | ||
"license": "BSD", | ||
"gitHead": "f31811bfa4ed1d1a89c380c65595ac92474dd84d", | ||
"gitHead": "f4151128c585da236c6b1e278b762ecaedc20c15", | ||
"bugs": { | ||
@@ -37,10 +37,10 @@ "url": "https://github.com/isaacs/node-tar/issues" | ||
"homepage": "https://github.com/isaacs/node-tar", | ||
"_id": "tar@1.0.2", | ||
"_shasum": "8b0f6740f9946259de26a3ed9c9a22890dff023f", | ||
"_id": "tar@1.0.3", | ||
"_shasum": "15bcdab244fa4add44e4244a0176edb8aa9a2b44", | ||
"_from": "tar@~1.0.2", | ||
"_npmVersion": "2.1.3", | ||
"_nodeVersion": "0.10.31", | ||
"_npmVersion": "2.1.10", | ||
"_nodeVersion": "0.10.33", | ||
"_npmUser": { | ||
"name": "isaacs", | ||
"email": "i@izs.me" | ||
"name": "othiym23", | ||
"email": "ogd@aoaioxxysz.net" | ||
}, | ||
@@ -51,11 +51,14 @@ "maintainers": [ | ||
"email": "i@izs.me" | ||
}, | ||
{ | ||
"name": "othiym23", | ||
"email": "ogd@aoaioxxysz.net" | ||
} | ||
], | ||
"dist": { | ||
"shasum": "8b0f6740f9946259de26a3ed9c9a22890dff023f", | ||
"tarball": "http://registry.npmjs.org/tar/-/tar-1.0.2.tgz" | ||
"shasum": "15bcdab244fa4add44e4244a0176edb8aa9a2b44", | ||
"tarball": "http://registry.npmjs.org/tar/-/tar-1.0.3.tgz" | ||
}, | ||
"directories": {}, | ||
"_resolved": "https://registry.npmjs.org/tar/-/tar-1.0.2.tgz", | ||
"readme": "ERROR: No README data found!" | ||
"_resolved": "https://registry.npmjs.org/tar/-/tar-1.0.3.tgz" | ||
} |
{ | ||
"name": "node-pre-gyp", | ||
"description": "Node.js native addon binary install tool", | ||
"version" : "0.6.1", | ||
"version" : "0.6.2", | ||
"keywords": [ | ||
@@ -26,3 +26,3 @@ "native", | ||
"request": "2.x", | ||
"semver": "~4.1.0", | ||
"semver": "~4.2.0", | ||
"tar": "~1.0.2", | ||
@@ -47,3 +47,4 @@ "tar-pack":"~2.0.0", | ||
"aws-sdk":"*", | ||
"mocha": "1.x" | ||
"mocha": "1.x", | ||
"retire": "0.3.x" | ||
}, | ||
@@ -57,4 +58,4 @@ "engineStrict": true, | ||
"update-crosswalk":"node scripts/abi_crosswalk.js > lib/util/abi_crosswalk.json", | ||
"test":"mocha -R spec --timeout 100000" | ||
"test":"retire -n && mocha -R spec --timeout 100000" | ||
} | ||
} |
116
README.md
@@ -53,12 +53,12 @@ # node-pre-gyp | ||
- clean - Removes the entire folder containing the compiled .node module | ||
- install - Attempts to install pre-built binary for module | ||
- reinstall - Runs "clean" and "install" at once | ||
- build - Attempts to compile the module by dispatching to node-gyp or nw-gyp | ||
- rebuild - Runs "clean" and "build" at once | ||
- package - Packs binary into tarball | ||
- testpackage - Tests that the staged package is valid | ||
- publish - Publishes pre-built binary | ||
- unpublish - Unpublishes pre-built binary | ||
- info - Fetches info on published binaries | ||
- clean - Remove the entire folder containing the compiled .node module | ||
- install - Install pre-built binary for module | ||
- reinstall - Run "clean" and "install" at once | ||
- build - Compile the module by dispatching to node-gyp or nw-gyp | ||
- rebuild - Run "clean" and "build" at once | ||
- package - Pack binary into tarball | ||
- testpackage - Test that the staged package is valid | ||
- publish - Publish pre-built binary | ||
- unpublish - Unpublish pre-built binary | ||
- info - Fetch info on published binaries | ||
@@ -134,3 +134,3 @@ You can also chain commands: | ||
The location your native module is placed after a build. This should be an empty directory without other javascript files. This entire directory will be packaged in the binary tarball. When installing from a remote package this directory will be overwritten with the contents of the tarball. | ||
The location your native module is placed after a build. This should be an empty directory without other Javascript files. This entire directory will be packaged in the binary tarball. When installing from a remote package this directory will be overwritten with the contents of the tarball. | ||
@@ -163,2 +163,8 @@ Note: This property supports variables based on [Versioning](#versioning). | ||
Avoiding the version of your module in the `package_name` and instead only embedding in a directory name can be useful when you want to make a quick tag of your module that does not change any C++ code. In this case you can just copy binaries to the new version behind the scenes like: | ||
```sh | ||
aws s3 sync --acl public-read s3://mapbox-node-binary/sqlite3/v3.0.3/ s3://mapbox-node-binary/sqlite3/v3.0.4/ | ||
``` | ||
Note: This property supports variables based on [Versioning](#versioning). | ||
@@ -405,3 +411,3 @@ | ||
If your commit message contains special characters (e.g. `&`) this method might fail. An alternative is to use PowerShell, which gives you additional possibilites, like ignoring case by using `ToLower()`: | ||
If your commit message contains special characters (e.g. `&`) this method might fail. An alternative is to use PowerShell, which gives you additional possibilities, like ignoring case by using `ToLower()`: | ||
@@ -454,13 +460,55 @@ ps: if($env:APPVEYOR_REPO_COMMIT_MESSAGE.ToLower().Contains('[publish binary]')) { node-pre-gyp --msvs_version=2013 publish } | ||
If you want binaries for OS X change you have two options: | ||
##### OS X publishing | ||
- Enable `multi-os` for your repo by emailing a request to `support@travis-ci.com`. More details at <http://docs.travis-ci.com/user/multi-os/>. An example of a repo using multi-os is [node-sqlite3](https://github.com/mapbox/node-sqlite3/blob/f69b89a078e2200fee54a9f897e6957bd627d8b7/.travis.yml#L4-L6). | ||
- Or, you can change the `language` and push to a different branch to build on OS X just when you commit to that branch. Details on this below: | ||
If you want binaries for OS X in addition to linux you have two options: | ||
1) [Enabling multi-OS](#enabling-multi-os) | ||
##### OS X publishing via a branch | ||
2) [Using `language: objective-c` in a git branch](#using-language-objective-c). | ||
Tweak your `.travis.yml` to use: | ||
##### Enabling multi-OS | ||
This requires emailing a request to `support@travis-ci.com` for each repo you wish to have enabled. More details at <http://docs.travis-ci.com/user/multi-os/>. | ||
Next you need to tweak the `.travis.yml` to ensure it is cross platform. | ||
Use a configuration like: | ||
```yml | ||
language: cpp | ||
os: | ||
- linux | ||
- osx | ||
env: | ||
matrix: | ||
- NODE_VERSION="0.10" | ||
- NODE_VERSION="0.11.14" | ||
before_install: | ||
- rm -rf ~/.nvm/ && git clone --depth 1 https://github.com/creationix/nvm.git ~/.nvm | ||
- source ~/.nvm/nvm.sh | ||
- nvm install $NODE_VERSION | ||
- nvm use $NODE_VERSION | ||
``` | ||
See [Travis OS X Gochas](#travis-os-x-gochas) for why we replace `language: node_js` and `node_js:` sections with `language: cpp` and a custom matrix. | ||
Also create platform specific sections for any deps that need install. For example if you need libpng: | ||
```yml | ||
- if [ $(uname -s) == 'Linux' ]; then apt-get install libpng-dev; fi; | ||
- if [ $(uname -s) == 'Darwin' ]; then brew install libpng; fi; | ||
``` | ||
For detailed multi-OS examples see [node-mapnik](https://github.com/mapnik/node-mapnik/blob/master/.travis.yml) and [node-sqlite3](https://github.com/mapbox/node-sqlite3/blob/master/.travis.yml). | ||
##### Using `language: objective-c` | ||
If your repo does not have multi-OS enabled, an alternative method for building for OS X is to tweak your `.travis.yml` to use: | ||
```yml | ||
language: objective-c | ||
@@ -471,23 +519,25 @@ ``` | ||
Note: using `language: objective-c` instead of `language: nodejs` looses node.js specific travis sugar like a matrix for multiple node.js versions. | ||
Next learn about a few [Travis OS X Gochas](#travis-os-x-gochas). | ||
But you can replicate the lost behavior by replacing: | ||
##### Travis OS X Gochas | ||
```yml | ||
node_js: | ||
- "0.8" | ||
- "0.10" | ||
First, unlike the Travis linux machines the OS X machines do not put `node-pre-gyp` on PATH by default. So to you will need to: | ||
```sh | ||
export PATH=$(pwd)/node_modules/.bin:${PATH} | ||
``` | ||
With: | ||
Second, the OS X machines doe not support using a matrix for installing node.js different versions. So you need to bootstrap the installation of node.js in a cross platform way. | ||
By doing: | ||
```yml | ||
env: | ||
matrix: | ||
- export NODE_VERSION="0.8" | ||
- export NODE_VERSION="0.10" | ||
- NODE_VERSION="0.10" | ||
- NODE_VERSION="0.11.14" | ||
before_install: | ||
- git clone https://github.com/creationix/nvm.git ./.nvm | ||
- source ./.nvm/nvm.sh | ||
- rm -rf ~/.nvm/ && git clone --depth 1 https://github.com/creationix/nvm.git ~/.nvm | ||
- source ~/.nvm/nvm.sh | ||
- nvm install $NODE_VERSION | ||
@@ -497,2 +547,10 @@ - nvm use $NODE_VERSION | ||
You can easily recreate the previous behavior of this matrix: | ||
```yml | ||
node_js: | ||
- "0.10" | ||
- "0.11.14" | ||
``` | ||
#### 4) Publish when you want | ||
@@ -519,3 +577,3 @@ | ||
- `node_abi`: The node C++ `ABI` number. This value is available in javascript as `process.versions.modules` as of [`>= v0.10.4 >= v0.11.7`](https://github.com/joyent/node/commit/ccabd4a6fa8a6eb79d29bc3bbe9fe2b6531c2d8e) and in C++ as the `NODE_MODULE_VERSION` define much earlier. For versions of Node before this was available we fallback to the V8 major and minor version. | ||
- `node_abi`: The node C++ `ABI` number. This value is available in Javascript as `process.versions.modules` as of [`>= v0.10.4 >= v0.11.7`](https://github.com/joyent/node/commit/ccabd4a6fa8a6eb79d29bc3bbe9fe2b6531c2d8e) and in C++ as the `NODE_MODULE_VERSION` define much earlier. For versions of Node before this was available we fallback to the V8 major and minor version. | ||
- `platform` matches node's `process.platform` like `linux`, `darwin`, and `win32` unless the user passed the `--target_platform` option to override. | ||
@@ -522,0 +580,0 @@ - `arch` matches node's `process.arch` like `x64` or `ia32` unless the user passes the `--target_arch` option to override. |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
Environment variable access
Supply chain riskPackage accesses environment variables, which may be a sign of credential stuffing or data theft.
Found 1 instance in 1 package
Unidentified License
License(Experimental) Something that seems like a license was found, but its contents could not be matched with a known license.
Found 1 instance in 1 package
6
61676
582
195
3065244
3
765
Updatedsemver@~4.2.0