Repository: arei/npmbox
Branch: master
Commit: fae0bdb13839
Files: 13
Total size: 117.2 KB
Directory structure:
gitextract_k53o_5qv/
├── .gitignore
├── .jshintrc
├── .travis.yml
├── LICENSE.txt
├── README.md
├── bin/
│ ├── npmbox
│ └── npmunbox
├── npm-shrinkwrap.json
├── npmbox.js
├── npmboxxer.js
├── npmunbox.js
├── package.json
└── utils.js
================================================
FILE CONTENTS
================================================
================================================
FILE: .gitignore
================================================
node_modules
================================================
FILE: .jshintrc
================================================
{
// Enforcing
"bitwise": true, // true: Prohibit bitwise operators (&, |, ^, etc.)
"camelcase": false, // true: Identifiers must be in camelCase
"curly": false, // true: Require {} for every new block or scope
"eqeqeq": true, // true: Require triple equals (===) for comparison
"freeze": true, // true: prohibits overwriting prototypes of native objects such as Array, Date etc.
"forin": true, // true: Require filtering for..in loops with obj.hasOwnProperty()
"immed": false, // true: Require immediate invocations to be wrapped in parens e.g. `(function () { } ());`
"indent": 4, // {int} Number of spaces to use for indentation
"latedef": false, // true: Require variables/functions to be defined before being used
"newcap": false, // true: Require capitalization of all constructor functions e.g. `new F()`
"noarg": true, // true: Prohibit use of `arguments.caller` and `arguments.callee`
"noempty": true, // true: Prohibit use of empty blocks
"nonbsp": true, // true: Prohibit "non-breaking whitespace" characters.
"nonew": false, // true: Prohibit use of constructors for side-effects (without assignment)
"plusplus": false, // true: Prohibit use of `++` & `--`
"quotmark": false, // Quotation mark consistency:
// false: do nothing (default)
// true: ensure whatever is used is consistent
// "single": require single quotes
// "double": require double quotes
"undef": true, // true: Require all non-global variables to be declared (prevents global leaks)
"unused": true, // true: Require all defined variables be used
"strict": true, // true: Requires all functions run in ES5 Strict Mode
"maxparams": false, // {int} Max number of formal params allowed per function
"maxdepth": false, // {int} Max depth of nested blocks (within functions)
"maxstatements": false, // {int} Max number statements per function
"maxcomplexity": false, // {int} Max cyclomatic complexity per function
"maxlen": false, // {int} Max number of characters per line
// Relaxing
"asi": false, // true: Tolerate Automatic Semicolon Insertion (no semicolons)
"boss": false, // true: Tolerate assignments where comparisons would be expected
"debug": false, // true: Allow debugger statements e.g. browser breakpoints.
"eqnull": false, // true: Tolerate use of `== null`
"es5": false, // true: Allow ES5 syntax (ex: getters and setters)
"esnext": false, // true: Allow ES.next (ES6) syntax (ex: `const`)
"moz": false, // true: Allow Mozilla specific syntax (extends and overrides esnext features)
// (ex: `for each`, multiple try/catch, function expression…)
"evil": false, // true: Tolerate use of `eval` and `new Function()`
"expr": false, // true: Tolerate `ExpressionStatement` as Programs
"funcscope": false, // true: Tolerate defining variables inside control statements
"globalstrict": true, // true: Allow global "use strict" (also enables 'strict')
"iterator": false, // true: Tolerate using the `__iterator__` property
"lastsemic": false, // true: Tolerate omitting a semicolon for the last statement of a 1-line block
"laxbreak": false, // true: Tolerate possibly unsafe line breakings
"laxcomma": false, // true: Tolerate comma-first style coding
"loopfunc": false, // true: Tolerate functions being defined in loops
"multistr": false, // true: Tolerate multi-line strings
"noyield": false, // true: Tolerate generator functions with no yield statement in them.
"notypeof": false, // true: Tolerate invalid typeof operator values
"proto": false, // true: Tolerate using the `__proto__` property
"scripturl": false, // true: Tolerate script-targeted URLs
"shadow": false, // true: Allows re-define variables later in code e.g. `var x=1; x=2;`
"sub": false, // true: Tolerate using `[]` notation when it can still be expressed in dot notation
"supernew": false, // true: Tolerate `new function () { ... };` and `new Object;`
"validthis": false, // true: Tolerate using this in a non-constructor function
// Environments
"browser": false, // Web Browser (window, document, etc)
"browserify": false, // Browserify (node.js code in the browser)
"couch": false, // CouchDB
"devel": true, // Development/debugging (alert, confirm, etc)
"dojo": false, // Dojo Toolkit
"jasmine": false, // Jasmine
"jquery": false, // jQuery
"mocha": true, // Mocha
"mootools": false, // MooTools
"node": true, // Node.js
"nonstandard": false, // Widely adopted globals (escape, unescape, etc)
"prototypejs": false, // Prototype and Scriptaculous
"qunit": false, // QUnit
"rhino": false, // Rhino
"shelljs": false, // ShellJS
"worker": false, // Web Workers
"wsh": false, // Windows Scripting Host
"yui": false, // Yahoo User Interface
// Custom Globals
"globals": { // additional predefined global variables
}
}
================================================
FILE: .travis.yml
================================================
language: node_js
node_js:
- "0.10"
================================================
FILE: LICENSE.txt
================================================
Copyright (c) 2014 Glen R. Goodwin (@areinet)
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.
================================================
FILE: README.md
================================================
[](https://travis-ci.org/arei/npmbox)
[](https://nodei.co/npm/npmbox/)
-------
**DEPRECATED** I am officially deprecating this entire package. It has been a extremely long time since this got any attention at all and I no longer have any idea if it works on npm > v5 or not, nor do I have plans to try and figure it out if not.
-------
## What is npmbox?
npm addon utility for creating and installing from an archive file of an npm install, including dependencies. This lets you create a "box" of an installable package and move it to an offline system that will only install from that box.
npmbox is intended to be a proof of concept with regards to this issue filled against this npm feature request: [[Feature] Bundle/Include Dependencies](https://github.com/isaacs/npm/issues/4210). Ideally, we would like to see the npmbox functionality built into npm so a third party tool like npmbox is not required or necessary. Please go add your support over at that ticket to help get us some visibility... or, even better, go write the code!
## npmbox news
BREAKING CHANGE May 26, 2017: npm 5 will break npmbox
* **WARNING! npm v5 is not compatable with npmbox**.
* Unfortuantely, this means npmbox will not work with npm v5 or later.
* npmbox will get fixed, eventually, but until one of us gets time to fix it npmbox/npm5 will remiain broken.
* The npm v5 changes are actually really good news for npmbox though, so hopefully a new version in the not so distant future with some really nice changes.
* Read the npm v5 release notes here: ([npm5 release notes](http://blog.npmjs.org/post/161081169345/v500))
UPDATE April 19, 2017: v4.2.1 of npmbox is out.
* Escapes package names with forward slash characters. #86
* Minor linting changes.
UPDATE December 22, 2016: v4.2.0 of npmbox is out.
* Support for accepting a `package.json` file when boxing. This will cause its
dependencies to get boxed.
* Start using a temporary directory instead of the CWD for temporary files and
directories. **Note:** This fixes the problem noted in v4.1.0 whereby
`npmbox` of the current directory would fail.
* New unbox option `--install=<pkg>` to install any package while using the
box contents for dependencies. This can be used to install a local package
(from the filesystem) while using a box for dependencies, e.g.
`cd path/to/my/package; npmunbox --install=. path/to/box.npmbox`
* New unbox option `--scripts` to enable running of scripts. (By default,
npmbox acts like `--ignore-scripts` was specified.)
* New options `--proxy` and `--https-proxy` which pass through to the
underlying `npm` invocation. Works on both `npmbox` and `npmunbox`. In the
latter case, this can help prevent unboxing from inadvertently hitting the
network (by specifying nonexistent proxies).
Also worthy of note is that npm, inc. has begun thinking and working in how to do this within npm itself (and hopefully obsoleting this project entirely). There's a good blog post over at npm, inc called "dealing with problematic dependencies in a restricted network environment" that details some of the problems: [Check it out here!](http://blog.npmjs.org/post/145724408060/dealing-with-problematic-dependencies-in-a)
## Usage of `npmbox`
Given some package, like `express` this command will create a archive file of that package and all of its dependencies, such that a npmunbox of that archive file will install express and all of its dependencies.
npmbox - Create an archive for offline installation of one or more packages.
Usage:
npmbox --help
npmbox [options] <package> <package>...
Options:
-v, --verbose Shows npm output which is normally hidden.
-s, --silent Shows no output whatsoever.
-t, --target Specify the .npmbox file to write.
--proxy=<url> npm --proxy switch.
--https-proxy=<url> npm --https-proxy switch.
You must specify at least one package. Packages can be anything accepted as
an argument to `npm install`, and can also be a local path to a `.json` file,
assumed to be in `package.json` format; in this case, the dependencies listed
in the file are included in the box (except for `devDependencies`).
All specified packages get bundled into a single archive.
npmbox files end with the .npmbox extension.
NOTE: When creating an archive file for a package destined to be installed on an offline machine clear your npm cache before using npmbox.
npm cache clean
## Usage of `npmunbox`
Given some .npmbox file (must end with the .npmbox extension), installs the contents and all of it dependencies.
npmunbox - Extracts a .npmbox file and installs the contained package.
Usage:
npmunbox --help
npmunbox [options] <nmpbox-file> <npmbox-file>...
Options:
-v, --verbose Shows npm output which is normally hidden.
-s, --silent Shows additional output which is normally hidden.
-p, --path Specify the path to a folder from which the .npmbox file(s) will be read.
-i, --install=<pkg> Installs the indicated package instead of using the .npmbox manifest.
--scripts Enable running of scripts during installation.
-g, --global Installs package globally as if --global was passed to npm.
-C, --prefix npm --prefix switch.
-S, --save npm --save switch.
-D, --save-dev npm --save-dev switch.
-O, --save-optional npm --save-optional switch.
-B, --save-bundle npm --save-bundle switch.
-E, --save-exact npm --save-exact switch.
--proxy=<url> npm --proxy switch.
--https-proxy=<url> npm --https-proxy switch.
You must specify at least one file.
You may specify more than one file, and each will be installed.
If an .npmbox file contains multiple packages, unboxing the .npmbox will install ALL of those packages.
## Using `npmunbox` without npmbox being installed
A particular use case with npmunbox comes up fairly often: **how do I use npmbox without first installing npmbox**. Specifically, many people have asked for a way to run npmunbox as a means to installing npmbox. You can see that this is a bit of a chicken and egg problem. How do we install npmbox from an npmbox file?
### Installing npmbox from an .npmbox file
**On a system that does have access to the Internet, you need to do the following:**
1). If npmbox is not globally installed on your online system, do so now:
npm install -g npmbox
2). In a folder in which you can read/write:
npmbox npmbox
3). Copy the resulting `npmbox.npmbox` file to you offline system in whatever manner allowed to you, This could involve coping to movable media and transferring that way, however you would do it.
**On the system you want to install npmbox to, do the following:**
1). Create a new directory:
mkdir somedir
2). Change to it:
cd somedir
3). Copy the npmbox.npmbox folder into this directory:
cp /media/usb/npmbox.npmbox .
or
copy E:\npmbox.npmbox .
4). Untar the .npmbox file. This will create the .npmbox.cache folder.
tar --no-same-owner --no-same-permissions -xvzf npmbox.npmbox
NOTE: If for some reason `--no-same-owner` or `--no-same-permissions` do not work, remove them and adjust the permissions/ownership yourself. You will need to ensure that npm can see all the files in the .npmbox.cache file structure.
NOTE: On some OSes it may also be necessary to drop the `-z` switch from the tar command as well.
NOTE: On windows you might not have the tar command. You can use another zip utility (like 7-zip or winzip) to extract the file if you like. Just please note that the file is a .tar.gz file and thus you may need to extract it twice, once for the zip, the second for the tar. **If you do this, please make sure to remove the tar file from your local directory before running the npm command below.**
5). Install npmbox globally using the following command.
For unix or macs...
npm install --global --cache ./.npmbox.cache --optional --cache-min 99999999999 --shrinkwrap false npmbox
For windows...
npm install --global --cache .\.npmbox.cache --optional --cache-min 99999999999 --shrinkwrap false npmbox
NOTE: If you have a file called `npmbox` (no extension) in the local directory, this will not work correctly. Please remove said `npmbox` file.
6). Once npmbox is installed globally you can use it to install other .npmbox files:
npmunbox blah
NOTE: If you are running into issues where npmunbox is still trying to reach out to the internet it may help to try clearing your npm cache on the machine
npm cache clean
## Common Problems
Quick FAQ to hopefully answer some of the questions out there that seem to keep creeping up...
1). Help Please!
Sorry, I am only one person and I already have a full time job. Using open source solutions come at the risk of almost no support. If after reading this entire faq you still think you have a bug, file a bug. Or better yet, grab the source code, fix it, and submit a pull request. I love pull requests.
2). npmunbox keep trying to connect to registry.npmjs.org on my offline system.
99% of the time this occurs is because the npmbox didn't get some resource that npmunbox is looking for and cannot find in the npmbox file. This happens. There are TONS of edge cases that npmbox misses. Two worth nothing:
* Some packages reference git repos instead of npm packages. This has been fixed as of version 3.0 of npmbox. Very exciting.
* Packages that execute external scripts that call out to git repos or npm are entirely outside of the control of npmbox. Not much we can do about that.
3). When I run the command described above to install npmbox on my offline machine I get an error.
This if frequently caused by incorrectly referencing where the `.npmbox-cache` file is. Please check the section of the command `--cache .\.npmbox-cache` and make sure it is pointing at the correct location.
4). When is npm going to add this functionality?
npm, inc. is actively working on this problem as we speak. Read this blog post for some of the challenges they are facing: [Check it out here!](http://blog.npmjs.org/post/145724408060/dealing-with-problematic-dependencies-in-a)
5). I used to be able to create multiple .npmbox files with a single command. Why did that change?
In order to support multiple npm packages in a single .npmbox file we had to change how this works. It's still possible to create multiple .npmbox per package, but you will just need to run the command multiple times.
6). But I wanted it to work the old way with one .npmbox file per package.
Sorry. The multiple packages per single file change is a big deal. It lets you create a single .npmbox with multiple packages but without redundant libraries being include multiple times. So nice. Multiple packages in a single .npmbox file also lets you unbox a single .npmbox file and get multiple installs.
================================================
FILE: bin/npmbox
================================================
#!/usr/bin/env node
// npmbox by Glen R. Goodwin (@areinet)
// https://github.com/arei/npmbox.git
var path = require('path');
var fs = require('fs');
var lib = path.join(path.dirname(fs.realpathSync(__filename)), '../');
require(lib + '/npmbox');
================================================
FILE: bin/npmunbox
================================================
#!/usr/bin/env node
// npmbox by Glen R. Goodwin (@areinet)
// https://github.com/arei/npmbox.git
var path = require('path');
var fs = require('fs');
var lib = path.join(path.dirname(fs.realpathSync(__filename)), '../');
require(lib + '/npmunbox');
================================================
FILE: npm-shrinkwrap.json
================================================
{
"name": "npmbox",
"version": "4.2.0",
"dependencies": {
"assertion-error": {
"version": "1.0.2",
"from": "assertion-error@>=1.0.1 <2.0.0",
"resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.0.2.tgz"
},
"balanced-match": {
"version": "0.4.2",
"from": "balanced-match@>=0.4.1 <0.5.0",
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz"
},
"block-stream": {
"version": "0.0.9",
"from": "block-stream@*",
"resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz"
},
"bluebird": {
"version": "2.10.2",
"from": "bluebird@>=2.9.34 <3.0.0",
"resolved": "https://registry.npmjs.org/bluebird/-/bluebird-2.10.2.tgz"
},
"brace-expansion": {
"version": "1.1.6",
"from": "brace-expansion@>=1.0.0 <2.0.0",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.6.tgz"
},
"builtin-modules": {
"version": "1.1.1",
"from": "builtin-modules@>=1.0.0 <2.0.0",
"resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz"
},
"chai": {
"version": "3.5.0",
"from": "chai@>=3.2.0 <4.0.0",
"resolved": "https://registry.npmjs.org/chai/-/chai-3.5.0.tgz"
},
"commander": {
"version": "2.9.0",
"from": "commander@>=2.8.1 <3.0.0",
"resolved": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz"
},
"concat-map": {
"version": "0.0.1",
"from": "concat-map@0.0.1",
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz"
},
"debug": {
"version": "2.2.0",
"from": "debug@2.2.0",
"resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz"
},
"deep-eql": {
"version": "0.1.3",
"from": "deep-eql@>=0.1.3 <0.2.0",
"resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-0.1.3.tgz",
"dependencies": {
"type-detect": {
"version": "0.1.1",
"from": "type-detect@0.1.1",
"resolved": "https://registry.npmjs.org/type-detect/-/type-detect-0.1.1.tgz"
}
}
},
"diff": {
"version": "1.4.0",
"from": "diff@1.4.0",
"resolved": "https://registry.npmjs.org/diff/-/diff-1.4.0.tgz"
},
"escape-string-regexp": {
"version": "1.0.2",
"from": "escape-string-regexp@1.0.2",
"resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.2.tgz"
},
"fs-extra": {
"version": "1.0.0",
"from": "fs-extra@1.0.0",
"resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-1.0.0.tgz"
},
"fstream": {
"version": "1.0.10",
"from": "fstream@>=1.0.7 <2.0.0",
"resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.10.tgz"
},
"glob": {
"version": "3.2.11",
"from": "glob@3.2.11",
"resolved": "https://registry.npmjs.org/glob/-/glob-3.2.11.tgz"
},
"graceful-fs": {
"version": "4.1.5",
"from": "graceful-fs@>=4.1.2 <5.0.0",
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.5.tgz"
},
"graceful-readlink": {
"version": "1.0.1",
"from": "graceful-readlink@>=1.0.0",
"resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz"
},
"growl": {
"version": "1.9.2",
"from": "growl@1.9.2",
"resolved": "https://registry.npmjs.org/growl/-/growl-1.9.2.tgz"
},
"hosted-git-info": {
"version": "2.1.5",
"from": "hosted-git-info@>=2.1.4 <3.0.0",
"resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.1.5.tgz"
},
"inflight": {
"version": "1.0.6",
"from": "inflight@>=1.0.4 <2.0.0",
"resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz"
},
"inherits": {
"version": "2.0.1",
"from": "inherits@>=2.0.0 <2.1.0",
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz"
},
"is": {
"version": "3.1.0",
"from": "is@3.1.0",
"resolved": "https://registry.npmjs.org/is/-/is-3.1.0.tgz"
},
"is-builtin-module": {
"version": "1.0.0",
"from": "is-builtin-module@>=1.0.0 <2.0.0",
"resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz"
},
"jade": {
"version": "0.26.3",
"from": "jade@0.26.3",
"resolved": "https://registry.npmjs.org/jade/-/jade-0.26.3.tgz",
"dependencies": {
"commander": {
"version": "0.6.1",
"from": "commander@0.6.1",
"resolved": "https://registry.npmjs.org/commander/-/commander-0.6.1.tgz"
},
"mkdirp": {
"version": "0.3.0",
"from": "mkdirp@0.3.0",
"resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.3.0.tgz"
}
}
},
"jju": {
"version": "1.3.0",
"from": "jju@>=1.1.0 <2.0.0",
"resolved": "https://registry.npmjs.org/jju/-/jju-1.3.0.tgz"
},
"json-parse-helpfulerror": {
"version": "1.0.3",
"from": "json-parse-helpfulerror@>=1.0.2 <2.0.0",
"resolved": "https://registry.npmjs.org/json-parse-helpfulerror/-/json-parse-helpfulerror-1.0.3.tgz"
},
"jsonfile": {
"version": "2.4.0",
"from": "jsonfile@>=2.1.0 <3.0.0",
"resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz",
"dependencies": {
"graceful-fs": {
"version": "4.1.11",
"from": "graceful-fs@>=4.1.6 <5.0.0",
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
"optional": true
}
}
},
"klaw": {
"version": "1.3.1",
"from": "klaw@>=1.0.0 <2.0.0",
"resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz",
"dependencies": {
"graceful-fs": {
"version": "4.1.11",
"from": "graceful-fs@^4.1.9",
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
"optional": true
}
}
},
"lru-cache": {
"version": "2.7.3",
"from": "lru-cache@>=2.0.0 <3.0.0",
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.7.3.tgz"
},
"minimatch": {
"version": "0.3.0",
"from": "minimatch@>=0.3.0 <0.4.0",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.3.0.tgz"
},
"minimist": {
"version": "0.0.8",
"from": "minimist@0.0.8",
"resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz"
},
"mkdirp": {
"version": "0.5.1",
"from": "mkdirp@>=0.5.0 >=0.0.0 <1.0.0",
"resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz"
},
"mocha": {
"version": "2.5.3",
"from": "mocha@>=2.2.5 <3.0.0",
"resolved": "https://registry.npmjs.org/mocha/-/mocha-2.5.3.tgz",
"dependencies": {
"commander": {
"version": "2.3.0",
"from": "commander@2.3.0",
"resolved": "https://registry.npmjs.org/commander/-/commander-2.3.0.tgz"
}
}
},
"mout": {
"version": "0.11.1",
"from": "mout@>=0.11.0 <0.12.0",
"resolved": "https://registry.npmjs.org/mout/-/mout-0.11.1.tgz"
},
"ms": {
"version": "0.7.1",
"from": "ms@0.7.1",
"resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz"
},
"normalize-package-data": {
"version": "2.3.5",
"from": "normalize-package-data@>=2.0.0 <3.0.0",
"resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.3.5.tgz"
},
"npm": {
"version": "3.10.3",
"from": "npm@3.10.3",
"resolved": "https://registry.npmjs.org/npm/-/npm-3.10.3.tgz",
"dependencies": {
"abbrev": {
"version": "1.0.9",
"from": "abbrev@1.0.9",
"resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz"
},
"ansi-regex": {
"version": "2.0.0",
"from": "ansi-regex@2.0.0",
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.0.0.tgz"
},
"ansicolors": {
"version": "0.3.2",
"from": "ansicolors@>=0.3.2 <0.4.0",
"resolved": "https://registry.npmjs.org/ansicolors/-/ansicolors-0.3.2.tgz"
},
"ansistyles": {
"version": "0.1.3",
"from": "ansistyles@>=0.1.3 <0.2.0",
"resolved": "https://registry.npmjs.org/ansistyles/-/ansistyles-0.1.3.tgz"
},
"aproba": {
"version": "1.0.4",
"from": "aproba@>=1.0.3 <1.1.0",
"resolved": "https://registry.npmjs.org/aproba/-/aproba-1.0.4.tgz"
},
"archy": {
"version": "1.0.0",
"from": "archy@>=1.0.0 <1.1.0",
"resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz"
},
"asap": {
"version": "2.0.4",
"from": "asap@latest",
"resolved": "https://unpm.uberinternal.com/asap/-/asap-2.0.4.tgz"
},
"chownr": {
"version": "1.0.1",
"from": "chownr@>=1.0.1 <1.1.0",
"resolved": "https://registry.npmjs.org/chownr/-/chownr-1.0.1.tgz"
},
"cmd-shim": {
"version": "2.0.2",
"from": "cmd-shim@2.0.2",
"resolved": "https://registry.npmjs.org/cmd-shim/-/cmd-shim-2.0.2.tgz"
},
"columnify": {
"version": "1.5.4",
"from": "columnify@1.5.4",
"resolved": "https://registry.npmjs.org/columnify/-/columnify-1.5.4.tgz",
"dependencies": {
"wcwidth": {
"version": "1.0.0",
"from": "wcwidth@>=1.0.0 <2.0.0",
"resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.0.tgz",
"dependencies": {
"defaults": {
"version": "1.0.3",
"from": "defaults@>=1.0.0 <2.0.0",
"resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz",
"dependencies": {
"clone": {
"version": "1.0.2",
"from": "clone@>=1.0.2 <2.0.0",
"resolved": "https://registry.npmjs.org/clone/-/clone-1.0.2.tgz"
}
}
}
}
}
}
},
"config-chain": {
"version": "1.1.10",
"from": "config-chain@1.1.10",
"resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.10.tgz",
"dependencies": {
"proto-list": {
"version": "1.2.4",
"from": "proto-list@>=1.2.1 <1.3.0",
"resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz"
}
}
},
"debuglog": {
"version": "1.0.1",
"from": "debuglog@1.0.1",
"resolved": "https://registry.npmjs.org/debuglog/-/debuglog-1.0.1.tgz"
},
"dezalgo": {
"version": "1.0.3",
"from": "dezalgo@>=1.0.3 <1.1.0"
},
"editor": {
"version": "1.0.0",
"from": "editor@>=1.0.0 <1.1.0",
"resolved": "https://registry.npmjs.org/editor/-/editor-1.0.0.tgz"
},
"fs-vacuum": {
"version": "1.2.9",
"from": "fs-vacuum@latest",
"resolved": "https://registry.npmjs.org/fs-vacuum/-/fs-vacuum-1.2.9.tgz"
},
"fs-write-stream-atomic": {
"version": "1.0.8",
"from": "fs-write-stream-atomic@1.0.8"
},
"fstream": {
"version": "1.0.10",
"from": "fstream@>=1.0.10 <1.1.0",
"resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.10.tgz"
},
"fstream-npm": {
"version": "1.1.0",
"from": "fstream-npm@latest",
"resolved": "https://registry.npmjs.org/fstream-npm/-/fstream-npm-1.1.0.tgz",
"dependencies": {
"fstream-ignore": {
"version": "1.0.5",
"from": "fstream-ignore@>=1.0.0 <2.0.0",
"resolved": "https://registry.npmjs.org/fstream-ignore/-/fstream-ignore-1.0.5.tgz",
"dependencies": {
"minimatch": {
"version": "3.0.0",
"from": "minimatch@>=3.0.0 <4.0.0",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.0.tgz",
"dependencies": {
"brace-expansion": {
"version": "1.1.4",
"from": "brace-expansion@>=1.0.0 <2.0.0",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.4.tgz",
"dependencies": {
"balanced-match": {
"version": "0.4.1",
"from": "balanced-match@>=0.4.1 <0.5.0",
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.1.tgz"
},
"concat-map": {
"version": "0.0.1",
"from": "concat-map@0.0.1",
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz"
}
}
}
}
}
}
}
}
},
"glob": {
"version": "7.0.4",
"from": "glob@>=7.0.3 <7.1.0",
"resolved": "https://registry.npmjs.org/glob/-/glob-7.0.4.tgz",
"dependencies": {
"fs.realpath": {
"version": "1.0.0",
"from": "fs.realpath@>=1.0.0 <2.0.0",
"resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz"
},
"minimatch": {
"version": "3.0.0",
"from": "minimatch@>=2.0.0 <3.0.0||>=3.0.0 <4.0.0",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.0.tgz",
"dependencies": {
"brace-expansion": {
"version": "1.1.5",
"from": "brace-expansion@>=1.0.0 <2.0.0",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.5.tgz",
"dependencies": {
"balanced-match": {
"version": "0.4.1",
"from": "balanced-match@>=0.4.1 <0.5.0",
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.1.tgz"
},
"concat-map": {
"version": "0.0.1",
"from": "concat-map@0.0.1",
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz"
}
}
}
}
},
"path-is-absolute": {
"version": "1.0.0",
"from": "path-is-absolute@>=1.0.0 <2.0.0",
"resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.0.tgz"
}
}
},
"graceful-fs": {
"version": "4.1.4",
"from": "graceful-fs@>=4.1.3 <4.2.0",
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.4.tgz"
},
"has-unicode": {
"version": "2.0.1",
"from": "has-unicode@>=2.0.0 <2.1.0",
"resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz"
},
"hosted-git-info": {
"version": "2.1.5",
"from": "hosted-git-info@latest",
"resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.1.5.tgz"
},
"iferr": {
"version": "0.1.5",
"from": "iferr@>=0.1.5 <0.2.0",
"resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz"
},
"imurmurhash": {
"version": "0.1.4",
"from": "imurmurhash@>=0.1.4 <0.2.0",
"resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz"
},
"inflight": {
"version": "1.0.5",
"from": "inflight@latest",
"resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.5.tgz"
},
"inherits": {
"version": "2.0.1",
"from": "inherits@>=2.0.1 <2.1.0",
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz"
},
"ini": {
"version": "1.3.4",
"from": "ini@>=1.3.4 <1.4.0",
"resolved": "https://registry.npmjs.org/ini/-/ini-1.3.4.tgz"
},
"init-package-json": {
"version": "1.9.4",
"from": "init-package-json@latest",
"resolved": "https://registry.npmjs.org/init-package-json/-/init-package-json-1.9.4.tgz",
"dependencies": {
"glob": {
"version": "6.0.4",
"from": "glob@>=6.0.0 <7.0.0",
"resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz",
"dependencies": {
"minimatch": {
"version": "3.0.0",
"from": "minimatch@>=2.0.0 <3.0.0||>=3.0.0 <4.0.0",
"dependencies": {
"brace-expansion": {
"version": "1.1.4",
"from": "brace-expansion@>=1.0.0 <2.0.0",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.4.tgz",
"dependencies": {
"balanced-match": {
"version": "0.4.1",
"from": "balanced-match@>=0.4.1 <0.5.0",
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.1.tgz"
},
"concat-map": {
"version": "0.0.1",
"from": "concat-map@0.0.1"
}
}
}
}
},
"path-is-absolute": {
"version": "1.0.0",
"from": "path-is-absolute@>=1.0.0 <2.0.0"
}
}
},
"promzard": {
"version": "0.3.0",
"from": "promzard@>=0.3.0 <0.4.0",
"resolved": "https://registry.npmjs.org/promzard/-/promzard-0.3.0.tgz"
}
}
},
"lockfile": {
"version": "1.0.1",
"from": "lockfile@>=1.0.1 <1.1.0",
"resolved": "https://registry.npmjs.org/lockfile/-/lockfile-1.0.1.tgz"
},
"lodash._baseindexof": {
"version": "3.1.0",
"from": "lodash._baseindexof@3.1.0",
"resolved": "https://registry.npmjs.org/lodash._baseindexof/-/lodash._baseindexof-3.1.0.tgz"
},
"lodash._baseuniq": {
"version": "4.6.0",
"from": "lodash._baseuniq@latest",
"resolved": "https://registry.npmjs.org/lodash._baseuniq/-/lodash._baseuniq-4.6.0.tgz",
"dependencies": {
"lodash._createset": {
"version": "4.0.3",
"from": "lodash._createset@>=4.0.0 <4.1.0",
"resolved": "https://registry.npmjs.org/lodash._createset/-/lodash._createset-4.0.3.tgz"
},
"lodash._root": {
"version": "3.0.1",
"from": "lodash._root@>=3.0.0 <3.1.0",
"resolved": "https://registry.npmjs.org/lodash._root/-/lodash._root-3.0.1.tgz"
}
}
},
"lodash._bindcallback": {
"version": "3.0.1",
"from": "lodash._bindcallback@3.0.1",
"resolved": "https://registry.npmjs.org/lodash._bindcallback/-/lodash._bindcallback-3.0.1.tgz"
},
"lodash._cacheindexof": {
"version": "3.0.2",
"from": "lodash._cacheindexof@3.0.2",
"resolved": "https://registry.npmjs.org/lodash._cacheindexof/-/lodash._cacheindexof-3.0.2.tgz"
},
"lodash._createcache": {
"version": "3.1.2",
"from": "lodash._createcache@3.1.2",
"resolved": "https://registry.npmjs.org/lodash._createcache/-/lodash._createcache-3.1.2.tgz"
},
"lodash._getnative": {
"version": "3.9.1",
"from": "lodash._getnative@3.9.1",
"resolved": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz"
},
"lodash.clonedeep": {
"version": "4.3.2",
"from": "lodash.clonedeep@4.3.2",
"resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.3.2.tgz",
"dependencies": {
"lodash._baseclone": {
"version": "4.5.3",
"from": "lodash._baseclone@>=4.0.0 <5.0.0",
"resolved": "https://registry.npmjs.org/lodash._baseclone/-/lodash._baseclone-4.5.3.tgz"
}
}
},
"lodash.restparam": {
"version": "3.6.1",
"from": "lodash.restparam@3.6.1",
"resolved": "https://registry.npmjs.org/lodash.restparam/-/lodash.restparam-3.6.1.tgz"
},
"lodash.union": {
"version": "4.4.0",
"from": "lodash.union@latest",
"resolved": "https://registry.npmjs.org/lodash.union/-/lodash.union-4.4.0.tgz",
"dependencies": {
"lodash._baseflatten": {
"version": "4.2.1",
"from": "lodash._baseflatten@>=4.2.0 <4.3.0",
"resolved": "https://registry.npmjs.org/lodash._baseflatten/-/lodash._baseflatten-4.2.1.tgz"
},
"lodash.rest": {
"version": "4.0.3",
"from": "lodash.rest@>=4.0.0 <5.0.0",
"resolved": "https://registry.npmjs.org/lodash.rest/-/lodash.rest-4.0.3.tgz"
}
}
},
"lodash.uniq": {
"version": "4.3.0",
"from": "lodash.uniq@latest",
"resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.3.0.tgz"
},
"lodash.without": {
"version": "4.2.0",
"from": "lodash.without@latest",
"resolved": "https://registry.npmjs.org/lodash.without/-/lodash.without-4.2.0.tgz",
"dependencies": {
"lodash._basedifference": {
"version": "4.5.0",
"from": "lodash._basedifference@>=4.5.0 <4.6.0",
"resolved": "https://registry.npmjs.org/lodash._basedifference/-/lodash._basedifference-4.5.0.tgz",
"dependencies": {
"lodash._root": {
"version": "3.0.1",
"from": "lodash._root@>=3.0.0 <3.1.0",
"resolved": "https://registry.npmjs.org/lodash._root/-/lodash._root-3.0.1.tgz"
}
}
},
"lodash.rest": {
"version": "4.0.3",
"from": "lodash.rest@>=4.0.0 <5.0.0",
"resolved": "https://registry.npmjs.org/lodash.rest/-/lodash.rest-4.0.3.tgz"
}
}
},
"mkdirp": {
"version": "0.5.1",
"from": "mkdirp@>=0.5.1 <0.6.0",
"resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
"dependencies": {
"minimist": {
"version": "0.0.8",
"from": "minimist@0.0.8",
"resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz"
}
}
},
"node-gyp": {
"version": "3.3.1",
"from": "node-gyp@3.3.1",
"resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-3.3.1.tgz",
"dependencies": {
"glob": {
"version": "4.5.3",
"from": "glob@>=3.0.0 <4.0.0||>=4.0.0 <5.0.0",
"resolved": "https://registry.npmjs.org/glob/-/glob-4.5.3.tgz",
"dependencies": {
"minimatch": {
"version": "2.0.10",
"from": "minimatch@>=2.0.1 <3.0.0",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-2.0.10.tgz",
"dependencies": {
"brace-expansion": {
"version": "1.1.3",
"from": "brace-expansion@>=1.0.0 <2.0.0",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.3.tgz",
"dependencies": {
"balanced-match": {
"version": "0.3.0",
"from": "balanced-match@>=0.3.0 <0.4.0",
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.3.0.tgz"
},
"concat-map": {
"version": "0.0.1",
"from": "concat-map@0.0.1",
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz"
}
}
}
}
}
}
},
"minimatch": {
"version": "1.0.0",
"from": "minimatch@>=1.0.0 <2.0.0",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-1.0.0.tgz",
"dependencies": {
"lru-cache": {
"version": "2.7.3",
"from": "lru-cache@>=2.0.0 <3.0.0",
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.7.3.tgz"
},
"sigmund": {
"version": "1.0.1",
"from": "sigmund@>=1.0.0 <1.1.0",
"resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz"
}
}
},
"npmlog": {
"version": "2.0.4",
"from": "npmlog@>=0.0.0 <1.0.0||>=1.0.0 <2.0.0||>=2.0.0 <3.0.0",
"resolved": "https://registry.npmjs.org/npmlog/-/npmlog-2.0.4.tgz",
"dependencies": {
"ansi": {
"version": "0.3.1",
"from": "ansi@~0.3.1",
"resolved": "https://registry.npmjs.org/ansi/-/ansi-0.3.1.tgz"
},
"are-we-there-yet": {
"version": "1.1.2",
"from": "are-we-there-yet@~1.1.2",
"resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.2.tgz",
"dependencies": {
"delegates": {
"version": "1.0.0",
"from": "delegates@^1.0.0",
"resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz"
}
}
},
"gauge": {
"version": "1.2.7",
"from": "gauge@>=1.2.5 <1.3.0",
"resolved": "https://registry.npmjs.org/gauge/-/gauge-1.2.7.tgz",
"dependencies": {
"lodash.pad": {
"version": "4.4.0",
"from": "lodash.pad@>=4.1.0 <5.0.0",
"resolved": "https://registry.npmjs.org/lodash.pad/-/lodash.pad-4.4.0.tgz",
"dependencies": {
"lodash._baseslice": {
"version": "4.0.0",
"from": "lodash._baseslice@>=4.0.0 <4.1.0",
"resolved": "https://registry.npmjs.org/lodash._baseslice/-/lodash._baseslice-4.0.0.tgz"
},
"lodash._basetostring": {
"version": "4.12.0",
"from": "lodash._basetostring@>=4.12.0 <4.13.0",
"resolved": "https://registry.npmjs.org/lodash._basetostring/-/lodash._basetostring-4.12.0.tgz"
},
"lodash.tostring": {
"version": "4.1.3",
"from": "lodash.tostring@>=4.0.0 <5.0.0",
"resolved": "https://registry.npmjs.org/lodash.tostring/-/lodash.tostring-4.1.3.tgz"
}
}
},
"lodash.padend": {
"version": "4.5.0",
"from": "lodash.padend@>=4.1.0 <5.0.0",
"resolved": "https://registry.npmjs.org/lodash.padend/-/lodash.padend-4.5.0.tgz",
"dependencies": {
"lodash._baseslice": {
"version": "4.0.0",
"from": "lodash._baseslice@~4.0.0",
"resolved": "https://registry.npmjs.org/lodash._baseslice/-/lodash._baseslice-4.0.0.tgz"
},
"lodash._basetostring": {
"version": "4.12.0",
"from": "lodash._basetostring@~4.12.0",
"resolved": "https://registry.npmjs.org/lodash._basetostring/-/lodash._basetostring-4.12.0.tgz"
},
"lodash.tostring": {
"version": "4.1.3",
"from": "lodash.tostring@^4.0.0",
"resolved": "https://registry.npmjs.org/lodash.tostring/-/lodash.tostring-4.1.3.tgz"
}
}
},
"lodash.padstart": {
"version": "4.5.0",
"from": "lodash.padstart@>=4.1.0 <5.0.0",
"resolved": "https://registry.npmjs.org/lodash.padstart/-/lodash.padstart-4.5.0.tgz",
"dependencies": {
"lodash._baseslice": {
"version": "4.0.0",
"from": "lodash._baseslice@~4.0.0",
"resolved": "https://registry.npmjs.org/lodash._baseslice/-/lodash._baseslice-4.0.0.tgz"
},
"lodash._basetostring": {
"version": "4.12.0",
"from": "lodash._basetostring@~4.12.0",
"resolved": "https://registry.npmjs.org/lodash._basetostring/-/lodash._basetostring-4.12.0.tgz"
},
"lodash.tostring": {
"version": "4.1.3",
"from": "lodash.tostring@^4.0.0",
"resolved": "https://registry.npmjs.org/lodash.tostring/-/lodash.tostring-4.1.3.tgz"
}
}
}
}
}
}
},
"path-array": {
"version": "1.0.1",
"from": "path-array@>=1.0.0 <2.0.0",
"resolved": "https://registry.npmjs.org/path-array/-/path-array-1.0.1.tgz",
"dependencies": {
"array-index": {
"version": "1.0.0",
"from": "array-index@>=1.0.0 <2.0.0",
"resolved": "https://registry.npmjs.org/array-index/-/array-index-1.0.0.tgz",
"dependencies": {
"debug": {
"version": "2.2.0",
"from": "debug@*",
"resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz",
"dependencies": {
"ms": {
"version": "0.7.1",
"from": "ms@0.7.1",
"resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz"
}
}
},
"es6-symbol": {
"version": "3.0.2",
"from": "es6-symbol@>=3.0.2 <4.0.0",
"resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.0.2.tgz",
"dependencies": {
"d": {
"version": "0.1.1",
"from": "d@>=0.1.1 <0.2.0",
"resolved": "https://registry.npmjs.org/d/-/d-0.1.1.tgz"
},
"es5-ext": {
"version": "0.10.11",
"from": "es5-ext@>=0.10.10 <0.11.0",
"resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.11.tgz",
"dependencies": {
"es6-iterator": {
"version": "2.0.0",
"from": "es6-iterator@>=2.0.0 <3.0.0",
"resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.0.tgz"
}
}
}
}
}
}
}
}
}
}
},
"nopt": {
"version": "3.0.6",
"from": "nopt@>=3.0.6 <3.1.0",
"resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz"
},
"normalize-git-url": {
"version": "3.0.2",
"from": "normalize-git-url@>=3.0.2 <3.1.0"
},
"normalize-package-data": {
"version": "2.3.5",
"from": "normalize-package-data@>=2.3.5 <2.4.0",
"resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.3.5.tgz",
"dependencies": {
"is-builtin-module": {
"version": "1.0.0",
"from": "is-builtin-module@>=1.0.0 <2.0.0",
"resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz",
"dependencies": {
"builtin-modules": {
"version": "1.1.1",
"from": "builtin-modules@>=1.0.0 <2.0.0",
"resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz"
}
}
}
}
},
"npm-cache-filename": {
"version": "1.0.2",
"from": "npm-cache-filename@>=1.0.2 <1.1.0",
"resolved": "https://registry.npmjs.org/npm-cache-filename/-/npm-cache-filename-1.0.2.tgz"
},
"npm-install-checks": {
"version": "3.0.0",
"from": "npm-install-checks@3.0.0"
},
"npm-package-arg": {
"version": "4.2.0",
"from": "npm-package-arg@4.2.0",
"resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-4.2.0.tgz"
},
"npm-registry-client": {
"version": "7.1.2",
"from": "npm-registry-client@latest",
"resolved": "https://registry.npmjs.org/npm-registry-client/-/npm-registry-client-7.1.2.tgz",
"dependencies": {
"concat-stream": {
"version": "1.5.1",
"from": "concat-stream@>=1.4.6 <2.0.0",
"resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.5.1.tgz",
"dependencies": {
"readable-stream": {
"version": "2.0.6",
"from": "readable-stream@>=2.0.0 <2.1.0",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz",
"dependencies": {
"core-util-is": {
"version": "1.0.2",
"from": "core-util-is@>=1.0.0 <1.1.0"
},
"isarray": {
"version": "1.0.0",
"from": "isarray@>=1.0.0 <1.1.0"
},
"process-nextick-args": {
"version": "1.0.7",
"from": "process-nextick-args@>=1.0.6 <1.1.0",
"resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz"
},
"string_decoder": {
"version": "0.10.31",
"from": "string_decoder@>=0.10.0 <0.11.0"
},
"util-deprecate": {
"version": "1.0.2",
"from": "util-deprecate@>=1.0.1 <1.1.0"
}
}
},
"typedarray": {
"version": "0.0.6",
"from": "typedarray@>=0.0.5 <0.1.0",
"resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz"
}
}
},
"retry": {
"version": "0.8.0",
"from": "retry@>=0.8.0 <0.9.0",
"resolved": "https://registry.npmjs.org/retry/-/retry-0.8.0.tgz"
}
}
},
"npm-user-validate": {
"version": "0.1.4",
"from": "npm-user-validate@latest",
"resolved": "https://registry.npmjs.org/npm-user-validate/-/npm-user-validate-0.1.4.tgz"
},
"npmlog": {
"version": "3.1.2",
"from": "npmlog@latest",
"resolved": "https://registry.npmjs.org/npmlog/-/npmlog-3.1.2.tgz",
"dependencies": {
"are-we-there-yet": {
"version": "1.1.2",
"from": "are-we-there-yet@>=1.1.2 <1.2.0",
"resolved": "http://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.2.tgz",
"dependencies": {
"delegates": {
"version": "1.0.0",
"from": "delegates@>=1.0.0 <2.0.0",
"resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz"
}
}
},
"console-control-strings": {
"version": "1.1.0",
"from": "console-control-strings@>=1.1.0 <1.2.0",
"resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz"
},
"gauge": {
"version": "2.6.0",
"from": "gauge@>=2.6.0 <2.7.0",
"resolved": "https://registry.npmjs.org/gauge/-/gauge-2.6.0.tgz",
"dependencies": {
"has-color": {
"version": "0.1.7",
"from": "has-color@>=0.1.7 <0.2.0",
"resolved": "https://registry.npmjs.org/has-color/-/has-color-0.1.7.tgz"
},
"object-assign": {
"version": "4.1.0",
"from": "object-assign@>=4.0.1 <5.0.0",
"resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.0.tgz"
},
"signal-exit": {
"version": "3.0.0",
"from": "signal-exit@>=3.0.0 <4.0.0",
"resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.0.tgz"
},
"string-width": {
"version": "1.0.1",
"from": "string-width@>=1.0.1 <2.0.0",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.1.tgz",
"dependencies": {
"code-point-at": {
"version": "1.0.0",
"from": "code-point-at@>=1.0.0 <2.0.0",
"resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.0.0.tgz",
"dependencies": {
"number-is-nan": {
"version": "1.0.0",
"from": "number-is-nan@>=1.0.0 <2.0.0",
"resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.0.tgz"
}
}
},
"is-fullwidth-code-point": {
"version": "1.0.0",
"from": "is-fullwidth-code-point@>=1.0.0 <2.0.0",
"resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
"dependencies": {
"number-is-nan": {
"version": "1.0.0",
"from": "number-is-nan@^1.0.0",
"resolved": "http://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.0.tgz"
}
}
}
}
},
"wide-align": {
"version": "1.1.0",
"from": "wide-align@>=1.1.0 <2.0.0",
"resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.0.tgz"
}
}
},
"set-blocking": {
"version": "2.0.0",
"from": "set-blocking@>=2.0.0 <2.1.0",
"resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz"
}
}
},
"once": {
"version": "1.3.3",
"from": "once@>=1.3.3 <1.4.0",
"resolved": "https://registry.npmjs.org/once/-/once-1.3.3.tgz"
},
"opener": {
"version": "1.4.1",
"from": "opener@>=1.4.1 <1.5.0",
"resolved": "https://registry.npmjs.org/opener/-/opener-1.4.1.tgz"
},
"osenv": {
"version": "0.1.3",
"from": "osenv@>=0.1.3 <0.2.0",
"resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.3.tgz",
"dependencies": {
"os-homedir": {
"version": "1.0.1",
"from": "os-homedir@>=1.0.0 <2.0.0",
"resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.1.tgz"
},
"os-tmpdir": {
"version": "1.0.1",
"from": "os-tmpdir@>=1.0.0 <2.0.0",
"resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.1.tgz"
}
}
},
"path-is-inside": {
"version": "1.0.1",
"from": "path-is-inside@>=1.0.1 <1.1.0",
"resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.1.tgz"
},
"read": {
"version": "1.0.7",
"from": "read@>=1.0.7 <1.1.0",
"resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz",
"dependencies": {
"mute-stream": {
"version": "0.0.5",
"from": "mute-stream@>=0.0.4 <0.1.0",
"resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.5.tgz"
}
}
},
"read-cmd-shim": {
"version": "1.0.1",
"from": "read-cmd-shim@>=1.0.1 <1.1.0",
"resolved": "https://registry.npmjs.org/read-cmd-shim/-/read-cmd-shim-1.0.1.tgz"
},
"read-installed": {
"version": "4.0.3",
"from": "read-installed@>=4.0.3 <4.1.0",
"resolved": "https://registry.npmjs.org/read-installed/-/read-installed-4.0.3.tgz",
"dependencies": {
"util-extend": {
"version": "1.0.3",
"from": "util-extend@>=1.0.1 <2.0.0",
"resolved": "https://registry.npmjs.org/util-extend/-/util-extend-1.0.3.tgz"
}
}
},
"read-package-json": {
"version": "2.0.4",
"from": "read-package-json@>=2.0.3 <2.1.0",
"resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-2.0.4.tgz",
"dependencies": {
"glob": {
"version": "6.0.4",
"from": "glob@>=6.0.0 <7.0.0",
"resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz",
"dependencies": {
"minimatch": {
"version": "3.0.0",
"from": "minimatch@>=2.0.0 <3.0.0||>=3.0.0 <4.0.0",
"dependencies": {
"brace-expansion": {
"version": "1.1.3",
"from": "brace-expansion@>=1.0.0 <2.0.0",
"dependencies": {
"balanced-match": {
"version": "0.3.0",
"from": "balanced-match@>=0.3.0 <0.4.0"
},
"concat-map": {
"version": "0.0.1",
"from": "concat-map@0.0.1"
}
}
}
}
},
"path-is-absolute": {
"version": "1.0.0",
"from": "path-is-absolute@>=1.0.0 <2.0.0"
}
}
},
"json-parse-helpfulerror": {
"version": "1.0.3",
"from": "json-parse-helpfulerror@>=1.0.2 <2.0.0",
"resolved": "https://registry.npmjs.org/json-parse-helpfulerror/-/json-parse-helpfulerror-1.0.3.tgz",
"dependencies": {
"jju": {
"version": "1.3.0",
"from": "jju@>=1.1.0 <2.0.0",
"resolved": "https://registry.npmjs.org/jju/-/jju-1.3.0.tgz"
}
}
}
}
},
"read-package-tree": {
"version": "5.1.5",
"from": "read-package-tree@>=5.1.4 <5.2.0",
"resolved": "https://registry.npmjs.org/read-package-tree/-/read-package-tree-5.1.5.tgz"
},
"readable-stream": {
"version": "2.1.4",
"from": "readable-stream@latest",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.1.4.tgz",
"dependencies": {
"buffer-shims": {
"version": "1.0.0",
"from": "buffer-shims@>=1.0.0 <2.0.0",
"resolved": "https://registry.npmjs.org/buffer-shims/-/buffer-shims-1.0.0.tgz"
},
"core-util-is": {
"version": "1.0.2",
"from": "core-util-is@>=1.0.0 <1.1.0"
},
"isarray": {
"version": "1.0.0",
"from": "isarray@>=1.0.0 <1.1.0",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz"
},
"process-nextick-args": {
"version": "1.0.7",
"from": "process-nextick-args@>=1.0.6 <1.1.0",
"resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz"
},
"string_decoder": {
"version": "0.10.31",
"from": "string_decoder@>=0.10.0 <0.11.0"
},
"util-deprecate": {
"version": "1.0.2",
"from": "util-deprecate@>=1.0.1 <1.1.0",
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz"
}
}
},
"readdir-scoped-modules": {
"version": "1.0.2",
"from": "readdir-scoped-modules@1.0.2",
"resolved": "https://registry.npmjs.org/readdir-scoped-modules/-/readdir-scoped-modules-1.0.2.tgz"
},
"realize-package-specifier": {
"version": "3.0.3",
"from": "realize-package-specifier@>=3.0.2 <3.1.0"
},
"request": {
"version": "2.72.0",
"from": "request@latest",
"resolved": "https://registry.npmjs.org/request/-/request-2.72.0.tgz",
"dependencies": {
"aws-sign2": {
"version": "0.6.0",
"from": "aws-sign2@>=0.6.0 <0.7.0",
"resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz"
},
"aws4": {
"version": "1.3.2",
"from": "aws4@>=1.2.1 <2.0.0",
"resolved": "https://registry.npmjs.org/aws4/-/aws4-1.3.2.tgz",
"dependencies": {
"lru-cache": {
"version": "4.0.1",
"from": "lru-cache@>=4.0.0 <5.0.0",
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.0.1.tgz",
"dependencies": {
"pseudomap": {
"version": "1.0.2",
"from": "pseudomap@>=1.0.1 <2.0.0",
"resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz"
},
"yallist": {
"version": "2.0.0",
"from": "yallist@>=2.0.0 <3.0.0",
"resolved": "https://registry.npmjs.org/yallist/-/yallist-2.0.0.tgz"
}
}
}
}
},
"bl": {
"version": "1.1.2",
"from": "bl@>=1.1.2 <1.2.0",
"resolved": "https://registry.npmjs.org/bl/-/bl-1.1.2.tgz",
"dependencies": {
"readable-stream": {
"version": "2.0.6",
"from": "readable-stream@>=2.0.5 <2.1.0",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz",
"dependencies": {
"core-util-is": {
"version": "1.0.2",
"from": "core-util-is@>=1.0.0 <1.1.0"
},
"isarray": {
"version": "1.0.0",
"from": "isarray@>=1.0.0 <1.1.0"
},
"process-nextick-args": {
"version": "1.0.6",
"from": "process-nextick-args@>=1.0.6 <1.1.0"
},
"string_decoder": {
"version": "0.10.31",
"from": "string_decoder@>=0.10.0 <0.11.0"
},
"util-deprecate": {
"version": "1.0.2",
"from": "util-deprecate@>=1.0.1 <1.1.0"
}
}
}
}
},
"caseless": {
"version": "0.11.0",
"from": "caseless@>=0.11.0 <0.12.0",
"resolved": "https://registry.npmjs.org/caseless/-/caseless-0.11.0.tgz"
},
"combined-stream": {
"version": "1.0.5",
"from": "combined-stream@>=1.0.5 <1.1.0",
"resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz",
"dependencies": {
"delayed-stream": {
"version": "1.0.0",
"from": "delayed-stream@>=1.0.0 <1.1.0",
"resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz"
}
}
},
"extend": {
"version": "3.0.0",
"from": "extend@>=3.0.0 <3.1.0",
"resolved": "https://registry.npmjs.org/extend/-/extend-3.0.0.tgz"
},
"forever-agent": {
"version": "0.6.1",
"from": "forever-agent@>=0.6.1 <0.7.0",
"resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz"
},
"form-data": {
"version": "1.0.0-rc4",
"from": "form-data@>=1.0.0-rc3 <1.1.0",
"resolved": "https://registry.npmjs.org/form-data/-/form-data-1.0.0-rc4.tgz",
"dependencies": {
"async": {
"version": "1.5.2",
"from": "async@>=1.4.0 <2.0.0",
"resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz"
}
}
},
"har-validator": {
"version": "2.0.6",
"from": "har-validator@>=2.0.2 <2.1.0",
"resolved": "https://registry.npmjs.org/har-validator/-/har-validator-2.0.6.tgz",
"dependencies": {
"chalk": {
"version": "1.1.3",
"from": "chalk@>=1.1.1 <2.0.0",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
"dependencies": {
"ansi-styles": {
"version": "2.2.1",
"from": "ansi-styles@>=2.2.1 <3.0.0",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz"
},
"escape-string-regexp": {
"version": "1.0.5",
"from": "escape-string-regexp@>=1.0.2 <2.0.0",
"resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz"
},
"has-ansi": {
"version": "2.0.0",
"from": "has-ansi@>=2.0.0 <3.0.0",
"resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz"
},
"supports-color": {
"version": "2.0.0",
"from": "supports-color@>=2.0.0 <3.0.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz"
}
}
},
"commander": {
"version": "2.9.0",
"from": "commander@>=2.8.1 <3.0.0",
"resolved": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz",
"dependencies": {
"graceful-readlink": {
"version": "1.0.1",
"from": "graceful-readlink@>=1.0.0",
"resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz"
}
}
},
"is-my-json-valid": {
"version": "2.13.1",
"from": "is-my-json-valid@>=2.12.4 <3.0.0",
"resolved": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.13.1.tgz",
"dependencies": {
"generate-function": {
"version": "2.0.0",
"from": "generate-function@>=2.0.0 <3.0.0",
"resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.0.0.tgz"
},
"generate-object-property": {
"version": "1.2.0",
"from": "generate-object-property@>=1.1.0 <2.0.0",
"resolved": "https://registry.npmjs.org/generate-object-property/-/generate-object-property-1.2.0.tgz",
"dependencies": {
"is-property": {
"version": "1.0.2",
"from": "is-property@>=1.0.0 <2.0.0",
"resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz"
}
}
},
"jsonpointer": {
"version": "2.0.0",
"from": "jsonpointer@2.0.0",
"resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-2.0.0.tgz"
},
"xtend": {
"version": "4.0.1",
"from": "xtend@>=4.0.0 <5.0.0",
"resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz"
}
}
},
"pinkie-promise": {
"version": "2.0.1",
"from": "pinkie-promise@>=2.0.0 <3.0.0",
"resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz",
"dependencies": {
"pinkie": {
"version": "2.0.4",
"from": "pinkie@>=2.0.0 <3.0.0",
"resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz"
}
}
}
}
},
"hawk": {
"version": "3.1.3",
"from": "hawk@>=3.1.0 <3.2.0",
"resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz",
"dependencies": {
"boom": {
"version": "2.10.1",
"from": "boom@>=2.0.0 <3.0.0",
"resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz"
},
"cryptiles": {
"version": "2.0.5",
"from": "cryptiles@>=2.0.0 <3.0.0",
"resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz"
},
"hoek": {
"version": "2.16.3",
"from": "hoek@>=2.0.0 <3.0.0",
"resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz"
},
"sntp": {
"version": "1.0.9",
"from": "sntp@>=1.0.0 <2.0.0",
"resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz"
}
}
},
"http-signature": {
"version": "1.1.1",
"from": "http-signature@>=1.1.0 <1.2.0",
"resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz",
"dependencies": {
"assert-plus": {
"version": "0.2.0",
"from": "assert-plus@>=0.2.0 <0.3.0",
"resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz"
},
"jsprim": {
"version": "1.2.2",
"from": "jsprim@>=1.2.2 <2.0.0",
"resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.2.2.tgz",
"dependencies": {
"extsprintf": {
"version": "1.0.2",
"from": "extsprintf@1.0.2",
"resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.0.2.tgz"
},
"json-schema": {
"version": "0.2.2",
"from": "json-schema@0.2.2",
"resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.2.tgz"
},
"verror": {
"version": "1.3.6",
"from": "verror@1.3.6",
"resolved": "https://registry.npmjs.org/verror/-/verror-1.3.6.tgz"
}
}
},
"sshpk": {
"version": "1.7.4",
"from": "sshpk@>=1.7.0 <2.0.0",
"resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.7.4.tgz",
"dependencies": {
"asn1": {
"version": "0.2.3",
"from": "asn1@>=0.2.3 <0.3.0",
"resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz"
},
"dashdash": {
"version": "1.13.0",
"from": "dashdash@>=1.10.1 <2.0.0",
"resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.13.0.tgz",
"dependencies": {
"assert-plus": {
"version": "1.0.0",
"from": "assert-plus@>=1.0.0 <2.0.0",
"resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz"
}
}
},
"ecc-jsbn": {
"version": "0.1.1",
"from": "ecc-jsbn@>=0.0.1 <1.0.0",
"resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz",
"optional": true
},
"jodid25519": {
"version": "1.0.2",
"from": "jodid25519@>=1.0.0 <2.0.0",
"resolved": "https://registry.npmjs.org/jodid25519/-/jodid25519-1.0.2.tgz",
"optional": true
},
"jsbn": {
"version": "0.1.0",
"from": "jsbn@>=0.1.0 <0.2.0",
"resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.0.tgz",
"optional": true
},
"tweetnacl": {
"version": "0.14.3",
"from": "tweetnacl@>=0.13.0 <1.0.0",
"resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.3.tgz",
"optional": true
}
}
}
}
},
"is-typedarray": {
"version": "1.0.0",
"from": "is-typedarray@>=1.0.0 <1.1.0",
"resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz"
},
"isstream": {
"version": "0.1.2",
"from": "isstream@>=0.1.2 <0.2.0",
"resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz"
},
"json-stringify-safe": {
"version": "5.0.1",
"from": "json-stringify-safe@>=5.0.1 <5.1.0",
"resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz"
},
"mime-types": {
"version": "2.1.10",
"from": "mime-types@>=2.1.7 <2.2.0",
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.10.tgz",
"dependencies": {
"mime-db": {
"version": "1.22.0",
"from": "mime-db@>=1.22.0 <1.23.0",
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.22.0.tgz"
}
}
},
"node-uuid": {
"version": "1.4.7",
"from": "node-uuid@>=1.4.7 <1.5.0",
"resolved": "https://registry.npmjs.org/node-uuid/-/node-uuid-1.4.7.tgz"
},
"oauth-sign": {
"version": "0.8.1",
"from": "oauth-sign@>=0.8.0 <0.9.0",
"resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.1.tgz"
},
"qs": {
"version": "6.1.0",
"from": "qs@>=6.1.0 <6.2.0",
"resolved": "https://registry.npmjs.org/qs/-/qs-6.1.0.tgz"
},
"stringstream": {
"version": "0.0.5",
"from": "stringstream@>=0.0.4 <0.1.0",
"resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz"
},
"tough-cookie": {
"version": "2.2.2",
"from": "tough-cookie@>=2.2.0 <2.3.0",
"resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.2.2.tgz"
},
"tunnel-agent": {
"version": "0.4.2",
"from": "tunnel-agent@>=0.4.1 <0.5.0",
"resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.4.2.tgz"
}
}
},
"retry": {
"version": "0.9.0",
"from": "retry@latest",
"resolved": "https://registry.npmjs.org/retry/-/retry-0.9.0.tgz"
},
"rimraf": {
"version": "2.5.2",
"from": "rimraf@>=2.5.1 <2.6.0",
"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.5.2.tgz"
},
"semver": {
"version": "5.1.0",
"from": "semver@>=5.1.0 <5.2.0",
"resolved": "https://registry.npmjs.org/semver/-/semver-5.1.0.tgz"
},
"sha": {
"version": "2.0.1",
"from": "sha@>=2.0.1 <2.1.0",
"resolved": "https://registry.npmjs.org/sha/-/sha-2.0.1.tgz"
},
"slide": {
"version": "1.1.6",
"from": "slide@>=1.1.6 <1.2.0",
"resolved": "https://registry.npmjs.org/slide/-/slide-1.1.6.tgz"
},
"sorted-object": {
"version": "2.0.0",
"from": "sorted-object@latest",
"resolved": "https://registry.npmjs.org/sorted-object/-/sorted-object-2.0.0.tgz"
},
"strip-ansi": {
"version": "3.0.1",
"from": "strip-ansi@*",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz"
},
"tar": {
"version": "2.2.1",
"from": "tar@>=2.2.1 <2.3.0",
"resolved": "https://registry.npmjs.org/tar/-/tar-2.2.1.tgz",
"dependencies": {
"block-stream": {
"version": "0.0.8",
"from": "block-stream@*",
"resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.8.tgz"
}
}
},
"text-table": {
"version": "0.2.0",
"from": "text-table@>=0.2.0 <0.3.0",
"resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz"
},
"uid-number": {
"version": "0.0.6",
"from": "uid-number@0.0.6",
"resolved": "https://registry.npmjs.org/uid-number/-/uid-number-0.0.6.tgz"
},
"umask": {
"version": "1.1.0",
"from": "umask@>=1.1.0 <1.2.0",
"resolved": "https://registry.npmjs.org/umask/-/umask-1.1.0.tgz"
},
"unique-filename": {
"version": "1.1.0",
"from": "unique-filename@>=1.1.0 <2.0.0",
"resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.0.tgz",
"dependencies": {
"unique-slug": {
"version": "2.0.0",
"from": "unique-slug@>=2.0.0 <3.0.0"
}
}
},
"unpipe": {
"version": "1.0.0",
"from": "unpipe@>=1.0.0 <1.1.0",
"resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz"
},
"validate-npm-package-license": {
"version": "3.0.1",
"from": "validate-npm-package-license@3.0.1",
"resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz",
"dependencies": {
"spdx-correct": {
"version": "1.0.2",
"from": "spdx-correct@>=1.0.0 <1.1.0",
"resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-1.0.2.tgz",
"dependencies": {
"spdx-license-ids": {
"version": "1.2.0",
"from": "spdx-license-ids@>=1.0.2 <2.0.0",
"resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-1.2.0.tgz"
}
}
},
"spdx-expression-parse": {
"version": "1.0.2",
"from": "spdx-expression-parse@>=1.0.0 <1.1.0",
"resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-1.0.2.tgz",
"dependencies": {
"spdx-exceptions": {
"version": "1.0.4",
"from": "spdx-exceptions@>=1.0.4 <2.0.0",
"resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-1.0.4.tgz"
},
"spdx-license-ids": {
"version": "1.2.0",
"from": "spdx-license-ids@>=1.0.0 <2.0.0"
}
}
}
}
},
"validate-npm-package-name": {
"version": "2.2.2",
"from": "validate-npm-package-name@>=2.2.2 <2.3.0",
"resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-2.2.2.tgz",
"dependencies": {
"builtins": {
"version": "0.0.7",
"from": "builtins@0.0.7",
"resolved": "https://registry.npmjs.org/builtins/-/builtins-0.0.7.tgz"
}
}
},
"which": {
"version": "1.2.10",
"from": "which@latest",
"resolved": "https://registry.npmjs.org/which/-/which-1.2.10.tgz",
"dependencies": {
"isexe": {
"version": "1.1.2",
"from": "isexe@>=1.1.1 <2.0.0",
"resolved": "https://registry.npmjs.org/isexe/-/isexe-1.1.2.tgz"
}
}
},
"wrappy": {
"version": "1.0.2",
"from": "wrappy@latest",
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz"
},
"write-file-atomic": {
"version": "1.1.4",
"from": "write-file-atomic@>=1.1.4 <2.0.0"
}
}
},
"npm-package-arg": {
"version": "4.2.0",
"from": "npm-package-arg@4.2.0",
"resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-4.2.0.tgz",
"dependencies": {
"hosted-git-info": {
"version": "2.1.5",
"from": "hosted-git-info@>=2.1.5 <3.0.0",
"resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.1.5.tgz"
},
"semver": {
"version": "5.1.1",
"from": "semver@>=5.1.0 <6.0.0",
"resolved": "https://registry.npmjs.org/semver/-/semver-5.1.1.tgz"
}
}
},
"once": {
"version": "1.4.0",
"from": "once@>=1.3.0 <2.0.0",
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz"
},
"optimist": {
"version": "0.6.1",
"from": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz",
"resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz",
"dependencies": {
"minimist": {
"version": "0.0.10",
"from": "minimist@>=0.0.1 <0.1.0",
"resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz"
},
"wordwrap": {
"version": "0.0.3",
"from": "wordwrap@>=0.0.2 <0.1.0",
"resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz"
}
}
},
"os-tmpdir": {
"version": "1.0.2",
"from": "os-tmpdir@>=1.0.1 <1.1.0",
"resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz"
},
"path-is-absolute": {
"version": "1.0.1",
"from": "path-is-absolute@>=1.0.0 <2.0.0",
"resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz"
},
"read-package-json": {
"version": "2.0.4",
"from": "read-package-json@2.0.4",
"resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-2.0.4.tgz",
"dependencies": {
"glob": {
"version": "6.0.4",
"from": "glob@>=6.0.0 <7.0.0",
"resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz"
},
"minimatch": {
"version": "3.0.3",
"from": "minimatch@>=2.0.0 <3.0.0||>=3.0.0 <4.0.0",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.3.tgz"
}
}
},
"rimraf": {
"version": "2.5.2",
"from": "rimraf@2.5.2",
"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.5.2.tgz",
"dependencies": {
"glob": {
"version": "7.0.5",
"from": "glob@>=7.0.0 <8.0.0",
"resolved": "https://registry.npmjs.org/glob/-/glob-7.0.5.tgz",
"dependencies": {
"fs.realpath": {
"version": "1.0.0",
"from": "fs.realpath@>=1.0.0 <2.0.0",
"resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz"
},
"inflight": {
"version": "1.0.5",
"from": "inflight@>=1.0.4 <2.0.0",
"resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.5.tgz",
"dependencies": {
"wrappy": {
"version": "1.0.2",
"from": "wrappy@>=1.0.0 <2.0.0",
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz"
}
}
},
"inherits": {
"version": "2.0.1",
"from": "inherits@>=2.0.0 <3.0.0",
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz"
},
"minimatch": {
"version": "3.0.2",
"from": "minimatch@>=3.0.2 <4.0.0",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.2.tgz",
"dependencies": {
"brace-expansion": {
"version": "1.1.5",
"from": "brace-expansion@>=1.0.0 <2.0.0",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.5.tgz",
"dependencies": {
"balanced-match": {
"version": "0.4.1",
"from": "balanced-match@>=0.4.1 <0.5.0",
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.1.tgz"
},
"concat-map": {
"version": "0.0.1",
"from": "concat-map@0.0.1",
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz"
}
}
}
}
},
"once": {
"version": "1.3.3",
"from": "once@>=1.3.0 <2.0.0",
"resolved": "https://registry.npmjs.org/once/-/once-1.3.3.tgz",
"dependencies": {
"wrappy": {
"version": "1.0.2",
"from": "wrappy@>=1.0.0 <2.0.0",
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz"
}
}
},
"path-is-absolute": {
"version": "1.0.0",
"from": "path-is-absolute@>=1.0.0 <2.0.0",
"resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.0.tgz"
}
}
}
}
},
"semver": {
"version": "5.3.0",
"from": "semver@>=2.0.0 <3.0.0||>=3.0.0 <4.0.0||>=4.0.0 <5.0.0||>=5.0.0 <6.0.0",
"resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz"
},
"sigmund": {
"version": "1.0.1",
"from": "sigmund@>=1.0.0 <1.1.0",
"resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz"
},
"spdx-correct": {
"version": "1.0.2",
"from": "spdx-correct@>=1.0.0 <1.1.0",
"resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-1.0.2.tgz"
},
"spdx-expression-parse": {
"version": "1.0.4",
"from": "spdx-expression-parse@>=1.0.0 <1.1.0",
"resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz"
},
"spdx-license-ids": {
"version": "1.2.2",
"from": "spdx-license-ids@>=1.0.2 <2.0.0",
"resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz"
},
"supports-color": {
"version": "1.2.0",
"from": "supports-color@1.2.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-1.2.0.tgz"
},
"tar": {
"version": "2.2.1",
"from": "tar@>=2.1.1 <3.0.0",
"resolved": "https://registry.npmjs.org/tar/-/tar-2.2.1.tgz"
},
"tar.gz": {
"version": "1.0.2",
"from": "tar.gz@1.0.2",
"resolved": "https://registry.npmjs.org/tar.gz/-/tar.gz-1.0.2.tgz"
},
"tmp": {
"version": "0.0.31",
"from": "tmp@0.0.31",
"resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.31.tgz"
},
"to-iso-string": {
"version": "0.0.2",
"from": "to-iso-string@0.0.2",
"resolved": "https://registry.npmjs.org/to-iso-string/-/to-iso-string-0.0.2.tgz"
},
"type-detect": {
"version": "1.0.0",
"from": "type-detect@>=1.0.0 <2.0.0",
"resolved": "https://registry.npmjs.org/type-detect/-/type-detect-1.0.0.tgz"
},
"validate-npm-package-license": {
"version": "3.0.1",
"from": "validate-npm-package-license@>=3.0.1 <4.0.0",
"resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz"
},
"wrappy": {
"version": "1.0.2",
"from": "wrappy@>=1.0.0 <2.0.0",
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz"
}
}
}
================================================
FILE: npmbox.js
================================================
// npmbox by Glen R. Goodwin (@areinet)
// https://github.com/arei/npmbox.git
// Creates an archive "box" of one or more npm packages and their dependencies.
"use strict";
var boxxer = require("./npmboxxer.js");
var argv = require("optimist")
.string([
"proxy",
"https-proxy"
])
.boolean(["v","verbose","s","silent"])
.options("t", {
alias: "target",
default: null
})
.argv;
var args = argv._;
if (args.length<1 || argv.help) {
console.log("npmbox - Create an archive for offline installation of the given package.");
console.log("");
console.log("Usage: ");
console.log("");
console.log(" npmbox --help");
console.log(" npmbox [options] <package> <package>...");
console.log("");
console.log("Options:");
console.log("");
console.log(" -v, --verbose Shows additional output which is normally hidden.");
console.log(" -s, --silent Hide all output.");
console.log(" -t, --target Specify the target .npmbox file to write.");
console.log(" --proxy=<url> npm --proxy switch.");
console.log(" --https-proxy=<url> npm --https-proxy switch.");
console.log("");
process.exit(0);
}
var options = {
verbose: argv.v || argv.verbose || false,
silent: argv.s || argv.silent || false,
target: argv.t || argv.target || null,
proxy: argv.proxy || null,
"https-proxy": argv["https-proxy"] || null
};
var sources = args;
var complete = function(err) {
if (err) console.log("\nERROR: ",err,"\n\nnpmbox halted.");
process.reallyExit(err?1:0);
};
sources = sources.filter(function(source){
return !!source;
});
if (sources && sources.length>0) {
if (!options.silent) console.log("\nBoxing "+sources.join(", ")+"...");
boxxer.box(sources,options,complete);
}
else complete();
================================================
FILE: npmboxxer.js
================================================
// npmbox by Glen R. Goodwin (@areinet)
// https://github.com/arei/npmbox.git
// Shared code for npmbox/npmunbox
"use strict";
(function(){
var npm = require("npm");
var fs = require("fs");
var fsx = require("fs-extra");
var path = require("path");
var readJson = require("read-package-json");
var targz = require("tar.gz");
var tmp = require("tmp");
var is = require("is");
var npa = require("npm-package-arg");
// Tell the `tmp` package to try to delete temporary files even when the
// process exits with an error.
tmp.setGracefulCleanup();
// Make the main temporary directory and two subdirectories for box contents
// and additional workspace (respectively). `unsafeCleanup` just means that
// the directory should be removed on process exit even if it's not empty.
var tmpDir = tmp.dirSync({prefix: "npmbox-", unsafeCleanup: true});
var cache = path.resolve(tmpDir.name,"cache",".npmbox.cache");
var work = path.resolve(tmpDir.name,"work");
fsx.mkdirsSync(cache);
fsx.mkdirsSync(work);
// This takes an install target (typically a simple package name, but
// sometimes a path or a general URL) and converts it into a form that is
// suitable as a simple filesystem component (name without slashes),
// including a `.npmbox` suffix.
var encodeTarget = function(target) {
return encodeURIComponent(target)+".npmbox";
};
// This reverses the action of `encodeTarget()`, and also strips away the
// directory prefix.
var decodeTarget = function(encoded) {
encoded = path.basename(encoded).replace(/\.npmbox$/, "");
return decodeURIComponent(encoded);
};
var cleanAll = function(callback) {
if (fs.existsSync(tmpDir.name)) fsx.remove(tmpDir.name,callback);
else callback();
};
// Given a key/value pair from a dependency map (e.g. in a `package.json`
// file), return the dependency name. In the case of an implied name in the
// value, that is, a usual package dependency (e.g. `"foo": "^1.2"`), this
// joins the key and value with an `@`. When the value is fully specified,
// this just returns the value.
var fixDependency = function(key,value) {
var parsed = npa(value); // We use npm's own mechanism to decide.
if (parsed.name===null) return key+"@"+value;
else return value;
};
// Given a dependency map (e.g. from a `package.json` file), return a list
// of the full dependency names. Returns an empty list if given `null`.
var listDependencies = function(depMap) {
var result = [];
var keys = Object.keys(depMap||{});
for (var i = 0; i<keys.length; i++) {
var k = keys[i];
result.push(fixDependency(k,depMap[k]));
}
return result;
};
var tarCreate = function(source,target,callback) {
new targz().compress(source,target,callback);
};
var tarExtract = function(source,target,callback) {
// Unfortunately, the `tar.gz` package at v1.0.2 will sometimes make its
// callback before it's done extracting all the files, but _later_
// versions of the package have other bugs that prevent extraction from
// working at all. What we do here is keep checking the contents of the
// directory (recursive walk) until they settle.
var prevSize = -1; // Total size we found on the most recent iteration.
var checkIfDone = function(err) {
if (err) return callback(err);
var totalSize = 0; // Total size of all files in the target dir.
fsx.walk(target)
.on("readable",function(){
for (;;) {
var item = this.read();
if (!item) break;
totalSize += item.stats.isFile() ? item.stats.size : 1;
}
})
.on("end",function(){
if (totalSize === prevSize) {
// Contents have not changed in size since the previous
// iteration. Done!
callback();
} else {
// Contents have changed. Note the new size, delay a
// moment, and then check again.
prevSize = totalSize;
setTimeout(checkIfDone,250);
}
})
.on("error",function(err){
return callback(err);
});
};
new targz().extract(source,target,checkIfDone);
};
var npmInit = function(options,callback) {
npm.load(options,callback);
};
var npmInstall = function(source,callback) {
if (!is.array(source)) source = [source];
var cl = console.log;
console.log = function() {};
npm.commands.install(source,function() {
console.log = cl;
callback.apply(this,arguments);
});
};
var npmDependencies = function(packageName,options,callback) {
if (!packageName) return callback(null);
var checked = {};
var results = {};
var pending = [];
var done = function(packageName) {
pending = pending.filter(function(p){
return p!==packageName;
});
if (pending.length>0) return;
var deps = Object.keys(results);
deps = deps.sort();
callback(null,deps);
};
var lookupPackageDependencies = function(packageInfo) {
var children = [];
if (packageInfo.dependencies) {
Object.keys(packageInfo.dependencies).forEach(function(key){
var value = packageInfo.dependencies[key];
if (key && value) children.push(key+"@"+value);
});
}
if (packageInfo.optionalDependencies) {
Object.keys(packageInfo.optionalDependencies).forEach(function(key){
var value = packageInfo.optionalDependencies[key];
if (key && value) children.push(key+"@"+value);
});
}
// if (packageInfo.devDependencies) {
// Object.keys(packageInfo.devDependencies).forEach(function(key){
// var value = packageInfo.devDependencies[key];
// if (key && value) children.push(key+"@"+value);
// });
// }
children.forEach(function(childPackageName){
lookup(childPackageName);
});
};
var lookup = function(packageName) {
if (checked[packageName]) return;
pending.push(packageName);
checked[packageName] = true;
var args = [packageName];
if (!options.silent) console.log(" Querying "+packageName);
var packageDetails = npa(packageName);
var packageType = packageDetails && packageDetails.type || null;
if(packageType==="git" || packageType==="hosted" || packageType==="local") {
npm.commands.cache.add(packageName,null,null,false,function(err,packageInfo) {
if (err) return callback(err);
lookupPackageDependencies(packageInfo);
done(packageName);
});
}
else {
npm.commands.view(args,true,function(err,deps){
if (err && err.statusCode && err.statusCode===404) return done(packageName);
if (err) return callback(err);
if (!deps) return callback("Package '"+packageName+"' was not found in npm.");
var found = Object.keys(deps).slice(-1)[0]; // we want the last entry.
if (found) {
var fullname = packageDetails && packageDetails.name || packageName;
fullname += "@"+found;
results[fullname] = true;
lookupPackageDependencies(deps[found]);
}
done(packageName);
});
}
};
lookup(packageName);
};
var npmDownload = function(packageNames,options,callback) {
if (!packageNames) return callback(null);
if (!is.array(packageNames)) packageNames = [packageNames];
var pending = [].concat(packageNames);
var done = function(packageName) {
pending = pending.filter(function(p){
return p!==packageName;
});
if (pending.length>0) return;
callback(null,packageNames);
};
var populate = function(packageName) {
if (!options.silent) console.log(" Downloading "+packageName);
//npm.commands.cache.add(name,ver,where,scrub,cb)
npm.commands.cache.add(packageName,null,null,false,function(err){
if (err) return callback("Error occurred downloading '"+packageName+"' to cache.");
done(packageName);
});
};
packageNames.forEach(function(packageName){
populate(packageName);
});
};
var box = function(source,options,callback) {
var done = function(err) {
cleanAll(function(){
callback.call(this,err);
});
};
var next = function() {
source = sources.shift();
if (!source) pack();
else if (source.match(/\.json$/)) {
// `source` names a JSON file, assumed to be in `package.json` format. Read it and extract its
// dependencies. Add them to the `sources`, and then keep on boxing.
readJson(source, console.log, function(err, obj){
if (err) return done(err);
sources = sources.concat(
listDependencies(obj.dependencies),
listDependencies(obj.optionalDependencies),
listDependencies(obj.bundledDependencies));
next();
});
}
else extractPackageName();
};
var pack = function() {
if (!options.silent) console.log(" Packing "+target+"...");
tarCreate(cache,target,function(err){
if (err) return done(err);
done();
});
};
var stack = function(deps) {
npmDownload(deps,options,function(err){
if (err) return done(err);
next();
});
};
var rack = function(packageName) {
// **Note:** The given `packageName` is the same as the `source` for regular packages (that come from the
// registry), but in other cases (hosted, git, local) the name is instead constructed to refer to the
// package by its name and version as stored in the cache.
var flagfile = path.resolve(cache,encodeTarget(packageName));
fs.writeFileSync(flagfile,packageName);
npmDependencies(source,options,function(err,deps){
if (err) return done(err);
stack(deps);
});
};
var setTarget = function (packageName) {
target = path.resolve(packageName+".npmbox");
if (fs.existsSync(target)) {
return done("An .npmbox file already exists with this name. Please remove it and try again.");
}
};
var extractPackageName = function() {
var packageType;
try {
packageType = npa(source).type;
}
catch(e) {
return done(e);
}
if (packageType==="git" || packageType==="hosted" || packageType==="local") {
var doingWhat = (packageType==="local") ? "Copying" : "Cloning";
console.log(" "+doingWhat+" "+source);
npm.commands.cache.add(source,null,null,false,function(err,packageInfo) {
if (err) return done(err);
if (packageInfo && packageInfo.name && packageInfo.version) {
if (!target) setTarget(path.basename(packageInfo.name));
// Because we just want to take the package from the cache when unboxing, instead of referring
// to the original `source` (which might be a local path or network reference), we instead
// rewrite it in a form that gets explicitly recognized while unboxing.
rack("file:"+packageInfo.name+"-"+packageInfo.version+".tgz");
}
else {
return done("Package has no name or no version");
}
});
}
else {
if (!target) setTarget(npa(source).escapedName); // escapedName is necessary to support scoped packages
rack(source);
}
};
var init = function() {
var npmoptions = {
cache: cache,
prefix: work,
global: true,
optional: true,
force: true,
progress: false,
color: false,
"ignore-scripts": true,
loglevel: options && options.verbose ? "http" : "silent"
};
if (options.proxy) npmoptions.proxy = options.proxy;
if (options["https-proxy"]) npmoptions["https-proxy"] = options["https-proxy"];
npmInit(npmoptions,function(err){
if (err) return done(err);
next();
});
};
var target = options.target && path.resolve(options.target) || null;
if (target) setTarget(target);
var sources = source && source instanceof Array && source || source && [source] || [];
init();
};
// This _just_ unpacks the indicated box into the working cache directory.
var unpack = function(source,options,callback) {
if (!fs.existsSync(source)) {
source = path.resolve(options.path,source+".npmbox");
if (!fs.existsSync(source)) {
callback("No .npmbox file found: "+source);
return;
}
}
if (!options.silent) console.log(" Unpacking "+source+"...");
// `dirname` to go up one layer because the top level of the box
// archive is `.npmbox.cache`.
tarExtract(source,path.dirname(cache),function(err){
if (err) {
// var packageName = path.basename(target);
if (!options.silent) console.log("An error occurred while unpacking "+source+".");
if (!options.silent) console.log(source+" was not processed.");
if (options.verbose) console.log(err);
return callback(err);
}
callback();
});
};
// Initialize npm for unboxing operations.
var npmInitForUnbox = function(options,callback){
options.cache = cache;
options.loglevel = options.verbose ? "verbose" : "silent";
options.progress = false;
options.color = false;
options["cache-min"] = 1000 * 365.25 * 24 * 60 * 60; // a thousand years
options["fetch-retries"] = 0;
options["fetch-retry-factor"] = 0;
options["fetch-retry-mintimeout"] = 1;
options["fetch-retry-maxtimeout"] = 2;
npmInit(options,callback);
};
// This _just_ installs the given package, using whatever cache has been
// upacked.
var installPackage = function(target,options,callback) {
if (!options.silent) console.log(" Installing "+target+"...");
if (target.match(/^file:/)) {
// This is a target that was originally included via a local path or network-based name (URL, git ID).
// Move the cached package out of the cache before installing, because otherwise `npm` will have trouble
// figuring out what to do. (It doesn't like being asked to install from cache paths.)
var parts = target.match(/^file:((.+)-(.+)\.tgz)$/);
var fullName = parts[1];
var name = parts[2];
var version = parts[3];
target = path.resolve(work,fullName);
fs.renameSync(path.resolve(cache,name,version,"package.tgz"),target);
target = "file:"+target;
}
npmInstall(target,function(err){
if (err) {
if (!options.silent) console.log("An error occurred while installing "+target+".");
if (!options.silent) console.log(target+" was not installed.");
if (options.verbose) console.log(err);
return callback(err);
}
callback();
});
}
var unbox = function(source,options,callback) {
var targets = [];
var target = null;
var done = function(err) {
if (!options.silent) console.log(" Done.");
cleanAll(function(){
callback(err);
});
};
var next = function(err) {
if (err) return done(err);
target = targets.shift();
if (!target) return done();
installPackage(target,options,next);
};
var getTargets = function() {
targets = {};
fs.readdir(cache,function(err,files){
if (err) return done(err);
files.filter(function(file){
return file.match(/\.npmbox$/);
}).forEach(function(file){
file = path.basename(file).replace(/\.npmbox$/,"");
targets[decodeTarget(file)] = true;
});
targets = Object.keys(targets);
if (targets.length === 0) {
// This is a legacy `.npmbox` file which instead of having embedded flag files just uses the name of
// the archive file to determine what to install.
targets = [path.basename(source).replace(/\.npmbox$/,"")];
}
next();
});
};
var doUnpack = function(err) {
if (err) return done(err);
unpack(source,options,function(err){
if (err) return done(err);
getTargets();
});
};
npmInitForUnbox(options,doUnpack);
};
// Installs a single package, assuming that the cache has already been
// set up. This supports the `--install` option to `npmunbox`.
var install = function(target,options,callback) {
var done = function(err) {
if (!options.silent) console.log(" Done.");
cleanAll(function(){
callback(err);
});
};
var doInstall = function(err) {
if (err) return done(err);
installPackage(target,options,done);
};
npmInitForUnbox(options,doInstall);
};
var cleanup = function(callback) {
cleanAll(function(err){
callback(err);
});
};
module.exports = {
box: box,
unbox: unbox,
unpack: unpack,
install: install,
cleanup: cleanup
};
})();
================================================
FILE: npmunbox.js
================================================
// npmbox by Glen R. Goodwin (@areinet)
// https://github.com/arei/npmbox.git
// Extracts an .npmbox file and installs the contained package.
"use strict";
var boxxer = require("./npmboxxer.js");
var utils = require("./utils");
var argv = require("optimist")
.string([
"C","prefix",
"proxy",
"https-proxy"
])
.boolean([
"v","verbose",
"s","silent",
"g","global",
"scripts",
"S","save",
"D","save-dev",
"O","save-optional",
"B","save-bundle",
"E","save-exact"
])
.options("p", {
alias: "path",
default: process.cwd()
})
.options("i", {
alias: "install"
})
.argv;
var args = argv._;
if (args.length<1 || argv.help) {
console.log("npmunbox - Extracts one or more .npmbox files and installs the contained package(s).");
console.log("");
console.log("Usage: ");
console.log("");
console.log(" npmunbox --help");
console.log(" npmunbox [options] <nmpbox-file> <npmbox-file>...");
console.log("");
console.log("Options:");
console.log("");
console.log(" -v, --verbose Shows npm output which is normally hidden.");
console.log(" -s, --silent Hide all output.");
console.log(" -p, --path Specify the path to a folder from which the .npmbox file(s) will be read.");
console.log(" -i, --install=<pkg> Installs the indicated package instead of using the .npmbox manifest.");
console.log(" --scripts Enable running of scripts during installation.");
console.log(" -g, --global Installs package(s) globally as if --global was passed to npm.");
console.log(" -C, --prefix npm --prefix switch.");
console.log(" -S, --save npm --save switch.");
console.log(" -D, --save-dev npm --save-dev switch.");
console.log(" -O, --save-optional npm --save-optional switch.");
console.log(" -B, --save-bundle npm --save-bundle switch.");
console.log(" -E, --save-exact npm --save-exact switch.");
console.log(" --proxy=<url> npm --proxy switch.");
console.log(" --https-proxy=<url> npm --https-proxy switch.");
console.log("");
process.exit(0);
}
var options = {
verbose: argv.v || argv.verbose || false,
silent: argv.s || argv.silent || false,
global: argv.g || argv.global || false,
save: argv.S || argv.save || false,
"save-dev": argv.D || argv["save-dev"] || false,
"save-optional": argv.O || argv["save-optional"] || false,
"save-bundle": argv.B || argv["save-bundle"] || false,
"save-exact": argv.E || argv["save-exact"] || false,
"ignore-scripts": !argv.scripts,
path: argv.p || argv.path || false
};
if (argv.C || argv.prefix) options.prefix = argv.C || argv.prefix;
if (argv.proxy) options.proxy = argv.proxy;
if (argv["https-proxy"]) options["https-proxy"] = argv["https-proxy"];
var errorCount = 0;
var sources = args.filter(function(source){
return !!source;
});
var complete = function() {
boxxer.cleanup(function(){
process.reallyExit(errorCount);
});
};
var reportErrors = function(args) {
args.forEach(function(arg){
errorCount += 1;
console.error(" ",arg);
});
}
// Handles the case where we pay attention to the manifests inside the box(es).
var unboxFromManifest = function() {
var unboxDone = function(err) {
if (err) reportErrors(utils.flatten(utils.toArray(arguments)));
unboxNext();
};
var unboxNext = function() {
var source = sources.shift();
if (!source) return complete();
unboxExecute(source);
};
var unboxExecute = function(source) {
if (!options.silent) console.log("\nUnboxing "+source+"...");
boxxer.unbox(source,options,unboxDone);
};
unboxNext();
}
// Handles the case where we are installing a package listed via the `--install`
// option. This unpacks all the boxes (on top of each other) and then does a
// single `npm install`.
var unboxWithInstallOption = function(pkg) {
var installDone = function(err) {
if (err) reportErrors(utils.flatten(utils.toArray(arguments)));
complete();
};
var unpackDone = function(err) {
if (err) {
reportErrors(utils.flatten(utils.toArray(arguments)));
return complete();
}
unpackNext();
};
var unpackNext = function() {
var source = sources.shift();
if (source) unpackExecute(source);
else {
boxxer.install(pkg,options,installDone);
}
};
var unpackExecute = function(source) {
boxxer.unpack(source,options,unpackDone);
};
unpackNext();
}
if (sources.length===0) return complete();
else if (argv.install) unboxWithInstallOption(argv.install);
else unboxFromManifest();
================================================
FILE: package.json
================================================
{
"author": "Glen R. Goodwin (http://www.arei.net)",
"name": "npmbox",
"keywords": [
"npm",
"npm utility",
"npm pack",
"npm package",
"npm utilities",
"npm archive",
"npm unpack",
"npm zip",
"npm unzip",
"unpack",
"pack",
"npmbox",
"npmunbox",
"zip",
"unzip",
"offline",
"npm offline",
"offline install",
"install",
"install offline",
"npm install",
"npm install offline",
"npm offline install",
"box",
"unbox"
],
"description": "npm addon utility for creating and installing from an archive file of an npm install, including dependencies.",
"version": "4.2.1",
"homepage": "http://github.com/arei/npmbox",
"bugs": {
"url": "http://github.com/arei/npmbox/issues"
},
"license": "MIT",
"licenses": [
{
"type": "MIT",
"url": "http://github.com/arei/npmbox/blob/master/LICENSE.txt"
}
],
"repository": {
"type": "git",
"url": "git://github.com/arei/npmbox.git"
},
"main": "npmboxxer.js",
"bin": {
"npmbox": "./bin/npmbox",
"npmunbox": "./bin/npmunbox"
},
"engines": {
"node": ">=4.0.0"
},
"dependencies": {
"fs-extra": "1.0.0",
"is": "3.1.0",
"npm": "3.10.3",
"npm-package-arg": "4.2.0",
"optimist": "0.6.1",
"read-package-json": "2.0.4",
"tar.gz": "1.0.2",
"tmp": "0.0.31"
},
"devDependencies": {},
"optionalDependencies": {}
}
================================================
FILE: utils.js
================================================
// npmbox by Glen R. Goodwin (@areinet)
// https://github.com/arei/npmbox.git
// Utility code for npmbox/npmunbox
"use strict";
var is = require("is");
var toArray = function(a) {
return Array.prototype.slice.call(a);
};
module.exports.toArray = toArray;
var flatten = function(a) {
if (!is.array(a)) return a;
a = a && is.array(a) && a.reduce(function(a,x){
return a.concat(flatten(x));
},[]);
return a;
};
module.exports.flatten = flatten;
gitextract_k53o_5qv/ ├── .gitignore ├── .jshintrc ├── .travis.yml ├── LICENSE.txt ├── README.md ├── bin/ │ ├── npmbox │ └── npmunbox ├── npm-shrinkwrap.json ├── npmbox.js ├── npmboxxer.js ├── npmunbox.js ├── package.json └── utils.js
Condensed preview — 13 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (131K chars).
[
{
"path": ".gitignore",
"chars": 12,
"preview": "node_modules"
},
{
"path": ".jshintrc",
"chars": 5074,
"preview": "{\n\t// Enforcing\n\t\"bitwise\": true, \t\t\t\t// true: Prohibit bitwise operators (&, |, ^, etc.)\n\t\"camelcase\": false, \t\t\t// tru"
},
{
"path": ".travis.yml",
"chars": 41,
"preview": "language: node_js\r\nnode_js:\r\n - \"0.10\"\r\n"
},
{
"path": "LICENSE.txt",
"chars": 1092,
"preview": "Copyright (c) 2014 Glen R. Goodwin (@areinet)\r\n\r\nPermission is hereby granted, free of charge, to any person\r\nobtaining "
},
{
"path": "README.md",
"chars": 11221,
"preview": "[](https://travis-ci.org/arei/npmbox)\n\n[\n// https://github.com/arei/npmbox.git\n\nvar path = require('"
},
{
"path": "bin/npmunbox",
"chars": 251,
"preview": "#!/usr/bin/env node\n\n// npmbox by Glen R. Goodwin (@areinet)\n// https://github.com/arei/npmbox.git\n\nvar path = require('"
},
{
"path": "npm-shrinkwrap.json",
"chars": 78035,
"preview": "{\n \"name\": \"npmbox\",\n \"version\": \"4.2.0\",\n \"dependencies\": {\n \"assertion-error\": {\n \"version\": \"1.0.2\",\n "
},
{
"path": "npmbox.js",
"chars": 1746,
"preview": "// npmbox by Glen R. Goodwin (@areinet)\n// https://github.com/arei/npmbox.git\n\n// Creates an archive \"box\" of one or mor"
},
{
"path": "npmboxxer.js",
"chars": 15865,
"preview": "// npmbox by Glen R. Goodwin (@areinet)\n// https://github.com/arei/npmbox.git\n\n// Shared code for npmbox/npmunbox\n\n\"use "
},
{
"path": "npmunbox.js",
"chars": 4489,
"preview": "// npmbox by Glen R. Goodwin (@areinet)\n// https://github.com/arei/npmbox.git\n\n// Extracts an .npmbox file and installs "
},
{
"path": "package.json",
"chars": 1446,
"preview": "{\n \"author\": \"Glen R. Goodwin (http://www.arei.net)\",\n \"name\": \"npmbox\",\n \"keywords\": [\n \"npm\",\n \"npm utility\","
},
{
"path": "utils.js",
"chars": 480,
"preview": "// npmbox by Glen R. Goodwin (@areinet)\r\n// https://github.com/arei/npmbox.git\r\n\r\n// Utility code for npmbox/npmunbox\r\n\r"
}
]
About this extraction
This page contains the full source code of the arei/npmbox GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 13 files (117.2 KB), approximately 35.0k tokens. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.