aboutsummaryrefslogtreecommitdiffstats
path: root/POLICY-SDK-APP/src/main/webapp/app/policyApp/CSS/bootstrap/test-infra
diff options
context:
space:
mode:
Diffstat (limited to 'POLICY-SDK-APP/src/main/webapp/app/policyApp/CSS/bootstrap/test-infra')
-rw-r--r--POLICY-SDK-APP/src/main/webapp/app/policyApp/CSS/bootstrap/test-infra/README.md118
-rw-r--r--POLICY-SDK-APP/src/main/webapp/app/policyApp/CSS/bootstrap/test-infra/S3Cachefile.json12
-rw-r--r--POLICY-SDK-APP/src/main/webapp/app/policyApp/CSS/bootstrap/test-infra/npm-shrinkwrap.json4488
-rw-r--r--POLICY-SDK-APP/src/main/webapp/app/policyApp/CSS/bootstrap/test-infra/requirements.txt1
-rw-r--r--POLICY-SDK-APP/src/main/webapp/app/policyApp/CSS/bootstrap/test-infra/s3_cache.py184
-rw-r--r--POLICY-SDK-APP/src/main/webapp/app/policyApp/CSS/bootstrap/test-infra/uncached-npm-install.sh15
6 files changed, 4818 insertions, 0 deletions
diff --git a/POLICY-SDK-APP/src/main/webapp/app/policyApp/CSS/bootstrap/test-infra/README.md b/POLICY-SDK-APP/src/main/webapp/app/policyApp/CSS/bootstrap/test-infra/README.md
new file mode 100644
index 000000000..6ab540396
--- /dev/null
+++ b/POLICY-SDK-APP/src/main/webapp/app/policyApp/CSS/bootstrap/test-infra/README.md
@@ -0,0 +1,118 @@
+## What does `s3_cache.py` do?
+
+### In general
+`s3_cache.py` maintains a cache, stored in an Amazon S3 (Simple Storage Service) bucket, of a given directory whose contents are considered non-critical and are completely & solely determined by (and should be able to be regenerated from) a single given file.
+
+The SHA-256 hash of the single file is used as the key for the cache. The directory is stored as a gzipped tarball.
+
+All the tarballs are stored in S3's Reduced Redundancy Storage (RRS) storage class, since this is cheaper and the data is non-critical.
+
+`s3_cache.py` itself never deletes cache entries; deletion should either be done manually or using automatic S3 lifecycle rules on the bucket.
+
+Similar to git, `s3_cache.py` makes the assumption that [SHA-256 will effectively never have a collision](http://stackoverflow.com/questions/4014090/is-it-safe-to-ignore-the-possibility-of-sha-collisions-in-practice).
+
+
+### For Bootstrap specifically
+`s3_cache.py` is used to cache the npm packages that our Grunt tasks depend on and the RubyGems that Jekyll depends on. (Jekyll is needed to compile our docs to HTML so that we can run them thru an HTML5 validator.)
+
+For npm, the `node_modules` directory is cached based on our `npm-shrinkwrap.json` file.
+
+For RubyGems, the `gemdir` of the current RVM-selected Ruby is cached based on the `pseudo_Gemfile.lock` file generated by our Travis build script.
+`pseudo_Gemfile.lock` contains the versions of Ruby and Jekyll that we're using (read our `.travis.yml` for details).
+
+
+## Why is `s3_cache.py` necessary?
+`s3_cache.py` is used to speed up Bootstrap's Travis builds. Installing npm packages and RubyGems used to take up a significant fraction of our total build times. Also, at the time that `s3_cache.py` was written, npm was occasionally unreliable.
+
+Travis does offer built-in caching on their paid plans, but this do-it-ourselves S3 solution is significantly cheaper since we only need caching and not Travis' other paid features.
+
+
+## Configuration
+`s3_cache.py` is configured via `S3Cachefile.json`, which has the following format:
+```json
+{
+ "cache-name-here": {
+ "key": "path/to/file/to/SHA-256/hash/and/use/that/as/the/cache.key",
+ "cache": "path/to/directory/to/be/cached",
+ "generate": "shell-command --to run --to regenerate --the-cache $from scratch"
+ },
+ ...
+}
+```
+
+`s3_cache.py` will SHA-256 hash the contents of the `key` file and try to fetch a tarball from S3 using the hash as the filename.
+If it's unable to fetch the tarball (either because it doesn't exist or there was a network error), it will run the `generate` command. If it was able to fetch the tarball, it will extract it to the `cache` directory.
+If it had to `generate` the cache, it will later create a tarball of the `cache` directory and try to upload the tarball to S3 using the SHA-256 hash of the `key` file as the tarball's filename.
+
+
+## AWS Setup
+
+### Overview
+1. Create an Amazon Web Services (AWS) account.
+2. Create an Identity & Access Management (IAM) user, and note their credentials.
+3. Create an S3 bucket.
+4. Set permissions on the bucket to grant the user read+write access.
+5. Set the user credentials as secure Travis environment variables.
+
+### In detail
+1. Create an AWS account.
+2. Login to the [AWS Management Console](https://console.aws.amazon.com).
+3. Go to the IAM Management Console.
+4. Create a new user (named e.g. `travis-ci`) and generate an access key for them. Note both the Access Key ID and the Secret Access Key.
+5. Note the user's ARN (Amazon Resource Name), which can be found in the "Summary" tab of the user browser. This will be of the form: `arn:aws:iam::XXXXXXXXXXXXXX:user/the-username-goes-here`
+6. Note the user's access key, which can be found in the "Security Credentials" tab of the user browser.
+7. Go to the S3 Management Console.
+8. Create a new bucket. For a non-publicly-accessible bucket (like Bootstrap uses), it's recommended that the bucket name be random to increase security. On most *nix machines, you can easily generate a random UUID to use as the bucket name using Python:
+
+ ```bash
+ python -c "import uuid; print(uuid.uuid4())"
+ ```
+
+9. Determine and note what your bucket's ARN is. The ARN for an S3 bucket is of the form: `arn:aws:s3:::the-bucket-name-goes-here`
+10. In the bucket's Properties pane, in the "Permissions" section, click the "Edit bucket policy" button.
+11. Input and submit an IAM Policy that grants the user at least read+write rights to the bucket. AWS has a policy generator and some examples to help with crafting the policy. Here's the policy that Bootstrap uses, with the sensitive bits censored:
+
+ ```json
+ {
+ "Version": "2012-10-17",
+ "Id": "PolicyTravisReadWriteNoAdmin",
+ "Statement": [
+ {
+ "Sid": "StmtXXXXXXXXXXXXXX",
+ "Effect": "Allow",
+ "Principal": {
+ "AWS": "arn:aws:iam::XXXXXXXXXXXXXX:user/travis-ci"
+ },
+ "Action": [
+ "s3:AbortMultipartUpload",
+ "s3:GetObjectVersion",
+ "s3:ListBucket",
+ "s3:DeleteObject",
+ "s3:DeleteObjectVersion",
+ "s3:GetObject",
+ "s3:PutObject"
+ ],
+ "Resource": [
+ "arn:aws:s3:::XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX",
+ "arn:aws:s3:::XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX/*"
+ ]
+ }
+ ]
+ }
+ ```
+
+12. If you want deletion from the cache to be done automatically based on age (like Bootstrap does): In the bucket's Properties pane, in the "Lifecycle" section, add a rule to expire/delete files based on creation date.
+13. Install the [`travis` RubyGem](https://github.com/travis-ci/travis): `gem install travis`
+14. Encrypt the environment variables:
+
+ ```bash
+ travis encrypt --repo twbs/bootstrap "AWS_ACCESS_KEY_ID=XXX"
+ travis encrypt --repo twbs/bootstrap "AWS_SECRET_ACCESS_KEY=XXX"
+ travis encrypt --repo twbs/bootstrap "TWBS_S3_BUCKET=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX"
+ ```
+
+14. Add the resulting secure environment variables to `.travis.yml`.
+
+
+## Usage
+Read `s3_cache.py`'s source code and Bootstrap's `.travis.yml` for how to invoke and make use of `s3_cache.py`.
diff --git a/POLICY-SDK-APP/src/main/webapp/app/policyApp/CSS/bootstrap/test-infra/S3Cachefile.json b/POLICY-SDK-APP/src/main/webapp/app/policyApp/CSS/bootstrap/test-infra/S3Cachefile.json
new file mode 100644
index 000000000..e213ea422
--- /dev/null
+++ b/POLICY-SDK-APP/src/main/webapp/app/policyApp/CSS/bootstrap/test-infra/S3Cachefile.json
@@ -0,0 +1,12 @@
+{
+ "npm-modules": {
+ "key": "./npm-shrinkwrap.json",
+ "cache": "../node_modules",
+ "generate": "./uncached-npm-install.sh"
+ },
+ "rubygems": {
+ "key": "../pseudo_Gemfile.lock",
+ "cache": "$GEMDIR",
+ "generate": "gem install -N jekyll -v $JEKYLL_VERSION && gem install -N rouge -v $ROUGE_VERSION"
+ }
+}
diff --git a/POLICY-SDK-APP/src/main/webapp/app/policyApp/CSS/bootstrap/test-infra/npm-shrinkwrap.json b/POLICY-SDK-APP/src/main/webapp/app/policyApp/CSS/bootstrap/test-infra/npm-shrinkwrap.json
new file mode 100644
index 000000000..321fbea9c
--- /dev/null
+++ b/POLICY-SDK-APP/src/main/webapp/app/policyApp/CSS/bootstrap/test-infra/npm-shrinkwrap.json
@@ -0,0 +1,4488 @@
+{
+ "name": "bootstrap",
+ "version": "3.3.4",
+ "npm-shrinkwrap-version": "200.1.0",
+ "node-version": "v0.12.0",
+ "dependencies": {
+ "btoa": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/btoa/-/btoa-1.1.2.tgz"
+ },
+ "glob": {
+ "version": "5.0.3",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.3.tgz",
+ "dependencies": {
+ "inflight": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.4.tgz",
+ "dependencies": {
+ "wrappy": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.1.tgz"
+ }
+ }
+ },
+ "inherits": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz"
+ },
+ "minimatch": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-2.0.4.tgz",
+ "dependencies": {
+ "brace-expansion": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.0.tgz",
+ "dependencies": {
+ "balanced-match": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.2.0.tgz"
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz"
+ }
+ }
+ }
+ }
+ },
+ "once": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.3.1.tgz",
+ "dependencies": {
+ "wrappy": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.1.tgz"
+ }
+ }
+ }
+ }
+ },
+ "grunt": {
+ "version": "0.4.5",
+ "resolved": "https://registry.npmjs.org/grunt/-/grunt-0.4.5.tgz",
+ "dependencies": {
+ "async": {
+ "version": "0.1.22",
+ "resolved": "https://registry.npmjs.org/async/-/async-0.1.22.tgz"
+ },
+ "coffee-script": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/coffee-script/-/coffee-script-1.3.3.tgz"
+ },
+ "colors": {
+ "version": "0.6.2",
+ "resolved": "https://registry.npmjs.org/colors/-/colors-0.6.2.tgz"
+ },
+ "dateformat": {
+ "version": "1.0.2-1.2.3",
+ "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-1.0.2-1.2.3.tgz"
+ },
+ "eventemitter2": {
+ "version": "0.4.14",
+ "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-0.4.14.tgz"
+ },
+ "exit": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz"
+ },
+ "findup-sync": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-0.1.3.tgz",
+ "dependencies": {
+ "glob": {
+ "version": "3.2.11",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-3.2.11.tgz",
+ "dependencies": {
+ "inherits": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz"
+ },
+ "minimatch": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.3.0.tgz",
+ "dependencies": {
+ "lru-cache": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.5.0.tgz"
+ },
+ "sigmund": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.0.tgz"
+ }
+ }
+ }
+ }
+ },
+ "lodash": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.1.tgz"
+ }
+ }
+ },
+ "getobject": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/getobject/-/getobject-0.1.0.tgz"
+ },
+ "glob": {
+ "version": "3.1.21",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-3.1.21.tgz",
+ "dependencies": {
+ "graceful-fs": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-1.2.3.tgz"
+ },
+ "inherits": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-1.0.0.tgz"
+ }
+ }
+ },
+ "grunt-legacy-log": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/grunt-legacy-log/-/grunt-legacy-log-0.1.1.tgz",
+ "dependencies": {
+ "colors": {
+ "version": "0.6.2",
+ "resolved": "https://registry.npmjs.org/colors/-/colors-0.6.2.tgz"
+ },
+ "lodash": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.1.tgz"
+ },
+ "underscore.string": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-2.3.3.tgz"
+ }
+ }
+ },
+ "grunt-legacy-util": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/grunt-legacy-util/-/grunt-legacy-util-0.2.0.tgz",
+ "dependencies": {
+ "async": {
+ "version": "0.1.22",
+ "resolved": "https://registry.npmjs.org/async/-/async-0.1.22.tgz"
+ },
+ "lodash": {
+ "version": "0.9.2",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-0.9.2.tgz"
+ },
+ "underscore.string": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-2.2.1.tgz"
+ }
+ }
+ },
+ "hooker": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/hooker/-/hooker-0.2.3.tgz"
+ },
+ "iconv-lite": {
+ "version": "0.2.11",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.2.11.tgz"
+ },
+ "js-yaml": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-2.0.5.tgz",
+ "dependencies": {
+ "argparse": {
+ "version": "0.1.16",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-0.1.16.tgz",
+ "dependencies": {
+ "underscore": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.7.0.tgz"
+ },
+ "underscore.string": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-2.4.0.tgz"
+ }
+ }
+ },
+ "esprima": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-1.0.4.tgz"
+ }
+ }
+ },
+ "lodash": {
+ "version": "0.9.2",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-0.9.2.tgz"
+ },
+ "minimatch": {
+ "version": "0.2.14",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.2.14.tgz",
+ "dependencies": {
+ "lru-cache": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.5.0.tgz"
+ },
+ "sigmund": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.0.tgz"
+ }
+ }
+ },
+ "nopt": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz",
+ "dependencies": {
+ "abbrev": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.5.tgz"
+ }
+ }
+ },
+ "rimraf": {
+ "version": "2.2.8",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.2.8.tgz"
+ },
+ "underscore.string": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-2.2.1.tgz"
+ },
+ "which": {
+ "version": "1.0.9",
+ "resolved": "https://registry.npmjs.org/which/-/which-1.0.9.tgz"
+ }
+ }
+ },
+ "grunt-autoprefixer": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/grunt-autoprefixer/-/grunt-autoprefixer-2.2.0.tgz",
+ "dependencies": {
+ "autoprefixer-core": {
+ "version": "5.1.7",
+ "resolved": "https://registry.npmjs.org/autoprefixer-core/-/autoprefixer-core-5.1.7.tgz",
+ "dependencies": {
+ "browserslist": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-0.2.0.tgz"
+ },
+ "caniuse-db": {
+ "version": "1.0.30000092",
+ "resolved": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30000092.tgz"
+ },
+ "num2fraction": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.0.1.tgz"
+ },
+ "postcss": {
+ "version": "4.0.6",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-4.0.6.tgz",
+ "dependencies": {
+ "js-base64": {
+ "version": "2.1.7",
+ "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.1.7.tgz"
+ },
+ "source-map": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.2.0.tgz",
+ "dependencies": {
+ "amdefine": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-0.1.0.tgz"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "chalk": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-0.5.1.tgz",
+ "dependencies": {
+ "ansi-styles": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-1.1.0.tgz"
+ },
+ "escape-string-regexp": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.3.tgz"
+ },
+ "has-ansi": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-0.1.0.tgz",
+ "dependencies": {
+ "ansi-regex": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-0.2.1.tgz"
+ }
+ }
+ },
+ "strip-ansi": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-0.3.0.tgz",
+ "dependencies": {
+ "ansi-regex": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-0.2.1.tgz"
+ }
+ }
+ },
+ "supports-color": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-0.2.0.tgz"
+ }
+ }
+ },
+ "diff": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/diff/-/diff-1.2.2.tgz"
+ }
+ }
+ },
+ "grunt-banner": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/grunt-banner/-/grunt-banner-0.3.1.tgz"
+ },
+ "grunt-contrib-clean": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/grunt-contrib-clean/-/grunt-contrib-clean-0.6.0.tgz",
+ "dependencies": {
+ "rimraf": {
+ "version": "2.2.8",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.2.8.tgz"
+ }
+ }
+ },
+ "grunt-contrib-compress": {
+ "version": "0.13.0",
+ "resolved": "https://registry.npmjs.org/grunt-contrib-compress/-/grunt-contrib-compress-0.13.0.tgz",
+ "dependencies": {
+ "archiver": {
+ "version": "0.13.1",
+ "resolved": "https://registry.npmjs.org/archiver/-/archiver-0.13.1.tgz",
+ "dependencies": {
+ "async": {
+ "version": "0.9.0",
+ "resolved": "https://registry.npmjs.org/async/-/async-0.9.0.tgz"
+ },
+ "buffer-crc32": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.5.tgz"
+ },
+ "glob": {
+ "version": "4.3.5",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-4.3.5.tgz",
+ "dependencies": {
+ "inflight": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.4.tgz",
+ "dependencies": {
+ "wrappy": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.1.tgz"
+ }
+ }
+ },
+ "inherits": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz"
+ },
+ "minimatch": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-2.0.4.tgz",
+ "dependencies": {
+ "brace-expansion": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.0.tgz",
+ "dependencies": {
+ "balanced-match": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.2.0.tgz"
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz"
+ }
+ }
+ }
+ }
+ },
+ "once": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.3.1.tgz",
+ "dependencies": {
+ "wrappy": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.1.tgz"
+ }
+ }
+ }
+ }
+ },
+ "lazystream": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-0.1.0.tgz"
+ },
+ "lodash": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.1.tgz"
+ },
+ "readable-stream": {
+ "version": "1.0.33",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.33.tgz",
+ "dependencies": {
+ "core-util-is": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.1.tgz"
+ },
+ "inherits": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz"
+ },
+ "isarray": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz"
+ },
+ "string_decoder": {
+ "version": "0.10.31",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz"
+ }
+ }
+ },
+ "tar-stream": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.1.2.tgz",
+ "dependencies": {
+ "bl": {
+ "version": "0.9.4",
+ "resolved": "https://registry.npmjs.org/bl/-/bl-0.9.4.tgz"
+ },
+ "end-of-stream": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.1.0.tgz",
+ "dependencies": {
+ "once": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.3.1.tgz",
+ "dependencies": {
+ "wrappy": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.1.tgz"
+ }
+ }
+ }
+ }
+ },
+ "xtend": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.0.tgz"
+ }
+ }
+ },
+ "zip-stream": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-0.5.1.tgz",
+ "dependencies": {
+ "compress-commons": {
+ "version": "0.2.7",
+ "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-0.2.7.tgz",
+ "dependencies": {
+ "crc32-stream": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-0.3.2.tgz"
+ },
+ "node-int64": {
+ "version": "0.3.3",
+ "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.3.3.tgz"
+ }
+ }
+ },
+ "lodash": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.2.0.tgz"
+ }
+ }
+ }
+ }
+ },
+ "chalk": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-0.5.1.tgz",
+ "dependencies": {
+ "ansi-styles": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-1.1.0.tgz"
+ },
+ "escape-string-regexp": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.3.tgz"
+ },
+ "has-ansi": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-0.1.0.tgz",
+ "dependencies": {
+ "ansi-regex": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-0.2.1.tgz"
+ }
+ }
+ },
+ "strip-ansi": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-0.3.0.tgz",
+ "dependencies": {
+ "ansi-regex": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-0.2.1.tgz"
+ }
+ }
+ },
+ "supports-color": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-0.2.0.tgz"
+ }
+ }
+ },
+ "prettysize": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/prettysize/-/prettysize-0.0.3.tgz"
+ }
+ }
+ },
+ "grunt-contrib-concat": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/grunt-contrib-concat/-/grunt-contrib-concat-0.5.1.tgz",
+ "dependencies": {
+ "chalk": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-0.5.1.tgz",
+ "dependencies": {
+ "ansi-styles": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-1.1.0.tgz"
+ },
+ "escape-string-regexp": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.3.tgz"
+ },
+ "has-ansi": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-0.1.0.tgz",
+ "dependencies": {
+ "ansi-regex": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-0.2.1.tgz"
+ }
+ }
+ },
+ "strip-ansi": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-0.3.0.tgz",
+ "dependencies": {
+ "ansi-regex": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-0.2.1.tgz"
+ }
+ }
+ },
+ "supports-color": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-0.2.0.tgz"
+ }
+ }
+ },
+ "source-map": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.3.0.tgz",
+ "dependencies": {
+ "amdefine": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-0.1.0.tgz"
+ }
+ }
+ }
+ }
+ },
+ "grunt-contrib-connect": {
+ "version": "0.9.0",
+ "resolved": "https://registry.npmjs.org/grunt-contrib-connect/-/grunt-contrib-connect-0.9.0.tgz",
+ "dependencies": {
+ "async": {
+ "version": "0.9.0",
+ "resolved": "https://registry.npmjs.org/async/-/async-0.9.0.tgz"
+ },
+ "connect": {
+ "version": "2.29.0",
+ "resolved": "https://registry.npmjs.org/connect/-/connect-2.29.0.tgz",
+ "dependencies": {
+ "basic-auth-connect": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/basic-auth-connect/-/basic-auth-connect-1.0.0.tgz"
+ },
+ "body-parser": {
+ "version": "1.12.0",
+ "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.12.0.tgz",
+ "dependencies": {
+ "iconv-lite": {
+ "version": "0.4.7",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.7.tgz"
+ },
+ "on-finished": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.2.0.tgz",
+ "dependencies": {
+ "ee-first": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.0.tgz"
+ }
+ }
+ },
+ "raw-body": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-1.3.3.tgz"
+ }
+ }
+ },
+ "bytes": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/bytes/-/bytes-1.0.0.tgz"
+ },
+ "compression": {
+ "version": "1.4.3",
+ "resolved": "https://registry.npmjs.org/compression/-/compression-1.4.3.tgz",
+ "dependencies": {
+ "accepts": {
+ "version": "1.2.5",
+ "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.2.5.tgz",
+ "dependencies": {
+ "mime-types": {
+ "version": "2.0.10",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.0.10.tgz",
+ "dependencies": {
+ "mime-db": {
+ "version": "1.8.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.8.0.tgz"
+ }
+ }
+ },
+ "negotiator": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.5.1.tgz"
+ }
+ }
+ },
+ "compressible": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.2.tgz",
+ "dependencies": {
+ "mime-db": {
+ "version": "1.8.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.8.0.tgz"
+ }
+ }
+ },
+ "vary": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/vary/-/vary-1.0.0.tgz"
+ }
+ }
+ },
+ "connect-timeout": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/connect-timeout/-/connect-timeout-1.6.1.tgz",
+ "dependencies": {
+ "ms": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.0.tgz"
+ }
+ }
+ },
+ "content-type": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.1.tgz"
+ },
+ "cookie": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.1.2.tgz"
+ },
+ "cookie-parser": {
+ "version": "1.3.4",
+ "resolved": "https://registry.npmjs.org/cookie-parser/-/cookie-parser-1.3.4.tgz"
+ },
+ "cookie-signature": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz"
+ },
+ "csurf": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/csurf/-/csurf-1.7.0.tgz",
+ "dependencies": {
+ "csrf": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/csrf/-/csrf-2.0.6.tgz",
+ "dependencies": {
+ "base64-url": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/base64-url/-/base64-url-1.2.1.tgz"
+ },
+ "rndm": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/rndm/-/rndm-1.1.0.tgz"
+ },
+ "scmp": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/scmp/-/scmp-1.0.0.tgz"
+ },
+ "uid-safe": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/uid-safe/-/uid-safe-1.1.0.tgz",
+ "dependencies": {
+ "native-or-bluebird": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/native-or-bluebird/-/native-or-bluebird-1.1.2.tgz"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "debug": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.1.3.tgz",
+ "dependencies": {
+ "ms": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.0.tgz"
+ }
+ }
+ },
+ "depd": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/depd/-/depd-1.0.0.tgz"
+ },
+ "errorhandler": {
+ "version": "1.3.5",
+ "resolved": "https://registry.npmjs.org/errorhandler/-/errorhandler-1.3.5.tgz",
+ "dependencies": {
+ "accepts": {
+ "version": "1.2.5",
+ "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.2.5.tgz",
+ "dependencies": {
+ "mime-types": {
+ "version": "2.0.10",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.0.10.tgz",
+ "dependencies": {
+ "mime-db": {
+ "version": "1.8.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.8.0.tgz"
+ }
+ }
+ },
+ "negotiator": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.5.1.tgz"
+ }
+ }
+ },
+ "escape-html": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.1.tgz"
+ }
+ }
+ },
+ "express-session": {
+ "version": "1.10.3",
+ "resolved": "https://registry.npmjs.org/express-session/-/express-session-1.10.3.tgz",
+ "dependencies": {
+ "crc": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/crc/-/crc-3.2.1.tgz"
+ },
+ "uid-safe": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/uid-safe/-/uid-safe-1.1.0.tgz",
+ "dependencies": {
+ "base64-url": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/base64-url/-/base64-url-1.2.1.tgz"
+ },
+ "native-or-bluebird": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/native-or-bluebird/-/native-or-bluebird-1.1.2.tgz"
+ }
+ }
+ }
+ }
+ },
+ "finalhandler": {
+ "version": "0.3.3",
+ "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-0.3.3.tgz",
+ "dependencies": {
+ "escape-html": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.1.tgz"
+ },
+ "on-finished": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.2.0.tgz",
+ "dependencies": {
+ "ee-first": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.0.tgz"
+ }
+ }
+ }
+ }
+ },
+ "fresh": {
+ "version": "0.2.4",
+ "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.2.4.tgz"
+ },
+ "http-errors": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.3.1.tgz",
+ "dependencies": {
+ "inherits": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz"
+ },
+ "statuses": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.2.1.tgz"
+ }
+ }
+ },
+ "method-override": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/method-override/-/method-override-2.3.2.tgz",
+ "dependencies": {
+ "methods": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.1.tgz"
+ },
+ "vary": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/vary/-/vary-1.0.0.tgz"
+ }
+ }
+ },
+ "morgan": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.5.1.tgz",
+ "dependencies": {
+ "basic-auth": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-1.0.0.tgz"
+ },
+ "on-finished": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.2.0.tgz",
+ "dependencies": {
+ "ee-first": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.0.tgz"
+ }
+ }
+ }
+ }
+ },
+ "multiparty": {
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/multiparty/-/multiparty-3.3.2.tgz",
+ "dependencies": {
+ "readable-stream": {
+ "version": "1.1.13",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.13.tgz",
+ "dependencies": {
+ "core-util-is": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.1.tgz"
+ },
+ "inherits": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz"
+ },
+ "isarray": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz"
+ },
+ "string_decoder": {
+ "version": "0.10.31",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz"
+ }
+ }
+ },
+ "stream-counter": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/stream-counter/-/stream-counter-0.2.0.tgz"
+ }
+ }
+ },
+ "on-headers": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.0.tgz"
+ },
+ "parseurl": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.0.tgz"
+ },
+ "pause": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/pause/-/pause-0.0.1.tgz"
+ },
+ "qs": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-2.3.3.tgz"
+ },
+ "response-time": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/response-time/-/response-time-2.3.0.tgz"
+ },
+ "serve-favicon": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/serve-favicon/-/serve-favicon-2.2.0.tgz",
+ "dependencies": {
+ "etag": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/etag/-/etag-1.5.1.tgz",
+ "dependencies": {
+ "crc": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/crc/-/crc-3.2.1.tgz"
+ }
+ }
+ },
+ "ms": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.0.tgz"
+ }
+ }
+ },
+ "serve-index": {
+ "version": "1.6.3",
+ "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.6.3.tgz",
+ "dependencies": {
+ "accepts": {
+ "version": "1.2.5",
+ "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.2.5.tgz",
+ "dependencies": {
+ "negotiator": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.5.1.tgz"
+ }
+ }
+ },
+ "batch": {
+ "version": "0.5.2",
+ "resolved": "https://registry.npmjs.org/batch/-/batch-0.5.2.tgz"
+ },
+ "escape-html": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.1.tgz"
+ },
+ "mime-types": {
+ "version": "2.0.10",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.0.10.tgz",
+ "dependencies": {
+ "mime-db": {
+ "version": "1.8.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.8.0.tgz"
+ }
+ }
+ }
+ }
+ },
+ "serve-static": {
+ "version": "1.9.2",
+ "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.9.2.tgz",
+ "dependencies": {
+ "escape-html": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.1.tgz"
+ },
+ "send": {
+ "version": "0.12.2",
+ "resolved": "https://registry.npmjs.org/send/-/send-0.12.2.tgz",
+ "dependencies": {
+ "destroy": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.3.tgz"
+ },
+ "etag": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/etag/-/etag-1.5.1.tgz",
+ "dependencies": {
+ "crc": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/crc/-/crc-3.2.1.tgz"
+ }
+ }
+ },
+ "mime": {
+ "version": "1.3.4",
+ "resolved": "https://registry.npmjs.org/mime/-/mime-1.3.4.tgz"
+ },
+ "ms": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.0.tgz"
+ },
+ "on-finished": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.2.0.tgz",
+ "dependencies": {
+ "ee-first": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.0.tgz"
+ }
+ }
+ },
+ "range-parser": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.0.2.tgz"
+ }
+ }
+ }
+ }
+ },
+ "type-is": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.1.tgz",
+ "dependencies": {
+ "media-typer": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz"
+ },
+ "mime-types": {
+ "version": "2.0.10",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.0.10.tgz",
+ "dependencies": {
+ "mime-db": {
+ "version": "1.8.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.8.0.tgz"
+ }
+ }
+ }
+ }
+ },
+ "utils-merge": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.0.tgz"
+ },
+ "vhost": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/vhost/-/vhost-3.0.0.tgz"
+ }
+ }
+ },
+ "connect-livereload": {
+ "version": "0.5.3",
+ "resolved": "https://registry.npmjs.org/connect-livereload/-/connect-livereload-0.5.3.tgz"
+ },
+ "opn": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/opn/-/opn-1.0.1.tgz"
+ },
+ "portscanner": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/portscanner/-/portscanner-1.0.0.tgz",
+ "dependencies": {
+ "async": {
+ "version": "0.1.15",
+ "resolved": "https://registry.npmjs.org/async/-/async-0.1.15.tgz"
+ }
+ }
+ }
+ }
+ },
+ "grunt-contrib-copy": {
+ "version": "0.8.0",
+ "resolved": "https://registry.npmjs.org/grunt-contrib-copy/-/grunt-contrib-copy-0.8.0.tgz",
+ "dependencies": {
+ "chalk": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-0.5.1.tgz",
+ "dependencies": {
+ "ansi-styles": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-1.1.0.tgz"
+ },
+ "escape-string-regexp": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.3.tgz"
+ },
+ "has-ansi": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-0.1.0.tgz",
+ "dependencies": {
+ "ansi-regex": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-0.2.1.tgz"
+ }
+ }
+ },
+ "strip-ansi": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-0.3.0.tgz",
+ "dependencies": {
+ "ansi-regex": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-0.2.1.tgz"
+ }
+ }
+ },
+ "supports-color": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-0.2.0.tgz"
+ }
+ }
+ },
+ "file-sync-cmp": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/file-sync-cmp/-/file-sync-cmp-0.1.1.tgz"
+ }
+ }
+ },
+ "grunt-contrib-csslint": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/grunt-contrib-csslint/-/grunt-contrib-csslint-0.4.0.tgz",
+ "dependencies": {
+ "chalk": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-0.5.1.tgz",
+ "dependencies": {
+ "ansi-styles": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-1.1.0.tgz"
+ },
+ "escape-string-regexp": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.3.tgz"
+ },
+ "has-ansi": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-0.1.0.tgz",
+ "dependencies": {
+ "ansi-regex": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-0.2.1.tgz"
+ }
+ }
+ },
+ "strip-ansi": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-0.3.0.tgz",
+ "dependencies": {
+ "ansi-regex": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-0.2.1.tgz"
+ }
+ }
+ },
+ "supports-color": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-0.2.0.tgz"
+ }
+ }
+ },
+ "csslint": {
+ "version": "0.10.0",
+ "resolved": "https://registry.npmjs.org/csslint/-/csslint-0.10.0.tgz",
+ "dependencies": {
+ "parserlib": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/parserlib/-/parserlib-0.2.5.tgz"
+ }
+ }
+ },
+ "lodash": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.1.tgz"
+ },
+ "strip-json-comments": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-1.0.2.tgz"
+ }
+ }
+ },
+ "grunt-contrib-cssmin": {
+ "version": "0.12.2",
+ "resolved": "https://registry.npmjs.org/grunt-contrib-cssmin/-/grunt-contrib-cssmin-0.12.2.tgz",
+ "dependencies": {
+ "chalk": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-0.5.1.tgz",
+ "dependencies": {
+ "ansi-styles": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-1.1.0.tgz"
+ },
+ "escape-string-regexp": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.3.tgz"
+ },
+ "has-ansi": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-0.1.0.tgz",
+ "dependencies": {
+ "ansi-regex": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-0.2.1.tgz"
+ }
+ }
+ },
+ "strip-ansi": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-0.3.0.tgz",
+ "dependencies": {
+ "ansi-regex": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-0.2.1.tgz"
+ }
+ }
+ },
+ "supports-color": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-0.2.0.tgz"
+ }
+ }
+ },
+ "clean-css": {
+ "version": "3.1.6",
+ "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-3.1.6.tgz",
+ "dependencies": {
+ "commander": {
+ "version": "2.6.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.6.0.tgz"
+ },
+ "source-map": {
+ "version": "0.1.43",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz",
+ "dependencies": {
+ "amdefine": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-0.1.0.tgz"
+ }
+ }
+ }
+ }
+ },
+ "maxmin": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/maxmin/-/maxmin-1.0.1.tgz",
+ "dependencies": {
+ "chalk": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.0.0.tgz",
+ "dependencies": {
+ "ansi-styles": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.0.1.tgz"
+ },
+ "escape-string-regexp": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.3.tgz"
+ },
+ "has-ansi": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-1.0.3.tgz",
+ "dependencies": {
+ "ansi-regex": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-1.1.1.tgz"
+ },
+ "get-stdin": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz"
+ }
+ }
+ },
+ "strip-ansi": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-2.0.1.tgz",
+ "dependencies": {
+ "ansi-regex": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-1.1.1.tgz"
+ }
+ }
+ },
+ "supports-color": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-1.3.0.tgz"
+ }
+ }
+ },
+ "figures": {
+ "version": "1.3.5",
+ "resolved": "https://registry.npmjs.org/figures/-/figures-1.3.5.tgz"
+ },
+ "gzip-size": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-1.0.0.tgz",
+ "dependencies": {
+ "browserify-zlib": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.1.4.tgz",
+ "dependencies": {
+ "pako": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.5.tgz"
+ }
+ }
+ },
+ "concat-stream": {
+ "version": "1.4.7",
+ "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.4.7.tgz",
+ "dependencies": {
+ "inherits": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz"
+ },
+ "readable-stream": {
+ "version": "1.1.13",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.13.tgz",
+ "dependencies": {
+ "core-util-is": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.1.tgz"
+ },
+ "isarray": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz"
+ },
+ "string_decoder": {
+ "version": "0.10.31",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz"
+ }
+ }
+ },
+ "typedarray": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz"
+ }
+ }
+ }
+ }
+ },
+ "pretty-bytes": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-1.0.3.tgz",
+ "dependencies": {
+ "get-stdin": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "grunt-contrib-jade": {
+ "version": "0.14.1",
+ "resolved": "https://registry.npmjs.org/grunt-contrib-jade/-/grunt-contrib-jade-0.14.1.tgz",
+ "dependencies": {
+ "chalk": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-0.5.1.tgz",
+ "dependencies": {
+ "ansi-styles": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-1.1.0.tgz"
+ },
+ "escape-string-regexp": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.3.tgz"
+ },
+ "has-ansi": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-0.1.0.tgz",
+ "dependencies": {
+ "ansi-regex": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-0.2.1.tgz"
+ }
+ }
+ },
+ "strip-ansi": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-0.3.0.tgz",
+ "dependencies": {
+ "ansi-regex": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-0.2.1.tgz"
+ }
+ }
+ },
+ "supports-color": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-0.2.0.tgz"
+ }
+ }
+ },
+ "jade": {
+ "version": "1.9.2",
+ "resolved": "https://registry.npmjs.org/jade/-/jade-1.9.2.tgz",
+ "dependencies": {
+ "character-parser": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/character-parser/-/character-parser-1.2.1.tgz"
+ },
+ "commander": {
+ "version": "2.6.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.6.0.tgz"
+ },
+ "constantinople": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/constantinople/-/constantinople-3.0.1.tgz",
+ "dependencies": {
+ "acorn-globals": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-1.0.2.tgz",
+ "dependencies": {
+ "acorn": {
+ "version": "0.11.0",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-0.11.0.tgz"
+ }
+ }
+ }
+ }
+ },
+ "mkdirp": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.0.tgz",
+ "dependencies": {
+ "minimist": {
+ "version": "0.0.8",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz"
+ }
+ }
+ },
+ "transformers": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/transformers/-/transformers-2.1.0.tgz",
+ "dependencies": {
+ "css": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/css/-/css-1.0.8.tgz",
+ "dependencies": {
+ "css-parse": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/css-parse/-/css-parse-1.0.4.tgz"
+ },
+ "css-stringify": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/css-stringify/-/css-stringify-1.0.5.tgz"
+ }
+ }
+ },
+ "promise": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/promise/-/promise-2.0.0.tgz",
+ "dependencies": {
+ "is-promise": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-1.0.1.tgz"
+ }
+ }
+ },
+ "uglify-js": {
+ "version": "2.2.5",
+ "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.2.5.tgz",
+ "dependencies": {
+ "optimist": {
+ "version": "0.3.7",
+ "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.3.7.tgz",
+ "dependencies": {
+ "wordwrap": {
+ "version": "0.0.2",
+ "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz"
+ }
+ }
+ },
+ "source-map": {
+ "version": "0.1.43",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz",
+ "dependencies": {
+ "amdefine": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-0.1.0.tgz"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "void-elements": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz"
+ },
+ "with": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/with/-/with-4.0.1.tgz",
+ "dependencies": {
+ "acorn": {
+ "version": "0.11.0",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-0.11.0.tgz"
+ },
+ "acorn-globals": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-1.0.2.tgz",
+ "dependencies": {
+ "acorn": {
+ "version": "0.11.0",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-0.11.0.tgz"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "grunt-contrib-jshint": {
+ "version": "0.11.0",
+ "resolved": "https://registry.npmjs.org/grunt-contrib-jshint/-/grunt-contrib-jshint-0.11.0.tgz",
+ "dependencies": {
+ "hooker": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/hooker/-/hooker-0.2.3.tgz"
+ },
+ "jshint": {
+ "version": "2.6.3",
+ "resolved": "https://registry.npmjs.org/jshint/-/jshint-2.6.3.tgz",
+ "dependencies": {
+ "cli": {
+ "version": "0.6.5",
+ "resolved": "https://registry.npmjs.org/cli/-/cli-0.6.5.tgz",
+ "dependencies": {
+ "glob": {
+ "version": "3.2.11",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-3.2.11.tgz",
+ "dependencies": {
+ "inherits": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz"
+ },
+ "minimatch": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.3.0.tgz",
+ "dependencies": {
+ "lru-cache": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.5.0.tgz"
+ },
+ "sigmund": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.0.tgz"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "console-browserify": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz",
+ "dependencies": {
+ "date-now": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz"
+ }
+ }
+ },
+ "exit": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz"
+ },
+ "htmlparser2": {
+ "version": "3.8.2",
+ "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.8.2.tgz",
+ "dependencies": {
+ "domelementtype": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.0.tgz"
+ },
+ "domhandler": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.3.0.tgz"
+ },
+ "domutils": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz",
+ "dependencies": {
+ "dom-serializer": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz",
+ "dependencies": {
+ "domelementtype": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz"
+ },
+ "entities": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.1.tgz"
+ }
+ }
+ }
+ }
+ },
+ "entities": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/entities/-/entities-1.0.0.tgz"
+ },
+ "readable-stream": {
+ "version": "1.1.13",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.13.tgz",
+ "dependencies": {
+ "core-util-is": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.1.tgz"
+ },
+ "inherits": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz"
+ },
+ "isarray": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz"
+ },
+ "string_decoder": {
+ "version": "0.10.31",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz"
+ }
+ }
+ }
+ }
+ },
+ "minimatch": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-1.0.0.tgz",
+ "dependencies": {
+ "lru-cache": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.5.0.tgz"
+ },
+ "sigmund": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.0.tgz"
+ }
+ }
+ },
+ "shelljs": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.3.0.tgz"
+ },
+ "strip-json-comments": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-1.0.2.tgz"
+ },
+ "underscore": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.6.0.tgz"
+ }
+ }
+ }
+ }
+ },
+ "grunt-contrib-less": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/grunt-contrib-less/-/grunt-contrib-less-1.0.0.tgz",
+ "dependencies": {
+ "async": {
+ "version": "0.9.0",
+ "resolved": "https://registry.npmjs.org/async/-/async-0.9.0.tgz"
+ },
+ "chalk": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-0.5.1.tgz",
+ "dependencies": {
+ "ansi-styles": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-1.1.0.tgz"
+ },
+ "escape-string-regexp": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.3.tgz"
+ },
+ "has-ansi": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-0.1.0.tgz",
+ "dependencies": {
+ "ansi-regex": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-0.2.1.tgz"
+ }
+ }
+ },
+ "strip-ansi": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-0.3.0.tgz",
+ "dependencies": {
+ "ansi-regex": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-0.2.1.tgz"
+ }
+ }
+ },
+ "supports-color": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-0.2.0.tgz"
+ }
+ }
+ },
+ "less": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/less/-/less-2.4.0.tgz",
+ "dependencies": {
+ "errno": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.1.tgz",
+ "dependencies": {
+ "prr": {
+ "version": "0.0.0",
+ "resolved": "https://registry.npmjs.org/prr/-/prr-0.0.0.tgz"
+ }
+ }
+ },
+ "graceful-fs": {
+ "version": "3.0.6",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-3.0.6.tgz"
+ },
+ "image-size": {
+ "version": "0.3.5",
+ "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.3.5.tgz"
+ },
+ "mime": {
+ "version": "1.3.4",
+ "resolved": "https://registry.npmjs.org/mime/-/mime-1.3.4.tgz"
+ },
+ "mkdirp": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.0.tgz",
+ "dependencies": {
+ "minimist": {
+ "version": "0.0.8",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz"
+ }
+ }
+ },
+ "promise": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/promise/-/promise-6.1.0.tgz",
+ "dependencies": {
+ "asap": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/asap/-/asap-1.0.0.tgz"
+ }
+ }
+ },
+ "request": {
+ "version": "2.53.0",
+ "resolved": "https://registry.npmjs.org/request/-/request-2.53.0.tgz",
+ "dependencies": {
+ "aws-sign2": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.5.0.tgz"
+ },
+ "bl": {
+ "version": "0.9.4",
+ "resolved": "https://registry.npmjs.org/bl/-/bl-0.9.4.tgz",
+ "dependencies": {
+ "readable-stream": {
+ "version": "1.0.33",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.33.tgz",
+ "dependencies": {
+ "core-util-is": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.1.tgz"
+ },
+ "inherits": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz"
+ },
+ "isarray": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz"
+ },
+ "string_decoder": {
+ "version": "0.10.31",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz"
+ }
+ }
+ }
+ }
+ },
+ "caseless": {
+ "version": "0.9.0",
+ "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.9.0.tgz"
+ },
+ "combined-stream": {
+ "version": "0.0.7",
+ "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-0.0.7.tgz",
+ "dependencies": {
+ "delayed-stream": {
+ "version": "0.0.5",
+ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-0.0.5.tgz"
+ }
+ }
+ },
+ "forever-agent": {
+ "version": "0.5.2",
+ "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.5.2.tgz"
+ },
+ "form-data": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-0.2.0.tgz"
+ },
+ "hawk": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/hawk/-/hawk-2.3.1.tgz",
+ "dependencies": {
+ "boom": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/boom/-/boom-2.6.1.tgz"
+ },
+ "cryptiles": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.4.tgz"
+ },
+ "hoek": {
+ "version": "2.11.1",
+ "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.11.1.tgz"
+ },
+ "sntp": {
+ "version": "1.0.9",
+ "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz"
+ }
+ }
+ },
+ "http-signature": {
+ "version": "0.10.1",
+ "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-0.10.1.tgz",
+ "dependencies": {
+ "asn1": {
+ "version": "0.1.11",
+ "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.1.11.tgz"
+ },
+ "assert-plus": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.1.5.tgz"
+ },
+ "ctype": {
+ "version": "0.5.3",
+ "resolved": "https://registry.npmjs.org/ctype/-/ctype-0.5.3.tgz"
+ }
+ }
+ },
+ "isstream": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz"
+ },
+ "json-stringify-safe": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.0.tgz"
+ },
+ "mime-types": {
+ "version": "2.0.10",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.0.10.tgz",
+ "dependencies": {
+ "mime-db": {
+ "version": "1.8.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.8.0.tgz"
+ }
+ }
+ },
+ "node-uuid": {
+ "version": "1.4.3",
+ "resolved": "https://registry.npmjs.org/node-uuid/-/node-uuid-1.4.3.tgz"
+ },
+ "oauth-sign": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.6.0.tgz"
+ },
+ "qs": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-2.3.3.tgz"
+ },
+ "stringstream": {
+ "version": "0.0.4",
+ "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.4.tgz"
+ },
+ "tough-cookie": {
+ "version": "0.12.1",
+ "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-0.12.1.tgz",
+ "dependencies": {
+ "punycode": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz"
+ }
+ }
+ },
+ "tunnel-agent": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.4.0.tgz"
+ }
+ }
+ },
+ "source-map": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.2.0.tgz",
+ "dependencies": {
+ "amdefine": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-0.1.0.tgz"
+ }
+ }
+ }
+ }
+ },
+ "lodash": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.1.tgz"
+ }
+ }
+ },
+ "grunt-contrib-qunit": {
+ "version": "0.5.2",
+ "resolved": "https://registry.npmjs.org/grunt-contrib-qunit/-/grunt-contrib-qunit-0.5.2.tgz",
+ "dependencies": {
+ "grunt-lib-phantomjs": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/grunt-lib-phantomjs/-/grunt-lib-phantomjs-0.6.0.tgz",
+ "dependencies": {
+ "eventemitter2": {
+ "version": "0.4.14",
+ "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-0.4.14.tgz"
+ },
+ "phantomjs": {
+ "version": "1.9.16",
+ "resolved": "https://registry.npmjs.org/phantomjs/-/phantomjs-1.9.16.tgz",
+ "dependencies": {
+ "adm-zip": {
+ "version": "0.4.4",
+ "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.4.tgz"
+ },
+ "fs-extra": {
+ "version": "0.16.5",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.16.5.tgz",
+ "dependencies": {
+ "graceful-fs": {
+ "version": "3.0.6",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-3.0.6.tgz"
+ },
+ "jsonfile": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.0.0.tgz"
+ },
+ "rimraf": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.3.2.tgz",
+ "dependencies": {
+ "glob": {
+ "version": "4.5.3",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-4.5.3.tgz",
+ "dependencies": {
+ "inflight": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.4.tgz",
+ "dependencies": {
+ "wrappy": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.1.tgz"
+ }
+ }
+ },
+ "inherits": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz"
+ },
+ "minimatch": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-2.0.4.tgz",
+ "dependencies": {
+ "brace-expansion": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.0.tgz",
+ "dependencies": {
+ "balanced-match": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.2.0.tgz"
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz"
+ }
+ }
+ }
+ }
+ },
+ "once": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.3.1.tgz",
+ "dependencies": {
+ "wrappy": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.1.tgz"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "kew": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/kew/-/kew-0.4.0.tgz"
+ },
+ "npmconf": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/npmconf/-/npmconf-2.1.1.tgz",
+ "dependencies": {
+ "config-chain": {
+ "version": "1.1.8",
+ "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.8.tgz",
+ "dependencies": {
+ "proto-list": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.3.tgz"
+ }
+ }
+ },
+ "inherits": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz"
+ },
+ "ini": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.3.tgz"
+ },
+ "mkdirp": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.0.tgz",
+ "dependencies": {
+ "minimist": {
+ "version": "0.0.8",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz"
+ }
+ }
+ },
+ "nopt": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.1.tgz",
+ "dependencies": {
+ "abbrev": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.5.tgz"
+ }
+ }
+ },
+ "once": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.3.1.tgz",
+ "dependencies": {
+ "wrappy": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.1.tgz"
+ }
+ }
+ },
+ "osenv": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.0.tgz"
+ },
+ "semver": {
+ "version": "4.3.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-4.3.1.tgz"
+ },
+ "uid-number": {
+ "version": "0.0.5",
+ "resolved": "https://registry.npmjs.org/uid-number/-/uid-number-0.0.5.tgz"
+ }
+ }
+ },
+ "progress": {
+ "version": "1.1.8",
+ "resolved": "https://registry.npmjs.org/progress/-/progress-1.1.8.tgz"
+ },
+ "request": {
+ "version": "2.42.0",
+ "resolved": "https://registry.npmjs.org/request/-/request-2.42.0.tgz",
+ "dependencies": {
+ "aws-sign2": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.5.0.tgz"
+ },
+ "bl": {
+ "version": "0.9.4",
+ "resolved": "https://registry.npmjs.org/bl/-/bl-0.9.4.tgz",
+ "dependencies": {
+ "readable-stream": {
+ "version": "1.0.33",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.33.tgz",
+ "dependencies": {
+ "core-util-is": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.1.tgz"
+ },
+ "inherits": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz"
+ },
+ "isarray": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz"
+ },
+ "string_decoder": {
+ "version": "0.10.31",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz"
+ }
+ }
+ }
+ }
+ },
+ "caseless": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.6.0.tgz"
+ },
+ "forever-agent": {
+ "version": "0.5.2",
+ "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.5.2.tgz"
+ },
+ "form-data": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-0.1.4.tgz",
+ "dependencies": {
+ "async": {
+ "version": "0.9.0",
+ "resolved": "https://registry.npmjs.org/async/-/async-0.9.0.tgz"
+ },
+ "combined-stream": {
+ "version": "0.0.7",
+ "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-0.0.7.tgz",
+ "dependencies": {
+ "delayed-stream": {
+ "version": "0.0.5",
+ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-0.0.5.tgz"
+ }
+ }
+ },
+ "mime": {
+ "version": "1.2.11",
+ "resolved": "https://registry.npmjs.org/mime/-/mime-1.2.11.tgz"
+ }
+ }
+ },
+ "hawk": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/hawk/-/hawk-1.1.1.tgz",
+ "dependencies": {
+ "boom": {
+ "version": "0.4.2",
+ "resolved": "https://registry.npmjs.org/boom/-/boom-0.4.2.tgz"
+ },
+ "cryptiles": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-0.2.2.tgz"
+ },
+ "hoek": {
+ "version": "0.9.1",
+ "resolved": "https://registry.npmjs.org/hoek/-/hoek-0.9.1.tgz"
+ },
+ "sntp": {
+ "version": "0.2.4",
+ "resolved": "https://registry.npmjs.org/sntp/-/sntp-0.2.4.tgz"
+ }
+ }
+ },
+ "http-signature": {
+ "version": "0.10.1",
+ "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-0.10.1.tgz",
+ "dependencies": {
+ "asn1": {
+ "version": "0.1.11",
+ "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.1.11.tgz"
+ },
+ "assert-plus": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.1.5.tgz"
+ },
+ "ctype": {
+ "version": "0.5.3",
+ "resolved": "https://registry.npmjs.org/ctype/-/ctype-0.5.3.tgz"
+ }
+ }
+ },
+ "json-stringify-safe": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.0.tgz"
+ },
+ "mime-types": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-1.0.2.tgz"
+ },
+ "node-uuid": {
+ "version": "1.4.3",
+ "resolved": "https://registry.npmjs.org/node-uuid/-/node-uuid-1.4.3.tgz"
+ },
+ "oauth-sign": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.4.0.tgz"
+ },
+ "qs": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-1.2.2.tgz"
+ },
+ "stringstream": {
+ "version": "0.0.4",
+ "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.4.tgz"
+ },
+ "tough-cookie": {
+ "version": "0.12.1",
+ "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-0.12.1.tgz",
+ "dependencies": {
+ "punycode": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz"
+ }
+ }
+ },
+ "tunnel-agent": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.4.0.tgz"
+ }
+ }
+ },
+ "request-progress": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/request-progress/-/request-progress-0.3.1.tgz",
+ "dependencies": {
+ "throttleit": {
+ "version": "0.0.2",
+ "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-0.0.2.tgz"
+ }
+ }
+ },
+ "which": {
+ "version": "1.0.9",
+ "resolved": "https://registry.npmjs.org/which/-/which-1.0.9.tgz"
+ }
+ }
+ },
+ "semver": {
+ "version": "1.0.14",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-1.0.14.tgz"
+ },
+ "temporary": {
+ "version": "0.0.8",
+ "resolved": "https://registry.npmjs.org/temporary/-/temporary-0.0.8.tgz",
+ "dependencies": {
+ "package": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/package/-/package-1.0.1.tgz"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "grunt-contrib-uglify": {
+ "version": "0.8.0",
+ "resolved": "https://registry.npmjs.org/grunt-contrib-uglify/-/grunt-contrib-uglify-0.8.0.tgz",
+ "dependencies": {
+ "chalk": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-0.5.1.tgz",
+ "dependencies": {
+ "ansi-styles": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-1.1.0.tgz"
+ },
+ "escape-string-regexp": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.3.tgz"
+ },
+ "has-ansi": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-0.1.0.tgz",
+ "dependencies": {
+ "ansi-regex": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-0.2.1.tgz"
+ }
+ }
+ },
+ "strip-ansi": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-0.3.0.tgz",
+ "dependencies": {
+ "ansi-regex": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-0.2.1.tgz"
+ }
+ }
+ },
+ "supports-color": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-0.2.0.tgz"
+ }
+ }
+ },
+ "lodash": {
+ "version": "3.5.0",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.5.0.tgz"
+ },
+ "maxmin": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/maxmin/-/maxmin-1.0.1.tgz",
+ "dependencies": {
+ "chalk": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.0.0.tgz",
+ "dependencies": {
+ "ansi-styles": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.0.1.tgz"
+ },
+ "escape-string-regexp": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.3.tgz"
+ },
+ "has-ansi": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-1.0.3.tgz",
+ "dependencies": {
+ "ansi-regex": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-1.1.1.tgz"
+ },
+ "get-stdin": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz"
+ }
+ }
+ },
+ "strip-ansi": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-2.0.1.tgz",
+ "dependencies": {
+ "ansi-regex": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-1.1.1.tgz"
+ }
+ }
+ },
+ "supports-color": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-1.3.0.tgz"
+ }
+ }
+ },
+ "figures": {
+ "version": "1.3.5",
+ "resolved": "https://registry.npmjs.org/figures/-/figures-1.3.5.tgz"
+ },
+ "gzip-size": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-1.0.0.tgz",
+ "dependencies": {
+ "browserify-zlib": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.1.4.tgz",
+ "dependencies": {
+ "pako": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.5.tgz"
+ }
+ }
+ },
+ "concat-stream": {
+ "version": "1.4.7",
+ "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.4.7.tgz",
+ "dependencies": {
+ "inherits": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz"
+ },
+ "readable-stream": {
+ "version": "1.1.13",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.13.tgz",
+ "dependencies": {
+ "core-util-is": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.1.tgz"
+ },
+ "isarray": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz"
+ },
+ "string_decoder": {
+ "version": "0.10.31",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz"
+ }
+ }
+ },
+ "typedarray": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz"
+ }
+ }
+ }
+ }
+ },
+ "pretty-bytes": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-1.0.3.tgz",
+ "dependencies": {
+ "get-stdin": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz"
+ }
+ }
+ }
+ }
+ },
+ "uglify-js": {
+ "version": "2.4.17",
+ "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.4.17.tgz",
+ "dependencies": {
+ "async": {
+ "version": "0.2.10",
+ "resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz"
+ },
+ "source-map": {
+ "version": "0.1.34",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.34.tgz",
+ "dependencies": {
+ "amdefine": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-0.1.0.tgz"
+ }
+ }
+ },
+ "uglify-to-browserify": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz"
+ },
+ "yargs": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-1.3.3.tgz"
+ }
+ }
+ },
+ "uri-path": {
+ "version": "0.0.2",
+ "resolved": "https://registry.npmjs.org/uri-path/-/uri-path-0.0.2.tgz"
+ }
+ }
+ },
+ "grunt-contrib-watch": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/grunt-contrib-watch/-/grunt-contrib-watch-0.6.1.tgz",
+ "dependencies": {
+ "async": {
+ "version": "0.2.10",
+ "resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz"
+ },
+ "gaze": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/gaze/-/gaze-0.5.1.tgz",
+ "dependencies": {
+ "globule": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/globule/-/globule-0.1.0.tgz",
+ "dependencies": {
+ "glob": {
+ "version": "3.1.21",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-3.1.21.tgz",
+ "dependencies": {
+ "graceful-fs": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-1.2.3.tgz"
+ },
+ "inherits": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-1.0.0.tgz"
+ }
+ }
+ },
+ "lodash": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-1.0.1.tgz"
+ },
+ "minimatch": {
+ "version": "0.2.14",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.2.14.tgz",
+ "dependencies": {
+ "lru-cache": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.5.0.tgz"
+ },
+ "sigmund": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.0.tgz"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "lodash": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.1.tgz"
+ },
+ "tiny-lr-fork": {
+ "version": "0.0.5",
+ "resolved": "https://registry.npmjs.org/tiny-lr-fork/-/tiny-lr-fork-0.0.5.tgz",
+ "dependencies": {
+ "debug": {
+ "version": "0.7.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-0.7.4.tgz"
+ },
+ "faye-websocket": {
+ "version": "0.4.4",
+ "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.4.4.tgz"
+ },
+ "noptify": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/noptify/-/noptify-0.0.3.tgz",
+ "dependencies": {
+ "nopt": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/nopt/-/nopt-2.0.0.tgz",
+ "dependencies": {
+ "abbrev": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.5.tgz"
+ }
+ }
+ }
+ }
+ },
+ "qs": {
+ "version": "0.5.6",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-0.5.6.tgz"
+ }
+ }
+ }
+ }
+ },
+ "grunt-csscomb": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/grunt-csscomb/-/grunt-csscomb-3.0.0.tgz",
+ "dependencies": {
+ "csscomb": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/csscomb/-/csscomb-3.0.4.tgz",
+ "dependencies": {
+ "commander": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.0.0.tgz"
+ },
+ "csscomb-core": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/csscomb-core/-/csscomb-core-2.0.4.tgz",
+ "dependencies": {
+ "minimatch": {
+ "version": "0.2.12",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.2.12.tgz",
+ "dependencies": {
+ "lru-cache": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.5.0.tgz"
+ },
+ "sigmund": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.0.tgz"
+ }
+ }
+ },
+ "vow-fs": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/vow-fs/-/vow-fs-0.3.2.tgz",
+ "dependencies": {
+ "glob": {
+ "version": "3.2.8",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-3.2.8.tgz",
+ "dependencies": {
+ "inherits": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz"
+ }
+ }
+ },
+ "node-uuid": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/node-uuid/-/node-uuid-1.4.0.tgz"
+ },
+ "vow-queue": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/vow-queue/-/vow-queue-0.3.1.tgz"
+ }
+ }
+ }
+ }
+ },
+ "gonzales-pe": {
+ "version": "3.0.0-10",
+ "resolved": "https://registry.npmjs.org/gonzales-pe/-/gonzales-pe-3.0.0-10.tgz"
+ },
+ "vow": {
+ "version": "0.4.4",
+ "resolved": "https://registry.npmjs.org/vow/-/vow-0.4.4.tgz"
+ }
+ }
+ }
+ }
+ },
+ "grunt-exec": {
+ "version": "0.4.6",
+ "resolved": "https://registry.npmjs.org/grunt-exec/-/grunt-exec-0.4.6.tgz"
+ },
+ "grunt-html": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/grunt-html/-/grunt-html-4.0.1.tgz",
+ "dependencies": {
+ "async": {
+ "version": "0.9.0",
+ "resolved": "https://registry.npmjs.org/async/-/async-0.9.0.tgz"
+ },
+ "chalk": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.0.0.tgz",
+ "dependencies": {
+ "ansi-styles": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.0.1.tgz"
+ },
+ "escape-string-regexp": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.3.tgz"
+ },
+ "has-ansi": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-1.0.3.tgz",
+ "dependencies": {
+ "ansi-regex": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-1.1.1.tgz"
+ },
+ "get-stdin": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz"
+ }
+ }
+ },
+ "strip-ansi": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-2.0.1.tgz",
+ "dependencies": {
+ "ansi-regex": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-1.1.1.tgz"
+ }
+ }
+ },
+ "supports-color": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-1.3.0.tgz"
+ }
+ }
+ }
+ }
+ },
+ "grunt-jekyll": {
+ "version": "0.4.2",
+ "resolved": "https://registry.npmjs.org/grunt-jekyll/-/grunt-jekyll-0.4.2.tgz",
+ "dependencies": {
+ "tmp": {
+ "version": "0.0.25",
+ "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.25.tgz"
+ }
+ }
+ },
+ "grunt-jscs": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/grunt-jscs/-/grunt-jscs-1.5.0.tgz",
+ "dependencies": {
+ "hooker": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/hooker/-/hooker-0.2.3.tgz"
+ },
+ "jscs": {
+ "version": "1.11.3",
+ "resolved": "https://registry.npmjs.org/jscs/-/jscs-1.11.3.tgz",
+ "dependencies": {
+ "cli-table": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/cli-table/-/cli-table-0.3.1.tgz"
+ },
+ "colors": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz"
+ },
+ "commander": {
+ "version": "2.6.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.6.0.tgz"
+ },
+ "esprima": {
+ "version": "1.2.5",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-1.2.5.tgz"
+ },
+ "esprima-harmony-jscs": {
+ "version": "1.1.0-tolerate-import",
+ "resolved": "https://registry.npmjs.org/esprima-harmony-jscs/-/esprima-harmony-jscs-1.1.0-tolerate-import.tgz"
+ },
+ "estraverse": {
+ "version": "1.9.3",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-1.9.3.tgz"
+ },
+ "exit": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz"
+ },
+ "glob": {
+ "version": "4.3.5",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-4.3.5.tgz",
+ "dependencies": {
+ "inflight": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.4.tgz",
+ "dependencies": {
+ "wrappy": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.1.tgz"
+ }
+ }
+ },
+ "inherits": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz"
+ },
+ "once": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.3.1.tgz",
+ "dependencies": {
+ "wrappy": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.1.tgz"
+ }
+ }
+ }
+ }
+ },
+ "lodash.assign": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-3.0.0.tgz",
+ "dependencies": {
+ "lodash._baseassign": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/lodash._baseassign/-/lodash._baseassign-3.0.2.tgz",
+ "dependencies": {
+ "lodash._basecopy": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/lodash._basecopy/-/lodash._basecopy-3.0.0.tgz"
+ },
+ "lodash.keys": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.0.4.tgz",
+ "dependencies": {
+ "lodash.isarguments": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.0.0.tgz"
+ },
+ "lodash.isarray": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.0.tgz"
+ },
+ "lodash.isnative": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/lodash.isnative/-/lodash.isnative-3.0.0.tgz"
+ }
+ }
+ }
+ }
+ },
+ "lodash._createassigner": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/lodash._createassigner/-/lodash._createassigner-3.0.1.tgz",
+ "dependencies": {
+ "lodash._bindcallback": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/lodash._bindcallback/-/lodash._bindcallback-3.0.0.tgz"
+ },
+ "lodash._isiterateecall": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/lodash._isiterateecall/-/lodash._isiterateecall-3.0.4.tgz"
+ }
+ }
+ }
+ }
+ },
+ "minimatch": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-2.0.4.tgz",
+ "dependencies": {
+ "brace-expansion": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.0.tgz",
+ "dependencies": {
+ "balanced-match": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.2.0.tgz"
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz"
+ }
+ }
+ }
+ }
+ },
+ "prompt": {
+ "version": "0.2.14",
+ "resolved": "https://registry.npmjs.org/prompt/-/prompt-0.2.14.tgz",
+ "dependencies": {
+ "pkginfo": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/pkginfo/-/pkginfo-0.3.0.tgz"
+ },
+ "read": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/read/-/read-1.0.5.tgz",
+ "dependencies": {
+ "mute-stream": {
+ "version": "0.0.4",
+ "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.4.tgz"
+ }
+ }
+ },
+ "revalidator": {
+ "version": "0.1.8",
+ "resolved": "https://registry.npmjs.org/revalidator/-/revalidator-0.1.8.tgz"
+ },
+ "utile": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/utile/-/utile-0.2.1.tgz",
+ "dependencies": {
+ "async": {
+ "version": "0.2.10",
+ "resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz"
+ },
+ "deep-equal": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.0.tgz"
+ },
+ "i": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/i/-/i-0.3.2.tgz"
+ },
+ "mkdirp": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.0.tgz",
+ "dependencies": {
+ "minimist": {
+ "version": "0.0.8",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz"
+ }
+ }
+ },
+ "ncp": {
+ "version": "0.4.2",
+ "resolved": "https://registry.npmjs.org/ncp/-/ncp-0.4.2.tgz"
+ },
+ "rimraf": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.3.2.tgz",
+ "dependencies": {
+ "glob": {
+ "version": "4.5.3",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-4.5.3.tgz",
+ "dependencies": {
+ "inflight": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.4.tgz",
+ "dependencies": {
+ "wrappy": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.1.tgz"
+ }
+ }
+ },
+ "inherits": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz"
+ },
+ "minimatch": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-2.0.4.tgz",
+ "dependencies": {
+ "brace-expansion": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.0.tgz",
+ "dependencies": {
+ "balanced-match": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.2.0.tgz"
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz"
+ }
+ }
+ }
+ }
+ },
+ "once": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.3.1.tgz",
+ "dependencies": {
+ "wrappy": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.1.tgz"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "winston": {
+ "version": "0.8.3",
+ "resolved": "https://registry.npmjs.org/winston/-/winston-0.8.3.tgz",
+ "dependencies": {
+ "async": {
+ "version": "0.2.10",
+ "resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz"
+ },
+ "colors": {
+ "version": "0.6.2",
+ "resolved": "https://registry.npmjs.org/colors/-/colors-0.6.2.tgz"
+ },
+ "cycle": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/cycle/-/cycle-1.0.3.tgz"
+ },
+ "eyes": {
+ "version": "0.1.8",
+ "resolved": "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz"
+ },
+ "isstream": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz"
+ },
+ "stack-trace": {
+ "version": "0.0.9",
+ "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.9.tgz"
+ }
+ }
+ }
+ }
+ },
+ "strip-json-comments": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-1.0.2.tgz"
+ },
+ "supports-color": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-1.2.1.tgz"
+ },
+ "vow-fs": {
+ "version": "0.3.4",
+ "resolved": "https://registry.npmjs.org/vow-fs/-/vow-fs-0.3.4.tgz",
+ "dependencies": {
+ "glob": {
+ "version": "4.5.3",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-4.5.3.tgz",
+ "dependencies": {
+ "inflight": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.4.tgz",
+ "dependencies": {
+ "wrappy": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.1.tgz"
+ }
+ }
+ },
+ "inherits": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz"
+ },
+ "minimatch": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-2.0.4.tgz",
+ "dependencies": {
+ "brace-expansion": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.0.tgz",
+ "dependencies": {
+ "balanced-match": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.2.0.tgz"
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz"
+ }
+ }
+ }
+ }
+ },
+ "once": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.3.1.tgz",
+ "dependencies": {
+ "wrappy": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.1.tgz"
+ }
+ }
+ }
+ }
+ },
+ "node-uuid": {
+ "version": "1.4.3",
+ "resolved": "https://registry.npmjs.org/node-uuid/-/node-uuid-1.4.3.tgz"
+ },
+ "vow-queue": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/vow-queue/-/vow-queue-0.4.1.tgz"
+ }
+ }
+ },
+ "xmlbuilder": {
+ "version": "2.5.2",
+ "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-2.5.2.tgz",
+ "dependencies": {
+ "lodash": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.2.0.tgz"
+ }
+ }
+ }
+ }
+ },
+ "lodash": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.1.tgz"
+ },
+ "vow": {
+ "version": "0.4.8",
+ "resolved": "https://registry.npmjs.org/vow/-/vow-0.4.8.tgz"
+ }
+ }
+ },
+ "grunt-saucelabs": {
+ "version": "8.6.0",
+ "resolved": "https://registry.npmjs.org/grunt-saucelabs/-/grunt-saucelabs-8.6.0.tgz",
+ "dependencies": {
+ "colors": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz"
+ },
+ "lodash": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.3.1.tgz"
+ },
+ "q": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/q/-/q-1.1.2.tgz"
+ },
+ "requestretry": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/requestretry/-/requestretry-1.2.2.tgz",
+ "dependencies": {
+ "fg-lodash": {
+ "version": "0.0.2",
+ "resolved": "https://registry.npmjs.org/fg-lodash/-/fg-lodash-0.0.2.tgz",
+ "dependencies": {
+ "lodash": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.1.tgz"
+ },
+ "underscore.string": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-2.3.3.tgz"
+ }
+ }
+ },
+ "request": {
+ "version": "2.51.0",
+ "resolved": "https://registry.npmjs.org/request/-/request-2.51.0.tgz",
+ "dependencies": {
+ "aws-sign2": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.5.0.tgz"
+ },
+ "bl": {
+ "version": "0.9.4",
+ "resolved": "https://registry.npmjs.org/bl/-/bl-0.9.4.tgz",
+ "dependencies": {
+ "readable-stream": {
+ "version": "1.0.33",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.33.tgz",
+ "dependencies": {
+ "core-util-is": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.1.tgz"
+ },
+ "inherits": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz"
+ },
+ "isarray": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz"
+ },
+ "string_decoder": {
+ "version": "0.10.31",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz"
+ }
+ }
+ }
+ }
+ },
+ "caseless": {
+ "version": "0.8.0",
+ "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.8.0.tgz"
+ },
+ "combined-stream": {
+ "version": "0.0.7",
+ "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-0.0.7.tgz",
+ "dependencies": {
+ "delayed-stream": {
+ "version": "0.0.5",
+ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-0.0.5.tgz"
+ }
+ }
+ },
+ "forever-agent": {
+ "version": "0.5.2",
+ "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.5.2.tgz"
+ },
+ "form-data": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-0.2.0.tgz",
+ "dependencies": {
+ "async": {
+ "version": "0.9.0",
+ "resolved": "https://registry.npmjs.org/async/-/async-0.9.0.tgz"
+ },
+ "mime-types": {
+ "version": "2.0.10",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.0.10.tgz",
+ "dependencies": {
+ "mime-db": {
+ "version": "1.8.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.8.0.tgz"
+ }
+ }
+ }
+ }
+ },
+ "hawk": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/hawk/-/hawk-1.1.1.tgz",
+ "dependencies": {
+ "boom": {
+ "version": "0.4.2",
+ "resolved": "https://registry.npmjs.org/boom/-/boom-0.4.2.tgz"
+ },
+ "cryptiles": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-0.2.2.tgz"
+ },
+ "hoek": {
+ "version": "0.9.1",
+ "resolved": "https://registry.npmjs.org/hoek/-/hoek-0.9.1.tgz"
+ },
+ "sntp": {
+ "version": "0.2.4",
+ "resolved": "https://registry.npmjs.org/sntp/-/sntp-0.2.4.tgz"
+ }
+ }
+ },
+ "http-signature": {
+ "version": "0.10.1",
+ "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-0.10.1.tgz",
+ "dependencies": {
+ "asn1": {
+ "version": "0.1.11",
+ "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.1.11.tgz"
+ },
+ "assert-plus": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.1.5.tgz"
+ },
+ "ctype": {
+ "version": "0.5.3",
+ "resolved": "https://registry.npmjs.org/ctype/-/ctype-0.5.3.tgz"
+ }
+ }
+ },
+ "json-stringify-safe": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.0.tgz"
+ },
+ "mime-types": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-1.0.2.tgz"
+ },
+ "node-uuid": {
+ "version": "1.4.3",
+ "resolved": "https://registry.npmjs.org/node-uuid/-/node-uuid-1.4.3.tgz"
+ },
+ "oauth-sign": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.5.0.tgz"
+ },
+ "qs": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-2.3.3.tgz"
+ },
+ "stringstream": {
+ "version": "0.0.4",
+ "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.4.tgz"
+ },
+ "tough-cookie": {
+ "version": "0.12.1",
+ "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-0.12.1.tgz",
+ "dependencies": {
+ "punycode": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz"
+ }
+ }
+ },
+ "tunnel-agent": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.4.0.tgz"
+ }
+ }
+ }
+ }
+ },
+ "sauce-tunnel": {
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/sauce-tunnel/-/sauce-tunnel-2.2.2.tgz",
+ "dependencies": {
+ "chalk": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-0.4.0.tgz",
+ "dependencies": {
+ "ansi-styles": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-1.0.0.tgz"
+ },
+ "has-color": {
+ "version": "0.1.7",
+ "resolved": "https://registry.npmjs.org/has-color/-/has-color-0.1.7.tgz"
+ },
+ "strip-ansi": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-0.1.1.tgz"
+ }
+ }
+ },
+ "request": {
+ "version": "2.21.0",
+ "resolved": "https://registry.npmjs.org/request/-/request-2.21.0.tgz",
+ "dependencies": {
+ "aws-sign": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/aws-sign/-/aws-sign-0.3.0.tgz"
+ },
+ "cookie-jar": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/cookie-jar/-/cookie-jar-0.3.0.tgz"
+ },
+ "forever-agent": {
+ "version": "0.5.2",
+ "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.5.2.tgz"
+ },
+ "form-data": {
+ "version": "0.0.8",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-0.0.8.tgz",
+ "dependencies": {
+ "async": {
+ "version": "0.2.10",
+ "resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz"
+ },
+ "combined-stream": {
+ "version": "0.0.7",
+ "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-0.0.7.tgz",
+ "dependencies": {
+ "delayed-stream": {
+ "version": "0.0.5",
+ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-0.0.5.tgz"
+ }
+ }
+ }
+ }
+ },
+ "hawk": {
+ "version": "0.13.1",
+ "resolved": "https://registry.npmjs.org/hawk/-/hawk-0.13.1.tgz",
+ "dependencies": {
+ "boom": {
+ "version": "0.4.2",
+ "resolved": "https://registry.npmjs.org/boom/-/boom-0.4.2.tgz",
+ "dependencies": {
+ "hoek": {
+ "version": "0.9.1",
+ "resolved": "https://registry.npmjs.org/hoek/-/hoek-0.9.1.tgz"
+ }
+ }
+ },
+ "cryptiles": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-0.2.2.tgz"
+ },
+ "hoek": {
+ "version": "0.8.5",
+ "resolved": "https://registry.npmjs.org/hoek/-/hoek-0.8.5.tgz"
+ },
+ "sntp": {
+ "version": "0.2.4",
+ "resolved": "https://registry.npmjs.org/sntp/-/sntp-0.2.4.tgz",
+ "dependencies": {
+ "hoek": {
+ "version": "0.9.1",
+ "resolved": "https://registry.npmjs.org/hoek/-/hoek-0.9.1.tgz"
+ }
+ }
+ }
+ }
+ },
+ "http-signature": {
+ "version": "0.9.11",
+ "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-0.9.11.tgz",
+ "dependencies": {
+ "asn1": {
+ "version": "0.1.11",
+ "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.1.11.tgz"
+ },
+ "assert-plus": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.1.2.tgz"
+ },
+ "ctype": {
+ "version": "0.5.2",
+ "resolved": "https://registry.npmjs.org/ctype/-/ctype-0.5.2.tgz"
+ }
+ }
+ },
+ "json-stringify-safe": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-4.0.0.tgz"
+ },
+ "mime": {
+ "version": "1.2.11",
+ "resolved": "https://registry.npmjs.org/mime/-/mime-1.2.11.tgz"
+ },
+ "node-uuid": {
+ "version": "1.4.3",
+ "resolved": "https://registry.npmjs.org/node-uuid/-/node-uuid-1.4.3.tgz"
+ },
+ "oauth-sign": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.3.0.tgz"
+ },
+ "qs": {
+ "version": "0.6.6",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-0.6.6.tgz"
+ },
+ "tunnel-agent": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.3.0.tgz"
+ }
+ }
+ },
+ "split": {
+ "version": "0.3.3",
+ "resolved": "https://registry.npmjs.org/split/-/split-0.3.3.tgz",
+ "dependencies": {
+ "through": {
+ "version": "2.3.6",
+ "resolved": "https://registry.npmjs.org/through/-/through-2.3.6.tgz"
+ }
+ }
+ }
+ }
+ },
+ "saucelabs": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/saucelabs/-/saucelabs-0.1.1.tgz"
+ }
+ }
+ },
+ "grunt-sed": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/grunt-sed/-/grunt-sed-0.1.1.tgz",
+ "dependencies": {
+ "replace": {
+ "version": "0.2.10",
+ "resolved": "https://registry.npmjs.org/replace/-/replace-0.2.10.tgz",
+ "dependencies": {
+ "colors": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/colors/-/colors-0.5.1.tgz"
+ },
+ "minimatch": {
+ "version": "0.2.14",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.2.14.tgz",
+ "dependencies": {
+ "lru-cache": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.5.0.tgz"
+ },
+ "sigmund": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.0.tgz"
+ }
+ }
+ },
+ "nomnom": {
+ "version": "1.6.2",
+ "resolved": "https://registry.npmjs.org/nomnom/-/nomnom-1.6.2.tgz",
+ "dependencies": {
+ "underscore": {
+ "version": "1.4.4",
+ "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.4.4.tgz"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "load-grunt-tasks": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/load-grunt-tasks/-/load-grunt-tasks-3.1.0.tgz",
+ "dependencies": {
+ "findup-sync": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-0.2.1.tgz",
+ "dependencies": {
+ "glob": {
+ "version": "4.3.5",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-4.3.5.tgz",
+ "dependencies": {
+ "inflight": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.4.tgz",
+ "dependencies": {
+ "wrappy": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.1.tgz"
+ }
+ }
+ },
+ "inherits": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz"
+ },
+ "minimatch": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-2.0.4.tgz",
+ "dependencies": {
+ "brace-expansion": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.0.tgz",
+ "dependencies": {
+ "balanced-match": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.2.0.tgz"
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz"
+ }
+ }
+ }
+ }
+ },
+ "once": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.3.1.tgz",
+ "dependencies": {
+ "wrappy": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.1.tgz"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "multimatch": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-2.0.0.tgz",
+ "dependencies": {
+ "array-differ": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-1.0.0.tgz"
+ },
+ "array-union": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.1.tgz",
+ "dependencies": {
+ "array-uniq": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.2.tgz"
+ }
+ }
+ },
+ "minimatch": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-2.0.4.tgz",
+ "dependencies": {
+ "brace-expansion": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.0.tgz",
+ "dependencies": {
+ "balanced-match": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.2.0.tgz"
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "markdown-it": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-4.0.1.tgz",
+ "dependencies": {
+ "argparse": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.1.tgz",
+ "dependencies": {
+ "lodash": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.2.0.tgz"
+ },
+ "sprintf-js": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.2.tgz"
+ }
+ }
+ },
+ "entities": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.1.tgz"
+ },
+ "linkify-it": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-0.1.5.tgz"
+ },
+ "mdurl": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.0.tgz"
+ },
+ "uc.micro": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.0.tgz"
+ }
+ }
+ },
+ "npm-shrinkwrap": {
+ "version": "200.1.0",
+ "resolved": "https://registry.npmjs.org/npm-shrinkwrap/-/npm-shrinkwrap-200.1.0.tgz",
+ "dependencies": {
+ "array-find": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/array-find/-/array-find-0.1.1.tgz"
+ },
+ "error": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/error/-/error-4.4.0.tgz",
+ "dependencies": {
+ "camelize": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/camelize/-/camelize-1.0.0.tgz"
+ },
+ "xtend": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.0.tgz"
+ }
+ }
+ },
+ "json-diff": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/json-diff/-/json-diff-0.3.1.tgz",
+ "dependencies": {
+ "cli-color": {
+ "version": "0.1.7",
+ "resolved": "https://registry.npmjs.org/cli-color/-/cli-color-0.1.7.tgz",
+ "dependencies": {
+ "es5-ext": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.8.2.tgz"
+ }
+ }
+ },
+ "difflib": {
+ "version": "0.2.4",
+ "resolved": "https://registry.npmjs.org/difflib/-/difflib-0.2.4.tgz",
+ "dependencies": {
+ "heap": {
+ "version": "0.2.6",
+ "resolved": "https://registry.npmjs.org/heap/-/heap-0.2.6.tgz"
+ }
+ }
+ },
+ "dreamopt": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/dreamopt/-/dreamopt-0.6.0.tgz",
+ "dependencies": {
+ "wordwrap": {
+ "version": "0.0.2",
+ "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz"
+ }
+ }
+ }
+ }
+ },
+ "minimist": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.1.1.tgz"
+ },
+ "msee": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/msee/-/msee-0.1.1.tgz",
+ "dependencies": {
+ "cardinal": {
+ "version": "0.4.4",
+ "resolved": "https://registry.npmjs.org/cardinal/-/cardinal-0.4.4.tgz",
+ "dependencies": {
+ "ansicolors": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/ansicolors/-/ansicolors-0.2.1.tgz"
+ },
+ "redeyed": {
+ "version": "0.4.4",
+ "resolved": "https://registry.npmjs.org/redeyed/-/redeyed-0.4.4.tgz",
+ "dependencies": {
+ "esprima": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-1.0.4.tgz"
+ }
+ }
+ }
+ }
+ },
+ "chalk": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-0.4.0.tgz",
+ "dependencies": {
+ "ansi-styles": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-1.0.0.tgz"
+ },
+ "has-color": {
+ "version": "0.1.7",
+ "resolved": "https://registry.npmjs.org/has-color/-/has-color-0.1.7.tgz"
+ },
+ "strip-ansi": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-0.1.1.tgz"
+ }
+ }
+ },
+ "marked": {
+ "version": "0.3.3",
+ "resolved": "https://registry.npmjs.org/marked/-/marked-0.3.3.tgz"
+ },
+ "nopt": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/nopt/-/nopt-2.1.2.tgz",
+ "dependencies": {
+ "abbrev": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.5.tgz"
+ }
+ }
+ },
+ "xtend": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.1.2.tgz",
+ "dependencies": {
+ "object-keys": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-0.4.0.tgz"
+ }
+ }
+ }
+ }
+ },
+ "npm": {
+ "version": "2.7.1",
+ "resolved": "https://registry.npmjs.org/npm/-/npm-2.7.1.tgz",
+ "dependencies": {
+ "abbrev": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.5.tgz"
+ },
+ "ansi": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/ansi/-/ansi-0.3.0.tgz"
+ },
+ "ansicolors": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/ansicolors/-/ansicolors-0.3.2.tgz"
+ },
+ "ansistyles": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/ansistyles/-/ansistyles-0.1.3.tgz"
+ },
+ "archy": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz"
+ },
+ "async-some": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/async-some/-/async-some-1.0.1.tgz"
+ },
+ "block-stream": {
+ "version": "0.0.7",
+ "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.7.tgz"
+ },
+ "char-spinner": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/char-spinner/-/char-spinner-1.0.1.tgz"
+ },
+ "child-process-close": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/child-process-close/-/child-process-close-0.1.1.tgz"
+ },
+ "chmodr": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/chmodr/-/chmodr-0.1.0.tgz"
+ },
+ "chownr": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/chownr/-/chownr-0.0.1.tgz"
+ },
+ "cmd-shim": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/cmd-shim/-/cmd-shim-2.0.1.tgz"
+ },
+ "columnify": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/columnify/-/columnify-1.4.1.tgz",
+ "dependencies": {
+ "strip-ansi": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-2.0.1.tgz",
+ "dependencies": {
+ "ansi-regex": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-1.1.0.tgz"
+ }
+ }
+ },
+ "wcwidth": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.0.tgz",
+ "dependencies": {
+ "defaults": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.0.tgz",
+ "dependencies": {
+ "clone": {
+ "version": "0.1.19",
+ "resolved": "https://registry.npmjs.org/clone/-/clone-0.1.19.tgz"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "config-chain": {
+ "version": "1.1.8",
+ "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.8.tgz",
+ "dependencies": {
+ "proto-list": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.3.tgz"
+ }
+ }
+ },
+ "dezalgo": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.1.tgz",
+ "dependencies": {
+ "asap": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/asap/-/asap-1.0.0.tgz"
+ }
+ }
+ },
+ "editor": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/editor/-/editor-0.1.0.tgz"
+ },
+ "fs-vacuum": {
+ "version": "1.2.5",
+ "resolved": "https://registry.npmjs.org/fs-vacuum/-/fs-vacuum-1.2.5.tgz"
+ },
+ "fs-write-stream-atomic": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.2.tgz"
+ },
+ "fstream": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.4.tgz"
+ },
+ "fstream-npm": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/fstream-npm/-/fstream-npm-1.0.1.tgz",
+ "dependencies": {
+ "fstream-ignore": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/fstream-ignore/-/fstream-ignore-1.0.2.tgz"
+ }
+ }
+ },
+ "github-url-from-git": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/github-url-from-git/-/github-url-from-git-1.4.0.tgz"
+ },
+ "github-url-from-username-repo": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/github-url-from-username-repo/-/github-url-from-username-repo-1.0.2.tgz"
+ },
+ "glob": {
+ "version": "4.4.2",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-4.4.2.tgz"
+ },
+ "graceful-fs": {
+ "version": "3.0.5",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-3.0.5.tgz"
+ },
+ "inflight": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.4.tgz"
+ },
+ "inherits": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz"
+ },
+ "ini": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.3.tgz"
+ },
+ "init-package-json": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/init-package-json/-/init-package-json-1.3.0.tgz",
+ "dependencies": {
+ "promzard": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/promzard/-/promzard-0.2.2.tgz"
+ }
+ }
+ },
+ "lockfile": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/lockfile/-/lockfile-1.0.0.tgz"
+ },
+ "lru-cache": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.5.0.tgz"
+ },
+ "minimatch": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-2.0.1.tgz",
+ "dependencies": {
+ "brace-expansion": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.0.1.tgz",
+ "dependencies": {
+ "balanced-match": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.2.0.tgz"
+ },
+ "concat-map": {
+ "version": "0.0.0",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.0.tgz"
+ }
+ }
+ }
+ }
+ },
+ "mkdirp": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.0.tgz",
+ "dependencies": {
+ "minimist": {
+ "version": "0.0.8",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz"
+ }
+ }
+ },
+ "node-gyp": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-1.0.2.tgz",
+ "dependencies": {
+ "minimatch": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-1.0.0.tgz",
+ "dependencies": {
+ "sigmund": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.0.tgz"
+ }
+ }
+ }
+ }
+ },
+ "nopt": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.1.tgz"
+ },
+ "normalize-git-url": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/normalize-git-url/-/normalize-git-url-1.0.0.tgz"
+ },
+ "normalize-package-data": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-1.0.3.tgz"
+ },
+ "npm-cache-filename": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/npm-cache-filename/-/npm-cache-filename-1.0.1.tgz"
+ },
+ "npm-install-checks": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-1.0.5.tgz"
+ },
+ "npm-package-arg": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-2.1.3.tgz"
+ },
+ "npm-registry-client": {
+ "version": "6.1.1",
+ "resolved": "https://registry.npmjs.org/npm-registry-client/-/npm-registry-client-6.1.1.tgz",
+ "dependencies": {
+ "concat-stream": {
+ "version": "1.4.7",
+ "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.4.7.tgz",
+ "dependencies": {
+ "readable-stream": {
+ "version": "1.1.13",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.13.tgz",
+ "dependencies": {
+ "core-util-is": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.1.tgz"
+ },
+ "isarray": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz"
+ },
+ "string_decoder": {
+ "version": "0.10.31",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz"
+ }
+ }
+ },
+ "typedarray": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz"
+ }
+ }
+ },
+ "npm-package-arg": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-3.1.0.tgz",
+ "dependencies": {
+ "hosted-git-info": {
+ "version": "1.5.3",
+ "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-1.5.3.tgz"
+ }
+ }
+ }
+ }
+ },
+ "npm-user-validate": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/npm-user-validate/-/npm-user-validate-0.1.1.tgz"
+ },
+ "npmlog": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-0.1.1.tgz"
+ },
+ "once": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.3.1.tgz"
+ },
+ "opener": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/opener/-/opener-1.4.0.tgz"
+ },
+ "osenv": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.0.tgz"
+ },
+ "path-is-inside": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.1.tgz"
+ },
+ "read": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/read/-/read-1.0.5.tgz",
+ "dependencies": {
+ "mute-stream": {
+ "version": "0.0.4",
+ "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.4.tgz"
+ }
+ }
+ },
+ "read-installed": {
+ "version": "3.1.5",
+ "resolved": "https://registry.npmjs.org/read-installed/-/read-installed-3.1.5.tgz",
+ "dependencies": {
+ "debuglog": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/debuglog/-/debuglog-1.0.1.tgz"
+ },
+ "readdir-scoped-modules": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/readdir-scoped-modules/-/readdir-scoped-modules-1.0.1.tgz"
+ },
+ "util-extend": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/util-extend/-/util-extend-1.0.1.tgz"
+ }
+ }
+ },
+ "read-package-json": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-1.3.2.tgz",
+ "dependencies": {
+ "json-parse-helpfulerror": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/json-parse-helpfulerror/-/json-parse-helpfulerror-1.0.3.tgz",
+ "dependencies": {
+ "jju": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/jju/-/jju-1.2.0.tgz"
+ }
+ }
+ }
+ }
+ },
+ "readable-stream": {
+ "version": "1.0.33",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.33.tgz",
+ "dependencies": {
+ "core-util-is": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.1.tgz"
+ },
+ "isarray": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz"
+ },
+ "string_decoder": {
+ "version": "0.10.31",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz"
+ }
+ }
+ },
+ "realize-package-specifier": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/realize-package-specifier/-/realize-package-specifier-1.3.0.tgz"
+ },
+ "request": {
+ "version": "2.53.0",
+ "resolved": "https://registry.npmjs.org/request/-/request-2.53.0.tgz",
+ "dependencies": {
+ "aws-sign2": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.5.0.tgz"
+ },
+ "bl": {
+ "version": "0.9.4",
+ "resolved": "https://registry.npmjs.org/bl/-/bl-0.9.4.tgz"
+ },
+ "caseless": {
+ "version": "0.9.0",
+ "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.9.0.tgz"
+ },
+ "combined-stream": {
+ "version": "0.0.7",
+ "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-0.0.7.tgz",
+ "dependencies": {
+ "delayed-stream": {
+ "version": "0.0.5",
+ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-0.0.5.tgz"
+ }
+ }
+ },
+ "forever-agent": {
+ "version": "0.5.2",
+ "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.5.2.tgz"
+ },
+ "form-data": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-0.2.0.tgz",
+ "dependencies": {
+ "async": {
+ "version": "0.9.0",
+ "resolved": "https://registry.npmjs.org/async/-/async-0.9.0.tgz"
+ }
+ }
+ },
+ "hawk": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/hawk/-/hawk-2.3.1.tgz",
+ "dependencies": {
+ "boom": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/boom/-/boom-2.6.1.tgz"
+ },
+ "cryptiles": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.4.tgz"
+ },
+ "hoek": {
+ "version": "2.11.0",
+ "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.11.0.tgz"
+ },
+ "sntp": {
+ "version": "1.0.9",
+ "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz"
+ }
+ }
+ },
+ "http-signature": {
+ "version": "0.10.1",
+ "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-0.10.1.tgz",
+ "dependencies": {
+ "asn1": {
+ "version": "0.1.11",
+ "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.1.11.tgz"
+ },
+ "assert-plus": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.1.5.tgz"
+ },
+ "ctype": {
+ "version": "0.5.3",
+ "resolved": "https://registry.npmjs.org/ctype/-/ctype-0.5.3.tgz"
+ }
+ }
+ },
+ "isstream": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.1.tgz"
+ },
+ "json-stringify-safe": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.0.tgz"
+ },
+ "mime-types": {
+ "version": "2.0.8",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.0.8.tgz",
+ "dependencies": {
+ "mime-db": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.6.1.tgz"
+ }
+ }
+ },
+ "node-uuid": {
+ "version": "1.4.2",
+ "resolved": "https://registry.npmjs.org/node-uuid/-/node-uuid-1.4.2.tgz"
+ },
+ "oauth-sign": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.6.0.tgz"
+ },
+ "qs": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-2.3.3.tgz"
+ },
+ "stringstream": {
+ "version": "0.0.4",
+ "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.4.tgz"
+ },
+ "tough-cookie": {
+ "version": "0.12.1",
+ "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-0.12.1.tgz",
+ "dependencies": {
+ "punycode": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz"
+ }
+ }
+ },
+ "tunnel-agent": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.4.0.tgz"
+ }
+ }
+ },
+ "retry": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/retry/-/retry-0.6.1.tgz"
+ },
+ "rimraf": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.3.1.tgz"
+ },
+ "semver": {
+ "version": "4.3.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-4.3.1.tgz"
+ },
+ "sha": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/sha/-/sha-1.3.0.tgz",
+ "dependencies": {
+ "readable-stream": {
+ "version": "1.1.13",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.13.tgz",
+ "dependencies": {
+ "core-util-is": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.1.tgz"
+ },
+ "isarray": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz"
+ },
+ "string_decoder": {
+ "version": "0.10.31",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz"
+ }
+ }
+ }
+ }
+ },
+ "slide": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/slide/-/slide-1.1.6.tgz"
+ },
+ "sorted-object": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/sorted-object/-/sorted-object-1.0.0.tgz"
+ },
+ "tar": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/tar/-/tar-1.0.3.tgz"
+ },
+ "text-table": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz"
+ },
+ "uid-number": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/uid-number/-/uid-number-0.0.6.tgz"
+ },
+ "umask": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/umask/-/umask-1.1.0.tgz"
+ },
+ "which": {
+ "version": "1.0.9",
+ "resolved": "https://registry.npmjs.org/which/-/which-1.0.9.tgz"
+ },
+ "wrappy": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.1.tgz"
+ },
+ "write-file-atomic": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-1.1.0.tgz"
+ }
+ }
+ },
+ "read-json": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/read-json/-/read-json-0.1.0.tgz"
+ },
+ "rimraf": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.3.2.tgz",
+ "dependencies": {
+ "glob": {
+ "version": "4.5.3",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-4.5.3.tgz",
+ "dependencies": {
+ "inflight": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.4.tgz",
+ "dependencies": {
+ "wrappy": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.1.tgz"
+ }
+ }
+ },
+ "inherits": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz"
+ },
+ "minimatch": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-2.0.4.tgz",
+ "dependencies": {
+ "brace-expansion": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.0.tgz",
+ "dependencies": {
+ "balanced-match": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.2.0.tgz"
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz"
+ }
+ }
+ }
+ }
+ },
+ "once": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.3.1.tgz",
+ "dependencies": {
+ "wrappy": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.1.tgz"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "run-parallel": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.0.0.tgz"
+ },
+ "run-series": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/run-series/-/run-series-1.0.2.tgz"
+ },
+ "safe-json-parse": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/safe-json-parse/-/safe-json-parse-2.0.0.tgz"
+ },
+ "semver": {
+ "version": "4.3.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-4.3.1.tgz"
+ },
+ "sorted-object": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/sorted-object/-/sorted-object-1.0.0.tgz"
+ },
+ "string-template": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/string-template/-/string-template-0.2.0.tgz",
+ "dependencies": {
+ "js-string-escape": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/js-string-escape/-/js-string-escape-1.0.0.tgz"
+ }
+ }
+ }
+ }
+ },
+ "time-grunt": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/time-grunt/-/time-grunt-1.1.0.tgz",
+ "dependencies": {
+ "chalk": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.0.0.tgz",
+ "dependencies": {
+ "ansi-styles": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.0.1.tgz"
+ },
+ "escape-string-regexp": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.3.tgz"
+ },
+ "has-ansi": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-1.0.3.tgz",
+ "dependencies": {
+ "ansi-regex": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-1.1.1.tgz"
+ },
+ "get-stdin": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz"
+ }
+ }
+ },
+ "strip-ansi": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-2.0.1.tgz",
+ "dependencies": {
+ "ansi-regex": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-1.1.1.tgz"
+ }
+ }
+ },
+ "supports-color": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-1.3.0.tgz"
+ }
+ }
+ },
+ "date-time": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/date-time/-/date-time-1.0.0.tgz"
+ },
+ "figures": {
+ "version": "1.3.5",
+ "resolved": "https://registry.npmjs.org/figures/-/figures-1.3.5.tgz"
+ },
+ "hooker": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/hooker/-/hooker-0.2.3.tgz"
+ },
+ "pretty-ms": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-1.1.0.tgz",
+ "dependencies": {
+ "get-stdin": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz"
+ },
+ "parse-ms": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/parse-ms/-/parse-ms-1.0.0.tgz"
+ }
+ }
+ },
+ "text-table": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz"
+ }
+ }
+ }
+ }
+} \ No newline at end of file
diff --git a/POLICY-SDK-APP/src/main/webapp/app/policyApp/CSS/bootstrap/test-infra/requirements.txt b/POLICY-SDK-APP/src/main/webapp/app/policyApp/CSS/bootstrap/test-infra/requirements.txt
new file mode 100644
index 000000000..fe44343da
--- /dev/null
+++ b/POLICY-SDK-APP/src/main/webapp/app/policyApp/CSS/bootstrap/test-infra/requirements.txt
@@ -0,0 +1 @@
+boto==2.25.0
diff --git a/POLICY-SDK-APP/src/main/webapp/app/policyApp/CSS/bootstrap/test-infra/s3_cache.py b/POLICY-SDK-APP/src/main/webapp/app/policyApp/CSS/bootstrap/test-infra/s3_cache.py
new file mode 100644
index 000000000..eaa37992d
--- /dev/null
+++ b/POLICY-SDK-APP/src/main/webapp/app/policyApp/CSS/bootstrap/test-infra/s3_cache.py
@@ -0,0 +1,184 @@
+#!/usr/bin/env python2.7
+# pylint: disable=C0301
+from __future__ import absolute_import, unicode_literals, print_function, division
+
+from sys import argv
+from os import environ, stat, chdir, remove as _delete_file
+from os.path import dirname, basename, abspath, realpath, expandvars
+from hashlib import sha256
+from subprocess import check_call as run
+from json import load, dump as save
+from contextlib import contextmanager
+from datetime import datetime
+
+from boto.s3.connection import S3Connection
+from boto.s3.key import Key
+from boto.exception import S3ResponseError
+
+
+CONFIG_FILE = './S3Cachefile.json'
+UPLOAD_TODO_FILE = './S3CacheTodo.json'
+BYTES_PER_MB = 1024 * 1024
+
+
+@contextmanager
+def timer():
+ start = datetime.utcnow()
+ yield
+ end = datetime.utcnow()
+ elapsed = end - start
+ print("\tDone. Took", int(elapsed.total_seconds()), "second(s).")
+
+
+@contextmanager
+def todo_file(writeback=True):
+ try:
+ with open(UPLOAD_TODO_FILE, 'rt') as json_file:
+ todo = load(json_file)
+ except (IOError, OSError, ValueError):
+ todo = {}
+
+ yield todo
+
+ if writeback:
+ try:
+ with open(UPLOAD_TODO_FILE, 'wt') as json_file:
+ save(todo, json_file)
+ except (OSError, IOError) as save_err:
+ print("Error saving {}:".format(UPLOAD_TODO_FILE), save_err)
+
+
+def _sha256_of_file(filename):
+ hasher = sha256()
+ with open(filename, 'rb') as input_file:
+ hasher.update(input_file.read())
+ file_hash = hasher.hexdigest()
+ print('sha256({}) = {}'.format(filename, file_hash))
+ return file_hash
+
+
+def _delete_file_quietly(filename):
+ try:
+ _delete_file(filename)
+ except (OSError, IOError):
+ pass
+
+
+def mark_needs_uploading(cache_name):
+ with todo_file() as todo:
+ todo[cache_name] = True
+
+
+def mark_uploaded(cache_name):
+ with todo_file() as todo:
+ todo.pop(cache_name, None)
+
+
+def need_to_upload(cache_name):
+ with todo_file(writeback=False) as todo:
+ return todo.get(cache_name, False)
+
+
+def _tarball_size(directory):
+ kib = stat(_tarball_filename_for(directory)).st_size // BYTES_PER_MB
+ return "{} MiB".format(kib)
+
+
+def _tarball_filename_for(directory):
+ return abspath('./{}.tar.gz'.format(basename(directory)))
+
+
+def _create_tarball(directory):
+ print("Creating tarball of {}...".format(directory))
+ with timer():
+ run(['tar', '-czf', _tarball_filename_for(directory), '-C', dirname(directory), basename(directory)])
+
+
+def _extract_tarball(directory):
+ print("Extracting tarball of {}...".format(directory))
+ with timer():
+ run(['tar', '-xzf', _tarball_filename_for(directory), '-C', dirname(directory)])
+
+
+def download(directory):
+ mark_uploaded(cache_name) # reset
+ try:
+ print("Downloading {} tarball from S3...".format(cache_name))
+ with timer():
+ key.get_contents_to_filename(_tarball_filename_for(directory))
+ except S3ResponseError as err:
+ mark_needs_uploading(cache_name)
+ raise SystemExit("Cached {} download failed!".format(cache_name))
+ print("Downloaded {}.".format(_tarball_size(directory)))
+ _extract_tarball(directory)
+ print("{} successfully installed from cache.".format(cache_name))
+
+
+def upload(directory):
+ _create_tarball(directory)
+ print("Uploading {} tarball to S3... ({})".format(cache_name, _tarball_size(directory)))
+ with timer():
+ key.set_contents_from_filename(_tarball_filename_for(directory))
+ print("{} cache successfully updated.".format(cache_name))
+ mark_uploaded(cache_name)
+
+
+if __name__ == '__main__':
+ # Uses environment variables:
+ # AWS_ACCESS_KEY_ID -- AWS Access Key ID
+ # AWS_SECRET_ACCESS_KEY -- AWS Secret Access Key
+ argv.pop(0)
+ if len(argv) != 2:
+ raise SystemExit("USAGE: s3_cache.py <download | upload> <cache name>")
+ mode, cache_name = argv
+ script_dir = dirname(realpath(__file__))
+ chdir(script_dir)
+ try:
+ with open(CONFIG_FILE, 'rt') as config_file:
+ config = load(config_file)
+ except (IOError, OSError, ValueError) as config_err:
+ print(config_err)
+ raise SystemExit("Error when trying to load config from JSON file!")
+
+ try:
+ cache_info = config[cache_name]
+ key_file = expandvars(cache_info["key"])
+ fallback_cmd = cache_info["generate"]
+ directory = expandvars(cache_info["cache"])
+ except (TypeError, KeyError) as load_err:
+ print(load_err)
+ raise SystemExit("Config for cache named {!r} is missing or malformed!".format(cache_name))
+
+ try:
+ try:
+ BUCKET_NAME = environ['TWBS_S3_BUCKET']
+ except KeyError:
+ raise SystemExit("TWBS_S3_BUCKET environment variable not set!")
+
+ conn = S3Connection()
+ bucket = conn.lookup(BUCKET_NAME)
+ if bucket is None:
+ raise SystemExit("Could not access bucket!")
+
+ key_file_hash = _sha256_of_file(key_file)
+
+ key = Key(bucket, key_file_hash)
+ key.storage_class = 'REDUCED_REDUNDANCY'
+
+ if mode == 'download':
+ download(directory)
+ elif mode == 'upload':
+ if need_to_upload(cache_name):
+ upload(directory)
+ else:
+ print("No need to upload anything.")
+ else:
+ raise SystemExit("Unrecognized mode {!r}".format(mode))
+ except BaseException as exc:
+ if mode != 'download':
+ raise
+ print("Error!:", exc)
+ print("Unable to download from cache.")
+ print("Running fallback command to generate cache directory {!r}: {}".format(directory, fallback_cmd))
+ with timer():
+ run(fallback_cmd, shell=True)
diff --git a/POLICY-SDK-APP/src/main/webapp/app/policyApp/CSS/bootstrap/test-infra/uncached-npm-install.sh b/POLICY-SDK-APP/src/main/webapp/app/policyApp/CSS/bootstrap/test-infra/uncached-npm-install.sh
new file mode 100644
index 000000000..a2d41445d
--- /dev/null
+++ b/POLICY-SDK-APP/src/main/webapp/app/policyApp/CSS/bootstrap/test-infra/uncached-npm-install.sh
@@ -0,0 +1,15 @@
+#!/bin/bash
+set -e
+cd .. # /bootstrap/
+cp test-infra/npm-shrinkwrap.json npm-shrinkwrap.json
+# npm is flaky, so try multiple times
+MAXTRIES=3
+TRIES=1
+while ! npm install; do
+ if [ $TRIES -ge $MAXTRIES ]; then
+ exit 1
+ fi
+ TRIES=$(($TRIES + 1))
+ echo "Retrying npm install (Try $TRIES of $MAXTRIES)..."
+done
+rm npm-shrinkwrap.json