summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--deps/npm/.npmignore1
-rw-r--r--deps/npm/.travis.yml5
-rw-r--r--deps/npm/AUTHORS134
-rw-r--r--deps/npm/CONTRIBUTING.md9
-rw-r--r--deps/npm/LICENSE264
-rw-r--r--deps/npm/Makefile166
-rw-r--r--deps/npm/README.md74
-rw-r--r--deps/npm/doc/api/commands.md22
-rw-r--r--deps/npm/doc/api/deprecate.md34
-rw-r--r--deps/npm/doc/api/init.md29
-rw-r--r--deps/npm/doc/api/npm-bin.md (renamed from deps/npm/doc/api/bin.md)0
-rw-r--r--deps/npm/doc/api/npm-bugs.md (renamed from deps/npm/doc/api/bugs.md)0
-rw-r--r--deps/npm/doc/api/npm-commands.md22
-rw-r--r--deps/npm/doc/api/npm-config.md (renamed from deps/npm/doc/api/config.md)0
-rw-r--r--deps/npm/doc/api/npm-deprecate.md34
-rw-r--r--deps/npm/doc/api/npm-docs.md (renamed from deps/npm/doc/api/docs.md)0
-rw-r--r--deps/npm/doc/api/npm-edit.md (renamed from deps/npm/doc/api/edit.md)0
-rw-r--r--deps/npm/doc/api/npm-explore.md (renamed from deps/npm/doc/api/explore.md)0
-rw-r--r--deps/npm/doc/api/npm-help-search.md (renamed from deps/npm/doc/api/help-search.md)0
-rw-r--r--deps/npm/doc/api/npm-init.md29
-rw-r--r--deps/npm/doc/api/npm-install.md (renamed from deps/npm/doc/api/install.md)0
-rw-r--r--deps/npm/doc/api/npm-link.md (renamed from deps/npm/doc/api/link.md)0
-rw-r--r--deps/npm/doc/api/npm-load.md (renamed from deps/npm/doc/api/load.md)0
-rw-r--r--deps/npm/doc/api/npm-ls.md (renamed from deps/npm/doc/api/ls.md)0
-rw-r--r--deps/npm/doc/api/npm-outdated.md (renamed from deps/npm/doc/api/outdated.md)0
-rw-r--r--deps/npm/doc/api/npm-owner.md31
-rw-r--r--deps/npm/doc/api/npm-pack.md (renamed from deps/npm/doc/api/pack.md)0
-rw-r--r--deps/npm/doc/api/npm-prefix.md (renamed from deps/npm/doc/api/prefix.md)0
-rw-r--r--deps/npm/doc/api/npm-prune.md (renamed from deps/npm/doc/api/prune.md)0
-rw-r--r--deps/npm/doc/api/npm-publish.md30
-rw-r--r--deps/npm/doc/api/npm-rebuild.md (renamed from deps/npm/doc/api/rebuild.md)0
-rw-r--r--deps/npm/doc/api/npm-repo.md19
-rw-r--r--deps/npm/doc/api/npm-restart.md (renamed from deps/npm/doc/api/restart.md)0
-rw-r--r--deps/npm/doc/api/npm-root.md (renamed from deps/npm/doc/api/root.md)0
-rw-r--r--deps/npm/doc/api/npm-run-script.md27
-rw-r--r--deps/npm/doc/api/npm-search.md (renamed from deps/npm/doc/api/search.md)0
-rw-r--r--deps/npm/doc/api/npm-shrinkwrap.md (renamed from deps/npm/doc/api/shrinkwrap.md)0
-rw-r--r--deps/npm/doc/api/npm-start.md (renamed from deps/npm/doc/api/start.md)0
-rw-r--r--deps/npm/doc/api/npm-stop.md (renamed from deps/npm/doc/api/stop.md)0
-rw-r--r--deps/npm/doc/api/npm-submodule.md (renamed from deps/npm/doc/api/submodule.md)0
-rw-r--r--deps/npm/doc/api/npm-tag.md (renamed from deps/npm/doc/api/tag.md)0
-rw-r--r--deps/npm/doc/api/npm-test.md (renamed from deps/npm/doc/api/test.md)0
-rw-r--r--deps/npm/doc/api/npm-uninstall.md (renamed from deps/npm/doc/api/uninstall.md)0
-rw-r--r--deps/npm/doc/api/npm-unpublish.md (renamed from deps/npm/doc/api/unpublish.md)0
-rw-r--r--deps/npm/doc/api/npm-update.md (renamed from deps/npm/doc/api/update.md)0
-rw-r--r--deps/npm/doc/api/npm-version.md (renamed from deps/npm/doc/api/version.md)0
-rw-r--r--deps/npm/doc/api/npm-view.md (renamed from deps/npm/doc/api/view.md)0
-rw-r--r--deps/npm/doc/api/npm-whoami.md (renamed from deps/npm/doc/api/whoami.md)0
-rw-r--r--deps/npm/doc/api/npm.md8
-rw-r--r--deps/npm/doc/api/owner.md31
-rw-r--r--deps/npm/doc/api/publish.md30
-rw-r--r--deps/npm/doc/api/run-script.md27
-rw-r--r--deps/npm/doc/cli/adduser.md36
-rw-r--r--deps/npm/doc/cli/bin.md17
-rw-r--r--deps/npm/doc/cli/bugs.md38
-rw-r--r--deps/npm/doc/cli/build.md22
-rw-r--r--deps/npm/doc/cli/cache.md70
-rw-r--r--deps/npm/doc/cli/changelog.md80
-rw-r--r--deps/npm/doc/cli/coding-style.md181
-rw-r--r--deps/npm/doc/cli/completion.md29
-rw-r--r--deps/npm/doc/cli/config.md882
-rw-r--r--deps/npm/doc/cli/dedupe.md53
-rw-r--r--deps/npm/doc/cli/deprecate.md26
-rw-r--r--deps/npm/doc/cli/developers.md207
-rw-r--r--deps/npm/doc/cli/disputes.md98
-rw-r--r--deps/npm/doc/cli/docs.md38
-rw-r--r--deps/npm/doc/cli/edit.md35
-rw-r--r--deps/npm/doc/cli/explore.md40
-rw-r--r--deps/npm/doc/cli/faq.md313
-rw-r--r--deps/npm/doc/cli/folders.md209
-rw-r--r--deps/npm/doc/cli/global.md209
-rw-r--r--deps/npm/doc/cli/help-search.md35
-rw-r--r--deps/npm/doc/cli/help.md38
-rw-r--r--deps/npm/doc/cli/index.md393
-rw-r--r--deps/npm/doc/cli/init.md25
-rw-r--r--deps/npm/doc/cli/install.md242
-rw-r--r--deps/npm/doc/cli/json.md587
-rw-r--r--deps/npm/doc/cli/link.md60
-rw-r--r--deps/npm/doc/cli/ls.md68
-rw-r--r--deps/npm/doc/cli/npm-adduser.md38
-rw-r--r--deps/npm/doc/cli/npm-bin.md19
-rw-r--r--deps/npm/doc/cli/npm-bugs.md42
-rw-r--r--deps/npm/doc/cli/npm-build.md22
-rw-r--r--deps/npm/doc/cli/npm-bundle.md (renamed from deps/npm/doc/cli/bundle.md)0
-rw-r--r--deps/npm/doc/cli/npm-cache.md72
-rw-r--r--deps/npm/doc/cli/npm-completion.md29
-rw-r--r--deps/npm/doc/cli/npm-config.md71
-rw-r--r--deps/npm/doc/cli/npm-dedupe.md58
-rw-r--r--deps/npm/doc/cli/npm-deprecate.md26
-rw-r--r--deps/npm/doc/cli/npm-docs.md44
-rw-r--r--deps/npm/doc/cli/npm-edit.md37
-rw-r--r--deps/npm/doc/cli/npm-explore.md40
-rw-r--r--deps/npm/doc/cli/npm-help-search.md35
-rw-r--r--deps/npm/doc/cli/npm-help.md40
-rw-r--r--deps/npm/doc/cli/npm-init.md25
-rw-r--r--deps/npm/doc/cli/npm-install.md259
-rw-r--r--deps/npm/doc/cli/npm-link.md63
-rw-r--r--deps/npm/doc/cli/npm-ls.md80
-rw-r--r--deps/npm/doc/cli/npm-outdated.md58
-rw-r--r--deps/npm/doc/cli/npm-owner.md33
-rw-r--r--deps/npm/doc/cli/npm-pack.md27
-rw-r--r--deps/npm/doc/cli/npm-prefix.md19
-rw-r--r--deps/npm/doc/cli/npm-prune.md25
-rw-r--r--deps/npm/doc/cli/npm-publish.md39
-rw-r--r--deps/npm/doc/cli/npm-rebuild.md21
-rw-r--r--deps/npm/doc/cli/npm-repo.md28
-rw-r--r--deps/npm/doc/cli/npm-restart.md22
-rw-r--r--deps/npm/doc/cli/npm-rm.md23
-rw-r--r--deps/npm/doc/cli/npm-root.md19
-rw-r--r--deps/npm/doc/cli/npm-run-script.md24
-rw-r--r--deps/npm/doc/cli/npm-search.md36
-rw-r--r--deps/npm/doc/cli/npm-shrinkwrap.md185
-rw-r--r--deps/npm/doc/cli/npm-star.md (renamed from deps/npm/doc/cli/star.md)0
-rw-r--r--deps/npm/doc/cli/npm-stars.md (renamed from deps/npm/doc/cli/stars.md)0
-rw-r--r--deps/npm/doc/cli/npm-start.md18
-rw-r--r--deps/npm/doc/cli/npm-stop.md18
-rw-r--r--deps/npm/doc/cli/npm-submodule.md28
-rw-r--r--deps/npm/doc/cli/npm-tag.md34
-rw-r--r--deps/npm/doc/cli/npm-test.md22
-rw-r--r--deps/npm/doc/cli/npm-uninstall.md43
-rw-r--r--deps/npm/doc/cli/npm-unpublish.md36
-rw-r--r--deps/npm/doc/cli/npm-update.md24
-rw-r--r--deps/npm/doc/cli/npm-version.md45
-rw-r--r--deps/npm/doc/cli/npm-view.md90
-rw-r--r--deps/npm/doc/cli/npm-whoami.md17
-rw-r--r--deps/npm/doc/cli/npm.md24
-rw-r--r--deps/npm/doc/cli/outdated.md17
-rw-r--r--deps/npm/doc/cli/owner.md33
-rw-r--r--deps/npm/doc/cli/pack.md25
-rw-r--r--deps/npm/doc/cli/prefix.md17
-rw-r--r--deps/npm/doc/cli/prune.md21
-rw-r--r--deps/npm/doc/cli/publish.md30
-rw-r--r--deps/npm/doc/cli/rebuild.md20
-rw-r--r--deps/npm/doc/cli/registry.md91
-rw-r--r--deps/npm/doc/cli/restart.md22
-rw-r--r--deps/npm/doc/cli/rm.md19
-rw-r--r--deps/npm/doc/cli/root.md17
-rw-r--r--deps/npm/doc/cli/run-script.md21
-rw-r--r--deps/npm/doc/cli/scripts.md241
-rw-r--r--deps/npm/doc/cli/search.md20
-rw-r--r--deps/npm/doc/cli/semver.md130
-rw-r--r--deps/npm/doc/cli/shrinkwrap.md185
-rw-r--r--deps/npm/doc/cli/start.md18
-rw-r--r--deps/npm/doc/cli/stop.md18
-rw-r--r--deps/npm/doc/cli/submodule.md28
-rw-r--r--deps/npm/doc/cli/tag.md17
-rw-r--r--deps/npm/doc/cli/test.md21
-rw-r--r--deps/npm/doc/cli/uninstall.md19
-rw-r--r--deps/npm/doc/cli/unpublish.md32
-rw-r--r--deps/npm/doc/cli/update.md24
-rw-r--r--deps/npm/doc/cli/version.md45
-rw-r--r--deps/npm/doc/cli/view.md87
-rw-r--r--deps/npm/doc/cli/whoami.md15
-rw-r--r--deps/npm/doc/files/npm-folders.md211
-rw-r--r--deps/npm/doc/files/npmrc.md59
-rw-r--r--deps/npm/doc/files/package.json.md607
-rw-r--r--deps/npm/doc/misc/npm-coding-style.md181
-rw-r--r--deps/npm/doc/misc/npm-config.md844
-rw-r--r--deps/npm/doc/misc/npm-developers.md207
-rw-r--r--deps/npm/doc/misc/npm-disputes.md99
-rw-r--r--deps/npm/doc/misc/npm-faq.md364
-rw-r--r--deps/npm/doc/misc/npm-index.md411
-rw-r--r--deps/npm/doc/misc/npm-registry.md69
-rw-r--r--deps/npm/doc/misc/npm-scripts.md245
-rw-r--r--deps/npm/doc/misc/removing-npm.md (renamed from deps/npm/doc/cli/removing-npm.md)0
-rw-r--r--deps/npm/doc/misc/semver.md142
-rw-r--r--deps/npm/html/api/bin.html54
-rw-r--r--deps/npm/html/api/bugs.html60
-rw-r--r--deps/npm/html/api/commands.html63
-rw-r--r--deps/npm/html/api/config.html68
-rw-r--r--deps/npm/html/api/deprecate.html67
-rw-r--r--deps/npm/html/api/docs.html60
-rw-r--r--deps/npm/html/api/edit.html65
-rw-r--r--deps/npm/html/api/explore.html59
-rw-r--r--deps/npm/html/api/help-search.html67
-rw-r--r--deps/npm/html/api/init.html70
-rw-r--r--deps/npm/html/api/install.html60
-rw-r--r--deps/npm/html/api/link.html74
-rw-r--r--deps/npm/html/api/load.html67
-rw-r--r--deps/npm/html/api/ls.html94
-rw-r--r--deps/npm/html/api/npm.html127
-rw-r--r--deps/npm/html/api/outdated.html54
-rw-r--r--deps/npm/html/api/owner.html69
-rw-r--r--deps/npm/html/api/pack.html60
-rw-r--r--deps/npm/html/api/prefix.html56
-rw-r--r--deps/npm/html/api/prune.html58
-rw-r--r--deps/npm/html/api/publish.html67
-rw-r--r--deps/npm/html/api/rebuild.html57
-rw-r--r--deps/npm/html/api/restart.html62
-rw-r--r--deps/npm/html/api/root.html56
-rw-r--r--deps/npm/html/api/run-script.html64
-rw-r--r--deps/npm/html/api/search.html67
-rw-r--r--deps/npm/html/api/shrinkwrap.html61
-rw-r--r--deps/npm/html/api/start.html54
-rw-r--r--deps/npm/html/api/stop.html54
-rw-r--r--deps/npm/html/api/submodule.html68
-rw-r--r--deps/npm/html/api/tag.html64
-rw-r--r--deps/npm/html/api/test.html57
-rw-r--r--deps/npm/html/api/uninstall.html57
-rw-r--r--deps/npm/html/api/unpublish.html61
-rw-r--r--deps/npm/html/api/update.html53
-rw-r--r--deps/npm/html/api/version.html59
-rw-r--r--deps/npm/html/api/view.html134
-rw-r--r--deps/npm/html/api/whoami.html56
-rw-r--r--deps/npm/html/doc/README.html283
-rw-r--r--deps/npm/html/doc/adduser.html74
-rw-r--r--deps/npm/html/doc/api/npm-bin.html32
-rw-r--r--deps/npm/html/doc/api/npm-bugs.html37
-rw-r--r--deps/npm/html/doc/api/npm-commands.html40
-rw-r--r--deps/npm/html/doc/api/npm-config.html61
-rw-r--r--deps/npm/html/doc/api/npm-deprecate.html51
-rw-r--r--deps/npm/html/doc/api/npm-docs.html37
-rw-r--r--deps/npm/html/doc/api/npm-edit.html40
-rw-r--r--deps/npm/html/doc/api/npm-explore.html35
-rw-r--r--deps/npm/html/doc/api/npm-help-search.html48
-rw-r--r--deps/npm/html/doc/api/npm-init.html43
-rw-r--r--deps/npm/html/doc/api/npm-install.html36
-rw-r--r--deps/npm/html/doc/api/npm-link.html46
-rw-r--r--deps/npm/html/doc/api/npm-load.html41
-rw-r--r--deps/npm/html/doc/api/npm-ls.html67
-rw-r--r--deps/npm/html/doc/api/npm-outdated.html32
-rw-r--r--deps/npm/html/doc/api/npm-owner.html51
-rw-r--r--deps/npm/html/doc/api/npm-pack.html37
-rw-r--r--deps/npm/html/doc/api/npm-prefix.html33
-rw-r--r--deps/npm/html/doc/api/npm-prune.html34
-rw-r--r--deps/npm/html/doc/api/npm-publish.html50
-rw-r--r--deps/npm/html/doc/api/npm-rebuild.html34
-rw-r--r--deps/npm/html/doc/api/npm-repo.html37
-rw-r--r--deps/npm/html/doc/api/npm-restart.html40
-rw-r--r--deps/npm/html/doc/api/npm-root.html33
-rw-r--r--deps/npm/html/doc/api/npm-run-script.html45
-rw-r--r--deps/npm/html/doc/api/npm-search.html57
-rw-r--r--deps/npm/html/doc/api/npm-shrinkwrap.html37
-rw-r--r--deps/npm/html/doc/api/npm-start.html32
-rw-r--r--deps/npm/html/doc/api/npm-stop.html32
-rw-r--r--deps/npm/html/doc/api/npm-submodule.html46
-rw-r--r--deps/npm/html/doc/api/npm-tag.html40
-rw-r--r--deps/npm/html/doc/api/npm-test.html34
-rw-r--r--deps/npm/html/doc/api/npm-uninstall.html34
-rw-r--r--deps/npm/html/doc/api/npm-unpublish.html37
-rw-r--r--deps/npm/html/doc/api/npm-update.html31
-rw-r--r--deps/npm/html/doc/api/npm-version.html36
-rw-r--r--deps/npm/html/doc/api/npm-view.html85
-rw-r--r--deps/npm/html/doc/api/npm-whoami.html33
-rw-r--r--deps/npm/html/doc/api/npm.html114
-rw-r--r--deps/npm/html/doc/bin.html55
-rw-r--r--deps/npm/html/doc/bugs.html71
-rw-r--r--deps/npm/html/doc/build.html60
-rw-r--r--deps/npm/html/doc/bundle.html55
-rw-r--r--deps/npm/html/doc/cache.html101
-rw-r--r--deps/npm/html/doc/changelog.html100
-rw-r--r--deps/npm/html/doc/cli/npm-adduser.html50
-rw-r--r--deps/npm/html/doc/cli/npm-bin.html39
-rw-r--r--deps/npm/html/doc/cli/npm-bugs.html58
-rw-r--r--deps/npm/html/doc/cli/npm-build.html42
-rw-r--r--deps/npm/html/doc/cli/npm-bundle.html35
-rw-r--r--deps/npm/html/doc/cli/npm-cache.html87
-rw-r--r--deps/npm/html/doc/cli/npm-completion.html46
-rw-r--r--deps/npm/html/doc/cli/npm-config.html70
-rw-r--r--deps/npm/html/doc/cli/npm-dedupe.html67
-rw-r--r--deps/npm/html/doc/cli/npm-deprecate.html42
-rw-r--r--deps/npm/html/doc/cli/npm-docs.html60
-rw-r--r--deps/npm/html/doc/cli/npm-edit.html53
-rw-r--r--deps/npm/html/doc/cli/npm-explore.html54
-rw-r--r--deps/npm/html/doc/cli/npm-help-search.html50
-rw-r--r--deps/npm/html/doc/cli/npm-help.html56
-rw-r--r--deps/npm/html/doc/cli/npm-init.html42
-rw-r--r--deps/npm/html/doc/cli/npm-install.html224
-rw-r--r--deps/npm/html/doc/cli/npm-link.html70
-rw-r--r--deps/npm/html/doc/cli/npm-ls.html89
-rw-r--r--deps/npm/html/doc/cli/npm-outdated.html71
-rw-r--r--deps/npm/html/doc/cli/npm-owner.html53
-rw-r--r--deps/npm/html/doc/cli/npm-pack.html45
-rw-r--r--deps/npm/html/doc/cli/npm-prefix.html39
-rw-r--r--deps/npm/html/doc/cli/npm-prune.html43
-rw-r--r--deps/npm/html/doc/cli/npm-publish.html58
-rw-r--r--deps/npm/html/doc/cli/npm-rebuild.html42
-rw-r--r--deps/npm/html/doc/cli/npm-repo.html46
-rw-r--r--deps/npm/html/doc/cli/npm-restart.html41
-rw-r--r--deps/npm/html/doc/cli/npm-rm.html43
-rw-r--r--deps/npm/html/doc/cli/npm-root.html39
-rw-r--r--deps/npm/html/doc/cli/npm-run-script.html43
-rw-r--r--deps/npm/html/doc/cli/npm-search.html53
-rw-r--r--deps/npm/html/doc/cli/npm-shrinkwrap.html176
-rw-r--r--deps/npm/html/doc/cli/npm-star.html40
-rw-r--r--deps/npm/html/doc/cli/npm-stars.html41
-rw-r--r--deps/npm/html/doc/cli/npm-start.html38
-rw-r--r--deps/npm/html/doc/cli/npm-stop.html38
-rw-r--r--deps/npm/html/doc/cli/npm-submodule.html46
-rw-r--r--deps/npm/html/doc/cli/npm-tag.html48
-rw-r--r--deps/npm/html/doc/cli/npm-test.html41
-rw-r--r--deps/npm/html/doc/cli/npm-uninstall.html59
-rw-r--r--deps/npm/html/doc/cli/npm-unpublish.html50
-rw-r--r--deps/npm/html/doc/cli/npm-update.html42
-rw-r--r--deps/npm/html/doc/cli/npm-version.html59
-rw-r--r--deps/npm/html/doc/cli/npm-view.html86
-rw-r--r--deps/npm/html/doc/cli/npm-whoami.html37
-rw-r--r--deps/npm/html/doc/cli/npm.html145
-rw-r--r--deps/npm/html/doc/coding-style.html217
-rw-r--r--deps/npm/html/doc/completion.html68
-rw-r--r--deps/npm/html/doc/config.html813
-rw-r--r--deps/npm/html/doc/dedupe.html92
-rw-r--r--deps/npm/html/doc/deprecate.html66
-rw-r--r--deps/npm/html/doc/developers.html209
-rw-r--r--deps/npm/html/doc/disputes.html126
-rw-r--r--deps/npm/html/doc/docs.html72
-rw-r--r--deps/npm/html/doc/edit.html72
-rw-r--r--deps/npm/html/doc/explore.html75
-rw-r--r--deps/npm/html/doc/faq.html337
-rw-r--r--deps/npm/html/doc/files/npm-folders.html183
-rw-r--r--deps/npm/html/doc/files/npm-global.html183
-rw-r--r--deps/npm/html/doc/files/npm-json.html463
-rw-r--r--deps/npm/html/doc/files/npmrc.html68
-rw-r--r--deps/npm/html/doc/files/package.json.html463
-rw-r--r--deps/npm/html/doc/folders.html240
-rw-r--r--deps/npm/html/doc/global.html240
-rw-r--r--deps/npm/html/doc/help-search.html73
-rw-r--r--deps/npm/html/doc/help.html71
-rw-r--r--deps/npm/html/doc/index.html643
-rw-r--r--deps/npm/html/doc/init.html64
-rw-r--r--deps/npm/html/doc/install.html177
-rw-r--r--deps/npm/html/doc/json.html581
-rw-r--r--deps/npm/html/doc/link.html96
-rw-r--r--deps/npm/html/doc/list.html99
-rw-r--r--deps/npm/html/doc/ls.html99
-rw-r--r--deps/npm/html/doc/misc/npm-coding-style.html151
-rw-r--r--deps/npm/html/doc/misc/npm-config.html735
-rw-r--r--deps/npm/html/doc/misc/npm-developers.html185
-rw-r--r--deps/npm/html/doc/misc/npm-disputes.html116
-rw-r--r--deps/npm/html/doc/misc/npm-faq.html289
-rw-r--r--deps/npm/html/doc/misc/npm-index.html230
-rw-r--r--deps/npm/html/doc/misc/npm-registry.html75
-rw-r--r--deps/npm/html/doc/misc/npm-scripts.html222
-rw-r--r--deps/npm/html/doc/misc/removing-npm.html61
-rw-r--r--deps/npm/html/doc/misc/semver.html151
-rw-r--r--deps/npm/html/doc/npm.html170
-rw-r--r--deps/npm/html/doc/outdated.html56
-rw-r--r--deps/npm/html/doc/owner.html69
-rw-r--r--deps/npm/html/doc/pack.html64
-rw-r--r--deps/npm/html/doc/prefix.html55
-rw-r--r--deps/npm/html/doc/prune.html60
-rw-r--r--deps/npm/html/doc/publish.html64
-rw-r--r--deps/npm/html/doc/rebuild.html60
-rw-r--r--deps/npm/html/doc/registry.html130
-rw-r--r--deps/npm/html/doc/removing-npm.html93
-rw-r--r--deps/npm/html/doc/restart.html59
-rw-r--r--deps/npm/html/doc/rm.html57
-rw-r--r--deps/npm/html/doc/root.html55
-rw-r--r--deps/npm/html/doc/run-script.html58
-rw-r--r--deps/npm/html/doc/scripts.html253
-rw-r--r--deps/npm/html/doc/search.html59
-rw-r--r--deps/npm/html/doc/semver.html139
-rw-r--r--deps/npm/html/doc/shrinkwrap.html218
-rw-r--r--deps/npm/html/doc/star.html61
-rw-r--r--deps/npm/html/doc/stars.html60
-rw-r--r--deps/npm/html/doc/start.html55
-rw-r--r--deps/npm/html/doc/stop.html55
-rw-r--r--deps/npm/html/doc/submodule.html68
-rw-r--r--deps/npm/html/doc/tag.html56
-rw-r--r--deps/npm/html/doc/test.html58
-rw-r--r--deps/npm/html/doc/uninstall.html57
-rw-r--r--deps/npm/html/doc/unpublish.html69
-rw-r--r--deps/npm/html/doc/update.html61
-rw-r--r--deps/npm/html/doc/version.html84
-rw-r--r--deps/npm/html/doc/view.html125
-rw-r--r--deps/npm/html/doc/whoami.html55
-rw-r--r--deps/npm/html/docfoot.html43
-rw-r--r--deps/npm/html/dochead.html5
-rw-r--r--deps/npm/html/index.html4
-rw-r--r--deps/npm/html/static/style.css38
-rw-r--r--deps/npm/html/static/toc.js29
-rw-r--r--deps/npm/html/static/webfonts/23242D_3_0.eotbin9662 -> 0 bytes
-rw-r--r--deps/npm/html/static/webfonts/23242D_3_0.ttfbin9356 -> 0 bytes
-rw-r--r--deps/npm/html/static/webfonts/23242D_3_0.woffbin4373 -> 0 bytes
-rw-r--r--deps/npm/lib/adduser.js31
-rw-r--r--deps/npm/lib/bugs.js60
-rw-r--r--deps/npm/lib/build.js27
-rw-r--r--deps/npm/lib/cache.js400
-rw-r--r--deps/npm/lib/config.js14
-rw-r--r--deps/npm/lib/dedupe.js40
-rw-r--r--deps/npm/lib/deprecate.js2
-rw-r--r--deps/npm/lib/docs.js59
-rw-r--r--deps/npm/lib/help-search.js345
-rw-r--r--deps/npm/lib/help.js262
-rw-r--r--deps/npm/lib/install.js252
-rw-r--r--deps/npm/lib/link.js6
-rw-r--r--deps/npm/lib/ls.js21
-rw-r--r--deps/npm/lib/npm.js82
-rw-r--r--deps/npm/lib/outdated.js213
-rw-r--r--deps/npm/lib/prune.js20
-rw-r--r--deps/npm/lib/publish.js6
-rw-r--r--deps/npm/lib/rebuild.js5
-rw-r--r--deps/npm/lib/repo.js54
-rw-r--r--deps/npm/lib/run-script.js32
-rw-r--r--deps/npm/lib/search.js171
-rw-r--r--deps/npm/lib/shrinkwrap.js9
-rw-r--r--deps/npm/lib/submodule.js2
-rw-r--r--deps/npm/lib/unbuild.js20
-rw-r--r--deps/npm/lib/uninstall.js1
-rw-r--r--deps/npm/lib/update.js6
-rw-r--r--deps/npm/lib/utils/completion/installed-deep.js8
-rw-r--r--deps/npm/lib/utils/error-handler.js38
-rw-r--r--deps/npm/lib/utils/fetch.js17
-rw-r--r--deps/npm/lib/utils/gently-rm.js16
-rw-r--r--deps/npm/lib/utils/is-git-url.js13
-rw-r--r--deps/npm/lib/utils/lifecycle.js110
-rw-r--r--deps/npm/lib/utils/tar.js2
-rw-r--r--deps/npm/lib/version.js5
-rw-r--r--deps/npm/lib/view.js23
-rw-r--r--deps/npm/lib/visnup.js42
-rw-r--r--deps/npm/make.bat3
-rw-r--r--deps/npm/man/man1/README.1325
-rw-r--r--deps/npm/man/man1/adduser.157
-rw-r--r--deps/npm/man/man1/author.155
-rw-r--r--deps/npm/man/man1/bin.134
-rw-r--r--deps/npm/man/man1/bugs.170
-rw-r--r--deps/npm/man/man1/build.143
-rw-r--r--deps/npm/man/man1/bundle.123
-rw-r--r--deps/npm/man/man1/cache.197
-rw-r--r--deps/npm/man/man1/changelog.1173
-rw-r--r--deps/npm/man/man1/coding-style.1254
-rw-r--r--deps/npm/man/man1/completion.147
-rw-r--r--deps/npm/man/man1/config.11523
-rw-r--r--deps/npm/man/man1/dedupe.190
-rw-r--r--deps/npm/man/man1/deprecate.148
-rw-r--r--deps/npm/man/man1/developers.1335
-rw-r--r--deps/npm/man/man1/disputes.1145
-rw-r--r--deps/npm/man/man1/docs.168
-rw-r--r--deps/npm/man/man1/edit.160
-rw-r--r--deps/npm/man/man1/explore.176
-rw-r--r--deps/npm/man/man1/faq.1405
-rw-r--r--deps/npm/man/man1/find.172
-rw-r--r--deps/npm/man/man1/folders.1258
-rw-r--r--deps/npm/man/man1/get.11154
-rw-r--r--deps/npm/man/man1/global.1258
-rw-r--r--deps/npm/man/man1/help-search.159
-rw-r--r--deps/npm/man/man1/help.171
-rw-r--r--deps/npm/man/man1/home.168
-rw-r--r--deps/npm/man/man1/index.1298
-rw-r--r--deps/npm/man/man1/init.143
-rw-r--r--deps/npm/man/man1/install.1417
-rw-r--r--deps/npm/man/man1/json.1853
-rw-r--r--deps/npm/man/man1/link.1112
-rw-r--r--deps/npm/man/man1/list.1125
-rw-r--r--deps/npm/man/man1/ln.1108
-rw-r--r--deps/npm/man/man1/ls.1125
-rw-r--r--deps/npm/man/man1/npm-README.1341
-rw-r--r--deps/npm/man/man1/npm-adduser.163
-rw-r--r--deps/npm/man/man1/npm-bin.140
-rw-r--r--deps/npm/man/man1/npm-bugs.178
-rw-r--r--deps/npm/man/man1/npm-build.143
-rw-r--r--deps/npm/man/man1/npm-bundle.123
-rw-r--r--deps/npm/man/man1/npm-cache.1104
-rw-r--r--deps/npm/man/man1/npm-completion.147
-rw-r--r--deps/npm/man/man1/npm-config.1113
-rw-r--r--deps/npm/man/man1/npm-dedupe.196
-rw-r--r--deps/npm/man/man1/npm-deprecate.148
-rw-r--r--deps/npm/man/man1/npm-docs.178
-rw-r--r--deps/npm/man/man1/npm-edit.166
-rw-r--r--deps/npm/man/man1/npm-explore.176
-rw-r--r--deps/npm/man/man1/npm-help-search.159
-rw-r--r--deps/npm/man/man1/npm-help.177
-rw-r--r--deps/npm/man/man1/npm-init.143
-rw-r--r--deps/npm/man/man1/npm-install.1441
-rw-r--r--deps/npm/man/man1/npm-link.1119
-rw-r--r--deps/npm/man/man1/npm-ls.1146
-rw-r--r--deps/npm/man/man1/npm-outdated.1102
-rw-r--r--deps/npm/man/man1/npm-owner.158
-rw-r--r--deps/npm/man/man1/npm-pack.148
-rw-r--r--deps/npm/man/man1/npm-prefix.140
-rw-r--r--deps/npm/man/man1/npm-prune.142
-rw-r--r--deps/npm/man/man1/npm-publish.164
-rw-r--r--deps/npm/man/man1/npm-rebuild.137
-rw-r--r--deps/npm/man/man1/npm-repo.147
-rw-r--r--deps/npm/man/man1/npm-restart.142
-rw-r--r--deps/npm/man/man1/npm-rm.144
-rw-r--r--deps/npm/man/man1/npm-root.140
-rw-r--r--deps/npm/man/man1/npm-run-script.144
-rw-r--r--deps/npm/man/man1/npm-search.162
-rw-r--r--deps/npm/man/man1/npm-shrinkwrap.1275
-rw-r--r--deps/npm/man/man1/npm-star.139
-rw-r--r--deps/npm/man/man1/npm-stars.140
-rw-r--r--deps/npm/man/man1/npm-start.137
-rw-r--r--deps/npm/man/man1/npm-stop.137
-rw-r--r--deps/npm/man/man1/npm-submodule.142
-rw-r--r--deps/npm/man/man1/npm-tag.174
-rw-r--r--deps/npm/man/man1/npm-test.142
-rw-r--r--deps/npm/man/man1/npm-uninstall.187
-rw-r--r--deps/npm/man/man1/npm-unpublish.158
-rw-r--r--deps/npm/man/man1/npm-update.145
-rw-r--r--deps/npm/man/man1/npm-version.175
-rw-r--r--deps/npm/man/man1/npm-view.1186
-rw-r--r--deps/npm/man/man1/npm-whoami.134
-rw-r--r--deps/npm/man/man1/npm.133
-rw-r--r--deps/npm/man/man1/outdated.132
-rw-r--r--deps/npm/man/man1/owner.158
-rw-r--r--deps/npm/man/man1/pack.142
-rw-r--r--deps/npm/man/man1/prefix.134
-rw-r--r--deps/npm/man/man1/prune.137
-rw-r--r--deps/npm/man/man1/publish.153
-rw-r--r--deps/npm/man/man1/rebuild.136
-rw-r--r--deps/npm/man/man1/registry.1107
-rw-r--r--deps/npm/man/man1/removing-npm.1107
-rw-r--r--deps/npm/man/man1/restart.142
-rw-r--r--deps/npm/man/man1/rm.136
-rw-r--r--deps/npm/man/man1/root.134
-rw-r--r--deps/npm/man/man1/run-script.141
-rw-r--r--deps/npm/man/man1/scripts.1351
-rw-r--r--deps/npm/man/man1/search.136
-rw-r--r--deps/npm/man/man1/semver.1221
-rw-r--r--deps/npm/man/man1/set.11154
-rw-r--r--deps/npm/man/man1/shrinkwrap.1275
-rw-r--r--deps/npm/man/man1/star.139
-rw-r--r--deps/npm/man/man1/stars.140
-rw-r--r--deps/npm/man/man1/start.137
-rw-r--r--deps/npm/man/man1/stop.137
-rw-r--r--deps/npm/man/man1/submodule.142
-rw-r--r--deps/npm/man/man1/tag.131
-rw-r--r--deps/npm/man/man1/test.141
-rw-r--r--deps/npm/man/man1/uninstall.136
-rw-r--r--deps/npm/man/man1/unpublish.153
-rw-r--r--deps/npm/man/man1/update.145
-rw-r--r--deps/npm/man/man1/version.175
-rw-r--r--deps/npm/man/man1/view.1179
-rw-r--r--deps/npm/man/man1/whoami.128
-rw-r--r--deps/npm/man/man3/author.352
-rw-r--r--deps/npm/man/man3/bin.321
-rw-r--r--deps/npm/man/man3/bugs.328
-rw-r--r--deps/npm/man/man3/commands.335
-rw-r--r--deps/npm/man/man3/config.369
-rw-r--r--deps/npm/man/man3/deprecate.357
-rw-r--r--deps/npm/man/man3/docs.328
-rw-r--r--deps/npm/man/man3/edit.335
-rw-r--r--deps/npm/man/man3/explore.328
-rw-r--r--deps/npm/man/man3/find.379
-rw-r--r--deps/npm/man/man3/get.369
-rw-r--r--deps/npm/man/man3/help-search.351
-rw-r--r--deps/npm/man/man3/home.328
-rw-r--r--deps/npm/man/man3/init.339
-rw-r--r--deps/npm/man/man3/install.329
-rw-r--r--deps/npm/man/man3/link.353
-rw-r--r--deps/npm/man/man3/list.379
-rw-r--r--deps/npm/man/man3/ln.353
-rw-r--r--deps/npm/man/man3/load.344
-rw-r--r--deps/npm/man/man3/ls.386
-rw-r--r--deps/npm/man/man3/npm-bin.321
-rw-r--r--deps/npm/man/man3/npm-bugs.328
-rw-r--r--deps/npm/man/man3/npm-commands.335
-rw-r--r--deps/npm/man/man3/npm-config.369
-rw-r--r--deps/npm/man/man3/npm-deprecate.357
-rw-r--r--deps/npm/man/man3/npm-docs.328
-rw-r--r--deps/npm/man/man3/npm-edit.335
-rw-r--r--deps/npm/man/man3/npm-explore.328
-rw-r--r--deps/npm/man/man3/npm-help-search.351
-rw-r--r--deps/npm/man/man3/npm-init.339
-rw-r--r--deps/npm/man/man3/npm-install.329
-rw-r--r--deps/npm/man/man3/npm-link.353
-rw-r--r--deps/npm/man/man3/npm-load.344
-rw-r--r--deps/npm/man/man3/npm-ls.386
-rw-r--r--deps/npm/man/man3/npm-outdated.321
-rw-r--r--deps/npm/man/man3/npm-owner.352
-rw-r--r--deps/npm/man/man3/npm-pack.328
-rw-r--r--deps/npm/man/man3/npm-prefix.324
-rw-r--r--deps/npm/man/man3/npm-prune.327
-rw-r--r--deps/npm/man/man3/npm-publish.351
-rw-r--r--deps/npm/man/man3/npm-rebuild.322
-rw-r--r--deps/npm/man/man3/npm-repo.328
-rw-r--r--deps/npm/man/man3/npm-restart.337
-rw-r--r--deps/npm/man/man3/npm-root.324
-rw-r--r--deps/npm/man/man3/npm-run-script.348
-rw-r--r--deps/npm/man/man3/npm-search.364
-rw-r--r--deps/npm/man/man3/npm-shrinkwrap.330
-rw-r--r--deps/npm/man/man3/npm-start.321
-rw-r--r--deps/npm/man/man3/npm-stop.321
-rw-r--r--deps/npm/man/man3/npm-submodule.342
-rw-r--r--deps/npm/man/man3/npm-tag.331
-rw-r--r--deps/npm/man/man3/npm-test.325
-rw-r--r--deps/npm/man/man3/npm-uninstall.325
-rw-r--r--deps/npm/man/man3/npm-unpublish.330
-rw-r--r--deps/npm/man/man3/npm-update.318
-rw-r--r--deps/npm/man/man3/npm-version.327
-rw-r--r--deps/npm/man/man3/npm-view.3176
-rw-r--r--deps/npm/man/man3/npm-whoami.324
-rw-r--r--deps/npm/man/man3/npm.313
-rw-r--r--deps/npm/man/man3/outdated.321
-rw-r--r--deps/npm/man/man3/owner.352
-rw-r--r--deps/npm/man/man3/pack.328
-rw-r--r--deps/npm/man/man3/prefix.324
-rw-r--r--deps/npm/man/man3/prune.327
-rw-r--r--deps/npm/man/man3/publish.351
-rw-r--r--deps/npm/man/man3/rebuild.322
-rw-r--r--deps/npm/man/man3/restart.337
-rw-r--r--deps/npm/man/man3/rm.325
-rw-r--r--deps/npm/man/man3/root.324
-rw-r--r--deps/npm/man/man3/run-script.348
-rw-r--r--deps/npm/man/man3/search.364
-rw-r--r--deps/npm/man/man3/set.369
-rw-r--r--deps/npm/man/man3/shrinkwrap.330
-rw-r--r--deps/npm/man/man3/start.321
-rw-r--r--deps/npm/man/man3/stop.321
-rw-r--r--deps/npm/man/man3/submodule.342
-rw-r--r--deps/npm/man/man3/tag.331
-rw-r--r--deps/npm/man/man3/test.325
-rw-r--r--deps/npm/man/man3/uninstall.325
-rw-r--r--deps/npm/man/man3/unpublish.330
-rw-r--r--deps/npm/man/man3/update.318
-rw-r--r--deps/npm/man/man3/version.327
-rw-r--r--deps/npm/man/man3/view.3176
-rw-r--r--deps/npm/man/man3/whoami.324
-rw-r--r--deps/npm/man/man5/npm-folders.5264
-rw-r--r--deps/npm/man/man5/npm-global.5264
-rw-r--r--deps/npm/man/man5/npm-json.5871
-rw-r--r--deps/npm/man/man5/npmrc.589
-rw-r--r--deps/npm/man/man5/package.json.5871
-rw-r--r--deps/npm/man/man7/npm-coding-style.7254
-rw-r--r--deps/npm/man/man7/npm-config.71484
-rw-r--r--deps/npm/man/man7/npm-developers.7335
-rw-r--r--deps/npm/man/man7/npm-disputes.7146
-rw-r--r--deps/npm/man/man7/npm-faq.7479
-rw-r--r--deps/npm/man/man7/npm-index.7307
-rw-r--r--deps/npm/man/man7/npm-registry.782
-rw-r--r--deps/npm/man/man7/npm-scripts.7354
-rw-r--r--deps/npm/man/man7/removing-npm.7107
-rw-r--r--deps/npm/man/man7/semver.7219
-rw-r--r--deps/npm/node_modules/ansi/README.md8
-rw-r--r--deps/npm/node_modules/ansi/color-spaces.pl67
-rwxr-xr-xdeps/npm/node_modules/ansi/examples/cursorPosition.js12
-rwxr-xr-xdeps/npm/node_modules/ansi/examples/imgcat/index.js50
-rw-r--r--deps/npm/node_modules/ansi/examples/imgcat/yoshi.pngbin1341 -> 0 bytes
-rwxr-xr-xdeps/npm/node_modules/ansi/examples/starwars.js9
-rw-r--r--deps/npm/node_modules/ansi/lib/ansi.js45
-rw-r--r--deps/npm/node_modules/ansi/package.json28
-rw-r--r--deps/npm/node_modules/ansicolors/LICENSE23
-rw-r--r--deps/npm/node_modules/ansicolors/README.md62
-rw-r--r--deps/npm/node_modules/ansicolors/ansicolors.js65
-rw-r--r--deps/npm/node_modules/ansicolors/package.json34
-rw-r--r--deps/npm/node_modules/ansicolors/test/ansicolors.js71
-rw-r--r--deps/npm/node_modules/ansistyles/LICENSE23
-rw-r--r--deps/npm/node_modules/ansistyles/README.md71
-rw-r--r--deps/npm/node_modules/ansistyles/ansistyles.js38
-rw-r--r--deps/npm/node_modules/ansistyles/package.json38
-rw-r--r--deps/npm/node_modules/ansistyles/test/ansistyles.js15
-rw-r--r--deps/npm/node_modules/block-stream/package.json12
-rw-r--r--deps/npm/node_modules/cmd-shim/package.json17
-rw-r--r--deps/npm/node_modules/columnify/Readme.md189
-rw-r--r--deps/npm/node_modules/columnify/index.js210
-rw-r--r--deps/npm/node_modules/columnify/package.json42
-rw-r--r--deps/npm/node_modules/columnify/utils.js76
-rw-r--r--deps/npm/node_modules/editor/LICENSE18
-rw-r--r--deps/npm/node_modules/editor/package.json9
-rw-r--r--deps/npm/node_modules/fstream-npm/fstream-npm.js2
-rw-r--r--deps/npm/node_modules/fstream-npm/node_modules/fstream-ignore/package.json15
-rw-r--r--deps/npm/node_modules/fstream-npm/package.json9
-rw-r--r--deps/npm/node_modules/fstream/lib/dir-reader.js1
-rw-r--r--deps/npm/node_modules/fstream/lib/reader.js5
-rw-r--r--deps/npm/node_modules/fstream/package.json18
-rw-r--r--deps/npm/node_modules/github-url-from-git/.npmignore (renamed from deps/npm/node_modules/read-package-json/node_modules/normalize-package-data/node_modules/github-url-from-git/.npmignore)0
-rw-r--r--deps/npm/node_modules/github-url-from-git/History.md (renamed from deps/npm/node_modules/read-package-json/node_modules/normalize-package-data/node_modules/github-url-from-git/History.md)0
-rw-r--r--deps/npm/node_modules/github-url-from-git/Makefile (renamed from deps/npm/node_modules/read-package-json/node_modules/normalize-package-data/node_modules/github-url-from-git/Makefile)0
-rw-r--r--deps/npm/node_modules/github-url-from-git/Readme.md (renamed from deps/npm/node_modules/read-package-json/node_modules/normalize-package-data/node_modules/github-url-from-git/Readme.md)0
-rw-r--r--deps/npm/node_modules/github-url-from-git/index.js (renamed from deps/npm/node_modules/read-package-json/node_modules/normalize-package-data/node_modules/github-url-from-git/index.js)0
-rw-r--r--deps/npm/node_modules/github-url-from-git/package.json31
-rw-r--r--deps/npm/node_modules/github-url-from-git/test.js (renamed from deps/npm/node_modules/read-package-json/node_modules/normalize-package-data/node_modules/github-url-from-git/test.js)0
-rw-r--r--deps/npm/node_modules/github-url-from-username-repo/.npmignore13
-rw-r--r--deps/npm/node_modules/github-url-from-username-repo/.travis.yml4
-rw-r--r--deps/npm/node_modules/github-url-from-username-repo/LICENSE27
-rw-r--r--deps/npm/node_modules/github-url-from-username-repo/README.md14
-rw-r--r--deps/npm/node_modules/github-url-from-username-repo/index.js9
-rw-r--r--deps/npm/node_modules/github-url-from-username-repo/package.json38
-rw-r--r--deps/npm/node_modules/github-url-from-username-repo/test/index.js34
-rw-r--r--deps/npm/node_modules/glob/glob.js109
-rw-r--r--deps/npm/node_modules/glob/package.json17
-rw-r--r--deps/npm/node_modules/glob/test/bash-results.json3
-rw-r--r--deps/npm/node_modules/glob/test/mark.js44
-rw-r--r--deps/npm/node_modules/glob/test/new-glob-optional-options.js10
-rw-r--r--deps/npm/node_modules/glob/test/nocase-nomagic.js2
-rw-r--r--deps/npm/node_modules/glob/test/readme-issue.js36
-rw-r--r--deps/npm/node_modules/graceful-fs/README.md13
-rw-r--r--deps/npm/node_modules/graceful-fs/graceful-fs.js410
-rw-r--r--deps/npm/node_modules/graceful-fs/package.json8
-rw-r--r--deps/npm/node_modules/graceful-fs/polyfills.js228
-rw-r--r--deps/npm/node_modules/graceful-fs/test/open.js13
-rw-r--r--deps/npm/node_modules/graceful-fs/test/readdir-sort.js21
-rw-r--r--deps/npm/node_modules/graceful-fs/test/ulimit.js158
-rw-r--r--deps/npm/node_modules/inherits/LICENSE22
-rw-r--r--deps/npm/node_modules/inherits/README.md93
-rw-r--r--deps/npm/node_modules/inherits/inherits-old.js40
-rw-r--r--deps/npm/node_modules/inherits/inherits.js30
-rw-r--r--deps/npm/node_modules/inherits/inherits_browser.js23
-rw-r--r--deps/npm/node_modules/inherits/package.json46
-rw-r--r--deps/npm/node_modules/inherits/test.js25
-rw-r--r--deps/npm/node_modules/init-package-json/LICENSE15
-rw-r--r--deps/npm/node_modules/init-package-json/default-input.js6
-rw-r--r--deps/npm/node_modules/init-package-json/example.js14
-rw-r--r--deps/npm/node_modules/init-package-json/example/example-basic.js8
-rw-r--r--deps/npm/node_modules/init-package-json/example/example-default.js7
-rw-r--r--deps/npm/node_modules/init-package-json/example/example-npm.js13
-rw-r--r--deps/npm/node_modules/init-package-json/example/init/basic-init.js1
-rw-r--r--deps/npm/node_modules/init-package-json/init-package-json.js10
-rw-r--r--deps/npm/node_modules/init-package-json/node_modules/promzard/LICENSE15
-rw-r--r--deps/npm/node_modules/init-package-json/node_modules/promzard/package.json10
-rw-r--r--deps/npm/node_modules/init-package-json/package.json13
-rw-r--r--deps/npm/node_modules/lockfile/README.md8
-rw-r--r--deps/npm/node_modules/lockfile/lockfile.js38
-rw-r--r--deps/npm/node_modules/lockfile/package.json12
-rw-r--r--deps/npm/node_modules/lockfile/test/basic.js61
-rw-r--r--deps/npm/node_modules/lru-cache/AUTHORS8
-rw-r--r--deps/npm/node_modules/lru-cache/CONTRIBUTORS14
-rw-r--r--deps/npm/node_modules/lru-cache/lib/lru-cache.js383
-rw-r--r--deps/npm/node_modules/lru-cache/package.json38
-rw-r--r--deps/npm/node_modules/lru-cache/s.js25
-rw-r--r--deps/npm/node_modules/lru-cache/test/basic.js40
-rw-r--r--deps/npm/node_modules/minimatch/.npmignore1
-rw-r--r--deps/npm/node_modules/minimatch/README.md76
-rw-r--r--deps/npm/node_modules/minimatch/minimatch.js148
-rw-r--r--deps/npm/node_modules/minimatch/node_modules/sigmund/package.json7
-rw-r--r--deps/npm/node_modules/minimatch/package.json9
-rw-r--r--deps/npm/node_modules/minimatch/test/extglob-ending-with-state-char.js8
-rw-r--r--deps/npm/node_modules/mkdirp/package.json9
-rw-r--r--deps/npm/node_modules/node-gyp/.jshintrc1
-rw-r--r--deps/npm/node_modules/node-gyp/.npmignore2
-rw-r--r--deps/npm/node_modules/node-gyp/README.md2
-rw-r--r--deps/npm/node_modules/node-gyp/addon.gypi16
-rwxr-xr-xdeps/npm/node_modules/node-gyp/bin/node-gyp.js2
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/AUTHORS5
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/DEPS2
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/MANIFEST21
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/PRESUBMIT.py21
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/buildbot/buildbot_run.py114
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/data/win/large-pdb-shim.cc12
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/gyp20
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/gyp.bat2
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/gyp_main.py18
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/gyptest.py26
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/pylib/gyp/MSVSNew.py19
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/pylib/gyp/MSVSSettings.py13
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/pylib/gyp/MSVSUtil.py267
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/pylib/gyp/MSVSVersion.py59
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/pylib/gyp/SCons.py199
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/pylib/gyp/__init__.py142
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/pylib/gyp/common.py58
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/pylib/gyp/common_test.py1
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/pylib/gyp/flock_tool.py49
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/android.py207
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/cmake.py1143
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/dump_dependency_json.py14
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/eclipse.py97
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/make.py164
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/msvs.py474
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/ninja.py1033
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/ninja_test.py48
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/scons.py1072
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/xcode.py98
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/xcode_test.py23
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/pylib/gyp/input.py404
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/pylib/gyp/input_test.py90
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/pylib/gyp/mac_tool.py331
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/pylib/gyp/msvs_emulation.py453
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/pylib/gyp/ninja_syntax.py18
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/pylib/gyp/ordered_dict.py289
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/pylib/gyp/sun_tool.py51
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/pylib/gyp/win_tool.py174
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/pylib/gyp/xcode_emulation.py519
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/pylib/gyp/xcodeproj_file.py57
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/setup.py11
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/test/actions-bare/gyptest-bare.py23
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/actions-bare/src/bare.gyp25
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/test/actions-bare/src/bare.py11
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/test/actions-multiple/gyptest-all.py72
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/actions-multiple/src/actions.gyp226
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/test/actions-multiple/src/copy.py9
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/test/actions-multiple/src/filter.py12
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/actions-multiple/src/foo.c11
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/actions-multiple/src/input.txt1
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/actions-multiple/src/main.c22
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/test/actions-none/gyptest-none.py26
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/actions-none/src/fake_cross.py12
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/actions-none/src/foo.cc1
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/actions-none/src/none_with_source_files.gyp35
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/test/actions-subdir/gyptest-action.py26
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/test/actions-subdir/src/make-file.py11
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/actions-subdir/src/none.gyp31
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/test/actions-subdir/src/subdir/make-subdir-file.py11
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/actions-subdir/src/subdir/subdir.gyp28
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/test/actions/gyptest-all.py102
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/test/actions/gyptest-default.py69
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/test/actions/gyptest-errors.py24
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/actions/src/action_missing_name.gyp24
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/actions/src/actions.gyp114
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/test/actions/src/confirm-dep-files.py21
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/test/actions/src/subdir1/counter.py46
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/actions/src/subdir1/executable.gyp74
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/test/actions/src/subdir1/make-prog1.py20
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/test/actions/src/subdir1/make-prog2.py20
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/actions/src/subdir1/program.c12
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/test/actions/src/subdir2/make-file.py11
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/actions/src/subdir2/none.gyp33
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/test/actions/src/subdir3/generate_main.py21
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/actions/src/subdir3/null_input.gyp29
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/test/additional-targets/gyptest-additional.py56
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/additional-targets/src/all.gyp13
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/additional-targets/src/dir1/actions.gyp56
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/test/additional-targets/src/dir1/emit.py11
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/additional-targets/src/dir1/lib1.c6
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/test/assembly/gyptest-assembly.py31
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/assembly/src/as.bat4
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/assembly/src/assembly.gyp62
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/assembly/src/lib1.S15
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/assembly/src/lib1.c3
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/assembly/src/program.c12
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/test/build-option/gyptest-build.py22
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/build-option/hello.c13
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/build-option/hello.gyp15
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/test/builddir/gyptest-all.py85
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/test/builddir/gyptest-default.py85
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/builddir/src/builddir.gypi21
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/builddir/src/func1.c6
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/builddir/src/func2.c6
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/builddir/src/func3.c6
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/builddir/src/func4.c6
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/builddir/src/func5.c6
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/builddir/src/prog1.c10
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/builddir/src/prog1.gyp30
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/builddir/src/subdir2/prog2.c10
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/builddir/src/subdir2/prog2.gyp19
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/builddir/src/subdir2/subdir3/prog3.c10
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/builddir/src/subdir2/subdir3/prog3.gyp19
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/builddir/src/subdir2/subdir3/subdir4/prog4.c10
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/builddir/src/subdir2/subdir3/subdir4/prog4.gyp19
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/builddir/src/subdir2/subdir3/subdir4/subdir5/prog5.c10
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/builddir/src/subdir2/subdir3/subdir4/subdir5/prog5.gyp19
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/cflags/cflags.c15
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/cflags/cflags.gyp16
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/test/cflags/gyptest-cflags.py65
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/test/compilable/gyptest-headers.py29
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/compilable/src/headers.gyp26
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/compilable/src/lib1.cpp7
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/compilable/src/lib1.hpp6
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/compilable/src/program.cpp9
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/compiler-override/compiler-global-settings.gyp.in34
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/compiler-override/compiler-host.gyp17
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/compiler-override/compiler.gyp16
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/compiler-override/cxxtest.cc7
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/test/compiler-override/gyptest-compiler-env.py55
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/test/compiler-override/gyptest-compiler-global-settings.py52
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/test/compiler-override/my_cc.py6
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/test/compiler-override/my_cxx.py6
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/test/compiler-override/my_ld.py6
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/compiler-override/test.c7
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/configurations/basics/configurations.c15
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/configurations/basics/configurations.gyp32
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/test/configurations/basics/gyptest-configurations.py29
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/configurations/inheritance/configurations.c21
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/configurations/inheritance/configurations.gyp40
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/test/configurations/inheritance/gyptest-inheritance.py33
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/configurations/invalid/actions.gyp18
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/configurations/invalid/all_dependent_settings.gyp18
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/configurations/invalid/configurations.gyp18
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/configurations/invalid/dependencies.gyp18
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/configurations/invalid/direct_dependent_settings.gyp18
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/test/configurations/invalid/gyptest-configurations.py39
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/configurations/invalid/libraries.gyp18
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/configurations/invalid/link_settings.gyp18
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/configurations/invalid/sources.gyp18
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/configurations/invalid/standalone_static_library.gyp17
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/configurations/invalid/target_name.gyp18
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/configurations/invalid/type.gyp18
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/configurations/target_platform/configurations.gyp58
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/configurations/target_platform/front.c8
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/test/configurations/target_platform/gyptest-target_platform.py40
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/configurations/target_platform/left.c3
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/configurations/target_platform/right.c3
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/configurations/x64/configurations.c12
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/configurations/x64/configurations.gyp38
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/test/configurations/x64/gyptest-x86.py31
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/test/copies/gyptest-all.py40
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/test/copies/gyptest-default.py40
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/test/copies/gyptest-slash.py38
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/test/copies/gyptest-updir.py23
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/copies/src/copies-slash.gyp36
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/copies/src/copies-updir.gyp21
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/copies/src/copies.gyp70
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/copies/src/directory/file31
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/copies/src/directory/file41
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/copies/src/directory/subdir/file51
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/copies/src/file11
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/copies/src/file21
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/copies/src/parentdir/subdir/file61
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/test/custom-generator/gyptest-custom-generator.py18
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/custom-generator/mygenerator.py14
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/custom-generator/test.gyp15
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/cxxflags/cxxflags.cc15
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/cxxflags/cxxflags.gyp16
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/test/cxxflags/gyptest-cxxflags.py65
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/defines-escaping/defines-escaping.c11
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/defines-escaping/defines-escaping.gyp19
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/test/defines-escaping/gyptest-defines-escaping.py184
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/defines/defines-env.gyp22
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/defines/defines.c23
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/defines/defines.gyp38
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/test/defines/gyptest-define-override.py34
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/test/defines/gyptest-defines-env-regyp.py51
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/test/defines/gyptest-defines-env.py85
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/test/defines/gyptest-defines.py27
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/test/dependencies/a.c9
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/test/dependencies/b/b.c3
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/test/dependencies/b/b.gyp22
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/test/dependencies/b/b3.c9
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/dependencies/c/c.c4
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/dependencies/c/c.gyp22
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/dependencies/c/d.c3
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/dependencies/double_dependency.gyp23
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/dependencies/double_dependent.gyp12
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/dependencies/extra_targets.gyp18
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/dependencies/gyptest-double-dependency.py19
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/test/dependencies/gyptest-extra-targets.py21
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/test/dependencies/gyptest-lib-only.py39
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/test/dependencies/gyptest-none-traversal.py25
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/test/dependencies/lib_only.gyp16
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/dependencies/main.c14
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/test/dependencies/none_traversal.gyp46
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/test/dependency-copy/gyptest-copy.py26
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/dependency-copy/src/copies.gyp25
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/dependency-copy/src/file1.c7
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/dependency-copy/src/file2.c7
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/errors/duplicate_basenames.gyp13
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/errors/duplicate_node.gyp12
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/errors/duplicate_rule.gyp22
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/errors/duplicate_targets.gyp14
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/test/errors/gyptest-errors.py49
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/errors/missing_dep.gyp15
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/errors/missing_targets.gyp8
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/escaping/colon/test.gyp21
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/escaping/gyptest-colon.py43
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/exclusion/exclusion.gyp23
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/test/exclusion/gyptest-exclusion.py22
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/exclusion/hello.c15
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/test/external-cross-compile/gyptest-cross.py35
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/external-cross-compile/src/bogus1.cc1
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/external-cross-compile/src/bogus2.c1
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/external-cross-compile/src/cross.gyp83
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/external-cross-compile/src/cross_compile.gypi23
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/external-cross-compile/src/fake_cross.py18
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/external-cross-compile/src/program.cc16
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/external-cross-compile/src/test1.cc1
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/external-cross-compile/src/test2.c1
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/external-cross-compile/src/test3.cc1
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/external-cross-compile/src/test4.c1
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/external-cross-compile/src/tochar.py13
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/generator-output/actions/actions.gyp16
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/generator-output/actions/build/README.txt4
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/generator-output/actions/subdir1/actions-out/README.txt4
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/generator-output/actions/subdir1/build/README.txt4
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/generator-output/actions/subdir1/executable.gyp44
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/test/generator-output/actions/subdir1/make-prog1.py20
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/test/generator-output/actions/subdir1/make-prog2.py20
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/generator-output/actions/subdir1/program.c12
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/generator-output/actions/subdir2/actions-out/README.txt4
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/generator-output/actions/subdir2/build/README.txt4
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/test/generator-output/actions/subdir2/make-file.py11
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/generator-output/actions/subdir2/none.gyp31
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/generator-output/copies/build/README.txt4
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/generator-output/copies/copies-out/README.txt4
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/generator-output/copies/copies.gyp50
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/generator-output/copies/file11
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/generator-output/copies/file21
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/generator-output/copies/subdir/build/README.txt4
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/generator-output/copies/subdir/copies-out/README.txt4
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/generator-output/copies/subdir/file31
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/generator-output/copies/subdir/file41
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/generator-output/copies/subdir/subdir.gyp32
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/test/generator-output/gyptest-actions.py58
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/test/generator-output/gyptest-copies.py59
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/generator-output/gyptest-mac-bundle.py29
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/test/generator-output/gyptest-relocate.py60
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/test/generator-output/gyptest-rules.py59
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/test/generator-output/gyptest-subdir2-deep.py37
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/test/generator-output/gyptest-top-all.py54
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/generator-output/mac-bundle/Info.plist32
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/generator-output/mac-bundle/app.order1
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/generator-output/mac-bundle/header.h1
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/generator-output/mac-bundle/main.c1
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/generator-output/mac-bundle/resource.sb1
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/generator-output/mac-bundle/test.gyp25
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/generator-output/rules/build/README.txt4
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/test/generator-output/rules/copy-file.py12
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/generator-output/rules/rules.gyp16
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/generator-output/rules/subdir1/build/README.txt4
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/generator-output/rules/subdir1/define3.in01
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/generator-output/rules/subdir1/define4.in01
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/generator-output/rules/subdir1/executable.gyp59
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/generator-output/rules/subdir1/function1.in16
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/generator-output/rules/subdir1/function2.in16
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/generator-output/rules/subdir1/program.c18
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/generator-output/rules/subdir2/build/README.txt4
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/generator-output/rules/subdir2/file1.in01
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/generator-output/rules/subdir2/file2.in01
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/generator-output/rules/subdir2/file3.in11
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/generator-output/rules/subdir2/file4.in11
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/generator-output/rules/subdir2/none.gyp49
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/generator-output/rules/subdir2/rules-out/README.txt4
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/generator-output/src/build/README.txt4
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/generator-output/src/inc.h1
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/generator-output/src/inc1/include1.h1
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/generator-output/src/prog1.c18
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/generator-output/src/prog1.gyp28
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/generator-output/src/subdir2/build/README.txt4
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/generator-output/src/subdir2/deeper/build/README.txt4
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/generator-output/src/subdir2/deeper/deeper.c7
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/generator-output/src/subdir2/deeper/deeper.gyp18
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/generator-output/src/subdir2/deeper/deeper.h1
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/generator-output/src/subdir2/inc2/include2.h1
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/generator-output/src/subdir2/prog2.c18
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/generator-output/src/subdir2/prog2.gyp28
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/generator-output/src/subdir3/build/README.txt4
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/generator-output/src/subdir3/inc3/include3.h1
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/generator-output/src/subdir3/prog3.c18
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/generator-output/src/subdir3/prog3.gyp25
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/generator-output/src/symroot.gypi16
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/gyp-defines/defines.gyp26
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/gyp-defines/echo.py11
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/gyp-defines/gyptest-multiple-values.py34
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/gyp-defines/gyptest-regyp.py40
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/test/hard_dependency/gyptest-exported-hard-dependency.py37
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/test/hard_dependency/gyptest-no-exported-hard-dependency.py36
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/hard_dependency/src/a.c9
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/hard_dependency/src/a.h12
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/hard_dependency/src/b.c9
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/hard_dependency/src/b.h12
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/hard_dependency/src/c.c10
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/hard_dependency/src/c.h10
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/hard_dependency/src/d.c9
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/test/hard_dependency/src/emit.py11
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/hard_dependency/src/hard_dependency.gyp78
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/test/hello/gyptest-all.py24
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/test/hello/gyptest-default.py24
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/test/hello/gyptest-disable-regyp.py32
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/test/hello/gyptest-regyp.py32
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/test/hello/gyptest-target.py24
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/hello/hello.c11
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/hello/hello.gyp15
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/hello/hello2.c11
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/hello/hello2.gyp15
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/test/home_dot_gyp/gyptest-home-includes-regyp.py44
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/test/home_dot_gyp/gyptest-home-includes.py30
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/home_dot_gyp/home/.gyp/include.gypi5
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/home_dot_gyp/home2/.gyp/include.gypi5
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/home_dot_gyp/src/all.gyp22
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/home_dot_gyp/src/printfoo.c7
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/test/include_dirs/gyptest-all.py46
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/test/include_dirs/gyptest-default.py46
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/include_dirs/src/inc.h1
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/include_dirs/src/inc1/include1.h1
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/include_dirs/src/includes.c19
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/include_dirs/src/includes.gyp27
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/include_dirs/src/shadow1/shadow.h1
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/include_dirs/src/shadow2/shadow.h1
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/include_dirs/src/subdir/inc.h1
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/include_dirs/src/subdir/inc2/include2.h1
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/include_dirs/src/subdir/subdir_includes.c14
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/include_dirs/src/subdir/subdir_includes.gyp20
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/test/intermediate_dir/gyptest-intermediate-dir.py42
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/test/intermediate_dir/src/script.py24
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/intermediate_dir/src/shared_infile.txt1
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/intermediate_dir/src/test.gyp42
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/intermediate_dir/src/test2.gyp42
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/lib/README.txt17
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/lib/TestCmd.py1597
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/lib/TestCommon.py570
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/lib/TestGyp.py1050
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/test/library/gyptest-shared-obj-install-path.py42
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/test/library/gyptest-shared.py84
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/test/library/gyptest-static.py84
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/library/src/lib1.c10
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/library/src/lib1_moveable.c10
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/library/src/lib2.c10
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/library/src/lib2_moveable.c10
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/library/src/library.gyp58
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/library/src/program.c15
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/library/src/shared_dependency.gyp33
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/link-objects/base.c6
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/link-objects/extra.c5
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/test/link-objects/gyptest-all.py28
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/link-objects/link-objects.gyp24
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/mac/action-envvars/action/action.gyp34
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/test/mac/action-envvars/action/action.sh8
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/mac/app-bundle/TestApp/English.lproj/InfoPlist.strings3
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/mac/app-bundle/TestApp/English.lproj/MainMenu.xib4119
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/mac/app-bundle/TestApp/TestApp-Info.plist32
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/mac/app-bundle/TestApp/TestAppAppDelegate.h13
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/mac/app-bundle/TestApp/TestAppAppDelegate.m15
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/mac/app-bundle/TestApp/main.m10
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/mac/app-bundle/empty.c0
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/mac/app-bundle/test.gyp39
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/mac/archs/my_file.cc4
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/mac/archs/my_main_file.cc9
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/mac/archs/test-archs-x86_64.gyp27
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/mac/archs/test-no-archs.gyp21
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/mac/cflags/ccfile.cc7
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/mac/cflags/ccfile_withcflags.cc7
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/mac/cflags/cfile.c7
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/mac/cflags/cppfile.cpp7
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/mac/cflags/cppfile_withcflags.cpp7
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/mac/cflags/cxxfile.cxx7
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/mac/cflags/cxxfile_withcflags.cxx7
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/mac/cflags/mfile.m7
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/mac/cflags/mmfile.mm7
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/mac/cflags/mmfile_withcflags.mm7
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/mac/cflags/test.gyp119
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/mac/copy-dylib/empty.c1
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/mac/copy-dylib/test.gyp31
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/mac/debuginfo/file.c6
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/mac/debuginfo/test.gyp82
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/mac/depend-on-bundle/English.lproj/InfoPlist.strings1
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/mac/depend-on-bundle/Info.plist28
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/mac/depend-on-bundle/bundle.c1
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/mac/depend-on-bundle/executable.c4
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/mac/depend-on-bundle/test.gyp28
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/mac/framework-dirs/calculate.c15
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/mac/framework-dirs/framework-dirs.gyp21
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/mac/framework-headers/myframework.h8
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/mac/framework-headers/myframework.m8
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/mac/framework-headers/test.gyp44
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/mac/framework/TestFramework/English.lproj/InfoPlist.strings2
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/mac/framework/TestFramework/Info.plist28
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/mac/framework/TestFramework/ObjCVector.h28
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/mac/framework/TestFramework/ObjCVector.mm63
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/mac/framework/TestFramework/ObjCVectorInternal.h9
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/mac/framework/TestFramework/TestFramework_Prefix.pch7
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/mac/framework/empty.c0
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/mac/framework/framework.gyp74
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/mac/global-settings/src/dir1/dir1.gyp11
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/mac/global-settings/src/dir2/dir2.gyp22
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/mac/global-settings/src/dir2/file.txt1
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/mac/gyptest-action-envvars.py30
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/test/mac/gyptest-app.py47
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/mac/gyptest-archs.py37
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/mac/gyptest-cflags.py21
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/test/mac/gyptest-copies.py49
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/mac/gyptest-copy-dylib.py25
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/test/mac/gyptest-debuginfo.py36
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/mac/gyptest-depend-on-bundle.py40
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/mac/gyptest-framework-dirs.py23
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/mac/gyptest-framework-headers.py38
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/test/mac/gyptest-framework.py50
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/mac/gyptest-global-settings.py26
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/test/mac/gyptest-infoplist-process.py51
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/mac/gyptest-installname.py79
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/mac/gyptest-ldflags-passed-to-libtool.py31
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/mac/gyptest-ldflags.py68
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/test/mac/gyptest-libraries.py22
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/test/mac/gyptest-loadable-module.py45
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/mac/gyptest-missing-cfbundlesignature.py29
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/mac/gyptest-non-strs-flattened-to-env.py33
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/mac/gyptest-objc-gc.py45
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/mac/gyptest-postbuild-copy-bundle.py62
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/mac/gyptest-postbuild-defaults.py29
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/test/mac/gyptest-postbuild-fail.py55
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/mac/gyptest-postbuild-multiple-configurations.py26
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/mac/gyptest-postbuild-static-library.gyp28
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/test/mac/gyptest-postbuild.py53
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/test/mac/gyptest-prefixheader.py19
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/test/mac/gyptest-rebuild.py41
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/mac/gyptest-rpath.py49
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/mac/gyptest-sdkroot.py20
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/mac/gyptest-sourceless-module.gyp46
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/test/mac/gyptest-strip.py53
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/test/mac/gyptest-type-envvars.py24
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/test/mac/gyptest-xcode-env-order.py83
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/mac/gyptest-xcode-gcc.py39
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/mac/infoplist-process/Info.plist36
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/mac/infoplist-process/main.c7
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/mac/infoplist-process/test1.gyp25
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/mac/infoplist-process/test2.gyp25
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/mac/infoplist-process/test3.gyp25
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/mac/installname/Info.plist28
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/mac/installname/file.c1
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/mac/installname/main.c1
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/mac/installname/test.gyp93
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/mac/ldflags-libtool/file.c1
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/mac/ldflags-libtool/test.gyp17
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/mac/ldflags/subdirectory/Info.plist8
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/mac/ldflags/subdirectory/file.c2
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/mac/ldflags/subdirectory/symbol_list.def1
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/mac/ldflags/subdirectory/test.gyp66
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/mac/libraries/subdir/README.txt1
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/mac/libraries/subdir/hello.cc10
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/mac/libraries/subdir/mylib.c7
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/mac/libraries/subdir/test.gyp66
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/mac/loadable-module/Info.plist26
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/mac/loadable-module/module.c11
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/mac/loadable-module/test.gyp18
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/mac/missing-cfbundlesignature/Info.plist10
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/mac/missing-cfbundlesignature/Other-Info.plist12
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/mac/missing-cfbundlesignature/Third-Info.plist12
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/mac/missing-cfbundlesignature/file.c1
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/mac/missing-cfbundlesignature/test.gyp34
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/mac/non-strs-flattened-to-env/Info.plist15
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/mac/non-strs-flattened-to-env/main.c7
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/mac/non-strs-flattened-to-env/test.gyp24
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/mac/objc-gc/c-file.c1
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/mac/objc-gc/cc-file.cc1
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/mac/objc-gc/main.m6
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/mac/objc-gc/needs-gc-mm.mm1
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/mac/objc-gc/needs-gc.m1
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/mac/objc-gc/test.gyp102
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/mac/postbuild-copy-bundle/Framework-Info.plist30
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/mac/postbuild-copy-bundle/TestApp-Info.plist32
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/mac/postbuild-copy-bundle/empty.c0
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/mac/postbuild-copy-bundle/main.c4
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/test/mac/postbuild-copy-bundle/postbuild-copy-framework.sh9
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/mac/postbuild-copy-bundle/resource_file.sb1
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/mac/postbuild-copy-bundle/test.gyp43
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/mac/postbuild-defaults/Info.plist13
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/mac/postbuild-defaults/main.c7
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/test/mac/postbuild-defaults/postbuild-defaults.sh15
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/mac/postbuild-defaults/test.gyp26
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/mac/postbuild-fail/file.c6
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/test/mac/postbuild-fail/postbuild-fail.sh6
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/mac/postbuild-fail/test.gyp38
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/test/mac/postbuild-fail/touch-dynamic.sh7
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/test/mac/postbuild-fail/touch-static.sh7
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/mac/postbuild-multiple-configurations/main.c4
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/test/mac/postbuild-multiple-configurations/postbuild-touch-file.sh7
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/mac/postbuild-multiple-configurations/test.gyp26
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/mac/postbuild-static-library/empty.c4
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/test/mac/postbuild-static-library/postbuild-touch-file.sh7
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/mac/postbuild-static-library/test.gyp34
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/test/mac/postbuilds/copy.sh3
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/mac/postbuilds/file.c4
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/mac/postbuilds/file_g.c4
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/mac/postbuilds/file_h.c4
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/test/mac/postbuilds/script/shared_library_postbuild.sh23
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/test/mac/postbuilds/script/static_library_postbuild.sh23
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/mac/postbuilds/subdirectory/copied_file.txt1
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/mac/postbuilds/subdirectory/nested_target.gyp53
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/mac/postbuilds/test.gyp87
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/mac/prefixheader/file.c1
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/mac/prefixheader/file.cc1
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/mac/prefixheader/file.m1
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/mac/prefixheader/file.mm1
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/mac/prefixheader/header.h1
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/mac/prefixheader/test.gyp82
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/mac/rebuild/TestApp-Info.plist32
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/test/mac/rebuild/delay-touch.sh6
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/mac/rebuild/empty.c0
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/mac/rebuild/main.c1
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/mac/rebuild/test.gyp56
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/mac/rpath/file.c1
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/mac/rpath/main.c1
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/mac/rpath/test.gyp48
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/mac/sdkroot/file.cc5
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/mac/sdkroot/test.gyp21
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/test/mac/sdkroot/test_shorthand.sh8
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/mac/sourceless-module/empty.c1
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/mac/sourceless-module/test.gyp39
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/mac/strip/file.c9
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/mac/strip/strip.saves5
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/mac/strip/subdirectory/nested_file.c1
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/mac/strip/subdirectory/nested_strip.saves5
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/mac/strip/subdirectory/subdirectory.gyp38
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/test/mac/strip/subdirectory/test_reading_save_file_from_postbuild.sh5
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/mac/strip/test.gyp119
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/mac/type_envvars/file.c6
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/mac/type_envvars/test.gyp100
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/test/mac/type_envvars/test_bundle_executable.sh21
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/test/mac/type_envvars/test_bundle_loadable_module.sh22
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/test/mac/type_envvars/test_bundle_shared_library.sh23
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/test/mac/type_envvars/test_nonbundle_executable.sh22
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/test/mac/type_envvars/test_nonbundle_loadable_module.sh21
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/test/mac/type_envvars/test_nonbundle_none.sh22
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/test/mac/type_envvars/test_nonbundle_shared_library.sh21
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/test/mac/type_envvars/test_nonbundle_static_library.sh21
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/mac/xcode-env-order/Info.plist56
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/mac/xcode-env-order/file.ext10
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/mac/xcode-env-order/file.ext20
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/mac/xcode-env-order/file.ext30
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/mac/xcode-env-order/main.c7
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/mac/xcode-env-order/test.gyp121
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/mac/xcode-gcc/test.gyp60
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/mac/xcode-gcc/valid_c.c8
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/mac/xcode-gcc/valid_cc.cc8
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/mac/xcode-gcc/valid_m.m8
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/mac/xcode-gcc/valid_mm.mm8
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/mac/xcode-gcc/warn_about_invalid_offsetof_macro.cc15
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/mac/xcode-gcc/warn_about_missing_newline.c8
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/make/dependencies.gyp15
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/test/make/gyptest-dependencies.py26
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/test/make/gyptest-noload.py57
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/make/main.cc12
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/make/main.h0
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/make/noload/all.gyp18
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/make/noload/lib/shared.c3
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/make/noload/lib/shared.gyp16
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/make/noload/lib/shared.h1
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/make/noload/main.c9
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/many-actions/file00
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/many-actions/file10
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/many-actions/file20
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/many-actions/file30
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/many-actions/file40
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/many-actions/gyptest-many-actions-unsorted.py34
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/many-actions/gyptest-many-actions.py20
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/many-actions/many-actions-unsorted.gyp154
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/many-actions/many-actions.gyp1817
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/test/module/gyptest-default.py29
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/module/src/lib1.c10
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/module/src/lib2.c10
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/module/src/module.gyp55
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/module/src/program.c111
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/msvs/config_attrs/gyptest-config_attrs.py31
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/msvs/config_attrs/hello.c11
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/msvs/config_attrs/hello.gyp21
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/msvs/express/base/base.gyp22
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/msvs/express/express.gyp19
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/test/msvs/express/gyptest-express.py29
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/msvs/list_excluded/gyptest-all.py51
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/msvs/list_excluded/hello.cpp10
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/msvs/list_excluded/hello_exclude.gyp19
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/msvs/list_excluded/hello_mac.cpp10
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/msvs/missing_sources/gyptest-missing.py43
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/msvs/missing_sources/hello_missing.gyp15
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/msvs/props/AppName.props14
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/msvs/props/AppName.vsprops11
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/msvs/props/gyptest-props.py22
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/msvs/props/hello.c11
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/msvs/props/hello.gyp22
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/msvs/shared_output/common.gypi17
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/msvs/shared_output/gyptest-shared_output.py41
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/msvs/shared_output/hello.c12
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/msvs/shared_output/hello.gyp21
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/msvs/shared_output/there/there.c12
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/msvs/shared_output/there/there.gyp16
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/msvs/uldi2010/gyptest-all.py20
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/msvs/uldi2010/hello.c13
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/msvs/uldi2010/hello.gyp26
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/msvs/uldi2010/hello2.c10
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/test/multiple-targets/gyptest-all.py35
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/test/multiple-targets/gyptest-default.py35
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/multiple-targets/src/common.c7
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/multiple-targets/src/multiple.gyp24
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/multiple-targets/src/prog1.c10
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/multiple-targets/src/prog2.c10
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/test/ninja/action_dependencies/gyptest-action-dependencies.py53
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/ninja/action_dependencies/src/a.c10
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/ninja/action_dependencies/src/a.h13
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/ninja/action_dependencies/src/action_dependencies.gyp88
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/ninja/action_dependencies/src/b.c18
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/ninja/action_dependencies/src/b.h13
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/ninja/action_dependencies/src/c.c10
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/ninja/action_dependencies/src/c.h13
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/test/ninja/action_dependencies/src/emit.py11
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/ninja/chained-dependency/chained-dependency.gyp53
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/ninja/chained-dependency/chained.c5
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/test/ninja/chained-dependency/gyptest-chained-dependency.py26
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/ninja/normalize-paths-win/gyptest-normalize-paths.py42
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/ninja/normalize-paths-win/hello.cc7
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/ninja/normalize-paths-win/normalize-paths.gyp56
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/ninja/s-needs-no-depfiles/empty.s1
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/test/ninja/s-needs-no-depfiles/gyptest-s-needs-no-depfiles.py42
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/ninja/s-needs-no-depfiles/s-needs-no-depfiles.gyp13
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/test/ninja/solibs_avoid_relinking/gyptest-solibs-avoid-relinking.py41
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/ninja/solibs_avoid_relinking/main.cc5
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/ninja/solibs_avoid_relinking/solib.cc8
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/ninja/solibs_avoid_relinking/solibs_avoid_relinking.gyp38
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/test/no-output/gyptest-no-output.py21
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/no-output/src/nooutput.gyp17
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/test/product/gyptest-product.py44
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/product/hello.c15
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/product/product.gyp128
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/relative/foo/a/a.cc9
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/relative/foo/a/a.gyp13
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/relative/foo/a/c/c.cc9
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/relative/foo/a/c/c.gyp12
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/relative/foo/b/b.cc9
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/relative/foo/b/b.gyp9
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/test/relative/gyptest-default.py25
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/rename/filecase/file.c1
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/rename/filecase/test-casesensitive.gyp15
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/rename/filecase/test.gyp14
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/rename/gyptest-filecase.py35
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/restat/gyptest-restat.py31
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/restat/src/create_intermediate.py17
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/restat/src/restat.gyp50
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/restat/src/touch.py16
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/test/rules-dirname/gyptest-dirname.py38
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/rules-dirname/src/actions.gyp15
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/test/rules-dirname/src/copy-file.py11
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/rules-dirname/src/subdir/a/b/c.gencc11
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/rules-dirname/src/subdir/a/b/c.printvars1
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/rules-dirname/src/subdir/foo/bar/baz.gencc11
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/rules-dirname/src/subdir/foo/bar/baz.printvars1
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/rules-dirname/src/subdir/input-rule-dirname.gyp92
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/rules-dirname/src/subdir/main.cc12
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/test/rules-dirname/src/subdir/printvars.py14
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/test/rules-rebuild/gyptest-all.py70
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/test/rules-rebuild/gyptest-default.py91
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/rules-rebuild/src/main.c12
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/test/rules-rebuild/src/make-sources.py19
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/rules-rebuild/src/prog1.in7
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/rules-rebuild/src/prog2.in7
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/rules-rebuild/src/same_target.gyp31
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/test/rules-variables/gyptest-rules-variables.py26
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/rules-variables/src/input_ext.c9
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/rules-variables/src/input_name/test.c9
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/rules-variables/src/input_path/subdir/test.c9
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/rules-variables/src/subdir/input_dirname.c9
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/rules-variables/src/subdir/test.c18
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/rules-variables/src/test.input_root.c9
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/rules-variables/src/variables.gyp40
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/test/rules/gyptest-all.py69
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/test/rules/gyptest-default.py55
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/test/rules/gyptest-input-root.py26
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/rules/gyptest-special-variables.py18
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/rules/src/actions.gyp22
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/rules/src/an_asm.S6
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/rules/src/as.bat7
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/test/rules/src/copy-file.py11
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/rules/src/external/external.gyp66
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/rules/src/external/file1.in1
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/rules/src/external/file2.in1
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/rules/src/input-root.gyp24
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/rules/src/noaction/file1.in1
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/rules/src/noaction/no_action_with_rules_fails.gyp37
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/test/rules/src/rule.py17
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/rules/src/somefile.ext0
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/rules/src/special-variables.gyp35
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/rules/src/subdir1/executable.gyp37
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/rules/src/subdir1/function1.in6
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/rules/src/subdir1/function2.in6
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/rules/src/subdir1/program.c12
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/rules/src/subdir2/file1.in1
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/rules/src/subdir2/file2.in1
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/rules/src/subdir2/never_used.gyp31
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/rules/src/subdir2/no_action.gyp38
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/rules/src/subdir2/no_inputs.gyp32
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/rules/src/subdir2/none.gyp33
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/rules/src/subdir3/executable2.gyp37
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/rules/src/subdir3/function3.in6
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/rules/src/subdir3/program.c10
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/rules/src/subdir4/asm-function.asm10
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/rules/src/subdir4/build-asm.gyp49
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/rules/src/subdir4/program.c19
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/test/same-gyp-name/gyptest-all.py38
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/test/same-gyp-name/gyptest-default.py38
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/same-gyp-name/gyptest-library.py20
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/same-gyp-name/library/one/sub.gyp11
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/same-gyp-name/library/test.gyp15
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/same-gyp-name/library/two/sub.gyp11
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/same-gyp-name/src/all.gyp16
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/same-gyp-name/src/subdir1/executable.gyp15
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/same-gyp-name/src/subdir1/main1.cc6
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/same-gyp-name/src/subdir2/executable.gyp15
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/same-gyp-name/src/subdir2/main2.cc6
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/same-rule-output-file-name/gyptest-all.py23
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/same-rule-output-file-name/src/subdir1/subdir1.gyp30
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/same-rule-output-file-name/src/subdir2/subdir2.gyp30
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/same-rule-output-file-name/src/subdirs.gyp16
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/same-rule-output-file-name/src/touch.py11
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/test/same-source-file-name/gyptest-all.py34
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/test/same-source-file-name/gyptest-default.py34
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/same-source-file-name/gyptest-fail.py0
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/same-source-file-name/src/all.gyp30
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/same-source-file-name/src/double.gyp0
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/same-source-file-name/src/func.c6
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/same-source-file-name/src/prog1.c16
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/same-source-file-name/src/prog2.c16
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/same-source-file-name/src/subdir1/func.c6
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/same-source-file-name/src/subdir2/func.c6
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/same-target-name-different-directory/gyptest-all.py36
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/same-target-name-different-directory/src/subdir1/subdir1.gyp66
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/same-target-name-different-directory/src/subdir2/subdir2.gyp66
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/same-target-name-different-directory/src/subdirs.gyp16
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/same-target-name-different-directory/src/touch.py11
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/test/same-target-name/gyptest-same-target-name.py18
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/same-target-name/src/all.gyp16
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/same-target-name/src/executable1.gyp15
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/same-target-name/src/executable2.gyp15
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/sanitize-rule-names/blah.S0
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/sanitize-rule-names/gyptest-sanitize-rule-names.py17
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/sanitize-rule-names/hello.cc7
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/sanitize-rule-names/sanitize-rule-names.gyp27
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/sanitize-rule-names/script.py10
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/test/scons_tools/gyptest-tools.py26
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/scons_tools/site_scons/site_tools/this_tool.py10
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/scons_tools/tools.c13
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/scons_tools/tools.gyp18
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/test/sibling/gyptest-all.py39
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/test/sibling/gyptest-relocate.py41
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/sibling/src/build/all.gyp17
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/sibling/src/prog1/prog1.c7
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/sibling/src/prog1/prog1.gyp15
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/sibling/src/prog2/prog2.c7
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/sibling/src/prog2/prog2.gyp15
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/test/small/gyptest-small.py53
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/standalone-static-library/gyptest-standalone-static-library.py53
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/standalone-static-library/invalid.gyp16
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/standalone-static-library/mylib.c7
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/standalone-static-library/mylib.gyp26
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/standalone-static-library/prog.c7
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/standalone/gyptest-standalone.py33
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/standalone/standalone.gyp12
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/test/subdirectory/gyptest-SYMROOT-all.py36
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/test/subdirectory/gyptest-SYMROOT-default.py37
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/test/subdirectory/gyptest-subdir-all.py33
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/test/subdirectory/gyptest-subdir-default.py33
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/test/subdirectory/gyptest-subdir2-deep.py25
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/test/subdirectory/gyptest-top-all.py43
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/test/subdirectory/gyptest-top-default.py43
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/subdirectory/src/prog1.c7
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/subdirectory/src/prog1.gyp21
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/subdirectory/src/subdir/prog2.c7
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/subdirectory/src/subdir/prog2.gyp18
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/subdirectory/src/subdir/subdir2/prog3.c7
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/subdirectory/src/subdir/subdir2/prog3.gyp18
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/subdirectory/src/symroot.gypi16
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/test/toolsets/gyptest-toolsets.py23
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/toolsets/main.cc11
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/toolsets/toolsets.cc11
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/toolsets/toolsets.gyp49
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/test/toplevel-dir/gyptest-toplevel-dir.py31
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/toplevel-dir/src/sub1/main.gyp18
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/toplevel-dir/src/sub1/prog1.c7
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/toplevel-dir/src/sub2/prog2.c7
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/toplevel-dir/src/sub2/prog2.gyp15
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/variables/commands/commands-repeated.gyp128
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/variables/commands/commands-repeated.gyp.stdout136
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/variables/commands/commands-repeated.gypd.golden72
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/variables/commands/commands.gyp86
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/variables/commands/commands.gyp.ignore-env.stdout86
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/variables/commands/commands.gyp.stdout86
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/variables/commands/commands.gypd.golden56
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/variables/commands/commands.gypi16
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/test/variables/commands/gyptest-commands-ignore-env.py46
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/test/variables/commands/gyptest-commands-repeated.py38
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/test/variables/commands/gyptest-commands.py39
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/variables/commands/test.py1
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/test/variables/commands/update_golden11
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/variables/filelist/filelist.gyp.stdout26
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/variables/filelist/filelist.gypd.golden43
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/test/variables/filelist/gyptest-filelist.py50
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/variables/filelist/src/filelist.gyp93
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/test/variables/filelist/update_golden8
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/test/variables/latelate/gyptest-latelate.py25
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/variables/latelate/src/latelate.gyp34
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/variables/latelate/src/program.cc13
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/variables/variable-in-path/C1/hello.cc7
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/variables/variable-in-path/gyptest-variable-in-path.py23
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/variables/variable-in-path/variable-in-path.gyp31
-rwxr-xr-xdeps/npm/node_modules/node-gyp/gyp/test/variants/gyptest-variants.py45
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/variants/src/variants.c13
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/variants/src/variants.gyp27
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/win/asm-files/asm-files.gyp17
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/win/asm-files/b.s0
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/win/asm-files/c.S0
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/win/asm-files/hello.cc7
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/win/batch-file-action/batch-file-action.gyp21
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/win/batch-file-action/infile1
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/win/batch-file-action/somecmd.bat5
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/win/command-quote/a.S0
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/win/command-quote/bat with spaces.bat7
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/win/command-quote/command-quote.gyp84
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/win/command-quote/go.bat7
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/win/command-quote/subdir/and/another/in-subdir.gyp28
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/win/compiler-flags/additional-include-dirs.cc10
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/win/compiler-flags/additional-include-dirs.gyp20
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/win/compiler-flags/additional-options.cc10
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/win/compiler-flags/additional-options.gyp31
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/win/compiler-flags/analysis.gyp40
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/win/compiler-flags/buffer-security-check.gyp51
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/win/compiler-flags/buffer-security.cc12
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/win/compiler-flags/character-set-mbcs.cc11
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/win/compiler-flags/character-set-unicode.cc15
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/win/compiler-flags/character-set.gyp35
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/win/compiler-flags/debug-format.gyp48
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/win/compiler-flags/exception-handling-on.cc24
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/win/compiler-flags/exception-handling.gyp46
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/win/compiler-flags/function-level-linking.cc11
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/win/compiler-flags/function-level-linking.gyp28
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/win/compiler-flags/hello.cc7
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/win/compiler-flags/optimizations.gyp147
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/win/compiler-flags/pdbname.cc7
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/win/compiler-flags/pdbname.gyp24
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/win/compiler-flags/rtti-on.cc11
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/win/compiler-flags/rtti.gyp37
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/win/compiler-flags/runtime-checks.cc11
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/win/compiler-flags/runtime-checks.gyp29
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/win/compiler-flags/runtime-library-md.cc19
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/win/compiler-flags/runtime-library-mdd.cc19
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/win/compiler-flags/runtime-library-mt.cc19
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/win/compiler-flags/runtime-library-mtd.cc19
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/win/compiler-flags/runtime-library.gyp48
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/win/compiler-flags/subdir/header.h0
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/win/compiler-flags/uninit.cc13
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/win/compiler-flags/warning-as-error.cc9
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/win/compiler-flags/warning-as-error.gyp37
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/win/compiler-flags/warning-level.gyp115
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/win/compiler-flags/warning-level1.cc8
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/win/compiler-flags/warning-level2.cc14
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/win/compiler-flags/warning-level3.cc11
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/win/compiler-flags/warning-level4.cc10
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-asm-files.py26
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-cl-additional-include-dirs.py22
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-cl-additional-options.py28
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-cl-analysis.py30
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-cl-buffer-security-check.py53
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-cl-character-set.py22
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-cl-debug-format.py43
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-cl-exception-handling.py33
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-cl-function-level-linking.py52
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-cl-optimizations.py79
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-cl-pdbname.py26
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-cl-rtti.py30
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-cl-runtime-checks.py30
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-cl-runtime-library.py22
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-cl-warning-as-error.py30
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-cl-warning-level.py41
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-command-quote.py37
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-link-additional-deps.py22
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-link-additional-options.py22
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-link-aslr.py35
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-link-debug-info.py26
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-link-default-libs.py22
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-link-deffile.py43
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-link-delay-load-dlls.py35
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-link-entrypointsymbol.py24
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-link-fixed-base.py40
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-link-generate-manifest.py44
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-link-incremental.py37
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-link-library-adjust.py21
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-link-library-directories.py35
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-link-nodefaultlib.py24
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-link-nxcompat.py37
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-link-opt-icf.py41
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-link-opt-ref.py40
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-link-outputfile.py28
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-link-pdb.py34
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-link-profile.py37
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-link-restat-importlib.py39
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-link-subsystem.py28
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-link-uldi.py28
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-long-command-line.py23
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-macro-projectname.py24
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-macro-vcinstalldir.py24
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-macros-containing-gyp.py21
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-macros-in-inputs-and-outputs.py27
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-midl-rules.py22
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-quoting-commands.py25
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-rc-build.py24
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/win/idl-rules/basic-idl.gyp30
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/win/idl-rules/history_indexer.idl17
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/win/idl-rules/history_indexer_user.cc15
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/win/importlib/has-exports.cc10
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/win/importlib/hello.cc9
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/win/importlib/importlib.gyp30
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/win/linker-flags/additional-deps.cc10
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/win/linker-flags/additional-deps.gyp30
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/win/linker-flags/additional-options.gyp29
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/win/linker-flags/aslr.gyp35
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/win/linker-flags/debug-info.gyp28
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/win/linker-flags/default-libs.cc30
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/win/linker-flags/default-libs.gyp13
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/win/linker-flags/deffile-multiple.gyp17
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/win/linker-flags/deffile.cc10
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/win/linker-flags/deffile.def8
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/win/linker-flags/deffile.gyp38
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/win/linker-flags/delay-load-dlls.gyp27
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/win/linker-flags/delay-load.cc10
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/win/linker-flags/entrypointsymbol.cc13
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/win/linker-flags/entrypointsymbol.gyp28
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/win/linker-flags/extra.manifest11
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/win/linker-flags/extra2.manifest11
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/win/linker-flags/fixed-base.gyp52
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/win/linker-flags/generate-manifest.gyp64
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/win/linker-flags/hello.cc7
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/win/linker-flags/incremental.gyp65
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/win/linker-flags/library-adjust.cc10
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/win/linker-flags/library-adjust.gyp16
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/win/linker-flags/library-directories-define.cc7
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/win/linker-flags/library-directories-reference.cc10
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/win/linker-flags/library-directories.gyp42
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/win/linker-flags/nodefaultlib.cc13
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/win/linker-flags/nodefaultlib.gyp30
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/win/linker-flags/nxcompat.gyp35
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/win/linker-flags/opt-icf.cc29
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/win/linker-flags/opt-icf.gyp63
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/win/linker-flags/opt-ref.cc11
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/win/linker-flags/opt-ref.gyp56
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/win/linker-flags/outputfile.gyp58
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/win/linker-flags/profile.gyp50
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/win/linker-flags/program-database.gyp39
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/win/linker-flags/subdir/library.gyp13
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/win/linker-flags/subsystem-windows.cc9
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/win/linker-flags/subsystem.gyp48
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/win/long-command-line/function.cc7
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/win/long-command-line/hello.cc7
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/win/long-command-line/long-command-line.gyp54
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/win/precompiled/gyptest-all.py21
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/win/precompiled/hello.c14
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/win/precompiled/hello.gyp28
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/win/precompiled/hello2.c13
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/win/precompiled/precomp.c8
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/win/rc-build/Resource.h26
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/win/rc-build/hello.cpp30
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/win/rc-build/hello.gyp58
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/win/rc-build/hello.h3
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/win/rc-build/hello.icobin23558 -> 0 bytes
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/win/rc-build/hello.rc86
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/win/rc-build/small.icobin23558 -> 0 bytes
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/win/rc-build/subdir/hello2.rc87
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/win/rc-build/subdir/include.h1
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/win/rc-build/targetver.h24
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/win/uldi/a.cc7
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/win/uldi/b.cc7
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/win/uldi/main.cc10
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/win/uldi/uldi.gyp45
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/win/vs-macros/as.py18
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/win/vs-macros/containing-gyp.gyp40
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/win/vs-macros/do_stuff.py8
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/win/vs-macros/hello.cc7
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/win/vs-macros/input-output-macros.gyp33
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/win/vs-macros/input.S0
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/win/vs-macros/projectname.gyp29
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/win/vs-macros/stuff.blah1
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/win/vs-macros/test_exists.py10
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/test/win/vs-macros/vcinstalldir.gyp41
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/tools/emacs/gyp-tests.el11
-rw-r--r--deps/npm/node_modules/node-gyp/gyp/tools/emacs/gyp.el3
-rw-r--r--deps/npm/node_modules/node-gyp/legacy/common.gypi205
-rw-r--r--deps/npm/node_modules/node-gyp/lib/build.js2
-rw-r--r--deps/npm/node_modules/node-gyp/lib/configure.js117
-rw-r--r--deps/npm/node_modules/node-gyp/lib/install.js145
-rw-r--r--deps/npm/node_modules/node-gyp/lib/node-gyp.js21
-rw-r--r--deps/npm/node_modules/node-gyp/lib/remove.js2
-rw-r--r--deps/npm/node_modules/node-gyp/package.json15
-rw-r--r--deps/npm/node_modules/nopt/README.md8
-rw-r--r--deps/npm/node_modules/nopt/lib/nopt.js210
-rw-r--r--deps/npm/node_modules/nopt/package.json16
-rw-r--r--deps/npm/node_modules/nopt/test/basic.js243
-rw-r--r--deps/npm/node_modules/npm-install-checks/LICENSE234
-rw-r--r--deps/npm/node_modules/npm-install-checks/README.md25
-rw-r--r--deps/npm/node_modules/npm-install-checks/index.js146
-rw-r--r--deps/npm/node_modules/npm-install-checks/package.json43
-rw-r--r--deps/npm/node_modules/npm-install-checks/test/check-engine.js35
-rw-r--r--deps/npm/node_modules/npm-install-checks/test/check-git.js31
-rw-r--r--deps/npm/node_modules/npm-install-checks/test/check-platform.js44
-rw-r--r--deps/npm/node_modules/npm-registry-client/README.md19
-rw-r--r--deps/npm/node_modules/npm-registry-client/index.js16
-rw-r--r--deps/npm/node_modules/npm-registry-client/lib/adduser.js12
-rw-r--r--deps/npm/node_modules/npm-registry-client/lib/bugs.js9
-rw-r--r--deps/npm/node_modules/npm-registry-client/lib/deprecate.js28
-rw-r--r--deps/npm/node_modules/npm-registry-client/lib/get.js12
-rw-r--r--deps/npm/node_modules/npm-registry-client/lib/publish.js164
-rw-r--r--deps/npm/node_modules/npm-registry-client/lib/request.js105
-rw-r--r--deps/npm/node_modules/npm-registry-client/lib/star.js2
-rw-r--r--deps/npm/node_modules/npm-registry-client/lib/unpublish.js5
-rw-r--r--deps/npm/node_modules/npm-registry-client/node_modules/couch-login/.npmignore4
-rw-r--r--deps/npm/node_modules/npm-registry-client/node_modules/couch-login/README.md260
-rw-r--r--deps/npm/node_modules/npm-registry-client/node_modules/couch-login/couch-login.js385
-rw-r--r--deps/npm/node_modules/npm-registry-client/node_modules/couch-login/package.json31
-rw-r--r--deps/npm/node_modules/npm-registry-client/node_modules/couch-login/test/00-setup.js100
-rw-r--r--deps/npm/node_modules/npm-registry-client/node_modules/couch-login/test/basic.js297
-rw-r--r--deps/npm/node_modules/npm-registry-client/node_modules/couch-login/test/fixtures/_replicator.couchbin4194 -> 0 bytes
-rw-r--r--deps/npm/node_modules/npm-registry-client/node_modules/couch-login/test/fixtures/couch.ini24
-rw-r--r--deps/npm/node_modules/npm-registry-client/node_modules/couch-login/test/fixtures/registry.couchbin24674 -> 0 bytes
-rw-r--r--deps/npm/node_modules/npm-registry-client/node_modules/couch-login/test/registry.js252
-rw-r--r--deps/npm/node_modules/npm-registry-client/node_modules/couch-login/test/reset-then-signup.js112
-rw-r--r--deps/npm/node_modules/npm-registry-client/node_modules/couch-login/test/zz-teardown.js23
-rw-r--r--deps/npm/node_modules/npm-registry-client/package.json17
-rw-r--r--deps/npm/node_modules/npm-registry-client/test/adduser-new.js4
-rw-r--r--deps/npm/node_modules/npm-registry-client/test/adduser-update.js6
-rw-r--r--deps/npm/node_modules/npm-registry-client/test/fixtures/server.js4
-rw-r--r--deps/npm/node_modules/npm-registry-client/test/publish-again.js81
-rw-r--r--deps/npm/node_modules/npm-registry-client/test/publish.js51
-rw-r--r--deps/npm/node_modules/npm-registry-client/test/request-gzip-content.js47
-rw-r--r--deps/npm/node_modules/npm-user-validate/.travis.yml4
-rw-r--r--deps/npm/node_modules/npm-user-validate/README.md5
-rw-r--r--deps/npm/node_modules/npm-user-validate/npm-user-validate.js26
-rw-r--r--deps/npm/node_modules/npm-user-validate/package.json24
-rw-r--r--deps/npm/node_modules/npmconf/config-defs.js150
-rwxr-xr-xdeps/npm/node_modules/npmconf/node_modules/config-chain/index.js2
-rw-r--r--deps/npm/node_modules/npmconf/node_modules/config-chain/node_modules/proto-list/package.json5
-rw-r--r--deps/npm/node_modules/npmconf/node_modules/config-chain/package.json8
-rw-r--r--deps/npm/node_modules/npmconf/node_modules/config-chain/test/get.js15
-rw-r--r--deps/npm/node_modules/npmconf/package.json18
-rw-r--r--deps/npm/node_modules/npmconf/test/basic.js1
-rw-r--r--deps/npm/node_modules/npmconf/test/builtin.js4
-rw-r--r--deps/npm/node_modules/npmlog/LICENSE22
-rw-r--r--deps/npm/node_modules/npmlog/log.js6
-rw-r--r--deps/npm/node_modules/npmlog/package.json26
-rw-r--r--deps/npm/node_modules/npmlog/test/basic.js265
-rw-r--r--deps/npm/node_modules/once/README.md18
-rw-r--r--deps/npm/node_modules/once/once.js11
-rw-r--r--deps/npm/node_modules/once/package.json12
-rw-r--r--deps/npm/node_modules/once/test/once.js4
-rw-r--r--deps/npm/node_modules/path-is-inside/LICENSE.txt19
-rw-r--r--deps/npm/node_modules/path-is-inside/README.md35
-rw-r--r--deps/npm/node_modules/path-is-inside/lib/path-is-inside.js28
-rw-r--r--deps/npm/node_modules/path-is-inside/package.json43
-rw-r--r--deps/npm/node_modules/read-installed/.npmignore13
-rw-r--r--deps/npm/node_modules/read-installed/LICENSE35
-rw-r--r--deps/npm/node_modules/read-installed/README.md15
-rw-r--r--deps/npm/node_modules/read-installed/node_modules/util-extend/README.md13
-rw-r--r--deps/npm/node_modules/read-installed/node_modules/util-extend/extend.js33
-rw-r--r--deps/npm/node_modules/read-installed/node_modules/util-extend/package.json23
-rw-r--r--deps/npm/node_modules/read-installed/node_modules/util-extend/test.js10
-rw-r--r--deps/npm/node_modules/read-installed/package.json29
-rw-r--r--deps/npm/node_modules/read-installed/read-installed.js134
-rw-r--r--deps/npm/node_modules/read-installed/test/basic.js29
-rw-r--r--deps/npm/node_modules/read-installed/test/depth-0.js25
-rw-r--r--deps/npm/node_modules/read-installed/test/depth-1.js23
-rw-r--r--deps/npm/node_modules/read-installed/test/dev.js23
-rw-r--r--deps/npm/node_modules/read-installed/test/extraneous.js17
-rw-r--r--deps/npm/node_modules/read-installed/test/fixtures/extraneous-detected/package.json7
-rw-r--r--deps/npm/node_modules/read-installed/test/fixtures/package.json27
-rw-r--r--deps/npm/node_modules/read-installed/test/noargs.js21
-rw-r--r--deps/npm/node_modules/read-installed/test/peer-dep-at-latest.js14
-rw-r--r--deps/npm/node_modules/read-package-json/.npmignore13
-rw-r--r--deps/npm/node_modules/read-package-json/LICENSE36
-rw-r--r--deps/npm/node_modules/read-package-json/README.md12
-rw-r--r--deps/npm/node_modules/read-package-json/node_modules/normalize-package-data/.travis.yml1
-rw-r--r--deps/npm/node_modules/read-package-json/node_modules/normalize-package-data/AUTHORS3
-rw-r--r--deps/npm/node_modules/read-package-json/node_modules/normalize-package-data/README.md27
-rw-r--r--deps/npm/node_modules/read-package-json/node_modules/normalize-package-data/lib/core_module_names.json29
-rw-r--r--deps/npm/node_modules/read-package-json/node_modules/normalize-package-data/lib/extract_description.js1
-rw-r--r--deps/npm/node_modules/read-package-json/node_modules/normalize-package-data/lib/fixer.js207
-rw-r--r--deps/npm/node_modules/read-package-json/node_modules/normalize-package-data/lib/is_valid.js58
-rw-r--r--deps/npm/node_modules/read-package-json/node_modules/normalize-package-data/lib/make_warning.js23
-rw-r--r--deps/npm/node_modules/read-package-json/node_modules/normalize-package-data/lib/normalize.js19
-rw-r--r--deps/npm/node_modules/read-package-json/node_modules/normalize-package-data/lib/safe_format.js9
-rw-r--r--deps/npm/node_modules/read-package-json/node_modules/normalize-package-data/lib/typos.json4
-rw-r--r--deps/npm/node_modules/read-package-json/node_modules/normalize-package-data/lib/warning_messages.json28
-rw-r--r--deps/npm/node_modules/read-package-json/node_modules/normalize-package-data/node_modules/github-url-from-git/package.json27
-rw-r--r--deps/npm/node_modules/read-package-json/node_modules/normalize-package-data/package.json19
-rw-r--r--deps/npm/node_modules/read-package-json/node_modules/normalize-package-data/test/consistency.js2
-rw-r--r--deps/npm/node_modules/read-package-json/node_modules/normalize-package-data/test/dependencies.js43
-rw-r--r--deps/npm/node_modules/read-package-json/node_modules/normalize-package-data/test/fixtures/no-description.json4
-rw-r--r--deps/npm/node_modules/read-package-json/node_modules/normalize-package-data/test/normalize.js150
-rw-r--r--deps/npm/node_modules/read-package-json/node_modules/normalize-package-data/test/strict.js54
-rw-r--r--deps/npm/node_modules/read-package-json/node_modules/normalize-package-data/test/typo.js96
-rw-r--r--deps/npm/node_modules/read-package-json/package.json19
-rw-r--r--deps/npm/node_modules/read-package-json/read-json.js101
-rw-r--r--deps/npm/node_modules/read-package-json/test/fixtures/not-json.css2
-rw-r--r--deps/npm/node_modules/read-package-json/test/fixtures/readmes/README1
-rw-r--r--deps/npm/node_modules/read-package-json/test/fixtures/readmes/README.md1
-rw-r--r--deps/npm/node_modules/read-package-json/test/fixtures/readmes/package.json1
-rw-r--r--deps/npm/node_modules/read-package-json/test/fixtures/readmes/readmexxx.yz1
-rw-r--r--deps/npm/node_modules/read-package-json/test/non-json.js3
-rw-r--r--deps/npm/node_modules/read-package-json/test/readmes.js29
-rw-r--r--deps/npm/node_modules/read/README.md4
-rw-r--r--deps/npm/node_modules/read/lib/read.js27
-rw-r--r--deps/npm/node_modules/read/node_modules/mute-stream/README.md6
-rw-r--r--deps/npm/node_modules/read/node_modules/mute-stream/mute.js19
-rw-r--r--deps/npm/node_modules/read/node_modules/mute-stream/package.json12
-rw-r--r--deps/npm/node_modules/read/node_modules/mute-stream/test/basic.js1
-rw-r--r--deps/npm/node_modules/read/package.json14
-rw-r--r--deps/npm/node_modules/read/rs.js4
-rw-r--r--deps/npm/node_modules/read/test/basic.js2
-rw-r--r--deps/npm/node_modules/read/test/defaults.js2
-rw-r--r--deps/npm/node_modules/read/test/many.js2
-rw-r--r--deps/npm/node_modules/request/.npmignore2
-rw-r--r--deps/npm/node_modules/request/.travis.yml12
-rw-r--r--deps/npm/node_modules/request/README.md142
-rwxr-xr-xdeps/npm/node_modules/request/index.js1258
-rw-r--r--deps/npm/node_modules/request/lib/copy.js8
-rw-r--r--deps/npm/node_modules/request/lib/debug.js7
-rw-r--r--deps/npm/node_modules/request/lib/getSafe.js34
-rw-r--r--deps/npm/node_modules/request/lib/optional.js5
-rw-r--r--deps/npm/node_modules/request/node_modules/aws-sign/index.js202
-rw-r--r--deps/npm/node_modules/request/node_modules/aws-sign/package.json27
-rw-r--r--deps/npm/node_modules/request/node_modules/aws-sign2/LICENSE (renamed from deps/npm/node_modules/request/node_modules/aws-sign/LICENSE)0
-rw-r--r--deps/npm/node_modules/request/node_modules/aws-sign2/README.md (renamed from deps/npm/node_modules/request/node_modules/aws-sign/README.md)0
-rw-r--r--deps/npm/node_modules/request/node_modules/aws-sign2/index.js202
-rw-r--r--deps/npm/node_modules/request/node_modules/aws-sign2/package.json28
-rw-r--r--deps/npm/node_modules/request/node_modules/cookie-jar/LICENSE55
-rw-r--r--deps/npm/node_modules/request/node_modules/cookie-jar/README.md4
-rw-r--r--deps/npm/node_modules/request/node_modules/cookie-jar/index.js67
-rw-r--r--deps/npm/node_modules/request/node_modules/cookie-jar/jar.js72
-rw-r--r--deps/npm/node_modules/request/node_modules/cookie-jar/package.json30
-rw-r--r--deps/npm/node_modules/request/node_modules/cookie-jar/tests/run.js40
-rw-r--r--deps/npm/node_modules/request/node_modules/cookie-jar/tests/test-cookie.js29
-rw-r--r--deps/npm/node_modules/request/node_modules/cookie-jar/tests/test-cookiejar.js90
-rw-r--r--deps/npm/node_modules/request/node_modules/forever-agent/package.json1
-rw-r--r--deps/npm/node_modules/request/node_modules/form-data/.npmignore5
-rw-r--r--deps/npm/node_modules/request/node_modules/form-data/.travis.yml4
-rw-r--r--deps/npm/node_modules/request/node_modules/form-data/Makefile7
-rw-r--r--deps/npm/node_modules/request/node_modules/form-data/Readme.md33
-rw-r--r--deps/npm/node_modules/request/node_modules/form-data/lib/form_data.js127
-rw-r--r--deps/npm/node_modules/request/node_modules/form-data/node-form-data.sublime-project8
-rw-r--r--deps/npm/node_modules/request/node_modules/form-data/node-form-data.sublime-workspace673
-rw-r--r--deps/npm/node_modules/request/node_modules/form-data/node_modules/async/package.json3
-rw-r--r--deps/npm/node_modules/request/node_modules/form-data/package.json27
-rw-r--r--deps/npm/node_modules/request/node_modules/form-data/sftp-config.json43
-rw-r--r--deps/npm/node_modules/request/node_modules/form-data/test/common.js14
-rw-r--r--deps/npm/node_modules/request/node_modules/form-data/test/fixture/bacon.txt1
-rw-r--r--deps/npm/node_modules/request/node_modules/form-data/test/fixture/unicycle.jpgbin19806 -> 0 bytes
-rw-r--r--deps/npm/node_modules/request/node_modules/form-data/test/integration/test-custom-filename.js52
-rw-r--r--deps/npm/node_modules/request/node_modules/form-data/test/integration/test-custom-headers.js75
-rw-r--r--deps/npm/node_modules/request/node_modules/form-data/test/integration/test-form-get-length.js93
-rw-r--r--deps/npm/node_modules/request/node_modules/form-data/test/integration/test-get-boundary.js18
-rw-r--r--deps/npm/node_modules/request/node_modules/form-data/test/integration/test-http-response.js83
-rw-r--r--deps/npm/node_modules/request/node_modules/form-data/test/integration/test-pipe.js73
-rw-r--r--deps/npm/node_modules/request/node_modules/form-data/test/integration/test-submit-custom.js77
-rw-r--r--deps/npm/node_modules/request/node_modules/form-data/test/integration/test-submit.js73
-rwxr-xr-xdeps/npm/node_modules/request/node_modules/form-data/test/run.js7
-rwxr-xr-xdeps/npm/node_modules/request/node_modules/hawk/Makefile9
-rwxr-xr-xdeps/npm/node_modules/request/node_modules/hawk/README.md1247
-rwxr-xr-xdeps/npm/node_modules/request/node_modules/hawk/lib/browser.js915
-rwxr-xr-xdeps/npm/node_modules/request/node_modules/hawk/lib/client.js652
-rwxr-xr-xdeps/npm/node_modules/request/node_modules/hawk/lib/crypto.js222
-rwxr-xr-xdeps/npm/node_modules/request/node_modules/hawk/lib/index.js30
-rwxr-xr-xdeps/npm/node_modules/request/node_modules/hawk/lib/server.js948
-rwxr-xr-xdeps/npm/node_modules/request/node_modules/hawk/lib/utils.js23
-rw-r--r--deps/npm/node_modules/request/node_modules/hawk/node_modules/boom/node_modules/hoek/.npmignore18
-rwxr-xr-xdeps/npm/node_modules/request/node_modules/hawk/node_modules/boom/node_modules/hoek/.travis.yml5
-rwxr-xr-xdeps/npm/node_modules/request/node_modules/hawk/node_modules/boom/node_modules/hoek/LICENSE33
-rwxr-xr-xdeps/npm/node_modules/request/node_modules/hawk/node_modules/boom/node_modules/hoek/Makefile10
-rwxr-xr-xdeps/npm/node_modules/request/node_modules/hawk/node_modules/boom/node_modules/hoek/README.md436
-rwxr-xr-xdeps/npm/node_modules/request/node_modules/hawk/node_modules/boom/node_modules/hoek/images/hoek.pngbin37939 -> 0 bytes
-rwxr-xr-xdeps/npm/node_modules/request/node_modules/hawk/node_modules/boom/node_modules/hoek/index.js1
-rwxr-xr-xdeps/npm/node_modules/request/node_modules/hawk/node_modules/boom/node_modules/hoek/lib/escape.js132
-rwxr-xr-xdeps/npm/node_modules/request/node_modules/hawk/node_modules/boom/node_modules/hoek/lib/index.js585
-rwxr-xr-xdeps/npm/node_modules/request/node_modules/hawk/node_modules/boom/node_modules/hoek/package.json52
-rw-r--r--deps/npm/node_modules/request/node_modules/hawk/node_modules/boom/node_modules/hoek/test/escaper.js86
-rwxr-xr-xdeps/npm/node_modules/request/node_modules/hawk/node_modules/boom/node_modules/hoek/test/index.js1078
-rwxr-xr-xdeps/npm/node_modules/request/node_modules/hawk/node_modules/boom/node_modules/hoek/test/modules/test1.js1
-rwxr-xr-xdeps/npm/node_modules/request/node_modules/hawk/node_modules/boom/node_modules/hoek/test/modules/test2.js1
-rwxr-xr-xdeps/npm/node_modules/request/node_modules/hawk/node_modules/boom/node_modules/hoek/test/modules/test3.js1
-rwxr-xr-xdeps/npm/node_modules/request/node_modules/hawk/node_modules/boom/package.json1
-rw-r--r--deps/npm/node_modules/request/node_modules/hawk/node_modules/cryptiles/.npmignore36
-rwxr-xr-xdeps/npm/node_modules/request/node_modules/hawk/node_modules/cryptiles/.travis.yml10
-rwxr-xr-xdeps/npm/node_modules/request/node_modules/hawk/node_modules/cryptiles/lib/index.js6
-rwxr-xr-xdeps/npm/node_modules/request/node_modules/hawk/node_modules/cryptiles/package.json5
-rwxr-xr-xdeps/npm/node_modules/request/node_modules/hawk/node_modules/cryptiles/test/index.js6
-rwxr-xr-xdeps/npm/node_modules/request/node_modules/hawk/node_modules/hoek/.travis.yml10
-rwxr-xr-xdeps/npm/node_modules/request/node_modules/hawk/node_modules/hoek/LICENSE66
-rwxr-xr-xdeps/npm/node_modules/request/node_modules/hawk/node_modules/hoek/Makefile20
-rwxr-xr-xdeps/npm/node_modules/request/node_modules/hawk/node_modules/hoek/lib/escape.js262
-rwxr-xr-xdeps/npm/node_modules/request/node_modules/hawk/node_modules/hoek/lib/index.js47
-rwxr-xr-xdeps/npm/node_modules/request/node_modules/hawk/node_modules/hoek/package.json7
-rw-r--r--deps/npm/node_modules/request/node_modules/hawk/node_modules/hoek/test/escaper.js172
-rwxr-xr-xdeps/npm/node_modules/request/node_modules/hawk/node_modules/hoek/test/index.js9
-rwxr-xr-xdeps/npm/node_modules/request/node_modules/hawk/node_modules/hoek/test/modules/test1.js2
-rwxr-xr-xdeps/npm/node_modules/request/node_modules/hawk/node_modules/hoek/test/modules/test2.js2
-rwxr-xr-xdeps/npm/node_modules/request/node_modules/hawk/node_modules/hoek/test/modules/test3.js2
-rw-r--r--deps/npm/node_modules/request/node_modules/hawk/node_modules/sntp/node_modules/hoek/.npmignore18
-rwxr-xr-xdeps/npm/node_modules/request/node_modules/hawk/node_modules/sntp/node_modules/hoek/.travis.yml5
-rwxr-xr-xdeps/npm/node_modules/request/node_modules/hawk/node_modules/sntp/node_modules/hoek/LICENSE33
-rwxr-xr-xdeps/npm/node_modules/request/node_modules/hawk/node_modules/sntp/node_modules/hoek/Makefile10
-rwxr-xr-xdeps/npm/node_modules/request/node_modules/hawk/node_modules/sntp/node_modules/hoek/README.md436
-rwxr-xr-xdeps/npm/node_modules/request/node_modules/hawk/node_modules/sntp/node_modules/hoek/images/hoek.pngbin37939 -> 0 bytes
-rwxr-xr-xdeps/npm/node_modules/request/node_modules/hawk/node_modules/sntp/node_modules/hoek/index.js1
-rwxr-xr-xdeps/npm/node_modules/request/node_modules/hawk/node_modules/sntp/node_modules/hoek/lib/escape.js132
-rwxr-xr-xdeps/npm/node_modules/request/node_modules/hawk/node_modules/sntp/node_modules/hoek/lib/index.js585
-rwxr-xr-xdeps/npm/node_modules/request/node_modules/hawk/node_modules/sntp/node_modules/hoek/package.json52
-rw-r--r--deps/npm/node_modules/request/node_modules/hawk/node_modules/sntp/node_modules/hoek/test/escaper.js86
-rwxr-xr-xdeps/npm/node_modules/request/node_modules/hawk/node_modules/sntp/node_modules/hoek/test/index.js1078
-rwxr-xr-xdeps/npm/node_modules/request/node_modules/hawk/node_modules/sntp/node_modules/hoek/test/modules/test1.js1
-rwxr-xr-xdeps/npm/node_modules/request/node_modules/hawk/node_modules/sntp/node_modules/hoek/test/modules/test2.js1
-rwxr-xr-xdeps/npm/node_modules/request/node_modules/hawk/node_modules/sntp/node_modules/hoek/test/modules/test3.js1
-rwxr-xr-xdeps/npm/node_modules/request/node_modules/hawk/node_modules/sntp/package.json1
-rwxr-xr-xdeps/npm/node_modules/request/node_modules/hawk/package.json11
-rwxr-xr-xdeps/npm/node_modules/request/node_modules/hawk/test/browser.js1494
-rwxr-xr-xdeps/npm/node_modules/request/node_modules/hawk/test/message.js246
-rwxr-xr-xdeps/npm/node_modules/request/node_modules/hawk/test/server.js50
-rwxr-xr-xdeps/npm/node_modules/request/node_modules/hawk/test/utils.js48
-rw-r--r--deps/npm/node_modules/request/node_modules/http-signature/.npmignore3
-rw-r--r--deps/npm/node_modules/request/node_modules/http-signature/README.md4
-rw-r--r--deps/npm/node_modules/request/node_modules/http-signature/http_signing.md85
-rw-r--r--deps/npm/node_modules/request/node_modules/http-signature/lib/parser.js60
-rw-r--r--deps/npm/node_modules/request/node_modules/http-signature/lib/signer.js22
-rw-r--r--deps/npm/node_modules/request/node_modules/http-signature/lib/verify.js6
-rw-r--r--deps/npm/node_modules/request/node_modules/http-signature/node_modules/asn1/package.json1
-rw-r--r--deps/npm/node_modules/request/node_modules/http-signature/package.json11
-rw-r--r--deps/npm/node_modules/request/node_modules/json-stringify-safe/README.md22
-rw-r--r--deps/npm/node_modules/request/node_modules/json-stringify-safe/package.json9
-rw-r--r--deps/npm/node_modules/request/node_modules/json-stringify-safe/stringify.js20
-rw-r--r--deps/npm/node_modules/request/node_modules/json-stringify-safe/test.js38
-rw-r--r--deps/npm/node_modules/request/node_modules/mime/README.md5
-rw-r--r--deps/npm/node_modules/request/node_modules/mime/mime.js5
-rw-r--r--deps/npm/node_modules/request/node_modules/mime/package.json7
-rw-r--r--deps/npm/node_modules/request/node_modules/mime/test.js53
-rw-r--r--deps/npm/node_modules/request/node_modules/mime/types/mime.types2
-rw-r--r--deps/npm/node_modules/request/node_modules/mime/types/node.types21
-rw-r--r--deps/npm/node_modules/request/node_modules/node-uuid/LICENSE.md5
-rw-r--r--deps/npm/node_modules/request/node_modules/node-uuid/README.md10
-rw-r--r--deps/npm/node_modules/request/node_modules/node-uuid/component.json18
-rw-r--r--deps/npm/node_modules/request/node_modules/node-uuid/package.json7
-rw-r--r--deps/npm/node_modules/request/node_modules/node-uuid/uuid.js10
-rw-r--r--deps/npm/node_modules/request/node_modules/oauth-sign/package.json1
-rw-r--r--deps/npm/node_modules/request/node_modules/qs/index.js51
-rw-r--r--deps/npm/node_modules/request/node_modules/qs/package.json5
-rw-r--r--deps/npm/node_modules/request/node_modules/tough-cookie/.jshintrc72
-rw-r--r--deps/npm/node_modules/request/node_modules/tough-cookie/.npmignore3
-rw-r--r--deps/npm/node_modules/request/node_modules/tough-cookie/LICENSE78
-rw-r--r--deps/npm/node_modules/request/node_modules/tough-cookie/README.md380
-rw-r--r--deps/npm/node_modules/request/node_modules/tough-cookie/generate-pubsuffix.js230
-rw-r--r--deps/npm/node_modules/request/node_modules/tough-cookie/lib/cookie.js947
-rw-r--r--deps/npm/node_modules/request/node_modules/tough-cookie/lib/memstore.js102
-rw-r--r--deps/npm/node_modules/request/node_modules/tough-cookie/lib/pubsuffix.js69
-rw-r--r--deps/npm/node_modules/request/node_modules/tough-cookie/node_modules/punycode/LICENSE-GPL.txt278
-rw-r--r--deps/npm/node_modules/request/node_modules/tough-cookie/node_modules/punycode/LICENSE-MIT.txt20
-rw-r--r--deps/npm/node_modules/request/node_modules/tough-cookie/node_modules/punycode/package.json73
-rw-r--r--deps/npm/node_modules/request/node_modules/tough-cookie/node_modules/punycode/punycode.js508
-rw-r--r--deps/npm/node_modules/request/node_modules/tough-cookie/node_modules/punycode/punycode.min.js2
-rw-r--r--deps/npm/node_modules/request/node_modules/tough-cookie/node_modules/punycode/vendor/docdown/LICENSE.txt20
-rw-r--r--deps/npm/node_modules/request/node_modules/tough-cookie/node_modules/punycode/vendor/docdown/README.md35
-rw-r--r--deps/npm/node_modules/request/node_modules/tough-cookie/node_modules/punycode/vendor/docdown/doc/README.md69
-rw-r--r--deps/npm/node_modules/request/node_modules/tough-cookie/node_modules/punycode/vendor/docdown/doc/parse.php35
-rw-r--r--deps/npm/node_modules/request/node_modules/tough-cookie/node_modules/punycode/vendor/docdown/docdown.php38
-rw-r--r--deps/npm/node_modules/request/node_modules/tough-cookie/node_modules/punycode/vendor/docdown/src/DocDown/Alias.php226
-rw-r--r--deps/npm/node_modules/request/node_modules/tough-cookie/node_modules/punycode/vendor/docdown/src/DocDown/Entry.php442
-rw-r--r--deps/npm/node_modules/request/node_modules/tough-cookie/node_modules/punycode/vendor/docdown/src/DocDown/Generator.php563
-rw-r--r--deps/npm/node_modules/request/node_modules/tough-cookie/package.json46
-rw-r--r--deps/npm/node_modules/request/node_modules/tough-cookie/public-suffix.txt5229
-rw-r--r--deps/npm/node_modules/request/node_modules/tough-cookie/test.js1340
-rw-r--r--deps/npm/node_modules/request/node_modules/tunnel-agent/package.json1
-rwxr-xr-xdeps/npm/node_modules/request/package.json32
-rw-r--r--deps/npm/node_modules/request/request.js1260
-rw-r--r--deps/npm/node_modules/request/tests/googledoodle.jpgbin38510 -> 0 bytes
-rw-r--r--deps/npm/node_modules/request/tests/run.js40
-rw-r--r--deps/npm/node_modules/request/tests/server.js90
-rw-r--r--deps/npm/node_modules/request/tests/squid.conf77
-rw-r--r--deps/npm/node_modules/request/tests/ssl/ca/ca.cnf20
-rw-r--r--deps/npm/node_modules/request/tests/ssl/ca/ca.crl0
-rw-r--r--deps/npm/node_modules/request/tests/ssl/ca/ca.crt17
-rw-r--r--deps/npm/node_modules/request/tests/ssl/ca/ca.csr13
-rw-r--r--deps/npm/node_modules/request/tests/ssl/ca/ca.key18
-rw-r--r--deps/npm/node_modules/request/tests/ssl/ca/ca.srl1
-rw-r--r--deps/npm/node_modules/request/tests/ssl/ca/server.cnf19
-rw-r--r--deps/npm/node_modules/request/tests/ssl/ca/server.crt16
-rw-r--r--deps/npm/node_modules/request/tests/ssl/ca/server.csr11
-rw-r--r--deps/npm/node_modules/request/tests/ssl/ca/server.js28
-rw-r--r--deps/npm/node_modules/request/tests/ssl/ca/server.key9
-rw-r--r--deps/npm/node_modules/request/tests/ssl/npm-ca.crt16
-rw-r--r--deps/npm/node_modules/request/tests/ssl/test.crt15
-rw-r--r--deps/npm/node_modules/request/tests/ssl/test.key15
-rw-r--r--deps/npm/node_modules/request/tests/test-basic-auth.js143
-rw-r--r--deps/npm/node_modules/request/tests/test-body.js122
-rw-r--r--deps/npm/node_modules/request/tests/test-defaults.js129
-rw-r--r--deps/npm/node_modules/request/tests/test-digest-auth.js69
-rw-r--r--deps/npm/node_modules/request/tests/test-emptyBody.js20
-rw-r--r--deps/npm/node_modules/request/tests/test-errors.js37
-rw-r--r--deps/npm/node_modules/request/tests/test-follow-all-303.js30
-rw-r--r--deps/npm/node_modules/request/tests/test-follow-all.js35
-rw-r--r--deps/npm/node_modules/request/tests/test-form.js79
-rwxr-xr-xdeps/npm/node_modules/request/tests/test-hawk.js33
-rw-r--r--deps/npm/node_modules/request/tests/test-headers.js52
-rwxr-xr-xdeps/npm/node_modules/request/tests/test-http-signature.js106
-rw-r--r--deps/npm/node_modules/request/tests/test-httpModule.js94
-rw-r--r--deps/npm/node_modules/request/tests/test-https-strict.js97
-rw-r--r--deps/npm/node_modules/request/tests/test-https.js87
-rw-r--r--deps/npm/node_modules/request/tests/test-localAddress.js15
-rw-r--r--deps/npm/node_modules/request/tests/test-oauth.js117
-rw-r--r--deps/npm/node_modules/request/tests/test-onelineproxy.js46
-rw-r--r--deps/npm/node_modules/request/tests/test-params.js93
-rw-r--r--deps/npm/node_modules/request/tests/test-piped-redirect.js42
-rw-r--r--deps/npm/node_modules/request/tests/test-pipes.js216
-rw-r--r--deps/npm/node_modules/request/tests/test-pool.js16
-rw-r--r--deps/npm/node_modules/request/tests/test-protocol-changing-redirect.js61
-rw-r--r--deps/npm/node_modules/request/tests/test-proxy.js39
-rw-r--r--deps/npm/node_modules/request/tests/test-qs.js42
-rw-r--r--deps/npm/node_modules/request/tests/test-redirect.js155
-rw-r--r--deps/npm/node_modules/request/tests/test-s3.js13
-rw-r--r--deps/npm/node_modules/request/tests/test-timeout.js87
-rw-r--r--deps/npm/node_modules/request/tests/test-toJSON.js14
-rw-r--r--deps/npm/node_modules/request/tests/test-tunnel.js75
-rw-r--r--deps/npm/node_modules/request/tests/unicycle.jpgbin19806 -> 0 bytes
-rw-r--r--deps/npm/node_modules/rimraf/README.md21
-rwxr-xr-xdeps/npm/node_modules/rimraf/bin.js33
-rw-r--r--deps/npm/node_modules/rimraf/package.json19
-rw-r--r--deps/npm/node_modules/rimraf/rimraf.js104
-rw-r--r--deps/npm/node_modules/semver/.npmignore1
-rw-r--r--deps/npm/node_modules/semver/LICENSE42
-rw-r--r--deps/npm/node_modules/semver/Makefile24
-rw-r--r--deps/npm/node_modules/semver/README.md109
-rwxr-xr-xdeps/npm/node_modules/semver/bin/semver82
-rw-r--r--deps/npm/node_modules/semver/foot.js6
-rw-r--r--deps/npm/node_modules/semver/head.js2
-rw-r--r--deps/npm/node_modules/semver/package.json25
-rw-r--r--deps/npm/node_modules/semver/semver.browser.js1007
-rw-r--r--deps/npm/node_modules/semver/semver.browser.js.gzbin0 -> 6903 bytes
-rw-r--r--deps/npm/node_modules/semver/semver.js1265
-rw-r--r--deps/npm/node_modules/semver/semver.min.js1
-rw-r--r--deps/npm/node_modules/semver/semver.min.js.gzbin0 -> 3231 bytes
-rw-r--r--deps/npm/node_modules/semver/test.js436
-rw-r--r--deps/npm/node_modules/semver/test/amd.js15
-rw-r--r--deps/npm/node_modules/semver/test/gtr.js173
-rw-r--r--deps/npm/node_modules/semver/test/index.js556
-rw-r--r--deps/npm/node_modules/semver/test/ltr.js174
-rw-r--r--deps/npm/node_modules/semver/test/no-module.js19
-rw-r--r--deps/npm/node_modules/sha/.npmignore6
-rw-r--r--deps/npm/node_modules/sha/LICENSE46
-rw-r--r--deps/npm/node_modules/sha/README.md81
-rw-r--r--deps/npm/node_modules/sha/index.js183
-rw-r--r--deps/npm/node_modules/sha/node_modules/readable-stream/.npmignore5
-rw-r--r--deps/npm/node_modules/sha/node_modules/readable-stream/LICENSE (renamed from deps/npm/node_modules/npm-registry-client/node_modules/couch-login/LICENSE)0
-rw-r--r--deps/npm/node_modules/sha/node_modules/readable-stream/README.md768
-rw-r--r--deps/npm/node_modules/sha/node_modules/readable-stream/duplex.js1
-rw-r--r--deps/npm/node_modules/sha/node_modules/readable-stream/float.patch68
-rw-r--r--deps/npm/node_modules/sha/node_modules/readable-stream/lib/_stream_duplex.js69
-rw-r--r--deps/npm/node_modules/sha/node_modules/readable-stream/lib/_stream_passthrough.js41
-rw-r--r--deps/npm/node_modules/sha/node_modules/readable-stream/lib/_stream_readable.js927
-rw-r--r--deps/npm/node_modules/sha/node_modules/readable-stream/lib/_stream_transform.js205
-rw-r--r--deps/npm/node_modules/sha/node_modules/readable-stream/lib/_stream_writable.js369
-rw-r--r--deps/npm/node_modules/sha/node_modules/readable-stream/package.json36
-rw-r--r--deps/npm/node_modules/sha/node_modules/readable-stream/passthrough.js1
-rw-r--r--deps/npm/node_modules/sha/node_modules/readable-stream/readable.js6
-rw-r--r--deps/npm/node_modules/sha/node_modules/readable-stream/transform.js1
-rw-r--r--deps/npm/node_modules/sha/node_modules/readable-stream/writable.js1
-rw-r--r--deps/npm/node_modules/sha/package.json20
-rw-r--r--deps/npm/node_modules/slide/LICENSE32
-rw-r--r--deps/npm/node_modules/slide/package.json5
-rw-r--r--deps/npm/node_modules/sorted-object/LICENSE.txt19
-rw-r--r--deps/npm/node_modules/sorted-object/README.md20
-rw-r--r--deps/npm/node_modules/sorted-object/lib/sorted-object.js11
-rw-r--r--deps/npm/node_modules/sorted-object/package.json37
-rw-r--r--deps/npm/node_modules/tar/README.md60
-rw-r--r--deps/npm/node_modules/tar/lib/buffer-entry.js4
-rw-r--r--deps/npm/node_modules/tar/lib/entry.js273
-rw-r--r--deps/npm/node_modules/tar/lib/extended-header-writer.js1
-rw-r--r--deps/npm/node_modules/tar/lib/extended-header.js3
-rw-r--r--deps/npm/node_modules/tar/package.json18
-rw-r--r--deps/npm/node_modules/text-table/.travis.yml4
-rw-r--r--deps/npm/node_modules/text-table/LICENSE18
-rw-r--r--deps/npm/node_modules/text-table/example/align.js8
-rw-r--r--deps/npm/node_modules/text-table/example/center.js8
-rw-r--r--deps/npm/node_modules/text-table/example/dotalign.js9
-rw-r--r--deps/npm/node_modules/text-table/example/doubledot.js11
-rw-r--r--deps/npm/node_modules/text-table/example/table.js6
-rw-r--r--deps/npm/node_modules/text-table/index.js86
-rw-r--r--deps/npm/node_modules/text-table/package.json52
-rw-r--r--deps/npm/node_modules/text-table/readme.markdown134
-rw-r--r--deps/npm/node_modules/text-table/test/align.js18
-rw-r--r--deps/npm/node_modules/text-table/test/ansi-colors.js32
-rw-r--r--deps/npm/node_modules/text-table/test/center.js18
-rw-r--r--deps/npm/node_modules/text-table/test/dotalign.js20
-rw-r--r--deps/npm/node_modules/text-table/test/doubledot.js24
-rw-r--r--deps/npm/node_modules/text-table/test/table.js14
-rw-r--r--deps/npm/node_modules/uid-number/LICENSE15
-rw-r--r--deps/npm/node_modules/uid-number/package.json23
-rw-r--r--deps/npm/node_modules/uid-number/uid-number.js4
-rw-r--r--deps/npm/package.json184
-rwxr-xr-xdeps/npm/scripts/doc-build.sh36
-rwxr-xr-xdeps/npm/scripts/index-build.js93
-rwxr-xr-xdeps/npm/scripts/install.sh17
-rw-r--r--deps/npm/test/common-tap.js32
-rw-r--r--deps/npm/test/disabled/outdated-depth-integer.js52
-rw-r--r--deps/npm/test/disabled/outdated-depth-integer/README.md1
-rw-r--r--deps/npm/test/disabled/outdated-depth-integer/index.js1
-rw-r--r--deps/npm/test/disabled/outdated-depth-integer/package.json10
-rw-r--r--deps/npm/test/disabled/startstop/package.json3
-rw-r--r--deps/npm/test/packages/npm-test-blerg/package.json2
-rw-r--r--deps/npm/test/packages/npm-test-blerg3/package.json2
-rw-r--r--deps/npm/test/packages/npm-test-peer-deps/README1
-rw-r--r--deps/npm/test/packages/npm-test-peer-deps/npm-ls.json17
-rw-r--r--deps/npm/test/packages/npm-test-peer-deps/package.json11
-rw-r--r--deps/npm/test/packages/npm-test-peer-deps/test.js36
-rw-r--r--deps/npm/test/packages/npm-test-shrinkwrap/npm-shrinkwrap.json2
-rw-r--r--deps/npm/test/packages/npm-test-shrinkwrap/package.json2
-rw-r--r--deps/npm/test/run.js35
-rw-r--r--deps/npm/test/tap/00-check-mock-dep.js15
-rw-r--r--deps/npm/test/tap/404-parent.js53
-rw-r--r--deps/npm/test/tap/cache-add-unpublished.js61
-rw-r--r--deps/npm/test/tap/cache-shasum.js60
-rw-r--r--deps/npm/test/tap/circular-dep.js52
-rw-r--r--deps/npm/test/tap/circular-dep/minimist/package.json7
-rw-r--r--deps/npm/test/tap/config-meta.js120
-rw-r--r--deps/npm/test/tap/dedupe.js34
-rw-r--r--deps/npm/test/tap/dedupe/package.json9
-rw-r--r--deps/npm/test/tap/false_name.js47
-rw-r--r--deps/npm/test/tap/false_name/package.json4
-rw-r--r--deps/npm/test/tap/git-cache-locking.js52
-rw-r--r--deps/npm/test/tap/ignore-install-link.js122
-rw-r--r--deps/npm/test/tap/ignore-scripts.js72
-rw-r--r--deps/npm/test/tap/ignore-scripts/binding.gyp1
-rw-r--r--deps/npm/test/tap/ignore-scripts/package.json30
-rw-r--r--deps/npm/test/tap/ignore-shrinkwrap.js87
-rw-r--r--deps/npm/test/tap/install-at-locally.js43
-rw-r--r--deps/npm/test/tap/install-at-locally/package@1.2.3/package.json5
-rw-r--r--deps/npm/test/tap/install-cli-unicode.js38
-rw-r--r--deps/npm/test/tap/install-cli/README.md1
-rw-r--r--deps/npm/test/tap/install-cli/index.js1
-rw-r--r--deps/npm/test/tap/install-cli/package.json10
-rw-r--r--deps/npm/test/tap/install-save-exact.js92
-rw-r--r--deps/npm/test/tap/install-save-exact/README.md1
-rw-r--r--deps/npm/test/tap/install-save-exact/index.js1
-rw-r--r--deps/npm/test/tap/install-save-exact/package.json7
-rw-r--r--deps/npm/test/tap/install-save-prefix.js140
-rw-r--r--deps/npm/test/tap/install-save-prefix/README.md1
-rw-r--r--deps/npm/test/tap/install-save-prefix/index.js1
-rw-r--r--deps/npm/test/tap/install-save-prefix/package.json7
-rw-r--r--deps/npm/test/tap/invalid-cmd-exit-code.js29
-rw-r--r--deps/npm/test/tap/lifecycle-signal.js27
-rw-r--r--deps/npm/test/tap/lifecycle-signal/package.json3
-rw-r--r--deps/npm/test/tap/lifecycle.js12
-rw-r--r--deps/npm/test/tap/ls-depth-cli.js79
-rw-r--r--deps/npm/test/tap/ls-depth/package.json8
-rw-r--r--deps/npm/test/tap/ls-no-results.js12
-rw-r--r--deps/npm/test/tap/noargs-install-config-save.js86
-rw-r--r--deps/npm/test/tap/npm-api-not-loaded-error.js47
-rw-r--r--deps/npm/test/tap/outdated-color.js44
-rw-r--r--deps/npm/test/tap/outdated-depth.js51
-rw-r--r--deps/npm/test/tap/outdated-depth/README.md1
-rw-r--r--deps/npm/test/tap/outdated-depth/index.js1
-rw-r--r--deps/npm/test/tap/outdated-depth/package.json10
-rw-r--r--deps/npm/test/tap/outdated-git.js30
-rw-r--r--deps/npm/test/tap/outdated-git/README.md1
-rw-r--r--deps/npm/test/tap/outdated-git/package.json12
-rw-r--r--deps/npm/test/tap/outdated-include-devdependencies.js28
-rw-r--r--deps/npm/test/tap/outdated-include-devdependencies/package.json8
-rw-r--r--deps/npm/test/tap/outdated-json.js73
-rw-r--r--deps/npm/test/tap/outdated-new-versions.js36
-rw-r--r--deps/npm/test/tap/outdated-new-versions/package.json11
-rw-r--r--deps/npm/test/tap/outdated-notarget.js47
-rw-r--r--deps/npm/test/tap/outdated.js62
-rw-r--r--deps/npm/test/tap/outdated/README.md1
-rw-r--r--deps/npm/test/tap/outdated/index.js1
-rw-r--r--deps/npm/test/tap/outdated/package.json10
-rw-r--r--deps/npm/test/tap/peer-deps-invalid.js96
-rw-r--r--deps/npm/test/tap/peer-deps-invalid/file-fail.js10
-rw-r--r--deps/npm/test/tap/peer-deps-invalid/file-ok.js11
-rw-r--r--deps/npm/test/tap/peer-deps-without-package-json.js79
-rw-r--r--deps/npm/test/tap/peer-deps-without-package-json/file-js.js11
-rw-r--r--deps/npm/test/tap/peer-deps.js57
-rw-r--r--deps/npm/test/tap/peer-deps/desired-ls-results.json17
-rw-r--r--deps/npm/test/tap/peer-deps/package.json8
-rw-r--r--deps/npm/test/tap/prepublish.js97
-rw-r--r--deps/npm/test/tap/prune.js115
-rw-r--r--deps/npm/test/tap/prune/package.json13
-rw-r--r--deps/npm/test/tap/publish-config.js11
-rw-r--r--deps/npm/test/tap/referer.js24
-rw-r--r--deps/npm/test/tap/repo.js52
-rw-r--r--deps/npm/test/tap/scripts-whitespace-windows.js71
-rw-r--r--deps/npm/test/tap/scripts-whitespace-windows/README.md1
-rw-r--r--deps/npm/test/tap/scripts-whitespace-windows/dep/README.md1
-rw-r--r--deps/npm/test/tap/scripts-whitespace-windows/dep/bin/foo4
-rw-r--r--deps/npm/test/tap/scripts-whitespace-windows/dep/package.json6
-rw-r--r--deps/npm/test/tap/scripts-whitespace-windows/package.json11
-rw-r--r--deps/npm/test/tap/semver-doc.js12
-rw-r--r--deps/npm/test/tap/shrinkwrap-dev-dependency.js66
-rw-r--r--deps/npm/test/tap/shrinkwrap-dev-dependency/desired-shrinkwrap-results.json12
-rw-r--r--deps/npm/test/tap/shrinkwrap-dev-dependency/package.json12
-rw-r--r--deps/npm/test/tap/shrinkwrap-empty-deps.js47
-rw-r--r--deps/npm/test/tap/shrinkwrap-empty-deps/package.json7
-rw-r--r--deps/npm/test/tap/shrinkwrap-shared-dev-dependency.js58
-rw-r--r--deps/npm/test/tap/shrinkwrap-shared-dev-dependency/desired-shrinkwrap-results.json12
-rw-r--r--deps/npm/test/tap/shrinkwrap-shared-dev-dependency/package.json11
-rw-r--r--deps/npm/test/tap/sorted-package-json.js93
-rw-r--r--deps/npm/test/tap/startstop.js64
-rw-r--r--deps/npm/test/tap/startstop/package.json7
-rw-r--r--deps/npm/test/tap/test-run-ls.js33
-rw-r--r--deps/npm/test/tap/uninstall-package.js41
-rw-r--r--deps/npm/test/tap/uninstall-package/package.json11
-rw-r--r--deps/npm/test/tap/url-dependencies.js79
-rw-r--r--deps/npm/test/tap/url-dependencies/package.json8
-rw-r--r--deps/npm/test/tap/version-no-tags.js73
-rw-r--r--deps/npm/wercker.yml22
2258 files changed, 64970 insertions, 84357 deletions
diff --git a/deps/npm/.npmignore b/deps/npm/.npmignore
index 6c258eaa0..ff0cb7fc3 100644
--- a/deps/npm/.npmignore
+++ b/deps/npm/.npmignore
@@ -10,6 +10,7 @@ npm-debug.log
node_modules/ronn
node_modules/tap
node_modules/.bin
+node_modules/npm-registry-mock
/npmrc
/release/
diff --git a/deps/npm/.travis.yml b/deps/npm/.travis.yml
new file mode 100644
index 000000000..0fbe8dc33
--- /dev/null
+++ b/deps/npm/.travis.yml
@@ -0,0 +1,5 @@
+language: node_js
+script: "npm run-script tap"
+node_js:
+ - "0.11"
+ - "0.10"
diff --git a/deps/npm/AUTHORS b/deps/npm/AUTHORS
index 4d964f4bd..3c0c0b0ba 100644
--- a/deps/npm/AUTHORS
+++ b/deps/npm/AUTHORS
@@ -1,48 +1,48 @@
# Authors sorted by whether or not they're me
-Isaac Z. Schlueter <i@izs.me> (http://blog.izs.me/)
-Steve Steiner <ssteinerX@gmail.com> (http://websaucesoftware.com/blog/)
-Mikeal Rogers <mikeal.rogers@gmail.com> (http://www.mikealrogers.com/)
-Aaron Blohowiak <aaron.blohowiak@gmail.com> (http://aaronblohowiak.com/)
-Martyn Smith <martyn@dollyfish.net.nz> (http://dollyfish.net.nz/)
-Mathias Pettersson <mape@mape.me> (http://mape.me/)
-Brian Hammond <brian@fictorial.com> (http://fictorial.com/)
-Charlie Robbins <charlie.robbins@gmail.com> (http://www.charlierobbins.com/)
-Francisco Treacy <francisco.treacy@gmail.com> (http://franciscotreacy.com/)
-Cliffano Subagio <cliffano@gmail.com> (http://blog.cliffano.com/)
-Christian Eager <christian.eager@nokia.com> (http://perpenduum.com)
-Dav Glass <davglass@gmail.com> (http://blog.davglass.com)
+Isaac Z. Schlueter <i@izs.me>
+Steve Steiner <ssteinerX@gmail.com>
+Mikeal Rogers <mikeal.rogers@gmail.com>
+Aaron Blohowiak <aaron.blohowiak@gmail.com>
+Martyn Smith <martyn@dollyfish.net.nz>
+Mathias Pettersson <mape@mape.me>
+Brian Hammond <brian@fictorial.com>
+Charlie Robbins <charlie.robbins@gmail.com>
+Francisco Treacy <francisco.treacy@gmail.com>
+Cliffano Subagio <cliffano@gmail.com>
+Christian Eager <christian.eager@nokia.com>
+Dav Glass <davglass@gmail.com>
Alex K. Wolfe <alexkwolfe@gmail.com>
-James Sanders <jimmyjazz14@gmail.com> (http://james-sanders.com/)
-Reid Burke <me@reidburke.com> (http://reidburke.com/)
-Arlo Breault <arlolra@gmail.com> (http://thoughtherder.com/)
-Timo Derstappen <teemow@gmail.com> (http://teemow.com)
+James Sanders <jimmyjazz14@gmail.com>
+Reid Burke <me@reidburke.com>
+Arlo Breault <arlolra@gmail.com>
+Timo Derstappen <teemow@gmail.com>
Bradley Meck <bradley.meck@gmail.com>
-Bart Teeuwisse <bart.teeuwisse@thecodemill.biz> (http://thecodemill.biz/)
-Ben Noordhuis <info@bnoordhuis.nl> (http://bnoordhuis.nl/)
-Tor Valamo <tor.valamo@gmail.com> (http://www.magnimedia.no/)
-Whyme.Lyu <5longluna@gmail.com> (http://whyme.kuantu.com/)
+Bart Teeuwisse <bart.teeuwisse@thecodemill.biz>
+Ben Noordhuis <info@bnoordhuis.nl>
+Tor Valamo <tor.valamo@gmail.com>
+Whyme.Lyu <5longluna@gmail.com>
Olivier Melcher <olivier.melcher@gmail.com>
-Tomaž Muraus <kami@k5-storitve.net> (http://www.tomaz-muraus.info)
-Evan Meagher <evan.meagher@gmail.com> (http://evanmeagher.net/)
-Orlando Vazquez <ovazquez@gmail.com> (http://2wycked.net/)
+Tomaž Muraus <kami@k5-storitve.net>
+Evan Meagher <evan.meagher@gmail.com>
+Orlando Vazquez <ovazquez@gmail.com>
George Miroshnykov <gmiroshnykov@lohika.com>
-Geoff Flarity (http://ca.linkedin.com/pub/geoff-flarity/a/536/43a)
+Geoff Flarity <geoff.flarity@gmail.com>
Pete Kruckenberg <pete@kruckenberg.com>
-Laurie Harper <laurie@holoweb.net> (http://laurie.holoweb.net/)
+Laurie Harper <laurie@holoweb.net>
Chris Wong <chris@chriswongstudio.com>
-Max Goodman <c@chromacode.com> (http://chromacode.com/)
+Max Goodman <c@chromacode.com>
Scott Bronson <brons_github@rinspin.com>
Federico Romero <federomero@gmail.com>
-Visnu Pitiyanuvath <visnupx@gmail.com> (http://visnup.com)
-Irakli Gozalishvili <rfobic@gmail.com> (http://jeditoolkit.com/)
-Mark Cahill <mark@tiemonster.info> (http://www.tiemonster.info/)
+Visnu Pitiyanuvath <visnupx@gmail.com>
+Irakli Gozalishvili <rfobic@gmail.com>
+Mark Cahill <mark@tiemonster.info>
Zearin <zearin@gonk.net>
Iain Sproat <iainsproat@gmail.com>
-Trent Mick <trentm@gmail.com> (http://trentm.com/)
-Felix Geisendörfer <felix@debuggable.com> (http://www.debuggable.com/)
-Conny Brunnkvist <cbrunnkvist@gmail.com> (http://twitter.com/connyb)
-Will Elwood <w.elwood08@gmail.com> (https://github.com/welwood08)
-Oleg Efimov <efimovov@gmail.com> (http://sannis.ru)
+Trent Mick <trentm@gmail.com>
+Felix Geisendörfer <felix@debuggable.com>
+Conny Brunnkvist <cbrunnkvist@gmail.com>
+Will Elwood <w.elwood08@gmail.com>
+Oleg Efimov <efimovov@gmail.com>
Martin Cooper <mfncooper@gmail.com>
Jameson Little <t.jameson.little@gmail.com>
cspotcode <cspotcode@gmail.com>
@@ -90,3 +90,69 @@ Paul Miller <paul@paulmillr.com>
seebees <seebees@gmail.com>
Carl Lange <carl@flax.ie>
Jan Lehnardt <jan@apache.org>
+Alexey Kreschuk <akrsch@gmail.com>
+Di Wu <dwu@palantir.com>
+Florian Margaine <florian@margaine.com>
+Forbes Lindesay <forbes@lindesay.co.uk>
+Ian Babrou <ibobrik@gmail.com>
+Jaakko Manninen <jaakko@rocketpack.fi>
+Johan Nordberg <its@johan-nordberg.com>
+Johan Sköld <johan@skold.cc>
+Larz Conwell <larz@larz-laptop.(none)>
+Luke Arduini <luke.arduini@gmail.com>
+Marcel Klehr <mklehr@gmx.net>
+Mathias Bynens <mathias@qiwi.be>
+Matt Lunn <matt@mattlunn.me.uk>
+Matt McClure <matt.mcclure@mapmyfitness.com>
+Nirk Niggler <nirk.niggler@gmail.com>
+Paolo Fragomeni <paolo@async.ly>
+Jake Verbaten (Raynos) <raynos2@gmail.com>
+Robert Kowalski <rok@kowalski.gd>
+Schabse Laks <Dev@SLaks.net>
+Stuart Knightley <stuart@stuartk.com>
+Stuart P. Bentley <stuart@testtrack4.com>
+Vaz Allen <vaz@tryptid.com>
+elisee <elisee@sparklin.org>
+Evan You <yyx990803@gmail.com>
+Wil Moore III <wil.moore@wilmoore.com>
+Dylan Greene <dylang@gmail.com>
+zeke <zeke@sikelianos.com>
+Andrew Horton <andrew.j.horton@gmail.com>
+Denis Gladkikh <outcoldman@gmail.com>
+Daniel Santiago <daniel.santiago@highlevelwebs.com>
+Alex Kocharin <alex@kocharin.ru>
+Evan Lucas <evanlucas@me.com>
+Steve Mason <stevem@brandwatch.com>
+Quinn Slack <qslack@qslack.com>
+Sébastien Santoro <dereckson@espace-win.org>
+CamilleM <camille.moulin@alterway.fr>
+Tom Huang <hzlhu.dargon@gmail.com>
+Sergey Belov <peimei@ya.ru>
+Younghoon Park <sola92@gmail.com>
+Yazhong Liu <yorkiefixer@gmail.com>
+Mikola Lysenko <mikolalysenko@gmail.com>
+Rafael de Oleza <rafa@spotify.com>
+Yeonghoon Park <sola92@gmail.com>
+Franck Cuny <franck.cuny@gmail.com>
+Alan Shaw <alan@freestyle-developments.co.uk>
+Alex Rodionov <p0deje@gmail.com>
+Alexej Yaroshevich <alex@qfox.ru>
+Elan Shanker <elan.shanker@gmail.com>
+François Frisch <francoisfrisch@gmail.com>
+Gabriel Falkenberg <gabriel.falkenberg@gmail.com>
+Jason Diamond <jason@diamond.name>
+Jess Martin <jessmartin@gmail.com>
+Jon Spencer <jon@jonspencer.ca>
+Matt Colyer <matt@colyer.name>
+Matt McClure <matt.mcclure@mapmyfitness.com>
+Maximilian Antoni <maximilian.antoni@juliusbaer.com>
+Nicholas Kinsey <pyro@feisty.io>
+Paulo Cesar <pauloc062@gmail.com>
+Quim Calpe <quim@kalpe.com>
+Robert Gieseke <robert.gieseke@gmail.com>
+Spain Train <michael.spainhower@opower.com>
+TJ Holowaychuk <tj@vision-media.ca>
+Thom Blake <tblake@brightroll.com>
+Trevor Burnham <tburnham@hubspot.com>
+bitspill <bitspill+github@bitspill.net>
+Neil Gentleman <ngentleman@gmail.com>
diff --git a/deps/npm/CONTRIBUTING.md b/deps/npm/CONTRIBUTING.md
new file mode 100644
index 000000000..0a5b53a12
--- /dev/null
+++ b/deps/npm/CONTRIBUTING.md
@@ -0,0 +1,9 @@
+## Before you submit a new issue
+
+* Check if there's a simple solution in the
+ [Troubleshooting](https://github.com/npm/npm/wiki/Troubleshooting)
+ wiki.
+* [Search for similar
+ issues](https://github.com/npm/npm/search?q=Similar%20issues&type=Issues).
+* Ensure your new issue conforms to the [Contributing
+ Guidelines](https://github.com/npm/npm/wiki/Contributing-Guidelines).
diff --git a/deps/npm/LICENSE b/deps/npm/LICENSE
index c0f51a741..2c0baba40 100644
--- a/deps/npm/LICENSE
+++ b/deps/npm/LICENSE
@@ -1,44 +1,220 @@
-Copyright (c) Isaac Z. Schlueter (the "Original Author")
+Copyright (c) npm, Inc. and Contributors
All rights reserved.
-MIT +no-false-attribs License
-
-Permission is hereby granted, free of charge, to any person
-obtaining a copy of this software and associated documentation
-files (the "Software"), to deal in the Software without
-restriction, including without limitation the rights to use,
-copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the
-Software is furnished to do so, subject to the following
-conditions:
-
-The above copyright notice and this permission notice shall be
-included in all copies or substantial portions of the Software.
-
-Distributions of all or part of the Software intended to be used
-by the recipients as they would use the unmodified Software,
-containing modifications that substantially alter, remove, or
-disable functionality of the Software, outside of the documented
-configuration mechanisms provided by the Software, shall be
-modified such that the Original Author's bug reporting email
-addresses and urls are either replaced with the contact information
-of the parties responsible for the changes, or removed entirely.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
-OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
-HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
-WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
-OTHER DEALINGS IN THE SOFTWARE.
-
-
-Except where noted, this license applies to any and all software
-programs and associated documentation files created by the
-Original Author, when distributed with the Software.
-
-"Node.js" and "node" trademark Joyent, Inc. npm is not officially
+npm is released under the Artistic License 2.0.
+The text of the License follows:
+
+
+--------
+
+
+The Artistic License 2.0
+
+Copyright (c) 2000-2006, The Perl Foundation.
+
+Everyone is permitted to copy and distribute verbatim copies
+of this license document, but changing it is not allowed.
+
+Preamble
+
+This license establishes the terms under which a given free software
+Package may be copied, modified, distributed, and/or redistributed.
+The intent is that the Copyright Holder maintains some artistic
+control over the development of that Package while still keeping the
+Package available as open source and free software.
+
+You are always permitted to make arrangements wholly outside of this
+license directly with the Copyright Holder of a given Package. If the
+terms of this license do not permit the full use that you propose to
+make of the Package, you should contact the Copyright Holder and seek
+a different licensing arrangement.
+
+Definitions
+
+ "Copyright Holder" means the individual(s) or organization(s)
+ named in the copyright notice for the entire Package.
+
+ "Contributor" means any party that has contributed code or other
+ material to the Package, in accordance with the Copyright Holder's
+ procedures.
+
+ "You" and "your" means any person who would like to copy,
+ distribute, or modify the Package.
+
+ "Package" means the collection of files distributed by the
+ Copyright Holder, and derivatives of that collection and/or of
+ those files. A given Package may consist of either the Standard
+ Version, or a Modified Version.
+
+ "Distribute" means providing a copy of the Package or making it
+ accessible to anyone else, or in the case of a company or
+ organization, to others outside of your company or organization.
+
+ "Distributor Fee" means any fee that you charge for Distributing
+ this Package or providing support for this Package to another
+ party. It does not mean licensing fees.
+
+ "Standard Version" refers to the Package if it has not been
+ modified, or has been modified only in ways explicitly requested
+ by the Copyright Holder.
+
+ "Modified Version" means the Package, if it has been changed, and
+ such changes were not explicitly requested by the Copyright
+ Holder.
+
+ "Original License" means this Artistic License as Distributed with
+ the Standard Version of the Package, in its current version or as
+ it may be modified by The Perl Foundation in the future.
+
+ "Source" form means the source code, documentation source, and
+ configuration files for the Package.
+
+ "Compiled" form means the compiled bytecode, object code, binary,
+ or any other form resulting from mechanical transformation or
+ translation of the Source form.
+
+
+Permission for Use and Modification Without Distribution
+
+(1) You are permitted to use the Standard Version and create and use
+Modified Versions for any purpose without restriction, provided that
+you do not Distribute the Modified Version.
+
+
+Permissions for Redistribution of the Standard Version
+
+(2) You may Distribute verbatim copies of the Source form of the
+Standard Version of this Package in any medium without restriction,
+either gratis or for a Distributor Fee, provided that you duplicate
+all of the original copyright notices and associated disclaimers. At
+your discretion, such verbatim copies may or may not include a
+Compiled form of the Package.
+
+(3) You may apply any bug fixes, portability changes, and other
+modifications made available from the Copyright Holder. The resulting
+Package will still be considered the Standard Version, and as such
+will be subject to the Original License.
+
+
+Distribution of Modified Versions of the Package as Source
+
+(4) You may Distribute your Modified Version as Source (either gratis
+or for a Distributor Fee, and with or without a Compiled form of the
+Modified Version) provided that you clearly document how it differs
+from the Standard Version, including, but not limited to, documenting
+any non-standard features, executables, or modules, and provided that
+you do at least ONE of the following:
+
+ (a) make the Modified Version available to the Copyright Holder
+ of the Standard Version, under the Original License, so that the
+ Copyright Holder may include your modifications in the Standard
+ Version.
+
+ (b) ensure that installation of your Modified Version does not
+ prevent the user installing or running the Standard Version. In
+ addition, the Modified Version must bear a name that is different
+ from the name of the Standard Version.
+
+ (c) allow anyone who receives a copy of the Modified Version to
+ make the Source form of the Modified Version available to others
+ under
+
+ (i) the Original License or
+
+ (ii) a license that permits the licensee to freely copy,
+ modify and redistribute the Modified Version using the same
+ licensing terms that apply to the copy that the licensee
+ received, and requires that the Source form of the Modified
+ Version, and of any works derived from it, be made freely
+ available in that license fees are prohibited but Distributor
+ Fees are allowed.
+
+
+Distribution of Compiled Forms of the Standard Version
+or Modified Versions without the Source
+
+(5) You may Distribute Compiled forms of the Standard Version without
+the Source, provided that you include complete instructions on how to
+get the Source of the Standard Version. Such instructions must be
+valid at the time of your distribution. If these instructions, at any
+time while you are carrying out such distribution, become invalid, you
+must provide new instructions on demand or cease further distribution.
+If you provide valid instructions or cease distribution within thirty
+days after you become aware that the instructions are invalid, then
+you do not forfeit any of your rights under this license.
+
+(6) You may Distribute a Modified Version in Compiled form without
+the Source, provided that you comply with Section 4 with respect to
+the Source of the Modified Version.
+
+
+Aggregating or Linking the Package
+
+(7) You may aggregate the Package (either the Standard Version or
+Modified Version) with other packages and Distribute the resulting
+aggregation provided that you do not charge a licensing fee for the
+Package. Distributor Fees are permitted, and licensing fees for other
+components in the aggregation are permitted. The terms of this license
+apply to the use and Distribution of the Standard or Modified Versions
+as included in the aggregation.
+
+(8) You are permitted to link Modified and Standard Versions with
+other works, to embed the Package in a larger work of your own, or to
+build stand-alone binary or bytecode versions of applications that
+include the Package, and Distribute the result without restriction,
+provided the result does not expose a direct interface to the Package.
+
+
+Items That are Not Considered Part of a Modified Version
+
+(9) Works (including, but not limited to, modules and scripts) that
+merely extend or make use of the Package, do not, by themselves, cause
+the Package to be a Modified Version. In addition, such works are not
+considered parts of the Package itself, and are not subject to the
+terms of this license.
+
+
+General Provisions
+
+(10) Any use, modification, and distribution of the Standard or
+Modified Versions is governed by this Artistic License. By using,
+modifying or distributing the Package, you accept this license. Do not
+use, modify, or distribute the Package, if you do not accept this
+license.
+
+(11) If your Modified Version has been derived from a Modified
+Version made by someone other than you, you are nevertheless required
+to ensure that your Modified Version complies with the requirements of
+this license.
+
+(12) This license does not grant you the right to use any trademark,
+service mark, tradename, or logo of the Copyright Holder.
+
+(13) This license includes the non-exclusive, worldwide,
+free-of-charge patent license to make, have made, use, offer to sell,
+sell, import and otherwise transfer the Package with respect to any
+patent claims licensable by the Copyright Holder that are necessarily
+infringed by the Package. If you institute patent litigation
+(including a cross-claim or counterclaim) against any party alleging
+that the Package constitutes direct or contributory patent
+infringement, then this Artistic License to you shall terminate on the
+date that such litigation is filed.
+
+(14) Disclaimer of Warranty:
+THE PACKAGE IS PROVIDED BY THE COPYRIGHT HOLDER AND CONTRIBUTORS "AS
+IS' AND WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES. THE IMPLIED
+WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR
+NON-INFRINGEMENT ARE DISCLAIMED TO THE EXTENT PERMITTED BY YOUR LOCAL
+LAW. UNLESS REQUIRED BY LAW, NO COPYRIGHT HOLDER OR CONTRIBUTOR WILL
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
+DAMAGES ARISING IN ANY WAY OUT OF THE USE OF THE PACKAGE, EVEN IF
+ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+--------
+
+
+"Node.js" and "node" trademark Joyent, Inc. npm is not officially
part of the Node.js project, and is neither owned by nor
officially affiliated with Joyent, Inc.
@@ -55,11 +231,5 @@ Copyright (c) by Tjarda Koster, http://jelloween.deviantart.com
included for use in the npm website and documentation,
used with permission.
-This program uses "request", Copyright (c) Mikeal Rogers,
-according to the terms of the Apache license.
-
-This program uses "mkdirp", Copyright (c) James Halliday,
-according to the terms of the MIT/X11 license.
-
-This program uses "opener", Copyright (c) Domenic Denicola,
-according to the terms of the DWTFPL2 license.
+This program uses several Node modules contained in the node_modules/
+subdirectory, according to the terms of their respective licenses.
diff --git a/deps/npm/Makefile b/deps/npm/Makefile
index 82fa8b65e..870965b52 100644
--- a/deps/npm/Makefile
+++ b/deps/npm/Makefile
@@ -1,31 +1,56 @@
+# vim: set softtabstop=2 shiftwidth=2:
SHELL = bash
markdowns = $(shell find doc -name '*.md' | grep -v 'index') README.md
+html_docdeps = html/dochead.html \
+ html/docfoot.html \
+ scripts/doc-build.sh \
+ package.json
+
cli_mandocs = $(shell find doc/cli -name '*.md' \
|sed 's|.md|.1|g' \
|sed 's|doc/cli/|man/man1/|g' ) \
- man/man1/README.1 \
- man/man1/index.1
+ man/man1/npm-README.1
api_mandocs = $(shell find doc/api -name '*.md' \
|sed 's|.md|.3|g' \
|sed 's|doc/api/|man/man3/|g' )
+files_mandocs = $(shell find doc/files -name '*.md' \
+ |sed 's|.md|.5|g' \
+ |sed 's|doc/files/|man/man5/|g' ) \
+ man/man5/npm-json.5 \
+ man/man5/npm-global.5
+
+misc_mandocs = $(shell find doc/misc -name '*.md' \
+ |sed 's|.md|.7|g' \
+ |sed 's|doc/misc/|man/man7/|g' ) \
+ man/man7/npm-index.7
+
cli_htmldocs = $(shell find doc/cli -name '*.md' \
- |grep -v 'index.md' \
|sed 's|.md|.html|g' \
- |sed 's|doc/cli/|html/doc/|g' ) \
- html/doc/README.html \
- html/doc/index.html
+ |sed 's|doc/cli/|html/doc/cli/|g' ) \
+ html/doc/README.html
api_htmldocs = $(shell find doc/api -name '*.md' \
|sed 's|.md|.html|g' \
- |sed 's|doc/api/|html/api/|g' )
+ |sed 's|doc/api/|html/doc/api/|g' )
+
+files_htmldocs = $(shell find doc/files -name '*.md' \
+ |sed 's|.md|.html|g' \
+ |sed 's|doc/files/|html/doc/files/|g' ) \
+ html/doc/files/npm-json.html \
+ html/doc/files/npm-global.html
-mandocs = $(api_mandocs) $(cli_mandocs)
+misc_htmldocs = $(shell find doc/misc -name '*.md' \
+ |sed 's|.md|.html|g' \
+ |sed 's|doc/misc/|html/doc/misc/|g' ) \
+ html/doc/index.html
-htmldocs = $(api_htmldocs) $(cli_htmldocs)
+mandocs = $(api_mandocs) $(cli_mandocs) $(files_mandocs) $(misc_mandocs)
+
+htmldocs = $(api_htmldocs) $(cli_htmldocs) $(files_htmldocs) $(misc_htmldocs)
all: doc
@@ -35,7 +60,7 @@ latest:
@echo "in this folder that you're looking at right now."
node cli.js install -g -f npm
-install: all
+install: docclean all
node cli.js install -g -f
# backwards compat
@@ -44,8 +69,8 @@ dev: install
link: uninstall
node cli.js link -f
-clean: doc-clean uninstall
- rm npmrc
+clean: ronnclean doc-clean uninstall
+ rm -rf npmrc
node cli.js cache clean
uninstall:
@@ -53,22 +78,20 @@ uninstall:
doc: $(mandocs) $(htmldocs)
+ronnclean:
+ rm -rf node_modules/ronn node_modules/.bin/ronn .building_ronn
+
docclean: doc-clean
doc-clean:
rm -rf \
- node_modules/ronn \
- node_modules/.bin/ronn \
- .building_ronn \
- doc/cli/index.md \
- doc/api/index.md \
- $(api_mandocs) \
- $(cli_mandocs) \
- $(api_htmldocs) \
- $(cli_htmldocs) \
- &>/dev/null || true
+ .building_ronn \
+ html/doc \
+ html/api \
+ man
# use `npm install ronn` for this to work.
-man/man1/README.1: README.md scripts/doc-build.sh package.json
+man/man1/npm-README.1: README.md scripts/doc-build.sh package.json
+ @[ -d man/man1 ] || mkdir -p man/man1
scripts/doc-build.sh $< $@
man/man1/%.1: doc/cli/%.md scripts/doc-build.sh package.json
@@ -79,52 +102,105 @@ man/man3/%.3: doc/api/%.md scripts/doc-build.sh package.json
@[ -d man/man3 ] || mkdir -p man/man3
scripts/doc-build.sh $< $@
-html/doc/README.html: README.md html/dochead.html html/docfoot.html scripts/doc-build.sh package.json
+man/man5/npm-json.5: man/man5/package.json.5
+ cp $< $@
+
+man/man5/npm-global.5: man/man5/npm-folders.5
+ cp $< $@
+
+man/man5/%.5: doc/files/%.md scripts/doc-build.sh package.json
+ @[ -d man/man5 ] || mkdir -p man/man5
scripts/doc-build.sh $< $@
-html/doc/%.html: doc/cli/%.md html/dochead.html html/docfoot.html scripts/doc-build.sh package.json
+doc/misc/npm-index.md: scripts/index-build.js package.json
+ node scripts/index-build.js > $@
+
+html/doc/index.html: doc/misc/npm-index.md $(html_docdeps)
+ @[ -d html/doc ] || mkdir -p html/doc
scripts/doc-build.sh $< $@
-html/api/%.html: doc/api/%.md html/dochead.html html/docfoot.html scripts/doc-build.sh package.json
+man/man7/%.7: doc/misc/%.md scripts/doc-build.sh package.json
+ @[ -d man/man7 ] || mkdir -p man/man7
scripts/doc-build.sh $< $@
-doc/cli/index.md: $(markdowns) scripts/index-build.js scripts/doc-build.sh package.json
- node scripts/index-build.js > $@
+html/doc/README.html: README.md $(html_docdeps)
+ @[ -d html/doc ] || mkdir -p html/doc
+ scripts/doc-build.sh $< $@
+
+html/doc/cli/%.html: doc/cli/%.md $(html_docdeps)
+ @[ -d html/doc/cli ] || mkdir -p html/doc/cli
+ scripts/doc-build.sh $< $@
+
+html/doc/api/%.html: doc/api/%.md $(html_docdeps)
+ @[ -d html/doc/api ] || mkdir -p html/doc/api
+ scripts/doc-build.sh $< $@
+
+html/doc/files/npm-json.html: html/doc/files/package.json.html
+ cp $< $@
+html/doc/files/npm-global.html: html/doc/files/npm-folders.html
+ cp $< $@
+
+html/doc/files/%.html: doc/files/%.md $(html_docdeps)
+ @[ -d html/doc/files ] || mkdir -p html/doc/files
+ scripts/doc-build.sh $< $@
+
+html/doc/misc/%.html: doc/misc/%.md $(html_docdeps)
+ @[ -d html/doc/misc ] || mkdir -p html/doc/misc
+ scripts/doc-build.sh $< $@
+
+
+
+ronn: node_modules/.bin/ronn
node_modules/.bin/ronn:
- node cli.js install ronn
+ node cli.js install ronn --no-global
doc: man
man: $(cli_docs) $(api_docs)
-test:
+test: doc
node cli.js test
publish: link doc
- @git push origin :v$(shell npm -v) || true
- @npm unpublish npm@$(shell npm -v) || true
- git clean -fd
+ @git push origin :v$(shell npm -v) 2>&1 || true
+ @npm unpublish npm@$(shell npm -v) 2>&1 || true
+ git clean -fd &&\
+ git push origin &&\
git push origin --tags &&\
npm publish &&\
- npm tag npm@$(shell npm -v) $(shell npm -v | awk -F. '{print $$1 "." $$2}') &&\
make doc-publish &&\
make zip-publish
docpublish: doc-publish
doc-publish: doc
+ # legacy urls
+ for f in $$(find html/doc/{cli,files,misc}/ -name '*.html'); do \
+ j=$$(basename $$f | sed 's|^npm-||g'); \
+ if ! [ -f html/doc/$$j ] && [ $$j != README.html ] && [ $$j != index.html ]; then \
+ perl -pi -e 's/ href="\.\.\// href="/g' <$$f >html/doc/$$j; \
+ fi; \
+ done
+ mkdir -p html/api
+ for f in $$(find html/doc/api/ -name '*.html'); do \
+ j=$$(basename $$f | sed 's|^npm-||g'); \
+ perl -pi -e 's/ href="\.\.\// href="/g' <$$f >html/api/$$j; \
+ done
rsync -vazu --stats --no-implied-dirs --delete \
- html/doc/ \
- node@npmjs.org:/home/node/npm-www/doc
- rsync -vazu --stats --no-implied-dirs --delete \
- html/api/ \
- node@npmjs.org:/home/node/npm-www/api
- rsync -vazu --stats --no-implied-dirs --delete \
- html/static/webfonts/ \
- node@npmjs.org:/home/node/npm-www/static/webfonts
+ html/doc/* \
+ ../npm-www/doc
rsync -vazu --stats --no-implied-dirs --delete \
- html/static/style.css \
- node@npmjs.org:/home/node/npm-www/static/
+ html/static/style.css \
+ ../npm-www/static/
+ #cleanup
+ rm -rf html/api
+ for f in html/doc/*.html; do \
+ case $$f in \
+ html/doc/README.html) continue ;; \
+ html/doc/index.html) continue ;; \
+ *) rm $$f ;; \
+ esac; \
+ done
zip-publish: release
scp release/* node@nodejs.org:dist/npm/
@@ -133,6 +209,6 @@ release:
@bash scripts/release.sh
sandwich:
- @[ $$(whoami) = "root" ] && (echo "ok"; echo "ham" > sandwich) || echo "make it yourself" && exit 13
+ @[ $$(whoami) = "root" ] && (echo "ok"; echo "ham" > sandwich) || (echo "make it yourself" && exit 13)
.PHONY: all latest install dev link doc clean uninstall test man doc-publish doc-clean docclean docpublish release zip-publish
diff --git a/deps/npm/README.md b/deps/npm/README.md
index 6769c91e4..0c08862fc 100644
--- a/deps/npm/README.md
+++ b/deps/npm/README.md
@@ -1,6 +1,6 @@
npm(1) -- node package manager
==============================
-
+[![Build Status](https://img.shields.io/travis/npm/npm/master.svg)](https://travis-ci.org/npm/npm)
## SYNOPSIS
This is just enough info to get you up and running.
@@ -36,7 +36,11 @@ paths, etc.) then read on.
## Fancy Install (Unix)
There's a pretty robust install script at
-<https://npmjs.org/install.sh>. You can download that and run it.
+<https://www.npmjs.org/install.sh>. You can download that and run it.
+
+Here's an example using curl:
+
+ curl -L https://npmjs.org/install.sh | sh
### Slightly Fancier
@@ -169,59 +173,61 @@ help config` to learn about all the options you can set there.
## More Docs
-Check out the [docs](https://npmjs.org/doc/),
-especially the [faq](https://npmjs.org/doc/faq.html).
+Check out the [docs](https://www.npmjs.org/doc/),
+especially the [faq](https://www.npmjs.org/doc/faq.html).
You can use the `npm help` command to read any of them.
If you're a developer, and you want to use npm to publish your program,
-you should [read this](https://npmjs.org/doc/developers.html)
+you should [read this](https://www.npmjs.org/doc/developers.html)
## Legal Stuff
-"npm" and "the npm registry" are owned by Isaac Z. Schlueter. All
-rights not explicitly granted in the MIT license are reserved. See the
-included LICENSE file for more details.
+"npm" and "The npm Registry" are owned by npm, Inc.
+All rights reserved. See the included LICENSE file for more details.
+
+"Node.js" and "node" are trademarks owned by Joyent, Inc.
+
+Modules published on the npm registry are not officially endorsed by
+npm, Inc. or the Node.js project.
-"Node.js" and "node" are trademarks owned by Joyent, Inc. npm is not
-officially part of the Node.js project, and is neither owned by nor
-officially affiliated with Joyent, Inc.
+Data published to the npm registry is not part of npm itself, and is
+the sole property of the publisher. While every effort is made to
+ensure accountability, there is absolutely no guarantee, warrantee, or
+assertion expressed or implied as to the quality, fitness for a
+specific purpose, or lack of malice in any given npm package.
-The packages in the npm registry are not part of npm itself, and are the
-sole property of their respective maintainers. While every effort is
-made to ensure accountability, there is absolutely no guarantee,
-warrantee, or assertion made as to the quality, fitness for a specific
-purpose, or lack of malice in any given npm package. Modules
-published on the npm registry are not affiliated with or endorsed by
-Joyent, Inc., Isaac Z. Schlueter, Ryan Dahl, or the Node.js project.
+If you have a complaint about a package in the public npm registry,
+and cannot [resolve it with the package
+owner](https://www.npmjs.org/doc/misc/npm-disputes.html), please email
+<support@npmjs.com> and explain the situation.
-If you have a complaint about a package in the npm registry, and cannot
-resolve it with the package owner, please express your concerns to
-Isaac Z. Schlueter at <i@izs.me>.
+Any data published to The npm Registry (including user account
+information) may be removed or modified at the sole discretion of the
+npm server administrators.
-### In plain english
+### In plainer english
-This is mine; not my employer's, not Node's, not Joyent's, not Ryan
-Dahl's.
+npm is the property of npm, Inc.
If you publish something, it's yours, and you are solely accountable
-for it. Not me, not Node, not Joyent, not Ryan Dahl.
+for it.
-If other people publish something, it's theirs. Not mine, not Node's,
-not Joyent's, not Ryan Dahl's.
+If other people publish something, it's theirs.
-Yes, you can publish something evil. It will be removed promptly if
-reported, and we'll lose respect for you. But there is no vetting
-process for published modules.
+Users can publish Bad Stuff. It will be removed promptly if reported.
+But there is no vetting process for published modules, and you use
+them at your own risk. Please inspect the source.
-If this concerns you, inspect the source before using packages.
+If you publish Bad Stuff, we may delete it from the registry, or even
+ban your account in extreme cases. So don't do that.
## BUGS
When you find issues, please report them:
* web:
- <https://github.com/isaacs/npm/issues>
+ <https://github.com/npm/npm/issues>
* email:
<npm-@googlegroups.com>
@@ -234,6 +240,6 @@ will no doubt tell you to put the output in a gist or email.
## SEE ALSO
* npm(1)
-* npm-faq(1)
+* npm-faq(7)
* npm-help(1)
-* npm-index(1)
+* npm-index(7)
diff --git a/deps/npm/doc/api/commands.md b/deps/npm/doc/api/commands.md
deleted file mode 100644
index eb7545639..000000000
--- a/deps/npm/doc/api/commands.md
+++ /dev/null
@@ -1,22 +0,0 @@
-npm-commands(3) -- npm commands
-===============================
-
-## SYNOPSIS
-
- npm.commands[<command>](args, callback)
-
-## DESCRIPTION
-
-npm comes with a full set of commands, and each of the commands takes a
-similar set of arguments.
-
-In general, all commands on the command object take an **array** of positional
-argument **strings**. The last argument to any function is a callback. Some
-commands are special and take other optional arguments.
-
-All commands have their own man page. See `man npm-<command>` for command-line
-usage, or `man 3 npm-<command>` for programmatic usage.
-
-## SEE ALSO
-
-* npm-index(1)
diff --git a/deps/npm/doc/api/deprecate.md b/deps/npm/doc/api/deprecate.md
deleted file mode 100644
index 0608d3864..000000000
--- a/deps/npm/doc/api/deprecate.md
+++ /dev/null
@@ -1,34 +0,0 @@
-npm-deprecate(3) -- Deprecate a version of a package
-====================================================
-
-## SYNOPSIS
-
- npm.commands.deprecate(args, callback)
-
-## DESCRIPTION
-
-This command will update the npm registry entry for a package, providing
-a deprecation warning to all who attempt to install it.
-
-The 'args' parameter must have exactly two elements:
-
-* `package[@version]`
-
- The `version` portion is optional, and may be either a range, or a
- specific version, or a tag.
-
-* `message`
-
- The warning message that will be printed whenever a user attempts to
- install the package.
-
-Note that you must be the package owner to deprecate something. See the
-`owner` and `adduser` help topics.
-
-To un-deprecate a package, specify an empty string (`""`) for the `message` argument.
-
-## SEE ALSO
-
-* npm-publish(3)
-* npm-unpublish(3)
-* npm-registry(1)
diff --git a/deps/npm/doc/api/init.md b/deps/npm/doc/api/init.md
deleted file mode 100644
index 5afc11b3b..000000000
--- a/deps/npm/doc/api/init.md
+++ /dev/null
@@ -1,29 +0,0 @@
-npm init(3) -- Interactively create a package.json file
-=======================================================
-
-## SYNOPSIS
-
- npm.commands.init(args, callback)
-
-## DESCRIPTION
-
-This will ask you a bunch of questions, and then write a package.json for you.
-
-It attempts to make reasonable guesses about what you want things to be set to,
-and then writes a package.json file with the options you've selected.
-
-If you already have a package.json file, it'll read that first, and default to
-the options in there.
-
-It is strictly additive, so it does not delete options from your package.json
-without a really good reason to do so.
-
-Since this function expects to be run on the command-line, it doesn't work very
-well as a programmatically. The best option is to roll your own, and since
-JavaScript makes it stupid simple to output formatted JSON, that is the
-preferred method. If you're sure you want to handle command-line prompting,
-then go ahead and use this programmatically.
-
-## SEE ALSO
-
-npm-json(1)
diff --git a/deps/npm/doc/api/bin.md b/deps/npm/doc/api/npm-bin.md
index f3dc48286..f3dc48286 100644
--- a/deps/npm/doc/api/bin.md
+++ b/deps/npm/doc/api/npm-bin.md
diff --git a/deps/npm/doc/api/bugs.md b/deps/npm/doc/api/npm-bugs.md
index cc4db8f9e..cc4db8f9e 100644
--- a/deps/npm/doc/api/bugs.md
+++ b/deps/npm/doc/api/npm-bugs.md
diff --git a/deps/npm/doc/api/npm-commands.md b/deps/npm/doc/api/npm-commands.md
new file mode 100644
index 000000000..36dcfd8d6
--- /dev/null
+++ b/deps/npm/doc/api/npm-commands.md
@@ -0,0 +1,22 @@
+npm-commands(3) -- npm commands
+===============================
+
+## SYNOPSIS
+
+ npm.commands[<command>](args, callback)
+
+## DESCRIPTION
+
+npm comes with a full set of commands, and each of the commands takes a
+similar set of arguments.
+
+In general, all commands on the command object take an **array** of positional
+argument **strings**. The last argument to any function is a callback. Some
+commands are special and take other optional arguments.
+
+All commands have their own man page. See `man npm-<command>` for command-line
+usage, or `man 3 npm-<command>` for programmatic usage.
+
+## SEE ALSO
+
+* npm-index(7)
diff --git a/deps/npm/doc/api/config.md b/deps/npm/doc/api/npm-config.md
index 7ae227428..7ae227428 100644
--- a/deps/npm/doc/api/config.md
+++ b/deps/npm/doc/api/npm-config.md
diff --git a/deps/npm/doc/api/npm-deprecate.md b/deps/npm/doc/api/npm-deprecate.md
new file mode 100644
index 000000000..200fb9c30
--- /dev/null
+++ b/deps/npm/doc/api/npm-deprecate.md
@@ -0,0 +1,34 @@
+npm-deprecate(3) -- Deprecate a version of a package
+====================================================
+
+## SYNOPSIS
+
+ npm.commands.deprecate(args, callback)
+
+## DESCRIPTION
+
+This command will update the npm registry entry for a package, providing
+a deprecation warning to all who attempt to install it.
+
+The 'args' parameter must have exactly two elements:
+
+* `package[@version]`
+
+ The `version` portion is optional, and may be either a range, or a
+ specific version, or a tag.
+
+* `message`
+
+ The warning message that will be printed whenever a user attempts to
+ install the package.
+
+Note that you must be the package owner to deprecate something. See the
+`owner` and `adduser` help topics.
+
+To un-deprecate a package, specify an empty string (`""`) for the `message` argument.
+
+## SEE ALSO
+
+* npm-publish(3)
+* npm-unpublish(3)
+* npm-registry(7)
diff --git a/deps/npm/doc/api/docs.md b/deps/npm/doc/api/npm-docs.md
index 2c5fc5e63..2c5fc5e63 100644
--- a/deps/npm/doc/api/docs.md
+++ b/deps/npm/doc/api/npm-docs.md
diff --git a/deps/npm/doc/api/edit.md b/deps/npm/doc/api/npm-edit.md
index b13fbb857..b13fbb857 100644
--- a/deps/npm/doc/api/edit.md
+++ b/deps/npm/doc/api/npm-edit.md
diff --git a/deps/npm/doc/api/explore.md b/deps/npm/doc/api/npm-explore.md
index a239f3df3..a239f3df3 100644
--- a/deps/npm/doc/api/explore.md
+++ b/deps/npm/doc/api/npm-explore.md
diff --git a/deps/npm/doc/api/help-search.md b/deps/npm/doc/api/npm-help-search.md
index 5c00cfc17..5c00cfc17 100644
--- a/deps/npm/doc/api/help-search.md
+++ b/deps/npm/doc/api/npm-help-search.md
diff --git a/deps/npm/doc/api/npm-init.md b/deps/npm/doc/api/npm-init.md
new file mode 100644
index 000000000..9b75bf791
--- /dev/null
+++ b/deps/npm/doc/api/npm-init.md
@@ -0,0 +1,29 @@
+npm init(3) -- Interactively create a package.json file
+=======================================================
+
+## SYNOPSIS
+
+ npm.commands.init(args, callback)
+
+## DESCRIPTION
+
+This will ask you a bunch of questions, and then write a package.json for you.
+
+It attempts to make reasonable guesses about what you want things to be set to,
+and then writes a package.json file with the options you've selected.
+
+If you already have a package.json file, it'll read that first, and default to
+the options in there.
+
+It is strictly additive, so it does not delete options from your package.json
+without a really good reason to do so.
+
+Since this function expects to be run on the command-line, it doesn't work very
+well as a programmatically. The best option is to roll your own, and since
+JavaScript makes it stupid simple to output formatted JSON, that is the
+preferred method. If you're sure you want to handle command-line prompting,
+then go ahead and use this programmatically.
+
+## SEE ALSO
+
+package.json(5)
diff --git a/deps/npm/doc/api/install.md b/deps/npm/doc/api/npm-install.md
index 12f665a76..12f665a76 100644
--- a/deps/npm/doc/api/install.md
+++ b/deps/npm/doc/api/npm-install.md
diff --git a/deps/npm/doc/api/link.md b/deps/npm/doc/api/npm-link.md
index ad8cefcab..ad8cefcab 100644
--- a/deps/npm/doc/api/link.md
+++ b/deps/npm/doc/api/npm-link.md
diff --git a/deps/npm/doc/api/load.md b/deps/npm/doc/api/npm-load.md
index a95a6b295..a95a6b295 100644
--- a/deps/npm/doc/api/load.md
+++ b/deps/npm/doc/api/npm-load.md
diff --git a/deps/npm/doc/api/ls.md b/deps/npm/doc/api/npm-ls.md
index ed890ff14..ed890ff14 100644
--- a/deps/npm/doc/api/ls.md
+++ b/deps/npm/doc/api/npm-ls.md
diff --git a/deps/npm/doc/api/outdated.md b/deps/npm/doc/api/npm-outdated.md
index 89f4cf6fa..89f4cf6fa 100644
--- a/deps/npm/doc/api/outdated.md
+++ b/deps/npm/doc/api/npm-outdated.md
diff --git a/deps/npm/doc/api/npm-owner.md b/deps/npm/doc/api/npm-owner.md
new file mode 100644
index 000000000..71fcccff5
--- /dev/null
+++ b/deps/npm/doc/api/npm-owner.md
@@ -0,0 +1,31 @@
+npm-owner(3) -- Manage package owners
+=====================================
+
+## SYNOPSIS
+
+ npm.commands.owner(args, callback)
+
+## DESCRIPTION
+
+The first element of the 'args' parameter defines what to do, and the subsequent
+elements depend on the action. Possible values for the action are (order of
+parameters are given in parenthesis):
+
+* ls (package):
+ List all the users who have access to modify a package and push new versions.
+ Handy when you need to know who to bug for help.
+* add (user, package):
+ Add a new user as a maintainer of a package. This user is enabled to modify
+ metadata, publish new versions, and add other owners.
+* rm (user, package):
+ Remove a user from the package owner list. This immediately revokes their
+ privileges.
+
+Note that there is only one level of access. Either you can modify a package,
+or you can't. Future versions may contain more fine-grained access levels, but
+that is not implemented at this time.
+
+## SEE ALSO
+
+* npm-publish(3)
+* npm-registry(7)
diff --git a/deps/npm/doc/api/pack.md b/deps/npm/doc/api/npm-pack.md
index cb339c0c4..cb339c0c4 100644
--- a/deps/npm/doc/api/pack.md
+++ b/deps/npm/doc/api/npm-pack.md
diff --git a/deps/npm/doc/api/prefix.md b/deps/npm/doc/api/npm-prefix.md
index 806dd4b6c..806dd4b6c 100644
--- a/deps/npm/doc/api/prefix.md
+++ b/deps/npm/doc/api/npm-prefix.md
diff --git a/deps/npm/doc/api/prune.md b/deps/npm/doc/api/npm-prune.md
index 2a4f17748..2a4f17748 100644
--- a/deps/npm/doc/api/prune.md
+++ b/deps/npm/doc/api/npm-prune.md
diff --git a/deps/npm/doc/api/npm-publish.md b/deps/npm/doc/api/npm-publish.md
new file mode 100644
index 000000000..6871dafb8
--- /dev/null
+++ b/deps/npm/doc/api/npm-publish.md
@@ -0,0 +1,30 @@
+npm-publish(3) -- Publish a package
+===================================
+
+## SYNOPSIS
+
+ npm.commands.publish([packages,] callback)
+
+## DESCRIPTION
+
+Publishes a package to the registry so that it can be installed by name.
+Possible values in the 'packages' array are:
+
+* `<folder>`:
+ A folder containing a package.json file
+
+* `<tarball>`:
+ A url or file path to a gzipped tar archive containing a single folder
+ with a package.json file inside.
+
+If the package array is empty, npm will try to publish something in the
+current working directory.
+
+This command could fails if one of the packages specified already exists in
+the registry. Overwrites when the "force" environment variable is set.
+
+## SEE ALSO
+
+* npm-registry(7)
+* npm-adduser(1)
+* npm-owner(3)
diff --git a/deps/npm/doc/api/rebuild.md b/deps/npm/doc/api/npm-rebuild.md
index 8b8989806..8b8989806 100644
--- a/deps/npm/doc/api/rebuild.md
+++ b/deps/npm/doc/api/npm-rebuild.md
diff --git a/deps/npm/doc/api/npm-repo.md b/deps/npm/doc/api/npm-repo.md
new file mode 100644
index 000000000..af3c52fab
--- /dev/null
+++ b/deps/npm/doc/api/npm-repo.md
@@ -0,0 +1,19 @@
+npm-repo(3) -- Open package repository page in the browser
+========================================================
+
+## SYNOPSIS
+
+ npm.commands.repo(package, callback)
+
+## DESCRIPTION
+
+This command tries to guess at the likely location of a package's
+repository URL, and then tries to open it using the `--browser`
+config param.
+
+Like other commands, the first parameter is an array. This command only
+uses the first element, which is expected to be a package name with an
+optional version number.
+
+This command will launch a browser, so this command may not be the most
+friendly for programmatic use.
diff --git a/deps/npm/doc/api/restart.md b/deps/npm/doc/api/npm-restart.md
index c40704438..c40704438 100644
--- a/deps/npm/doc/api/restart.md
+++ b/deps/npm/doc/api/npm-restart.md
diff --git a/deps/npm/doc/api/root.md b/deps/npm/doc/api/npm-root.md
index 1c3ab5640..1c3ab5640 100644
--- a/deps/npm/doc/api/root.md
+++ b/deps/npm/doc/api/npm-root.md
diff --git a/deps/npm/doc/api/npm-run-script.md b/deps/npm/doc/api/npm-run-script.md
new file mode 100644
index 000000000..91ad95351
--- /dev/null
+++ b/deps/npm/doc/api/npm-run-script.md
@@ -0,0 +1,27 @@
+npm-run-script(3) -- Run arbitrary package scripts
+==================================================
+
+## SYNOPSIS
+
+ npm.commands.run-script(args, callback)
+
+## DESCRIPTION
+
+This runs an arbitrary command from a package's "scripts" object.
+
+It is used by the test, start, restart, and stop commands, but can be
+called directly, as well.
+
+The 'args' parameter is an array of strings. Behavior depends on the number
+of elements. If there is only one element, npm assumes that the element
+represents a command to be run on the local repository. If there is more than
+one element, then the first is assumed to be the package and the second is
+assumed to be the command to run. All other elements are ignored.
+
+## SEE ALSO
+
+* npm-scripts(7)
+* npm-test(3)
+* npm-start(3)
+* npm-restart(3)
+* npm-stop(3)
diff --git a/deps/npm/doc/api/search.md b/deps/npm/doc/api/npm-search.md
index 30651d76a..30651d76a 100644
--- a/deps/npm/doc/api/search.md
+++ b/deps/npm/doc/api/npm-search.md
diff --git a/deps/npm/doc/api/shrinkwrap.md b/deps/npm/doc/api/npm-shrinkwrap.md
index 6584d6a0d..6584d6a0d 100644
--- a/deps/npm/doc/api/shrinkwrap.md
+++ b/deps/npm/doc/api/npm-shrinkwrap.md
diff --git a/deps/npm/doc/api/start.md b/deps/npm/doc/api/npm-start.md
index 74491146a..74491146a 100644
--- a/deps/npm/doc/api/start.md
+++ b/deps/npm/doc/api/npm-start.md
diff --git a/deps/npm/doc/api/stop.md b/deps/npm/doc/api/npm-stop.md
index 0f8333d35..0f8333d35 100644
--- a/deps/npm/doc/api/stop.md
+++ b/deps/npm/doc/api/npm-stop.md
diff --git a/deps/npm/doc/api/submodule.md b/deps/npm/doc/api/npm-submodule.md
index 2d8bafaa3..2d8bafaa3 100644
--- a/deps/npm/doc/api/submodule.md
+++ b/deps/npm/doc/api/npm-submodule.md
diff --git a/deps/npm/doc/api/tag.md b/deps/npm/doc/api/npm-tag.md
index b5a3d7faa..b5a3d7faa 100644
--- a/deps/npm/doc/api/tag.md
+++ b/deps/npm/doc/api/npm-tag.md
diff --git a/deps/npm/doc/api/test.md b/deps/npm/doc/api/npm-test.md
index bc48dcc35..bc48dcc35 100644
--- a/deps/npm/doc/api/test.md
+++ b/deps/npm/doc/api/npm-test.md
diff --git a/deps/npm/doc/api/uninstall.md b/deps/npm/doc/api/npm-uninstall.md
index 4505295b3..4505295b3 100644
--- a/deps/npm/doc/api/uninstall.md
+++ b/deps/npm/doc/api/npm-uninstall.md
diff --git a/deps/npm/doc/api/unpublish.md b/deps/npm/doc/api/npm-unpublish.md
index 6cbc5c1f3..6cbc5c1f3 100644
--- a/deps/npm/doc/api/unpublish.md
+++ b/deps/npm/doc/api/npm-unpublish.md
diff --git a/deps/npm/doc/api/update.md b/deps/npm/doc/api/npm-update.md
index bf02fd3c8..bf02fd3c8 100644
--- a/deps/npm/doc/api/update.md
+++ b/deps/npm/doc/api/npm-update.md
diff --git a/deps/npm/doc/api/version.md b/deps/npm/doc/api/npm-version.md
index bd40102c4..bd40102c4 100644
--- a/deps/npm/doc/api/version.md
+++ b/deps/npm/doc/api/npm-version.md
diff --git a/deps/npm/doc/api/view.md b/deps/npm/doc/api/npm-view.md
index fd0076c96..fd0076c96 100644
--- a/deps/npm/doc/api/view.md
+++ b/deps/npm/doc/api/npm-view.md
diff --git a/deps/npm/doc/api/whoami.md b/deps/npm/doc/api/npm-whoami.md
index 598a1ab1a..598a1ab1a 100644
--- a/deps/npm/doc/api/whoami.md
+++ b/deps/npm/doc/api/npm-whoami.md
diff --git a/deps/npm/doc/api/npm.md b/deps/npm/doc/api/npm.md
index 8c7a8168e..d05684e8b 100644
--- a/deps/npm/doc/api/npm.md
+++ b/deps/npm/doc/api/npm.md
@@ -4,7 +4,7 @@ npm(3) -- node package manager
## SYNOPSIS
var npm = require("npm")
- npm.load([configObject,] function (er, npm) {
+ npm.load([configObject, ]function (er, npm) {
// use the npm object, now that it's loaded.
npm.config.set(key, val)
@@ -30,11 +30,11 @@ If you provide `configObject` as an object hash of top-level
configs, they override the values stored in the various config
locations. In the npm command line client, this set of configs
is parsed from the command line options. Additional configuration
-params are loaded from two configuration files. See `npm-config(1)`
-for more information.
+params are loaded from two configuration files. See `npm-config(1)`,
+`npm-config(7)`, and `npmrc(5)` for more information.
After that, each of the functions are accessible in the
-commands object: `npm.commands.<cmd>`. See `npm-index(1)` for a list of
+commands object: `npm.commands.<cmd>`. See `npm-index(7)` for a list of
all possible commands.
All commands on the command object take an **array** of positional argument
diff --git a/deps/npm/doc/api/owner.md b/deps/npm/doc/api/owner.md
deleted file mode 100644
index de203c072..000000000
--- a/deps/npm/doc/api/owner.md
+++ /dev/null
@@ -1,31 +0,0 @@
-npm-owner(3) -- Manage package owners
-=====================================
-
-## SYNOPSIS
-
- npm.commands.owner(args, callback)
-
-## DESCRIPTION
-
-The first element of the 'args' parameter defines what to do, and the subsequent
-elements depend on the action. Possible values for the action are (order of
-parameters are given in parenthesis):
-
-* ls (package):
- List all the users who have access to modify a package and push new versions.
- Handy when you need to know who to bug for help.
-* add (user, package):
- Add a new user as a maintainer of a package. This user is enabled to modify
- metadata, publish new versions, and add other owners.
-* rm (user, package):
- Remove a user from the package owner list. This immediately revokes their
- privileges.
-
-Note that there is only one level of access. Either you can modify a package,
-or you can't. Future versions may contain more fine-grained access levels, but
-that is not implemented at this time.
-
-## SEE ALSO
-
-* npm-publish(3)
-* npm-registry(1)
diff --git a/deps/npm/doc/api/publish.md b/deps/npm/doc/api/publish.md
deleted file mode 100644
index a743303f8..000000000
--- a/deps/npm/doc/api/publish.md
+++ /dev/null
@@ -1,30 +0,0 @@
-npm-publish(3) -- Publish a package
-===================================
-
-## SYNOPSIS
-
- npm.commands.publish([packages,] callback)
-
-## DESCRIPTION
-
-Publishes a package to the registry so that it can be installed by name.
-Possible values in the 'packages' array are:
-
-* `<folder>`:
- A folder containing a package.json file
-
-* `<tarball>`:
- A url or file path to a gzipped tar archive containing a single folder
- with a package.json file inside.
-
-If the package array is empty, npm will try to publish something in the
-current working directory.
-
-This command could fails if one of the packages specified already exists in
-the registry. Overwrites when the "force" environment variable is set.
-
-## SEE ALSO
-
-* npm-registry(1)
-* npm-adduser(1)
-* npm-owner(3)
diff --git a/deps/npm/doc/api/run-script.md b/deps/npm/doc/api/run-script.md
deleted file mode 100644
index f15900ecb..000000000
--- a/deps/npm/doc/api/run-script.md
+++ /dev/null
@@ -1,27 +0,0 @@
-npm-run-script(3) -- Run arbitrary package scripts
-==================================================
-
-## SYNOPSIS
-
- npm.commands.run-script(args, callback)
-
-## DESCRIPTION
-
-This runs an arbitrary command from a package's "scripts" object.
-
-It is used by the test, start, restart, and stop commands, but can be
-called directly, as well.
-
-The 'args' parameter is an array of strings. Behavior depends on the number
-of elements. If there is only one element, npm assumes that the element
-represents a command to be run on the local repository. If there is more than
-one element, then the first is assumed to be the package and the second is
-assumed to be the command to run. All other elements are ignored.
-
-## SEE ALSO
-
-* npm-scripts(1)
-* npm-test(3)
-* npm-start(3)
-* npm-restart(3)
-* npm-stop(3)
diff --git a/deps/npm/doc/cli/adduser.md b/deps/npm/doc/cli/adduser.md
deleted file mode 100644
index 51aa6f6a3..000000000
--- a/deps/npm/doc/cli/adduser.md
+++ /dev/null
@@ -1,36 +0,0 @@
-npm-adduser(1) -- Add a registry user account
-=============================================
-
-## SYNOPSIS
-
- npm adduser
-
-## DESCRIPTION
-
-Create or verify a user named `<username>` in the npm registry, and
-save the credentials to the `.npmrc` file.
-
-The username, password, and email are read in from prompts.
-
-You may use this command to change your email address, but not username
-or password.
-
-To reset your password, go to <http://admin.npmjs.org/>
-
-You may use this command multiple times with the same user account to
-authorize on a new machine.
-
-## CONFIGURATION
-
-### registry
-
-Default: http://registry.npmjs.org/
-
-The base URL of the npm package registry.
-
-## SEE ALSO
-
-* npm-registry(1)
-* npm-config(1)
-* npm-owner(1)
-* npm-whoami(1)
diff --git a/deps/npm/doc/cli/bin.md b/deps/npm/doc/cli/bin.md
deleted file mode 100644
index 2c2e7c477..000000000
--- a/deps/npm/doc/cli/bin.md
+++ /dev/null
@@ -1,17 +0,0 @@
-npm-bin(1) -- Display npm bin folder
-====================================
-
-## SYNOPSIS
-
- npm bin
-
-## DESCRIPTION
-
-Print the folder where npm will install executables.
-
-## SEE ALSO
-
-* npm-prefix(1)
-* npm-root(1)
-* npm-folders(1)
-* npm-config(1)
diff --git a/deps/npm/doc/cli/bugs.md b/deps/npm/doc/cli/bugs.md
deleted file mode 100644
index 45ee84b58..000000000
--- a/deps/npm/doc/cli/bugs.md
+++ /dev/null
@@ -1,38 +0,0 @@
-npm-bugs(1) -- Bugs for a package in a web browser maybe
-========================================================
-
-## SYNOPSIS
-
- npm bugs <pkgname>
-
-## DESCRIPTION
-
-This command tries to guess at the likely location of a package's
-bug tracker URL, and then tries to open it using the `--browser`
-config param.
-
-## CONFIGURATION
-
-### browser
-
-* Default: OS X: `"open"`, Windows: `"start"`, Others: `"xdg-open"`
-* Type: String
-
-The browser that is called by the `npm bugs` command to open websites.
-
-### registry
-
-* Default: https://registry.npmjs.org/
-* Type: url
-
-The base URL of the npm package registry.
-
-
-## SEE ALSO
-
-* npm-docs(1)
-* npm-view(1)
-* npm-publish(1)
-* npm-registry(1)
-* npm-config(1)
-* npm-json(1)
diff --git a/deps/npm/doc/cli/build.md b/deps/npm/doc/cli/build.md
deleted file mode 100644
index 978f4a6d6..000000000
--- a/deps/npm/doc/cli/build.md
+++ /dev/null
@@ -1,22 +0,0 @@
-npm-build(1) -- Build a package
-===============================
-
-## SYNOPSIS
-
- npm build <package-folder>
-
-* `<package-folder>`:
- A folder containing a `package.json` file in its root.
-
-## DESCRIPTION
-
-This is the plumbing command called by `npm link` and `npm install`.
-
-It should generally not be called directly.
-
-## SEE ALSO
-
-* npm-install(1)
-* npm-link(1)
-* npm-scripts(1)
-* npm-json(1)
diff --git a/deps/npm/doc/cli/cache.md b/deps/npm/doc/cli/cache.md
deleted file mode 100644
index 1fa128ad4..000000000
--- a/deps/npm/doc/cli/cache.md
+++ /dev/null
@@ -1,70 +0,0 @@
-npm-cache(1) -- Manipulates packages cache
-==========================================
-
-## SYNOPSIS
-
- npm cache add <tarball file>
- npm cache add <folder>
- npm cache add <tarball url>
- npm cache add <name>@<version>
-
- npm cache ls [<path>]
-
- npm cache clean [<path>]
-
-## DESCRIPTION
-
-Used to add, list, or clear the npm cache folder.
-
-* add:
- Add the specified package to the local cache. This command is primarily
- intended to be used internally by npm, but it can provide a way to
- add data to the local installation cache explicitly.
-
-* ls:
- Show the data in the cache. Argument is a path to show in the cache
- folder. Works a bit like the `find` program, but limited by the
- `depth` config.
-
-* clean:
- Delete data out of the cache folder. If an argument is provided, then
- it specifies a subpath to delete. If no argument is provided, then
- the entire cache is cleared.
-
-## DETAILS
-
-npm stores cache data in `$HOME/.npm`. For each package that is added
-to the cache, three pieces of information are stored in
-`{cache}/{name}/{version}`:
-
-* .../package/:
- A folder containing the package contents as they appear in the tarball.
-* .../package.json:
- The package.json file, as npm sees it, with overlays applied and a _id attribute.
-* .../package.tgz:
- The tarball for that version.
-
-Additionally, whenever a registry request is made, a `.cache.json` file
-is placed at the corresponding URI, to store the ETag and the requested
-data.
-
-Commands that make non-essential registry requests (such as `search` and
-`view`, or the completion scripts) generally specify a minimum timeout.
-If the `.cache.json` file is younger than the specified timeout, then
-they do not make an HTTP request to the registry.
-
-## CONFIGURATION
-
-### cache
-
-Default: `$HOME/.npm` on Posix, or `$HOME/npm-cache` on Windows.
-
-The root cache folder.
-
-## SEE ALSO
-
-* npm-folders(1)
-* npm-config(1)
-* npm-install(1)
-* npm-publish(1)
-* npm-pack(1)
diff --git a/deps/npm/doc/cli/changelog.md b/deps/npm/doc/cli/changelog.md
deleted file mode 100644
index 64feeacda..000000000
--- a/deps/npm/doc/cli/changelog.md
+++ /dev/null
@@ -1,80 +0,0 @@
-npm-changelog(1) -- Changes
-===========================
-
-## HISTORY
-
-### 1.1.3, 1.1.4
-
-* Update request to support HTTPS-over-HTTP proxy tunneling
-* Throw on undefined envs in config settings
-* Update which to 1.0.5
-* Fix windows UNC busyloop in findPrefix
-* Bundle nested bundleDependencies properly
-* Alias adduser to add-user
-* Doc updates (Christian Howe, Henrik Hodne, Andrew Lunny)
-* ignore logfd/outfd streams in makeEnv() (Rod Vagg)
-* shrinkwrap: Behave properly with url-installed deps
-* install: Support --save with url install targets
-* Support installing naked tars or single-file modules from urls etc.
-* init: Don't add engines section
-* Don't run make clean on rebuild
-* Added missing unicode replacement (atomizer)
-
-### 1.1.2
-
-Dave Pacheco (2):
- add "npm shrinkwrap"
-
-Martin Cooper (1):
- Fix #1753 Make a copy of the cached objects we'll modify.
-
-Tim Oxley (1):
- correctly remove readme from default npm view command.
-
-Tyler Green (1):
- fix #2187 set terminal columns to Infinity if 0
-
-isaacs (19):
- update minimatch
- update request
- Experimental: single-file modules
- Fix #2172 Don't remove global mans uninstalling local pkgs
- Add --versions flag to show the version of node as well
- Support --json flag for ls output
- update request to 2.9.151
-
-### 1.1
-* Replace system tar dependency with a JS tar
-* Continue to refine
-
-### 1.0
-* Greatly simplified folder structure
-* Install locally (bundle by default)
-* Drastic rearchitecture
-
-### 0.3
-* More correct permission/uid handling when running as root
-* Require node 0.4.0
-* Reduce featureset
-* Packages without "main" modules don't export modules
-* Remove support for invalid JSON (since node doesn't support it)
-
-### 0.2
-* First allegedly "stable" release
-* Most functionality implemented
-* Used shim files and `name@version` symlinks
-* Feature explosion
-* Kind of a mess
-
-### 0.1
-* push to beta, and announce
-* Solaris and Cygwin support
-
-### 0.0
-* Lots of sketches and false starts; abandoned a few times
-* Core functionality established
-
-## SEE ALSO
-
-* npm(1)
-* npm-faq(1)
diff --git a/deps/npm/doc/cli/coding-style.md b/deps/npm/doc/cli/coding-style.md
deleted file mode 100644
index 1aa3e80e2..000000000
--- a/deps/npm/doc/cli/coding-style.md
+++ /dev/null
@@ -1,181 +0,0 @@
-npm-coding-style(1) -- npm's "funny" coding style
-=================================================
-
-## DESCRIPTION
-
-npm's coding style is a bit unconventional. It is not different for
-difference's sake, but rather a carefully crafted style that is
-designed to reduce visual clutter and make bugs more apparent.
-
-If you want to contribute to npm (which is very encouraged), you should
-make your code conform to npm's style.
-
-Note: this concerns npm's code not the specific packages at npmjs.org
-
-## Line Length
-
-Keep lines shorter than 80 characters. It's better for lines to be
-too short than to be too long. Break up long lists, objects, and other
-statements onto multiple lines.
-
-## Indentation
-
-Two-spaces. Tabs are better, but they look like hell in web browsers
-(and on github), and node uses 2 spaces, so that's that.
-
-Configure your editor appropriately.
-
-## Curly braces
-
-Curly braces belong on the same line as the thing that necessitates them.
-
-Bad:
-
- function ()
- {
-
-Good:
-
- function () {
-
-If a block needs to wrap to the next line, use a curly brace. Don't
-use it if it doesn't.
-
-Bad:
-
- if (foo) { bar() }
- while (foo)
- bar()
-
-Good:
-
- if (foo) bar()
- while (foo) {
- bar()
- }
-
-## Semicolons
-
-Don't use them except in four situations:
-
-* `for (;;)` loops. They're actually required.
-* null loops like: `while (something) ;` (But you'd better have a good
- reason for doing that.)
-* `case "foo": doSomething(); break`
-* In front of a leading `(` or `[` at the start of the line.
- This prevents the expression from being interpreted
- as a function call or property access, respectively.
-
-Some examples of good semicolon usage:
-
- ;(x || y).doSomething()
- ;[a, b, c].forEach(doSomething)
- for (var i = 0; i < 10; i ++) {
- switch (state) {
- case "begin": start(); continue
- case "end": finish(); break
- default: throw new Error("unknown state")
- }
- end()
- }
-
-Note that starting lines with `-` and `+` also should be prefixed
-with a semicolon, but this is much less common.
-
-## Comma First
-
-If there is a list of things separated by commas, and it wraps
-across multiple lines, put the comma at the start of the next
-line, directly below the token that starts the list. Put the
-final token in the list on a line by itself. For example:
-
- var magicWords = [ "abracadabra"
- , "gesundheit"
- , "ventrilo"
- ]
- , spells = { "fireball" : function () { setOnFire() }
- , "water" : function () { putOut() }
- }
- , a = 1
- , b = "abc"
- , etc
- , somethingElse
-
-## Whitespace
-
-Put a single space in front of ( for anything other than a function call.
-Also use a single space wherever it makes things more readable.
-
-Don't leave trailing whitespace at the end of lines. Don't indent empty
-lines. Don't use more spaces than are helpful.
-
-## Functions
-
-Use named functions. They make stack traces a lot easier to read.
-
-## Callbacks, Sync/async Style
-
-Use the asynchronous/non-blocking versions of things as much as possible.
-It might make more sense for npm to use the synchronous fs APIs, but this
-way, the fs and http and child process stuff all uses the same callback-passing
-methodology.
-
-The callback should always be the last argument in the list. Its first
-argument is the Error or null.
-
-Be very careful never to ever ever throw anything. It's worse than useless.
-Just send the error message back as the first argument to the callback.
-
-## Errors
-
-Always create a new Error object with your message. Don't just return a
-string message to the callback. Stack traces are handy.
-
-## Logging
-
-Logging is done using the [npmlog](https://github.com/isaacs/npmlog)
-utility.
-
-Please clean up logs when they are no longer helpful. In particular,
-logging the same object over and over again is not helpful. Logs should
-report what's happening so that it's easier to track down where a fault
-occurs.
-
-Use appropriate log levels. See `npm-config(1)` and search for
-"loglevel".
-
-## Case, naming, etc.
-
-Use `lowerCamelCase` for multiword identifiers when they refer to objects,
-functions, methods, members, or anything not specified in this section.
-
-Use `UpperCamelCase` for class names (things that you'd pass to "new").
-
-Use `all-lower-hyphen-css-case` for multiword filenames and config keys.
-
-Use named functions. They make stack traces easier to follow.
-
-Use `CAPS_SNAKE_CASE` for constants, things that should never change
-and are rarely used.
-
-Use a single uppercase letter for function names where the function
-would normally be anonymous, but needs to call itself recursively. It
-makes it clear that it's a "throwaway" function.
-
-## null, undefined, false, 0
-
-Boolean variables and functions should always be either `true` or
-`false`. Don't set it to 0 unless it's supposed to be a number.
-
-When something is intentionally missing or removed, set it to `null`.
-
-Don't set things to `undefined`. Reserve that value to mean "not yet
-set to anything."
-
-Boolean objects are verboten.
-
-## SEE ALSO
-
-* npm-developers(1)
-* npm-faq(1)
-* npm(1)
diff --git a/deps/npm/doc/cli/completion.md b/deps/npm/doc/cli/completion.md
deleted file mode 100644
index 48bc50fd8..000000000
--- a/deps/npm/doc/cli/completion.md
+++ /dev/null
@@ -1,29 +0,0 @@
-npm-completion(1) -- Tab Completion for npm
-===========================================
-
-## SYNOPSIS
-
- . <(npm completion)
-
-## DESCRIPTION
-
-Enables tab-completion in all npm commands.
-
-The synopsis above
-loads the completions into your current shell. Adding it to
-your ~/.bashrc or ~/.zshrc will make the completions available
-everywhere.
-
-You may of course also pipe the output of npm completion to a file
-such as `/usr/local/etc/bash_completion.d/npm` if you have a system
-that will read that file for you.
-
-When `COMP_CWORD`, `COMP_LINE`, and `COMP_POINT` are defined in the
-environment, `npm completion` acts in "plumbing mode", and outputs
-completions based on the arguments.
-
-## SEE ALSO
-
-* npm-developers(1)
-* npm-faq(1)
-* npm(1)
diff --git a/deps/npm/doc/cli/config.md b/deps/npm/doc/cli/config.md
deleted file mode 100644
index 54133bec3..000000000
--- a/deps/npm/doc/cli/config.md
+++ /dev/null
@@ -1,882 +0,0 @@
-npm-config(1) -- Manage the npm configuration file
-==================================================
-
-## SYNOPSIS
-
- npm config set <key> <value> [--global]
- npm config get <key>
- npm config delete <key>
- npm config list
- npm config edit
- npm get <key>
- npm set <key> <value> [--global]
-
-## DESCRIPTION
-
-npm gets its configuration values from 6 sources, in this priority:
-
-### Command Line Flags
-
-Putting `--foo bar` on the command line sets the
-`foo` configuration parameter to `"bar"`. A `--` argument tells the cli
-parser to stop reading flags. A `--flag` parameter that is at the *end* of
-the command will be given the value of `true`.
-
-### Environment Variables
-
-Any environment variables that start with `npm_config_` will be interpreted
-as a configuration parameter. For example, putting `npm_config_foo=bar` in
-your environment will set the `foo` configuration parameter to `bar`. Any
-environment configurations that are not given a value will be given the value
-of `true`. Config values are case-insensitive, so `NPM_CONFIG_FOO=bar` will
-work the same.
-
-### Per-user config file
-
-`$HOME/.npmrc` (or the `userconfig` param, if set above)
-
-This file is an ini-file formatted list of `key = value` parameters.
-Environment variables can be replaced using `${VARIABLE_NAME}`. For example:
-
- prefix = ${HOME}/.npm-packages
-
-### Global config file
-
-`$PREFIX/etc/npmrc` (or the `globalconfig` param, if set above):
-This file is an ini-file formatted list of `key = value` parameters.
-Environment variables can be replaced as above.
-
-### Built-in config file
-
-`path/to/npm/itself/npmrc`
-
-This is an unchangeable "builtin"
-configuration file that npm keeps consistent across updates. Set
-fields in here using the `./configure` script that comes with npm.
-This is primarily for distribution maintainers to override default
-configs in a standard and consistent manner.
-
-### Default Configs
-
-A set of configuration parameters that are internal to npm, and are
-defaults if nothing else is specified.
-
-## Sub-commands
-
-Config supports the following sub-commands:
-
-### set
-
- npm config set key value
-
-Sets the config key to the value.
-
-If value is omitted, then it sets it to "true".
-
-### get
-
- npm config get key
-
-Echo the config value to stdout.
-
-### list
-
- npm config list
-
-Show all the config settings.
-
-### delete
-
- npm config delete key
-
-Deletes the key from all configuration files.
-
-### edit
-
- npm config edit
-
-Opens the config file in an editor. Use the `--global` flag to edit the
-global config.
-
-## Shorthands and Other CLI Niceties
-
-The following shorthands are parsed on the command-line:
-
-* `-v`: `--version`
-* `-h`, `-?`, `--help`, `-H`: `--usage`
-* `-s`, `--silent`: `--loglevel silent`
-* `-q`, `--quiet`: `--loglevel warn`
-* `-d`: `--loglevel info`
-* `-dd`, `--verbose`: `--loglevel verbose`
-* `-ddd`: `--loglevel silly`
-* `-g`: `--global`
-* `-l`: `--long`
-* `-m`: `--message`
-* `-p`, `--porcelain`: `--parseable`
-* `-reg`: `--registry`
-* `-v`: `--version`
-* `-f`: `--force`
-* `-desc`: `--description`
-* `-S`: `--save`
-* `-D`: `--save-dev`
-* `-O`: `--save-optional`
-* `-B`: `--save-bundle`
-* `-y`: `--yes`
-* `-n`: `--yes false`
-* `ll` and `la` commands: `ls --long`
-
-If the specified configuration param resolves unambiguously to a known
-configuration parameter, then it is expanded to that configuration
-parameter. For example:
-
- npm ls --par
- # same as:
- npm ls --parseable
-
-If multiple single-character shorthands are strung together, and the
-resulting combination is unambiguously not some other configuration
-param, then it is expanded to its various component pieces. For
-example:
-
- npm ls -gpld
- # same as:
- npm ls --global --parseable --long --loglevel info
-
-## Per-Package Config Settings
-
-When running scripts (see `npm-scripts(1)`)
-the package.json "config" keys are overwritten in the environment if
-there is a config param of `<name>[@<version>]:<key>`. For example, if
-the package.json has this:
-
- { "name" : "foo"
- , "config" : { "port" : "8080" }
- , "scripts" : { "start" : "node server.js" } }
-
-and the server.js is this:
-
- http.createServer(...).listen(process.env.npm_package_config_port)
-
-then the user could change the behavior by doing:
-
- npm config set foo:port 80
-
-## Config Settings
-
-### always-auth
-
-* Default: false
-* Type: Boolean
-
-Force npm to always require authentication when accessing the registry,
-even for `GET` requests.
-
-### bin-links
-
-* Default: `true`
-* Type: Boolean
-
-Tells npm to create symlinks (or `.cmd` shims on Windows) for package
-executables.
-
-Set to false to have it not do this. This can be used to work around
-the fact that some file systems don't support symlinks, even on
-ostensibly Unix systems.
-
-### browser
-
-* Default: OS X: `"open"`, Windows: `"start"`, Others: `"xdg-open"`
-* Type: String
-
-The browser that is called by the `npm docs` command to open websites.
-
-### ca
-
-* Default: The npm CA certificate
-* Type: String or null
-
-The Certificate Authority signing certificate that is trusted for SSL
-connections to the registry.
-
-Set to `null` to only allow "known" registrars, or to a specific CA cert
-to trust only that specific signing authority.
-
-See also the `strict-ssl` config.
-
-### cache
-
-* Default: Windows: `%APPDATA%\npm-cache`, Posix: `~/.npm`
-* Type: path
-
-The location of npm's cache directory. See `npm-cache(1)`
-
-### cache-lock-stale
-
-* Default: 60000 (1 minute)
-* Type: Number
-
-The number of ms before cache folder lockfiles are considered stale.
-
-### cache-lock-retries
-
-* Default: 10
-* Type: Number
-
-Number of times to retry to acquire a lock on cache folder lockfiles.
-
-### cache-lock-wait
-
-* Default: 10000 (10 seconds)
-* Type: Number
-
-Number of ms to wait for cache lock files to expire.
-
-### cache-max
-
-* Default: Infinity
-* Type: Number
-
-The maximum time (in seconds) to keep items in the registry cache before
-re-checking against the registry.
-
-Note that no purging is done unless the `npm cache clean` command is
-explicitly used, and that only GET requests use the cache.
-
-### cache-min
-
-* Default: 10
-* Type: Number
-
-The minimum time (in seconds) to keep items in the registry cache before
-re-checking against the registry.
-
-Note that no purging is done unless the `npm cache clean` command is
-explicitly used, and that only GET requests use the cache.
-
-### color
-
-* Default: true on Posix, false on Windows
-* Type: Boolean or `"always"`
-
-If false, never shows colors. If `"always"` then always shows colors.
-If true, then only prints color codes for tty file descriptors.
-
-### coverage
-
-* Default: false
-* Type: Boolean
-
-A flag to tell test-harness to run with their coverage options enabled,
-if they respond to the `npm_config_coverage` environment variable.
-
-### depth
-
-* Default: Infinity
-* Type: Number
-
-The depth to go when recursing directories for `npm ls` and
-`npm cache ls`.
-
-### description
-
-* Default: true
-* Type: Boolean
-
-Show the description in `npm search`
-
-### dev
-
-* Default: false
-* Type: Boolean
-
-Install `dev-dependencies` along with packages.
-
-Note that `dev-dependencies` are also installed if the `npat` flag is
-set.
-
-### editor
-
-* Default: `EDITOR` environment variable if set, or `"vi"` on Posix,
- or `"notepad"` on Windows.
-* Type: path
-
-The command to run for `npm edit` or `npm config edit`.
-
-### engine-strict
-
-* Default: false
-* Type: Boolean
-
-If set to true, then npm will stubbornly refuse to install (or even
-consider installing) any package that claims to not be compatible with
-the current Node.js version.
-
-### force
-
-* Default: false
-* Type: Boolean
-
-Makes various commands more forceful.
-
-* lifecycle script failure does not block progress.
-* publishing clobbers previously published versions.
-* skips cache when requesting from the registry.
-* prevents checks against clobbering non-npm files.
-
-### fetch-retries
-
-* Default: 2
-* Type: Number
-
-The "retries" config for the `retry` module to use when fetching
-packages from the registry.
-
-### fetch-retry-factor
-
-* Default: 10
-* Type: Number
-
-The "factor" config for the `retry` module to use when fetching
-packages.
-
-### fetch-retry-mintimeout
-
-* Default: 10000 (10 seconds)
-* Type: Number
-
-The "minTimeout" config for the `retry` module to use when fetching
-packages.
-
-### fetch-retry-maxtimeout
-
-* Default: 60000 (1 minute)
-* Type: Number
-
-The "maxTimeout" config for the `retry` module to use when fetching
-packages.
-
-### git
-
-* Default: `"git"`
-* Type: String
-
-The command to use for git commands. If git is installed on the
-computer, but is not in the `PATH`, then set this to the full path to
-the git binary.
-
-### global
-
-* Default: false
-* Type: Boolean
-
-Operates in "global" mode, so that packages are installed into the
-`prefix` folder instead of the current working directory. See
-`npm-folders(1)` for more on the differences in behavior.
-
-* packages are installed into the `{prefix}/lib/node_modules` folder, instead of the
- current working directory.
-* bin files are linked to `{prefix}/bin`
-* man pages are linked to `{prefix}/share/man`
-
-### globalconfig
-
-* Default: {prefix}/etc/npmrc
-* Type: path
-
-The config file to read for global config options.
-
-### globalignorefile
-
-* Default: {prefix}/etc/npmignore
-* Type: path
-
-The config file to read for global ignore patterns to apply to all users
-and all projects.
-
-If not found, but there is a "gitignore" file in the
-same directory, then that will be used instead.
-
-### group
-
-* Default: GID of the current process
-* Type: String or Number
-
-The group to use when running package scripts in global mode as the root
-user.
-
-### https-proxy
-
-* Default: the `HTTPS_PROXY` or `https_proxy` or `HTTP_PROXY` or
- `http_proxy` environment variables.
-* Type: url
-
-A proxy to use for outgoing https requests.
-
-### user-agent
-
-* Default: node/{process.version} {process.platform} {process.arch}
-* Type: String
-
-Sets a User-Agent to the request header
-
-### ignore
-
-* Default: ""
-* Type: string
-
-A white-space separated list of glob patterns of files to always exclude
-from packages when building tarballs.
-
-### init-module
-
-* Default: ~/.npm-init.js
-* Type: path
-
-A module that will be loaded by the `npm init` command. See the
-documentation for the
-[init-package-json](https://github.com/isaacs/init-package-json) module
-for more information, or npm-init(1).
-
-### init.version
-
-* Default: "0.0.0"
-* Type: semver
-
-The value `npm init` should use by default for the package version.
-
-### init.author.name
-
-* Default: ""
-* Type: String
-
-The value `npm init` should use by default for the package author's name.
-
-### init.author.email
-
-* Default: ""
-* Type: String
-
-The value `npm init` should use by default for the package author's email.
-
-### init.author.url
-
-* Default: ""
-* Type: String
-
-The value `npm init` should use by default for the package author's homepage.
-
-### json
-
-* Default: false
-* Type: Boolean
-
-Whether or not to output JSON data, rather than the normal output.
-
-This feature is currently experimental, and the output data structures
-for many commands is either not implemented in JSON yet, or subject to
-change. Only the output from `npm ls --json` is currently valid.
-
-### link
-
-* Default: false
-* Type: Boolean
-
-If true, then local installs will link if there is a suitable globally
-installed package.
-
-Note that this means that local installs can cause things to be
-installed into the global space at the same time. The link is only done
-if one of the two conditions are met:
-
-* The package is not already installed globally, or
-* the globally installed version is identical to the version that is
- being installed locally.
-
-### loglevel
-
-* Default: "http"
-* Type: String
-* Values: "silent", "win", "error", "warn", "http", "info", "verbose", "silly"
-
-What level of logs to report. On failure, *all* logs are written to
-`npm-debug.log` in the current working directory.
-
-Any logs of a higher level than the setting are shown.
-The default is "http", which shows http, warn, and error output.
-
-### logstream
-
-* Default: process.stderr
-* Type: Stream
-
-This is the stream that is passed to the
-[npmlog](https://github.com/isaacs/npmlog) module at run time.
-
-It cannot be set from the command line, but if you are using npm
-programmatically, you may wish to send logs to somewhere other than
-stderr.
-
-If the `color` config is set to true, then this stream will receive
-colored output if it is a TTY.
-
-### long
-
-* Default: false
-* Type: Boolean
-
-Show extended information in `npm ls`
-
-### message
-
-* Default: "%s"
-* Type: String
-
-Commit message which is used by `npm version` when creating version commit.
-
-Any "%s" in the message will be replaced with the version number.
-
-### node-version
-
-* Default: process.version
-* Type: semver or false
-
-The node version to use when checking package's "engines" hash.
-
-### npat
-
-* Default: false
-* Type: Boolean
-
-Run tests on installation and report results to the
-`npaturl`.
-
-### npaturl
-
-* Default: Not yet implemented
-* Type: url
-
-The url to report npat test results.
-
-### onload-script
-
-* Default: false
-* Type: path
-
-A node module to `require()` when npm loads. Useful for programmatic
-usage.
-
-### optional
-
-* Default: true
-* Type: Boolean
-
-Attempt to install packages in the `optionalDependencies` hash. Note
-that if these packages fail to install, the overall installation
-process is not aborted.
-
-### parseable
-
-* Default: false
-* Type: Boolean
-
-Output parseable results from commands that write to
-standard output.
-
-### prefix
-
-* Default: see npm-folders(1)
-* Type: path
-
-The location to install global items. If set on the command line, then
-it forces non-global commands to run in the specified folder.
-
-### production
-
-* Default: false
-* Type: Boolean
-
-Set to true to run in "production" mode.
-
-1. devDependencies are not installed at the topmost level when running
- local `npm install` without any arguments.
-2. Set the NODE_ENV="production" for lifecycle scripts.
-
-### proprietary-attribs
-
-* Default: true
-* Type: Boolean
-
-Whether or not to include proprietary extended attributes in the
-tarballs created by npm.
-
-Unless you are expecting to unpack package tarballs with something other
-than npm -- particularly a very outdated tar implementation -- leave
-this as true.
-
-### proxy
-
-* Default: `HTTP_PROXY` or `http_proxy` environment variable, or null
-* Type: url
-
-A proxy to use for outgoing http requests.
-
-### rebuild-bundle
-
-* Default: true
-* Type: Boolean
-
-Rebuild bundled dependencies after installation.
-
-### registry
-
-* Default: https://registry.npmjs.org/
-* Type: url
-
-The base URL of the npm package registry.
-
-### rollback
-
-* Default: true
-* Type: Boolean
-
-Remove failed installs.
-
-### save
-
-* Default: false
-* Type: Boolean
-
-Save installed packages to a package.json file as dependencies.
-
-When used with the `npm rm` command, it removes it from the dependencies
-hash.
-
-Only works if there is already a package.json file present.
-
-### save-bundle
-
-* Default: false
-* Type: Boolean
-
-If a package would be saved at install time by the use of `--save`,
-`--save-dev`, or `--save-optional`, then also put it in the
-`bundleDependencies` list.
-
-When used with the `npm rm` command, it removes it from the
-bundledDependencies list.
-
-### save-dev
-
-* Default: false
-* Type: Boolean
-
-Save installed packages to a package.json file as devDependencies.
-
-When used with the `npm rm` command, it removes it from the devDependencies
-hash.
-
-Only works if there is already a package.json file present.
-
-### save-optional
-
-* Default: false
-* Type: Boolean
-
-Save installed packages to a package.json file as optionalDependencies.
-
-When used with the `npm rm` command, it removes it from the devDependencies
-hash.
-
-Only works if there is already a package.json file present.
-
-### searchopts
-
-* Default: ""
-* Type: String
-
-Space-separated options that are always passed to search.
-
-### searchexclude
-
-* Default: ""
-* Type: String
-
-Space-separated options that limit the results from search.
-
-### searchsort
-
-* Default: "name"
-* Type: String
-* Values: "name", "-name", "date", "-date", "description",
- "-description", "keywords", "-keywords"
-
-Indication of which field to sort search results by. Prefix with a `-`
-character to indicate reverse sort.
-
-### shell
-
-* Default: SHELL environment variable, or "bash" on Posix, or "cmd" on
- Windows
-* Type: path
-
-The shell to run for the `npm explore` command.
-
-### shrinkwrap
-
-* Default: true
-* Type: Boolean
-
-If set to false, then ignore `npm-shrinkwrap.json` files when
-installing.
-
-### sign-git-tag
-
-* Default: false
-* Type: Boolean
-
-If set to true, then the `npm version` command will tag the version
-using `-s` to add a signature.
-
-Note that git requires you to have set up GPG keys in your git configs
-for this to work properly.
-
-### strict-ssl
-
-* Default: true
-* Type: Boolean
-
-Whether or not to do SSL key validation when making requests to the
-registry via https.
-
-See also the `ca` config.
-
-### tag
-
-* Default: latest
-* Type: String
-
-If you ask npm to install a package and don't tell it a specific version, then
-it will install the specified tag.
-
-Also the tag that is added to the package@version specified by the `npm
-tag` command, if no explicit tag is given.
-
-### tmp
-
-* Default: TMPDIR environment variable, or "/tmp"
-* Type: path
-
-Where to store temporary files and folders. All temp files are deleted
-on success, but left behind on failure for forensic purposes.
-
-### unicode
-
-* Default: true
-* Type: Boolean
-
-When set to true, npm uses unicode characters in the tree output. When
-false, it uses ascii characters to draw trees.
-
-### unsafe-perm
-
-* Default: false if running as root, true otherwise
-* Type: Boolean
-
-Set to true to suppress the UID/GID switching when running package
-scripts. If set explicitly to false, then installing as a non-root user
-will fail.
-
-### usage
-
-* Default: false
-* Type: Boolean
-
-Set to show short usage output (like the -H output)
-instead of complete help when doing `npm-help(1)`.
-
-### user
-
-* Default: "nobody"
-* Type: String or Number
-
-The UID to set to when running package scripts as root.
-
-### username
-
-* Default: null
-* Type: String
-
-The username on the npm registry. Set with `npm adduser`
-
-### userconfig
-
-* Default: ~/.npmrc
-* Type: path
-
-The location of user-level configuration settings.
-
-### userignorefile
-
-* Default: ~/.npmignore
-* Type: path
-
-The location of a user-level ignore file to apply to all packages.
-
-If not found, but there is a .gitignore file in the same directory, then
-that will be used instead.
-
-### umask
-
-* Default: 022
-* Type: Octal numeric string
-
-The "umask" value to use when setting the file creation mode on files
-and folders.
-
-Folders and executables are given a mode which is `0777` masked against
-this value. Other files are given a mode which is `0666` masked against
-this value. Thus, the defaults are `0755` and `0644` respectively.
-
-### version
-
-* Default: false
-* Type: boolean
-
-If true, output the npm version and exit successfully.
-
-Only relevant when specified explicitly on the command line.
-
-### versions
-
-* Default: false
-* Type: boolean
-
-If true, output the npm version as well as node's `process.versions`
-hash, and exit successfully.
-
-Only relevant when specified explicitly on the command line.
-
-### viewer
-
-* Default: "man" on Posix, "browser" on Windows
-* Type: path
-
-The program to use to view help content.
-
-Set to `"browser"` to view html help content in the default web browser.
-
-### yes
-
-* Default: null
-* Type: Boolean or null
-
-If set to `null`, then prompt the user for responses in some
-circumstances.
-
-If set to `true`, then answer "yes" to any prompt. If set to `false`
-then answer "no" to any prompt.
-
-## SEE ALSO
-
-* npm-folders(1)
-* npm(1)
diff --git a/deps/npm/doc/cli/dedupe.md b/deps/npm/doc/cli/dedupe.md
deleted file mode 100644
index 220329acb..000000000
--- a/deps/npm/doc/cli/dedupe.md
+++ /dev/null
@@ -1,53 +0,0 @@
-npm-dedupe(1) -- Reduce duplication
-===================================
-
-## SYNOPSIS
-
- npm dedupe [package names...]
-
-## DESCRIPTION
-
-Searches the local package tree and attempts to simplify the overall
-structure by moving dependencies further up the tree, where they can
-be more effectively shared by multiple dependent packages.
-
-For example, consider this dependency graph:
-
- a
- +-- b <-- depends on c@1.0.x
- | `-- c@1.0.3
- `-- d <-- depends on c@~1.0.9
- `-- c@1.0.10
-
-In this case, `npm-dedupe(1)` will transform the tree to:
-
- a
- +-- b
- +-- d
- `-- c@1.0.10
-
-Because of the hierarchical nature of node's module lookup, b and d
-will both get their dependency met by the single c package at the root
-level of the tree.
-
-If a suitable version exists at the target location in the tree
-already, then it will be left untouched, but the other duplicates will
-be deleted.
-
-If no suitable version can be found, then a warning is printed, and
-nothing is done.
-
-If any arguments are supplied, then they are filters, and only the
-named packages will be touched.
-
-Note that this operation transforms the dependency tree, and may
-result in packages getting updated versions, perhaps from the npm
-registry.
-
-This feature is experimental, and may change in future versions.
-
-## SEE ALSO
-
-* npm-ls(1)
-* npm-update(1)
-* npm-install(1)
diff --git a/deps/npm/doc/cli/deprecate.md b/deps/npm/doc/cli/deprecate.md
deleted file mode 100644
index c45245f09..000000000
--- a/deps/npm/doc/cli/deprecate.md
+++ /dev/null
@@ -1,26 +0,0 @@
-npm-deprecate(1) -- Deprecate a version of a package
-====================================================
-
-## SYNOPSIS
-
- npm deprecate <name>[@<version>] <message>
-
-## DESCRIPTION
-
-This command will update the npm registry entry for a package, providing
-a deprecation warning to all who attempt to install it.
-
-It works on version ranges as well as specific versions, so you can do
-something like this:
-
- npm deprecate my-thing@"< 0.2.3" "critical bug fixed in v0.2.3"
-
-Note that you must be the package owner to deprecate something. See the
-`owner` and `adduser` help topics.
-
-To un-deprecate a package, specify an empty string (`""`) for the `message` argument.
-
-## SEE ALSO
-
-* npm-publish(1)
-* npm-registry(1)
diff --git a/deps/npm/doc/cli/developers.md b/deps/npm/doc/cli/developers.md
deleted file mode 100644
index d1ffd5aa8..000000000
--- a/deps/npm/doc/cli/developers.md
+++ /dev/null
@@ -1,207 +0,0 @@
-npm-developers(1) -- Developer Guide
-====================================
-
-## DESCRIPTION
-
-So, you've decided to use npm to develop (and maybe publish/deploy)
-your project.
-
-Fantastic!
-
-There are a few things that you need to do above the simple steps
-that your users will do to install your program.
-
-## About These Documents
-
-These are man pages. If you install npm, you should be able to
-then do `man npm-thing` to get the documentation on a particular
-topic, or `npm help thing` to see the same information.
-
-## What is a `package`
-
-A package is:
-
-* a) a folder containing a program described by a package.json file
-* b) a gzipped tarball containing (a)
-* c) a url that resolves to (b)
-* d) a `<name>@<version>` that is published on the registry with (c)
-* e) a `<name>@<tag>` that points to (d)
-* f) a `<name>` that has a "latest" tag satisfying (e)
-* g) a `git` url that, when cloned, results in (a).
-
-Even if you never publish your package, you can still get a lot of
-benefits of using npm if you just want to write a node program (a), and
-perhaps if you also want to be able to easily install it elsewhere
-after packing it up into a tarball (b).
-
-Git urls can be of the form:
-
- git://github.com/user/project.git#commit-ish
- git+ssh://user@hostname:project.git#commit-ish
- git+http://user@hostname/project/blah.git#commit-ish
- git+https://user@hostname/project/blah.git#commit-ish
-
-The `commit-ish` can be any tag, sha, or branch which can be supplied as
-an argument to `git checkout`. The default is `master`.
-
-## The package.json File
-
-You need to have a `package.json` file in the root of your project to do
-much of anything with npm. That is basically the whole interface.
-
-See `npm-json(1)` for details about what goes in that file. At the very
-least, you need:
-
-* name:
- This should be a string that identifies your project. Please do not
- use the name to specify that it runs on node, or is in JavaScript.
- You can use the "engines" field to explicitly state the versions of
- node (or whatever else) that your program requires, and it's pretty
- well assumed that it's javascript.
-
- It does not necessarily need to match your github repository name.
-
- So, `node-foo` and `bar-js` are bad names. `foo` or `bar` are better.
-
-* version:
- A semver-compatible version.
-
-* engines:
- Specify the versions of node (or whatever else) that your program
- runs on. The node API changes a lot, and there may be bugs or new
- functionality that you depend on. Be explicit.
-
-* author:
- Take some credit.
-
-* scripts:
- If you have a special compilation or installation script, then you
- should put it in the `scripts` hash. You should definitely have at
- least a basic smoke-test command as the "scripts.test" field.
- See npm-scripts(1).
-
-* main:
- If you have a single module that serves as the entry point to your
- program (like what the "foo" package gives you at require("foo")),
- then you need to specify that in the "main" field.
-
-* directories:
- This is a hash of folders. The best ones to include are "lib" and
- "doc", but if you specify a folder full of man pages in "man", then
- they'll get installed just like these ones.
-
-You can use `npm init` in the root of your package in order to get you
-started with a pretty basic package.json file. See `npm-init(1)` for
-more info.
-
-## Keeping files *out* of your package
-
-Use a `.npmignore` file to keep stuff out of your package. If there's
-no `.npmignore` file, but there *is* a `.gitignore` file, then npm will
-ignore the stuff matched by the `.gitignore` file. If you *want* to
-include something that is excluded by your `.gitignore` file, you can
-create an empty `.npmignore` file to override it.
-
-By default, the following paths and files are ignored, so there's no
-need to add them to `.npmignore` explicitly:
-
-* `.*.swp`
-* `._*`
-* `.DS_Store`
-* `.git`
-* `.hg`
-* `.lock-wscript`
-* `.svn`
-* `.wafpickle-*`
-* `CVS`
-* `npm-debug.log`
-
-Additionally, everything in `node_modules` is ignored, except for
-bundled dependencies. npm automatically handles this for you, so don't
-bother adding `node_modules` to `.npmignore`.
-
-The following paths and files are never ignored, so adding them to
-`.npmignore` is pointless:
-
-* `package.json`
-* `README.*`
-
-## Link Packages
-
-`npm link` is designed to install a development package and see the
-changes in real time without having to keep re-installing it. (You do
-need to either re-link or `npm rebuild -g` to update compiled packages,
-of course.)
-
-More info at `npm-link(1)`.
-
-## Before Publishing: Make Sure Your Package Installs and Works
-
-**This is important.**
-
-If you can not install it locally, you'll have
-problems trying to publish it. Or, worse yet, you'll be able to
-publish it, but you'll be publishing a broken or pointless package.
-So don't do that.
-
-In the root of your package, do this:
-
- npm install . -g
-
-That'll show you that it's working. If you'd rather just create a symlink
-package that points to your working directory, then do this:
-
- npm link
-
-Use `npm ls -g` to see if it's there.
-
-To test a local install, go into some other folder, and then do:
-
- cd ../some-other-folder
- npm install ../my-package
-
-to install it locally into the node_modules folder in that other place.
-
-Then go into the node-repl, and try using require("my-thing") to
-bring in your module's main module.
-
-## Create a User Account
-
-Create a user with the adduser command. It works like this:
-
- npm adduser
-
-and then follow the prompts.
-
-This is documented better in npm-adduser(1).
-
-## Publish your package
-
-This part's easy. IN the root of your folder, do this:
-
- npm publish
-
-You can give publish a url to a tarball, or a filename of a tarball,
-or a path to a folder.
-
-Note that pretty much **everything in that folder will be exposed**
-by default. So, if you have secret stuff in there, use a
-`.npmignore` file to list out the globs to ignore, or publish
-from a fresh checkout.
-
-## Brag about it
-
-Send emails, write blogs, blab in IRC.
-
-Tell the world how easy it is to install your program!
-
-## SEE ALSO
-
-* npm-faq(1)
-* npm(1)
-* npm-init(1)
-* npm-json(1)
-* npm-scripts(1)
-* npm-publish(1)
-* npm-adduser(1)
-* npm-registry(1)
diff --git a/deps/npm/doc/cli/disputes.md b/deps/npm/doc/cli/disputes.md
deleted file mode 100644
index 52d2a2e56..000000000
--- a/deps/npm/doc/cli/disputes.md
+++ /dev/null
@@ -1,98 +0,0 @@
-npm-disputes(1) -- Handling Module Name Disputes
-================================================
-
-## SYNOPSIS
-
-1. Get the author email with `npm owner ls <pkgname>`
-2. Email the author, CC <i@izs.me>.
-3. After a few weeks, if there's no resolution, we'll sort it out.
-
-Don't squat on package names. Publish code or move out of the way.
-
-## DESCRIPTION
-
-There sometimes arise cases where a user publishes a module, and then
-later, some other user wants to use that name. Here are some common
-ways that happens (each of these is based on actual events.)
-
-1. Joe writes a JavaScript module `foo`, which is not node-specific.
- Joe doesn't use node at all. Bob wants to use `foo` in node, so he
- wraps it in an npm module. Some time later, Joe starts using node,
- and wants to take over management of his program.
-2. Bob writes an npm module `foo`, and publishes it. Perhaps much
- later, Joe finds a bug in `foo`, and fixes it. He sends a pull
- request to Bob, but Bob doesn't have the time to deal with it,
- because he has a new job and a new baby and is focused on his new
- erlang project, and kind of not involved with node any more. Joe
- would like to publish a new `foo`, but can't, because the name is
- taken.
-3. Bob writes a 10-line flow-control library, and calls it `foo`, and
- publishes it to the npm registry. Being a simple little thing, it
- never really has to be updated. Joe works for Foo Inc, the makers
- of the critically acclaimed and widely-marketed `foo` JavaScript
- toolkit framework. They publish it to npm as `foojs`, but people are
- routinely confused when `npm install foo` is some different thing.
-4. Bob writes a parser for the widely-known `foo` file format, because
- he needs it for work. Then, he gets a new job, and never updates the
- prototype. Later on, Joe writes a much more complete `foo` parser,
- but can't publish, because Bob's `foo` is in the way.
-
-The validity of Joe's claim in each situation can be debated. However,
-Joe's appropriate course of action in each case is the same.
-
-1. `npm owner ls foo`. This will tell Joe the email address of the
- owner (Bob).
-2. Joe emails Bob, explaining the situation **as respectfully as possible**,
- and what he would like to do with the module name. He adds
- isaacs <i@izs.me> to the CC list of the email. Mention in the email
- that Bob can run `npm owner add joe foo` to add Joe as an owner of
- the `foo` package.
-3. After a reasonable amount of time, if Bob has not responded, or if
- Bob and Joe can't come to any sort of resolution, email isaacs
- <i@izs.me> and we'll sort it out. ("Reasonable" is usually about 4
- weeks, but extra time is allowed around common holidays.)
-
-## REASONING
-
-In almost every case so far, the parties involved have been able to reach
-an amicable resolution without any major intervention. Most people
-really do want to be reasonable, and are probably not even aware that
-they're in your way.
-
-Module ecosystems are most vibrant and powerful when they are as
-self-directed as possible. If an admin one day deletes something you
-had worked on, then that is going to make most people quite upset,
-regardless of the justification. When humans solve their problems by
-talking to other humans with respect, everyone has the chance to end up
-feeling good about the interaction.
-
-## EXCEPTIONS
-
-Some things are not allowed, and will be removed without discussion if
-they are brought to the attention of the npm registry admins, including
-but not limited to:
-
-1. Malware (that is, a package designed to exploit or harm the machine on
- which it is installed).
-2. Violations of copyright or licenses (for example, cloning an
- MIT-licensed program, and then removing or changing the copyright and
- license statement).
-3. Illegal content.
-4. "Squatting" on a package name that you *plan* to use, but aren't
- actually using. Sorry, I don't care how great the name is, or how
- perfect a fit it is for the thing that someday might happen. If
- someone wants to use it today, and you're just taking up space with
- an empty tarball, you're going to be evicted.
-5. Putting empty packages in the registry. Packages must have SOME
- functionality. It can be silly, but it can't be *nothing*. (See
- also: squatting.)
-6. Doing weird things with the registry, like using it as your own
- personal application database or otherwise putting non-packagey
- things into it.
-
-If you see bad behavior like this, please report it right away.
-
-## SEE ALSO
-
-* npm-registry(1)
-* npm-owner(1)
diff --git a/deps/npm/doc/cli/docs.md b/deps/npm/doc/cli/docs.md
deleted file mode 100644
index 28fa49193..000000000
--- a/deps/npm/doc/cli/docs.md
+++ /dev/null
@@ -1,38 +0,0 @@
-npm-docs(1) -- Docs for a package in a web browser maybe
-========================================================
-
-## SYNOPSIS
-
- npm docs <pkgname>
- npm home <pkgname>
-
-## DESCRIPTION
-
-This command tries to guess at the likely location of a package's
-documentation URL, and then tries to open it using the `--browser`
-config param.
-
-## CONFIGURATION
-
-### browser
-
-* Default: OS X: `"open"`, Windows: `"start"`, Others: `"xdg-open"`
-* Type: String
-
-The browser that is called by the `npm docs` command to open websites.
-
-### registry
-
-* Default: https://registry.npmjs.org/
-* Type: url
-
-The base URL of the npm package registry.
-
-
-## SEE ALSO
-
-* npm-view(1)
-* npm-publish(1)
-* npm-registry(1)
-* npm-config(1)
-* npm-json(1)
diff --git a/deps/npm/doc/cli/edit.md b/deps/npm/doc/cli/edit.md
deleted file mode 100644
index 9eaccfc54..000000000
--- a/deps/npm/doc/cli/edit.md
+++ /dev/null
@@ -1,35 +0,0 @@
-npm-edit(1) -- Edit an installed package
-========================================
-
-## SYNOPSIS
-
- npm edit <name>[@<version>]
-
-## DESCRIPTION
-
-Opens the package folder in the default editor (or whatever you've
-configured as the npm `editor` config -- see `npm-config(1)`.)
-
-After it has been edited, the package is rebuilt so as to pick up any
-changes in compiled packages.
-
-For instance, you can do `npm install connect` to install connect
-into your package, and then `npm edit connect` to make a few
-changes to your locally installed copy.
-
-## CONFIGURATION
-
-### editor
-
-* Default: `EDITOR` environment variable if set, or `"vi"` on Posix,
- or `"notepad"` on Windows.
-* Type: path
-
-The command to run for `npm edit` or `npm config edit`.
-
-## SEE ALSO
-
-* npm-folders(1)
-* npm-explore(1)
-* npm-install(1)
-* npm-config(1)
diff --git a/deps/npm/doc/cli/explore.md b/deps/npm/doc/cli/explore.md
deleted file mode 100644
index 00701b392..000000000
--- a/deps/npm/doc/cli/explore.md
+++ /dev/null
@@ -1,40 +0,0 @@
-npm-explore(1) -- Browse an installed package
-=============================================
-
-## SYNOPSIS
-
- npm explore <name>[@<version>] [ -- <cmd>]
-
-## DESCRIPTION
-
-Spawn a subshell in the directory of the installed package specified.
-
-If a command is specified, then it is run in the subshell, which then
-immediately terminates.
-
-This is particularly handy in the case of git submodules in the
-`node_modules` folder:
-
- npm explore some-dependency -- git pull origin master
-
-Note that the package is *not* automatically rebuilt afterwards, so be
-sure to use `npm rebuild <pkg>` if you make any changes.
-
-## CONFIGURATION
-
-### shell
-
-* Default: SHELL environment variable, or "bash" on Posix, or "cmd" on
- Windows
-* Type: path
-
-The shell to run for the `npm explore` command.
-
-## SEE ALSO
-
-* npm-submodule(1)
-* npm-folders(1)
-* npm-edit(1)
-* npm-rebuild(1)
-* npm-build(1)
-* npm-install(1)
diff --git a/deps/npm/doc/cli/faq.md b/deps/npm/doc/cli/faq.md
deleted file mode 100644
index 05b2cd98e..000000000
--- a/deps/npm/doc/cli/faq.md
+++ /dev/null
@@ -1,313 +0,0 @@
-npm-faq(1) -- Frequently Asked Questions
-========================================
-
-## Where can I find these docs in HTML?
-
-<https://npmjs.org/doc/>, or run:
-
- npm config set viewer browser
-
-to open these documents in your default web browser rather than `man`.
-
-## It didn't work.
-
-That's not really a question.
-
-## Why didn't it work?
-
-I don't know yet.
-
-Read the error output, and if you can't figure out what it means,
-do what it says and post a bug with all the information it asks for.
-
-## Where does npm put stuff?
-
-See `npm-folders(1)`
-
-tl;dr:
-
-* Use the `npm root` command to see where modules go, and the `npm bin`
- command to see where executables go
-* Global installs are different from local installs. If you install
- something with the `-g` flag, then its executables go in `npm bin -g`
- and its modules go in `npm root -g`.
-
-## How do I install something on my computer in a central location?
-
-Install it globally by tacking `-g` or `--global` to the command. (This
-is especially important for command line utilities that need to add
-their bins to the global system `PATH`.)
-
-## I installed something globally, but I can't `require()` it
-
-Install it locally.
-
-The global install location is a place for command-line utilities
-to put their bins in the system `PATH`. It's not for use with `require()`.
-
-If you `require()` a module in your code, then that means it's a
-dependency, and a part of your program. You need to install it locally
-in your program.
-
-## Why can't npm just put everything in one place, like other package managers?
-
-Not every change is an improvement, but every improvement is a change.
-This would be like asking git to do network IO for every commit. It's
-not going to happen, because it's a terrible idea that causes more
-problems than it solves.
-
-It is much harder to avoid dependency conflicts without nesting
-dependencies. This is fundamental to the way that npm works, and has
-proven to be an extremely successful approach. See `npm-folders(1)` for
-more details.
-
-If you want a package to be installed in one place, and have all your
-programs reference the same copy of it, then use the `npm link` command.
-That's what it's for. Install it globally, then link it into each
-program that uses it.
-
-## Whatever, I really want the old style 'everything global' style.
-
-Write your own package manager, then. It's not that hard.
-
-npm will not help you do something that is known to be a bad idea.
-
-## `"node_modules"` is the name of my deity's arch-rival, and a Forbidden Word in my religion. Can I configure npm to use a different folder?
-
-No. This will never happen. This question comes up sometimes,
-because it seems silly from the outside that npm couldn't just be
-configured to put stuff somewhere else, and then npm could load them
-from there. It's an arbitrary spelling choice, right? What's the big
-deal?
-
-At the time of this writing, the string `'node_modules'` appears 151
-times in 53 separate files in npm and node core (excluding tests and
-documentation).
-
-Some of these references are in node's built-in module loader. Since
-npm is not involved **at all** at run-time, node itself would have to
-be configured to know where you've decided to stick stuff. Complexity
-hurdle #1. Since the Node module system is locked, this cannot be
-changed, and is enough to kill this request. But I'll continue, in
-deference to your deity's delicate feelings regarding spelling.
-
-Many of the others are in dependencies that npm uses, which are not
-necessarily tightly coupled to npm (in the sense that they do not read
-npm's configuration files, etc.) Each of these would have to be
-configured to take the name of the `node_modules` folder as a
-parameter. Complexity hurdle #2.
-
-Furthermore, npm has the ability to "bundle" dependencies by adding
-the dep names to the `"bundledDependencies"` list in package.json,
-which causes the folder to be included in the package tarball. What
-if the author of a module bundles its dependencies, and they use a
-different spelling for `node_modules`? npm would have to rename the
-folder at publish time, and then be smart enough to unpack it using
-your locally configured name. Complexity hurdle #3.
-
-Furthermore, what happens when you *change* this name? Fine, it's
-easy enough the first time, just rename the `node_modules` folders to
-`./blergyblerp/` or whatever name you choose. But what about when you
-change it again? npm doesn't currently track any state about past
-configuration settings, so this would be rather difficult to do
-properly. It would have to track every previous value for this
-config, and always accept any of them, or else yesterday's install may
-be broken tomorrow. Complexity hurdle #5.
-
-Never going to happen. The folder is named `node_modules`. It is
-written indelibly in the Node Way, handed down from the ancient times
-of Node 0.3.
-
-## Should I check my `node_modules` folder into git?
-
-Mikeal Rogers answered this question very well:
-
-<http://www.mikealrogers.com/posts/nodemodules-in-git.html>
-
-tl;dr
-
-* Check `node_modules` into git for things you **deploy**, such as
- websites and apps.
-* Do not check `node_modules` into git for libraries and modules
- intended to be reused.
-* Use npm to manage dependencies in your dev environment, but not in
- your deployment scripts.
-
-## Is it 'npm' or 'NPM' or 'Npm'?
-
-npm should never be capitalized unless it is being displayed in a
-location that is customarily all-caps (such as the title of man pages.)
-
-## If 'npm' is an acronym, why is it never capitalized?
-
-Contrary to the belief of many, "npm" is not in fact an abbreviation for
-"Node Package Manager". It is a recursive bacronymic abbreviation for
-"npm is not an acronym". (If it was "ninaa", then it would be an
-acronym, and thus incorrectly named.)
-
-"NPM", however, *is* an acronym (more precisely, a capitonym) for the
-National Association of Pastoral Musicians. You can learn more
-about them at <http://npm.org/>.
-
-In software, "NPM" is a Non-Parametric Mapping utility written by
-Chris Rorden. You can analyze pictures of brains with it. Learn more
-about the (capitalized) NPM program at <http://www.cabiatl.com/mricro/npm/>.
-
-The first seed that eventually grew into this flower was a bash utility
-named "pm", which was a shortened descendent of "pkgmakeinst", a
-bash function that was used to install various different things on different
-platforms, most often using Yahoo's `yinst`. If `npm` was ever an
-acronym for anything, it was `node pm` or maybe `new pm`.
-
-So, in all seriousness, the "npm" project is named after its command-line
-utility, which was organically selected to be easily typed by a right-handed
-programmer using a US QWERTY keyboard layout, ending with the
-right-ring-finger in a postition to type the `-` key for flags and
-other command-line arguments. That command-line utility is always
-lower-case, though it starts most sentences it is a part of.
-
-## How do I list installed packages?
-
-`npm ls`
-
-## How do I search for packages?
-
-`npm search`
-
-Arguments are greps. `npm search jsdom` shows jsdom packages.
-
-## How do I update npm?
-
- npm update npm -g
-
-You can also update all outdated local packages by doing `npm update` without
-any arguments, or global packages by doing `npm update -g`.
-
-Occasionally, the version of npm will progress such that the current
-version cannot be properly installed with the version that you have
-installed already. (Consider, if there is ever a bug in the `update`
-command.)
-
-In those cases, you can do this:
-
- curl https://npmjs.org/install.sh | sh
-
-## What is a `package`?
-
-A package is:
-
-* a) a folder containing a program described by a package.json file
-* b) a gzipped tarball containing (a)
-* c) a url that resolves to (b)
-* d) a `<name>@<version>` that is published on the registry with (c)
-* e) a `<name>@<tag>` that points to (d)
-* f) a `<name>` that has a "latest" tag satisfying (e)
-* g) a `git` url that, when cloned, results in (a).
-
-Even if you never publish your package, you can still get a lot of
-benefits of using npm if you just want to write a node program (a), and
-perhaps if you also want to be able to easily install it elsewhere
-after packing it up into a tarball (b).
-
-Git urls can be of the form:
-
- git://github.com/user/project.git#commit-ish
- git+ssh://user@hostname:project.git#commit-ish
- git+http://user@hostname/project/blah.git#commit-ish
- git+https://user@hostname/project/blah.git#commit-ish
-
-The `commit-ish` can be any tag, sha, or branch which can be supplied as
-an argument to `git checkout`. The default is `master`.
-
-## How do I install node with npm?
-
-You don't. Try one of these node version managers:
-
-Unix:
-
-* <http://github.com/isaacs/nave>
-* <http://github.com/visionmedia/n>
-* <http://github.com/creationix/nvm>
-
-Windows:
-
-* <http://github.com/marcelklehr/nodist>
-* <https://github.com/hakobera/nvmw>
-
-## How can I use npm for development?
-
-See `npm-developers(1)` and `npm-json(1)`.
-
-You'll most likely want to `npm link` your development folder. That's
-awesomely handy.
-
-To set up your own private registry, check out `npm-registry(1)`.
-
-## Can I list a url as a dependency?
-
-Yes. It should be a url to a gzipped tarball containing a single folder
-that has a package.json in its root, or a git url.
-(See "what is a package?" above.)
-
-## How do I symlink to a dev folder so I don't have to keep re-installing?
-
-See `npm-link(1)`
-
-## The package registry website. What is that exactly?
-
-See `npm-registry(1)`.
-
-## What's up with the insecure channel warnings?
-
-Until node 0.4.10, there were problems sending big files over HTTPS. That
-means that publishes go over HTTP by default in those versions of node.
-
-## I forgot my password, and can't publish. How do I reset it?
-
-Go to <https://npmjs.org/forgot>.
-
-## I get ECONNREFUSED a lot. What's up?
-
-Either the registry is down, or node's DNS isn't able to reach out.
-
-To check if the registry is down, open up <http://registry.npmjs.org/>
-in a web browser. This will also tell you if you are just unable to
-access the internet for some reason.
-
-If the registry IS down, let me know by emailing or posting an issue.
-We'll have someone kick it or something.
-
-## Why no namespaces?
-
-Please see this discussion: <https://github.com/isaacs/npm/issues/798>
-
-tl;dr - It doesn't actually make things better, and can make them worse.
-
-If you want to namespace your own packages, you may: simply use the
-`-` character to separate the names. npm is a mostly anarchic system.
-There is not sufficient need to impose namespace rules on everyone.
-
-## Who does npm?
-
-`npm view npm author`
-
-`npm view npm contributors`
-
-## I have a question or request not addressed here. Where should I put it?
-
-Discuss it on the mailing list, or post an issue.
-
-* <npm-@googlegroups.com>
-* <https://github.com/isaacs/npm/issues>
-
-## Why does npm hate me?
-
-npm is not capable of hatred. It loves everyone, especially you.
-
-## SEE ALSO
-
-* npm(1)
-* npm-developers(1)
-* npm-json(1)
-* npm-config(1)
-* npm-folders(1)
diff --git a/deps/npm/doc/cli/folders.md b/deps/npm/doc/cli/folders.md
deleted file mode 100644
index 04fc13cfb..000000000
--- a/deps/npm/doc/cli/folders.md
+++ /dev/null
@@ -1,209 +0,0 @@
-npm-folders(1) -- Folder Structures Used by npm
-===============================================
-
-## DESCRIPTION
-
-npm puts various things on your computer. That's its job.
-
-This document will tell you what it puts where.
-
-### tl;dr
-
-* Local install (default): puts stuff in `./node_modules` of the current
- package root.
-* Global install (with `-g`): puts stuff in /usr/local or wherever node
- is installed.
-* Install it **locally** if you're going to `require()` it.
-* Install it **globally** if you're going to run it on the command line.
-* If you need both, then install it in both places, or use `npm link`.
-
-### prefix Configuration
-
-The `prefix` config defaults to the location where node is installed.
-On most systems, this is `/usr/local`, and most of the time is the same
-as node's `process.installPrefix`.
-
-On windows, this is the exact location of the node.exe binary. On Unix
-systems, it's one level up, since node is typically installed at
-`{prefix}/bin/node` rather than `{prefix}/node.exe`.
-
-When the `global` flag is set, npm installs things into this prefix.
-When it is not set, it uses the root of the current package, or the
-current working directory if not in a package already.
-
-### Node Modules
-
-Packages are dropped into the `node_modules` folder under the `prefix`.
-When installing locally, this means that you can
-`require("packagename")` to load its main module, or
-`require("packagename/lib/path/to/sub/module")` to load other modules.
-
-Global installs on Unix systems go to `{prefix}/lib/node_modules`.
-Global installs on Windows go to `{prefix}/node_modules` (that is, no
-`lib` folder.)
-
-If you wish to `require()` a package, then install it locally.
-
-### Executables
-
-When in global mode, executables are linked into `{prefix}/bin` on Unix,
-or directly into `{prefix}` on Windows.
-
-When in local mode, executables are linked into
-`./node_modules/.bin` so that they can be made available to scripts run
-through npm. (For example, so that a test runner will be in the path
-when you run `npm test`.)
-
-### Man Pages
-
-When in global mode, man pages are linked into `{prefix}/share/man`.
-
-When in local mode, man pages are not installed.
-
-Man pages are not installed on Windows systems.
-
-### Cache
-
-See `npm-cache(1)`. Cache files are stored in `~/.npm` on Posix, or
-`~/npm-cache` on Windows.
-
-This is controlled by the `cache` configuration param.
-
-### Temp Files
-
-Temporary files are stored by default in the folder specified by the
-`tmp` config, which defaults to the TMPDIR, TMP, or TEMP environment
-variables, or `/tmp` on Unix and `c:\windows\temp` on Windows.
-
-Temp files are given a unique folder under this root for each run of the
-program, and are deleted upon successful exit.
-
-## More Information
-
-When installing locally, npm first tries to find an appropriate
-`prefix` folder. This is so that `npm install foo@1.2.3` will install
-to the sensible root of your package, even if you happen to have `cd`ed
-into some other folder.
-
-Starting at the $PWD, npm will walk up the folder tree checking for a
-folder that contains either a `package.json` file, or a `node_modules`
-folder. If such a thing is found, then that is treated as the effective
-"current directory" for the purpose of running npm commands. (This
-behavior is inspired by and similar to git's .git-folder seeking
-logic when running git commands in a working dir.)
-
-If no package root is found, then the current folder is used.
-
-When you run `npm install foo@1.2.3`, then the package is loaded into
-the cache, and then unpacked into `./node_modules/foo`. Then, any of
-foo's dependencies are similarly unpacked into
-`./node_modules/foo/node_modules/...`.
-
-Any bin files are symlinked to `./node_modules/.bin/`, so that they may
-be found by npm scripts when necessary.
-
-### Global Installation
-
-If the `global` configuration is set to true, then npm will
-install packages "globally".
-
-For global installation, packages are installed roughly the same way,
-but using the folders described above.
-
-### Cycles, Conflicts, and Folder Parsimony
-
-Cycles are handled using the property of node's module system that it
-walks up the directories looking for `node_modules` folders. So, at every
-stage, if a package is already installed in an ancestor `node_modules`
-folder, then it is not installed at the current location.
-
-Consider the case above, where `foo -> bar -> baz`. Imagine if, in
-addition to that, baz depended on bar, so you'd have:
-`foo -> bar -> baz -> bar -> baz ...`. However, since the folder
-structure is: `foo/node_modules/bar/node_modules/baz`, there's no need to
-put another copy of bar into `.../baz/node_modules`, since when it calls
-require("bar"), it will get the copy that is installed in
-`foo/node_modules/bar`.
-
-This shortcut is only used if the exact same
-version would be installed in multiple nested `node_modules` folders. It
-is still possible to have `a/node_modules/b/node_modules/a` if the two
-"a" packages are different versions. However, without repeating the
-exact same package multiple times, an infinite regress will always be
-prevented.
-
-Another optimization can be made by installing dependencies at the
-highest level possible, below the localized "target" folder.
-
-#### Example
-
-Consider this dependency graph:
-
- foo
- +-- blerg@1.2.5
- +-- bar@1.2.3
- | +-- blerg@1.x (latest=1.3.7)
- | +-- baz@2.x
- | | `-- quux@3.x
- | | `-- bar@1.2.3 (cycle)
- | `-- asdf@*
- `-- baz@1.2.3
- `-- quux@3.x
- `-- bar
-
-In this case, we might expect a folder structure like this:
-
- foo
- +-- node_modules
- +-- blerg (1.2.5) <---[A]
- +-- bar (1.2.3) <---[B]
- | `-- node_modules
- | +-- baz (2.0.2) <---[C]
- | | `-- node_modules
- | | `-- quux (3.2.0)
- | `-- asdf (2.3.4)
- `-- baz (1.2.3) <---[D]
- `-- node_modules
- `-- quux (3.2.0) <---[E]
-
-Since foo depends directly on `bar@1.2.3` and `baz@1.2.3`, those are
-installed in foo's `node_modules` folder.
-
-Even though the latest copy of blerg is 1.3.7, foo has a specific
-dependency on version 1.2.5. So, that gets installed at [A]. Since the
-parent installation of blerg satisfies bar's dependency on `blerg@1.x`,
-it does not install another copy under [B].
-
-Bar [B] also has dependencies on baz and asdf, so those are installed in
-bar's `node_modules` folder. Because it depends on `baz@2.x`, it cannot
-re-use the `baz@1.2.3` installed in the parent `node_modules` folder [D],
-and must install its own copy [C].
-
-Underneath bar, the `baz -> quux -> bar` dependency creates a cycle.
-However, because bar is already in quux's ancestry [B], it does not
-unpack another copy of bar into that folder.
-
-Underneath `foo -> baz` [D], quux's [E] folder tree is empty, because its
-dependency on bar is satisfied by the parent folder copy installed at [B].
-
-For a graphical breakdown of what is installed where, use `npm ls`.
-
-### Publishing
-
-Upon publishing, npm will look in the `node_modules` folder. If any of
-the items there are not in the `bundledDependencies` array, then they will
-not be included in the package tarball.
-
-This allows a package maintainer to install all of their dependencies
-(and dev dependencies) locally, but only re-publish those items that
-cannot be found elsewhere. See `npm-json(1)` for more information.
-
-## SEE ALSO
-
-* npm-faq(1)
-* npm-json(1)
-* npm-install(1)
-* npm-pack(1)
-* npm-cache(1)
-* npm-config(1)
-* npm-publish(1)
diff --git a/deps/npm/doc/cli/global.md b/deps/npm/doc/cli/global.md
deleted file mode 100644
index 20358612a..000000000
--- a/deps/npm/doc/cli/global.md
+++ /dev/null
@@ -1,209 +0,0 @@
-npm-folders(1) -- Folder Structures Used by npm
-===============================================
-
-## DESCRIPTION
-
-npm puts various things on your computer. That's its job.
-
-This document will tell you what it puts where.
-
-### tl;dr
-
-* Local install (default): puts stuff in `./node_modules` of the current
- package root.
-* Global install (with `-g`): puts stuff in /usr/local or wherever node
- is installed.
-* Install it **locally** if you're going to `require()` it.
-* Install it **globally** if you're going to run it on the command line.
-* If you need both, then install it in both places, or use `npm link`.
-
-### prefix Configuration
-
-The `prefix` config defaults to the location where node is installed.
-On most systems, this is `/usr/local`, and most of the time is the same
-as node's `process.installPrefix`.
-
-On windows, this is the exact location of the node.exe binary. On Unix
-systems, it's one level up, since node is typically installed at
-`{prefix}/bin/node` rather than `{prefix}/node.exe`.
-
-When the `global` flag is set, npm installs things into this prefix.
-When it is not set, it uses the root of the current package, or the
-current working directory if not in a package already.
-
-### Node Modules
-
-Packages are dropped into the `node_modules` folder under the `prefix`.
-When installing locally, this means that you can
-`require("packagename")` to load its main module, or
-`require("packagename/lib/path/to/sub/module")` to load other modules.
-
-Global installs on Unix systems go to `{prefix}/lib/node_modules`.
-Global installs on Windows go to `{prefix}/node_modules` (that is, no
-`lib` folder.)
-
-If you wish to `require()` a package, then install it locally.
-
-### Executables
-
-When in global mode, executables are linked into `{prefix}/bin` on Unix,
-or directly into `{prefix}` on Windows.
-
-When in local mode, executables are linked into
-`./node_modules/.bin` so that they can be made available to scripts run
-through npm. (For example, so that a test runner will be in the path
-when you run `npm test`.)
-
-### Man Pages
-
-When in global mode, man pages are linked into `{prefix}/share/man`.
-
-When in local mode, man pages are not installed.
-
-Man pages are not installed on Windows systems.
-
-### Cache
-
-See `npm-cache(1)`. Cache files are stored in `~/.npm` on Posix, or
-`~/npm-cache` on Windows.
-
-This is controlled by the `cache` configuration param.
-
-### Temp Files
-
-Temporary files are stored by default in the folder specified by the
-`tmp` config, which defaults to the TMPDIR, TMP, or TEMP environment
-variables, or `/tmp` on Unix and `c:\windows\temp` on Windows.
-
-Temp files are given a unique folder under this root for each run of the
-program, and are deleted upon successful exit.
-
-## More Information
-
-When installing locally, npm first tries to find an appropriate
-`prefix` folder. This is so that `npm install foo@1.2.3` will install
-to the sensible root of your package, even if you happen to have `cd`ed
-into some other folder.
-
-Starting at the $PWD, npm will walk up the folder tree checking for a
-folder that contains either a `package.json` file, or a `node_modules`
-folder. If such a thing is found, then that is treated as the effective
-"current directory" for the purpose of running npm commands. (This
-behavior is inspired by and similar to git's .git-folder seeking
-logic when running git commands in a working dir.)
-
-If no package root is found, then the current folder is used.
-
-When you run `npm install foo@1.2.3`, then the package is loaded into
-the cache, and then unpacked into `./node_modules/foo`. Then, any of
-foo's dependencies are similarly unpacked into
-`./node_modules/foo/node_modules/...`.
-
-Any bin files are symlinked to `./node_modules/.bin/`, so that they may
-be found by npm scripts when necessary.
-
-### Global Installation
-
-If the `global` configuration is set to true, then npm will
-install packages "globally".
-
-For global installation, packages are installed roughly the same way,
-but using the folders described above.
-
-### Cycles, Conflicts, and Folder Parsimony
-
-Cycles are handled using the property of node's module system that it
-walks up the directories looking for `node_modules` folders. So, at every
-stage, if a package is already installed in an ancestor `node_modules`
-folder, then it is not installed at the current location.
-
-Consider the case above, where `foo -> bar -> baz`. Imagine if, in
-addition to that, baz depended on bar, so you'd have:
-`foo -> bar -> baz -> bar -> baz ...`. However, since the folder
-structure is: `foo/node_modules/bar/node_modules/baz`, there's no need to
-put another copy of bar into `.../baz/node_modules`, since when it calls
-require("bar"), it will get the copy that is installed in
-`foo/node_modules/bar`.
-
-This shortcut is only used if the exact same
-version would be installed in multiple nested `node_modules` folders. It
-is still possible to have `a/node_modules/b/node_modules/a` if the two
-"a" packages are different versions. However, without repeating the
-exact same package multiple times, an infinite regress will always be
-prevented.
-
-Another optimization can be made by installing dependencies at the
-highest level possible, below the localized "target" folder.
-
-#### Example
-
-Consider this dependency graph:
-
- foo
- +-- blerg@1.2.5
- +-- bar@1.2.3
- | +-- blerg@1.x (latest=1.3.7)
- | +-- baz@2.x
- | | `-- quux@3.x
- | | `-- bar@1.2.3 (cycle)
- | `-- asdf@*
- `-- baz@1.2.3
- `-- quux@3.x
- `-- bar
-
-In this case, we might expect a folder structure like this:
-
- foo
- +-- node_modules
- +-- blerg (1.2.5) <---[A]
- +-- bar (1.2.3) <---[B]
- | +-- node_modules
- | | `-- baz (2.0.2) <---[C]
- | | `-- node_modules
- | | `-- quux (3.2.0)
- | `-- asdf (2.3.4)
- `-- baz (1.2.3) <---[D]
- `-- node_modules
- `-- quux (3.2.0) <---[E]
-
-Since foo depends directly on bar@1.2.3 and baz@1.2.3, those are
-installed in foo's `node_modules` folder.
-
-Even though the latest copy of blerg is 1.3.7, foo has a specific
-dependency on version 1.2.5. So, that gets installed at [A]. Since the
-parent installation of blerg satisfie's bar's dependency on blerg@1.x,
-it does not install another copy under [B].
-
-Bar [B] also has dependencies on baz and asdf, so those are installed in
-bar's `node_modules` folder. Because it depends on `baz@2.x`, it cannot
-re-use the `baz@1.2.3` installed in the parent `node_modules` folder [D],
-and must install its own copy [C].
-
-Underneath bar, the `baz->quux->bar` dependency creates a cycle.
-However, because `bar` is already in `quux`'s ancestry [B], it does not
-unpack another copy of bar into that folder.
-
-Underneath `foo->baz` [D], quux's [E] folder tree is empty, because its
-dependency on bar is satisfied by the parent folder copy installed at [B].
-
-For a graphical breakdown of what is installed where, use `npm ls`.
-
-### Publishing
-
-Upon publishing, npm will look in the `node_modules` folder. If any of
-the items there are not in the `bundledDependencies` array, then they will
-not be included in the package tarball.
-
-This allows a package maintainer to install all of their dependencies
-(and dev dependencies) locally, but only re-publish those items that
-cannot be found elsewhere. See `npm-json(1)` for more information.
-
-## SEE ALSO
-
-* npm-faq(1)
-* npm-json(1)
-* npm-install(1)
-* npm-pack(1)
-* npm-cache(1)
-* npm-config(1)
-* npm-publish(1)
diff --git a/deps/npm/doc/cli/help-search.md b/deps/npm/doc/cli/help-search.md
deleted file mode 100644
index 9c16901eb..000000000
--- a/deps/npm/doc/cli/help-search.md
+++ /dev/null
@@ -1,35 +0,0 @@
-npm-help-search(1) -- Search npm help documentation
-===================================================
-
-## SYNOPSIS
-
- npm help-search some search terms
-
-## DESCRIPTION
-
-This command will search the npm markdown documentation files for the
-terms provided, and then list the results, sorted by relevance.
-
-If only one result is found, then it will show that help topic.
-
-If the argument to `npm help` is not a known help topic, then it will
-call `help-search`. It is rarely if ever necessary to call this
-command directly.
-
-## CONFIGURATION
-
-### long
-
-* Type: Boolean
-* Default false
-
-If true, the "long" flag will cause help-search to output context around
-where the terms were found in the documentation.
-
-If false, then help-search will just list out the help topics found.
-
-## SEE ALSO
-
-* npm(1)
-* npm-faq(1)
-* npm-help(1)
diff --git a/deps/npm/doc/cli/help.md b/deps/npm/doc/cli/help.md
deleted file mode 100644
index b51b0f164..000000000
--- a/deps/npm/doc/cli/help.md
+++ /dev/null
@@ -1,38 +0,0 @@
-npm-help(1) -- Get help on npm
-==============================
-
-## SYNOPSIS
-
- npm help <topic>
- npm help some search terms
-
-## DESCRIPTION
-
-If supplied a topic, then show the appropriate documentation page.
-
-If the topic does not exist, or if multiple terms are provided, then run
-the `help-search` command to find a match. Note that, if `help-search`
-finds a single subject, then it will run `help` on that topic, so unique
-matches are equivalent to specifying a topic name.
-
-## CONFIGURATION
-
-### viewer
-
-* Default: "man" on Posix, "browser" on Windows
-* Type: path
-
-The program to use to view help content.
-
-Set to `"browser"` to view html help content in the default web browser.
-
-## SEE ALSO
-
-* npm(1)
-* README
-* npm-faq(1)
-* npm-folders(1)
-* npm-config(1)
-* npm-json(1)
-* npm-help-search(1)
-* npm-index(1)
diff --git a/deps/npm/doc/cli/index.md b/deps/npm/doc/cli/index.md
deleted file mode 100644
index 903812dc2..000000000
--- a/deps/npm/doc/cli/index.md
+++ /dev/null
@@ -1,393 +0,0 @@
-npm-index(1) -- Index of all npm documentation
-==============================================
-
-## npm-README(1)
-
- node package manager
-
-# Command Line Documentation
-## npm-adduser(1)
-
- Add a registry user account
-
-## npm-bin(1)
-
- Display npm bin folder
-
-## npm-bugs(1)
-
- Bugs for a package in a web browser maybe
-
-## npm-build(1)
-
- Build a package
-
-## npm-bundle(1)
-
- REMOVED
-
-## npm-cache(1)
-
- Manipulates packages cache
-
-## npm-changelog(1)
-
- Changes
-
-## npm-coding-style(1)
-
- npm's "funny" coding style
-
-## npm-completion(1)
-
- Tab Completion for npm
-
-## npm-config(1)
-
- Manage the npm configuration file
-
-## npm-dedupe(1)
-
- Reduce duplication
-
-## npm-deprecate(1)
-
- Deprecate a version of a package
-
-## npm-developers(1)
-
- Developer Guide
-
-## npm-disputes(1)
-
- Handling Module Name Disputes
-
-## npm-docs(1)
-
- Docs for a package in a web browser maybe
-
-## npm-edit(1)
-
- Edit an installed package
-
-## npm-explore(1)
-
- Browse an installed package
-
-## npm-faq(1)
-
- Frequently Asked Questions
-
-## npm-folders(1)
-
- Folder Structures Used by npm
-
-## npm-global(1)
-
- Folder Structures Used by npm
-
-## npm-help-search(1)
-
- Search npm help documentation
-
-## npm-help(1)
-
- Get help on npm
-
-## npm-init(1)
-
- Interactively create a package.json file
-
-## npm-install(1)
-
- Install a package
-
-## npm-json(1)
-
- Specifics of npm's package.json handling
-
-## npm-link(1)
-
- Symlink a package folder
-
-## npm-ls(1)
-
- List installed packages
-
-## npm-npm(1)
-
- node package manager
-
-## npm-outdated(1)
-
- Check for outdated packages
-
-## npm-owner(1)
-
- Manage package owners
-
-## npm-pack(1)
-
- Create a tarball from a package
-
-## npm-prefix(1)
-
- Display prefix
-
-## npm-prune(1)
-
- Remove extraneous packages
-
-## npm-publish(1)
-
- Publish a package
-
-## npm-rebuild(1)
-
- Rebuild a package
-
-## npm-registry(1)
-
- The JavaScript Package Registry
-
-## npm-removing-npm(1)
-
- Cleaning the Slate
-
-## npm-restart(1)
-
- Start a package
-
-## npm-rm(1)
-
- Remove a package
-
-## npm-root(1)
-
- Display npm root
-
-## npm-run-script(1)
-
- Run arbitrary package scripts
-
-## npm-scripts(1)
-
- How npm handles the "scripts" field
-
-## npm-search(1)
-
- Search for packages
-
-## npm-semver(1)
-
- The semantic versioner for npm
-
-## npm-shrinkwrap(1)
-
- Lock down dependency versions
-
-## npm-star(1)
-
- Mark your favorite packages
-
-## npm-stars(1)
-
- View packages marked as favorites
-
-## npm-start(1)
-
- Start a package
-
-## npm-stop(1)
-
- Stop a package
-
-## npm-submodule(1)
-
- Add a package as a git submodule
-
-## npm-tag(1)
-
- Tag a published version
-
-## npm-test(1)
-
- Test a package
-
-## npm-uninstall(1)
-
- Remove a package
-
-## npm-unpublish(1)
-
- Remove a package from the registry
-
-## npm-update(1)
-
- Update a package
-
-## npm-version(1)
-
- Bump a package version
-
-## npm-view(1)
-
- View registry info
-
-## npm-whoami(1)
-
- Display npm username
-
-# API Documentation
-## npm-bin(3)
-
- Display npm bin folder
-
-## npm-bugs(3)
-
- Bugs for a package in a web browser maybe
-
-## npm-commands(3)
-
- npm commands
-
-## npm-config(3)
-
- Manage the npm configuration files
-
-## npm-deprecate(3)
-
- Deprecate a version of a package
-
-## npm-docs(3)
-
- Docs for a package in a web browser maybe
-
-## npm-edit(3)
-
- Edit an installed package
-
-## npm-explore(3)
-
- Browse an installed package
-
-## npm-help-search(3)
-
- Search the help pages
-
-## npm-init(3)
-
- Interactively create a package.json file
-
-## npm-install(3)
-
- install a package programmatically
-
-## npm-link(3)
-
- Symlink a package folder
-
-## npm-load(3)
-
- Load config settings
-
-## npm-ls(3)
-
- List installed packages
-
-## npm-npm(3)
-
- node package manager
-
-## npm-outdated(3)
-
- Check for outdated packages
-
-## npm-owner(3)
-
- Manage package owners
-
-## npm-pack(3)
-
- Create a tarball from a package
-
-## npm-prefix(3)
-
- Display prefix
-
-## npm-prune(3)
-
- Remove extraneous packages
-
-## npm-publish(3)
-
- Publish a package
-
-## npm-rebuild(3)
-
- Rebuild a package
-
-## npm-restart(3)
-
- Start a package
-
-## npm-root(3)
-
- Display npm root
-
-## npm-run-script(3)
-
- Run arbitrary package scripts
-
-## npm-search(3)
-
- Search for packages
-
-## npm-shrinkwrap(3)
-
- programmatically generate package shrinkwrap file
-
-## npm-start(3)
-
- Start a package
-
-## npm-stop(3)
-
- Stop a package
-
-## npm-submodule(3)
-
- Add a package as a git submodule
-
-## npm-tag(3)
-
- Tag a published version
-
-## npm-test(3)
-
- Test a package
-
-## npm-uninstall(3)
-
- uninstall a package programmatically
-
-## npm-unpublish(3)
-
- Remove a package from the registry
-
-## npm-update(3)
-
- Update a package
-
-## npm-version(3)
-
- Bump a package version
-
-## npm-view(3)
-
- View registry info
-
-## npm-whoami(3)
-
- Display npm username
-
diff --git a/deps/npm/doc/cli/init.md b/deps/npm/doc/cli/init.md
deleted file mode 100644
index d036f924d..000000000
--- a/deps/npm/doc/cli/init.md
+++ /dev/null
@@ -1,25 +0,0 @@
-npm-init(1) -- Interactively create a package.json file
-=======================================================
-
-## SYNOPSIS
-
- npm init
-
-## DESCRIPTION
-
-This will ask you a bunch of questions, and then write a package.json for you.
-
-It attempts to make reasonable guesses about what you want things to be set to,
-and then writes a package.json file with the options you've selected.
-
-If you already have a package.json file, it'll read that first, and default to
-the options in there.
-
-It is strictly additive, so it does not delete options from your package.json
-without a really good reason to do so.
-
-## SEE ALSO
-
-* <https://github.com/isaacs/init-package-json>
-* npm-json(1)
-* npm-version(1)
diff --git a/deps/npm/doc/cli/install.md b/deps/npm/doc/cli/install.md
deleted file mode 100644
index 44885f318..000000000
--- a/deps/npm/doc/cli/install.md
+++ /dev/null
@@ -1,242 +0,0 @@
-npm-install(1) -- Install a package
-===================================
-
-## SYNOPSIS
-
- npm install (with no args in a package dir)
- npm install <tarball file>
- npm install <tarball url>
- npm install <folder>
- npm install <name> [--save|--save-dev|--save-optional]
- npm install <name>@<tag>
- npm install <name>@<version>
- npm install <name>@<version range>
- npm install <name>@<version range>
-
-## DESCRIPTION
-
-This command installs a package, and any packages that it depends on. If the
-package has a shrinkwrap file, the installation of dependencies will be driven
-by that. See npm-shrinkwrap(1).
-
-A `package` is:
-
-* a) a folder containing a program described by a package.json file
-* b) a gzipped tarball containing (a)
-* c) a url that resolves to (b)
-* d) a `<name>@<version>` that is published on the registry with (c)
-* e) a `<name>@<tag>` that points to (d)
-* f) a `<name>` that has a "latest" tag satisfying (e)
-* g) a `<git remote url>` that resolves to (b)
-
-Even if you never publish your package, you can still get a lot of
-benefits of using npm if you just want to write a node program (a), and
-perhaps if you also want to be able to easily install it elsewhere
-after packing it up into a tarball (b).
-
-
-* `npm install` (in package directory, no arguments):
-
- Install the dependencies in the local node_modules folder.
-
- In global mode (ie, with `-g` or `--global` appended to the command),
- it installs the current package context (ie, the current working
- directory) as a global package.
-
-
-* `npm install <folder>`:
-
- Install a package that is sitting in a folder on the filesystem.
-
-* `npm install <tarball file>`:
-
- Install a package that is sitting on the filesystem. Note: if you just want
- to link a dev directory into your npm root, you can do this more easily by
- using `npm link`.
-
- Example:
-
- npm install ./package.tgz
-
-* `npm install <tarball url>`:
-
- Fetch the tarball url, and then install it. In order to distinguish between
- this and other options, the argument must start with "http://" or "https://"
-
- Example:
-
- npm install https://github.com/indexzero/forever/tarball/v0.5.6
-
-* `npm install <name> [--save|--save-dev|--save-optional]`:
-
- Do a `<name>@<tag>` install, where `<tag>` is the "tag" config. (See
- `npm-config(1)`.)
-
- In most cases, this will install the latest version
- of the module published on npm.
-
- Example:
-
- npm install sax
-
- `npm install` takes 3 exclusive, optional flags which save or update
- the package version in your main package.json:
-
- * `--save`: Package will appear in your `dependencies`.
-
- * `--save-dev`: Package will appear in your `devDependencies`.
-
- * `--save-optional`: Package will appear in your `optionalDependencies`.
-
- Examples:
-
- npm install sax --save
- npm install node-tap --save-dev
- npm install dtrace-provider --save-optional
-
-
- **Note**: If there is a file or folder named `<name>` in the current
- working directory, then it will try to install that, and only try to
- fetch the package by name if it is not valid.
-
-* `npm install <name>@<tag>`:
-
- Install the version of the package that is referenced by the specified tag.
- If the tag does not exist in the registry data for that package, then this
- will fail.
-
- Example:
-
- npm install sax@latest
-
-* `npm install <name>@<version>`:
-
- Install the specified version of the package. This will fail if the version
- has not been published to the registry.
-
- Example:
-
- npm install sax@0.1.1
-
-* `npm install <name>@<version range>`:
-
- Install a version of the package matching the specified version range. This
- will follow the same rules for resolving dependencies described in `npm-json(1)`.
-
- Note that most version ranges must be put in quotes so that your shell will
- treat it as a single argument.
-
- Example:
-
- npm install sax@">=0.1.0 <0.2.0"
-
-* `npm install <git remote url>`:
-
- Install a package by cloning a git remote url. The format of the git
- url is:
-
- <protocol>://[<user>@]<hostname><separator><path>[#<commit-ish>]
-
- `<protocol>` is one of `git`, `git+ssh`, `git+http`, or
- `git+https`. If no `<commit-ish>` is specified, then `master` is
- used.
-
- Examples:
-
- git+ssh://git@github.com:isaacs/npm.git#v1.0.27
- git+https://isaacs@github.com/isaacs/npm.git
- git://github.com/isaacs/npm.git#v1.0.27
-
-You may combine multiple arguments, and even multiple types of arguments.
-For example:
-
- npm install sax@">=0.1.0 <0.2.0" bench supervisor
-
-The `--tag` argument will apply to all of the specified install targets.
-
-The `--force` argument will force npm to fetch remote resources even if a
-local copy exists on disk.
-
- npm install sax --force
-
-The `--global` argument will cause npm to install the package globally
-rather than locally. See `npm-folders(1)`.
-
-The `--link` argument will cause npm to link global installs into the
-local space in some cases.
-
-The `--no-bin-links` argument will prevent npm from creating symlinks for
-any binaries the package might contain.
-
-The `--no-shrinkwrap` argument, which will ignore an available
-shrinkwrap file and use the package.json instead.
-
-The `--nodedir=/path/to/node/source` argument will allow npm to find the
-node source code so that npm can compile native modules.
-
-See `npm-config(1)`. Many of the configuration params have some
-effect on installation, since that's most of what npm does.
-
-## ALGORITHM
-
-To install a package, npm uses the following algorithm:
-
- install(where, what, family, ancestors)
- fetch what, unpack to <where>/node_modules/<what>
- for each dep in what.dependencies
- resolve dep to precise version
- for each dep@version in what.dependencies
- not in <where>/node_modules/<what>/node_modules/*
- and not in <family>
- add precise version deps to <family>
- install(<where>/node_modules/<what>, dep, family)
-
-For this `package{dep}` structure: `A{B,C}, B{C}, C{D}`,
-this algorithm produces:
-
- A
- +-- B
- `-- C
- `-- D
-
-That is, the dependency from B to C is satisfied by the fact that A
-already caused C to be installed at a higher level.
-
-See npm-folders(1) for a more detailed description of the specific
-folder structures that npm creates.
-
-### Limitations of npm's Install Algorithm
-
-There are some very rare and pathological edge-cases where a cycle can
-cause npm to try to install a never-ending tree of packages. Here is
-the simplest case:
-
- A -> B -> A' -> B' -> A -> B -> A' -> B' -> A -> ...
-
-where `A` is some version of a package, and `A'` is a different version
-of the same package. Because `B` depends on a different version of `A`
-than the one that is already in the tree, it must install a separate
-copy. The same is true of `A'`, which must install `B'`. Because `B'`
-depends on the original version of `A`, which has been overridden, the
-cycle falls into infinite regress.
-
-To avoid this situation, npm flat-out refuses to install any
-`name@version` that is already present anywhere in the tree of package
-folder ancestors. A more correct, but more complex, solution would be
-to symlink the existing version into the new location. If this ever
-affects a real use-case, it will be investigated.
-
-## SEE ALSO
-
-* npm-folders(1)
-* npm-update(1)
-* npm-link(1)
-* npm-rebuild(1)
-* npm-scripts(1)
-* npm-build(1)
-* npm-config(1)
-* npm-registry(1)
-* npm-folders(1)
-* npm-tag(1)
-* npm-rm(1)
-* npm-shrinkwrap(1)
diff --git a/deps/npm/doc/cli/json.md b/deps/npm/doc/cli/json.md
deleted file mode 100644
index 403f7f856..000000000
--- a/deps/npm/doc/cli/json.md
+++ /dev/null
@@ -1,587 +0,0 @@
-npm-json(1) -- Specifics of npm's package.json handling
-=======================================================
-
-## DESCRIPTION
-
-This document is all you need to know about what's required in your package.json
-file. It must be actual JSON, not just a JavaScript object literal.
-
-A lot of the behavior described in this document is affected by the config
-settings described in `npm-config(1)`.
-
-## DEFAULT VALUES
-
-npm will default some values based on package contents.
-
-* `"scripts": {"start": "node server.js"}`
-
- If there is a `server.js` file in the root of your package, then npm
- will default the `start` command to `node server.js`.
-
-* `"scripts":{"preinstall": "node-waf clean || true; node-waf configure build"}`
-
- If there is a `wscript` file in the root of your package, npm will
- default the `preinstall` command to compile using node-waf.
-
-* `"scripts":{"preinstall": "node-gyp rebuild"}`
-
- If there is a `binding.gyp` file in the root of your package, npm will
- default the `preinstall` command to compile using node-gyp.
-
-* `"contributors": [...]`
-
- If there is an `AUTHORS` file in the root of your package, npm will
- treat each line as a `Name <email> (url)` format, where email and url
- are optional. Lines which start with a `#` or are blank, will be
- ignored.
-
-## name
-
-The *most* important things in your package.json are the name and version fields.
-Those are actually required, and your package won't install without
-them. The name and version together form an identifier that is assumed
-to be completely unique. Changes to the package should come along with
-changes to the version.
-
-The name is what your thing is called. Some tips:
-
-* Don't put "js" or "node" in the name. It's assumed that it's js, since you're
- writing a package.json file, and you can specify the engine using the "engines"
- field. (See below.)
-* The name ends up being part of a URL, an argument on the command line, and a
- folder name. Any name with non-url-safe characters will be rejected.
- Also, it can't start with a dot or an underscore.
-* The name will probably be passed as an argument to require(), so it should
- be something short, but also reasonably descriptive.
-* You may want to check the npm registry to see if there's something by that name
- already, before you get too attached to it. http://registry.npmjs.org/
-
-## version
-
-The *most* important things in your package.json are the name and version fields.
-Those are actually required, and your package won't install without
-them. The name and version together form an identifier that is assumed
-to be completely unique. Changes to the package should come along with
-changes to the version.
-
-Version must be parseable by
-[node-semver](https://github.com/isaacs/node-semver), which is bundled
-with npm as a dependency. (`npm install semver` to use it yourself.)
-
-Here's how npm's semver implementation deviates from what's on semver.org:
-
-* Versions can start with "v"
-* A numeric item separated from the main three-number version by a hyphen
- will be interpreted as a "build" number, and will *increase* the version.
- But, if the tag is not a number separated by a hyphen, then it's treated
- as a pre-release tag, and is *less than* the version without a tag.
- So, `0.1.2-7 > 0.1.2-7-beta > 0.1.2-6 > 0.1.2 > 0.1.2beta`
-
-This is a little bit confusing to explain, but matches what you see in practice
-when people create tags in git like "v1.2.3" and then do "git describe" to generate
-a patch version.
-
-## description
-
-Put a description in it. It's a string. This helps people discover your
-package, as it's listed in `npm search`.
-
-## keywords
-
-Put keywords in it. It's an array of strings. This helps people
-discover your package as it's listed in `npm search`.
-
-## homepage
-
-The url to the project homepage.
-
-**NOTE**: This is *not* the same as "url". If you put a "url" field,
-then the registry will think it's a redirection to your package that has
-been published somewhere else, and spit at you.
-
-Literally. Spit. I'm so not kidding.
-
-## bugs
-
-The url to your project's issue tracker and / or the email address to which
-issues should be reported. These are helpful for people who encounter issues
-with your package.
-
-It should look like this:
-
- { "url" : "http://github.com/owner/project/issues"
- , "email" : "project@hostname.com"
- }
-
-You can specify either one or both values. If you want to provide only a url,
-you can specify the value for "bugs" as a simple string instead of an object.
-
-If a url is provided, it will be used by the `npm bugs` command.
-
-## license
-
-You should specify a license for your package so that people know how they are
-permitted to use it, and any restrictions you're placing on it.
-
-The simplest way, assuming you're using a common license such as BSD or MIT, is
-to just specify the name of the license you're using, like this:
-
- { "license" : "BSD" }
-
-If you have more complex licensing terms, or you want to provide more detail
-in your package.json file, you can use the more verbose plural form, like this:
-
- "licenses" : [
- { "type" : "MyLicense"
- , "url" : "http://github.com/owner/project/path/to/license"
- }
- ]
-
-It's also a good idea to include a license file at the top level in your package.
-
-## people fields: author, contributors
-
-The "author" is one person. "contributors" is an array of people. A "person"
-is an object with a "name" field and optionally "url" and "email", like this:
-
- { "name" : "Barney Rubble"
- , "email" : "b@rubble.com"
- , "url" : "http://barnyrubble.tumblr.com/"
- }
-
-Or you can shorten that all into a single string, and npm will parse it for you:
-
- "Barney Rubble <b@rubble.com> (http://barnyrubble.tumblr.com/)
-
-Both email and url are optional either way.
-
-npm also sets a top-level "maintainers" field with your npm user info.
-
-## files
-
-The "files" field is an array of files to include in your project. If
-you name a folder in the array, then it will also include the files
-inside that folder. (Unless they would be ignored by another rule.)
-
-You can also provide a ".npmignore" file in the root of your package,
-which will keep files from being included, even if they would be picked
-up by the files array. The ".npmignore" file works just like a
-".gitignore".
-
-## main
-
-The main field is a module ID that is the primary entry point to your program.
-That is, if your package is named `foo`, and a user installs it, and then does
-`require("foo")`, then your main module's exports object will be returned.
-
-This should be a module ID relative to the root of your package folder.
-
-For most modules, it makes the most sense to have a main script and often not
-much else.
-
-## bin
-
-A lot of packages have one or more executable files that they'd like to
-install into the PATH. npm makes this pretty easy (in fact, it uses this
-feature to install the "npm" executable.)
-
-To use this, supply a `bin` field in your package.json which is a map of
-command name to local file name. On install, npm will symlink that file into
-`prefix/bin` for global installs, or `./node_modules/.bin/` for local
-installs.
-
-
-For example, npm has this:
-
- { "bin" : { "npm" : "./cli.js" } }
-
-So, when you install npm, it'll create a symlink from the `cli.js` script to
-`/usr/local/bin/npm`.
-
-If you have a single executable, and its name should be the name
-of the package, then you can just supply it as a string. For example:
-
- { "name": "my-program"
- , "version": "1.2.5"
- , "bin": "./path/to/program" }
-
-would be the same as this:
-
- { "name": "my-program"
- , "version": "1.2.5"
- , "bin" : { "my-program" : "./path/to/program" } }
-
-## man
-
-Specify either a single file or an array of filenames to put in place for the
-`man` program to find.
-
-If only a single file is provided, then it's installed such that it is the
-result from `man <pkgname>`, regardless of its actual filename. For example:
-
- { "name" : "foo"
- , "version" : "1.2.3"
- , "description" : "A packaged foo fooer for fooing foos"
- , "main" : "foo.js"
- , "man" : "./man/doc.1"
- }
-
-would link the `./man/doc.1` file in such that it is the target for `man foo`
-
-If the filename doesn't start with the package name, then it's prefixed.
-So, this:
-
- { "name" : "foo"
- , "version" : "1.2.3"
- , "description" : "A packaged foo fooer for fooing foos"
- , "main" : "foo.js"
- , "man" : [ "./man/foo.1", "./man/bar.1" ]
- }
-
-will create files to do `man foo` and `man foo-bar`.
-
-Man files must end with a number, and optionally a `.gz` suffix if they are
-compressed. The number dictates which man section the file is installed into.
-
- { "name" : "foo"
- , "version" : "1.2.3"
- , "description" : "A packaged foo fooer for fooing foos"
- , "main" : "foo.js"
- , "man" : [ "./man/foo.1", "./man/foo.2" ]
- }
-
-will create entries for `man foo` and `man 2 foo`
-
-## directories
-
-The CommonJS [Packages](http://wiki.commonjs.org/wiki/Packages/1.0) spec details a
-few ways that you can indicate the structure of your package using a `directories`
-hash. If you look at [npm's package.json](http://registry.npmjs.org/npm/latest),
-you'll see that it has directories for doc, lib, and man.
-
-In the future, this information may be used in other creative ways.
-
-### directories.lib
-
-Tell people where the bulk of your library is. Nothing special is done
-with the lib folder in any way, but it's useful meta info.
-
-### directories.bin
-
-If you specify a "bin" directory, then all the files in that folder will
-be used as the "bin" hash.
-
-If you have a "bin" hash already, then this has no effect.
-
-### directories.man
-
-A folder that is full of man pages. Sugar to generate a "man" array by
-walking the folder.
-
-### directories.doc
-
-Put markdown files in here. Eventually, these will be displayed nicely,
-maybe, someday.
-
-### directories.example
-
-Put example scripts in here. Someday, it might be exposed in some clever way.
-
-## repository
-
-Specify the place where your code lives. This is helpful for people who
-want to contribute. If the git repo is on github, then the `npm docs`
-command will be able to find you.
-
-Do it like this:
-
- "repository" :
- { "type" : "git"
- , "url" : "http://github.com/isaacs/npm.git"
- }
-
- "repository" :
- { "type" : "svn"
- , "url" : "http://v8.googlecode.com/svn/trunk/"
- }
-
-The URL should be a publicly available (perhaps read-only) url that can be handed
-directly to a VCS program without any modification. It should not be a url to an
-html project page that you put in your browser. It's for computers.
-
-## scripts
-
-The "scripts" member is an object hash of script commands that are run
-at various times in the lifecycle of your package. The key is the lifecycle
-event, and the value is the command to run at that point.
-
-See `npm-scripts(1)` to find out more about writing package scripts.
-
-## config
-
-A "config" hash can be used to set configuration
-parameters used in package scripts that persist across upgrades. For
-instance, if a package had the following:
-
- { "name" : "foo"
- , "config" : { "port" : "8080" } }
-
-and then had a "start" command that then referenced the
-`npm_package_config_port` environment variable, then the user could
-override that by doing `npm config set foo:port 8001`.
-
-See `npm-config(1)` and `npm-scripts(1)` for more on package
-configs.
-
-## dependencies
-
-Dependencies are specified with a simple hash of package name to version
-range. The version range is EITHER a string which has one or more
-space-separated descriptors, OR a range like "fromVersion - toVersion"
-
-**Please do not put test harnesses in your `dependencies` hash.** See
-`devDependencies`, below.
-
-Version range descriptors may be any of the following styles, where "version"
-is a semver compatible version identifier.
-
-* `version` Must match `version` exactly
-* `=version` Same as just `version`
-* `>version` Must be greater than `version`
-* `>=version` etc
-* `<version`
-* `<=version`
-* `~version` See 'Tilde Version Ranges' below
-* `1.2.x` See 'X Version Ranges' below
-* `http://...` See 'URLs as Dependencies' below
-* `*` Matches any version
-* `""` (just an empty string) Same as `*`
-* `version1 - version2` Same as `>=version1 <=version2`.
-* `range1 || range2` Passes if either range1 or range2 are satisfied.
-* `git...` See 'Git URLs as Dependencies' below
-
-For example, these are all valid:
-
- { "dependencies" :
- { "foo" : "1.0.0 - 2.9999.9999"
- , "bar" : ">=1.0.2 <2.1.2"
- , "baz" : ">1.0.2 <=2.3.4"
- , "boo" : "2.0.1"
- , "qux" : "<1.0.0 || >=2.3.1 <2.4.5 || >=2.5.2 <3.0.0"
- , "asd" : "http://asdf.com/asdf.tar.gz"
- , "til" : "~1.2"
- , "elf" : "~1.2.3"
- , "two" : "2.x"
- , "thr" : "3.3.x"
- }
- }
-
-### Tilde Version Ranges
-
-A range specifier starting with a tilde `~` character is matched against
-a version in the following fashion.
-
-* The version must be at least as high as the range.
-* The version must be less than the next major revision above the range.
-
-For example, the following are equivalent:
-
-* `"~1.2.3" = ">=1.2.3 <1.3.0"`
-* `"~1.2" = ">=1.2.0 <1.3.0"`
-* `"~1" = ">=1.0.0 <1.1.0"`
-
-### X Version Ranges
-
-An "x" in a version range specifies that the version number must start
-with the supplied digits, but any digit may be used in place of the x.
-
-The following are equivalent:
-
-* `"1.2.x" = ">=1.2.0 <1.3.0"`
-* `"1.x.x" = ">=1.0.0 <2.0.0"`
-* `"1.2" = "1.2.x"`
-* `"1.x" = "1.x.x"`
-* `"1" = "1.x.x"`
-
-You may not supply a comparator with a version containing an x. Any
-digits after the first "x" are ignored.
-
-### URLs as Dependencies
-
-Starting with npm version 0.2.14, you may specify a tarball URL in place
-of a version range.
-
-This tarball will be downloaded and installed locally to your package at
-install time.
-
-### Git URLs as Dependencies
-
-Git urls can be of the form:
-
- git://github.com/user/project.git#commit-ish
- git+ssh://user@hostname:project.git#commit-ish
- git+ssh://user@hostname/project.git#commit-ish
- git+http://user@hostname/project/blah.git#commit-ish
- git+https://user@hostname/project/blah.git#commit-ish
-
-The `commit-ish` can be any tag, sha, or branch which can be supplied as
-an argument to `git checkout`. The default is `master`.
-
-## devDependencies
-
-If someone is planning on downloading and using your module in their
-program, then they probably don't want or need to download and build
-the external test or documentation framework that you use.
-
-In this case, it's best to list these additional items in a
-`devDependencies` hash.
-
-These things will be installed whenever the `--dev` configuration flag
-is set. This flag is set automatically when doing `npm link` or when doing
-`npm install` from the root of a package, and can be managed like any other npm
-configuration param. See `npm-config(1)` for more on the topic.
-
-## bundledDependencies
-
-Array of package names that will be bundled when publishing the package.
-
-If this is spelled `"bundleDependencies"`, then that is also honorable.
-
-## optionalDependencies
-
-If a dependency can be used, but you would like npm to proceed if it
-cannot be found or fails to install, then you may put it in the
-`optionalDependencies` hash. This is a map of package name to version
-or url, just like the `dependencies` hash. The difference is that
-failure is tolerated.
-
-It is still your program's responsibility to handle the lack of the
-dependency. For example, something like this:
-
- try {
- var foo = require('foo')
- var fooVersion = require('foo/package.json').version
- } catch (er) {
- foo = null
- }
- if ( notGoodFooVersion(fooVersion) ) {
- foo = null
- }
-
- // .. then later in your program ..
-
- if (foo) {
- foo.doFooThings()
- }
-
-Entries in `optionalDependencies` will override entries of the same name in
-`dependencies`, so it's usually best to only put in one place.
-
-## engines
-
-You can specify the version of node that your stuff works on:
-
- { "engines" : { "node" : ">=0.1.27 <0.1.30" } }
-
-And, like with dependencies, if you don't specify the version (or if you
-specify "\*" as the version), then any version of node will do.
-
-If you specify an "engines" field, then npm will require that "node" be
-somewhere on that list. If "engines" is omitted, then npm will just assume
-that it works on node.
-
-You can also use the "engines" field to specify which versions of npm
-are capable of properly installing your program. For example:
-
- { "engines" : { "npm" : "~1.0.20" } }
-
-Note that, unless the user has set the `engine-strict` config flag, this
-field is advisory only.
-
-## engineStrict
-
-If you are sure that your module will *definitely not* run properly on
-versions of Node/npm other than those specified in the `engines` hash,
-then you can set `"engineStrict": true` in your package.json file.
-This will override the user's `engine-strict` config setting.
-
-Please do not do this unless you are really very very sure. If your
-engines hash is something overly restrictive, you can quite easily and
-inadvertently lock yourself into obscurity and prevent your users from
-updating to new versions of Node. Consider this choice carefully. If
-people abuse it, it will be removed in a future version of npm.
-
-## os
-
-You can specify which operating systems your
-module will run on:
-
- "os" : [ "darwin", "linux" ]
-
-You can also blacklist instead of whitelist operating systems,
-just prepend the blacklisted os with a '!':
-
- "os" : [ "!win32" ]
-
-The host operating system is determined by `process.platform`
-
-It is allowed to both blacklist, and whitelist, although there isn't any
-good reason to do this.
-
-## cpu
-
-If your code only runs on certain cpu architectures,
-you can specify which ones.
-
- "cpu" : [ "x64", "ia32" ]
-
-Like the `os` option, you can also blacklist architectures:
-
- "cpu" : [ "!arm", "!mips" ]
-
-The host architecture is determined by `process.arch`
-
-## preferGlobal
-
-If your package is primarily a command-line application that should be
-installed globally, then set this value to `true` to provide a warning
-if it is installed locally.
-
-It doesn't actually prevent users from installing it locally, but it
-does help prevent some confusion if it doesn't work as expected.
-
-## private
-
-If you set `"private": true` in your package.json, then npm will refuse
-to publish it.
-
-This is a way to prevent accidental publication of private repositories.
-If you would like to ensure that a given package is only ever published
-to a specific registry (for example, an internal registry),
-then use the `publishConfig` hash described below
-to override the `registry` config param at publish-time.
-
-## publishConfig
-
-This is a set of config values that will be used at publish-time. It's
-especially handy if you want to set the tag or registry, so that you can
-ensure that a given package is not tagged with "latest" or published to
-the global public registry by default.
-
-Any config values can be overridden, but of course only "tag" and
-"registry" probably matter for the purposes of publishing.
-
-See `npm-config(1)` to see the list of config options that can be
-overridden.
-
-## SEE ALSO
-
-* npm-semver(1)
-* npm-init(1)
-* npm-version(1)
-* npm-config(1)
-* npm-help(1)
-* npm-faq(1)
-* npm-install(1)
-* npm-publish(1)
-* npm-rm(1)
diff --git a/deps/npm/doc/cli/link.md b/deps/npm/doc/cli/link.md
deleted file mode 100644
index 4e4ef799b..000000000
--- a/deps/npm/doc/cli/link.md
+++ /dev/null
@@ -1,60 +0,0 @@
-npm-link(1) -- Symlink a package folder
-=======================================
-
-## SYNOPSIS
-
- npm link (in package folder)
- npm link <pkgname>
-
-## DESCRIPTION
-
-Package linking is a two-step process.
-
-First, `npm link` in a package folder will create a globally-installed
-symbolic link from `prefix/package-name` to the current folder.
-
-Next, in some other location, `npm link package-name` will create a
-symlink from the local `node_modules` folder to the global symlink.
-
-Note that `package-name` is taken from `package.json` ,
-not from directory name.
-
-When creating tarballs for `npm publish`, the linked packages are
-"snapshotted" to their current state by resolving the symbolic links.
-
-This is
-handy for installing your own stuff, so that you can work on it and test it
-iteratively without having to continually rebuild.
-
-For example:
-
- cd ~/projects/node-redis # go into the package directory
- npm link # creates global link
- cd ~/projects/node-bloggy # go into some other package directory.
- npm link redis # link-install the package
-
-Now, any changes to ~/projects/node-redis will be reflected in
-~/projects/node-bloggy/node_modules/redis/
-
-You may also shortcut the two steps in one. For example, to do the
-above use-case in a shorter way:
-
- cd ~/projects/node-bloggy # go into the dir of your main project
- npm link ../node-redis # link the dir of your dependency
-
-The second line is the equivalent of doing:
-
- (cd ../node-redis; npm link)
- npm link redis
-
-That is, it first creates a global link, and then links the global
-installation target into your project's `node_modules` folder.
-
-## SEE ALSO
-
-* npm-developers(1)
-* npm-faq(1)
-* npm-json(1)
-* npm-install(1)
-* npm-folders(1)
-* npm-config(1)
diff --git a/deps/npm/doc/cli/ls.md b/deps/npm/doc/cli/ls.md
deleted file mode 100644
index 3dd709b62..000000000
--- a/deps/npm/doc/cli/ls.md
+++ /dev/null
@@ -1,68 +0,0 @@
-npm-ls(1) -- List installed packages
-======================================
-
-## SYNOPSIS
-
- npm list [<pkg> ...]
- npm ls [<pkg> ...]
- npm la [<pkg> ...]
- npm ll [<pkg> ...]
-
-## DESCRIPTION
-
-This command will print to stdout all the versions of packages that are
-installed, as well as their dependencies, in a tree-structure.
-
-Positional arguments are `name@version-range` identifiers, which will
-limit the results to only the paths to the packages named. Note that
-nested packages will *also* show the paths to the specified packages.
-For example, running `npm ls promzard` in npm's source tree will show:
-
- npm@@VERSION@ /path/to/npm
- └─┬ init-package-json@0.0.4
- └── promzard@0.1.5
-
-It will show print out extraneous, missing, and invalid packages.
-
-When run as `ll` or `la`, it shows extended information by default.
-
-## CONFIGURATION
-
-### json
-
-* Default: false
-* Type: Boolean
-
-Show information in JSON format.
-
-### long
-
-* Default: false
-* Type: Boolean
-
-Show extended information.
-
-### parseable
-
-* Default: false
-* Type: Boolean
-
-Show parseable output instead of tree view.
-
-### global
-
-* Default: false
-* Type: Boolean
-
-List packages in the global install prefix instead of in the current
-project.
-
-## SEE ALSO
-
-* npm-config(1)
-* npm-folders(1)
-* npm-install(1)
-* npm-link(1)
-* npm-prune(1)
-* npm-outdated(1)
-* npm-update(1)
diff --git a/deps/npm/doc/cli/npm-adduser.md b/deps/npm/doc/cli/npm-adduser.md
new file mode 100644
index 000000000..68f3a3c00
--- /dev/null
+++ b/deps/npm/doc/cli/npm-adduser.md
@@ -0,0 +1,38 @@
+npm-adduser(1) -- Add a registry user account
+=============================================
+
+## SYNOPSIS
+
+ npm adduser
+
+## DESCRIPTION
+
+Create or verify a user named `<username>` in the npm registry, and
+save the credentials to the `.npmrc` file.
+
+The username, password, and email are read in from prompts.
+
+You may use this command to change your email address, but not username
+or password.
+
+To reset your password, go to <https://npmjs.org/forgot>
+
+You may use this command multiple times with the same user account to
+authorize on a new machine.
+
+## CONFIGURATION
+
+### registry
+
+Default: http://registry.npmjs.org/
+
+The base URL of the npm package registry.
+
+## SEE ALSO
+
+* npm-registry(7)
+* npm-config(1)
+* npm-config(7)
+* npmrc(5)
+* npm-owner(1)
+* npm-whoami(1)
diff --git a/deps/npm/doc/cli/npm-bin.md b/deps/npm/doc/cli/npm-bin.md
new file mode 100644
index 000000000..33863b457
--- /dev/null
+++ b/deps/npm/doc/cli/npm-bin.md
@@ -0,0 +1,19 @@
+npm-bin(1) -- Display npm bin folder
+====================================
+
+## SYNOPSIS
+
+ npm bin
+
+## DESCRIPTION
+
+Print the folder where npm will install executables.
+
+## SEE ALSO
+
+* npm-prefix(1)
+* npm-root(1)
+* npm-folders(5)
+* npm-config(1)
+* npm-config(7)
+* npmrc(5)
diff --git a/deps/npm/doc/cli/npm-bugs.md b/deps/npm/doc/cli/npm-bugs.md
new file mode 100644
index 000000000..002d9f755
--- /dev/null
+++ b/deps/npm/doc/cli/npm-bugs.md
@@ -0,0 +1,42 @@
+npm-bugs(1) -- Bugs for a package in a web browser maybe
+========================================================
+
+## SYNOPSIS
+
+ npm bugs <pkgname>
+ npm bugs (with no args in a package dir)
+
+## DESCRIPTION
+
+This command tries to guess at the likely location of a package's
+bug tracker URL, and then tries to open it using the `--browser`
+config param. If no package name is provided, it will search for
+a `package.json` in the current folder and use the `name` property.
+
+## CONFIGURATION
+
+### browser
+
+* Default: OS X: `"open"`, Windows: `"start"`, Others: `"xdg-open"`
+* Type: String
+
+The browser that is called by the `npm bugs` command to open websites.
+
+### registry
+
+* Default: https://registry.npmjs.org/
+* Type: url
+
+The base URL of the npm package registry.
+
+
+## SEE ALSO
+
+* npm-docs(1)
+* npm-view(1)
+* npm-publish(1)
+* npm-registry(7)
+* npm-config(1)
+* npm-config(7)
+* npmrc(5)
+* package.json(5)
diff --git a/deps/npm/doc/cli/npm-build.md b/deps/npm/doc/cli/npm-build.md
new file mode 100644
index 000000000..53813c1fd
--- /dev/null
+++ b/deps/npm/doc/cli/npm-build.md
@@ -0,0 +1,22 @@
+npm-build(1) -- Build a package
+===============================
+
+## SYNOPSIS
+
+ npm build <package-folder>
+
+* `<package-folder>`:
+ A folder containing a `package.json` file in its root.
+
+## DESCRIPTION
+
+This is the plumbing command called by `npm link` and `npm install`.
+
+It should generally not be called directly.
+
+## SEE ALSO
+
+* npm-install(1)
+* npm-link(1)
+* npm-scripts(7)
+* package.json(5)
diff --git a/deps/npm/doc/cli/bundle.md b/deps/npm/doc/cli/npm-bundle.md
index 69b3d83e4..69b3d83e4 100644
--- a/deps/npm/doc/cli/bundle.md
+++ b/deps/npm/doc/cli/npm-bundle.md
diff --git a/deps/npm/doc/cli/npm-cache.md b/deps/npm/doc/cli/npm-cache.md
new file mode 100644
index 000000000..af3cfac4d
--- /dev/null
+++ b/deps/npm/doc/cli/npm-cache.md
@@ -0,0 +1,72 @@
+npm-cache(1) -- Manipulates packages cache
+==========================================
+
+## SYNOPSIS
+
+ npm cache add <tarball file>
+ npm cache add <folder>
+ npm cache add <tarball url>
+ npm cache add <name>@<version>
+
+ npm cache ls [<path>]
+
+ npm cache clean [<path>]
+
+## DESCRIPTION
+
+Used to add, list, or clear the npm cache folder.
+
+* add:
+ Add the specified package to the local cache. This command is primarily
+ intended to be used internally by npm, but it can provide a way to
+ add data to the local installation cache explicitly.
+
+* ls:
+ Show the data in the cache. Argument is a path to show in the cache
+ folder. Works a bit like the `find` program, but limited by the
+ `depth` config.
+
+* clean:
+ Delete data out of the cache folder. If an argument is provided, then
+ it specifies a subpath to delete. If no argument is provided, then
+ the entire cache is cleared.
+
+## DETAILS
+
+npm stores cache data in the directory specified in `npm config get cache`.
+For each package that is added to the cache, three pieces of information are
+stored in `{cache}/{name}/{version}`:
+
+* .../package/:
+ A folder containing the package contents as they appear in the tarball.
+* .../package.json:
+ The package.json file, as npm sees it, with overlays applied and a _id attribute.
+* .../package.tgz:
+ The tarball for that version.
+
+Additionally, whenever a registry request is made, a `.cache.json` file
+is placed at the corresponding URI, to store the ETag and the requested
+data.
+
+Commands that make non-essential registry requests (such as `search` and
+`view`, or the completion scripts) generally specify a minimum timeout.
+If the `.cache.json` file is younger than the specified timeout, then
+they do not make an HTTP request to the registry.
+
+## CONFIGURATION
+
+### cache
+
+Default: `~/.npm` on Posix, or `%AppData%/npm-cache` on Windows.
+
+The root cache folder.
+
+## SEE ALSO
+
+* npm-folders(5)
+* npm-config(1)
+* npm-config(7)
+* npmrc(5)
+* npm-install(1)
+* npm-publish(1)
+* npm-pack(1)
diff --git a/deps/npm/doc/cli/npm-completion.md b/deps/npm/doc/cli/npm-completion.md
new file mode 100644
index 000000000..bec0f6086
--- /dev/null
+++ b/deps/npm/doc/cli/npm-completion.md
@@ -0,0 +1,29 @@
+npm-completion(1) -- Tab Completion for npm
+===========================================
+
+## SYNOPSIS
+
+ . <(npm completion)
+
+## DESCRIPTION
+
+Enables tab-completion in all npm commands.
+
+The synopsis above
+loads the completions into your current shell. Adding it to
+your ~/.bashrc or ~/.zshrc will make the completions available
+everywhere.
+
+You may of course also pipe the output of npm completion to a file
+such as `/usr/local/etc/bash_completion.d/npm` if you have a system
+that will read that file for you.
+
+When `COMP_CWORD`, `COMP_LINE`, and `COMP_POINT` are defined in the
+environment, `npm completion` acts in "plumbing mode", and outputs
+completions based on the arguments.
+
+## SEE ALSO
+
+* npm-developers(7)
+* npm-faq(7)
+* npm(1)
diff --git a/deps/npm/doc/cli/npm-config.md b/deps/npm/doc/cli/npm-config.md
new file mode 100644
index 000000000..1d978c9de
--- /dev/null
+++ b/deps/npm/doc/cli/npm-config.md
@@ -0,0 +1,71 @@
+npm-config(1) -- Manage the npm configuration files
+===================================================
+
+## SYNOPSIS
+
+ npm config set <key> <value> [--global]
+ npm config get <key>
+ npm config delete <key>
+ npm config list
+ npm config edit
+ npm c [set|get|delete|list]
+ npm get <key>
+ npm set <key> <value> [--global]
+
+## DESCRIPTION
+
+npm gets its config settings from the command line, environment
+variables, `npmrc` files, and in some cases, the `package.json` file.
+
+See npmrc(5) for more information about the npmrc files.
+
+See `npm-config(7)` for a more thorough discussion of the mechanisms
+involved.
+
+The `npm config` command can be used to update and edit the contents
+of the user and global npmrc files.
+
+## Sub-commands
+
+Config supports the following sub-commands:
+
+### set
+
+ npm config set key value
+
+Sets the config key to the value.
+
+If value is omitted, then it sets it to "true".
+
+### get
+
+ npm config get key
+
+Echo the config value to stdout.
+
+### list
+
+ npm config list
+
+Show all the config settings.
+
+### delete
+
+ npm config delete key
+
+Deletes the key from all configuration files.
+
+### edit
+
+ npm config edit
+
+Opens the config file in an editor. Use the `--global` flag to edit the
+global config.
+
+## SEE ALSO
+
+* npm-folders(5)
+* npm-config(7)
+* package.json(5)
+* npmrc(5)
+* npm(1)
diff --git a/deps/npm/doc/cli/npm-dedupe.md b/deps/npm/doc/cli/npm-dedupe.md
new file mode 100644
index 000000000..d3be01050
--- /dev/null
+++ b/deps/npm/doc/cli/npm-dedupe.md
@@ -0,0 +1,58 @@
+npm-dedupe(1) -- Reduce duplication
+===================================
+
+## SYNOPSIS
+
+ npm dedupe [package names...]
+ npm ddp [package names...]
+
+## DESCRIPTION
+
+Searches the local package tree and attempts to simplify the overall
+structure by moving dependencies further up the tree, where they can
+be more effectively shared by multiple dependent packages.
+
+For example, consider this dependency graph:
+
+ a
+ +-- b <-- depends on c@1.0.x
+ | `-- c@1.0.3
+ `-- d <-- depends on c@~1.0.9
+ `-- c@1.0.10
+
+In this case, `npm-dedupe(1)` will transform the tree to:
+
+ a
+ +-- b
+ +-- d
+ `-- c@1.0.10
+
+Because of the hierarchical nature of node's module lookup, b and d
+will both get their dependency met by the single c package at the root
+level of the tree.
+
+If a suitable version exists at the target location in the tree
+already, then it will be left untouched, but the other duplicates will
+be deleted.
+
+If no suitable version can be found, then a warning is printed, and
+nothing is done.
+
+If any arguments are supplied, then they are filters, and only the
+named packages will be touched.
+
+Note that this operation transforms the dependency tree, and may
+result in packages getting updated versions, perhaps from the npm
+registry.
+
+This feature is experimental, and may change in future versions.
+
+The `--tag` argument will apply to all of the affected dependencies. If a
+tag with the given name exists, the tagged version is preferred over newer
+versions.
+
+## SEE ALSO
+
+* npm-ls(1)
+* npm-update(1)
+* npm-install(1)
diff --git a/deps/npm/doc/cli/npm-deprecate.md b/deps/npm/doc/cli/npm-deprecate.md
new file mode 100644
index 000000000..e62579349
--- /dev/null
+++ b/deps/npm/doc/cli/npm-deprecate.md
@@ -0,0 +1,26 @@
+npm-deprecate(1) -- Deprecate a version of a package
+====================================================
+
+## SYNOPSIS
+
+ npm deprecate <name>[@<version>] <message>
+
+## DESCRIPTION
+
+This command will update the npm registry entry for a package, providing
+a deprecation warning to all who attempt to install it.
+
+It works on version ranges as well as specific versions, so you can do
+something like this:
+
+ npm deprecate my-thing@"< 0.2.3" "critical bug fixed in v0.2.3"
+
+Note that you must be the package owner to deprecate something. See the
+`owner` and `adduser` help topics.
+
+To un-deprecate a package, specify an empty string (`""`) for the `message` argument.
+
+## SEE ALSO
+
+* npm-publish(1)
+* npm-registry(7)
diff --git a/deps/npm/doc/cli/npm-docs.md b/deps/npm/doc/cli/npm-docs.md
new file mode 100644
index 000000000..5db3d9f7e
--- /dev/null
+++ b/deps/npm/doc/cli/npm-docs.md
@@ -0,0 +1,44 @@
+npm-docs(1) -- Docs for a package in a web browser maybe
+========================================================
+
+## SYNOPSIS
+
+ npm docs [<pkgname> [<pkgname> ...]]
+ npm docs (with no args in a package dir)
+ npm home [<pkgname> [<pkgname> ...]]
+ npm home (with no args in a package dir)
+
+## DESCRIPTION
+
+This command tries to guess at the likely location of a package's
+documentation URL, and then tries to open it using the `--browser`
+config param. You can pass multiple package names at once. If no
+package name is provided, it will search for a `package.json` in
+the current folder and use the `name` property.
+
+## CONFIGURATION
+
+### browser
+
+* Default: OS X: `"open"`, Windows: `"start"`, Others: `"xdg-open"`
+* Type: String
+
+The browser that is called by the `npm docs` command to open websites.
+
+### registry
+
+* Default: https://registry.npmjs.org/
+* Type: url
+
+The base URL of the npm package registry.
+
+
+## SEE ALSO
+
+* npm-view(1)
+* npm-publish(1)
+* npm-registry(7)
+* npm-config(1)
+* npm-config(7)
+* npmrc(5)
+* package.json(5)
diff --git a/deps/npm/doc/cli/npm-edit.md b/deps/npm/doc/cli/npm-edit.md
new file mode 100644
index 000000000..6a73317b8
--- /dev/null
+++ b/deps/npm/doc/cli/npm-edit.md
@@ -0,0 +1,37 @@
+npm-edit(1) -- Edit an installed package
+========================================
+
+## SYNOPSIS
+
+ npm edit <name>[@<version>]
+
+## DESCRIPTION
+
+Opens the package folder in the default editor (or whatever you've
+configured as the npm `editor` config -- see `npm-config(7)`.)
+
+After it has been edited, the package is rebuilt so as to pick up any
+changes in compiled packages.
+
+For instance, you can do `npm install connect` to install connect
+into your package, and then `npm edit connect` to make a few
+changes to your locally installed copy.
+
+## CONFIGURATION
+
+### editor
+
+* Default: `EDITOR` environment variable if set, or `"vi"` on Posix,
+ or `"notepad"` on Windows.
+* Type: path
+
+The command to run for `npm edit` or `npm config edit`.
+
+## SEE ALSO
+
+* npm-folders(5)
+* npm-explore(1)
+* npm-install(1)
+* npm-config(1)
+* npm-config(7)
+* npmrc(5)
diff --git a/deps/npm/doc/cli/npm-explore.md b/deps/npm/doc/cli/npm-explore.md
new file mode 100644
index 000000000..1c611211b
--- /dev/null
+++ b/deps/npm/doc/cli/npm-explore.md
@@ -0,0 +1,40 @@
+npm-explore(1) -- Browse an installed package
+=============================================
+
+## SYNOPSIS
+
+ npm explore <name>[@<version>] [ -- <cmd>]
+
+## DESCRIPTION
+
+Spawn a subshell in the directory of the installed package specified.
+
+If a command is specified, then it is run in the subshell, which then
+immediately terminates.
+
+This is particularly handy in the case of git submodules in the
+`node_modules` folder:
+
+ npm explore some-dependency -- git pull origin master
+
+Note that the package is *not* automatically rebuilt afterwards, so be
+sure to use `npm rebuild <pkg>` if you make any changes.
+
+## CONFIGURATION
+
+### shell
+
+* Default: SHELL environment variable, or "bash" on Posix, or "cmd" on
+ Windows
+* Type: path
+
+The shell to run for the `npm explore` command.
+
+## SEE ALSO
+
+* npm-submodule(1)
+* npm-folders(5)
+* npm-edit(1)
+* npm-rebuild(1)
+* npm-build(1)
+* npm-install(1)
diff --git a/deps/npm/doc/cli/npm-help-search.md b/deps/npm/doc/cli/npm-help-search.md
new file mode 100644
index 000000000..7bf7401ba
--- /dev/null
+++ b/deps/npm/doc/cli/npm-help-search.md
@@ -0,0 +1,35 @@
+npm-help-search(1) -- Search npm help documentation
+===================================================
+
+## SYNOPSIS
+
+ npm help-search some search terms
+
+## DESCRIPTION
+
+This command will search the npm markdown documentation files for the
+terms provided, and then list the results, sorted by relevance.
+
+If only one result is found, then it will show that help topic.
+
+If the argument to `npm help` is not a known help topic, then it will
+call `help-search`. It is rarely if ever necessary to call this
+command directly.
+
+## CONFIGURATION
+
+### long
+
+* Type: Boolean
+* Default false
+
+If true, the "long" flag will cause help-search to output context around
+where the terms were found in the documentation.
+
+If false, then help-search will just list out the help topics found.
+
+## SEE ALSO
+
+* npm(1)
+* npm-faq(7)
+* npm-help(1)
diff --git a/deps/npm/doc/cli/npm-help.md b/deps/npm/doc/cli/npm-help.md
new file mode 100644
index 000000000..7991b1d38
--- /dev/null
+++ b/deps/npm/doc/cli/npm-help.md
@@ -0,0 +1,40 @@
+npm-help(1) -- Get help on npm
+==============================
+
+## SYNOPSIS
+
+ npm help <topic>
+ npm help some search terms
+
+## DESCRIPTION
+
+If supplied a topic, then show the appropriate documentation page.
+
+If the topic does not exist, or if multiple terms are provided, then run
+the `help-search` command to find a match. Note that, if `help-search`
+finds a single subject, then it will run `help` on that topic, so unique
+matches are equivalent to specifying a topic name.
+
+## CONFIGURATION
+
+### viewer
+
+* Default: "man" on Posix, "browser" on Windows
+* Type: path
+
+The program to use to view help content.
+
+Set to `"browser"` to view html help content in the default web browser.
+
+## SEE ALSO
+
+* npm(1)
+* README
+* npm-faq(7)
+* npm-folders(5)
+* npm-config(1)
+* npm-config(7)
+* npmrc(5)
+* package.json(5)
+* npm-help-search(1)
+* npm-index(7)
diff --git a/deps/npm/doc/cli/npm-init.md b/deps/npm/doc/cli/npm-init.md
new file mode 100644
index 000000000..bd63a8879
--- /dev/null
+++ b/deps/npm/doc/cli/npm-init.md
@@ -0,0 +1,25 @@
+npm-init(1) -- Interactively create a package.json file
+=======================================================
+
+## SYNOPSIS
+
+ npm init
+
+## DESCRIPTION
+
+This will ask you a bunch of questions, and then write a package.json for you.
+
+It attempts to make reasonable guesses about what you want things to be set to,
+and then writes a package.json file with the options you've selected.
+
+If you already have a package.json file, it'll read that first, and default to
+the options in there.
+
+It is strictly additive, so it does not delete options from your package.json
+without a really good reason to do so.
+
+## SEE ALSO
+
+* <https://github.com/isaacs/init-package-json>
+* package.json(5)
+* npm-version(1)
diff --git a/deps/npm/doc/cli/npm-install.md b/deps/npm/doc/cli/npm-install.md
new file mode 100644
index 000000000..62eec2d8e
--- /dev/null
+++ b/deps/npm/doc/cli/npm-install.md
@@ -0,0 +1,259 @@
+npm-install(1) -- Install a package
+===================================
+
+## SYNOPSIS
+
+ npm install (with no args in a package dir)
+ npm install <tarball file>
+ npm install <tarball url>
+ npm install <folder>
+ npm install <name> [--save|--save-dev|--save-optional] [--save-exact]
+ npm install <name>@<tag>
+ npm install <name>@<version>
+ npm install <name>@<version range>
+ npm i (with any of the previous argument usage)
+
+## DESCRIPTION
+
+This command installs a package, and any packages that it depends on. If the
+package has a shrinkwrap file, the installation of dependencies will be driven
+by that. See npm-shrinkwrap(1).
+
+A `package` is:
+
+* a) a folder containing a program described by a package.json file
+* b) a gzipped tarball containing (a)
+* c) a url that resolves to (b)
+* d) a `<name>@<version>` that is published on the registry (see `npm-registry(7)`) with (c)
+* e) a `<name>@<tag>` that points to (d)
+* f) a `<name>` that has a "latest" tag satisfying (e)
+* g) a `<git remote url>` that resolves to (b)
+
+Even if you never publish your package, you can still get a lot of
+benefits of using npm if you just want to write a node program (a), and
+perhaps if you also want to be able to easily install it elsewhere
+after packing it up into a tarball (b).
+
+
+* `npm install` (in package directory, no arguments):
+
+ Install the dependencies in the local node_modules folder.
+
+ In global mode (ie, with `-g` or `--global` appended to the command),
+ it installs the current package context (ie, the current working
+ directory) as a global package.
+
+ By default, `npm install` will install all modules listed as
+ dependencies. With the `--production` flag,
+ npm will not install modules listed in `devDependencies`.
+
+* `npm install <folder>`:
+
+ Install a package that is sitting in a folder on the filesystem.
+
+* `npm install <tarball file>`:
+
+ Install a package that is sitting on the filesystem. Note: if you just want
+ to link a dev directory into your npm root, you can do this more easily by
+ using `npm link`.
+
+ Example:
+
+ npm install ./package.tgz
+
+* `npm install <tarball url>`:
+
+ Fetch the tarball url, and then install it. In order to distinguish between
+ this and other options, the argument must start with "http://" or "https://"
+
+ Example:
+
+ npm install https://github.com/indexzero/forever/tarball/v0.5.6
+
+* `npm install <name> [--save|--save-dev|--save-optional]`:
+
+ Do a `<name>@<tag>` install, where `<tag>` is the "tag" config. (See
+ `npm-config(7)`.)
+
+ In most cases, this will install the latest version
+ of the module published on npm.
+
+ Example:
+
+ npm install sax
+
+ `npm install` takes 3 exclusive, optional flags which save or update
+ the package version in your main package.json:
+
+ * `--save`: Package will appear in your `dependencies`.
+
+ * `--save-dev`: Package will appear in your `devDependencies`.
+
+ * `--save-optional`: Package will appear in your `optionalDependencies`.
+
+ When using any of the above options to save dependencies to your
+ package.json, there is an additional, optional flag:
+
+ * `--save-exact`: Saved dependencies will be configured with an
+ exact version rather than using npm's default semver range
+ operator.
+
+ Examples:
+
+ npm install sax --save
+ npm install node-tap --save-dev
+ npm install dtrace-provider --save-optional
+ npm install readable-stream --save --save-exact
+
+
+ **Note**: If there is a file or folder named `<name>` in the current
+ working directory, then it will try to install that, and only try to
+ fetch the package by name if it is not valid.
+
+* `npm install <name>@<tag>`:
+
+ Install the version of the package that is referenced by the specified tag.
+ If the tag does not exist in the registry data for that package, then this
+ will fail.
+
+ Example:
+
+ npm install sax@latest
+
+* `npm install <name>@<version>`:
+
+ Install the specified version of the package. This will fail if the version
+ has not been published to the registry.
+
+ Example:
+
+ npm install sax@0.1.1
+
+* `npm install <name>@<version range>`:
+
+ Install a version of the package matching the specified version range. This
+ will follow the same rules for resolving dependencies described in `package.json(5)`.
+
+ Note that most version ranges must be put in quotes so that your shell will
+ treat it as a single argument.
+
+ Example:
+
+ npm install sax@">=0.1.0 <0.2.0"
+
+* `npm install <git remote url>`:
+
+ Install a package by cloning a git remote url. The format of the git
+ url is:
+
+ <protocol>://[<user>@]<hostname><separator><path>[#<commit-ish>]
+
+ `<protocol>` is one of `git`, `git+ssh`, `git+http`, or
+ `git+https`. If no `<commit-ish>` is specified, then `master` is
+ used.
+
+ Examples:
+
+ git+ssh://git@github.com:npm/npm.git#v1.0.27
+ git+https://isaacs@github.com/npm/npm.git
+ git://github.com/npm/npm.git#v1.0.27
+
+You may combine multiple arguments, and even multiple types of arguments.
+For example:
+
+ npm install sax@">=0.1.0 <0.2.0" bench supervisor
+
+The `--tag` argument will apply to all of the specified install targets. If a
+tag with the given name exists, the tagged version is preferred over newer
+versions.
+
+The `--force` argument will force npm to fetch remote resources even if a
+local copy exists on disk.
+
+ npm install sax --force
+
+The `--global` argument will cause npm to install the package globally
+rather than locally. See `npm-folders(5)`.
+
+The `--link` argument will cause npm to link global installs into the
+local space in some cases.
+
+The `--no-bin-links` argument will prevent npm from creating symlinks for
+any binaries the package might contain.
+
+The `--no-optional` argument will prevent optional dependencies from
+being installed.
+
+The `--no-shrinkwrap` argument, which will ignore an available
+shrinkwrap file and use the package.json instead.
+
+The `--nodedir=/path/to/node/source` argument will allow npm to find the
+node source code so that npm can compile native modules.
+
+See `npm-config(7)`. Many of the configuration params have some
+effect on installation, since that's most of what npm does.
+
+## ALGORITHM
+
+To install a package, npm uses the following algorithm:
+
+ install(where, what, family, ancestors)
+ fetch what, unpack to <where>/node_modules/<what>
+ for each dep in what.dependencies
+ resolve dep to precise version
+ for each dep@version in what.dependencies
+ not in <where>/node_modules/<what>/node_modules/*
+ and not in <family>
+ add precise version deps to <family>
+ install(<where>/node_modules/<what>, dep, family)
+
+For this `package{dep}` structure: `A{B,C}, B{C}, C{D}`,
+this algorithm produces:
+
+ A
+ +-- B
+ `-- C
+ `-- D
+
+That is, the dependency from B to C is satisfied by the fact that A
+already caused C to be installed at a higher level.
+
+See npm-folders(5) for a more detailed description of the specific
+folder structures that npm creates.
+
+### Limitations of npm's Install Algorithm
+
+There are some very rare and pathological edge-cases where a cycle can
+cause npm to try to install a never-ending tree of packages. Here is
+the simplest case:
+
+ A -> B -> A' -> B' -> A -> B -> A' -> B' -> A -> ...
+
+where `A` is some version of a package, and `A'` is a different version
+of the same package. Because `B` depends on a different version of `A`
+than the one that is already in the tree, it must install a separate
+copy. The same is true of `A'`, which must install `B'`. Because `B'`
+depends on the original version of `A`, which has been overridden, the
+cycle falls into infinite regress.
+
+To avoid this situation, npm flat-out refuses to install any
+`name@version` that is already present anywhere in the tree of package
+folder ancestors. A more correct, but more complex, solution would be
+to symlink the existing version into the new location. If this ever
+affects a real use-case, it will be investigated.
+
+## SEE ALSO
+
+* npm-folders(5)
+* npm-update(1)
+* npm-link(1)
+* npm-rebuild(1)
+* npm-scripts(7)
+* npm-build(1)
+* npm-config(1)
+* npm-config(7)
+* npmrc(5)
+* npm-registry(7)
+* npm-tag(1)
+* npm-rm(1)
+* npm-shrinkwrap(1)
diff --git a/deps/npm/doc/cli/npm-link.md b/deps/npm/doc/cli/npm-link.md
new file mode 100644
index 000000000..c0fc01eb2
--- /dev/null
+++ b/deps/npm/doc/cli/npm-link.md
@@ -0,0 +1,63 @@
+npm-link(1) -- Symlink a package folder
+=======================================
+
+## SYNOPSIS
+
+ npm link (in package folder)
+ npm link <pkgname>
+ npm ln (with any of the previous argument usage)
+
+## DESCRIPTION
+
+Package linking is a two-step process.
+
+First, `npm link` in a package folder will create a globally-installed
+symbolic link from `prefix/package-name` to the current folder.
+
+Next, in some other location, `npm link package-name` will create a
+symlink from the local `node_modules` folder to the global symlink.
+
+Note that `package-name` is taken from `package.json`,
+not from directory name.
+
+When creating tarballs for `npm publish`, the linked packages are
+"snapshotted" to their current state by resolving the symbolic links.
+
+This is
+handy for installing your own stuff, so that you can work on it and test it
+iteratively without having to continually rebuild.
+
+For example:
+
+ cd ~/projects/node-redis # go into the package directory
+ npm link # creates global link
+ cd ~/projects/node-bloggy # go into some other package directory.
+ npm link redis # link-install the package
+
+Now, any changes to ~/projects/node-redis will be reflected in
+~/projects/node-bloggy/node_modules/redis/
+
+You may also shortcut the two steps in one. For example, to do the
+above use-case in a shorter way:
+
+ cd ~/projects/node-bloggy # go into the dir of your main project
+ npm link ../node-redis # link the dir of your dependency
+
+The second line is the equivalent of doing:
+
+ (cd ../node-redis; npm link)
+ npm link redis
+
+That is, it first creates a global link, and then links the global
+installation target into your project's `node_modules` folder.
+
+## SEE ALSO
+
+* npm-developers(7)
+* npm-faq(7)
+* package.json(5)
+* npm-install(1)
+* npm-folders(5)
+* npm-config(1)
+* npm-config(7)
+* npmrc(5)
diff --git a/deps/npm/doc/cli/npm-ls.md b/deps/npm/doc/cli/npm-ls.md
new file mode 100644
index 000000000..21f54264c
--- /dev/null
+++ b/deps/npm/doc/cli/npm-ls.md
@@ -0,0 +1,80 @@
+npm-ls(1) -- List installed packages
+======================================
+
+## SYNOPSIS
+
+ npm list [<pkg> ...]
+ npm ls [<pkg> ...]
+ npm la [<pkg> ...]
+ npm ll [<pkg> ...]
+
+## DESCRIPTION
+
+This command will print to stdout all the versions of packages that are
+installed, as well as their dependencies, in a tree-structure.
+
+Positional arguments are `name@version-range` identifiers, which will
+limit the results to only the paths to the packages named. Note that
+nested packages will *also* show the paths to the specified packages.
+For example, running `npm ls promzard` in npm's source tree will show:
+
+ npm@@VERSION@ /path/to/npm
+ └─┬ init-package-json@0.0.4
+ └── promzard@0.1.5
+
+It will print out extraneous, missing, and invalid packages.
+
+If a project specifies git urls for dependencies these are shown
+in parentheses after the name@version to make it easier for users to
+recognize potential forks of a project.
+
+When run as `ll` or `la`, it shows extended information by default.
+
+## CONFIGURATION
+
+### json
+
+* Default: false
+* Type: Boolean
+
+Show information in JSON format.
+
+### long
+
+* Default: false
+* Type: Boolean
+
+Show extended information.
+
+### parseable
+
+* Default: false
+* Type: Boolean
+
+Show parseable output instead of tree view.
+
+### global
+
+* Default: false
+* Type: Boolean
+
+List packages in the global install prefix instead of in the current
+project.
+
+### depth
+
+* Type: Int
+
+Max display depth of the dependency tree.
+
+## SEE ALSO
+
+* npm-config(1)
+* npm-config(7)
+* npmrc(5)
+* npm-folders(5)
+* npm-install(1)
+* npm-link(1)
+* npm-prune(1)
+* npm-outdated(1)
+* npm-update(1)
diff --git a/deps/npm/doc/cli/npm-outdated.md b/deps/npm/doc/cli/npm-outdated.md
new file mode 100644
index 000000000..aa2a7d5dd
--- /dev/null
+++ b/deps/npm/doc/cli/npm-outdated.md
@@ -0,0 +1,58 @@
+npm-outdated(1) -- Check for outdated packages
+==============================================
+
+## SYNOPSIS
+
+ npm outdated [<name> [<name> ...]]
+
+## DESCRIPTION
+
+This command will check the registry to see if any (or, specific) installed
+packages are currently outdated.
+
+The resulting field 'wanted' shows the latest version according to the
+version specified in the package.json, the field 'latest' the very latest
+version of the package.
+
+## CONFIGURATION
+
+### json
+
+* Default: false
+* Type: Boolean
+
+Show information in JSON format.
+
+### long
+
+* Default: false
+* Type: Boolean
+
+Show extended information.
+
+### parseable
+
+* Default: false
+* Type: Boolean
+
+Show parseable output instead of tree view.
+
+### global
+
+* Default: false
+* Type: Boolean
+
+Check packages in the global install prefix instead of in the current
+project.
+
+### depth
+
+* Type: Int
+
+Max depth for checking dependency tree.
+
+## SEE ALSO
+
+* npm-update(1)
+* npm-registry(7)
+* npm-folders(5)
diff --git a/deps/npm/doc/cli/npm-owner.md b/deps/npm/doc/cli/npm-owner.md
new file mode 100644
index 000000000..b400f7637
--- /dev/null
+++ b/deps/npm/doc/cli/npm-owner.md
@@ -0,0 +1,33 @@
+npm-owner(1) -- Manage package owners
+=====================================
+
+## SYNOPSIS
+
+ npm owner ls <package name>
+ npm owner add <user> <package name>
+ npm owner rm <user> <package name>
+
+## DESCRIPTION
+
+Manage ownership of published packages.
+
+* ls:
+ List all the users who have access to modify a package and push new versions.
+ Handy when you need to know who to bug for help.
+* add:
+ Add a new user as a maintainer of a package. This user is enabled to modify
+ metadata, publish new versions, and add other owners.
+* rm:
+ Remove a user from the package owner list. This immediately revokes their
+ privileges.
+
+Note that there is only one level of access. Either you can modify a package,
+or you can't. Future versions may contain more fine-grained access levels, but
+that is not implemented at this time.
+
+## SEE ALSO
+
+* npm-publish(1)
+* npm-registry(7)
+* npm-adduser(1)
+* npm-disputes(7)
diff --git a/deps/npm/doc/cli/npm-pack.md b/deps/npm/doc/cli/npm-pack.md
new file mode 100644
index 000000000..42bc1564b
--- /dev/null
+++ b/deps/npm/doc/cli/npm-pack.md
@@ -0,0 +1,27 @@
+npm-pack(1) -- Create a tarball from a package
+==============================================
+
+## SYNOPSIS
+
+ npm pack [<pkg> [<pkg> ...]]
+
+## DESCRIPTION
+
+For anything that's installable (that is, a package folder, tarball,
+tarball url, name@tag, name@version, or name), this command will fetch
+it to the cache, and then copy the tarball to the current working
+directory as `<name>-<version>.tgz`, and then write the filenames out to
+stdout.
+
+If the same package is specified multiple times, then the file will be
+overwritten the second time.
+
+If no arguments are supplied, then npm packs the current package folder.
+
+## SEE ALSO
+
+* npm-cache(1)
+* npm-publish(1)
+* npm-config(1)
+* npm-config(7)
+* npmrc(5)
diff --git a/deps/npm/doc/cli/npm-prefix.md b/deps/npm/doc/cli/npm-prefix.md
new file mode 100644
index 000000000..f99a401d1
--- /dev/null
+++ b/deps/npm/doc/cli/npm-prefix.md
@@ -0,0 +1,19 @@
+npm-prefix(1) -- Display prefix
+===============================
+
+## SYNOPSIS
+
+ npm prefix
+
+## DESCRIPTION
+
+Print the prefix to standard out.
+
+## SEE ALSO
+
+* npm-root(1)
+* npm-bin(1)
+* npm-folders(5)
+* npm-config(1)
+* npm-config(7)
+* npmrc(5)
diff --git a/deps/npm/doc/cli/npm-prune.md b/deps/npm/doc/cli/npm-prune.md
new file mode 100644
index 000000000..88c54754b
--- /dev/null
+++ b/deps/npm/doc/cli/npm-prune.md
@@ -0,0 +1,25 @@
+npm-prune(1) -- Remove extraneous packages
+==========================================
+
+## SYNOPSIS
+
+ npm prune [<name> [<name ...]]
+ npm prune [<name> [<name ...]] [--production]
+
+## DESCRIPTION
+
+This command removes "extraneous" packages. If a package name is
+provided, then only packages matching one of the supplied names are
+removed.
+
+Extraneous packages are packages that are not listed on the parent
+package's dependencies list.
+
+If the `--production` flag is specified, this command will remove the
+packages specified in your `devDependencies`.
+
+## SEE ALSO
+
+* npm-rm(1)
+* npm-folders(5)
+* npm-ls(1)
diff --git a/deps/npm/doc/cli/npm-publish.md b/deps/npm/doc/cli/npm-publish.md
new file mode 100644
index 000000000..338728e3e
--- /dev/null
+++ b/deps/npm/doc/cli/npm-publish.md
@@ -0,0 +1,39 @@
+npm-publish(1) -- Publish a package
+===================================
+
+
+## SYNOPSIS
+
+ npm publish <tarball> [--tag <tag>]
+ npm publish <folder> [--tag <tag>]
+
+## DESCRIPTION
+
+Publishes a package to the registry so that it can be installed by name.
+
+* `<folder>`:
+ A folder containing a package.json file
+
+* `<tarball>`:
+ A url or file path to a gzipped tar archive containing a single folder
+ with a package.json file inside.
+
+* `[--tag <tag>]`
+ Registers the published package with the given tag, such that `npm install
+ <name>@<tag>` will install this version. By default, `npm publish` updates
+ and `npm install` installs the `latest` tag.
+
+Fails if the package name and version combination already exists in
+the registry.
+
+Once a package is published with a given name and version, that
+specific name and version combination can never be used again, even if
+it is removed with npm-unpublish(1).
+
+## SEE ALSO
+
+* npm-registry(7)
+* npm-adduser(1)
+* npm-owner(1)
+* npm-deprecate(1)
+* npm-tag(1)
diff --git a/deps/npm/doc/cli/npm-rebuild.md b/deps/npm/doc/cli/npm-rebuild.md
new file mode 100644
index 000000000..728720868
--- /dev/null
+++ b/deps/npm/doc/cli/npm-rebuild.md
@@ -0,0 +1,21 @@
+npm-rebuild(1) -- Rebuild a package
+===================================
+
+## SYNOPSIS
+
+ npm rebuild [<name> [<name> ...]]
+ npm rb [<name> [<name> ...]]
+
+* `<name>`:
+ The package to rebuild
+
+## DESCRIPTION
+
+This command runs the `npm build` command on the matched folders. This is useful
+when you install a new version of node, and must recompile all your C++ addons with
+the new binary.
+
+## SEE ALSO
+
+* npm-build(1)
+* npm-install(1)
diff --git a/deps/npm/doc/cli/npm-repo.md b/deps/npm/doc/cli/npm-repo.md
new file mode 100644
index 000000000..6bc6f3b37
--- /dev/null
+++ b/deps/npm/doc/cli/npm-repo.md
@@ -0,0 +1,28 @@
+npm-repo(1) -- Open package repository page in the browser
+========================================================
+
+## SYNOPSIS
+
+ npm repo <pkgname>
+ npm repo (with no args in a package dir)
+
+## DESCRIPTION
+
+This command tries to guess at the likely location of a package's
+repository URL, and then tries to open it using the `--browser`
+config param. If no package name is provided, it will search for
+a `package.json` in the current folder and use the `name` property.
+
+## CONFIGURATION
+
+### browser
+
+* Default: OS X: `"open"`, Windows: `"start"`, Others: `"xdg-open"`
+* Type: String
+
+The browser that is called by the `npm repo` command to open websites.
+
+## SEE ALSO
+
+* npm-docs(1)
+* npm-config(1)
diff --git a/deps/npm/doc/cli/npm-restart.md b/deps/npm/doc/cli/npm-restart.md
new file mode 100644
index 000000000..4661d6b23
--- /dev/null
+++ b/deps/npm/doc/cli/npm-restart.md
@@ -0,0 +1,22 @@
+npm-restart(1) -- Start a package
+=================================
+
+## SYNOPSIS
+
+ npm restart <name>
+
+## DESCRIPTION
+
+This runs a package's "restart" script, if one was provided.
+Otherwise it runs package's "stop" script, if one was provided, and then
+the "start" script.
+
+If no version is specified, then it restarts the "active" version.
+
+## SEE ALSO
+
+* npm-run-script(1)
+* npm-scripts(7)
+* npm-test(1)
+* npm-start(1)
+* npm-stop(1)
diff --git a/deps/npm/doc/cli/npm-rm.md b/deps/npm/doc/cli/npm-rm.md
new file mode 100644
index 000000000..6691265ff
--- /dev/null
+++ b/deps/npm/doc/cli/npm-rm.md
@@ -0,0 +1,23 @@
+npm-rm(1) -- Remove a package
+=============================
+
+## SYNOPSIS
+
+ npm rm <name>
+ npm r <name>
+ npm uninstall <name>
+ npm un <name>
+
+## DESCRIPTION
+
+This uninstalls a package, completely removing everything npm installed
+on its behalf.
+
+## SEE ALSO
+
+* npm-prune(1)
+* npm-install(1)
+* npm-folders(5)
+* npm-config(1)
+* npm-config(7)
+* npmrc(5)
diff --git a/deps/npm/doc/cli/npm-root.md b/deps/npm/doc/cli/npm-root.md
new file mode 100644
index 000000000..ca99e1206
--- /dev/null
+++ b/deps/npm/doc/cli/npm-root.md
@@ -0,0 +1,19 @@
+npm-root(1) -- Display npm root
+===============================
+
+## SYNOPSIS
+
+ npm root
+
+## DESCRIPTION
+
+Print the effective `node_modules` folder to standard out.
+
+## SEE ALSO
+
+* npm-prefix(1)
+* npm-bin(1)
+* npm-folders(5)
+* npm-config(1)
+* npm-config(7)
+* npmrc(5)
diff --git a/deps/npm/doc/cli/npm-run-script.md b/deps/npm/doc/cli/npm-run-script.md
new file mode 100644
index 000000000..783fab30e
--- /dev/null
+++ b/deps/npm/doc/cli/npm-run-script.md
@@ -0,0 +1,24 @@
+npm-run-script(1) -- Run arbitrary package scripts
+==================================================
+
+## SYNOPSIS
+
+ npm run-script [<pkg>] [command]
+
+## DESCRIPTION
+
+This runs an arbitrary command from a package's `"scripts"` object.
+If no package name is provided, it will search for a `package.json`
+in the current folder and use its `"scripts"` object. If no `"command"`
+is provided, it will list the available top level scripts.
+
+It is used by the test, start, restart, and stop commands, but can be
+called directly, as well.
+
+## SEE ALSO
+
+* npm-scripts(7)
+* npm-test(1)
+* npm-start(1)
+* npm-restart(1)
+* npm-stop(1)
diff --git a/deps/npm/doc/cli/npm-search.md b/deps/npm/doc/cli/npm-search.md
new file mode 100644
index 000000000..4757ad320
--- /dev/null
+++ b/deps/npm/doc/cli/npm-search.md
@@ -0,0 +1,36 @@
+npm-search(1) -- Search for packages
+====================================
+
+## SYNOPSIS
+
+ npm search [--long] [search terms ...]
+ npm s [search terms ...]
+ npm se [search terms ...]
+
+## DESCRIPTION
+
+Search the registry for packages matching the search terms.
+
+If a term starts with `/`, then it's interpreted as a regular expression.
+A trailing `/` will be ignored in this case. (Note that many regular
+expression characters must be escaped or quoted in most shells.)
+
+## CONFIGURATION
+
+### long
+
+* Default: false
+* Type: Boolean
+
+Display full package descriptions and other long text across multiple
+lines. When disabled (default) search results are truncated to fit
+neatly on a single line. Modules with extremely long names will
+fall on multiple lines.
+
+## SEE ALSO
+
+* npm-registry(7)
+* npm-config(1)
+* npm-config(7)
+* npmrc(5)
+* npm-view(1)
diff --git a/deps/npm/doc/cli/npm-shrinkwrap.md b/deps/npm/doc/cli/npm-shrinkwrap.md
new file mode 100644
index 000000000..70f330be8
--- /dev/null
+++ b/deps/npm/doc/cli/npm-shrinkwrap.md
@@ -0,0 +1,185 @@
+npm-shrinkwrap(1) -- Lock down dependency versions
+=====================================================
+
+## SYNOPSIS
+
+ npm shrinkwrap
+
+## DESCRIPTION
+
+This command locks down the versions of a package's dependencies so
+that you can control exactly which versions of each dependency will be
+used when your package is installed. The "package.json" file is still
+required if you want to use "npm install".
+
+By default, "npm install" recursively installs the target's
+dependencies (as specified in package.json), choosing the latest
+available version that satisfies the dependency's semver pattern. In
+some situations, particularly when shipping software where each change
+is tightly managed, it's desirable to fully specify each version of
+each dependency recursively so that subsequent builds and deploys do
+not inadvertently pick up newer versions of a dependency that satisfy
+the semver pattern. Specifying specific semver patterns in each
+dependency's package.json would facilitate this, but that's not always
+possible or desirable, as when another author owns the npm package.
+It's also possible to check dependencies directly into source control,
+but that may be undesirable for other reasons.
+
+As an example, consider package A:
+
+ {
+ "name": "A",
+ "version": "0.1.0",
+ "dependencies": {
+ "B": "<0.1.0"
+ }
+ }
+
+package B:
+
+ {
+ "name": "B",
+ "version": "0.0.1",
+ "dependencies": {
+ "C": "<0.1.0"
+ }
+ }
+
+and package C:
+
+ {
+ "name": "C,
+ "version": "0.0.1"
+ }
+
+If these are the only versions of A, B, and C available in the
+registry, then a normal "npm install A" will install:
+
+ A@0.1.0
+ `-- B@0.0.1
+ `-- C@0.0.1
+
+However, if B@0.0.2 is published, then a fresh "npm install A" will
+install:
+
+ A@0.1.0
+ `-- B@0.0.2
+ `-- C@0.0.1
+
+assuming the new version did not modify B's dependencies. Of course,
+the new version of B could include a new version of C and any number
+of new dependencies. If such changes are undesirable, the author of A
+could specify a dependency on B@0.0.1. However, if A's author and B's
+author are not the same person, there's no way for A's author to say
+that he or she does not want to pull in newly published versions of C
+when B hasn't changed at all.
+
+In this case, A's author can run
+
+ npm shrinkwrap
+
+This generates npm-shrinkwrap.json, which will look something like this:
+
+ {
+ "name": "A",
+ "version": "0.1.0",
+ "dependencies": {
+ "B": {
+ "version": "0.0.1",
+ "dependencies": {
+ "C": {
+ "version": "0.1.0"
+ }
+ }
+ }
+ }
+ }
+
+The shrinkwrap command has locked down the dependencies based on
+what's currently installed in node_modules. When "npm install"
+installs a package with a npm-shrinkwrap.json file in the package
+root, the shrinkwrap file (rather than package.json files) completely
+drives the installation of that package and all of its dependencies
+(recursively). So now the author publishes A@0.1.0, and subsequent
+installs of this package will use B@0.0.1 and C@0.1.0, regardless the
+dependencies and versions listed in A's, B's, and C's package.json
+files.
+
+
+### Using shrinkwrapped packages
+
+Using a shrinkwrapped package is no different than using any other
+package: you can "npm install" it by hand, or add a dependency to your
+package.json file and "npm install" it.
+
+### Building shrinkwrapped packages
+
+To shrinkwrap an existing package:
+
+1. Run "npm install" in the package root to install the current
+ versions of all dependencies.
+2. Validate that the package works as expected with these versions.
+3. Run "npm shrinkwrap", add npm-shrinkwrap.json to git, and publish
+ your package.
+
+To add or update a dependency in a shrinkwrapped package:
+
+1. Run "npm install" in the package root to install the current
+ versions of all dependencies.
+2. Add or update dependencies. "npm install" each new or updated
+ package individually and then update package.json. Note that they
+ must be explicitly named in order to be installed: running `npm
+ install` with no arguments will merely reproduce the existing
+ shrinkwrap.
+3. Validate that the package works as expected with the new
+ dependencies.
+4. Run "npm shrinkwrap", commit the new npm-shrinkwrap.json, and
+ publish your package.
+
+You can use npm-outdated(1) to view dependencies with newer versions
+available.
+
+### Other Notes
+
+A shrinkwrap file must be consistent with the package's package.json
+file. "npm shrinkwrap" will fail if required dependencies are not
+already installed, since that would result in a shrinkwrap that
+wouldn't actually work. Similarly, the command will fail if there are
+extraneous packages (not referenced by package.json), since that would
+indicate that package.json is not correct.
+
+Since "npm shrinkwrap" is intended to lock down your dependencies for
+production use, `devDependencies` will not be included unless you
+explicitly set the `--dev` flag when you run `npm shrinkwrap`. If
+installed `devDependencies` are excluded, then npm will print a
+warning. If you want them to be installed with your module by
+default, please consider adding them to `dependencies` instead.
+
+If shrinkwrapped package A depends on shrinkwrapped package B, B's
+shrinkwrap will not be used as part of the installation of A. However,
+because A's shrinkwrap is constructed from a valid installation of B
+and recursively specifies all dependencies, the contents of B's
+shrinkwrap will implicitly be included in A's shrinkwrap.
+
+### Caveats
+
+Shrinkwrap files only lock down package versions, not actual package
+contents. While discouraged, a package author can republish an
+existing version of a package, causing shrinkwrapped packages using
+that version to pick up different code than they were before. If you
+want to avoid any risk that a byzantine author replaces a package
+you're using with code that breaks your application, you could modify
+the shrinkwrap file to use git URL references rather than version
+numbers so that npm always fetches all packages from git.
+
+If you wish to lock down the specific bytes included in a package, for
+example to have 100% confidence in being able to reproduce a
+deployment or build, then you ought to check your dependencies into
+source control, or pursue some other mechanism that can verify
+contents rather than versions.
+
+## SEE ALSO
+
+* npm-install(1)
+* package.json(5)
+* npm-ls(1)
diff --git a/deps/npm/doc/cli/star.md b/deps/npm/doc/cli/npm-star.md
index 5c076b3c3..5c076b3c3 100644
--- a/deps/npm/doc/cli/star.md
+++ b/deps/npm/doc/cli/npm-star.md
diff --git a/deps/npm/doc/cli/stars.md b/deps/npm/doc/cli/npm-stars.md
index 7c28f5b2a..7c28f5b2a 100644
--- a/deps/npm/doc/cli/stars.md
+++ b/deps/npm/doc/cli/npm-stars.md
diff --git a/deps/npm/doc/cli/npm-start.md b/deps/npm/doc/cli/npm-start.md
new file mode 100644
index 000000000..01347d2e4
--- /dev/null
+++ b/deps/npm/doc/cli/npm-start.md
@@ -0,0 +1,18 @@
+npm-start(1) -- Start a package
+===============================
+
+## SYNOPSIS
+
+ npm start <name>
+
+## DESCRIPTION
+
+This runs a package's "start" script, if one was provided.
+
+## SEE ALSO
+
+* npm-run-script(1)
+* npm-scripts(7)
+* npm-test(1)
+* npm-restart(1)
+* npm-stop(1)
diff --git a/deps/npm/doc/cli/npm-stop.md b/deps/npm/doc/cli/npm-stop.md
new file mode 100644
index 000000000..bda5cc8f4
--- /dev/null
+++ b/deps/npm/doc/cli/npm-stop.md
@@ -0,0 +1,18 @@
+npm-stop(1) -- Stop a package
+=============================
+
+## SYNOPSIS
+
+ npm stop <name>
+
+## DESCRIPTION
+
+This runs a package's "stop" script, if one was provided.
+
+## SEE ALSO
+
+* npm-run-script(1)
+* npm-scripts(7)
+* npm-test(1)
+* npm-start(1)
+* npm-restart(1)
diff --git a/deps/npm/doc/cli/npm-submodule.md b/deps/npm/doc/cli/npm-submodule.md
new file mode 100644
index 000000000..7f0fbfc9f
--- /dev/null
+++ b/deps/npm/doc/cli/npm-submodule.md
@@ -0,0 +1,28 @@
+npm-submodule(1) -- Add a package as a git submodule
+====================================================
+
+## SYNOPSIS
+
+ npm submodule <pkg>
+
+## DESCRIPTION
+
+If the specified package has a git repository url in its package.json
+description, then this command will add it as a git submodule at
+`node_modules/<pkg name>`.
+
+This is a convenience only. From then on, it's up to you to manage
+updates by using the appropriate git commands. npm will stubbornly
+refuse to update, modify, or remove anything with a `.git` subfolder
+in it.
+
+This command also does not install missing dependencies, if the package
+does not include them in its git repository. If `npm ls` reports that
+things are missing, you can either install, link, or submodule them yourself,
+or you can do `npm explore <pkgname> -- npm install` to install the
+dependencies into the submodule folder.
+
+## SEE ALSO
+
+* package.json(5)
+* git help submodule
diff --git a/deps/npm/doc/cli/npm-tag.md b/deps/npm/doc/cli/npm-tag.md
new file mode 100644
index 000000000..3e1d1051b
--- /dev/null
+++ b/deps/npm/doc/cli/npm-tag.md
@@ -0,0 +1,34 @@
+npm-tag(1) -- Tag a published version
+=====================================
+
+## SYNOPSIS
+
+ npm tag <name>@<version> [<tag>]
+
+## DESCRIPTION
+
+Tags the specified version of the package with the specified tag, or the
+`--tag` config if not specified.
+
+A tag can be used when installing packages as a reference to a version instead
+of using a specific version number:
+
+ npm install <name>@<tag>
+
+When installing dependencies, a preferred tagged version may be specified:
+
+ npm install --tag <tag>
+
+This also applies to `npm dedupe`.
+
+Publishing a package always sets the "latest" tag to the published version.
+
+## SEE ALSO
+
+* npm-publish(1)
+* npm-install(1)
+* npm-dedupe(1)
+* npm-registry(7)
+* npm-config(1)
+* npm-config(7)
+* npmrc(5)
diff --git a/deps/npm/doc/cli/npm-test.md b/deps/npm/doc/cli/npm-test.md
new file mode 100644
index 000000000..800f3ae10
--- /dev/null
+++ b/deps/npm/doc/cli/npm-test.md
@@ -0,0 +1,22 @@
+npm-test(1) -- Test a package
+=============================
+
+## SYNOPSIS
+
+ npm test <name>
+ npm tst <name>
+
+## DESCRIPTION
+
+This runs a package's "test" script, if one was provided.
+
+To run tests as a condition of installation, set the `npat` config to
+true.
+
+## SEE ALSO
+
+* npm-run-script(1)
+* npm-scripts(7)
+* npm-start(1)
+* npm-restart(1)
+* npm-stop(1)
diff --git a/deps/npm/doc/cli/npm-uninstall.md b/deps/npm/doc/cli/npm-uninstall.md
new file mode 100644
index 000000000..e24815bec
--- /dev/null
+++ b/deps/npm/doc/cli/npm-uninstall.md
@@ -0,0 +1,43 @@
+npm-rm(1) -- Remove a package
+=============================
+
+## SYNOPSIS
+
+ npm uninstall <name> [--save|--save-dev|--save-optional]
+ npm rm (with any of the previous argument usage)
+
+## DESCRIPTION
+
+This uninstalls a package, completely removing everything npm installed
+on its behalf.
+
+Example:
+
+ npm uninstall sax
+
+In global mode (ie, with `-g` or `--global` appended to the command),
+it uninstalls the current package context as a global package.
+
+`npm uninstall` takes 3 exclusive, optional flags which save or update
+the package version in your main package.json:
+
+* `--save`: Package will be removed from your `dependencies`.
+
+* `--save-dev`: Package will be removed from your `devDependencies`.
+
+* `--save-optional`: Package will be removed from your `optionalDependencies`.
+
+Examples:
+
+ npm uninstall sax --save
+ npm uninstall node-tap --save-dev
+ npm uninstall dtrace-provider --save-optional
+
+## SEE ALSO
+
+* npm-prune(1)
+* npm-install(1)
+* npm-folders(5)
+* npm-config(1)
+* npm-config(7)
+* npmrc(5)
diff --git a/deps/npm/doc/cli/npm-unpublish.md b/deps/npm/doc/cli/npm-unpublish.md
new file mode 100644
index 000000000..45026197e
--- /dev/null
+++ b/deps/npm/doc/cli/npm-unpublish.md
@@ -0,0 +1,36 @@
+npm-unpublish(1) -- Remove a package from the registry
+======================================================
+
+## SYNOPSIS
+
+ npm unpublish <name>[@<version>]
+
+## WARNING
+
+**It is generally considered bad behavior to remove versions of a library
+that others are depending on!**
+
+Consider using the `deprecate` command
+instead, if your intent is to encourage users to upgrade.
+
+There is plenty of room on the registry.
+
+## DESCRIPTION
+
+This removes a package version from the registry, deleting its
+entry and removing the tarball.
+
+If no version is specified, or if all versions are removed then
+the root package entry is removed from the registry entirely.
+
+Even if a package version is unpublished, that specific name and
+version combination can never be reused. In order to publish the
+package again, a new version number must be used.
+
+## SEE ALSO
+
+* npm-deprecate(1)
+* npm-publish(1)
+* npm-registry(7)
+* npm-adduser(1)
+* npm-owner(1)
diff --git a/deps/npm/doc/cli/npm-update.md b/deps/npm/doc/cli/npm-update.md
new file mode 100644
index 000000000..1ea6b6275
--- /dev/null
+++ b/deps/npm/doc/cli/npm-update.md
@@ -0,0 +1,24 @@
+npm-update(1) -- Update a package
+=================================
+
+## SYNOPSIS
+
+ npm update [-g] [<name> [<name> ...]]
+
+## DESCRIPTION
+
+This command will update all the packages listed to the latest version
+(specified by the `tag` config).
+
+It will also install missing packages.
+
+If the `-g` flag is specified, this command will update globally installed packages.
+If no package name is specified, all packages in the specified location (global or local) will be updated.
+
+## SEE ALSO
+
+* npm-install(1)
+* npm-outdated(1)
+* npm-registry(7)
+* npm-folders(5)
+* npm-ls(1)
diff --git a/deps/npm/doc/cli/npm-version.md b/deps/npm/doc/cli/npm-version.md
new file mode 100644
index 000000000..870bd4921
--- /dev/null
+++ b/deps/npm/doc/cli/npm-version.md
@@ -0,0 +1,45 @@
+npm-version(1) -- Bump a package version
+========================================
+
+## SYNOPSIS
+
+ npm version [<newversion> | major | minor | patch]
+
+## DESCRIPTION
+
+Run this in a package directory to bump the version and write the new
+data back to the package.json file.
+
+The `newversion` argument should be a valid semver string, *or* a valid
+second argument to semver.inc (one of "patch", "minor", or
+"major"). In the second case, the existing version will be incremented
+by 1 in the specified field.
+
+If run in a git repo, it will also create a version commit and tag, and
+fail if the repo is not clean.
+
+If supplied with `--message` (shorthand: `-m`) config option, npm will
+use it as a commit message when creating a version commit. If the
+`message` config contains `%s` then that will be replaced with the
+resulting version number. For example:
+
+ npm version patch -m "Upgrade to %s for reasons"
+
+If the `sign-git-tag` config is set, then the tag will be signed using
+the `-s` flag to git. Note that you must have a default GPG key set up
+in your git config for this to work properly. For example:
+
+ $ npm config set sign-git-tag true
+ $ npm version patch
+
+ You need a passphrase to unlock the secret key for
+ user: "isaacs (http://blog.izs.me/) <i@izs.me>"
+ 2048-bit RSA key, ID 6C481CF6, created 2010-08-31
+
+ Enter passphrase:
+
+## SEE ALSO
+
+* npm-init(1)
+* package.json(5)
+* semver(7)
diff --git a/deps/npm/doc/cli/npm-view.md b/deps/npm/doc/cli/npm-view.md
new file mode 100644
index 000000000..1d19fe88d
--- /dev/null
+++ b/deps/npm/doc/cli/npm-view.md
@@ -0,0 +1,90 @@
+npm-view(1) -- View registry info
+=================================
+
+## SYNOPSIS
+
+ npm view <name>[@<version>] [<field>[.<subfield>]...]
+ npm v <name>[@<version>] [<field>[.<subfield>]...]
+
+## DESCRIPTION
+
+This command shows data about a package and prints it to the stream
+referenced by the `outfd` config, which defaults to stdout.
+
+To show the package registry entry for the `connect` package, you can do
+this:
+
+ npm view connect
+
+The default version is "latest" if unspecified.
+
+Field names can be specified after the package descriptor.
+For example, to show the dependencies of the `ronn` package at version
+0.3.5, you could do the following:
+
+ npm view ronn@0.3.5 dependencies
+
+You can view child field by separating them with a period.
+To view the git repository URL for the latest version of npm, you could
+do this:
+
+ npm view npm repository.url
+
+This makes it easy to view information about a dependency with a bit of
+shell scripting. For example, to view all the data about the version of
+opts that ronn depends on, you can do this:
+
+ npm view opts@$(npm view ronn dependencies.opts)
+
+For fields that are arrays, requesting a non-numeric field will return
+all of the values from the objects in the list. For example, to get all
+the contributor names for the "express" project, you can do this:
+
+ npm view express contributors.email
+
+You may also use numeric indices in square braces to specifically select
+an item in an array field. To just get the email address of the first
+contributor in the list, you can do this:
+
+ npm view express contributors[0].email
+
+Multiple fields may be specified, and will be printed one after another.
+For exampls, to get all the contributor names and email addresses, you
+can do this:
+
+ npm view express contributors.name contributors.email
+
+"Person" fields are shown as a string if they would be shown as an
+object. So, for example, this will show the list of npm contributors in
+the shortened string format. (See `package.json(5)` for more on this.)
+
+ npm view npm contributors
+
+If a version range is provided, then data will be printed for every
+matching version of the package. This will show which version of jsdom
+was required by each matching version of yui3:
+
+ npm view yui3@'>0.5.4' dependencies.jsdom
+
+## OUTPUT
+
+If only a single string field for a single version is output, then it
+will not be colorized or quoted, so as to enable piping the output to
+another command. If the field is an object, it will be output as a JavaScript object literal.
+
+If the --json flag is given, the outputted fields will be JSON.
+
+If the version range matches multiple versions, than each printed value
+will be prefixed with the version it applies to.
+
+If multiple fields are requested, than each of them are prefixed with
+the field name.
+
+## SEE ALSO
+
+* npm-search(1)
+* npm-registry(7)
+* npm-config(1)
+* npm-config(7)
+* npmrc(5)
+* npm-docs(1)
diff --git a/deps/npm/doc/cli/npm-whoami.md b/deps/npm/doc/cli/npm-whoami.md
new file mode 100644
index 000000000..3ff8837ff
--- /dev/null
+++ b/deps/npm/doc/cli/npm-whoami.md
@@ -0,0 +1,17 @@
+npm-whoami(1) -- Display npm username
+=====================================
+
+## SYNOPSIS
+
+ npm whoami
+
+## DESCRIPTION
+
+Print the `username` config to standard output.
+
+## SEE ALSO
+
+* npm-config(1)
+* npm-config(7)
+* npmrc(5)
+* npm-adduser(1)
diff --git a/deps/npm/doc/cli/npm.md b/deps/npm/doc/cli/npm.md
index a325fdf2e..903aa1079 100644
--- a/deps/npm/doc/cli/npm.md
+++ b/deps/npm/doc/cli/npm.md
@@ -33,7 +33,7 @@ Use `npm ls` to show everything you've installed.
## DIRECTORIES
-See `npm-folders(1)` to learn about where npm puts stuff.
+See `npm-folders(5)` to learn about where npm puts stuff.
In particular, npm has two modes of operation:
@@ -54,7 +54,7 @@ If you're using npm to develop and publish your code, check out the
following help topics:
* json:
- Make a package.json file. See `npm-json(1)`.
+ Make a package.json file. See `package.json(5)`.
* link:
For linking your current working code into Node's path, so that you
don't have to reinstall every time you make a change. Use
@@ -95,14 +95,14 @@ npm is extremely configurable. It reads its configuration options from
npm's default configuration options are defined in
lib/utils/config-defs.js. These must not be changed.
-See `npm-config(1)` for much much more information.
+See `npm-config(7)` for much much more information.
## CONTRIBUTIONS
Patches welcome!
* code:
- Read through `npm-coding-style(1)` if you plan to submit code.
+ Read through `npm-coding-style(7)` if you plan to submit code.
You don't have to agree with it, but you do have to follow it.
* docs:
If you find an error in the documentation, edit the appropriate markdown
@@ -114,7 +114,7 @@ easily by doing `npm view npm contributors`.
If you would like to contribute, but don't know what to work on, check
the issues list or ask on the mailing list.
-* <http://github.com/isaacs/npm/issues>
+* <http://github.com/npm/npm/issues>
* <npm-@googlegroups.com>
## BUGS
@@ -122,7 +122,7 @@ the issues list or ask on the mailing list.
When you find issues, please report them:
* web:
- <http://github.com/isaacs/npm/issues>
+ <http://github.com/npm/npm/issues>
* email:
<npm-@googlegroups.com>
@@ -132,10 +132,6 @@ as expected. The `npm-debug.log` file is also helpful to provide.
You can also look for isaacs in #node.js on irc://irc.freenode.net. He
will no doubt tell you to put the output in a gist or email.
-## HISTORY
-
-See npm-changelog(1)
-
## AUTHOR
[Isaac Z. Schlueter](http://blog.izs.me/) ::
@@ -146,10 +142,12 @@ See npm-changelog(1)
## SEE ALSO
* npm-help(1)
-* npm-faq(1)
+* npm-faq(7)
* README
-* npm-json(1)
+* package.json(5)
* npm-install(1)
* npm-config(1)
-* npm-index(1)
+* npm-config(7)
+* npmrc(5)
+* npm-index(7)
* npm(3)
diff --git a/deps/npm/doc/cli/outdated.md b/deps/npm/doc/cli/outdated.md
deleted file mode 100644
index 78df4a8b3..000000000
--- a/deps/npm/doc/cli/outdated.md
+++ /dev/null
@@ -1,17 +0,0 @@
-npm-outdated(1) -- Check for outdated packages
-==============================================
-
-## SYNOPSIS
-
- npm outdated [<name> [<name> ...]]
-
-## DESCRIPTION
-
-This command will check the registry to see if any (or, specific) installed
-packages are currently outdated.
-
-## SEE ALSO
-
-* npm-update(1)
-* npm-registry(1)
-* npm-folders(1)
diff --git a/deps/npm/doc/cli/owner.md b/deps/npm/doc/cli/owner.md
deleted file mode 100644
index 902e083fc..000000000
--- a/deps/npm/doc/cli/owner.md
+++ /dev/null
@@ -1,33 +0,0 @@
-npm-owner(1) -- Manage package owners
-=====================================
-
-## SYNOPSIS
-
- npm owner ls <package name>
- npm owner add <user> <package name>
- npm owner rm <user> <package name>
-
-## DESCRIPTION
-
-Manage ownership of published packages.
-
-* ls:
- List all the users who have access to modify a package and push new versions.
- Handy when you need to know who to bug for help.
-* add:
- Add a new user as a maintainer of a package. This user is enabled to modify
- metadata, publish new versions, and add other owners.
-* rm:
- Remove a user from the package owner list. This immediately revokes their
- privileges.
-
-Note that there is only one level of access. Either you can modify a package,
-or you can't. Future versions may contain more fine-grained access levels, but
-that is not implemented at this time.
-
-## SEE ALSO
-
-* npm-publish(1)
-* npm-registry(1)
-* npm-adduser(1)
-* npm-disputes(1)
diff --git a/deps/npm/doc/cli/pack.md b/deps/npm/doc/cli/pack.md
deleted file mode 100644
index 98d8c81c5..000000000
--- a/deps/npm/doc/cli/pack.md
+++ /dev/null
@@ -1,25 +0,0 @@
-npm-pack(1) -- Create a tarball from a package
-==============================================
-
-## SYNOPSIS
-
- npm pack [<pkg> [<pkg> ...]]
-
-## DESCRIPTION
-
-For anything that's installable (that is, a package folder, tarball,
-tarball url, name@tag, name@version, or name), this command will fetch
-it to the cache, and then copy the tarball to the current working
-directory as `<name>-<version>.tgz`, and then write the filenames out to
-stdout.
-
-If the same package is specified multiple times, then the file will be
-overwritten the second time.
-
-If no arguments are supplied, then npm packs the current package folder.
-
-## SEE ALSO
-
-* npm-cache(1)
-* npm-publish(1)
-* npm-config(1)
diff --git a/deps/npm/doc/cli/prefix.md b/deps/npm/doc/cli/prefix.md
deleted file mode 100644
index f6247cab1..000000000
--- a/deps/npm/doc/cli/prefix.md
+++ /dev/null
@@ -1,17 +0,0 @@
-npm-prefix(1) -- Display prefix
-===============================
-
-## SYNOPSIS
-
- npm prefix
-
-## DESCRIPTION
-
-Print the prefix to standard out.
-
-## SEE ALSO
-
-* npm-root(1)
-* npm-bin(1)
-* npm-folders(1)
-* npm-config(1)
diff --git a/deps/npm/doc/cli/prune.md b/deps/npm/doc/cli/prune.md
deleted file mode 100644
index 8c4b957e6..000000000
--- a/deps/npm/doc/cli/prune.md
+++ /dev/null
@@ -1,21 +0,0 @@
-npm-prune(1) -- Remove extraneous packages
-==========================================
-
-## SYNOPSIS
-
- npm prune [<name> [<name ...]]
-
-## DESCRIPTION
-
-This command removes "extraneous" packages. If a package name is
-provided, then only packages matching one of the supplied names are
-removed.
-
-Extraneous packages are packages that are not listed on the parent
-package's dependencies list.
-
-## SEE ALSO
-
-* npm-rm(1)
-* npm-folders(1)
-* npm-list(1)
diff --git a/deps/npm/doc/cli/publish.md b/deps/npm/doc/cli/publish.md
deleted file mode 100644
index 621932f07..000000000
--- a/deps/npm/doc/cli/publish.md
+++ /dev/null
@@ -1,30 +0,0 @@
-npm-publish(1) -- Publish a package
-===================================
-
-
-## SYNOPSIS
-
- npm publish <tarball>
- npm publish <folder>
-
-## DESCRIPTION
-
-Publishes a package to the registry so that it can be installed by name.
-
-* `<folder>`:
- A folder containing a package.json file
-
-* `<tarball>`:
- A url or file path to a gzipped tar archive containing a single folder
- with a package.json file inside.
-
-Fails if the package name and version combination already exists in
-the registry. Overwrites when the "--force" flag is set.
-
-## SEE ALSO
-
-* npm-registry(1)
-* npm-adduser(1)
-* npm-owner(1)
-* npm-deprecate(1)
-* npm-tag(1)
diff --git a/deps/npm/doc/cli/rebuild.md b/deps/npm/doc/cli/rebuild.md
deleted file mode 100644
index 6985a7bdd..000000000
--- a/deps/npm/doc/cli/rebuild.md
+++ /dev/null
@@ -1,20 +0,0 @@
-npm-rebuild(1) -- Rebuild a package
-===================================
-
-## SYNOPSIS
-
- npm rebuild [<name> [<name> ...]]
-
-* `<name>`:
- The package to rebuild
-
-## DESCRIPTION
-
-This command runs the `npm build` command on the matched folders. This is useful
-when you install a new version of node, and must recompile all your C++ addons with
-the new binary.
-
-## SEE ALSO
-
-* npm-build(1)
-* npm-install(1)
diff --git a/deps/npm/doc/cli/registry.md b/deps/npm/doc/cli/registry.md
deleted file mode 100644
index 9173defef..000000000
--- a/deps/npm/doc/cli/registry.md
+++ /dev/null
@@ -1,91 +0,0 @@
-npm-registry(1) -- The JavaScript Package Registry
-==================================================
-
-## DESCRIPTION
-
-To resolve packages by name and version, npm talks to a registry website
-that implements the CommonJS Package Registry specification for reading
-package info.
-
-Additionally, npm's package registry implementation supports several
-write APIs as well, to allow for publishing packages and managing user
-account information.
-
-The official public npm registry is at <http://registry.npmjs.org/>. It
-is powered by a CouchDB database at
-<http://isaacs.iriscouch.com/registry>. The code for the couchapp is
-available at <http://github.com/isaacs/npmjs.org>. npm user accounts
-are CouchDB users, stored in the <http://isaacs.iriscouch.com/_users>
-database.
-
-The registry URL is supplied by the `registry` config parameter. See
-`npm-config(1)` for more on managing npm's configuration.
-
-## Can I run my own private registry?
-
-Yes!
-
-The easiest way is to replicate the couch database, and use the same (or
-similar) design doc to implement the APIs.
-
-If you set up continuous replication from the official CouchDB, and then
-set your internal CouchDB as the registry config, then you'll be able
-to read any published packages, in addition to your private ones, and by
-default will only publish internally. If you then want to publish a
-package for the whole world to see, you can simply override the
-`--registry` config for that command.
-
-## I don't want my package published in the official registry. It's private.
-
-Set `"private": true` in your package.json to prevent it from being
-published at all, or
-`"publishConfig":{"registry":"http://my-internal-registry.local"}`
-to force it to be published only to your internal registry.
-
-See `npm-json(1)` for more info on what goes in the package.json file.
-
-## Will you replicate from my registry into the public one?
-
-No. If you want things to be public, then publish them into the public
-registry using npm. What little security there is would be for nought
-otherwise.
-
-## Do I have to use couchdb to build a registry that npm can talk to?
-
-No, but it's way easier.
-
-## I published something elsewhere, and want to tell the npm registry about it.
-
-That is supported, but not using the npm client. You'll have to get
-your hands dirty and do some HTTP. The request looks something like
-this:
-
- PUT /my-foreign-package
- content-type:application/json
- accept:application/json
- authorization:Basic $base_64_encoded
-
- { "name":"my-foreign-package"
- , "maintainers":["owner","usernames"]
- , "description":"A package that is hosted elsewhere"
- , "keywords":["nih","my cheese smells the best"]
- , "url":"http://my-different-registry.com/blerg/my-local-package"
- }
-
-(Keywords and description are optional, but recommended. Name,
-maintainers, and url are required.)
-
-Then, when a user tries to install "my-foreign-package", it'll redirect
-to your registry. If that doesn't resolve to a valid package entry,
-then it'll fail, so please make sure that you understand the spec, and
-ask for help on the <npm-@googlegroups.com> mailing list.
-
-## Is there a website or something to see package docs and such?
-
-Yes, head over to <https://npmjs.org/>
-
-## SEE ALSO
-
-* npm-config(1)
-* npm-developers(1)
-* npm-disputes(1)
diff --git a/deps/npm/doc/cli/restart.md b/deps/npm/doc/cli/restart.md
deleted file mode 100644
index 6139dbeef..000000000
--- a/deps/npm/doc/cli/restart.md
+++ /dev/null
@@ -1,22 +0,0 @@
-npm-restart(1) -- Start a package
-=================================
-
-## SYNOPSIS
-
- npm restart <name>
-
-## DESCRIPTION
-
-This runs a package's "restart" script, if one was provided.
-Otherwise it runs package's "stop" script, if one was provided, and then
-the "start" script.
-
-If no version is specified, then it restarts the "active" version.
-
-## SEE ALSO
-
-* npm-run-script(1)
-* npm-scripts(1)
-* npm-test(1)
-* npm-start(1)
-* npm-stop(1)
diff --git a/deps/npm/doc/cli/rm.md b/deps/npm/doc/cli/rm.md
deleted file mode 100644
index f7f743fae..000000000
--- a/deps/npm/doc/cli/rm.md
+++ /dev/null
@@ -1,19 +0,0 @@
-npm-rm(1) -- Remove a package
-=============================
-
-## SYNOPSIS
-
- npm rm <name>
- npm uninstall <name>
-
-## DESCRIPTION
-
-This uninstalls a package, completely removing everything npm installed
-on its behalf.
-
-## SEE ALSO
-
-* npm-prune(1)
-* npm-install(1)
-* npm-folders(1)
-* npm-config(1)
diff --git a/deps/npm/doc/cli/root.md b/deps/npm/doc/cli/root.md
deleted file mode 100644
index 3e4199541..000000000
--- a/deps/npm/doc/cli/root.md
+++ /dev/null
@@ -1,17 +0,0 @@
-npm-root(1) -- Display npm root
-===============================
-
-## SYNOPSIS
-
- npm root
-
-## DESCRIPTION
-
-Print the effective `node_modules` folder to standard out.
-
-## SEE ALSO
-
-* npm-prefix(1)
-* npm-bin(1)
-* npm-folders(1)
-* npm-config(1)
diff --git a/deps/npm/doc/cli/run-script.md b/deps/npm/doc/cli/run-script.md
deleted file mode 100644
index 41ef5e787..000000000
--- a/deps/npm/doc/cli/run-script.md
+++ /dev/null
@@ -1,21 +0,0 @@
-npm-run-script(1) -- Run arbitrary package scripts
-==================================================
-
-## SYNOPSIS
-
- npm run-script <script> <name>
-
-## DESCRIPTION
-
-This runs an arbitrary command from a package's "scripts" object.
-
-It is used by the test, start, restart, and stop commands, but can be
-called directly, as well.
-
-## SEE ALSO
-
-* npm-scripts(1)
-* npm-test(1)
-* npm-start(1)
-* npm-restart(1)
-* npm-stop(1)
diff --git a/deps/npm/doc/cli/scripts.md b/deps/npm/doc/cli/scripts.md
deleted file mode 100644
index 0eba5f7b1..000000000
--- a/deps/npm/doc/cli/scripts.md
+++ /dev/null
@@ -1,241 +0,0 @@
-npm-scripts(1) -- How npm handles the "scripts" field
-=====================================================
-
-## DESCRIPTION
-
-npm supports the "scripts" member of the package.json script, for the
-following scripts:
-
-* prepublish:
- Run BEFORE the package is published. (Also run on local `npm
- install` without any arguments.)
-* publish, postpublish:
- Run AFTER the package is published.
-* preinstall:
- Run BEFORE the package is installed
-* install, postinstall:
- Run AFTER the package is installed.
-* preuninstall, uninstall:
- Run BEFORE the package is uninstalled.
-* postuninstall:
- Run AFTER the package is uninstalled.
-* preupdate:
- Run BEFORE the package is updated with the update command.
-* update, postupdate:
- Run AFTER the package is updated with the update command.
-* pretest, test, posttest:
- Run by the `npm test` command.
-* prestop, stop, poststop:
- Run by the `npm stop` command.
-* prestart, start, poststart:
- Run by the `npm start` command.
-* prerestart, restart, postrestart:
- Run by the `npm restart` command. Note: `npm restart` will run the
- stop and start scripts if no `restart` script is provided.
-
-Additionally, arbitrary scrips can be run by doing
-`npm run-script <stage> <pkg>`.
-
-## NOTE: INSTALL SCRIPTS ARE AN ANTIPATTERN
-
-**tl;dr** Don't use `install`. Use a `.gyp` file for compilation, and
-`prepublish` for anything else.
-
-You should almost never have to explicitly set a `preinstall` or
-`install` script. If you are doing this, please consider if there is
-another option.
-
-The only valid use of `install` or `preinstall` scripts is for
-compilation which must be done on the target architecture. In early
-versions of node, this was often done using the `node-waf` scripts, or
-a standalone `Makefile`, and early versions of npm required that it be
-explicitly set in package.json. This was not portable, and harder to
-do properly.
-
-In the current version of node, the standard way to do this is using a
-`.gyp` file. If you have a file with a `.gyp` extension in the root
-of your package, then npm will run the appropriate `node-gyp` commands
-automatically at install time. This is the only officially supported
-method for compiling binary addons, and does not require that you add
-anything to your package.json file.
-
-If you have to do other things before your package is used, in a way
-that is not dependent on the operating system or architecture of the
-target system, then use a `prepublish` script instead. This includes
-tasks such as:
-
-* Compile CoffeeScript source code into JavaScript.
-* Create minified versions of JavaScript source code.
-* Fetching remote resources that your package will use.
-
-The advantage of doing these things at `prepublish` time instead of
-`preinstall` or `install` time is that they can be done once, in a
-single place, and thus greatly reduce complexity and variability.
-Additionally, this means that:
-
-* You can depend on `coffee-script` as a `devDependency`, and thus
- your users don't need to have it installed.
-* You don't need to include the minifiers in your package, reducing
- the size for your users.
-* You don't need to rely on your users having `curl` or `wget` or
- other system tools on the target machines.
-
-## DEFAULT VALUES
-
-npm will default some script values based on package contents.
-
-* `"start": "node server.js"`:
-
- If there is a `server.js` file in the root of your package, then npm
- will default the `start` command to `node server.js`.
-
-* `"preinstall": "node-waf clean || true; node-waf configure build"`:
-
- If there is a `wscript` file in the root of your package, npm will
- default the `preinstall` command to compile using node-waf.
-
-## USER
-
-If npm was invoked with root privileges, then it will change the uid to
-the user account or uid specified by the `user` config, which defaults
-to `nobody`. Set the `unsafe-perm` flag to run scripts with root
-privileges.
-
-## ENVIRONMENT
-
-Package scripts run in an environment where many pieces of information are
-made available regarding the setup of npm and the current state of the
-process.
-
-
-### path
-
-If you depend on modules that define executable scripts, like test suites,
-then those executables will be added to the `PATH` for executing the scripts.
-So, if your package.json has this:
-
- { "name" : "foo"
- , "dependencies" : { "bar" : "0.1.x" }
- , "scripts": { "start" : "bar ./test" } }
-
-then you could run `npm start` to execute the `bar` script, which is exported
-into the `node_modules/.bin` directory on `npm install`.
-
-### package.json vars
-
-The package.json fields are tacked onto the `npm_package_` prefix. So, for
-instance, if you had `{"name":"foo", "version":"1.2.5"}` in your package.json
-file, then your package scripts would have the `npm_package_name` environment
-variable set to "foo", and the `npm_package_version` set to "1.2.5"
-
-### configuration
-
-Configuration parameters are put in the environment with the `npm_config_`
-prefix. For instance, you can view the effective `root` config by checking the
-`npm_config_root` environment variable.
-
-### Special: package.json "config" hash
-
-The package.json "config" keys are overwritten in the environment if
-there is a config param of `<name>[@<version>]:<key>`. For example, if
-the package.json has this:
-
- { "name" : "foo"
- , "config" : { "port" : "8080" }
- , "scripts" : { "start" : "node server.js" } }
-
-and the server.js is this:
-
- http.createServer(...).listen(process.env.npm_package_config_port)
-
-then the user could change the behavior by doing:
-
- npm config set foo:port 80
-
-### current lifecycle event
-
-Lastly, the `npm_lifecycle_event` environment variable is set to whichever
-stage of the cycle is being executed. So, you could have a single script used
-for different parts of the process which switches based on what's currently
-happening.
-
-
-Objects are flattened following this format, so if you had
-`{"scripts":{"install":"foo.js"}}` in your package.json, then you'd see this
-in the script:
-
- process.env.npm_package_scripts_install === "foo.js"
-
-## EXAMPLES
-
-For example, if your package.json contains this:
-
- { "scripts" :
- { "install" : "scripts/install.js"
- , "postinstall" : "scripts/install.js"
- , "uninstall" : "scripts/uninstall.js"
- }
- }
-
-then the `scripts/install.js` will be called for the install, post-install,
-stages of the lifecycle, and the `scripts/uninstall.js` would be
-called when the package is uninstalled. Since `scripts/install.js` is running
-for three different phases, it would be wise in this case to look at the
-`npm_lifecycle_event` environment variable.
-
-If you want to run a make command, you can do so. This works just fine:
-
- { "scripts" :
- { "preinstall" : "./configure"
- , "install" : "make && make install"
- , "test" : "make test"
- }
- }
-
-## EXITING
-
-Scripts are run by passing the line as a script argument to `sh`.
-
-If the script exits with a code other than 0, then this will abort the
-process.
-
-Note that these script files don't have to be nodejs or even javascript
-programs. They just have to be some kind of executable file.
-
-## HOOK SCRIPTS
-
-If you want to run a specific script at a specific lifecycle event for ALL
-packages, then you can use a hook script.
-
-Place an executable file at `node_modules/.hooks/{eventname}`, and it'll get
-run for all packages when they are going through that point in the package
-lifecycle for any packages installed in that root.
-
-Hook scripts are run exactly the same way as package.json scripts. That is,
-they are in a separate child process, with the env described above.
-
-## BEST PRACTICES
-
-* Don't exit with a non-zero error code unless you *really* mean it.
- Except for uninstall scripts, this will cause the npm action
- to fail, and potentially be rolled back. If the failure is minor or
- only will prevent some optional features, then it's better to just
- print a warning and exit successfully.
-* Try not to use scripts to do what npm can do for you. Read through
- `npm-json(1)` to see all the things that you can specify and enable
- by simply describing your package appropriately. In general, this will
- lead to a more robust and consistent state.
-* Inspect the env to determine where to put things. For instance, if
- the `npm_config_binroot` environ is set to `/home/user/bin`, then don't
- try to install executables into `/usr/local/bin`. The user probably
- set it up that way for a reason.
-* Don't prefix your script commands with "sudo". If root permissions are
- required for some reason, then it'll fail with that error, and the user
- will sudo the npm command in question.
-
-## SEE ALSO
-
-* npm-run-script(1)
-* npm-json(1)
-* npm-developers(1)
-* npm-install(1)
diff --git a/deps/npm/doc/cli/search.md b/deps/npm/doc/cli/search.md
deleted file mode 100644
index e9e408c67..000000000
--- a/deps/npm/doc/cli/search.md
+++ /dev/null
@@ -1,20 +0,0 @@
-npm-search(1) -- Search for packages
-====================================
-
-## SYNOPSIS
-
- npm search [search terms ...]
-
-## DESCRIPTION
-
-Search the registry for packages matching the search terms.
-
-If a term starts with `/`, then it's interpreted as a regular expression.
-A trailing `/` will be ignored in this case. (Note that many regular
-expression characters must be escaped or quoted in most shells.)
-
-## SEE ALSO
-
-* npm-registry(1)
-* npm-config(1)
-* npm-view(1)
diff --git a/deps/npm/doc/cli/semver.md b/deps/npm/doc/cli/semver.md
deleted file mode 100644
index 493dd7a1e..000000000
--- a/deps/npm/doc/cli/semver.md
+++ /dev/null
@@ -1,130 +0,0 @@
-npm-semver(1) -- The semantic versioner for npm
-===============================================
-
-## SYNOPSIS
-
-The npm semantic versioning utility.
-
-## DESCRIPTION
-
-As a node module:
-
- $ npm install semver
-
- semver.valid('1.2.3') // '1.2.3'
- semver.valid('a.b.c') // null
- semver.clean(' =v1.2.3 ') // '1.2.3'
- semver.satisfies('1.2.3', '1.x || >=2.5.0 || 5.0.0 - 7.2.3') // true
- semver.gt('1.2.3', '9.8.7') // false
- semver.lt('1.2.3', '9.8.7') // true
-
-As a command-line utility:
-
- $ npm install semver -g
- $ semver -h
-
- Usage: semver -v <version> [-r <range>]
- Test if version(s) satisfy the supplied range(s),
- and sort them.
-
- Multiple versions or ranges may be supplied.
-
- Program exits successfully if any valid version satisfies
- all supplied ranges, and prints all satisfying versions.
-
- If no versions are valid, or ranges are not satisfied,
- then exits failure.
-
- Versions are printed in ascending order, so supplying
- multiple versions to the utility will just sort them.
-
-## Versions
-
-A version is the following things, in this order:
-
-* a number (Major)
-* a period
-* a number (minor)
-* a period
-* a number (patch)
-* OPTIONAL: a hyphen, followed by a number (build)
-* OPTIONAL: a collection of pretty much any non-whitespace characters
- (tag)
-
-A leading `"="` or `"v"` character is stripped off and ignored.
-
-## Comparisons
-
-The ordering of versions is done using the following algorithm, given
-two versions and asked to find the greater of the two:
-
-* If the majors are numerically different, then take the one
- with a bigger major number. `2.3.4 > 1.3.4`
-* If the minors are numerically different, then take the one
- with the bigger minor number. `2.3.4 > 2.2.4`
-* If the patches are numerically different, then take the one with the
- bigger patch number. `2.3.4 > 2.3.3`
-* If only one of them has a build number, then take the one with the
- build number. `2.3.4-0 > 2.3.4`
-* If they both have build numbers, and the build numbers are numerically
- different, then take the one with the bigger build number.
- `2.3.4-10 > 2.3.4-9`
-* If only one of them has a tag, then take the one without the tag.
- `2.3.4 > 2.3.4-beta`
-* If they both have tags, then take the one with the lexicographically
- larger tag. `2.3.4-beta > 2.3.4-alpha`
-* At this point, they're equal.
-
-## Ranges
-
-The following range styles are supported:
-
-* `>1.2.3` Greater than a specific version.
-* `<1.2.3` Less than
-* `1.2.3 - 2.3.4` := `>=1.2.3 <=2.3.4`
-* `~1.2.3` := `>=1.2.3 <1.3.0`
-* `~1.2` := `>=1.2.0 <1.3.0`
-* `~1` := `>=1.0.0 <2.0.0`
-* `1.2.x` := `>=1.2.0 <1.3.0`
-* `1.x` := `>=1.0.0 <2.0.0`
-
-Ranges can be joined with either a space (which implies "and") or a
-`||` (which implies "or").
-
-## Functions
-
-* valid(v): Return the parsed version, or null if it's not valid.
-* inc(v, release): Return the version incremented by the release type
- (major, minor, patch, or build), or null if it's not valid.
-
-### Comparison
-
-* gt(v1, v2): `v1 > v2`
-* gte(v1, v2): `v1 >= v2`
-* lt(v1, v2): `v1 < v2`
-* lte(v1, v2): `v1 <= v2`
-* eq(v1, v2): `v1 == v2` This is true if they're logically equivalent,
- even if they're not the exact same string. You already know how to
- compare strings.
-* neq(v1, v2): `v1 != v2` The opposite of eq.
-* cmp(v1, comparator, v2): Pass in a comparison string, and it'll call
- the corresponding function above. `"==="` and `"!=="` do simple
- string comparison, but are included for completeness. Throws if an
- invalid comparison string is provided.
-* compare(v1, v2): Return 0 if v1 == v2, or 1 if v1 is greater, or -1 if
- v2 is greater. Sorts in ascending order if passed to Array.sort().
-* rcompare(v1, v2): The reverse of compare. Sorts an array of versions
- in descending order when passed to Array.sort().
-
-
-### Ranges
-
-* validRange(range): Return the valid range or null if it's not valid
-* satisfies(version, range): Return true if the version satisfies the
- range.
-* maxSatisfying(versions, range): Return the highest version in the list
- that satisfies the range, or null if none of them do.
-
-## SEE ALSO
-
-* npm-json(1)
diff --git a/deps/npm/doc/cli/shrinkwrap.md b/deps/npm/doc/cli/shrinkwrap.md
deleted file mode 100644
index f0b83d50d..000000000
--- a/deps/npm/doc/cli/shrinkwrap.md
+++ /dev/null
@@ -1,185 +0,0 @@
-npm-shrinkwrap(1) -- Lock down dependency versions
-=====================================================
-
-## SYNOPSIS
-
- npm shrinkwrap
-
-## DESCRIPTION
-
-This command locks down the versions of a package's dependencies so
-that you can control exactly which versions of each dependency will be
-used when your package is installed. The "package.json" file is still
-required if you want to use "npm install".
-
-By default, "npm install" recursively installs the target's
-dependencies (as specified in package.json), choosing the latest
-available version that satisfies the dependency's semver pattern. In
-some situations, particularly when shipping software where each change
-is tightly managed, it's desirable to fully specify each version of
-each dependency recursively so that subsequent builds and deploys do
-not inadvertently pick up newer versions of a dependency that satisfy
-the semver pattern. Specifying specific semver patterns in each
-dependency's package.json would facilitate this, but that's not always
-possible or desirable, as when another author owns the npm package.
-It's also possible to check dependencies directly into source control,
-but that may be undesirable for other reasons.
-
-As an example, consider package A:
-
- {
- "name": "A",
- "version": "0.1.0",
- "dependencies": {
- "B": "<0.1.0"
- }
- }
-
-package B:
-
- {
- "name": "B",
- "version": "0.0.1",
- "dependencies": {
- "C": "<0.1.0"
- }
- }
-
-and package C:
-
- {
- "name": "C,
- "version": "0.0.1"
- }
-
-If these are the only versions of A, B, and C available in the
-registry, then a normal "npm install A" will install:
-
- A@0.1.0
- `-- B@0.0.1
- `-- C@0.0.1
-
-However, if B@0.0.2 is published, then a fresh "npm install A" will
-install:
-
- A@0.1.0
- `-- B@0.0.2
- `-- C@0.0.1
-
-assuming the new version did not modify B's dependencies. Of course,
-the new version of B could include a new version of C and any number
-of new dependencies. If such changes are undesirable, the author of A
-could specify a dependency on B@0.0.1. However, if A's author and B's
-author are not the same person, there's no way for A's author to say
-that he or she does not want to pull in newly published versions of C
-when B hasn't changed at all.
-
-In this case, A's author can run
-
- npm shrinkwrap
-
-This generates npm-shrinkwrap.json, which will look something like this:
-
- {
- "name": "A",
- "version": "0.1.0",
- "dependencies": {
- "B": {
- "version": "0.0.1",
- "dependencies": {
- "C": {
- "version": "0.1.0"
- }
- }
- }
- }
- }
-
-The shrinkwrap command has locked down the dependencies based on
-what's currently installed in node_modules. When "npm install"
-installs a package with a npm-shrinkwrap.json file in the package
-root, the shrinkwrap file (rather than package.json files) completely
-drives the installation of that package and all of its dependencies
-(recursively). So now the author publishes A@0.1.0, and subsequent
-installs of this package will use B@0.0.1 and C@0.1.0, regardless the
-dependencies and versions listed in A's, B's, and C's package.json
-files.
-
-
-### Using shrinkwrapped packages
-
-Using a shrinkwrapped package is no different than using any other
-package: you can "npm install" it by hand, or add a dependency to your
-package.json file and "npm install" it.
-
-### Building shrinkwrapped packages
-
-To shrinkwrap an existing package:
-
-1. Run "npm install" in the package root to install the current
- versions of all dependencies.
-2. Validate that the package works as expected with these versions.
-3. Run "npm shrinkwrap", add npm-shrinkwrap.json to git, and publish
- your package.
-
-To add or update a dependency in a shrinkwrapped package:
-
-1. Run "npm install" in the package root to install the current
- versions of all dependencies.
-2. Add or update dependencies. "npm install" each new or updated
- package individually and then update package.json. Note that they
- must be explicitly named in order to be installed: running `npm
- install` with no arguments will merely reproduce the existing
- shrinkwrap.
-3. Validate that the package works as expected with the new
- dependencies.
-4. Run "npm shrinkwrap", commit the new npm-shrinkwrap.json, and
- publish your package.
-
-You can use npm-outdated(1) to view dependencies with newer versions
-available.
-
-### Other Notes
-
-A shrinkwrap file must be consistent with the package's package.json
-file. "npm shrinkwrap" will fail if required dependencies are not
-already installed, since that would result in a shrinkwrap that
-wouldn't actually work. Similarly, the command will fail if there are
-extraneous packages (not referenced by package.json), since that would
-indicate that package.json is not correct.
-
-Since "npm shrinkwrap" is intended to lock down your dependencies for
-production use, `devDependencies` will not be included unless you
-explicitly set the `--dev` flag when you run `npm shrinkwrap`. If
-installed `devDependencies` are excluded, then npm will print a
-warning. If you want them to be installed with your module by
-default, please consider adding them to `dependencies` instead.
-
-If shrinkwrapped package A depends on shrinkwrapped package B, B's
-shrinkwrap will not be used as part of the installation of A. However,
-because A's shrinkwrap is constructed from a valid installation of B
-and recursively specifies all dependencies, the contents of B's
-shrinkwrap will implicitly be included in A's shrinkwrap.
-
-### Caveats
-
-Shrinkwrap files only lock down package versions, not actual package
-contents. While discouraged, a package author can republish an
-existing version of a package, causing shrinkwrapped packages using
-that version to pick up different code than they were before. If you
-want to avoid any risk that a byzantine author replaces a package
-you're using with code that breaks your application, you could modify
-the shrinkwrap file to use git URL references rather than version
-numbers so that npm always fetches all packages from git.
-
-If you wish to lock down the specific bytes included in a package, for
-example to have 100% confidence in being able to reproduce a
-deployment or build, then you ought to check your dependencies into
-source control, or pursue some other mechanism that can verify
-contents rather than versions.
-
-## SEE ALSO
-
-* npm-install(1)
-* npm-json(1)
-* npm-list(1)
diff --git a/deps/npm/doc/cli/start.md b/deps/npm/doc/cli/start.md
deleted file mode 100644
index cc897bbc0..000000000
--- a/deps/npm/doc/cli/start.md
+++ /dev/null
@@ -1,18 +0,0 @@
-npm-start(1) -- Start a package
-===============================
-
-## SYNOPSIS
-
- npm start <name>
-
-## DESCRIPTION
-
-This runs a package's "start" script, if one was provided.
-
-## SEE ALSO
-
-* npm-run-script(1)
-* npm-scripts(1)
-* npm-test(1)
-* npm-restart(1)
-* npm-stop(1)
diff --git a/deps/npm/doc/cli/stop.md b/deps/npm/doc/cli/stop.md
deleted file mode 100644
index 1ab3e9975..000000000
--- a/deps/npm/doc/cli/stop.md
+++ /dev/null
@@ -1,18 +0,0 @@
-npm-stop(1) -- Stop a package
-=============================
-
-## SYNOPSIS
-
- npm stop <name>
-
-## DESCRIPTION
-
-This runs a package's "stop" script, if one was provided.
-
-## SEE ALSO
-
-* npm-run-script(1)
-* npm-scripts(1)
-* npm-test(1)
-* npm-start(1)
-* npm-restart(1)
diff --git a/deps/npm/doc/cli/submodule.md b/deps/npm/doc/cli/submodule.md
deleted file mode 100644
index 13ab1edd9..000000000
--- a/deps/npm/doc/cli/submodule.md
+++ /dev/null
@@ -1,28 +0,0 @@
-npm-submodule(1) -- Add a package as a git submodule
-====================================================
-
-## SYNOPSIS
-
- npm submodule <pkg>
-
-## DESCRIPTION
-
-If the specified package has a git repository url in its package.json
-description, then this command will add it as a git submodule at
-`node_modules/<pkg name>`.
-
-This is a convenience only. From then on, it's up to you to manage
-updates by using the appropriate git commands. npm will stubbornly
-refuse to update, modify, or remove anything with a `.git` subfolder
-in it.
-
-This command also does not install missing dependencies, if the package
-does not include them in its git repository. If `npm ls` reports that
-things are missing, you can either install, link, or submodule them yourself,
-or you can do `npm explore <pkgname> -- npm install` to install the
-dependencies into the submodule folder.
-
-## SEE ALSO
-
-* npm-json(1)
-* git help submodule
diff --git a/deps/npm/doc/cli/tag.md b/deps/npm/doc/cli/tag.md
deleted file mode 100644
index 2f1ca4373..000000000
--- a/deps/npm/doc/cli/tag.md
+++ /dev/null
@@ -1,17 +0,0 @@
-npm-tag(1) -- Tag a published version
-=====================================
-
-## SYNOPSIS
-
- npm tag <name>@<version> [<tag>]
-
-## DESCRIPTION
-
-Tags the specified version of the package with the specified tag, or the
-`--tag` config if not specified.
-
-## SEE ALSO
-
-* npm-publish(1)
-* npm-registry(1)
-* npm-config(1)
diff --git a/deps/npm/doc/cli/test.md b/deps/npm/doc/cli/test.md
deleted file mode 100644
index bc634efbf..000000000
--- a/deps/npm/doc/cli/test.md
+++ /dev/null
@@ -1,21 +0,0 @@
-npm-test(1) -- Test a package
-=============================
-
-## SYNOPSIS
-
- npm test <name>
-
-## DESCRIPTION
-
-This runs a package's "test" script, if one was provided.
-
-To run tests as a condition of installation, set the `npat` config to
-true.
-
-## SEE ALSO
-
-* npm-run-script(1)
-* npm-scripts(1)
-* npm-start(1)
-* npm-restart(1)
-* npm-stop(1)
diff --git a/deps/npm/doc/cli/uninstall.md b/deps/npm/doc/cli/uninstall.md
deleted file mode 100644
index f7f743fae..000000000
--- a/deps/npm/doc/cli/uninstall.md
+++ /dev/null
@@ -1,19 +0,0 @@
-npm-rm(1) -- Remove a package
-=============================
-
-## SYNOPSIS
-
- npm rm <name>
- npm uninstall <name>
-
-## DESCRIPTION
-
-This uninstalls a package, completely removing everything npm installed
-on its behalf.
-
-## SEE ALSO
-
-* npm-prune(1)
-* npm-install(1)
-* npm-folders(1)
-* npm-config(1)
diff --git a/deps/npm/doc/cli/unpublish.md b/deps/npm/doc/cli/unpublish.md
deleted file mode 100644
index 0f4446c4e..000000000
--- a/deps/npm/doc/cli/unpublish.md
+++ /dev/null
@@ -1,32 +0,0 @@
-npm-unpublish(1) -- Remove a package from the registry
-======================================================
-
-## SYNOPSIS
-
- npm unpublish <name>[@<version>]
-
-## WARNING
-
-**It is generally considered bad behavior to remove versions of a library
-that others are depending on!**
-
-Consider using the `deprecate` command
-instead, if your intent is to encourage users to upgrade.
-
-There is plenty of room on the registry.
-
-## DESCRIPTION
-
-This removes a package version from the registry, deleting its
-entry and removing the tarball.
-
-If no version is specified, or if all versions are removed then
-the root package entry is removed from the registry entirely.
-
-## SEE ALSO
-
-* npm-deprecate(1)
-* npm-publish(1)
-* npm-registry(1)
-* npm-adduser(1)
-* npm-owner(1)
diff --git a/deps/npm/doc/cli/update.md b/deps/npm/doc/cli/update.md
deleted file mode 100644
index 302e2efff..000000000
--- a/deps/npm/doc/cli/update.md
+++ /dev/null
@@ -1,24 +0,0 @@
-npm-update(1) -- Update a package
-=================================
-
-## SYNOPSIS
-
- npm update [-g] [<name> [<name> ...]]
-
-## DESCRIPTION
-
-This command will update all the packages listed to the latest version
-(specified by the `tag` config).
-
-It will also install missing packages.
-
-If the `-g` flag is specified, this command will update globally installed packages.
-If no package name is specified, all packages in the specified location (global or local) will be updated.
-
-## SEE ALSO
-
-* npm-install(1)
-* npm-outdated(1)
-* npm-registry(1)
-* npm-folders(1)
-* npm-list(1)
diff --git a/deps/npm/doc/cli/version.md b/deps/npm/doc/cli/version.md
deleted file mode 100644
index 74d938d6b..000000000
--- a/deps/npm/doc/cli/version.md
+++ /dev/null
@@ -1,45 +0,0 @@
-npm-version(1) -- Bump a package version
-========================================
-
-## SYNOPSIS
-
- npm version [<newversion> | major | minor | patch | build]
-
-## DESCRIPTION
-
-Run this in a package directory to bump the version and write the new
-data back to the package.json file.
-
-The `newversion` argument should be a valid semver string, *or* a valid
-second argument to semver.inc (one of "build", "patch", "minor", or
-"major"). In the second case, the existing version will be incremented
-by 1 in the specified field.
-
-If run in a git repo, it will also create a version commit and tag, and
-fail if the repo is not clean.
-
-If supplied with `--message` (shorthand: `-m`) config option, npm will
-use it as a commit message when creating a version commit. If the
-`message` config contains `%s` then that will be replaced with the
-resulting version number. For example:
-
- npm version patch -m "Upgrade to %s for reasons"
-
-If the `sign-git-tag` config is set, then the tag will be signed using
-the `-s` flag to git. Note that you must have a default GPG key set up
-in your git config for this to work properly. For example:
-
- $ npm config set sign-git-tag true
- $ npm version patch
-
- You need a passphrase to unlock the secret key for
- user: "isaacs (http://blog.izs.me/) <i@izs.me>"
- 2048-bit RSA key, ID 6C481CF6, created 2010-08-31
-
- Enter passphrase:
-
-## SEE ALSO
-
-* npm-init(1)
-* npm-json(1)
-* npm-semver(1)
diff --git a/deps/npm/doc/cli/view.md b/deps/npm/doc/cli/view.md
deleted file mode 100644
index 07836a5ef..000000000
--- a/deps/npm/doc/cli/view.md
+++ /dev/null
@@ -1,87 +0,0 @@
-npm-view(1) -- View registry info
-=================================
-
-## SYNOPSIS
-
- npm view <name>[@<version>] [<field>[.<subfield>]...]
-
-## DESCRIPTION
-
-This command shows data about a package and prints it to the stream
-referenced by the `outfd` config, which defaults to stdout.
-
-To show the package registry entry for the `connect` package, you can do
-this:
-
- npm view connect
-
-The default version is "latest" if unspecified.
-
-Field names can be specified after the package descriptor.
-For example, to show the dependencies of the `ronn` package at version
-0.3.5, you could do the following:
-
- npm view ronn@0.3.5 dependencies
-
-You can view child field by separating them with a period.
-To view the git repository URL for the latest version of npm, you could
-do this:
-
- npm view npm repository.url
-
-This makes it easy to view information about a dependency with a bit of
-shell scripting. For example, to view all the data about the version of
-opts that ronn depends on, you can do this:
-
- npm view opts@$(npm view ronn dependencies.opts)
-
-For fields that are arrays, requesting a non-numeric field will return
-all of the values from the objects in the list. For example, to get all
-the contributor names for the "express" project, you can do this:
-
- npm view express contributors.email
-
-You may also use numeric indices in square braces to specifically select
-an item in an array field. To just get the email address of the first
-contributor in the list, you can do this:
-
- npm view express contributors[0].email
-
-Multiple fields may be specified, and will be printed one after another.
-For exampls, to get all the contributor names and email addresses, you
-can do this:
-
- npm view express contributors.name contributors.email
-
-"Person" fields are shown as a string if they would be shown as an
-object. So, for example, this will show the list of npm contributors in
-the shortened string format. (See `npm-json(1)` for more on this.)
-
- npm view npm contributors
-
-If a version range is provided, then data will be printed for every
-matching version of the package. This will show which version of jsdom
-was required by each matching version of yui3:
-
- npm view yui3@'>0.5.4' dependencies.jsdom
-
-## OUTPUT
-
-If only a single string field for a single version is output, then it
-will not be colorized or quoted, so as to enable piping the output to
-another command. If the field is an object, it will be output as a JavaScript object literal.
-
-If the --json flag is given, the outputted fields will be JSON.
-
-If the version range matches multiple versions, than each printed value
-will be prefixed with the version it applies to.
-
-If multiple fields are requested, than each of them are prefixed with
-the field name.
-
-## SEE ALSO
-
-* npm-search(1)
-* npm-registry(1)
-* npm-config(1)
-* npm-docs(1)
diff --git a/deps/npm/doc/cli/whoami.md b/deps/npm/doc/cli/whoami.md
deleted file mode 100644
index 7c39b1624..000000000
--- a/deps/npm/doc/cli/whoami.md
+++ /dev/null
@@ -1,15 +0,0 @@
-npm-whoami(1) -- Display npm username
-=====================================
-
-## SYNOPSIS
-
- npm whoami
-
-## DESCRIPTION
-
-Print the `username` config to standard output.
-
-## SEE ALSO
-
-* npm-config(1)
-* npm-adduser(1)
diff --git a/deps/npm/doc/files/npm-folders.md b/deps/npm/doc/files/npm-folders.md
new file mode 100644
index 000000000..1b1485d5e
--- /dev/null
+++ b/deps/npm/doc/files/npm-folders.md
@@ -0,0 +1,211 @@
+npm-folders(5) -- Folder Structures Used by npm
+===============================================
+
+## DESCRIPTION
+
+npm puts various things on your computer. That's its job.
+
+This document will tell you what it puts where.
+
+### tl;dr
+
+* Local install (default): puts stuff in `./node_modules` of the current
+ package root.
+* Global install (with `-g`): puts stuff in /usr/local or wherever node
+ is installed.
+* Install it **locally** if you're going to `require()` it.
+* Install it **globally** if you're going to run it on the command line.
+* If you need both, then install it in both places, or use `npm link`.
+
+### prefix Configuration
+
+The `prefix` config defaults to the location where node is installed.
+On most systems, this is `/usr/local`, and most of the time is the same
+as node's `process.installPrefix`.
+
+On windows, this is the exact location of the node.exe binary. On Unix
+systems, it's one level up, since node is typically installed at
+`{prefix}/bin/node` rather than `{prefix}/node.exe`.
+
+When the `global` flag is set, npm installs things into this prefix.
+When it is not set, it uses the root of the current package, or the
+current working directory if not in a package already.
+
+### Node Modules
+
+Packages are dropped into the `node_modules` folder under the `prefix`.
+When installing locally, this means that you can
+`require("packagename")` to load its main module, or
+`require("packagename/lib/path/to/sub/module")` to load other modules.
+
+Global installs on Unix systems go to `{prefix}/lib/node_modules`.
+Global installs on Windows go to `{prefix}/node_modules` (that is, no
+`lib` folder.)
+
+If you wish to `require()` a package, then install it locally.
+
+### Executables
+
+When in global mode, executables are linked into `{prefix}/bin` on Unix,
+or directly into `{prefix}` on Windows.
+
+When in local mode, executables are linked into
+`./node_modules/.bin` so that they can be made available to scripts run
+through npm. (For example, so that a test runner will be in the path
+when you run `npm test`.)
+
+### Man Pages
+
+When in global mode, man pages are linked into `{prefix}/share/man`.
+
+When in local mode, man pages are not installed.
+
+Man pages are not installed on Windows systems.
+
+### Cache
+
+See `npm-cache(1)`. Cache files are stored in `~/.npm` on Posix, or
+`~/npm-cache` on Windows.
+
+This is controlled by the `cache` configuration param.
+
+### Temp Files
+
+Temporary files are stored by default in the folder specified by the
+`tmp` config, which defaults to the TMPDIR, TMP, or TEMP environment
+variables, or `/tmp` on Unix and `c:\windows\temp` on Windows.
+
+Temp files are given a unique folder under this root for each run of the
+program, and are deleted upon successful exit.
+
+## More Information
+
+When installing locally, npm first tries to find an appropriate
+`prefix` folder. This is so that `npm install foo@1.2.3` will install
+to the sensible root of your package, even if you happen to have `cd`ed
+into some other folder.
+
+Starting at the $PWD, npm will walk up the folder tree checking for a
+folder that contains either a `package.json` file, or a `node_modules`
+folder. If such a thing is found, then that is treated as the effective
+"current directory" for the purpose of running npm commands. (This
+behavior is inspired by and similar to git's .git-folder seeking
+logic when running git commands in a working dir.)
+
+If no package root is found, then the current folder is used.
+
+When you run `npm install foo@1.2.3`, then the package is loaded into
+the cache, and then unpacked into `./node_modules/foo`. Then, any of
+foo's dependencies are similarly unpacked into
+`./node_modules/foo/node_modules/...`.
+
+Any bin files are symlinked to `./node_modules/.bin/`, so that they may
+be found by npm scripts when necessary.
+
+### Global Installation
+
+If the `global` configuration is set to true, then npm will
+install packages "globally".
+
+For global installation, packages are installed roughly the same way,
+but using the folders described above.
+
+### Cycles, Conflicts, and Folder Parsimony
+
+Cycles are handled using the property of node's module system that it
+walks up the directories looking for `node_modules` folders. So, at every
+stage, if a package is already installed in an ancestor `node_modules`
+folder, then it is not installed at the current location.
+
+Consider the case above, where `foo -> bar -> baz`. Imagine if, in
+addition to that, baz depended on bar, so you'd have:
+`foo -> bar -> baz -> bar -> baz ...`. However, since the folder
+structure is: `foo/node_modules/bar/node_modules/baz`, there's no need to
+put another copy of bar into `.../baz/node_modules`, since when it calls
+require("bar"), it will get the copy that is installed in
+`foo/node_modules/bar`.
+
+This shortcut is only used if the exact same
+version would be installed in multiple nested `node_modules` folders. It
+is still possible to have `a/node_modules/b/node_modules/a` if the two
+"a" packages are different versions. However, without repeating the
+exact same package multiple times, an infinite regress will always be
+prevented.
+
+Another optimization can be made by installing dependencies at the
+highest level possible, below the localized "target" folder.
+
+#### Example
+
+Consider this dependency graph:
+
+ foo
+ +-- blerg@1.2.5
+ +-- bar@1.2.3
+ | +-- blerg@1.x (latest=1.3.7)
+ | +-- baz@2.x
+ | | `-- quux@3.x
+ | | `-- bar@1.2.3 (cycle)
+ | `-- asdf@*
+ `-- baz@1.2.3
+ `-- quux@3.x
+ `-- bar
+
+In this case, we might expect a folder structure like this:
+
+ foo
+ +-- node_modules
+ +-- blerg (1.2.5) <---[A]
+ +-- bar (1.2.3) <---[B]
+ | `-- node_modules
+ | +-- baz (2.0.2) <---[C]
+ | | `-- node_modules
+ | | `-- quux (3.2.0)
+ | `-- asdf (2.3.4)
+ `-- baz (1.2.3) <---[D]
+ `-- node_modules
+ `-- quux (3.2.0) <---[E]
+
+Since foo depends directly on `bar@1.2.3` and `baz@1.2.3`, those are
+installed in foo's `node_modules` folder.
+
+Even though the latest copy of blerg is 1.3.7, foo has a specific
+dependency on version 1.2.5. So, that gets installed at [A]. Since the
+parent installation of blerg satisfies bar's dependency on `blerg@1.x`,
+it does not install another copy under [B].
+
+Bar [B] also has dependencies on baz and asdf, so those are installed in
+bar's `node_modules` folder. Because it depends on `baz@2.x`, it cannot
+re-use the `baz@1.2.3` installed in the parent `node_modules` folder [D],
+and must install its own copy [C].
+
+Underneath bar, the `baz -> quux -> bar` dependency creates a cycle.
+However, because bar is already in quux's ancestry [B], it does not
+unpack another copy of bar into that folder.
+
+Underneath `foo -> baz` [D], quux's [E] folder tree is empty, because its
+dependency on bar is satisfied by the parent folder copy installed at [B].
+
+For a graphical breakdown of what is installed where, use `npm ls`.
+
+### Publishing
+
+Upon publishing, npm will look in the `node_modules` folder. If any of
+the items there are not in the `bundledDependencies` array, then they will
+not be included in the package tarball.
+
+This allows a package maintainer to install all of their dependencies
+(and dev dependencies) locally, but only re-publish those items that
+cannot be found elsewhere. See `package.json(5)` for more information.
+
+## SEE ALSO
+
+* npm-faq(7)
+* package.json(5)
+* npm-install(1)
+* npm-pack(1)
+* npm-cache(1)
+* npm-config(1)
+* npmrc(5)
+* npm-config(7)
+* npm-publish(1)
diff --git a/deps/npm/doc/files/npmrc.md b/deps/npm/doc/files/npmrc.md
new file mode 100644
index 000000000..e65f722fd
--- /dev/null
+++ b/deps/npm/doc/files/npmrc.md
@@ -0,0 +1,59 @@
+npmrc(5) -- The npm config files
+================================
+
+## DESCRIPTION
+
+npm gets its config settings from the command line, environment
+variables, and `npmrc` files.
+
+The `npm config` command can be used to update and edit the contents
+of the user and global npmrc files.
+
+For a list of available configuration options, see npm-config(7).
+
+## FILES
+
+The three relevant files are:
+
+* per-user config file (~/.npmrc)
+* global config file ($PREFIX/npmrc)
+* npm builtin config file (/path/to/npm/npmrc)
+
+All npm config files are an ini-formatted list of `key = value`
+parameters. Environment variables can be replaced using
+`${VARIABLE_NAME}`. For example:
+
+ prefix = ${HOME}/.npm-packages
+
+Each of these files is loaded, and config options are resolved in
+priority order. For example, a setting in the userconfig file would
+override the setting in the globalconfig file.
+
+### Per-user config file
+
+`$HOME/.npmrc` (or the `userconfig` param, if set in the environment
+or on the command line)
+
+### Global config file
+
+`$PREFIX/etc/npmrc` (or the `globalconfig` param, if set above):
+This file is an ini-file formatted list of `key = value` parameters.
+Environment variables can be replaced as above.
+
+### Built-in config file
+
+`path/to/npm/itself/npmrc`
+
+This is an unchangeable "builtin" configuration file that npm keeps
+consistent across updates. Set fields in here using the `./configure`
+script that comes with npm. This is primarily for distribution
+maintainers to override default configs in a standard and consistent
+manner.
+
+## SEE ALSO
+
+* npm-folders(5)
+* npm-config(1)
+* npm-config(7)
+* package.json(5)
+* npm(1)
diff --git a/deps/npm/doc/files/package.json.md b/deps/npm/doc/files/package.json.md
new file mode 100644
index 000000000..b9b05d4d4
--- /dev/null
+++ b/deps/npm/doc/files/package.json.md
@@ -0,0 +1,607 @@
+package.json(5) -- Specifics of npm's package.json handling
+===========================================================
+
+## DESCRIPTION
+
+This document is all you need to know about what's required in your package.json
+file. It must be actual JSON, not just a JavaScript object literal.
+
+A lot of the behavior described in this document is affected by the config
+settings described in `npm-config(7)`.
+
+## name
+
+The *most* important things in your package.json are the name and version fields.
+Those are actually required, and your package won't install without
+them. The name and version together form an identifier that is assumed
+to be completely unique. Changes to the package should come along with
+changes to the version.
+
+The name is what your thing is called. Some tips:
+
+* Don't put "js" or "node" in the name. It's assumed that it's js, since you're
+ writing a package.json file, and you can specify the engine using the "engines"
+ field. (See below.)
+* The name ends up being part of a URL, an argument on the command line, and a
+ folder name. Any name with non-url-safe characters will be rejected.
+ Also, it can't start with a dot or an underscore.
+* The name will probably be passed as an argument to require(), so it should
+ be something short, but also reasonably descriptive.
+* You may want to check the npm registry to see if there's something by that name
+ already, before you get too attached to it. http://registry.npmjs.org/
+
+## version
+
+The *most* important things in your package.json are the name and version fields.
+Those are actually required, and your package won't install without
+them. The name and version together form an identifier that is assumed
+to be completely unique. Changes to the package should come along with
+changes to the version.
+
+Version must be parseable by
+[node-semver](https://github.com/isaacs/node-semver), which is bundled
+with npm as a dependency. (`npm install semver` to use it yourself.)
+
+More on version numbers and ranges at semver(7).
+
+## description
+
+Put a description in it. It's a string. This helps people discover your
+package, as it's listed in `npm search`.
+
+## keywords
+
+Put keywords in it. It's an array of strings. This helps people
+discover your package as it's listed in `npm search`.
+
+## homepage
+
+The url to the project homepage.
+
+**NOTE**: This is *not* the same as "url". If you put a "url" field,
+then the registry will think it's a redirection to your package that has
+been published somewhere else, and spit at you.
+
+Literally. Spit. I'm so not kidding.
+
+## bugs
+
+The url to your project's issue tracker and / or the email address to which
+issues should be reported. These are helpful for people who encounter issues
+with your package.
+
+It should look like this:
+
+ { "url" : "http://github.com/owner/project/issues"
+ , "email" : "project@hostname.com"
+ }
+
+You can specify either one or both values. If you want to provide only a url,
+you can specify the value for "bugs" as a simple string instead of an object.
+
+If a url is provided, it will be used by the `npm bugs` command.
+
+## license
+
+You should specify a license for your package so that people know how they are
+permitted to use it, and any restrictions you're placing on it.
+
+The simplest way, assuming you're using a common license such as BSD-3-Clause
+or MIT, is to just specify the standard SPDX ID of the license you're using,
+like this:
+
+ { "license" : "BSD-3-Clause" }
+
+You can check [the full list of SPDX license IDs](https://spdx.org/licenses/).
+Ideally you should pick one that is
+[OSI](http://opensource.org/licenses/alphabetical) approved.
+
+It's also a good idea to include a LICENSE file at the top level in
+your package.
+
+## people fields: author, contributors
+
+The "author" is one person. "contributors" is an array of people. A "person"
+is an object with a "name" field and optionally "url" and "email", like this:
+
+ { "name" : "Barney Rubble"
+ , "email" : "b@rubble.com"
+ , "url" : "http://barnyrubble.tumblr.com/"
+ }
+
+Or you can shorten that all into a single string, and npm will parse it for you:
+
+ "Barney Rubble <b@rubble.com> (http://barnyrubble.tumblr.com/)
+
+Both email and url are optional either way.
+
+npm also sets a top-level "maintainers" field with your npm user info.
+
+## files
+
+The "files" field is an array of files to include in your project. If
+you name a folder in the array, then it will also include the files
+inside that folder. (Unless they would be ignored by another rule.)
+
+You can also provide a ".npmignore" file in the root of your package,
+which will keep files from being included, even if they would be picked
+up by the files array. The ".npmignore" file works just like a
+".gitignore".
+
+## main
+
+The main field is a module ID that is the primary entry point to your program.
+That is, if your package is named `foo`, and a user installs it, and then does
+`require("foo")`, then your main module's exports object will be returned.
+
+This should be a module ID relative to the root of your package folder.
+
+For most modules, it makes the most sense to have a main script and often not
+much else.
+
+## bin
+
+A lot of packages have one or more executable files that they'd like to
+install into the PATH. npm makes this pretty easy (in fact, it uses this
+feature to install the "npm" executable.)
+
+To use this, supply a `bin` field in your package.json which is a map of
+command name to local file name. On install, npm will symlink that file into
+`prefix/bin` for global installs, or `./node_modules/.bin/` for local
+installs.
+
+
+For example, npm has this:
+
+ { "bin" : { "npm" : "./cli.js" } }
+
+So, when you install npm, it'll create a symlink from the `cli.js` script to
+`/usr/local/bin/npm`.
+
+If you have a single executable, and its name should be the name
+of the package, then you can just supply it as a string. For example:
+
+ { "name": "my-program"
+ , "version": "1.2.5"
+ , "bin": "./path/to/program" }
+
+would be the same as this:
+
+ { "name": "my-program"
+ , "version": "1.2.5"
+ , "bin" : { "my-program" : "./path/to/program" } }
+
+## man
+
+Specify either a single file or an array of filenames to put in place for the
+`man` program to find.
+
+If only a single file is provided, then it's installed such that it is the
+result from `man <pkgname>`, regardless of its actual filename. For example:
+
+ { "name" : "foo"
+ , "version" : "1.2.3"
+ , "description" : "A packaged foo fooer for fooing foos"
+ , "main" : "foo.js"
+ , "man" : "./man/doc.1"
+ }
+
+would link the `./man/doc.1` file in such that it is the target for `man foo`
+
+If the filename doesn't start with the package name, then it's prefixed.
+So, this:
+
+ { "name" : "foo"
+ , "version" : "1.2.3"
+ , "description" : "A packaged foo fooer for fooing foos"
+ , "main" : "foo.js"
+ , "man" : [ "./man/foo.1", "./man/bar.1" ]
+ }
+
+will create files to do `man foo` and `man foo-bar`.
+
+Man files must end with a number, and optionally a `.gz` suffix if they are
+compressed. The number dictates which man section the file is installed into.
+
+ { "name" : "foo"
+ , "version" : "1.2.3"
+ , "description" : "A packaged foo fooer for fooing foos"
+ , "main" : "foo.js"
+ , "man" : [ "./man/foo.1", "./man/foo.2" ]
+ }
+
+will create entries for `man foo` and `man 2 foo`
+
+## directories
+
+The CommonJS [Packages](http://wiki.commonjs.org/wiki/Packages/1.0) spec details a
+few ways that you can indicate the structure of your package using a `directories`
+hash. If you look at [npm's package.json](http://registry.npmjs.org/npm/latest),
+you'll see that it has directories for doc, lib, and man.
+
+In the future, this information may be used in other creative ways.
+
+### directories.lib
+
+Tell people where the bulk of your library is. Nothing special is done
+with the lib folder in any way, but it's useful meta info.
+
+### directories.bin
+
+If you specify a "bin" directory, then all the files in that folder will
+be used as the "bin" hash.
+
+If you have a "bin" hash already, then this has no effect.
+
+### directories.man
+
+A folder that is full of man pages. Sugar to generate a "man" array by
+walking the folder.
+
+### directories.doc
+
+Put markdown files in here. Eventually, these will be displayed nicely,
+maybe, someday.
+
+### directories.example
+
+Put example scripts in here. Someday, it might be exposed in some clever way.
+
+## repository
+
+Specify the place where your code lives. This is helpful for people who
+want to contribute. If the git repo is on github, then the `npm docs`
+command will be able to find you.
+
+Do it like this:
+
+ "repository" :
+ { "type" : "git"
+ , "url" : "http://github.com/npm/npm.git"
+ }
+
+ "repository" :
+ { "type" : "svn"
+ , "url" : "http://v8.googlecode.com/svn/trunk/"
+ }
+
+The URL should be a publicly available (perhaps read-only) url that can be handed
+directly to a VCS program without any modification. It should not be a url to an
+html project page that you put in your browser. It's for computers.
+
+## scripts
+
+The "scripts" member is an object hash of script commands that are run
+at various times in the lifecycle of your package. The key is the lifecycle
+event, and the value is the command to run at that point.
+
+See `npm-scripts(7)` to find out more about writing package scripts.
+
+## config
+
+A "config" hash can be used to set configuration
+parameters used in package scripts that persist across upgrades. For
+instance, if a package had the following:
+
+ { "name" : "foo"
+ , "config" : { "port" : "8080" } }
+
+and then had a "start" command that then referenced the
+`npm_package_config_port` environment variable, then the user could
+override that by doing `npm config set foo:port 8001`.
+
+See `npm-config(7)` and `npm-scripts(7)` for more on package
+configs.
+
+## dependencies
+
+Dependencies are specified with a simple hash of package name to
+version range. The version range is a string which has one or more
+space-separated descriptors. Dependencies can also be identified with
+a tarball or git URL.
+
+**Please do not put test harnesses or transpilers in your
+`dependencies` hash.** See `devDependencies`, below.
+
+See semver(7) for more details about specifying version ranges.
+
+* `version` Must match `version` exactly
+* `>version` Must be greater than `version`
+* `>=version` etc
+* `<version`
+* `<=version`
+* `~version` "Approximately equivalent to version" See semver(7)
+* `^version` "Compatible with version" See semver(7)
+* `1.2.x` 1.2.0, 1.2.1, etc., but not 1.3.0
+* `http://...` See 'URLs as Dependencies' below
+* `*` Matches any version
+* `""` (just an empty string) Same as `*`
+* `version1 - version2` Same as `>=version1 <=version2`.
+* `range1 || range2` Passes if either range1 or range2 are satisfied.
+* `git...` See 'Git URLs as Dependencies' below
+* `user/repo` See 'GitHub URLs' below
+
+For example, these are all valid:
+
+ { "dependencies" :
+ { "foo" : "1.0.0 - 2.9999.9999"
+ , "bar" : ">=1.0.2 <2.1.2"
+ , "baz" : ">1.0.2 <=2.3.4"
+ , "boo" : "2.0.1"
+ , "qux" : "<1.0.0 || >=2.3.1 <2.4.5 || >=2.5.2 <3.0.0"
+ , "asd" : "http://asdf.com/asdf.tar.gz"
+ , "til" : "~1.2"
+ , "elf" : "~1.2.3"
+ , "two" : "2.x"
+ , "thr" : "3.3.x"
+ }
+ }
+
+### URLs as Dependencies
+
+You may specify a tarball URL in place of a version range.
+
+This tarball will be downloaded and installed locally to your package at
+install time.
+
+### Git URLs as Dependencies
+
+Git urls can be of the form:
+
+ git://github.com/user/project.git#commit-ish
+ git+ssh://user@hostname:project.git#commit-ish
+ git+ssh://user@hostname/project.git#commit-ish
+ git+http://user@hostname/project/blah.git#commit-ish
+ git+https://user@hostname/project/blah.git#commit-ish
+
+The `commit-ish` can be any tag, sha, or branch which can be supplied as
+an argument to `git checkout`. The default is `master`.
+
+## GitHub URLs
+
+As of version 1.1.65, you can refer to GitHub urls as just "foo": "user/foo-project". For example:
+
+ {
+ "name": "foo",
+ "version": "0.0.0",
+ "dependencies": {
+ "express": "visionmedia/express"
+ }
+ }
+
+## devDependencies
+
+If someone is planning on downloading and using your module in their
+program, then they probably don't want or need to download and build
+the external test or documentation framework that you use.
+
+In this case, it's best to list these additional items in a
+`devDependencies` hash.
+
+These things will be installed when doing `npm link` or `npm install`
+from the root of a package, and can be managed like any other npm
+configuration param. See `npm-config(7)` for more on the topic.
+
+For build steps that are not platform-specific, such as compiling
+CoffeeScript or other languages to JavaScript, use the `prepublish`
+script to do this, and make the required package a devDependency.
+
+For example:
+
+ { "name": "ethopia-waza",
+ "description": "a delightfully fruity coffee varietal",
+ "version": "1.2.3",
+ "devDependencies": {
+ "coffee-script": "~1.6.3"
+ },
+ "scripts": {
+ "prepublish": "coffee -o lib/ -c src/waza.coffee"
+ },
+ "main": "lib/waza.js"
+ }
+
+The `prepublish` script will be run before publishing, so that users
+can consume the functionality without requiring them to compile it
+themselves. In dev mode (ie, locally running `npm install`), it'll
+run this script as well, so that you can test it easily.
+
+## peerDependencies
+
+In some cases, you want to express the compatibility of your package with an
+host tool or library, while not necessarily doing a `require` of this host.
+This is usually refered to as a *plugin*. Notably, your module may be exposing
+a specific interface, expected and specified by the host documentation.
+
+For example:
+
+ {
+ "name": "tea-latte",
+ "version": "1.3.5"
+ "peerDependencies": {
+ "tea": "2.x"
+ }
+ }
+
+This ensures your package `tea-latte` can be installed *along* with the second
+major version of the host package `tea` only. The host package is automatically
+installed if needed. `npm install tea-latte` could possibly yield the following
+dependency graph:
+
+ ├── tea-latte@1.3.5
+ └── tea@2.2.0
+
+Trying to install another plugin with a conflicting requirement will cause an
+error. For this reason, make sure your plugin requirement is as broad as
+possible, and not to lock it down to specific patch versions.
+
+Assuming the host complies with [semver](http://semver.org/), only changes in
+the host package's major version will break your plugin. Thus, if you've worked
+with every 1.x version of the host package, use `"^1.0"` or `"1.x"` to express
+this. If you depend on features introduced in 1.5.2, use `">= 1.5.2 < 2"`.
+
+## bundledDependencies
+
+Array of package names that will be bundled when publishing the package.
+
+If this is spelled `"bundleDependencies"`, then that is also honorable.
+
+## optionalDependencies
+
+If a dependency can be used, but you would like npm to proceed if it
+cannot be found or fails to install, then you may put it in the
+`optionalDependencies` hash. This is a map of package name to version
+or url, just like the `dependencies` hash. The difference is that
+failure is tolerated.
+
+It is still your program's responsibility to handle the lack of the
+dependency. For example, something like this:
+
+ try {
+ var foo = require('foo')
+ var fooVersion = require('foo/package.json').version
+ } catch (er) {
+ foo = null
+ }
+ if ( notGoodFooVersion(fooVersion) ) {
+ foo = null
+ }
+
+ // .. then later in your program ..
+
+ if (foo) {
+ foo.doFooThings()
+ }
+
+Entries in `optionalDependencies` will override entries of the same name in
+`dependencies`, so it's usually best to only put in one place.
+
+## engines
+
+You can specify the version of node that your stuff works on:
+
+ { "engines" : { "node" : ">=0.10.3 <0.12" } }
+
+And, like with dependencies, if you don't specify the version (or if you
+specify "\*" as the version), then any version of node will do.
+
+If you specify an "engines" field, then npm will require that "node" be
+somewhere on that list. If "engines" is omitted, then npm will just assume
+that it works on node.
+
+You can also use the "engines" field to specify which versions of npm
+are capable of properly installing your program. For example:
+
+ { "engines" : { "npm" : "~1.0.20" } }
+
+Note that, unless the user has set the `engine-strict` config flag, this
+field is advisory only.
+
+## engineStrict
+
+If you are sure that your module will *definitely not* run properly on
+versions of Node/npm other than those specified in the `engines` hash,
+then you can set `"engineStrict": true` in your package.json file.
+This will override the user's `engine-strict` config setting.
+
+Please do not do this unless you are really very very sure. If your
+engines hash is something overly restrictive, you can quite easily and
+inadvertently lock yourself into obscurity and prevent your users from
+updating to new versions of Node. Consider this choice carefully. If
+people abuse it, it will be removed in a future version of npm.
+
+## os
+
+You can specify which operating systems your
+module will run on:
+
+ "os" : [ "darwin", "linux" ]
+
+You can also blacklist instead of whitelist operating systems,
+just prepend the blacklisted os with a '!':
+
+ "os" : [ "!win32" ]
+
+The host operating system is determined by `process.platform`
+
+It is allowed to both blacklist, and whitelist, although there isn't any
+good reason to do this.
+
+## cpu
+
+If your code only runs on certain cpu architectures,
+you can specify which ones.
+
+ "cpu" : [ "x64", "ia32" ]
+
+Like the `os` option, you can also blacklist architectures:
+
+ "cpu" : [ "!arm", "!mips" ]
+
+The host architecture is determined by `process.arch`
+
+## preferGlobal
+
+If your package is primarily a command-line application that should be
+installed globally, then set this value to `true` to provide a warning
+if it is installed locally.
+
+It doesn't actually prevent users from installing it locally, but it
+does help prevent some confusion if it doesn't work as expected.
+
+## private
+
+If you set `"private": true` in your package.json, then npm will refuse
+to publish it.
+
+This is a way to prevent accidental publication of private repositories.
+If you would like to ensure that a given package is only ever published
+to a specific registry (for example, an internal registry),
+then use the `publishConfig` hash described below
+to override the `registry` config param at publish-time.
+
+## publishConfig
+
+This is a set of config values that will be used at publish-time. It's
+especially handy if you want to set the tag or registry, so that you can
+ensure that a given package is not tagged with "latest" or published to
+the global public registry by default.
+
+Any config values can be overridden, but of course only "tag" and
+"registry" probably matter for the purposes of publishing.
+
+See `npm-config(7)` to see the list of config options that can be
+overridden.
+
+## DEFAULT VALUES
+
+npm will default some values based on package contents.
+
+* `"scripts": {"start": "node server.js"}`
+
+ If there is a `server.js` file in the root of your package, then npm
+ will default the `start` command to `node server.js`.
+
+* `"scripts":{"preinstall": "node-gyp rebuild"}`
+
+ If there is a `binding.gyp` file in the root of your package, npm will
+ default the `preinstall` command to compile using node-gyp.
+
+* `"contributors": [...]`
+
+ If there is an `AUTHORS` file in the root of your package, npm will
+ treat each line as a `Name <email> (url)` format, where email and url
+ are optional. Lines which start with a `#` or are blank, will be
+ ignored.
+
+## SEE ALSO
+
+* semver(7)
+* npm-init(1)
+* npm-version(1)
+* npm-config(1)
+* npm-config(7)
+* npm-help(1)
+* npm-faq(7)
+* npm-install(1)
+* npm-publish(1)
+* npm-rm(1)
diff --git a/deps/npm/doc/misc/npm-coding-style.md b/deps/npm/doc/misc/npm-coding-style.md
new file mode 100644
index 000000000..b6a4a620f
--- /dev/null
+++ b/deps/npm/doc/misc/npm-coding-style.md
@@ -0,0 +1,181 @@
+npm-coding-style(7) -- npm's "funny" coding style
+=================================================
+
+## DESCRIPTION
+
+npm's coding style is a bit unconventional. It is not different for
+difference's sake, but rather a carefully crafted style that is
+designed to reduce visual clutter and make bugs more apparent.
+
+If you want to contribute to npm (which is very encouraged), you should
+make your code conform to npm's style.
+
+Note: this concerns npm's code not the specific packages at npmjs.org
+
+## Line Length
+
+Keep lines shorter than 80 characters. It's better for lines to be
+too short than to be too long. Break up long lists, objects, and other
+statements onto multiple lines.
+
+## Indentation
+
+Two-spaces. Tabs are better, but they look like hell in web browsers
+(and on github), and node uses 2 spaces, so that's that.
+
+Configure your editor appropriately.
+
+## Curly braces
+
+Curly braces belong on the same line as the thing that necessitates them.
+
+Bad:
+
+ function ()
+ {
+
+Good:
+
+ function () {
+
+If a block needs to wrap to the next line, use a curly brace. Don't
+use it if it doesn't.
+
+Bad:
+
+ if (foo) { bar() }
+ while (foo)
+ bar()
+
+Good:
+
+ if (foo) bar()
+ while (foo) {
+ bar()
+ }
+
+## Semicolons
+
+Don't use them except in four situations:
+
+* `for (;;)` loops. They're actually required.
+* null loops like: `while (something) ;` (But you'd better have a good
+ reason for doing that.)
+* `case "foo": doSomething(); break`
+* In front of a leading `(` or `[` at the start of the line.
+ This prevents the expression from being interpreted
+ as a function call or property access, respectively.
+
+Some examples of good semicolon usage:
+
+ ;(x || y).doSomething()
+ ;[a, b, c].forEach(doSomething)
+ for (var i = 0; i < 10; i ++) {
+ switch (state) {
+ case "begin": start(); continue
+ case "end": finish(); break
+ default: throw new Error("unknown state")
+ }
+ end()
+ }
+
+Note that starting lines with `-` and `+` also should be prefixed
+with a semicolon, but this is much less common.
+
+## Comma First
+
+If there is a list of things separated by commas, and it wraps
+across multiple lines, put the comma at the start of the next
+line, directly below the token that starts the list. Put the
+final token in the list on a line by itself. For example:
+
+ var magicWords = [ "abracadabra"
+ , "gesundheit"
+ , "ventrilo"
+ ]
+ , spells = { "fireball" : function () { setOnFire() }
+ , "water" : function () { putOut() }
+ }
+ , a = 1
+ , b = "abc"
+ , etc
+ , somethingElse
+
+## Whitespace
+
+Put a single space in front of ( for anything other than a function call.
+Also use a single space wherever it makes things more readable.
+
+Don't leave trailing whitespace at the end of lines. Don't indent empty
+lines. Don't use more spaces than are helpful.
+
+## Functions
+
+Use named functions. They make stack traces a lot easier to read.
+
+## Callbacks, Sync/async Style
+
+Use the asynchronous/non-blocking versions of things as much as possible.
+It might make more sense for npm to use the synchronous fs APIs, but this
+way, the fs and http and child process stuff all uses the same callback-passing
+methodology.
+
+The callback should always be the last argument in the list. Its first
+argument is the Error or null.
+
+Be very careful never to ever ever throw anything. It's worse than useless.
+Just send the error message back as the first argument to the callback.
+
+## Errors
+
+Always create a new Error object with your message. Don't just return a
+string message to the callback. Stack traces are handy.
+
+## Logging
+
+Logging is done using the [npmlog](https://github.com/npm/npmlog)
+utility.
+
+Please clean up logs when they are no longer helpful. In particular,
+logging the same object over and over again is not helpful. Logs should
+report what's happening so that it's easier to track down where a fault
+occurs.
+
+Use appropriate log levels. See `npm-config(7)` and search for
+"loglevel".
+
+## Case, naming, etc.
+
+Use `lowerCamelCase` for multiword identifiers when they refer to objects,
+functions, methods, members, or anything not specified in this section.
+
+Use `UpperCamelCase` for class names (things that you'd pass to "new").
+
+Use `all-lower-hyphen-css-case` for multiword filenames and config keys.
+
+Use named functions. They make stack traces easier to follow.
+
+Use `CAPS_SNAKE_CASE` for constants, things that should never change
+and are rarely used.
+
+Use a single uppercase letter for function names where the function
+would normally be anonymous, but needs to call itself recursively. It
+makes it clear that it's a "throwaway" function.
+
+## null, undefined, false, 0
+
+Boolean variables and functions should always be either `true` or
+`false`. Don't set it to 0 unless it's supposed to be a number.
+
+When something is intentionally missing or removed, set it to `null`.
+
+Don't set things to `undefined`. Reserve that value to mean "not yet
+set to anything."
+
+Boolean objects are verboten.
+
+## SEE ALSO
+
+* npm-developers(7)
+* npm-faq(7)
+* npm(1)
diff --git a/deps/npm/doc/misc/npm-config.md b/deps/npm/doc/misc/npm-config.md
new file mode 100644
index 000000000..a70de8121
--- /dev/null
+++ b/deps/npm/doc/misc/npm-config.md
@@ -0,0 +1,844 @@
+npm-config(7) -- More than you probably want to know about npm configuration
+============================================================================
+
+## DESCRIPTION
+
+npm gets its configuration values from 6 sources, in this priority:
+
+### Command Line Flags
+
+Putting `--foo bar` on the command line sets the `foo` configuration
+parameter to `"bar"`. A `--` argument tells the cli parser to stop
+reading flags. A `--flag` parameter that is at the *end* of the
+command will be given the value of `true`.
+
+### Environment Variables
+
+Any environment variables that start with `npm_config_` will be
+interpreted as a configuration parameter. For example, putting
+`npm_config_foo=bar` in your environment will set the `foo`
+configuration parameter to `bar`. Any environment configurations that
+are not given a value will be given the value of `true`. Config
+values are case-insensitive, so `NPM_CONFIG_FOO=bar` will work the
+same.
+
+### npmrc Files
+
+The three relevant files are:
+
+* per-user config file (~/.npmrc)
+* global config file ($PREFIX/npmrc)
+* npm builtin config file (/path/to/npm/npmrc)
+
+See npmrc(5) for more details.
+
+### Default Configs
+
+A set of configuration parameters that are internal to npm, and are
+defaults if nothing else is specified.
+
+## Shorthands and Other CLI Niceties
+
+The following shorthands are parsed on the command-line:
+
+* `-v`: `--version`
+* `-h`, `-?`, `--help`, `-H`: `--usage`
+* `-s`, `--silent`: `--loglevel silent`
+* `-q`, `--quiet`: `--loglevel warn`
+* `-d`: `--loglevel info`
+* `-dd`, `--verbose`: `--loglevel verbose`
+* `-ddd`: `--loglevel silly`
+* `-g`: `--global`
+* `-l`: `--long`
+* `-m`: `--message`
+* `-p`, `--porcelain`: `--parseable`
+* `-reg`: `--registry`
+* `-v`: `--version`
+* `-f`: `--force`
+* `-desc`: `--description`
+* `-S`: `--save`
+* `-D`: `--save-dev`
+* `-O`: `--save-optional`
+* `-B`: `--save-bundle`
+* `-E`: `--save-exact`
+* `-y`: `--yes`
+* `-n`: `--yes false`
+* `ll` and `la` commands: `ls --long`
+
+If the specified configuration param resolves unambiguously to a known
+configuration parameter, then it is expanded to that configuration
+parameter. For example:
+
+ npm ls --par
+ # same as:
+ npm ls --parseable
+
+If multiple single-character shorthands are strung together, and the
+resulting combination is unambiguously not some other configuration
+param, then it is expanded to its various component pieces. For
+example:
+
+ npm ls -gpld
+ # same as:
+ npm ls --global --parseable --long --loglevel info
+
+## Per-Package Config Settings
+
+When running scripts (see `npm-scripts(7)`) the package.json "config"
+keys are overwritten in the environment if there is a config param of
+`<name>[@<version>]:<key>`. For example, if the package.json has
+this:
+
+ { "name" : "foo"
+ , "config" : { "port" : "8080" }
+ , "scripts" : { "start" : "node server.js" } }
+
+and the server.js is this:
+
+ http.createServer(...).listen(process.env.npm_package_config_port)
+
+then the user could change the behavior by doing:
+
+ npm config set foo:port 80
+
+See package.json(5) for more information.
+
+## Config Settings
+
+### always-auth
+
+* Default: false
+* Type: Boolean
+
+Force npm to always require authentication when accessing the registry,
+even for `GET` requests.
+
+### bin-links
+
+* Default: `true`
+* Type: Boolean
+
+Tells npm to create symlinks (or `.cmd` shims on Windows) for package
+executables.
+
+Set to false to have it not do this. This can be used to work around
+the fact that some file systems don't support symlinks, even on
+ostensibly Unix systems.
+
+### browser
+
+* Default: OS X: `"open"`, Windows: `"start"`, Others: `"xdg-open"`
+* Type: String
+
+The browser that is called by the `npm docs` command to open websites.
+
+### ca
+
+* Default: The npm CA certificate
+* Type: String or null
+
+The Certificate Authority signing certificate that is trusted for SSL
+connections to the registry.
+
+Set to `null` to only allow "known" registrars, or to a specific CA cert
+to trust only that specific signing authority.
+
+See also the `strict-ssl` config.
+
+### cache
+
+* Default: Windows: `%AppData%\npm-cache`, Posix: `~/.npm`
+* Type: path
+
+The location of npm's cache directory. See `npm-cache(1)`
+
+### cache-lock-stale
+
+* Default: 60000 (1 minute)
+* Type: Number
+
+The number of ms before cache folder lockfiles are considered stale.
+
+### cache-lock-retries
+
+* Default: 10
+* Type: Number
+
+Number of times to retry to acquire a lock on cache folder lockfiles.
+
+### cache-lock-wait
+
+* Default: 10000 (10 seconds)
+* Type: Number
+
+Number of ms to wait for cache lock files to expire.
+
+### cache-max
+
+* Default: Infinity
+* Type: Number
+
+The maximum time (in seconds) to keep items in the registry cache before
+re-checking against the registry.
+
+Note that no purging is done unless the `npm cache clean` command is
+explicitly used, and that only GET requests use the cache.
+
+### cache-min
+
+* Default: 10
+* Type: Number
+
+The minimum time (in seconds) to keep items in the registry cache before
+re-checking against the registry.
+
+Note that no purging is done unless the `npm cache clean` command is
+explicitly used, and that only GET requests use the cache.
+
+### cert
+
+* Default: `null`
+* Type: String
+
+A client certificate to pass when accessing the registry.
+
+### color
+
+* Default: true on Posix, false on Windows
+* Type: Boolean or `"always"`
+
+If false, never shows colors. If `"always"` then always shows colors.
+If true, then only prints color codes for tty file descriptors.
+
+### depth
+
+* Default: Infinity
+* Type: Number
+
+The depth to go when recursing directories for `npm ls` and
+`npm cache ls`.
+
+### description
+
+* Default: true
+* Type: Boolean
+
+Show the description in `npm search`
+
+### dev
+
+* Default: false
+* Type: Boolean
+
+Install `dev-dependencies` along with packages.
+
+Note that `dev-dependencies` are also installed if the `npat` flag is
+set.
+
+### editor
+
+* Default: `EDITOR` environment variable if set, or `"vi"` on Posix,
+ or `"notepad"` on Windows.
+* Type: path
+
+The command to run for `npm edit` or `npm config edit`.
+
+### email
+
+The email of the logged-in user.
+
+Set by the `npm adduser` command. Should not be set explicitly.
+
+### engine-strict
+
+* Default: false
+* Type: Boolean
+
+If set to true, then npm will stubbornly refuse to install (or even
+consider installing) any package that claims to not be compatible with
+the current Node.js version.
+
+### force
+
+* Default: false
+* Type: Boolean
+
+Makes various commands more forceful.
+
+* lifecycle script failure does not block progress.
+* publishing clobbers previously published versions.
+* skips cache when requesting from the registry.
+* prevents checks against clobbering non-npm files.
+
+### fetch-retries
+
+* Default: 2
+* Type: Number
+
+The "retries" config for the `retry` module to use when fetching
+packages from the registry.
+
+### fetch-retry-factor
+
+* Default: 10
+* Type: Number
+
+The "factor" config for the `retry` module to use when fetching
+packages.
+
+### fetch-retry-mintimeout
+
+* Default: 10000 (10 seconds)
+* Type: Number
+
+The "minTimeout" config for the `retry` module to use when fetching
+packages.
+
+### fetch-retry-maxtimeout
+
+* Default: 60000 (1 minute)
+* Type: Number
+
+The "maxTimeout" config for the `retry` module to use when fetching
+packages.
+
+### git
+
+* Default: `"git"`
+* Type: String
+
+The command to use for git commands. If git is installed on the
+computer, but is not in the `PATH`, then set this to the full path to
+the git binary.
+
+### git-tag-version
+
+* Default: `true`
+* Type: Boolean
+
+Tag the commit when using the `npm version` command.
+
+### global
+
+* Default: false
+* Type: Boolean
+
+Operates in "global" mode, so that packages are installed into the
+`prefix` folder instead of the current working directory. See
+`npm-folders(5)` for more on the differences in behavior.
+
+* packages are installed into the `{prefix}/lib/node_modules` folder, instead of the
+ current working directory.
+* bin files are linked to `{prefix}/bin`
+* man pages are linked to `{prefix}/share/man`
+
+### globalconfig
+
+* Default: {prefix}/etc/npmrc
+* Type: path
+
+The config file to read for global config options.
+
+### group
+
+* Default: GID of the current process
+* Type: String or Number
+
+The group to use when running package scripts in global mode as the root
+user.
+
+### heading
+
+* Default: `"npm"`
+* Type: String
+
+The string that starts all the debugging log output.
+
+### https-proxy
+
+* Default: the `HTTPS_PROXY` or `https_proxy` or `HTTP_PROXY` or
+ `http_proxy` environment variables.
+* Type: url
+
+A proxy to use for outgoing https requests.
+
+### ignore-scripts
+
+* Default: false
+* Type: Boolean
+
+If true, npm does not run scripts specified in package.json files.
+
+### init-module
+
+* Default: ~/.npm-init.js
+* Type: path
+
+A module that will be loaded by the `npm init` command. See the
+documentation for the
+[init-package-json](https://github.com/isaacs/init-package-json) module
+for more information, or npm-init(1).
+
+### init.author.name
+
+* Default: ""
+* Type: String
+
+The value `npm init` should use by default for the package author's name.
+
+### init.author.email
+
+* Default: ""
+* Type: String
+
+The value `npm init` should use by default for the package author's email.
+
+### init.author.url
+
+* Default: ""
+* Type: String
+
+The value `npm init` should use by default for the package author's homepage.
+
+### init.license
+
+* Default: "ISC"
+* Type: String
+
+The value `npm init` should use by default for the package license.
+
+### json
+
+* Default: false
+* Type: Boolean
+
+Whether or not to output JSON data, rather than the normal output.
+
+This feature is currently experimental, and the output data structures
+for many commands is either not implemented in JSON yet, or subject to
+change. Only the output from `npm ls --json` is currently valid.
+
+### key
+
+* Default: `null`
+* Type: String
+
+A client key to pass when accessing the registry.
+
+### link
+
+* Default: false
+* Type: Boolean
+
+If true, then local installs will link if there is a suitable globally
+installed package.
+
+Note that this means that local installs can cause things to be
+installed into the global space at the same time. The link is only done
+if one of the two conditions are met:
+
+* The package is not already installed globally, or
+* the globally installed version is identical to the version that is
+ being installed locally.
+
+### local-address
+
+* Default: undefined
+* Type: IP Address
+
+The IP address of the local interface to use when making connections
+to the npm registry. Must be IPv4 in versions of Node prior to 0.12.
+
+### loglevel
+
+* Default: "http"
+* Type: String
+* Values: "silent", "win", "error", "warn", "http", "info", "verbose", "silly"
+
+What level of logs to report. On failure, *all* logs are written to
+`npm-debug.log` in the current working directory.
+
+Any logs of a higher level than the setting are shown.
+The default is "http", which shows http, warn, and error output.
+
+### logstream
+
+* Default: process.stderr
+* Type: Stream
+
+This is the stream that is passed to the
+[npmlog](https://github.com/npm/npmlog) module at run time.
+
+It cannot be set from the command line, but if you are using npm
+programmatically, you may wish to send logs to somewhere other than
+stderr.
+
+If the `color` config is set to true, then this stream will receive
+colored output if it is a TTY.
+
+### long
+
+* Default: false
+* Type: Boolean
+
+Show extended information in `npm ls` and `npm search`.
+
+### message
+
+* Default: "%s"
+* Type: String
+
+Commit message which is used by `npm version` when creating version commit.
+
+Any "%s" in the message will be replaced with the version number.
+
+### node-version
+
+* Default: process.version
+* Type: semver or false
+
+The node version to use when checking package's "engines" hash.
+
+### npat
+
+* Default: false
+* Type: Boolean
+
+Run tests on installation.
+
+### onload-script
+
+* Default: false
+* Type: path
+
+A node module to `require()` when npm loads. Useful for programmatic
+usage.
+
+### optional
+
+* Default: true
+* Type: Boolean
+
+Attempt to install packages in the `optionalDependencies` hash. Note
+that if these packages fail to install, the overall installation
+process is not aborted.
+
+### parseable
+
+* Default: false
+* Type: Boolean
+
+Output parseable results from commands that write to
+standard output.
+
+### prefix
+
+* Default: see npm-folders(5)
+* Type: path
+
+The location to install global items. If set on the command line, then
+it forces non-global commands to run in the specified folder.
+
+### production
+
+* Default: false
+* Type: Boolean
+
+Set to true to run in "production" mode.
+
+1. devDependencies are not installed at the topmost level when running
+ local `npm install` without any arguments.
+2. Set the NODE_ENV="production" for lifecycle scripts.
+
+### proprietary-attribs
+
+* Default: true
+* Type: Boolean
+
+Whether or not to include proprietary extended attributes in the
+tarballs created by npm.
+
+Unless you are expecting to unpack package tarballs with something other
+than npm -- particularly a very outdated tar implementation -- leave
+this as true.
+
+### proxy
+
+* Default: `HTTP_PROXY` or `http_proxy` environment variable, or null
+* Type: url
+
+A proxy to use for outgoing http requests.
+
+### rebuild-bundle
+
+* Default: true
+* Type: Boolean
+
+Rebuild bundled dependencies after installation.
+
+### registry
+
+* Default: https://registry.npmjs.org/
+* Type: url
+
+The base URL of the npm package registry.
+
+### rollback
+
+* Default: true
+* Type: Boolean
+
+Remove failed installs.
+
+### save
+
+* Default: false
+* Type: Boolean
+
+Save installed packages to a package.json file as dependencies.
+
+When used with the `npm rm` command, it removes it from the dependencies
+hash.
+
+Only works if there is already a package.json file present.
+
+### save-bundle
+
+* Default: false
+* Type: Boolean
+
+If a package would be saved at install time by the use of `--save`,
+`--save-dev`, or `--save-optional`, then also put it in the
+`bundleDependencies` list.
+
+When used with the `npm rm` command, it removes it from the
+bundledDependencies list.
+
+### save-dev
+
+* Default: false
+* Type: Boolean
+
+Save installed packages to a package.json file as devDependencies.
+
+When used with the `npm rm` command, it removes it from the
+devDependencies hash.
+
+Only works if there is already a package.json file present.
+
+### save-exact
+
+* Default: false
+* Type: Boolean
+
+Dependencies saved to package.json using `--save`, `--save-dev` or
+`--save-optional` will be configured with an exact version rather than
+using npm's default semver range operator.
+
+### save-optional
+
+* Default: false
+* Type: Boolean
+
+Save installed packages to a package.json file as
+optionalDependencies.
+
+When used with the `npm rm` command, it removes it from the
+devDependencies hash.
+
+Only works if there is already a package.json file present.
+
+### save-prefix
+
+* Default: '^'
+* Type: String
+
+Configure how versions of packages installed to a package.json file via
+`--save` or `--save-dev` get prefixed.
+
+For example if a package has version `1.2.3`, by default it's version is
+set to `^1.2.3` which allows minor upgrades for that package, but after
+`npm config set save-prefix='~'` it would be set to `~1.2.3` which only allows
+patch upgrades.
+
+### searchopts
+
+* Default: ""
+* Type: String
+
+Space-separated options that are always passed to search.
+
+### searchexclude
+
+* Default: ""
+* Type: String
+
+Space-separated options that limit the results from search.
+
+### searchsort
+
+* Default: "name"
+* Type: String
+* Values: "name", "-name", "date", "-date", "description",
+ "-description", "keywords", "-keywords"
+
+Indication of which field to sort search results by. Prefix with a `-`
+character to indicate reverse sort.
+
+### shell
+
+* Default: SHELL environment variable, or "bash" on Posix, or "cmd" on
+ Windows
+* Type: path
+
+The shell to run for the `npm explore` command.
+
+### shrinkwrap
+
+* Default: true
+* Type: Boolean
+
+If set to false, then ignore `npm-shrinkwrap.json` files when
+installing.
+
+### sign-git-tag
+
+* Default: false
+* Type: Boolean
+
+If set to true, then the `npm version` command will tag the version
+using `-s` to add a signature.
+
+Note that git requires you to have set up GPG keys in your git configs
+for this to work properly.
+
+### strict-ssl
+
+* Default: true
+* Type: Boolean
+
+Whether or not to do SSL key validation when making requests to the
+registry via https.
+
+See also the `ca` config.
+
+### tag
+
+* Default: latest
+* Type: String
+
+If you ask npm to install a package and don't tell it a specific version, then
+it will install the specified tag.
+
+Also the tag that is added to the package@version specified by the `npm
+tag` command, if no explicit tag is given.
+
+### tmp
+
+* Default: TMPDIR environment variable, or "/tmp"
+* Type: path
+
+Where to store temporary files and folders. All temp files are deleted
+on success, but left behind on failure for forensic purposes.
+
+### unicode
+
+* Default: true
+* Type: Boolean
+
+When set to true, npm uses unicode characters in the tree output. When
+false, it uses ascii characters to draw trees.
+
+### unsafe-perm
+
+* Default: false if running as root, true otherwise
+* Type: Boolean
+
+Set to true to suppress the UID/GID switching when running package
+scripts. If set explicitly to false, then installing as a non-root user
+will fail.
+
+### usage
+
+* Default: false
+* Type: Boolean
+
+Set to show short usage output (like the -H output)
+instead of complete help when doing `npm-help(1)`.
+
+### user
+
+* Default: "nobody"
+* Type: String or Number
+
+The UID to set to when running package scripts as root.
+
+### username
+
+* Default: null
+* Type: String
+
+The username on the npm registry. Set with `npm adduser`
+
+### userconfig
+
+* Default: ~/.npmrc
+* Type: path
+
+The location of user-level configuration settings.
+
+### umask
+
+* Default: 022
+* Type: Octal numeric string
+
+The "umask" value to use when setting the file creation mode on files
+and folders.
+
+Folders and executables are given a mode which is `0777` masked against
+this value. Other files are given a mode which is `0666` masked against
+this value. Thus, the defaults are `0755` and `0644` respectively.
+
+### user-agent
+
+* Default: node/{process.version} {process.platform} {process.arch}
+* Type: String
+
+Sets a User-Agent to the request header
+
+### version
+
+* Default: false
+* Type: boolean
+
+If true, output the npm version and exit successfully.
+
+Only relevant when specified explicitly on the command line.
+
+### versions
+
+* Default: false
+* Type: boolean
+
+If true, output the npm version as well as node's `process.versions`
+hash, and exit successfully.
+
+Only relevant when specified explicitly on the command line.
+
+### viewer
+
+* Default: "man" on Posix, "browser" on Windows
+* Type: path
+
+The program to use to view help content.
+
+Set to `"browser"` to view html help content in the default web browser.
+
+## SEE ALSO
+
+* npm-config(1)
+* npm-config(7)
+* npmrc(5)
+* npm-scripts(7)
+* npm-folders(5)
+* npm(1)
diff --git a/deps/npm/doc/misc/npm-developers.md b/deps/npm/doc/misc/npm-developers.md
new file mode 100644
index 000000000..5e53301f3
--- /dev/null
+++ b/deps/npm/doc/misc/npm-developers.md
@@ -0,0 +1,207 @@
+npm-developers(7) -- Developer Guide
+====================================
+
+## DESCRIPTION
+
+So, you've decided to use npm to develop (and maybe publish/deploy)
+your project.
+
+Fantastic!
+
+There are a few things that you need to do above the simple steps
+that your users will do to install your program.
+
+## About These Documents
+
+These are man pages. If you install npm, you should be able to
+then do `man npm-thing` to get the documentation on a particular
+topic, or `npm help thing` to see the same information.
+
+## What is a `package`
+
+A package is:
+
+* a) a folder containing a program described by a package.json file
+* b) a gzipped tarball containing (a)
+* c) a url that resolves to (b)
+* d) a `<name>@<version>` that is published on the registry with (c)
+* e) a `<name>@<tag>` that points to (d)
+* f) a `<name>` that has a "latest" tag satisfying (e)
+* g) a `git` url that, when cloned, results in (a).
+
+Even if you never publish your package, you can still get a lot of
+benefits of using npm if you just want to write a node program (a), and
+perhaps if you also want to be able to easily install it elsewhere
+after packing it up into a tarball (b).
+
+Git urls can be of the form:
+
+ git://github.com/user/project.git#commit-ish
+ git+ssh://user@hostname:project.git#commit-ish
+ git+http://user@hostname/project/blah.git#commit-ish
+ git+https://user@hostname/project/blah.git#commit-ish
+
+The `commit-ish` can be any tag, sha, or branch which can be supplied as
+an argument to `git checkout`. The default is `master`.
+
+## The package.json File
+
+You need to have a `package.json` file in the root of your project to do
+much of anything with npm. That is basically the whole interface.
+
+See `package.json(5)` for details about what goes in that file. At the very
+least, you need:
+
+* name:
+ This should be a string that identifies your project. Please do not
+ use the name to specify that it runs on node, or is in JavaScript.
+ You can use the "engines" field to explicitly state the versions of
+ node (or whatever else) that your program requires, and it's pretty
+ well assumed that it's javascript.
+
+ It does not necessarily need to match your github repository name.
+
+ So, `node-foo` and `bar-js` are bad names. `foo` or `bar` are better.
+
+* version:
+ A semver-compatible version.
+
+* engines:
+ Specify the versions of node (or whatever else) that your program
+ runs on. The node API changes a lot, and there may be bugs or new
+ functionality that you depend on. Be explicit.
+
+* author:
+ Take some credit.
+
+* scripts:
+ If you have a special compilation or installation script, then you
+ should put it in the `scripts` hash. You should definitely have at
+ least a basic smoke-test command as the "scripts.test" field.
+ See npm-scripts(7).
+
+* main:
+ If you have a single module that serves as the entry point to your
+ program (like what the "foo" package gives you at require("foo")),
+ then you need to specify that in the "main" field.
+
+* directories:
+ This is a hash of folders. The best ones to include are "lib" and
+ "doc", but if you specify a folder full of man pages in "man", then
+ they'll get installed just like these ones.
+
+You can use `npm init` in the root of your package in order to get you
+started with a pretty basic package.json file. See `npm-init(1)` for
+more info.
+
+## Keeping files *out* of your package
+
+Use a `.npmignore` file to keep stuff out of your package. If there's
+no `.npmignore` file, but there *is* a `.gitignore` file, then npm will
+ignore the stuff matched by the `.gitignore` file. If you *want* to
+include something that is excluded by your `.gitignore` file, you can
+create an empty `.npmignore` file to override it.
+
+By default, the following paths and files are ignored, so there's no
+need to add them to `.npmignore` explicitly:
+
+* `.*.swp`
+* `._*`
+* `.DS_Store`
+* `.git`
+* `.hg`
+* `.lock-wscript`
+* `.svn`
+* `.wafpickle-*`
+* `CVS`
+* `npm-debug.log`
+
+Additionally, everything in `node_modules` is ignored, except for
+bundled dependencies. npm automatically handles this for you, so don't
+bother adding `node_modules` to `.npmignore`.
+
+The following paths and files are never ignored, so adding them to
+`.npmignore` is pointless:
+
+* `package.json`
+* `README.*`
+
+## Link Packages
+
+`npm link` is designed to install a development package and see the
+changes in real time without having to keep re-installing it. (You do
+need to either re-link or `npm rebuild -g` to update compiled packages,
+of course.)
+
+More info at `npm-link(1)`.
+
+## Before Publishing: Make Sure Your Package Installs and Works
+
+**This is important.**
+
+If you can not install it locally, you'll have
+problems trying to publish it. Or, worse yet, you'll be able to
+publish it, but you'll be publishing a broken or pointless package.
+So don't do that.
+
+In the root of your package, do this:
+
+ npm install . -g
+
+That'll show you that it's working. If you'd rather just create a symlink
+package that points to your working directory, then do this:
+
+ npm link
+
+Use `npm ls -g` to see if it's there.
+
+To test a local install, go into some other folder, and then do:
+
+ cd ../some-other-folder
+ npm install ../my-package
+
+to install it locally into the node_modules folder in that other place.
+
+Then go into the node-repl, and try using require("my-thing") to
+bring in your module's main module.
+
+## Create a User Account
+
+Create a user with the adduser command. It works like this:
+
+ npm adduser
+
+and then follow the prompts.
+
+This is documented better in npm-adduser(1).
+
+## Publish your package
+
+This part's easy. IN the root of your folder, do this:
+
+ npm publish
+
+You can give publish a url to a tarball, or a filename of a tarball,
+or a path to a folder.
+
+Note that pretty much **everything in that folder will be exposed**
+by default. So, if you have secret stuff in there, use a
+`.npmignore` file to list out the globs to ignore, or publish
+from a fresh checkout.
+
+## Brag about it
+
+Send emails, write blogs, blab in IRC.
+
+Tell the world how easy it is to install your program!
+
+## SEE ALSO
+
+* npm-faq(7)
+* npm(1)
+* npm-init(1)
+* package.json(5)
+* npm-scripts(7)
+* npm-publish(1)
+* npm-adduser(1)
+* npm-registry(7)
diff --git a/deps/npm/doc/misc/npm-disputes.md b/deps/npm/doc/misc/npm-disputes.md
new file mode 100644
index 000000000..9fb1eaab4
--- /dev/null
+++ b/deps/npm/doc/misc/npm-disputes.md
@@ -0,0 +1,99 @@
+npm-disputes(7) -- Handling Module Name Disputes
+================================================
+
+## SYNOPSIS
+
+1. Get the author email with `npm owner ls <pkgname>`
+2. Email the author, CC <support@npmjs.com>
+3. After a few weeks, if there's no resolution, we'll sort it out.
+
+Don't squat on package names. Publish code or move out of the way.
+
+## DESCRIPTION
+
+There sometimes arise cases where a user publishes a module, and then
+later, some other user wants to use that name. Here are some common
+ways that happens (each of these is based on actual events.)
+
+1. Joe writes a JavaScript module `foo`, which is not node-specific.
+ Joe doesn't use node at all. Bob wants to use `foo` in node, so he
+ wraps it in an npm module. Some time later, Joe starts using node,
+ and wants to take over management of his program.
+2. Bob writes an npm module `foo`, and publishes it. Perhaps much
+ later, Joe finds a bug in `foo`, and fixes it. He sends a pull
+ request to Bob, but Bob doesn't have the time to deal with it,
+ because he has a new job and a new baby and is focused on his new
+ erlang project, and kind of not involved with node any more. Joe
+ would like to publish a new `foo`, but can't, because the name is
+ taken.
+3. Bob writes a 10-line flow-control library, and calls it `foo`, and
+ publishes it to the npm registry. Being a simple little thing, it
+ never really has to be updated. Joe works for Foo Inc, the makers
+ of the critically acclaimed and widely-marketed `foo` JavaScript
+ toolkit framework. They publish it to npm as `foojs`, but people are
+ routinely confused when `npm install foo` is some different thing.
+4. Bob writes a parser for the widely-known `foo` file format, because
+ he needs it for work. Then, he gets a new job, and never updates the
+ prototype. Later on, Joe writes a much more complete `foo` parser,
+ but can't publish, because Bob's `foo` is in the way.
+
+The validity of Joe's claim in each situation can be debated. However,
+Joe's appropriate course of action in each case is the same.
+
+1. `npm owner ls foo`. This will tell Joe the email address of the
+ owner (Bob).
+2. Joe emails Bob, explaining the situation **as respectfully as
+ possible**, and what he would like to do with the module name. He
+ adds the npm support staff <support@npmjs.com> to the CC list of
+ the email. Mention in the email that Bob can run `npm owner add
+ joe foo` to add Joe as an owner of the `foo` package.
+3. After a reasonable amount of time, if Bob has not responded, or if
+ Bob and Joe can't come to any sort of resolution, email support
+ <support@npmjs.com> and we'll sort it out. ("Reasonable" is
+ usually at least 4 weeks, but extra time is allowed around common
+ holidays.)
+
+## REASONING
+
+In almost every case so far, the parties involved have been able to reach
+an amicable resolution without any major intervention. Most people
+really do want to be reasonable, and are probably not even aware that
+they're in your way.
+
+Module ecosystems are most vibrant and powerful when they are as
+self-directed as possible. If an admin one day deletes something you
+had worked on, then that is going to make most people quite upset,
+regardless of the justification. When humans solve their problems by
+talking to other humans with respect, everyone has the chance to end up
+feeling good about the interaction.
+
+## EXCEPTIONS
+
+Some things are not allowed, and will be removed without discussion if
+they are brought to the attention of the npm registry admins, including
+but not limited to:
+
+1. Malware (that is, a package designed to exploit or harm the machine on
+ which it is installed).
+2. Violations of copyright or licenses (for example, cloning an
+ MIT-licensed program, and then removing or changing the copyright and
+ license statement).
+3. Illegal content.
+4. "Squatting" on a package name that you *plan* to use, but aren't
+ actually using. Sorry, I don't care how great the name is, or how
+ perfect a fit it is for the thing that someday might happen. If
+ someone wants to use it today, and you're just taking up space with
+ an empty tarball, you're going to be evicted.
+5. Putting empty packages in the registry. Packages must have SOME
+ functionality. It can be silly, but it can't be *nothing*. (See
+ also: squatting.)
+6. Doing weird things with the registry, like using it as your own
+ personal application database or otherwise putting non-packagey
+ things into it.
+
+If you see bad behavior like this, please report it right away.
+
+## SEE ALSO
+
+* npm-registry(7)
+* npm-owner(1)
diff --git a/deps/npm/doc/misc/npm-faq.md b/deps/npm/doc/misc/npm-faq.md
new file mode 100644
index 000000000..081605230
--- /dev/null
+++ b/deps/npm/doc/misc/npm-faq.md
@@ -0,0 +1,364 @@
+npm-faq(7) -- Frequently Asked Questions
+========================================
+
+## Where can I find these docs in HTML?
+
+<https://www.npmjs.org/doc/>, or run:
+
+ npm config set viewer browser
+
+to open these documents in your default web browser rather than `man`.
+
+## It didn't work.
+
+That's not really a question.
+
+## Why didn't it work?
+
+I don't know yet.
+
+Read the error output, and if you can't figure out what it means,
+do what it says and post a bug with all the information it asks for.
+
+## Where does npm put stuff?
+
+See `npm-folders(5)`
+
+tl;dr:
+
+* Use the `npm root` command to see where modules go, and the `npm bin`
+ command to see where executables go
+* Global installs are different from local installs. If you install
+ something with the `-g` flag, then its executables go in `npm bin -g`
+ and its modules go in `npm root -g`.
+
+## How do I install something on my computer in a central location?
+
+Install it globally by tacking `-g` or `--global` to the command. (This
+is especially important for command line utilities that need to add
+their bins to the global system `PATH`.)
+
+## I installed something globally, but I can't `require()` it
+
+Install it locally.
+
+The global install location is a place for command-line utilities
+to put their bins in the system `PATH`. It's not for use with `require()`.
+
+If you `require()` a module in your code, then that means it's a
+dependency, and a part of your program. You need to install it locally
+in your program.
+
+## Why can't npm just put everything in one place, like other package managers?
+
+Not every change is an improvement, but every improvement is a change.
+This would be like asking git to do network IO for every commit. It's
+not going to happen, because it's a terrible idea that causes more
+problems than it solves.
+
+It is much harder to avoid dependency conflicts without nesting
+dependencies. This is fundamental to the way that npm works, and has
+proven to be an extremely successful approach. See `npm-folders(5)` for
+more details.
+
+If you want a package to be installed in one place, and have all your
+programs reference the same copy of it, then use the `npm link` command.
+That's what it's for. Install it globally, then link it into each
+program that uses it.
+
+## Whatever, I really want the old style 'everything global' style.
+
+Write your own package manager. You could probably even wrap up `npm`
+in a shell script if you really wanted to.
+
+npm will not help you do something that is known to be a bad idea.
+
+## Should I check my `node_modules` folder into git?
+
+Mikeal Rogers answered this question very well:
+
+<http://www.futurealoof.com/posts/nodemodules-in-git.html>
+
+tl;dr
+
+* Check `node_modules` into git for things you **deploy**, such as
+ websites and apps.
+* Do not check `node_modules` into git for libraries and modules
+ intended to be reused.
+* Use npm to manage dependencies in your dev environment, but not in
+ your deployment scripts.
+
+## Is it 'npm' or 'NPM' or 'Npm'?
+
+npm should never be capitalized unless it is being displayed in a
+location that is customarily all-caps (such as the title of man pages.)
+
+## If 'npm' is an acronym, why is it never capitalized?
+
+Contrary to the belief of many, "npm" is not in fact an abbreviation for
+"Node Package Manager". It is a recursive bacronymic abbreviation for
+"npm is not an acronym". (If it was "ninaa", then it would be an
+acronym, and thus incorrectly named.)
+
+"NPM", however, *is* an acronym (more precisely, a capitonym) for the
+National Association of Pastoral Musicians. You can learn more
+about them at <http://npm.org/>.
+
+In software, "NPM" is a Non-Parametric Mapping utility written by
+Chris Rorden. You can analyze pictures of brains with it. Learn more
+about the (capitalized) NPM program at <http://www.cabiatl.com/mricro/npm/>.
+
+The first seed that eventually grew into this flower was a bash utility
+named "pm", which was a shortened descendent of "pkgmakeinst", a
+bash function that was used to install various different things on different
+platforms, most often using Yahoo's `yinst`. If `npm` was ever an
+acronym for anything, it was `node pm` or maybe `new pm`.
+
+So, in all seriousness, the "npm" project is named after its command-line
+utility, which was organically selected to be easily typed by a right-handed
+programmer using a US QWERTY keyboard layout, ending with the
+right-ring-finger in a postition to type the `-` key for flags and
+other command-line arguments. That command-line utility is always
+lower-case, though it starts most sentences it is a part of.
+
+## How do I list installed packages?
+
+`npm ls`
+
+## How do I search for packages?
+
+`npm search`
+
+Arguments are greps. `npm search jsdom` shows jsdom packages.
+
+## How do I update npm?
+
+ npm update npm -g
+
+You can also update all outdated local packages by doing `npm update` without
+any arguments, or global packages by doing `npm update -g`.
+
+Occasionally, the version of npm will progress such that the current
+version cannot be properly installed with the version that you have
+installed already. (Consider, if there is ever a bug in the `update`
+command.)
+
+In those cases, you can do this:
+
+ curl https://www.npmjs.org/install.sh | sh
+
+## What is a `package`?
+
+A package is:
+
+* a) a folder containing a program described by a package.json file
+* b) a gzipped tarball containing (a)
+* c) a url that resolves to (b)
+* d) a `<name>@<version>` that is published on the registry with (c)
+* e) a `<name>@<tag>` that points to (d)
+* f) a `<name>` that has a "latest" tag satisfying (e)
+* g) a `git` url that, when cloned, results in (a).
+
+Even if you never publish your package, you can still get a lot of
+benefits of using npm if you just want to write a node program (a), and
+perhaps if you also want to be able to easily install it elsewhere
+after packing it up into a tarball (b).
+
+Git urls can be of the form:
+
+ git://github.com/user/project.git#commit-ish
+ git+ssh://user@hostname:project.git#commit-ish
+ git+http://user@hostname/project/blah.git#commit-ish
+ git+https://user@hostname/project/blah.git#commit-ish
+
+The `commit-ish` can be any tag, sha, or branch which can be supplied as
+an argument to `git checkout`. The default is `master`.
+
+## What is a `module`?
+
+A module is anything that can be loaded with `require()` in a Node.js
+program. The following things are all examples of things that can be
+loaded as modules:
+
+* A folder with a `package.json` file containing a `main` field.
+* A folder with an `index.js` file in it.
+* A JavaScript file.
+
+Most npm packages are modules, because they are libraries that you
+load with `require`. However, there's no requirement that an npm
+package be a module! Some only contain an executable command-line
+interface, and don't provide a `main` field for use in Node programs.
+
+Almost all npm packages (at least, those that are Node programs)
+*contain* many modules within them (because every file they load with
+`require()` is a module).
+
+In the context of a Node program, the `module` is also the thing that
+was loaded *from* a file. For example, in the following program:
+
+ var req = require('request')
+
+we might say that "The variable `req` refers to the `request` module".
+
+## So, why is it the "`node_modules`" folder, but "`package.json`" file? Why not `node_packages` or `module.json`?
+
+The `package.json` file defines the package. (See "What is a
+package?" above.)
+
+The `node_modules` folder is the place Node.js looks for modules.
+(See "What is a module?" above.)
+
+For example, if you create a file at `node_modules/foo.js` and then
+had a program that did `var f = require('foo.js')` then it would load
+the module. However, `foo.js` is not a "package" in this case,
+because it does not have a package.json.
+
+Alternatively, if you create a package which does not have an
+`index.js` or a `"main"` field in the `package.json` file, then it is
+not a module. Even if it's installed in `node_modules`, it can't be
+an argument to `require()`.
+
+## `"node_modules"` is the name of my deity's arch-rival, and a Forbidden Word in my religion. Can I configure npm to use a different folder?
+
+No. This will never happen. This question comes up sometimes,
+because it seems silly from the outside that npm couldn't just be
+configured to put stuff somewhere else, and then npm could load them
+from there. It's an arbitrary spelling choice, right? What's the big
+deal?
+
+At the time of this writing, the string `'node_modules'` appears 151
+times in 53 separate files in npm and node core (excluding tests and
+documentation).
+
+Some of these references are in node's built-in module loader. Since
+npm is not involved **at all** at run-time, node itself would have to
+be configured to know where you've decided to stick stuff. Complexity
+hurdle #1. Since the Node module system is locked, this cannot be
+changed, and is enough to kill this request. But I'll continue, in
+deference to your deity's delicate feelings regarding spelling.
+
+Many of the others are in dependencies that npm uses, which are not
+necessarily tightly coupled to npm (in the sense that they do not read
+npm's configuration files, etc.) Each of these would have to be
+configured to take the name of the `node_modules` folder as a
+parameter. Complexity hurdle #2.
+
+Furthermore, npm has the ability to "bundle" dependencies by adding
+the dep names to the `"bundledDependencies"` list in package.json,
+which causes the folder to be included in the package tarball. What
+if the author of a module bundles its dependencies, and they use a
+different spelling for `node_modules`? npm would have to rename the
+folder at publish time, and then be smart enough to unpack it using
+your locally configured name. Complexity hurdle #3.
+
+Furthermore, what happens when you *change* this name? Fine, it's
+easy enough the first time, just rename the `node_modules` folders to
+`./blergyblerp/` or whatever name you choose. But what about when you
+change it again? npm doesn't currently track any state about past
+configuration settings, so this would be rather difficult to do
+properly. It would have to track every previous value for this
+config, and always accept any of them, or else yesterday's install may
+be broken tomorrow. Complexity hurdle #5.
+
+Never going to happen. The folder is named `node_modules`. It is
+written indelibly in the Node Way, handed down from the ancient times
+of Node 0.3.
+
+## How do I install node with npm?
+
+You don't. Try one of these node version managers:
+
+Unix:
+
+* <http://github.com/isaacs/nave>
+* <http://github.com/visionmedia/n>
+* <http://github.com/creationix/nvm>
+
+Windows:
+
+* <http://github.com/marcelklehr/nodist>
+* <https://github.com/hakobera/nvmw>
+* <https://github.com/nanjingboy/nvmw>
+
+## How can I use npm for development?
+
+See `npm-developers(7)` and `package.json(5)`.
+
+You'll most likely want to `npm link` your development folder. That's
+awesomely handy.
+
+To set up your own private registry, check out `npm-registry(7)`.
+
+## Can I list a url as a dependency?
+
+Yes. It should be a url to a gzipped tarball containing a single folder
+that has a package.json in its root, or a git url.
+(See "what is a package?" above.)
+
+## How do I symlink to a dev folder so I don't have to keep re-installing?
+
+See `npm-link(1)`
+
+## The package registry website. What is that exactly?
+
+See `npm-registry(7)`.
+
+## I forgot my password, and can't publish. How do I reset it?
+
+Go to <https://npmjs.org/forgot>.
+
+## I get ECONNREFUSED a lot. What's up?
+
+Either the registry is down, or node's DNS isn't able to reach out.
+
+To check if the registry is down, open up
+<https://registry.npmjs.org/> in a web browser. This will also tell
+you if you are just unable to access the internet for some reason.
+
+If the registry IS down, let us know by emailing <support@npmjs.com>
+or posting an issue at <https://github.com/npm/npm/issues>. If it's
+down for the world (and not just on your local network) then we're
+probably already being pinged about it.
+
+You can also often get a faster response by visiting the #npm channel
+on Freenode IRC.
+
+## Why no namespaces?
+
+Please see this discussion: <https://github.com/npm/npm/issues/798>
+
+tl;dr - It doesn't actually make things better, and can make them worse.
+
+If you want to namespace your own packages, you may: simply use the
+`-` character to separate the names. npm is a mostly anarchic system.
+There is not sufficient need to impose namespace rules on everyone.
+
+## Who does npm?
+
+npm was originally written by Isaac Z. Schlueter, and many others have
+contributed to it, some of them quite substantially.
+
+The npm open source project, The npm Registry, and [the community
+website](https://www.npmjs.org) are maintained and operated by the
+good folks at [npm, Inc.](https://www.npmjs.com)
+
+## I have a question or request not addressed here. Where should I put it?
+
+Post an issue on the github project:
+
+* <https://github.com/npm/npm/issues>
+
+## Why does npm hate me?
+
+npm is not capable of hatred. It loves everyone, especially you.
+
+## SEE ALSO
+
+* npm(1)
+* npm-developers(7)
+* package.json(5)
+* npm-config(1)
+* npm-config(7)
+* npmrc(5)
+* npm-config(7)
+* npm-folders(5)
diff --git a/deps/npm/doc/misc/npm-index.md b/deps/npm/doc/misc/npm-index.md
new file mode 100644
index 000000000..9f14e51b1
--- /dev/null
+++ b/deps/npm/doc/misc/npm-index.md
@@ -0,0 +1,411 @@
+npm-index(7) -- Index of all npm documentation
+==============================================
+
+## README(1)
+
+node package manager
+
+# Command Line Documentation
+
+## npm(1)
+
+node package manager
+
+## npm-adduser(1)
+
+Add a registry user account
+
+## npm-bin(1)
+
+Display npm bin folder
+
+## npm-bugs(1)
+
+Bugs for a package in a web browser maybe
+
+## npm-build(1)
+
+Build a package
+
+## npm-bundle(1)
+
+REMOVED
+
+## npm-cache(1)
+
+Manipulates packages cache
+
+## npm-completion(1)
+
+Tab Completion for npm
+
+## npm-config(1)
+
+Manage the npm configuration files
+
+## npm-dedupe(1)
+
+Reduce duplication
+
+## npm-deprecate(1)
+
+Deprecate a version of a package
+
+## npm-docs(1)
+
+Docs for a package in a web browser maybe
+
+## npm-edit(1)
+
+Edit an installed package
+
+## npm-explore(1)
+
+Browse an installed package
+
+## npm-help-search(1)
+
+Search npm help documentation
+
+## npm-help(1)
+
+Get help on npm
+
+## npm-init(1)
+
+Interactively create a package.json file
+
+## npm-install(1)
+
+Install a package
+
+## npm-link(1)
+
+Symlink a package folder
+
+## npm-ls(1)
+
+List installed packages
+
+## npm-outdated(1)
+
+Check for outdated packages
+
+## npm-owner(1)
+
+Manage package owners
+
+## npm-pack(1)
+
+Create a tarball from a package
+
+## npm-prefix(1)
+
+Display prefix
+
+## npm-prune(1)
+
+Remove extraneous packages
+
+## npm-publish(1)
+
+Publish a package
+
+## npm-rebuild(1)
+
+Rebuild a package
+
+## npm-repo(1)
+
+Open package repository page in the browser
+
+## npm-restart(1)
+
+Start a package
+
+## npm-rm(1)
+
+Remove a package
+
+## npm-root(1)
+
+Display npm root
+
+## npm-run-script(1)
+
+Run arbitrary package scripts
+
+## npm-search(1)
+
+Search for packages
+
+## npm-shrinkwrap(1)
+
+Lock down dependency versions
+
+## npm-star(1)
+
+Mark your favorite packages
+
+## npm-stars(1)
+
+View packages marked as favorites
+
+## npm-start(1)
+
+Start a package
+
+## npm-stop(1)
+
+Stop a package
+
+## npm-submodule(1)
+
+Add a package as a git submodule
+
+## npm-tag(1)
+
+Tag a published version
+
+## npm-test(1)
+
+Test a package
+
+## npm-uninstall(1)
+
+Remove a package
+
+## npm-unpublish(1)
+
+Remove a package from the registry
+
+## npm-update(1)
+
+Update a package
+
+## npm-version(1)
+
+Bump a package version
+
+## npm-view(1)
+
+View registry info
+
+## npm-whoami(1)
+
+Display npm username
+
+# API Documentation
+
+## npm(3)
+
+node package manager
+
+## npm-bin(3)
+
+Display npm bin folder
+
+## npm-bugs(3)
+
+Bugs for a package in a web browser maybe
+
+## npm-commands(3)
+
+npm commands
+
+## npm-config(3)
+
+Manage the npm configuration files
+
+## npm-deprecate(3)
+
+Deprecate a version of a package
+
+## npm-docs(3)
+
+Docs for a package in a web browser maybe
+
+## npm-edit(3)
+
+Edit an installed package
+
+## npm-explore(3)
+
+Browse an installed package
+
+## npm-help-search(3)
+
+Search the help pages
+
+## npm-init(3)
+
+Interactively create a package.json file
+
+## npm-install(3)
+
+install a package programmatically
+
+## npm-link(3)
+
+Symlink a package folder
+
+## npm-load(3)
+
+Load config settings
+
+## npm-ls(3)
+
+List installed packages
+
+## npm-outdated(3)
+
+Check for outdated packages
+
+## npm-owner(3)
+
+Manage package owners
+
+## npm-pack(3)
+
+Create a tarball from a package
+
+## npm-prefix(3)
+
+Display prefix
+
+## npm-prune(3)
+
+Remove extraneous packages
+
+## npm-publish(3)
+
+Publish a package
+
+## npm-rebuild(3)
+
+Rebuild a package
+
+## npm-repo(3)
+
+Open package repository page in the browser
+
+## npm-restart(3)
+
+Start a package
+
+## npm-root(3)
+
+Display npm root
+
+## npm-run-script(3)
+
+Run arbitrary package scripts
+
+## npm-search(3)
+
+Search for packages
+
+## npm-shrinkwrap(3)
+
+programmatically generate package shrinkwrap file
+
+## npm-start(3)
+
+Start a package
+
+## npm-stop(3)
+
+Stop a package
+
+## npm-submodule(3)
+
+Add a package as a git submodule
+
+## npm-tag(3)
+
+Tag a published version
+
+## npm-test(3)
+
+Test a package
+
+## npm-uninstall(3)
+
+uninstall a package programmatically
+
+## npm-unpublish(3)
+
+Remove a package from the registry
+
+## npm-update(3)
+
+Update a package
+
+## npm-version(3)
+
+Bump a package version
+
+## npm-view(3)
+
+View registry info
+
+## npm-whoami(3)
+
+Display npm username
+
+# Files
+
+## npm-folders(5)
+
+Folder Structures Used by npm
+
+## npmrc(5)
+
+The npm config files
+
+## package.json(5)
+
+Specifics of npm's package.json handling
+
+# Misc
+
+## npm-coding-style(7)
+
+npm's "funny" coding style
+
+## npm-config(7)
+
+More than you probably want to know about npm configuration
+
+## npm-developers(7)
+
+Developer Guide
+
+## npm-disputes(7)
+
+Handling Module Name Disputes
+
+## npm-faq(7)
+
+Frequently Asked Questions
+
+## npm-index(7)
+
+Index of all npm documentation
+
+## npm-registry(7)
+
+The JavaScript Package Registry
+
+## npm-scripts(7)
+
+How npm handles the "scripts" field
+
+## removing-npm(7)
+
+Cleaning the Slate
+
+## semver(7)
+
+The semantic versioner for npm
+
diff --git a/deps/npm/doc/misc/npm-registry.md b/deps/npm/doc/misc/npm-registry.md
new file mode 100644
index 000000000..a8c4b0200
--- /dev/null
+++ b/deps/npm/doc/misc/npm-registry.md
@@ -0,0 +1,69 @@
+npm-registry(7) -- The JavaScript Package Registry
+==================================================
+
+## DESCRIPTION
+
+To resolve packages by name and version, npm talks to a registry website
+that implements the CommonJS Package Registry specification for reading
+package info.
+
+Additionally, npm's package registry implementation supports several
+write APIs as well, to allow for publishing packages and managing user
+account information.
+
+The official public npm registry is at <http://registry.npmjs.org/>. It
+is powered by a CouchDB database at
+<http://isaacs.iriscouch.com/registry>. The code for the couchapp is
+available at <http://github.com/npm/npmjs.org>. npm user accounts
+are CouchDB users, stored in the <http://isaacs.iriscouch.com/_users>
+database.
+
+The registry URL is supplied by the `registry` config parameter. See
+`npm-config(1)`, `npmrc(5)`, and `npm-config(7)` for more on managing
+npm's configuration.
+
+## Can I run my own private registry?
+
+Yes!
+
+The easiest way is to replicate the couch database, and use the same (or
+similar) design doc to implement the APIs.
+
+If you set up continuous replication from the official CouchDB, and then
+set your internal CouchDB as the registry config, then you'll be able
+to read any published packages, in addition to your private ones, and by
+default will only publish internally. If you then want to publish a
+package for the whole world to see, you can simply override the
+`--registry` config for that command.
+
+## I don't want my package published in the official registry. It's private.
+
+Set `"private": true` in your package.json to prevent it from being
+published at all, or
+`"publishConfig":{"registry":"http://my-internal-registry.local"}`
+to force it to be published only to your internal registry.
+
+See `package.json(5)` for more info on what goes in the package.json file.
+
+## Will you replicate from my registry into the public one?
+
+No. If you want things to be public, then publish them into the public
+registry using npm. What little security there is would be for nought
+otherwise.
+
+## Do I have to use couchdb to build a registry that npm can talk to?
+
+No, but it's way easier. Basically, yes, you do, or you have to
+effectively implement the entire CouchDB API anyway.
+
+## Is there a website or something to see package docs and such?
+
+Yes, head over to <https://npmjs.org/>
+
+## SEE ALSO
+
+* npm-config(1)
+* npm-config(7)
+* npmrc(5)
+* npm-developers(7)
+* npm-disputes(7)
diff --git a/deps/npm/doc/misc/npm-scripts.md b/deps/npm/doc/misc/npm-scripts.md
new file mode 100644
index 000000000..02d76f1c4
--- /dev/null
+++ b/deps/npm/doc/misc/npm-scripts.md
@@ -0,0 +1,245 @@
+npm-scripts(7) -- How npm handles the "scripts" field
+=====================================================
+
+## DESCRIPTION
+
+npm supports the "scripts" member of the package.json script, for the
+following scripts:
+
+* prepublish:
+ Run BEFORE the package is published. (Also run on local `npm
+ install` without any arguments.)
+* publish, postpublish:
+ Run AFTER the package is published.
+* preinstall:
+ Run BEFORE the package is installed
+* install, postinstall:
+ Run AFTER the package is installed.
+* preuninstall, uninstall:
+ Run BEFORE the package is uninstalled.
+* postuninstall:
+ Run AFTER the package is uninstalled.
+* preupdate:
+ Run BEFORE the package is updated with the update command.
+* update, postupdate:
+ Run AFTER the package is updated with the update command.
+* pretest, test, posttest:
+ Run by the `npm test` command.
+* prestop, stop, poststop:
+ Run by the `npm stop` command.
+* prestart, start, poststart:
+ Run by the `npm start` command.
+* prerestart, restart, postrestart:
+ Run by the `npm restart` command. Note: `npm restart` will run the
+ stop and start scripts if no `restart` script is provided.
+
+Additionally, arbitrary scripts can be run by doing
+`npm run-script <stage> <pkg>`.
+
+## NOTE: INSTALL SCRIPTS ARE AN ANTIPATTERN
+
+**tl;dr** Don't use `install`. Use a `.gyp` file for compilation, and
+`prepublish` for anything else.
+
+You should almost never have to explicitly set a `preinstall` or
+`install` script. If you are doing this, please consider if there is
+another option.
+
+The only valid use of `install` or `preinstall` scripts is for
+compilation which must be done on the target architecture. In early
+versions of node, this was often done using the `node-waf` scripts, or
+a standalone `Makefile`, and early versions of npm required that it be
+explicitly set in package.json. This was not portable, and harder to
+do properly.
+
+In the current version of node, the standard way to do this is using a
+`.gyp` file. If you have a file with a `.gyp` extension in the root
+of your package, then npm will run the appropriate `node-gyp` commands
+automatically at install time. This is the only officially supported
+method for compiling binary addons, and does not require that you add
+anything to your package.json file.
+
+If you have to do other things before your package is used, in a way
+that is not dependent on the operating system or architecture of the
+target system, then use a `prepublish` script instead. This includes
+tasks such as:
+
+* Compile CoffeeScript source code into JavaScript.
+* Create minified versions of JavaScript source code.
+* Fetching remote resources that your package will use.
+
+The advantage of doing these things at `prepublish` time instead of
+`preinstall` or `install` time is that they can be done once, in a
+single place, and thus greatly reduce complexity and variability.
+Additionally, this means that:
+
+* You can depend on `coffee-script` as a `devDependency`, and thus
+ your users don't need to have it installed.
+* You don't need to include the minifiers in your package, reducing
+ the size for your users.
+* You don't need to rely on your users having `curl` or `wget` or
+ other system tools on the target machines.
+
+## DEFAULT VALUES
+
+npm will default some script values based on package contents.
+
+* `"start": "node server.js"`:
+
+ If there is a `server.js` file in the root of your package, then npm
+ will default the `start` command to `node server.js`.
+
+* `"preinstall": "node-waf clean || true; node-waf configure build"`:
+
+ If there is a `wscript` file in the root of your package, npm will
+ default the `preinstall` command to compile using node-waf.
+
+## USER
+
+If npm was invoked with root privileges, then it will change the uid
+to the user account or uid specified by the `user` config, which
+defaults to `nobody`. Set the `unsafe-perm` flag to run scripts with
+root privileges.
+
+## ENVIRONMENT
+
+Package scripts run in an environment where many pieces of information
+are made available regarding the setup of npm and the current state of
+the process.
+
+
+### path
+
+If you depend on modules that define executable scripts, like test
+suites, then those executables will be added to the `PATH` for
+executing the scripts. So, if your package.json has this:
+
+ { "name" : "foo"
+ , "dependencies" : { "bar" : "0.1.x" }
+ , "scripts": { "start" : "bar ./test" } }
+
+then you could run `npm start` to execute the `bar` script, which is
+exported into the `node_modules/.bin` directory on `npm install`.
+
+### package.json vars
+
+The package.json fields are tacked onto the `npm_package_` prefix. So,
+for instance, if you had `{"name":"foo", "version":"1.2.5"}` in your
+package.json file, then your package scripts would have the
+`npm_package_name` environment variable set to "foo", and the
+`npm_package_version` set to "1.2.5"
+
+### configuration
+
+Configuration parameters are put in the environment with the
+`npm_config_` prefix. For instance, you can view the effective `root`
+config by checking the `npm_config_root` environment variable.
+
+### Special: package.json "config" hash
+
+The package.json "config" keys are overwritten in the environment if
+there is a config param of `<name>[@<version>]:<key>`. For example,
+if the package.json has this:
+
+ { "name" : "foo"
+ , "config" : { "port" : "8080" }
+ , "scripts" : { "start" : "node server.js" } }
+
+and the server.js is this:
+
+ http.createServer(...).listen(process.env.npm_package_config_port)
+
+then the user could change the behavior by doing:
+
+ npm config set foo:port 80
+
+### current lifecycle event
+
+Lastly, the `npm_lifecycle_event` environment variable is set to
+whichever stage of the cycle is being executed. So, you could have a
+single script used for different parts of the process which switches
+based on what's currently happening.
+
+Objects are flattened following this format, so if you had
+`{"scripts":{"install":"foo.js"}}` in your package.json, then you'd
+see this in the script:
+
+ process.env.npm_package_scripts_install === "foo.js"
+
+## EXAMPLES
+
+For example, if your package.json contains this:
+
+ { "scripts" :
+ { "install" : "scripts/install.js"
+ , "postinstall" : "scripts/install.js"
+ , "uninstall" : "scripts/uninstall.js"
+ }
+ }
+
+then the `scripts/install.js` will be called for the install,
+post-install, stages of the lifecycle, and the `scripts/uninstall.js`
+would be called when the package is uninstalled. Since
+`scripts/install.js` is running for three different phases, it would
+be wise in this case to look at the `npm_lifecycle_event` environment
+variable.
+
+If you want to run a make command, you can do so. This works just
+fine:
+
+ { "scripts" :
+ { "preinstall" : "./configure"
+ , "install" : "make && make install"
+ , "test" : "make test"
+ }
+ }
+
+## EXITING
+
+Scripts are run by passing the line as a script argument to `sh`.
+
+If the script exits with a code other than 0, then this will abort the
+process.
+
+Note that these script files don't have to be nodejs or even
+javascript programs. They just have to be some kind of executable
+file.
+
+## HOOK SCRIPTS
+
+If you want to run a specific script at a specific lifecycle event for
+ALL packages, then you can use a hook script.
+
+Place an executable file at `node_modules/.hooks/{eventname}`, and
+it'll get run for all packages when they are going through that point
+in the package lifecycle for any packages installed in that root.
+
+Hook scripts are run exactly the same way as package.json scripts.
+That is, they are in a separate child process, with the env described
+above.
+
+## BEST PRACTICES
+
+* Don't exit with a non-zero error code unless you *really* mean it.
+ Except for uninstall scripts, this will cause the npm action to
+ fail, and potentially be rolled back. If the failure is minor or
+ only will prevent some optional features, then it's better to just
+ print a warning and exit successfully.
+* Try not to use scripts to do what npm can do for you. Read through
+ `package.json(5)` to see all the things that you can specify and enable
+ by simply describing your package appropriately. In general, this
+ will lead to a more robust and consistent state.
+* Inspect the env to determine where to put things. For instance, if
+ the `npm_config_binroot` environ is set to `/home/user/bin`, then
+ don't try to install executables into `/usr/local/bin`. The user
+ probably set it up that way for a reason.
+* Don't prefix your script commands with "sudo". If root permissions
+ are required for some reason, then it'll fail with that error, and
+ the user will sudo the npm command in question.
+
+## SEE ALSO
+
+* npm-run-script(1)
+* package.json(5)
+* npm-developers(7)
+* npm-install(1)
diff --git a/deps/npm/doc/cli/removing-npm.md b/deps/npm/doc/misc/removing-npm.md
index bedd28a2f..bedd28a2f 100644
--- a/deps/npm/doc/cli/removing-npm.md
+++ b/deps/npm/doc/misc/removing-npm.md
diff --git a/deps/npm/doc/misc/semver.md b/deps/npm/doc/misc/semver.md
new file mode 100644
index 000000000..176fbcba9
--- /dev/null
+++ b/deps/npm/doc/misc/semver.md
@@ -0,0 +1,142 @@
+semver(7) -- The semantic versioner for npm
+===========================================
+
+## Usage
+
+ $ npm install semver
+
+ semver.valid('1.2.3') // '1.2.3'
+ semver.valid('a.b.c') // null
+ semver.clean(' =v1.2.3 ') // '1.2.3'
+ semver.satisfies('1.2.3', '1.x || >=2.5.0 || 5.0.0 - 7.2.3') // true
+ semver.gt('1.2.3', '9.8.7') // false
+ semver.lt('1.2.3', '9.8.7') // true
+
+As a command-line utility:
+
+ $ semver -h
+
+ Usage: semver <version> [<version> [...]] [-r <range> | -i <inc> | -d <dec>]
+ Test if version(s) satisfy the supplied range(s), and sort them.
+
+ Multiple versions or ranges may be supplied, unless increment
+ or decrement options are specified. In that case, only a single
+ version may be used, and it is incremented by the specified level
+
+ Program exits successfully if any valid version satisfies
+ all supplied ranges, and prints all satisfying versions.
+
+ If no versions are valid, or ranges are not satisfied,
+ then exits failure.
+
+ Versions are printed in ascending order, so supplying
+ multiple versions to the utility will just sort them.
+
+## Versions
+
+A "version" is described by the v2.0.0 specification found at
+<http://semver.org/>.
+
+A leading `"="` or `"v"` character is stripped off and ignored.
+
+## Ranges
+
+The following range styles are supported:
+
+* `1.2.3` A specific version. When nothing else will do. Note that
+ build metadata is still ignored, so `1.2.3+build2012` will satisfy
+ this range.
+* `>1.2.3` Greater than a specific version.
+* `<1.2.3` Less than a specific version. If there is no prerelease
+ tag on the version range, then no prerelease version will be allowed
+ either, even though these are technically "less than".
+* `>=1.2.3` Greater than or equal to. Note that prerelease versions
+ are NOT equal to their "normal" equivalents, so `1.2.3-beta` will
+ not satisfy this range, but `2.3.0-beta` will.
+* `<=1.2.3` Less than or equal to. In this case, prerelease versions
+ ARE allowed, so `1.2.3-beta` would satisfy.
+* `1.2.3 - 2.3.4` := `>=1.2.3 <=2.3.4`
+* `~1.2.3` := `>=1.2.3-0 <1.3.0-0` "Reasonably close to 1.2.3". When
+ using tilde operators, prerelease versions are supported as well,
+ but a prerelease of the next significant digit will NOT be
+ satisfactory, so `1.3.0-beta` will not satisfy `~1.2.3`.
+* `^1.2.3` := `>=1.2.3-0 <2.0.0-0` "Compatible with 1.2.3". When
+ using caret operators, anything from the specified version (including
+ prerelease) will be supported up to, but not including, the next
+ major version (or its prereleases). `1.5.1` will satisfy `^1.2.3`,
+ while `1.2.2` and `2.0.0-beta` will not.
+* `^0.1.3` := `>=0.1.3-0 <0.2.0-0` "Compatible with 0.1.3". 0.x.x versions are
+ special: the first non-zero component indicates potentially breaking changes,
+ meaning the caret operator matches any version with the same first non-zero
+ component starting at the specified version.
+* `^0.0.2` := `=0.0.2` "Only the version 0.0.2 is considered compatible"
+* `~1.2` := `>=1.2.0-0 <1.3.0-0` "Any version starting with 1.2"
+* `^1.2` := `>=1.2.0-0 <2.0.0-0` "Any version compatible with 1.2"
+* `1.2.x` := `>=1.2.0-0 <1.3.0-0` "Any version starting with 1.2"
+* `~1` := `>=1.0.0-0 <2.0.0-0` "Any version starting with 1"
+* `^1` := `>=1.0.0-0 <2.0.0-0` "Any version compatible with 1"
+* `1.x` := `>=1.0.0-0 <2.0.0-0` "Any version starting with 1"
+
+
+Ranges can be joined with either a space (which implies "and") or a
+`||` (which implies "or").
+
+## Functions
+
+All methods and classes take a final `loose` boolean argument that, if
+true, will be more forgiving about not-quite-valid semver strings.
+The resulting output will always be 100% strict, of course.
+
+Strict-mode Comparators and Ranges will be strict about the SemVer
+strings that they parse.
+
+* valid(v): Return the parsed version, or null if it's not valid.
+* inc(v, release): Return the version incremented by the release type
+ (major, minor, patch, or prerelease), or null if it's not valid.
+
+### Comparison
+
+* gt(v1, v2): `v1 > v2`
+* gte(v1, v2): `v1 >= v2`
+* lt(v1, v2): `v1 < v2`
+* lte(v1, v2): `v1 <= v2`
+* eq(v1, v2): `v1 == v2` This is true if they're logically equivalent,
+ even if they're not the exact same string. You already know how to
+ compare strings.
+* neq(v1, v2): `v1 != v2` The opposite of eq.
+* cmp(v1, comparator, v2): Pass in a comparison string, and it'll call
+ the corresponding function above. `"==="` and `"!=="` do simple
+ string comparison, but are included for completeness. Throws if an
+ invalid comparison string is provided.
+* compare(v1, v2): Return 0 if v1 == v2, or 1 if v1 is greater, or -1 if
+ v2 is greater. Sorts in ascending order if passed to Array.sort().
+* rcompare(v1, v2): The reverse of compare. Sorts an array of versions
+ in descending order when passed to Array.sort().
+
+
+### Ranges
+
+* validRange(range): Return the valid range or null if it's not valid
+* satisfies(version, range): Return true if the version satisfies the
+ range.
+* maxSatisfying(versions, range): Return the highest version in the list
+ that satisfies the range, or null if none of them do.
+* gtr(version, range): Return true if version is greater than all the
+ versions possible in the range.
+* ltr(version, range): Return true if version is less than all the
+ versions possible in the range.
+* outside(version, range, hilo): Return true if the version is outside
+ the bounds of the range in either the high or low direction. The
+ `hilo` argument must be either the string `'>'` or `'<'`. (This is
+ the function called by `gtr` and `ltr`.)
+
+Note that, since ranges may be non-contiguous, a version might not be
+greater than a range, less than a range, *or* satisfy a range! For
+example, the range `1.2 <1.2.9 || >2.0.0` would have a hole from `1.2.9`
+until `2.0.0`, so the version `1.2.10` would not be greater than the
+range (because 2.0.1 satisfies, which is higher), nor less than the
+range (since 1.2.8 satisfies, which is lower), and it also does not
+satisfy the range.
+
+If you want to know if a version satisfies or does not satisfy a
+range, use the `satisfies(version, range)` function.
diff --git a/deps/npm/html/api/bin.html b/deps/npm/html/api/bin.html
deleted file mode 100644
index 669433df8..000000000
--- a/deps/npm/html/api/bin.html
+++ /dev/null
@@ -1,54 +0,0 @@
-<!doctype html>
-<html>
- <title>bin</title>
- <meta http-equiv="content-type" value="text/html;utf-8">
- <link rel="stylesheet" type="text/css" href="../static/style.css">
-
- <body>
- <div id="wrapper">
-<h1><a href="../api/bin.html">bin</a></h1> <p>Display npm bin folder</p>
-
-<h2 id="SYNOPSIS">SYNOPSIS</h2>
-
-<pre><code>npm.commands.bin(args, cb)</code></pre>
-
-<h2 id="DESCRIPTION">DESCRIPTION</h2>
-
-<p>Print the folder where npm will install executables.</p>
-
-<p>This function should not be used programmatically. Instead, just refer
-to the <code>npm.bin</code> member.</p>
-</div>
-<p id="footer">bin &mdash; npm@1.2.30</p>
-<script>
-;(function () {
-var wrapper = document.getElementById("wrapper")
-var els = Array.prototype.slice.call(wrapper.getElementsByTagName("*"), 0)
- .filter(function (el) {
- return el.parentNode === wrapper
- && el.tagName.match(/H[1-6]/)
- && el.id
- })
-var l = 2
- , toc = document.createElement("ul")
-toc.innerHTML = els.map(function (el) {
- var i = el.tagName.charAt(1)
- , out = ""
- while (i > l) {
- out += "<ul>"
- l ++
- }
- while (i < l) {
- out += "</ul>"
- l --
- }
- out += "<li><a href='#" + el.id + "'>" +
- ( el.innerText || el.text || el.innerHTML)
- + "</a>"
- return out
-}).join("\n")
-toc.id = "toc"
-document.body.appendChild(toc)
-})()
-</script>
-</body></html>
diff --git a/deps/npm/html/api/bugs.html b/deps/npm/html/api/bugs.html
deleted file mode 100644
index 0c2c1cc74..000000000
--- a/deps/npm/html/api/bugs.html
+++ /dev/null
@@ -1,60 +0,0 @@
-<!doctype html>
-<html>
- <title>bugs</title>
- <meta http-equiv="content-type" value="text/html;utf-8">
- <link rel="stylesheet" type="text/css" href="../static/style.css">
-
- <body>
- <div id="wrapper">
-<h1><a href="../api/bugs.html">bugs</a></h1> <p>Bugs for a package in a web browser maybe</p>
-
-<h2 id="SYNOPSIS">SYNOPSIS</h2>
-
-<pre><code>npm.commands.bugs(package, callback)</code></pre>
-
-<h2 id="DESCRIPTION">DESCRIPTION</h2>
-
-<p>This command tries to guess at the likely location of a package&#39;s
-bug tracker URL, and then tries to open it using the <code>--browser</code>
-config param.</p>
-
-<p>Like other commands, the first parameter is an array. This command only
-uses the first element, which is expected to be a package name with an
-optional version number.</p>
-
-<p>This command will launch a browser, so this command may not be the most
-friendly for programmatic use.</p>
-</div>
-<p id="footer">bugs &mdash; npm@1.2.30</p>
-<script>
-;(function () {
-var wrapper = document.getElementById("wrapper")
-var els = Array.prototype.slice.call(wrapper.getElementsByTagName("*"), 0)
- .filter(function (el) {
- return el.parentNode === wrapper
- && el.tagName.match(/H[1-6]/)
- && el.id
- })
-var l = 2
- , toc = document.createElement("ul")
-toc.innerHTML = els.map(function (el) {
- var i = el.tagName.charAt(1)
- , out = ""
- while (i > l) {
- out += "<ul>"
- l ++
- }
- while (i < l) {
- out += "</ul>"
- l --
- }
- out += "<li><a href='#" + el.id + "'>" +
- ( el.innerText || el.text || el.innerHTML)
- + "</a>"
- return out
-}).join("\n")
-toc.id = "toc"
-document.body.appendChild(toc)
-})()
-</script>
-</body></html>
diff --git a/deps/npm/html/api/commands.html b/deps/npm/html/api/commands.html
deleted file mode 100644
index b6bcc4169..000000000
--- a/deps/npm/html/api/commands.html
+++ /dev/null
@@ -1,63 +0,0 @@
-<!doctype html>
-<html>
- <title>commands</title>
- <meta http-equiv="content-type" value="text/html;utf-8">
- <link rel="stylesheet" type="text/css" href="../static/style.css">
-
- <body>
- <div id="wrapper">
-<h1><a href="../api/commands.html">commands</a></h1> <p>npm commands</p>
-
-<h2 id="SYNOPSIS">SYNOPSIS</h2>
-
-<pre><code>npm.commands[&lt;command&gt;](args, callback)</code></pre>
-
-<h2 id="DESCRIPTION">DESCRIPTION</h2>
-
-<p>npm comes with a full set of commands, and each of the commands takes a
-similar set of arguments.</p>
-
-<p>In general, all commands on the command object take an <strong>array</strong> of positional
-argument <strong>strings</strong>. The last argument to any function is a callback. Some
-commands are special and take other optional arguments.</p>
-
-<p>All commands have their own man page. See <code>man npm-&lt;command&gt;</code> for command-line
-usage, or <code>man 3 npm-&lt;command&gt;</code> for programmatic usage.</p>
-
-<h2 id="SEE-ALSO">SEE ALSO</h2>
-
-<ul><li><a href="../doc/index.html">index(1)</a></li></ul>
-</div>
-<p id="footer">commands &mdash; npm@1.2.30</p>
-<script>
-;(function () {
-var wrapper = document.getElementById("wrapper")
-var els = Array.prototype.slice.call(wrapper.getElementsByTagName("*"), 0)
- .filter(function (el) {
- return el.parentNode === wrapper
- && el.tagName.match(/H[1-6]/)
- && el.id
- })
-var l = 2
- , toc = document.createElement("ul")
-toc.innerHTML = els.map(function (el) {
- var i = el.tagName.charAt(1)
- , out = ""
- while (i > l) {
- out += "<ul>"
- l ++
- }
- while (i < l) {
- out += "</ul>"
- l --
- }
- out += "<li><a href='#" + el.id + "'>" +
- ( el.innerText || el.text || el.innerHTML)
- + "</a>"
- return out
-}).join("\n")
-toc.id = "toc"
-document.body.appendChild(toc)
-})()
-</script>
-</body></html>
diff --git a/deps/npm/html/api/config.html b/deps/npm/html/api/config.html
deleted file mode 100644
index 476a5a420..000000000
--- a/deps/npm/html/api/config.html
+++ /dev/null
@@ -1,68 +0,0 @@
-<!doctype html>
-<html>
- <title>config</title>
- <meta http-equiv="content-type" value="text/html;utf-8">
- <link rel="stylesheet" type="text/css" href="../static/style.css">
-
- <body>
- <div id="wrapper">
-<h1><a href="../api/config.html">config</a></h1> <p>Manage the npm configuration files</p>
-
-<h2 id="SYNOPSIS">SYNOPSIS</h2>
-
-<pre><code>npm.commands.config(args, callback)
-var val = npm.config.get(key)
-npm.config.set(key, val)</code></pre>
-
-<h2 id="DESCRIPTION">DESCRIPTION</h2>
-
-<p>This function acts much the same way as the command-line version. The first
-element in the array tells config what to do. Possible values are:</p>
-
-<ul><li><p><code>set</code></p><p>Sets a config parameter. The second element in <code>args</code> is interpreted as the
-key, and the third element is interpreted as the value.</p></li><li><p><code>get</code></p><p>Gets the value of a config parameter. The second element in <code>args</code> is the
-key to get the value of.</p></li><li><p><code>delete</code> (<code>rm</code> or <code>del</code>)</p><p>Deletes a parameter from the config. The second element in <code>args</code> is the
-key to delete.</p></li><li><p><code>list</code> (<code>ls</code>)</p><p>Show all configs that aren&#39;t secret. No parameters necessary.</p></li><li><p><code>edit</code>:</p><p>Opens the config file in the default editor. This command isn&#39;t very useful
-programmatically, but it is made available.</p></li></ul>
-
-<p>To programmatically access npm configuration settings, or set them for
-the duration of a program, use the <code>npm.config.set</code> and <code>npm.config.get</code>
-functions instead.</p>
-
-<h2 id="SEE-ALSO">SEE ALSO</h2>
-
-<ul><li><a href="../api/npm.html">npm(3)</a></li></ul>
-</div>
-<p id="footer">config &mdash; npm@1.2.30</p>
-<script>
-;(function () {
-var wrapper = document.getElementById("wrapper")
-var els = Array.prototype.slice.call(wrapper.getElementsByTagName("*"), 0)
- .filter(function (el) {
- return el.parentNode === wrapper
- && el.tagName.match(/H[1-6]/)
- && el.id
- })
-var l = 2
- , toc = document.createElement("ul")
-toc.innerHTML = els.map(function (el) {
- var i = el.tagName.charAt(1)
- , out = ""
- while (i > l) {
- out += "<ul>"
- l ++
- }
- while (i < l) {
- out += "</ul>"
- l --
- }
- out += "<li><a href='#" + el.id + "'>" +
- ( el.innerText || el.text || el.innerHTML)
- + "</a>"
- return out
-}).join("\n")
-toc.id = "toc"
-document.body.appendChild(toc)
-})()
-</script>
-</body></html>
diff --git a/deps/npm/html/api/deprecate.html b/deps/npm/html/api/deprecate.html
deleted file mode 100644
index e257e010d..000000000
--- a/deps/npm/html/api/deprecate.html
+++ /dev/null
@@ -1,67 +0,0 @@
-<!doctype html>
-<html>
- <title>deprecate</title>
- <meta http-equiv="content-type" value="text/html;utf-8">
- <link rel="stylesheet" type="text/css" href="../static/style.css">
-
- <body>
- <div id="wrapper">
-<h1><a href="../api/deprecate.html">deprecate</a></h1> <p>Deprecate a version of a package</p>
-
-<h2 id="SYNOPSIS">SYNOPSIS</h2>
-
-<pre><code>npm.commands.deprecate(args, callback)</code></pre>
-
-<h2 id="DESCRIPTION">DESCRIPTION</h2>
-
-<p>This command will update the npm registry entry for a package, providing
-a deprecation warning to all who attempt to install it.</p>
-
-<p>The &#39;args&#39; parameter must have exactly two elements:</p>
-
-<ul><li><p><code>package[@version]</code></p><p>The <code>version</code> portion is optional, and may be either a range, or a
-specific version, or a tag.</p></li><li><p><code>message</code></p><p>The warning message that will be printed whenever a user attempts to
-install the package.</p></li></ul>
-
-<p>Note that you must be the package owner to deprecate something. See the
-<code>owner</code> and <code>adduser</code> help topics.</p>
-
-<p>To un-deprecate a package, specify an empty string (<code>&quot;&quot;</code>) for the <code>message</code> argument.</p>
-
-<h2 id="SEE-ALSO">SEE ALSO</h2>
-
-<ul><li><a href="../api/publish.html">publish(3)</a></li><li><a href="../api/unpublish.html">unpublish(3)</a></li><li><a href="../doc/registry.html">registry(1)</a></li></ul>
-</div>
-<p id="footer">deprecate &mdash; npm@1.2.30</p>
-<script>
-;(function () {
-var wrapper = document.getElementById("wrapper")
-var els = Array.prototype.slice.call(wrapper.getElementsByTagName("*"), 0)
- .filter(function (el) {
- return el.parentNode === wrapper
- && el.tagName.match(/H[1-6]/)
- && el.id
- })
-var l = 2
- , toc = document.createElement("ul")
-toc.innerHTML = els.map(function (el) {
- var i = el.tagName.charAt(1)
- , out = ""
- while (i > l) {
- out += "<ul>"
- l ++
- }
- while (i < l) {
- out += "</ul>"
- l --
- }
- out += "<li><a href='#" + el.id + "'>" +
- ( el.innerText || el.text || el.innerHTML)
- + "</a>"
- return out
-}).join("\n")
-toc.id = "toc"
-document.body.appendChild(toc)
-})()
-</script>
-</body></html>
diff --git a/deps/npm/html/api/docs.html b/deps/npm/html/api/docs.html
deleted file mode 100644
index 144839443..000000000
--- a/deps/npm/html/api/docs.html
+++ /dev/null
@@ -1,60 +0,0 @@
-<!doctype html>
-<html>
- <title>docs</title>
- <meta http-equiv="content-type" value="text/html;utf-8">
- <link rel="stylesheet" type="text/css" href="../static/style.css">
-
- <body>
- <div id="wrapper">
-<h1><a href="../api/docs.html">docs</a></h1> <p>Docs for a package in a web browser maybe</p>
-
-<h2 id="SYNOPSIS">SYNOPSIS</h2>
-
-<pre><code>npm.commands.docs(package, callback)</code></pre>
-
-<h2 id="DESCRIPTION">DESCRIPTION</h2>
-
-<p>This command tries to guess at the likely location of a package&#39;s
-documentation URL, and then tries to open it using the <code>--browser</code>
-config param.</p>
-
-<p>Like other commands, the first parameter is an array. This command only
-uses the first element, which is expected to be a package name with an
-optional version number.</p>
-
-<p>This command will launch a browser, so this command may not be the most
-friendly for programmatic use.</p>
-</div>
-<p id="footer">docs &mdash; npm@1.2.30</p>
-<script>
-;(function () {
-var wrapper = document.getElementById("wrapper")
-var els = Array.prototype.slice.call(wrapper.getElementsByTagName("*"), 0)
- .filter(function (el) {
- return el.parentNode === wrapper
- && el.tagName.match(/H[1-6]/)
- && el.id
- })
-var l = 2
- , toc = document.createElement("ul")
-toc.innerHTML = els.map(function (el) {
- var i = el.tagName.charAt(1)
- , out = ""
- while (i > l) {
- out += "<ul>"
- l ++
- }
- while (i < l) {
- out += "</ul>"
- l --
- }
- out += "<li><a href='#" + el.id + "'>" +
- ( el.innerText || el.text || el.innerHTML)
- + "</a>"
- return out
-}).join("\n")
-toc.id = "toc"
-document.body.appendChild(toc)
-})()
-</script>
-</body></html>
diff --git a/deps/npm/html/api/edit.html b/deps/npm/html/api/edit.html
deleted file mode 100644
index aed880a9f..000000000
--- a/deps/npm/html/api/edit.html
+++ /dev/null
@@ -1,65 +0,0 @@
-<!doctype html>
-<html>
- <title>edit</title>
- <meta http-equiv="content-type" value="text/html;utf-8">
- <link rel="stylesheet" type="text/css" href="../static/style.css">
-
- <body>
- <div id="wrapper">
-<h1><a href="../api/edit.html">edit</a></h1> <p>Edit an installed package</p>
-
-<h2 id="SYNOPSIS">SYNOPSIS</h2>
-
-<pre><code>npm.commands.edit(package, callback)</code></pre>
-
-<h2 id="DESCRIPTION">DESCRIPTION</h2>
-
-<p>Opens the package folder in the default editor (or whatever you&#39;ve
-configured as the npm <code>editor</code> config -- see <code>npm help config</code>.)</p>
-
-<p>After it has been edited, the package is rebuilt so as to pick up any
-changes in compiled packages.</p>
-
-<p>For instance, you can do <code>npm install connect</code> to install connect
-into your package, and then <code>npm.commands.edit([&quot;connect&quot;], callback)</code>
-to make a few changes to your locally installed copy.</p>
-
-<p>The first parameter is a string array with a single element, the package
-to open. The package can optionally have a version number attached.</p>
-
-<p>Since this command opens an editor in a new process, be careful about where
-and how this is used.</p>
-</div>
-<p id="footer">edit &mdash; npm@1.2.30</p>
-<script>
-;(function () {
-var wrapper = document.getElementById("wrapper")
-var els = Array.prototype.slice.call(wrapper.getElementsByTagName("*"), 0)
- .filter(function (el) {
- return el.parentNode === wrapper
- && el.tagName.match(/H[1-6]/)
- && el.id
- })
-var l = 2
- , toc = document.createElement("ul")
-toc.innerHTML = els.map(function (el) {
- var i = el.tagName.charAt(1)
- , out = ""
- while (i > l) {
- out += "<ul>"
- l ++
- }
- while (i < l) {
- out += "</ul>"
- l --
- }
- out += "<li><a href='#" + el.id + "'>" +
- ( el.innerText || el.text || el.innerHTML)
- + "</a>"
- return out
-}).join("\n")
-toc.id = "toc"
-document.body.appendChild(toc)
-})()
-</script>
-</body></html>
diff --git a/deps/npm/html/api/explore.html b/deps/npm/html/api/explore.html
deleted file mode 100644
index 029811666..000000000
--- a/deps/npm/html/api/explore.html
+++ /dev/null
@@ -1,59 +0,0 @@
-<!doctype html>
-<html>
- <title>explore</title>
- <meta http-equiv="content-type" value="text/html;utf-8">
- <link rel="stylesheet" type="text/css" href="../static/style.css">
-
- <body>
- <div id="wrapper">
-<h1><a href="../api/explore.html">explore</a></h1> <p>Browse an installed package</p>
-
-<h2 id="SYNOPSIS">SYNOPSIS</h2>
-
-<pre><code>npm.commands.explore(args, callback)</code></pre>
-
-<h2 id="DESCRIPTION">DESCRIPTION</h2>
-
-<p>Spawn a subshell in the directory of the installed package specified.</p>
-
-<p>If a command is specified, then it is run in the subshell, which then
-immediately terminates.</p>
-
-<p>Note that the package is <em>not</em> automatically rebuilt afterwards, so be
-sure to use <code>npm rebuild &lt;pkg&gt;</code> if you make any changes.</p>
-
-<p>The first element in the &#39;args&#39; parameter must be a package name. After that is the optional command, which can be any number of strings. All of the strings will be combined into one, space-delimited command.</p>
-</div>
-<p id="footer">explore &mdash; npm@1.2.30</p>
-<script>
-;(function () {
-var wrapper = document.getElementById("wrapper")
-var els = Array.prototype.slice.call(wrapper.getElementsByTagName("*"), 0)
- .filter(function (el) {
- return el.parentNode === wrapper
- && el.tagName.match(/H[1-6]/)
- && el.id
- })
-var l = 2
- , toc = document.createElement("ul")
-toc.innerHTML = els.map(function (el) {
- var i = el.tagName.charAt(1)
- , out = ""
- while (i > l) {
- out += "<ul>"
- l ++
- }
- while (i < l) {
- out += "</ul>"
- l --
- }
- out += "<li><a href='#" + el.id + "'>" +
- ( el.innerText || el.text || el.innerHTML)
- + "</a>"
- return out
-}).join("\n")
-toc.id = "toc"
-document.body.appendChild(toc)
-})()
-</script>
-</body></html>
diff --git a/deps/npm/html/api/help-search.html b/deps/npm/html/api/help-search.html
deleted file mode 100644
index 41ec2cab9..000000000
--- a/deps/npm/html/api/help-search.html
+++ /dev/null
@@ -1,67 +0,0 @@
-<!doctype html>
-<html>
- <title>help-search</title>
- <meta http-equiv="content-type" value="text/html;utf-8">
- <link rel="stylesheet" type="text/css" href="../static/style.css">
-
- <body>
- <div id="wrapper">
-<h1><a href="../api/help-search.html">help-search</a></h1> <p>Search the help pages</p>
-
-<h2 id="SYNOPSIS">SYNOPSIS</h2>
-
-<pre><code>npm.commands.helpSearch(args, [silent,] callback)</code></pre>
-
-<h2 id="DESCRIPTION">DESCRIPTION</h2>
-
-<p>This command is rarely useful, but it exists in the rare case that it is.</p>
-
-<p>This command takes an array of search terms and returns the help pages that
-match in order of best match.</p>
-
-<p>If there is only one match, then npm displays that help section. If there
-are multiple results, the results are printed to the screen formatted and the
-array of results is returned. Each result is an object with these properties:</p>
-
-<ul><li>hits:
-A map of args to number of hits on that arg. For example, {&quot;npm&quot;: 3}</li><li>found:
-Total number of unique args that matched.</li><li>totalHits:
-Total number of hits.</li><li>lines:
-An array of all matching lines (and some adjacent lines).</li><li>file:
-Name of the file that matched</li></ul>
-
-<p>The silent parameter is not neccessary not used, but it may in the future.</p>
-</div>
-<p id="footer">help-search &mdash; npm@1.2.30</p>
-<script>
-;(function () {
-var wrapper = document.getElementById("wrapper")
-var els = Array.prototype.slice.call(wrapper.getElementsByTagName("*"), 0)
- .filter(function (el) {
- return el.parentNode === wrapper
- && el.tagName.match(/H[1-6]/)
- && el.id
- })
-var l = 2
- , toc = document.createElement("ul")
-toc.innerHTML = els.map(function (el) {
- var i = el.tagName.charAt(1)
- , out = ""
- while (i > l) {
- out += "<ul>"
- l ++
- }
- while (i < l) {
- out += "</ul>"
- l --
- }
- out += "<li><a href='#" + el.id + "'>" +
- ( el.innerText || el.text || el.innerHTML)
- + "</a>"
- return out
-}).join("\n")
-toc.id = "toc"
-document.body.appendChild(toc)
-})()
-</script>
-</body></html>
diff --git a/deps/npm/html/api/init.html b/deps/npm/html/api/init.html
deleted file mode 100644
index 0aa0a1d56..000000000
--- a/deps/npm/html/api/init.html
+++ /dev/null
@@ -1,70 +0,0 @@
-<!doctype html>
-<html>
- <title>init</title>
- <meta http-equiv="content-type" value="text/html;utf-8">
- <link rel="stylesheet" type="text/css" href="../static/style.css">
-
- <body>
- <div id="wrapper">
-<h1>npm init(3)</h1> <p>Interactively create a package.json file</p>
-
-<h2 id="SYNOPSIS">SYNOPSIS</h2>
-
-<pre><code>npm.commands.init(args, callback)</code></pre>
-
-<h2 id="DESCRIPTION">DESCRIPTION</h2>
-
-<p>This will ask you a bunch of questions, and then write a package.json for you.</p>
-
-<p>It attempts to make reasonable guesses about what you want things to be set to,
-and then writes a package.json file with the options you&#39;ve selected.</p>
-
-<p>If you already have a package.json file, it&#39;ll read that first, and default to
-the options in there.</p>
-
-<p>It is strictly additive, so it does not delete options from your package.json
-without a really good reason to do so.</p>
-
-<p>Since this function expects to be run on the command-line, it doesn&#39;t work very
-well as a programmatically. The best option is to roll your own, and since
-JavaScript makes it stupid simple to output formatted JSON, that is the
-preferred method. If you&#39;re sure you want to handle command-line prompting,
-then go ahead and use this programmatically.</p>
-
-<h2 id="SEE-ALSO">SEE ALSO</h2>
-
-<p><a href="../doc/json.html">json(1)</a></p>
-</div>
-<p id="footer">init &mdash; npm@1.2.30</p>
-<script>
-;(function () {
-var wrapper = document.getElementById("wrapper")
-var els = Array.prototype.slice.call(wrapper.getElementsByTagName("*"), 0)
- .filter(function (el) {
- return el.parentNode === wrapper
- && el.tagName.match(/H[1-6]/)
- && el.id
- })
-var l = 2
- , toc = document.createElement("ul")
-toc.innerHTML = els.map(function (el) {
- var i = el.tagName.charAt(1)
- , out = ""
- while (i > l) {
- out += "<ul>"
- l ++
- }
- while (i < l) {
- out += "</ul>"
- l --
- }
- out += "<li><a href='#" + el.id + "'>" +
- ( el.innerText || el.text || el.innerHTML)
- + "</a>"
- return out
-}).join("\n")
-toc.id = "toc"
-document.body.appendChild(toc)
-})()
-</script>
-</body></html>
diff --git a/deps/npm/html/api/install.html b/deps/npm/html/api/install.html
deleted file mode 100644
index 9db79d24f..000000000
--- a/deps/npm/html/api/install.html
+++ /dev/null
@@ -1,60 +0,0 @@
-<!doctype html>
-<html>
- <title>install</title>
- <meta http-equiv="content-type" value="text/html;utf-8">
- <link rel="stylesheet" type="text/css" href="../static/style.css">
-
- <body>
- <div id="wrapper">
-<h1><a href="../api/install.html">install</a></h1> <p>install a package programmatically</p>
-
-<h2 id="SYNOPSIS">SYNOPSIS</h2>
-
-<pre><code>npm.commands.install([where,] packages, callback)</code></pre>
-
-<h2 id="DESCRIPTION">DESCRIPTION</h2>
-
-<p>This acts much the same ways as installing on the command-line.</p>
-
-<p>The &#39;where&#39; parameter is optional and only used internally, and it specifies
-where the packages should be installed to.</p>
-
-<p>The &#39;packages&#39; parameter is an array of strings. Each element in the array is
-the name of a package to be installed.</p>
-
-<p>Finally, &#39;callback&#39; is a function that will be called when all packages have been
-installed or when an error has been encountered.</p>
-</div>
-<p id="footer">install &mdash; npm@1.2.30</p>
-<script>
-;(function () {
-var wrapper = document.getElementById("wrapper")
-var els = Array.prototype.slice.call(wrapper.getElementsByTagName("*"), 0)
- .filter(function (el) {
- return el.parentNode === wrapper
- && el.tagName.match(/H[1-6]/)
- && el.id
- })
-var l = 2
- , toc = document.createElement("ul")
-toc.innerHTML = els.map(function (el) {
- var i = el.tagName.charAt(1)
- , out = ""
- while (i > l) {
- out += "<ul>"
- l ++
- }
- while (i < l) {
- out += "</ul>"
- l --
- }
- out += "<li><a href='#" + el.id + "'>" +
- ( el.innerText || el.text || el.innerHTML)
- + "</a>"
- return out
-}).join("\n")
-toc.id = "toc"
-document.body.appendChild(toc)
-})()
-</script>
-</body></html>
diff --git a/deps/npm/html/api/link.html b/deps/npm/html/api/link.html
deleted file mode 100644
index f8f94f8ca..000000000
--- a/deps/npm/html/api/link.html
+++ /dev/null
@@ -1,74 +0,0 @@
-<!doctype html>
-<html>
- <title>link</title>
- <meta http-equiv="content-type" value="text/html;utf-8">
- <link rel="stylesheet" type="text/css" href="../static/style.css">
-
- <body>
- <div id="wrapper">
-<h1><a href="../api/link.html">link</a></h1> <p>Symlink a package folder</p>
-
-<h2 id="SYNOPSIS">SYNOPSIS</h2>
-
-<pre><code>npm.command.link(callback)
-npm.command.link(packages, callback)</code></pre>
-
-<h2 id="DESCRIPTION">DESCRIPTION</h2>
-
-<p>Package linking is a two-step process.</p>
-
-<p>Without parameters, link will create a globally-installed
-symbolic link from <code>prefix/package-name</code> to the current folder.</p>
-
-<p>With a parameters, link will create a symlink from the local <code>node_modules</code>
-folder to the global symlink.</p>
-
-<p>When creating tarballs for <code>npm publish</code>, the linked packages are
-&quot;snapshotted&quot; to their current state by resolving the symbolic links.</p>
-
-<p>This is
-handy for installing your own stuff, so that you can work on it and test it
-iteratively without having to continually rebuild.</p>
-
-<p>For example:</p>
-
-<pre><code>npm.commands.link(cb) # creates global link from the cwd
- # (say redis package)
-npm.commands.link(&#39;redis&#39;, cb) # link-install the package</code></pre>
-
-<p>Now, any changes to the redis package will be reflected in
-the package in the current working directory</p>
-</div>
-<p id="footer">link &mdash; npm@1.2.30</p>
-<script>
-;(function () {
-var wrapper = document.getElementById("wrapper")
-var els = Array.prototype.slice.call(wrapper.getElementsByTagName("*"), 0)
- .filter(function (el) {
- return el.parentNode === wrapper
- && el.tagName.match(/H[1-6]/)
- && el.id
- })
-var l = 2
- , toc = document.createElement("ul")
-toc.innerHTML = els.map(function (el) {
- var i = el.tagName.charAt(1)
- , out = ""
- while (i > l) {
- out += "<ul>"
- l ++
- }
- while (i < l) {
- out += "</ul>"
- l --
- }
- out += "<li><a href='#" + el.id + "'>" +
- ( el.innerText || el.text || el.innerHTML)
- + "</a>"
- return out
-}).join("\n")
-toc.id = "toc"
-document.body.appendChild(toc)
-})()
-</script>
-</body></html>
diff --git a/deps/npm/html/api/load.html b/deps/npm/html/api/load.html
deleted file mode 100644
index 91e963ec8..000000000
--- a/deps/npm/html/api/load.html
+++ /dev/null
@@ -1,67 +0,0 @@
-<!doctype html>
-<html>
- <title>load</title>
- <meta http-equiv="content-type" value="text/html;utf-8">
- <link rel="stylesheet" type="text/css" href="../static/style.css">
-
- <body>
- <div id="wrapper">
-<h1><a href="../api/load.html">load</a></h1> <p>Load config settings</p>
-
-<h2 id="SYNOPSIS">SYNOPSIS</h2>
-
-<pre><code>npm.load(conf, cb)</code></pre>
-
-<h2 id="DESCRIPTION">DESCRIPTION</h2>
-
-<p>npm.load() must be called before any other function call. Both parameters are
-optional, but the second is recommended.</p>
-
-<p>The first parameter is an object hash of command-line config params, and the
-second parameter is a callback that will be called when npm is loaded and
-ready to serve.</p>
-
-<p>The first parameter should follow a similar structure as the package.json
-config object.</p>
-
-<p>For example, to emulate the --dev flag, pass an object that looks like this:</p>
-
-<pre><code>{
- &quot;dev&quot;: true
-}</code></pre>
-
-<p>For a list of all the available command-line configs, see <code>npm help config</code></p>
-</div>
-<p id="footer">load &mdash; npm@1.2.30</p>
-<script>
-;(function () {
-var wrapper = document.getElementById("wrapper")
-var els = Array.prototype.slice.call(wrapper.getElementsByTagName("*"), 0)
- .filter(function (el) {
- return el.parentNode === wrapper
- && el.tagName.match(/H[1-6]/)
- && el.id
- })
-var l = 2
- , toc = document.createElement("ul")
-toc.innerHTML = els.map(function (el) {
- var i = el.tagName.charAt(1)
- , out = ""
- while (i > l) {
- out += "<ul>"
- l ++
- }
- while (i < l) {
- out += "</ul>"
- l --
- }
- out += "<li><a href='#" + el.id + "'>" +
- ( el.innerText || el.text || el.innerHTML)
- + "</a>"
- return out
-}).join("\n")
-toc.id = "toc"
-document.body.appendChild(toc)
-})()
-</script>
-</body></html>
diff --git a/deps/npm/html/api/ls.html b/deps/npm/html/api/ls.html
deleted file mode 100644
index 09420678c..000000000
--- a/deps/npm/html/api/ls.html
+++ /dev/null
@@ -1,94 +0,0 @@
-<!doctype html>
-<html>
- <title>ls</title>
- <meta http-equiv="content-type" value="text/html;utf-8">
- <link rel="stylesheet" type="text/css" href="../static/style.css">
-
- <body>
- <div id="wrapper">
-<h1><a href="../api/ls.html">ls</a></h1> <p>List installed packages</p>
-
-<h2 id="SYNOPSIS">SYNOPSIS</h2>
-
-<pre><code>npm.commands.ls(args, [silent,] callback)</code></pre>
-
-<h2 id="DESCRIPTION">DESCRIPTION</h2>
-
-<p>This command will print to stdout all the versions of packages that are
-installed, as well as their dependencies, in a tree-structure. It will also
-return that data using the callback.</p>
-
-<p>This command does not take any arguments, but args must be defined.
-Beyond that, if any arguments are passed in, npm will politely warn that it
-does not take positional arguments, though you may set config flags
-like with any other command, such as <code>global</code> to list global packages.</p>
-
-<p>It will print out extraneous, missing, and invalid packages.</p>
-
-<p>If the silent parameter is set to true, nothing will be output to the screen,
-but the data will still be returned.</p>
-
-<p>Callback is provided an error if one occurred, the full data about which
-packages are installed and which dependencies they will receive, and a
-&quot;lite&quot; data object which just shows which versions are installed where.
-Note that the full data object is a circular structure, so care must be
-taken if it is serialized to JSON.</p>
-
-<h2 id="CONFIGURATION">CONFIGURATION</h2>
-
-<h3 id="long">long</h3>
-
-<ul><li>Default: false</li><li>Type: Boolean</li></ul>
-
-<p>Show extended information.</p>
-
-<h3 id="parseable">parseable</h3>
-
-<ul><li>Default: false</li><li>Type: Boolean</li></ul>
-
-<p>Show parseable output instead of tree view.</p>
-
-<h3 id="global">global</h3>
-
-<ul><li>Default: false</li><li>Type: Boolean</li></ul>
-
-<p>List packages in the global install prefix instead of in the current
-project.</p>
-
-<p>Note, if parseable is set or long isn&#39;t set, then duplicates will be trimmed.
-This means that if a submodule a same dependency as a parent module, then the
-dependency will only be output once.</p>
-</div>
-<p id="footer">ls &mdash; npm@1.2.30</p>
-<script>
-;(function () {
-var wrapper = document.getElementById("wrapper")
-var els = Array.prototype.slice.call(wrapper.getElementsByTagName("*"), 0)
- .filter(function (el) {
- return el.parentNode === wrapper
- && el.tagName.match(/H[1-6]/)
- && el.id
- })
-var l = 2
- , toc = document.createElement("ul")
-toc.innerHTML = els.map(function (el) {
- var i = el.tagName.charAt(1)
- , out = ""
- while (i > l) {
- out += "<ul>"
- l ++
- }
- while (i < l) {
- out += "</ul>"
- l --
- }
- out += "<li><a href='#" + el.id + "'>" +
- ( el.innerText || el.text || el.innerHTML)
- + "</a>"
- return out
-}).join("\n")
-toc.id = "toc"
-document.body.appendChild(toc)
-})()
-</script>
-</body></html>
diff --git a/deps/npm/html/api/npm.html b/deps/npm/html/api/npm.html
deleted file mode 100644
index 5b2555f1c..000000000
--- a/deps/npm/html/api/npm.html
+++ /dev/null
@@ -1,127 +0,0 @@
-<!doctype html>
-<html>
- <title>npm</title>
- <meta http-equiv="content-type" value="text/html;utf-8">
- <link rel="stylesheet" type="text/css" href="../static/style.css">
-
- <body>
- <div id="wrapper">
-<h1><a href="../api/npm.html">npm</a></h1> <p>node package manager</p>
-
-<h2 id="SYNOPSIS">SYNOPSIS</h2>
-
-<pre><code>var npm = require(&quot;npm&quot;)
-npm.load([configObject,] function (er, npm) {
- // use the npm object, now that it&#39;s loaded.
-
- npm.config.set(key, val)
- val = npm.config.get(key)
-
- console.log(&quot;prefix = %s&quot;, npm.prefix)
-
- npm.commands.install([&quot;package&quot;], cb)
-})</code></pre>
-
-<h2 id="VERSION">VERSION</h2>
-
-<p>1.2.30</p>
-
-<h2 id="DESCRIPTION">DESCRIPTION</h2>
-
-<p>This is the API documentation for npm.
-To find documentation of the command line
-client, see <code><a href="../doc/npm.html">npm(1)</a></code>.</p>
-
-<p>Prior to using npm&#39;s commands, <code>npm.load()</code> must be called.
-If you provide <code>configObject</code> as an object hash of top-level
-configs, they override the values stored in the various config
-locations. In the npm command line client, this set of configs
-is parsed from the command line options. Additional configuration
-params are loaded from two configuration files. See <code><a href="../doc/config.html">config(1)</a></code>
-for more information.</p>
-
-<p>After that, each of the functions are accessible in the
-commands object: <code>npm.commands.&lt;cmd&gt;</code>. See <code><a href="../doc/index.html">index(1)</a></code> for a list of
-all possible commands.</p>
-
-<p>All commands on the command object take an <strong>array</strong> of positional argument
-<strong>strings</strong>. The last argument to any function is a callback. Some
-commands take other optional arguments.</p>
-
-<p>Configs cannot currently be set on a per function basis, as each call to
-npm.config.set will change the value for <em>all</em> npm commands in that process.</p>
-
-<p>To find API documentation for a specific command, run the <code>npm apihelp</code>
-command.</p>
-
-<h2 id="METHODS-AND-PROPERTIES">METHODS AND PROPERTIES</h2>
-
-<ul><li><p><code>npm.load(configs, cb)</code></p><p>Load the configuration params, and call the <code>cb</code> function once the
-globalconfig and userconfig files have been loaded as well, or on
-nextTick if they&#39;ve already been loaded.</p></li><li><p><code>npm.config</code></p><p>An object for accessing npm configuration parameters.</p><ul><li><p><code>npm.config.get(key)</code></p></li><li><code>npm.config.set(key, val)</code></li><li><p><code>npm.config.del(key)</code></p></li></ul></li><li><p><code>npm.dir</code> or <code>npm.root</code></p><p>The <code>node_modules</code> directory where npm will operate.</p></li><li><p><code>npm.prefix</code></p><p>The prefix where npm is operating. (Most often the current working
-directory.)</p></li><li><p><code>npm.cache</code></p><p>The place where npm keeps JSON and tarballs it fetches from the
-registry (or uploads to the registry).</p></li><li><p><code>npm.tmp</code></p><p>npm&#39;s temporary working directory.</p></li><li><p><code>npm.deref</code></p><p>Get the &quot;real&quot; name for a command that has either an alias or
-abbreviation.</p></li></ul>
-
-<h2 id="MAGIC">MAGIC</h2>
-
-<p>For each of the methods in the <code>npm.commands</code> hash, a method is added to
-the npm object, which takes a set of positional string arguments rather
-than an array and a callback.</p>
-
-<p>If the last argument is a callback, then it will use the supplied
-callback. However, if no callback is provided, then it will print out
-the error or results.</p>
-
-<p>For example, this would work in a node repl:</p>
-
-<pre><code>&gt; npm = require(&quot;npm&quot;)
-&gt; npm.load() // wait a sec...
-&gt; npm.install(&quot;dnode&quot;, &quot;express&quot;)</code></pre>
-
-<p>Note that that <em>won&#39;t</em> work in a node program, since the <code>install</code>
-method will get called before the configuration load is completed.</p>
-
-<h2 id="ABBREVS">ABBREVS</h2>
-
-<p>In order to support <code>npm ins foo</code> instead of <code>npm install foo</code>, the
-<code>npm.commands</code> object has a set of abbreviations as well as the full
-method names. Use the <code>npm.deref</code> method to find the real name.</p>
-
-<p>For example:</p>
-
-<pre><code>var cmd = npm.deref(&quot;unp&quot;) // cmd === &quot;unpublish&quot;</code></pre>
-</div>
-<p id="footer">npm &mdash; npm@1.2.30</p>
-<script>
-;(function () {
-var wrapper = document.getElementById("wrapper")
-var els = Array.prototype.slice.call(wrapper.getElementsByTagName("*"), 0)
- .filter(function (el) {
- return el.parentNode === wrapper
- && el.tagName.match(/H[1-6]/)
- && el.id
- })
-var l = 2
- , toc = document.createElement("ul")
-toc.innerHTML = els.map(function (el) {
- var i = el.tagName.charAt(1)
- , out = ""
- while (i > l) {
- out += "<ul>"
- l ++
- }
- while (i < l) {
- out += "</ul>"
- l --
- }
- out += "<li><a href='#" + el.id + "'>" +
- ( el.innerText || el.text || el.innerHTML)
- + "</a>"
- return out
-}).join("\n")
-toc.id = "toc"
-document.body.appendChild(toc)
-})()
-</script>
-</body></html>
diff --git a/deps/npm/html/api/outdated.html b/deps/npm/html/api/outdated.html
deleted file mode 100644
index f98e2ab11..000000000
--- a/deps/npm/html/api/outdated.html
+++ /dev/null
@@ -1,54 +0,0 @@
-<!doctype html>
-<html>
- <title>outdated</title>
- <meta http-equiv="content-type" value="text/html;utf-8">
- <link rel="stylesheet" type="text/css" href="../static/style.css">
-
- <body>
- <div id="wrapper">
-<h1><a href="../api/outdated.html">outdated</a></h1> <p>Check for outdated packages</p>
-
-<h2 id="SYNOPSIS">SYNOPSIS</h2>
-
-<pre><code>npm.commands.outdated([packages,] callback)</code></pre>
-
-<h2 id="DESCRIPTION">DESCRIPTION</h2>
-
-<p>This command will check the registry to see if the specified packages are
-currently outdated.</p>
-
-<p>If the &#39;packages&#39; parameter is left out, npm will check all packages.</p>
-</div>
-<p id="footer">outdated &mdash; npm@1.2.30</p>
-<script>
-;(function () {
-var wrapper = document.getElementById("wrapper")
-var els = Array.prototype.slice.call(wrapper.getElementsByTagName("*"), 0)
- .filter(function (el) {
- return el.parentNode === wrapper
- && el.tagName.match(/H[1-6]/)
- && el.id
- })
-var l = 2
- , toc = document.createElement("ul")
-toc.innerHTML = els.map(function (el) {
- var i = el.tagName.charAt(1)
- , out = ""
- while (i > l) {
- out += "<ul>"
- l ++
- }
- while (i < l) {
- out += "</ul>"
- l --
- }
- out += "<li><a href='#" + el.id + "'>" +
- ( el.innerText || el.text || el.innerHTML)
- + "</a>"
- return out
-}).join("\n")
-toc.id = "toc"
-document.body.appendChild(toc)
-})()
-</script>
-</body></html>
diff --git a/deps/npm/html/api/owner.html b/deps/npm/html/api/owner.html
deleted file mode 100644
index b29be6539..000000000
--- a/deps/npm/html/api/owner.html
+++ /dev/null
@@ -1,69 +0,0 @@
-<!doctype html>
-<html>
- <title>owner</title>
- <meta http-equiv="content-type" value="text/html;utf-8">
- <link rel="stylesheet" type="text/css" href="../static/style.css">
-
- <body>
- <div id="wrapper">
-<h1><a href="../api/owner.html">owner</a></h1> <p>Manage package owners</p>
-
-<h2 id="SYNOPSIS">SYNOPSIS</h2>
-
-<pre><code>npm.commands.owner(args, callback)</code></pre>
-
-<h2 id="DESCRIPTION">DESCRIPTION</h2>
-
-<p>The first element of the &#39;args&#39; parameter defines what to do, and the subsequent
-elements depend on the action. Possible values for the action are (order of
-parameters are given in parenthesis):</p>
-
-<ul><li>ls (package):
-List all the users who have access to modify a package and push new versions.
-Handy when you need to know who to bug for help.</li><li>add (user, package):
-Add a new user as a maintainer of a package. This user is enabled to modify
-metadata, publish new versions, and add other owners.</li><li>rm (user, package):
-Remove a user from the package owner list. This immediately revokes their
-privileges.</li></ul>
-
-<p>Note that there is only one level of access. Either you can modify a package,
-or you can&#39;t. Future versions may contain more fine-grained access levels, but
-that is not implemented at this time.</p>
-
-<h2 id="SEE-ALSO">SEE ALSO</h2>
-
-<ul><li><a href="../api/publish.html">publish(3)</a></li><li><a href="../doc/registry.html">registry(1)</a></li></ul>
-</div>
-<p id="footer">owner &mdash; npm@1.2.30</p>
-<script>
-;(function () {
-var wrapper = document.getElementById("wrapper")
-var els = Array.prototype.slice.call(wrapper.getElementsByTagName("*"), 0)
- .filter(function (el) {
- return el.parentNode === wrapper
- && el.tagName.match(/H[1-6]/)
- && el.id
- })
-var l = 2
- , toc = document.createElement("ul")
-toc.innerHTML = els.map(function (el) {
- var i = el.tagName.charAt(1)
- , out = ""
- while (i > l) {
- out += "<ul>"
- l ++
- }
- while (i < l) {
- out += "</ul>"
- l --
- }
- out += "<li><a href='#" + el.id + "'>" +
- ( el.innerText || el.text || el.innerHTML)
- + "</a>"
- return out
-}).join("\n")
-toc.id = "toc"
-document.body.appendChild(toc)
-})()
-</script>
-</body></html>
diff --git a/deps/npm/html/api/pack.html b/deps/npm/html/api/pack.html
deleted file mode 100644
index 8f6e3bfeb..000000000
--- a/deps/npm/html/api/pack.html
+++ /dev/null
@@ -1,60 +0,0 @@
-<!doctype html>
-<html>
- <title>pack</title>
- <meta http-equiv="content-type" value="text/html;utf-8">
- <link rel="stylesheet" type="text/css" href="../static/style.css">
-
- <body>
- <div id="wrapper">
-<h1><a href="../api/pack.html">pack</a></h1> <p>Create a tarball from a package</p>
-
-<h2 id="SYNOPSIS">SYNOPSIS</h2>
-
-<pre><code>npm.commands.pack([packages,] callback)</code></pre>
-
-<h2 id="DESCRIPTION">DESCRIPTION</h2>
-
-<p>For anything that&#39;s installable (that is, a package folder, tarball,
-tarball url, name@tag, name@version, or name), this command will fetch
-it to the cache, and then copy the tarball to the current working
-directory as <code>&lt;name&gt;-&lt;version&gt;.tgz</code>, and then write the filenames out to
-stdout.</p>
-
-<p>If the same package is specified multiple times, then the file will be
-overwritten the second time.</p>
-
-<p>If no arguments are supplied, then npm packs the current package folder.</p>
-</div>
-<p id="footer">pack &mdash; npm@1.2.30</p>
-<script>
-;(function () {
-var wrapper = document.getElementById("wrapper")
-var els = Array.prototype.slice.call(wrapper.getElementsByTagName("*"), 0)
- .filter(function (el) {
- return el.parentNode === wrapper
- && el.tagName.match(/H[1-6]/)
- && el.id
- })
-var l = 2
- , toc = document.createElement("ul")
-toc.innerHTML = els.map(function (el) {
- var i = el.tagName.charAt(1)
- , out = ""
- while (i > l) {
- out += "<ul>"
- l ++
- }
- while (i < l) {
- out += "</ul>"
- l --
- }
- out += "<li><a href='#" + el.id + "'>" +
- ( el.innerText || el.text || el.innerHTML)
- + "</a>"
- return out
-}).join("\n")
-toc.id = "toc"
-document.body.appendChild(toc)
-})()
-</script>
-</body></html>
diff --git a/deps/npm/html/api/prefix.html b/deps/npm/html/api/prefix.html
deleted file mode 100644
index 83854bc9c..000000000
--- a/deps/npm/html/api/prefix.html
+++ /dev/null
@@ -1,56 +0,0 @@
-<!doctype html>
-<html>
- <title>prefix</title>
- <meta http-equiv="content-type" value="text/html;utf-8">
- <link rel="stylesheet" type="text/css" href="../static/style.css">
-
- <body>
- <div id="wrapper">
-<h1><a href="../api/prefix.html">prefix</a></h1> <p>Display prefix</p>
-
-<h2 id="SYNOPSIS">SYNOPSIS</h2>
-
-<pre><code>npm.commands.prefix(args, callback)</code></pre>
-
-<h2 id="DESCRIPTION">DESCRIPTION</h2>
-
-<p>Print the prefix to standard out.</p>
-
-<p>&#39;args&#39; is never used and callback is never called with data.
-&#39;args&#39; must be present or things will break.</p>
-
-<p>This function is not useful programmatically</p>
-</div>
-<p id="footer">prefix &mdash; npm@1.2.30</p>
-<script>
-;(function () {
-var wrapper = document.getElementById("wrapper")
-var els = Array.prototype.slice.call(wrapper.getElementsByTagName("*"), 0)
- .filter(function (el) {
- return el.parentNode === wrapper
- && el.tagName.match(/H[1-6]/)
- && el.id
- })
-var l = 2
- , toc = document.createElement("ul")
-toc.innerHTML = els.map(function (el) {
- var i = el.tagName.charAt(1)
- , out = ""
- while (i > l) {
- out += "<ul>"
- l ++
- }
- while (i < l) {
- out += "</ul>"
- l --
- }
- out += "<li><a href='#" + el.id + "'>" +
- ( el.innerText || el.text || el.innerHTML)
- + "</a>"
- return out
-}).join("\n")
-toc.id = "toc"
-document.body.appendChild(toc)
-})()
-</script>
-</body></html>
diff --git a/deps/npm/html/api/prune.html b/deps/npm/html/api/prune.html
deleted file mode 100644
index 2844d294c..000000000
--- a/deps/npm/html/api/prune.html
+++ /dev/null
@@ -1,58 +0,0 @@
-<!doctype html>
-<html>
- <title>prune</title>
- <meta http-equiv="content-type" value="text/html;utf-8">
- <link rel="stylesheet" type="text/css" href="../static/style.css">
-
- <body>
- <div id="wrapper">
-<h1><a href="../api/prune.html">prune</a></h1> <p>Remove extraneous packages</p>
-
-<h2 id="SYNOPSIS">SYNOPSIS</h2>
-
-<pre><code>npm.commands.prune([packages,] callback)</code></pre>
-
-<h2 id="DESCRIPTION">DESCRIPTION</h2>
-
-<p>This command removes &quot;extraneous&quot; packages.</p>
-
-<p>The first parameter is optional, and it specifies packages to be removed.</p>
-
-<p>No packages are specified, then all packages will be checked.</p>
-
-<p>Extraneous packages are packages that are not listed on the parent
-package&#39;s dependencies list.</p>
-</div>
-<p id="footer">prune &mdash; npm@1.2.30</p>
-<script>
-;(function () {
-var wrapper = document.getElementById("wrapper")
-var els = Array.prototype.slice.call(wrapper.getElementsByTagName("*"), 0)
- .filter(function (el) {
- return el.parentNode === wrapper
- && el.tagName.match(/H[1-6]/)
- && el.id
- })
-var l = 2
- , toc = document.createElement("ul")
-toc.innerHTML = els.map(function (el) {
- var i = el.tagName.charAt(1)
- , out = ""
- while (i > l) {
- out += "<ul>"
- l ++
- }
- while (i < l) {
- out += "</ul>"
- l --
- }
- out += "<li><a href='#" + el.id + "'>" +
- ( el.innerText || el.text || el.innerHTML)
- + "</a>"
- return out
-}).join("\n")
-toc.id = "toc"
-document.body.appendChild(toc)
-})()
-</script>
-</body></html>
diff --git a/deps/npm/html/api/publish.html b/deps/npm/html/api/publish.html
deleted file mode 100644
index 56868746f..000000000
--- a/deps/npm/html/api/publish.html
+++ /dev/null
@@ -1,67 +0,0 @@
-<!doctype html>
-<html>
- <title>publish</title>
- <meta http-equiv="content-type" value="text/html;utf-8">
- <link rel="stylesheet" type="text/css" href="../static/style.css">
-
- <body>
- <div id="wrapper">
-<h1><a href="../api/publish.html">publish</a></h1> <p>Publish a package</p>
-
-<h2 id="SYNOPSIS">SYNOPSIS</h2>
-
-<pre><code>npm.commands.publish([packages,] callback)</code></pre>
-
-<h2 id="DESCRIPTION">DESCRIPTION</h2>
-
-<p>Publishes a package to the registry so that it can be installed by name.
-Possible values in the &#39;packages&#39; array are:</p>
-
-<ul><li><p><code>&lt;folder&gt;</code>:
-A folder containing a package.json file</p></li><li><p><code>&lt;tarball&gt;</code>:
-A url or file path to a gzipped tar archive containing a single folder
-with a package.json file inside.</p></li></ul>
-
-<p>If the package array is empty, npm will try to publish something in the
-current working directory.</p>
-
-<p>This command could fails if one of the packages specified already exists in
-the registry. Overwrites when the &quot;force&quot; environment variable is set.</p>
-
-<h2 id="SEE-ALSO">SEE ALSO</h2>
-
-<ul><li><a href="../doc/registry.html">registry(1)</a></li><li><a href="../doc/adduser.html">adduser(1)</a></li><li><a href="../api/owner.html">owner(3)</a></li></ul>
-</div>
-<p id="footer">publish &mdash; npm@1.2.30</p>
-<script>
-;(function () {
-var wrapper = document.getElementById("wrapper")
-var els = Array.prototype.slice.call(wrapper.getElementsByTagName("*"), 0)
- .filter(function (el) {
- return el.parentNode === wrapper
- && el.tagName.match(/H[1-6]/)
- && el.id
- })
-var l = 2
- , toc = document.createElement("ul")
-toc.innerHTML = els.map(function (el) {
- var i = el.tagName.charAt(1)
- , out = ""
- while (i > l) {
- out += "<ul>"
- l ++
- }
- while (i < l) {
- out += "</ul>"
- l --
- }
- out += "<li><a href='#" + el.id + "'>" +
- ( el.innerText || el.text || el.innerHTML)
- + "</a>"
- return out
-}).join("\n")
-toc.id = "toc"
-document.body.appendChild(toc)
-})()
-</script>
-</body></html>
diff --git a/deps/npm/html/api/rebuild.html b/deps/npm/html/api/rebuild.html
deleted file mode 100644
index a3f63386e..000000000
--- a/deps/npm/html/api/rebuild.html
+++ /dev/null
@@ -1,57 +0,0 @@
-<!doctype html>
-<html>
- <title>rebuild</title>
- <meta http-equiv="content-type" value="text/html;utf-8">
- <link rel="stylesheet" type="text/css" href="../static/style.css">
-
- <body>
- <div id="wrapper">
-<h1><a href="../api/rebuild.html">rebuild</a></h1> <p>Rebuild a package</p>
-
-<h2 id="SYNOPSIS">SYNOPSIS</h2>
-
-<pre><code>npm.commands.rebuild([packages,] callback)</code></pre>
-
-<h2 id="DESCRIPTION">DESCRIPTION</h2>
-
-<p>This command runs the <code>npm build</code> command on each of the matched packages. This is useful
-when you install a new version of node, and must recompile all your C++ addons with
-the new binary. If no &#39;packages&#39; parameter is specify, every package will be rebuilt.</p>
-
-<h2 id="CONFIGURATION">CONFIGURATION</h2>
-
-<p>See <code>npm help build</code></p>
-</div>
-<p id="footer">rebuild &mdash; npm@1.2.30</p>
-<script>
-;(function () {
-var wrapper = document.getElementById("wrapper")
-var els = Array.prototype.slice.call(wrapper.getElementsByTagName("*"), 0)
- .filter(function (el) {
- return el.parentNode === wrapper
- && el.tagName.match(/H[1-6]/)
- && el.id
- })
-var l = 2
- , toc = document.createElement("ul")
-toc.innerHTML = els.map(function (el) {
- var i = el.tagName.charAt(1)
- , out = ""
- while (i > l) {
- out += "<ul>"
- l ++
- }
- while (i < l) {
- out += "</ul>"
- l --
- }
- out += "<li><a href='#" + el.id + "'>" +
- ( el.innerText || el.text || el.innerHTML)
- + "</a>"
- return out
-}).join("\n")
-toc.id = "toc"
-document.body.appendChild(toc)
-})()
-</script>
-</body></html>
diff --git a/deps/npm/html/api/restart.html b/deps/npm/html/api/restart.html
deleted file mode 100644
index c6d4ecc8a..000000000
--- a/deps/npm/html/api/restart.html
+++ /dev/null
@@ -1,62 +0,0 @@
-<!doctype html>
-<html>
- <title>restart</title>
- <meta http-equiv="content-type" value="text/html;utf-8">
- <link rel="stylesheet" type="text/css" href="../static/style.css">
-
- <body>
- <div id="wrapper">
-<h1><a href="../api/restart.html">restart</a></h1> <p>Start a package</p>
-
-<h2 id="SYNOPSIS">SYNOPSIS</h2>
-
-<pre><code>npm.commands.restart(packages, callback)</code></pre>
-
-<h2 id="DESCRIPTION">DESCRIPTION</h2>
-
-<p>This runs a package&#39;s &quot;restart&quot; script, if one was provided.
-Otherwise it runs package&#39;s &quot;stop&quot; script, if one was provided, and then
-the &quot;start&quot; script.</p>
-
-<p>If no version is specified, then it restarts the &quot;active&quot; version.</p>
-
-<p>npm can run tests on multiple packages. Just specify multiple packages
-in the <code>packages</code> parameter.</p>
-
-<h2 id="SEE-ALSO">SEE ALSO</h2>
-
-<ul><li><a href="../api/start.html">start(3)</a></li><li><a href="../api/stop.html">stop(3)</a></li></ul>
-</div>
-<p id="footer">restart &mdash; npm@1.2.30</p>
-<script>
-;(function () {
-var wrapper = document.getElementById("wrapper")
-var els = Array.prototype.slice.call(wrapper.getElementsByTagName("*"), 0)
- .filter(function (el) {
- return el.parentNode === wrapper
- && el.tagName.match(/H[1-6]/)
- && el.id
- })
-var l = 2
- , toc = document.createElement("ul")
-toc.innerHTML = els.map(function (el) {
- var i = el.tagName.charAt(1)
- , out = ""
- while (i > l) {
- out += "<ul>"
- l ++
- }
- while (i < l) {
- out += "</ul>"
- l --
- }
- out += "<li><a href='#" + el.id + "'>" +
- ( el.innerText || el.text || el.innerHTML)
- + "</a>"
- return out
-}).join("\n")
-toc.id = "toc"
-document.body.appendChild(toc)
-})()
-</script>
-</body></html>
diff --git a/deps/npm/html/api/root.html b/deps/npm/html/api/root.html
deleted file mode 100644
index 2c7a8f76f..000000000
--- a/deps/npm/html/api/root.html
+++ /dev/null
@@ -1,56 +0,0 @@
-<!doctype html>
-<html>
- <title>root</title>
- <meta http-equiv="content-type" value="text/html;utf-8">
- <link rel="stylesheet" type="text/css" href="../static/style.css">
-
- <body>
- <div id="wrapper">
-<h1><a href="../api/root.html">root</a></h1> <p>Display npm root</p>
-
-<h2 id="SYNOPSIS">SYNOPSIS</h2>
-
-<pre><code>npm.commands.root(args, callback)</code></pre>
-
-<h2 id="DESCRIPTION">DESCRIPTION</h2>
-
-<p>Print the effective <code>node_modules</code> folder to standard out.</p>
-
-<p>&#39;args&#39; is never used and callback is never called with data.
-&#39;args&#39; must be present or things will break.</p>
-
-<p>This function is not useful programmatically.</p>
-</div>
-<p id="footer">root &mdash; npm@1.2.30</p>
-<script>
-;(function () {
-var wrapper = document.getElementById("wrapper")
-var els = Array.prototype.slice.call(wrapper.getElementsByTagName("*"), 0)
- .filter(function (el) {
- return el.parentNode === wrapper
- && el.tagName.match(/H[1-6]/)
- && el.id
- })
-var l = 2
- , toc = document.createElement("ul")
-toc.innerHTML = els.map(function (el) {
- var i = el.tagName.charAt(1)
- , out = ""
- while (i > l) {
- out += "<ul>"
- l ++
- }
- while (i < l) {
- out += "</ul>"
- l --
- }
- out += "<li><a href='#" + el.id + "'>" +
- ( el.innerText || el.text || el.innerHTML)
- + "</a>"
- return out
-}).join("\n")
-toc.id = "toc"
-document.body.appendChild(toc)
-})()
-</script>
-</body></html>
diff --git a/deps/npm/html/api/run-script.html b/deps/npm/html/api/run-script.html
deleted file mode 100644
index 8354b950b..000000000
--- a/deps/npm/html/api/run-script.html
+++ /dev/null
@@ -1,64 +0,0 @@
-<!doctype html>
-<html>
- <title>run-script</title>
- <meta http-equiv="content-type" value="text/html;utf-8">
- <link rel="stylesheet" type="text/css" href="../static/style.css">
-
- <body>
- <div id="wrapper">
-<h1><a href="../api/run-script.html">run-script</a></h1> <p>Run arbitrary package scripts</p>
-
-<h2 id="SYNOPSIS">SYNOPSIS</h2>
-
-<pre><code>npm.commands.run-script(args, callback)</code></pre>
-
-<h2 id="DESCRIPTION">DESCRIPTION</h2>
-
-<p>This runs an arbitrary command from a package&#39;s &quot;scripts&quot; object.</p>
-
-<p>It is used by the test, start, restart, and stop commands, but can be
-called directly, as well.</p>
-
-<p>The &#39;args&#39; parameter is an array of strings. Behavior depends on the number
-of elements. If there is only one element, npm assumes that the element
-represents a command to be run on the local repository. If there is more than
-one element, then the first is assumed to be the package and the second is
-assumed to be the command to run. All other elements are ignored.</p>
-
-<h2 id="SEE-ALSO">SEE ALSO</h2>
-
-<ul><li><a href="../doc/scripts.html">scripts(1)</a></li><li><a href="../api/test.html">test(3)</a></li><li><a href="../api/start.html">start(3)</a></li><li><a href="../api/restart.html">restart(3)</a></li><li><a href="../api/stop.html">stop(3)</a></li></ul>
-</div>
-<p id="footer">run-script &mdash; npm@1.2.30</p>
-<script>
-;(function () {
-var wrapper = document.getElementById("wrapper")
-var els = Array.prototype.slice.call(wrapper.getElementsByTagName("*"), 0)
- .filter(function (el) {
- return el.parentNode === wrapper
- && el.tagName.match(/H[1-6]/)
- && el.id
- })
-var l = 2
- , toc = document.createElement("ul")
-toc.innerHTML = els.map(function (el) {
- var i = el.tagName.charAt(1)
- , out = ""
- while (i > l) {
- out += "<ul>"
- l ++
- }
- while (i < l) {
- out += "</ul>"
- l --
- }
- out += "<li><a href='#" + el.id + "'>" +
- ( el.innerText || el.text || el.innerHTML)
- + "</a>"
- return out
-}).join("\n")
-toc.id = "toc"
-document.body.appendChild(toc)
-})()
-</script>
-</body></html>
diff --git a/deps/npm/html/api/search.html b/deps/npm/html/api/search.html
deleted file mode 100644
index 8a3fa3b34..000000000
--- a/deps/npm/html/api/search.html
+++ /dev/null
@@ -1,67 +0,0 @@
-<!doctype html>
-<html>
- <title>search</title>
- <meta http-equiv="content-type" value="text/html;utf-8">
- <link rel="stylesheet" type="text/css" href="../static/style.css">
-
- <body>
- <div id="wrapper">
-<h1><a href="../api/search.html">search</a></h1> <p>Search for packages</p>
-
-<h2 id="SYNOPSIS">SYNOPSIS</h2>
-
-<pre><code>npm.commands.search(searchTerms, [silent,] [staleness,] callback)</code></pre>
-
-<h2 id="DESCRIPTION">DESCRIPTION</h2>
-
-<p>Search the registry for packages matching the search terms. The available parameters are:</p>
-
-<ul><li>searchTerms:
-Array of search terms. These terms are case-insensitive.</li><li>silent:
-If true, npm will not log anything to the console.</li><li>staleness:
-This is the threshold for stale packages. &quot;Fresh&quot; packages are not refreshed
-from the registry. This value is measured in seconds.</li><li><p>callback:
-Returns an object where each key is the name of a package, and the value
-is information about that package along with a &#39;words&#39; property, which is
-a space-delimited string of all of the interesting words in that package.
-The only properties included are those that are searched, which generally include:</p><ul><li>name</li><li>description</li><li>maintainers</li><li>url</li><li>keywords</li></ul></li></ul>
-
-<p>A search on the registry excludes any result that does not match all of the
-search terms. It also removes any items from the results that contain an
-excluded term (the &quot;searchexclude&quot; config). The search is case insensitive
-and doesn&#39;t try to read your mind (it doesn&#39;t do any verb tense matching or the
-like).</p>
-</div>
-<p id="footer">search &mdash; npm@1.2.30</p>
-<script>
-;(function () {
-var wrapper = document.getElementById("wrapper")
-var els = Array.prototype.slice.call(wrapper.getElementsByTagName("*"), 0)
- .filter(function (el) {
- return el.parentNode === wrapper
- && el.tagName.match(/H[1-6]/)
- && el.id
- })
-var l = 2
- , toc = document.createElement("ul")
-toc.innerHTML = els.map(function (el) {
- var i = el.tagName.charAt(1)
- , out = ""
- while (i > l) {
- out += "<ul>"
- l ++
- }
- while (i < l) {
- out += "</ul>"
- l --
- }
- out += "<li><a href='#" + el.id + "'>" +
- ( el.innerText || el.text || el.innerHTML)
- + "</a>"
- return out
-}).join("\n")
-toc.id = "toc"
-document.body.appendChild(toc)
-})()
-</script>
-</body></html>
diff --git a/deps/npm/html/api/shrinkwrap.html b/deps/npm/html/api/shrinkwrap.html
deleted file mode 100644
index 189b184a9..000000000
--- a/deps/npm/html/api/shrinkwrap.html
+++ /dev/null
@@ -1,61 +0,0 @@
-<!doctype html>
-<html>
- <title>shrinkwrap</title>
- <meta http-equiv="content-type" value="text/html;utf-8">
- <link rel="stylesheet" type="text/css" href="../static/style.css">
-
- <body>
- <div id="wrapper">
-<h1><a href="../api/shrinkwrap.html">shrinkwrap</a></h1> <p>programmatically generate package shrinkwrap file</p>
-
-<h2 id="SYNOPSIS">SYNOPSIS</h2>
-
-<pre><code>npm.commands.shrinkwrap(args, [silent,] callback)</code></pre>
-
-<h2 id="DESCRIPTION">DESCRIPTION</h2>
-
-<p>This acts much the same ways as shrinkwrapping on the command-line.</p>
-
-<p>This command does not take any arguments, but &#39;args&#39; must be defined.
-Beyond that, if any arguments are passed in, npm will politely warn that it
-does not take positional arguments.</p>
-
-<p>If the &#39;silent&#39; parameter is set to true, nothing will be output to the screen,
-but the shrinkwrap file will still be written.</p>
-
-<p>Finally, &#39;callback&#39; is a function that will be called when the shrinkwrap has
-been saved.</p>
-</div>
-<p id="footer">shrinkwrap &mdash; npm@1.2.30</p>
-<script>
-;(function () {
-var wrapper = document.getElementById("wrapper")
-var els = Array.prototype.slice.call(wrapper.getElementsByTagName("*"), 0)
- .filter(function (el) {
- return el.parentNode === wrapper
- && el.tagName.match(/H[1-6]/)
- && el.id
- })
-var l = 2
- , toc = document.createElement("ul")
-toc.innerHTML = els.map(function (el) {
- var i = el.tagName.charAt(1)
- , out = ""
- while (i > l) {
- out += "<ul>"
- l ++
- }
- while (i < l) {
- out += "</ul>"
- l --
- }
- out += "<li><a href='#" + el.id + "'>" +
- ( el.innerText || el.text || el.innerHTML)
- + "</a>"
- return out
-}).join("\n")
-toc.id = "toc"
-document.body.appendChild(toc)
-})()
-</script>
-</body></html>
diff --git a/deps/npm/html/api/start.html b/deps/npm/html/api/start.html
deleted file mode 100644
index bcdf0b8d6..000000000
--- a/deps/npm/html/api/start.html
+++ /dev/null
@@ -1,54 +0,0 @@
-<!doctype html>
-<html>
- <title>start</title>
- <meta http-equiv="content-type" value="text/html;utf-8">
- <link rel="stylesheet" type="text/css" href="../static/style.css">
-
- <body>
- <div id="wrapper">
-<h1><a href="../api/start.html">start</a></h1> <p>Start a package</p>
-
-<h2 id="SYNOPSIS">SYNOPSIS</h2>
-
-<pre><code>npm.commands.start(packages, callback)</code></pre>
-
-<h2 id="DESCRIPTION">DESCRIPTION</h2>
-
-<p>This runs a package&#39;s &quot;start&quot; script, if one was provided.</p>
-
-<p>npm can run tests on multiple packages. Just specify multiple packages
-in the <code>packages</code> parameter.</p>
-</div>
-<p id="footer">start &mdash; npm@1.2.30</p>
-<script>
-;(function () {
-var wrapper = document.getElementById("wrapper")
-var els = Array.prototype.slice.call(wrapper.getElementsByTagName("*"), 0)
- .filter(function (el) {
- return el.parentNode === wrapper
- && el.tagName.match(/H[1-6]/)
- && el.id
- })
-var l = 2
- , toc = document.createElement("ul")
-toc.innerHTML = els.map(function (el) {
- var i = el.tagName.charAt(1)
- , out = ""
- while (i > l) {
- out += "<ul>"
- l ++
- }
- while (i < l) {
- out += "</ul>"
- l --
- }
- out += "<li><a href='#" + el.id + "'>" +
- ( el.innerText || el.text || el.innerHTML)
- + "</a>"
- return out
-}).join("\n")
-toc.id = "toc"
-document.body.appendChild(toc)
-})()
-</script>
-</body></html>
diff --git a/deps/npm/html/api/stop.html b/deps/npm/html/api/stop.html
deleted file mode 100644
index edf34f015..000000000
--- a/deps/npm/html/api/stop.html
+++ /dev/null
@@ -1,54 +0,0 @@
-<!doctype html>
-<html>
- <title>stop</title>
- <meta http-equiv="content-type" value="text/html;utf-8">
- <link rel="stylesheet" type="text/css" href="../static/style.css">
-
- <body>
- <div id="wrapper">
-<h1><a href="../api/stop.html">stop</a></h1> <p>Stop a package</p>
-
-<h2 id="SYNOPSIS">SYNOPSIS</h2>
-
-<pre><code>npm.commands.stop(packages, callback)</code></pre>
-
-<h2 id="DESCRIPTION">DESCRIPTION</h2>
-
-<p>This runs a package&#39;s &quot;stop&quot; script, if one was provided.</p>
-
-<p>npm can run stop on multiple packages. Just specify multiple packages
-in the <code>packages</code> parameter.</p>
-</div>
-<p id="footer">stop &mdash; npm@1.2.30</p>
-<script>
-;(function () {
-var wrapper = document.getElementById("wrapper")
-var els = Array.prototype.slice.call(wrapper.getElementsByTagName("*"), 0)
- .filter(function (el) {
- return el.parentNode === wrapper
- && el.tagName.match(/H[1-6]/)
- && el.id
- })
-var l = 2
- , toc = document.createElement("ul")
-toc.innerHTML = els.map(function (el) {
- var i = el.tagName.charAt(1)
- , out = ""
- while (i > l) {
- out += "<ul>"
- l ++
- }
- while (i < l) {
- out += "</ul>"
- l --
- }
- out += "<li><a href='#" + el.id + "'>" +
- ( el.innerText || el.text || el.innerHTML)
- + "</a>"
- return out
-}).join("\n")
-toc.id = "toc"
-document.body.appendChild(toc)
-})()
-</script>
-</body></html>
diff --git a/deps/npm/html/api/submodule.html b/deps/npm/html/api/submodule.html
deleted file mode 100644
index 819b3741c..000000000
--- a/deps/npm/html/api/submodule.html
+++ /dev/null
@@ -1,68 +0,0 @@
-<!doctype html>
-<html>
- <title>submodule</title>
- <meta http-equiv="content-type" value="text/html;utf-8">
- <link rel="stylesheet" type="text/css" href="../static/style.css">
-
- <body>
- <div id="wrapper">
-<h1><a href="../api/submodule.html">submodule</a></h1> <p>Add a package as a git submodule</p>
-
-<h2 id="SYNOPSIS">SYNOPSIS</h2>
-
-<pre><code>npm.commands.submodule(packages, callback)</code></pre>
-
-<h2 id="DESCRIPTION">DESCRIPTION</h2>
-
-<p>For each package specified, npm will check if it has a git repository url
-in its package.json description then add it as a git submodule at
-<code>node_modules/&lt;pkg name&gt;</code>.</p>
-
-<p>This is a convenience only. From then on, it&#39;s up to you to manage
-updates by using the appropriate git commands. npm will stubbornly
-refuse to update, modify, or remove anything with a <code>.git</code> subfolder
-in it.</p>
-
-<p>This command also does not install missing dependencies, if the package
-does not include them in its git repository. If <code>npm ls</code> reports that
-things are missing, you can either install, link, or submodule them yourself,
-or you can do <code>npm explore &lt;pkgname&gt; -- npm install</code> to install the
-dependencies into the submodule folder.</p>
-
-<h2 id="SEE-ALSO">SEE ALSO</h2>
-
-<ul><li>npm help json</li><li>git help submodule</li></ul>
-</div>
-<p id="footer">submodule &mdash; npm@1.2.30</p>
-<script>
-;(function () {
-var wrapper = document.getElementById("wrapper")
-var els = Array.prototype.slice.call(wrapper.getElementsByTagName("*"), 0)
- .filter(function (el) {
- return el.parentNode === wrapper
- && el.tagName.match(/H[1-6]/)
- && el.id
- })
-var l = 2
- , toc = document.createElement("ul")
-toc.innerHTML = els.map(function (el) {
- var i = el.tagName.charAt(1)
- , out = ""
- while (i > l) {
- out += "<ul>"
- l ++
- }
- while (i < l) {
- out += "</ul>"
- l --
- }
- out += "<li><a href='#" + el.id + "'>" +
- ( el.innerText || el.text || el.innerHTML)
- + "</a>"
- return out
-}).join("\n")
-toc.id = "toc"
-document.body.appendChild(toc)
-})()
-</script>
-</body></html>
diff --git a/deps/npm/html/api/tag.html b/deps/npm/html/api/tag.html
deleted file mode 100644
index cec808328..000000000
--- a/deps/npm/html/api/tag.html
+++ /dev/null
@@ -1,64 +0,0 @@
-<!doctype html>
-<html>
- <title>tag</title>
- <meta http-equiv="content-type" value="text/html;utf-8">
- <link rel="stylesheet" type="text/css" href="../static/style.css">
-
- <body>
- <div id="wrapper">
-<h1><a href="../api/tag.html">tag</a></h1> <p>Tag a published version</p>
-
-<h2 id="SYNOPSIS">SYNOPSIS</h2>
-
-<pre><code>npm.commands.tag(package@version, tag, callback)</code></pre>
-
-<h2 id="DESCRIPTION">DESCRIPTION</h2>
-
-<p>Tags the specified version of the package with the specified tag, or the
-<code>--tag</code> config if not specified.</p>
-
-<p>The &#39;package@version&#39; is an array of strings, but only the first two elements are
-currently used.</p>
-
-<p>The first element must be in the form package@version, where package
-is the package name and version is the version number (much like installing a
-specific version).</p>
-
-<p>The second element is the name of the tag to tag this version with. If this
-parameter is missing or falsey (empty), the default froom the config will be
-used. For more information about how to set this config, check
-<code>man 3 npm-config</code> for programmatic usage or <code>man npm-config</code> for cli usage.</p>
-</div>
-<p id="footer">tag &mdash; npm@1.2.30</p>
-<script>
-;(function () {
-var wrapper = document.getElementById("wrapper")
-var els = Array.prototype.slice.call(wrapper.getElementsByTagName("*"), 0)
- .filter(function (el) {
- return el.parentNode === wrapper
- && el.tagName.match(/H[1-6]/)
- && el.id
- })
-var l = 2
- , toc = document.createElement("ul")
-toc.innerHTML = els.map(function (el) {
- var i = el.tagName.charAt(1)
- , out = ""
- while (i > l) {
- out += "<ul>"
- l ++
- }
- while (i < l) {
- out += "</ul>"
- l --
- }
- out += "<li><a href='#" + el.id + "'>" +
- ( el.innerText || el.text || el.innerHTML)
- + "</a>"
- return out
-}).join("\n")
-toc.id = "toc"
-document.body.appendChild(toc)
-})()
-</script>
-</body></html>
diff --git a/deps/npm/html/api/test.html b/deps/npm/html/api/test.html
deleted file mode 100644
index c4685a4fd..000000000
--- a/deps/npm/html/api/test.html
+++ /dev/null
@@ -1,57 +0,0 @@
-<!doctype html>
-<html>
- <title>test</title>
- <meta http-equiv="content-type" value="text/html;utf-8">
- <link rel="stylesheet" type="text/css" href="../static/style.css">
-
- <body>
- <div id="wrapper">
-<h1><a href="../api/test.html">test</a></h1> <p>Test a package</p>
-
-<h2 id="SYNOPSIS">SYNOPSIS</h2>
-
-<pre><code> npm.commands.test(packages, callback)</code></pre>
-
-<h2 id="DESCRIPTION">DESCRIPTION</h2>
-
-<p>This runs a package&#39;s &quot;test&quot; script, if one was provided.</p>
-
-<p>To run tests as a condition of installation, set the <code>npat</code> config to
-true.</p>
-
-<p>npm can run tests on multiple packages. Just specify multiple packages
-in the <code>packages</code> parameter.</p>
-</div>
-<p id="footer">test &mdash; npm@1.2.30</p>
-<script>
-;(function () {
-var wrapper = document.getElementById("wrapper")
-var els = Array.prototype.slice.call(wrapper.getElementsByTagName("*"), 0)
- .filter(function (el) {
- return el.parentNode === wrapper
- && el.tagName.match(/H[1-6]/)
- && el.id
- })
-var l = 2
- , toc = document.createElement("ul")
-toc.innerHTML = els.map(function (el) {
- var i = el.tagName.charAt(1)
- , out = ""
- while (i > l) {
- out += "<ul>"
- l ++
- }
- while (i < l) {
- out += "</ul>"
- l --
- }
- out += "<li><a href='#" + el.id + "'>" +
- ( el.innerText || el.text || el.innerHTML)
- + "</a>"
- return out
-}).join("\n")
-toc.id = "toc"
-document.body.appendChild(toc)
-})()
-</script>
-</body></html>
diff --git a/deps/npm/html/api/uninstall.html b/deps/npm/html/api/uninstall.html
deleted file mode 100644
index 5f582a3b8..000000000
--- a/deps/npm/html/api/uninstall.html
+++ /dev/null
@@ -1,57 +0,0 @@
-<!doctype html>
-<html>
- <title>uninstall</title>
- <meta http-equiv="content-type" value="text/html;utf-8">
- <link rel="stylesheet" type="text/css" href="../static/style.css">
-
- <body>
- <div id="wrapper">
-<h1><a href="../api/uninstall.html">uninstall</a></h1> <p>uninstall a package programmatically</p>
-
-<h2 id="SYNOPSIS">SYNOPSIS</h2>
-
-<pre><code>npm.commands.uninstall(packages, callback)</code></pre>
-
-<h2 id="DESCRIPTION">DESCRIPTION</h2>
-
-<p>This acts much the same ways as uninstalling on the command-line.</p>
-
-<p>The &#39;packages&#39; parameter is an array of strings. Each element in the array is
-the name of a package to be uninstalled.</p>
-
-<p>Finally, &#39;callback&#39; is a function that will be called when all packages have been
-uninstalled or when an error has been encountered.</p>
-</div>
-<p id="footer">uninstall &mdash; npm@1.2.30</p>
-<script>
-;(function () {
-var wrapper = document.getElementById("wrapper")
-var els = Array.prototype.slice.call(wrapper.getElementsByTagName("*"), 0)
- .filter(function (el) {
- return el.parentNode === wrapper
- && el.tagName.match(/H[1-6]/)
- && el.id
- })
-var l = 2
- , toc = document.createElement("ul")
-toc.innerHTML = els.map(function (el) {
- var i = el.tagName.charAt(1)
- , out = ""
- while (i > l) {
- out += "<ul>"
- l ++
- }
- while (i < l) {
- out += "</ul>"
- l --
- }
- out += "<li><a href='#" + el.id + "'>" +
- ( el.innerText || el.text || el.innerHTML)
- + "</a>"
- return out
-}).join("\n")
-toc.id = "toc"
-document.body.appendChild(toc)
-})()
-</script>
-</body></html>
diff --git a/deps/npm/html/api/unpublish.html b/deps/npm/html/api/unpublish.html
deleted file mode 100644
index 8d9444ff3..000000000
--- a/deps/npm/html/api/unpublish.html
+++ /dev/null
@@ -1,61 +0,0 @@
-<!doctype html>
-<html>
- <title>unpublish</title>
- <meta http-equiv="content-type" value="text/html;utf-8">
- <link rel="stylesheet" type="text/css" href="../static/style.css">
-
- <body>
- <div id="wrapper">
-<h1><a href="../api/unpublish.html">unpublish</a></h1> <p>Remove a package from the registry</p>
-
-<h2 id="SYNOPSIS">SYNOPSIS</h2>
-
-<pre><code>npm.commands.unpublish(package, callback)</code></pre>
-
-<h2 id="DESCRIPTION">DESCRIPTION</h2>
-
-<p>This removes a package version from the registry, deleting its
-entry and removing the tarball.</p>
-
-<p>The package parameter must be defined.</p>
-
-<p>Only the first element in the package parameter is used. If there is no first
-element, then npm assumes that the package at the current working directory
-is what is meant.</p>
-
-<p>If no version is specified, or if all versions are removed then
-the root package entry is removed from the registry entirely.</p>
-</div>
-<p id="footer">unpublish &mdash; npm@1.2.30</p>
-<script>
-;(function () {
-var wrapper = document.getElementById("wrapper")
-var els = Array.prototype.slice.call(wrapper.getElementsByTagName("*"), 0)
- .filter(function (el) {
- return el.parentNode === wrapper
- && el.tagName.match(/H[1-6]/)
- && el.id
- })
-var l = 2
- , toc = document.createElement("ul")
-toc.innerHTML = els.map(function (el) {
- var i = el.tagName.charAt(1)
- , out = ""
- while (i > l) {
- out += "<ul>"
- l ++
- }
- while (i < l) {
- out += "</ul>"
- l --
- }
- out += "<li><a href='#" + el.id + "'>" +
- ( el.innerText || el.text || el.innerHTML)
- + "</a>"
- return out
-}).join("\n")
-toc.id = "toc"
-document.body.appendChild(toc)
-})()
-</script>
-</body></html>
diff --git a/deps/npm/html/api/update.html b/deps/npm/html/api/update.html
deleted file mode 100644
index 51ab08e65..000000000
--- a/deps/npm/html/api/update.html
+++ /dev/null
@@ -1,53 +0,0 @@
-<!doctype html>
-<html>
- <title>update</title>
- <meta http-equiv="content-type" value="text/html;utf-8">
- <link rel="stylesheet" type="text/css" href="../static/style.css">
-
- <body>
- <div id="wrapper">
-<h1><a href="../api/update.html">update</a></h1> <p>Update a package</p>
-
-<h2 id="SYNOPSIS">SYNOPSIS</h2>
-
-<pre><code>npm.commands.update(packages, callback)</code></pre>
-
-<h1>DESCRIPTION</h1>
-
-<p>Updates a package, upgrading it to the latest version. It also installs any missing packages.</p>
-
-<p>The &#39;packages&#39; argument is an array of packages to update. The &#39;callback&#39; parameter will be called when done or when an error occurs.</p>
-</div>
-<p id="footer">update &mdash; npm@1.2.30</p>
-<script>
-;(function () {
-var wrapper = document.getElementById("wrapper")
-var els = Array.prototype.slice.call(wrapper.getElementsByTagName("*"), 0)
- .filter(function (el) {
- return el.parentNode === wrapper
- && el.tagName.match(/H[1-6]/)
- && el.id
- })
-var l = 2
- , toc = document.createElement("ul")
-toc.innerHTML = els.map(function (el) {
- var i = el.tagName.charAt(1)
- , out = ""
- while (i > l) {
- out += "<ul>"
- l ++
- }
- while (i < l) {
- out += "</ul>"
- l --
- }
- out += "<li><a href='#" + el.id + "'>" +
- ( el.innerText || el.text || el.innerHTML)
- + "</a>"
- return out
-}).join("\n")
-toc.id = "toc"
-document.body.appendChild(toc)
-})()
-</script>
-</body></html>
diff --git a/deps/npm/html/api/version.html b/deps/npm/html/api/version.html
deleted file mode 100644
index 602b0cbbb..000000000
--- a/deps/npm/html/api/version.html
+++ /dev/null
@@ -1,59 +0,0 @@
-<!doctype html>
-<html>
- <title>version</title>
- <meta http-equiv="content-type" value="text/html;utf-8">
- <link rel="stylesheet" type="text/css" href="../static/style.css">
-
- <body>
- <div id="wrapper">
-<h1><a href="../api/version.html">version</a></h1> <p>Bump a package version</p>
-
-<h2 id="SYNOPSIS">SYNOPSIS</h2>
-
-<pre><code>npm.commands.version(newversion, callback)</code></pre>
-
-<h2 id="DESCRIPTION">DESCRIPTION</h2>
-
-<p>Run this in a package directory to bump the version and write the new
-data back to the package.json file.</p>
-
-<p>If run in a git repo, it will also create a version commit and tag, and
-fail if the repo is not clean.</p>
-
-<p>Like all other commands, this function takes a string array as its first
-parameter. The difference, however, is this function will fail if it does
-not have exactly one element. The only element should be a version number.</p>
-</div>
-<p id="footer">version &mdash; npm@1.2.30</p>
-<script>
-;(function () {
-var wrapper = document.getElementById("wrapper")
-var els = Array.prototype.slice.call(wrapper.getElementsByTagName("*"), 0)
- .filter(function (el) {
- return el.parentNode === wrapper
- && el.tagName.match(/H[1-6]/)
- && el.id
- })
-var l = 2
- , toc = document.createElement("ul")
-toc.innerHTML = els.map(function (el) {
- var i = el.tagName.charAt(1)
- , out = ""
- while (i > l) {
- out += "<ul>"
- l ++
- }
- while (i < l) {
- out += "</ul>"
- l --
- }
- out += "<li><a href='#" + el.id + "'>" +
- ( el.innerText || el.text || el.innerHTML)
- + "</a>"
- return out
-}).join("\n")
-toc.id = "toc"
-document.body.appendChild(toc)
-})()
-</script>
-</body></html>
diff --git a/deps/npm/html/api/view.html b/deps/npm/html/api/view.html
deleted file mode 100644
index c18677182..000000000
--- a/deps/npm/html/api/view.html
+++ /dev/null
@@ -1,134 +0,0 @@
-<!doctype html>
-<html>
- <title>view</title>
- <meta http-equiv="content-type" value="text/html;utf-8">
- <link rel="stylesheet" type="text/css" href="../static/style.css">
-
- <body>
- <div id="wrapper">
-<h1><a href="../api/view.html">view</a></h1> <p>View registry info</p>
-
-<h2 id="SYNOPSIS">SYNOPSIS</h2>
-
-<pre><code>npm.commands.view(args, [silent,] callback)</code></pre>
-
-<h2 id="DESCRIPTION">DESCRIPTION</h2>
-
-<p>This command shows data about a package and prints it to the stream
-referenced by the <code>outfd</code> config, which defaults to stdout.</p>
-
-<p>The &quot;args&quot; parameter is an ordered list that closely resembles the command-line
-usage. The elements should be ordered such that the first element is
-the package and version (package@version). The version is optional. After that,
-the rest of the parameters are fields with optional subfields (&quot;field.subfield&quot;)
-which can be used to get only the information desired from the registry.</p>
-
-<p>The callback will be passed all of the data returned by the query.</p>
-
-<p>For example, to get the package registry entry for the <code>connect</code> package,
-you can do this:</p>
-
-<pre><code>npm.commands.view([&quot;connect&quot;], callback)</code></pre>
-
-<p>If no version is specified, &quot;latest&quot; is assumed.</p>
-
-<p>Field names can be specified after the package descriptor.
-For example, to show the dependencies of the <code>ronn</code> package at version
-0.3.5, you could do the following:</p>
-
-<pre><code>npm.commands.view([&quot;ronn@0.3.5&quot;, &quot;dependencies&quot;], callback)</code></pre>
-
-<p>You can view child field by separating them with a period.
-To view the git repository URL for the latest version of npm, you could
-do this:</p>
-
-<pre><code>npm.commands.view([&quot;npm&quot;, &quot;repository.url&quot;], callback)</code></pre>
-
-<p>For fields that are arrays, requesting a non-numeric field will return
-all of the values from the objects in the list. For example, to get all
-the contributor names for the &quot;express&quot; project, you can do this:</p>
-
-<pre><code>npm.commands.view([&quot;express&quot;, &quot;contributors.email&quot;], callback)</code></pre>
-
-<p>You may also use numeric indices in square braces to specifically select
-an item in an array field. To just get the email address of the first
-contributor in the list, you can do this:</p>
-
-<pre><code>npm.commands.view([&quot;express&quot;, &quot;contributors[0].email&quot;], callback)</code></pre>
-
-<p>Multiple fields may be specified, and will be printed one after another.
-For exampls, to get all the contributor names and email addresses, you
-can do this:</p>
-
-<pre><code>npm.commands.view([&quot;express&quot;, &quot;contributors.name&quot;, &quot;contributors.email&quot;], callback)</code></pre>
-
-<p>&quot;Person&quot; fields are shown as a string if they would be shown as an
-object. So, for example, this will show the list of npm contributors in
-the shortened string format. (See <code>npm help json</code> for more on this.)</p>
-
-<pre><code>npm.commands.view([&quot;npm&quot;, &quot;contributors&quot;], callback)</code></pre>
-
-<p>If a version range is provided, then data will be printed for every
-matching version of the package. This will show which version of jsdom
-was required by each matching version of yui3:</p>
-
-<pre><code>npm.commands.view([&quot;yui3@&#39;&gt;0.5.4&#39;&quot;, &quot;dependencies.jsdom&quot;], callback)</code></pre>
-
-<h2 id="OUTPUT">OUTPUT</h2>
-
-<p>If only a single string field for a single version is output, then it
-will not be colorized or quoted, so as to enable piping the output to
-another command.</p>
-
-<p>If the version range matches multiple versions, than each printed value
-will be prefixed with the version it applies to.</p>
-
-<p>If multiple fields are requested, than each of them are prefixed with
-the field name.</p>
-
-<p>Console output can be disabled by setting the &#39;silent&#39; parameter to true.</p>
-
-<h2 id="RETURN-VALUE">RETURN VALUE</h2>
-
-<p>The data returned will be an object in this formation:</p>
-
-<pre><code>{ &lt;version&gt;:
- { &lt;field&gt;: &lt;value&gt;
- , ... }
-, ... }</code></pre>
-
-<p>corresponding to the list of fields selected.</p>
-</div>
-<p id="footer">view &mdash; npm@1.2.30</p>
-<script>
-;(function () {
-var wrapper = document.getElementById("wrapper")
-var els = Array.prototype.slice.call(wrapper.getElementsByTagName("*"), 0)
- .filter(function (el) {
- return el.parentNode === wrapper
- && el.tagName.match(/H[1-6]/)
- && el.id
- })
-var l = 2
- , toc = document.createElement("ul")
-toc.innerHTML = els.map(function (el) {
- var i = el.tagName.charAt(1)
- , out = ""
- while (i > l) {
- out += "<ul>"
- l ++
- }
- while (i < l) {
- out += "</ul>"
- l --
- }
- out += "<li><a href='#" + el.id + "'>" +
- ( el.innerText || el.text || el.innerHTML)
- + "</a>"
- return out
-}).join("\n")
-toc.id = "toc"
-document.body.appendChild(toc)
-})()
-</script>
-</body></html>
diff --git a/deps/npm/html/api/whoami.html b/deps/npm/html/api/whoami.html
deleted file mode 100644
index 819184612..000000000
--- a/deps/npm/html/api/whoami.html
+++ /dev/null
@@ -1,56 +0,0 @@
-<!doctype html>
-<html>
- <title>whoami</title>
- <meta http-equiv="content-type" value="text/html;utf-8">
- <link rel="stylesheet" type="text/css" href="../static/style.css">
-
- <body>
- <div id="wrapper">
-<h1><a href="../api/whoami.html">whoami</a></h1> <p>Display npm username</p>
-
-<h2 id="SYNOPSIS">SYNOPSIS</h2>
-
-<pre><code>npm.commands.whoami(args, callback)</code></pre>
-
-<h2 id="DESCRIPTION">DESCRIPTION</h2>
-
-<p>Print the <code>username</code> config to standard output.</p>
-
-<p>&#39;args&#39; is never used and callback is never called with data.
-&#39;args&#39; must be present or things will break.</p>
-
-<p>This function is not useful programmatically</p>
-</div>
-<p id="footer">whoami &mdash; npm@1.2.30</p>
-<script>
-;(function () {
-var wrapper = document.getElementById("wrapper")
-var els = Array.prototype.slice.call(wrapper.getElementsByTagName("*"), 0)
- .filter(function (el) {
- return el.parentNode === wrapper
- && el.tagName.match(/H[1-6]/)
- && el.id
- })
-var l = 2
- , toc = document.createElement("ul")
-toc.innerHTML = els.map(function (el) {
- var i = el.tagName.charAt(1)
- , out = ""
- while (i > l) {
- out += "<ul>"
- l ++
- }
- while (i < l) {
- out += "</ul>"
- l --
- }
- out += "<li><a href='#" + el.id + "'>" +
- ( el.innerText || el.text || el.innerHTML)
- + "</a>"
- return out
-}).join("\n")
-toc.id = "toc"
-document.body.appendChild(toc)
-})()
-</script>
-</body></html>
diff --git a/deps/npm/html/doc/README.html b/deps/npm/html/doc/README.html
index 62bf0a078..df5c3ce03 100644
--- a/deps/npm/html/doc/README.html
+++ b/deps/npm/html/doc/README.html
@@ -3,152 +3,104 @@
<title>README</title>
<meta http-equiv="content-type" value="text/html;utf-8">
<link rel="stylesheet" type="text/css" href="../static/style.css">
+ <link rel="canonical" href="https://www.npmjs.org/doc/README.html">
+ <script async=true src="../../static/toc.js"></script>
<body>
<div id="wrapper">
-<h1><a href="../doc/npm.html">npm</a></h1> <p>node package manager</p>
-
-<h2 id="SYNOPSIS">SYNOPSIS</h2>
+<h1><a href="cli/npm.html">npm</a></h1> <p>node package manager</p>
+<p><a href="https://travis-ci.org/npm/npm"><img src="https://img.shields.io/travis/npm/npm/master.svg" alt="Build Status"></a></p>
+<h2 id="synopsis">SYNOPSIS</h2>
<p>This is just enough info to get you up and running.</p>
-
<p>Much more info available via <code>npm help</code> once it&#39;s installed.</p>
-
-<h2 id="IMPORTANT">IMPORTANT</h2>
-
+<h2 id="important">IMPORTANT</h2>
<p><strong>You need node v0.8 or higher to run this program.</strong></p>
-
<p>To install an old <strong>and unsupported</strong> version of npm that works on node 0.3
and prior, clone the git repo and dig through the old tags and branches.</p>
-
-<h2 id="Super-Easy-Install">Super Easy Install</h2>
-
+<h2 id="super-easy-install">Super Easy Install</h2>
<p>npm comes with node now.</p>
-
-<h3 id="Windows-Computers">Windows Computers</h3>
-
+<h3 id="windows-computers">Windows Computers</h3>
<p>Get the MSI. npm is in it.</p>
-
-<h3 id="Apple-Macintosh-Computers">Apple Macintosh Computers</h3>
-
+<h3 id="apple-macintosh-computers">Apple Macintosh Computers</h3>
<p>Get the pkg. npm is in it.</p>
-
-<h3 id="Other-Sorts-of-Unices">Other Sorts of Unices</h3>
-
+<h3 id="other-sorts-of-unices">Other Sorts of Unices</h3>
<p>Run <code>make install</code>. npm will be installed with node.</p>
-
<p>If you want a more fancy pants install (a different version, customized
paths, etc.) then read on.</p>
-
-<h2 id="Fancy-Install-Unix">Fancy Install (Unix)</h2>
-
+<h2 id="fancy-install-unix-">Fancy Install (Unix)</h2>
<p>There&#39;s a pretty robust install script at
-<a href="https://npmjs.org/install.sh">https://npmjs.org/install.sh</a>. You can download that and run it.</p>
-
-<h3 id="Slightly-Fancier">Slightly Fancier</h3>
-
+<a href="https://www.npmjs.org/install.sh">https://www.npmjs.org/install.sh</a>. You can download that and run it.</p>
+<p>Here&#39;s an example using curl:</p>
+<pre><code>curl -L https://npmjs.org/install.sh | sh
+</code></pre><h3 id="slightly-fancier">Slightly Fancier</h3>
<p>You can set any npm configuration params with that script:</p>
-
-<pre><code>npm_config_prefix=/some/path sh install.sh</code></pre>
-
-<p>Or, you can run it in uber-debuggery mode:</p>
-
-<pre><code>npm_debug=1 sh install.sh</code></pre>
-
-<h3 id="Even-Fancier">Even Fancier</h3>
-
+<pre><code>npm_config_prefix=/some/path sh install.sh
+</code></pre><p>Or, you can run it in uber-debuggery mode:</p>
+<pre><code>npm_debug=1 sh install.sh
+</code></pre><h3 id="even-fancier">Even Fancier</h3>
<p>Get the code with git. Use <code>make</code> to build the docs and do other stuff.
If you plan on hacking on npm, <code>make link</code> is your friend.</p>
-
<p>If you&#39;ve got the npm source code, you can also semi-permanently set
arbitrary config keys using the <code>./configure --key=val ...</code>, and then
run npm commands by doing <code>node cli.js &lt;cmd&gt; &lt;args&gt;</code>. (This is helpful
for testing, or running stuff without actually installing npm itself.)</p>
-
-<h2 id="Fancy-Windows-Install">Fancy Windows Install</h2>
-
+<h2 id="fancy-windows-install">Fancy Windows Install</h2>
<p>You can download a zip file from <a href="https://npmjs.org/dist/">https://npmjs.org/dist/</a>, and unpack it
in the same folder where node.exe lives.</p>
-
<p>If that&#39;s not fancy enough for you, then you can fetch the code with
git, and mess with it directly.</p>
-
-<h2 id="Installing-on-Cygwin">Installing on Cygwin</h2>
-
+<h2 id="installing-on-cygwin">Installing on Cygwin</h2>
<p>No.</p>
-
-<h2 id="Permissions-when-Using-npm-to-Install-Other-Stuff">Permissions when Using npm to Install Other Stuff</h2>
-
+<h2 id="permissions-when-using-npm-to-install-other-stuff">Permissions when Using npm to Install Other Stuff</h2>
<p><strong>tl;dr</strong></p>
-
-<ul><li>Use <code>sudo</code> for greater safety. Or don&#39;t, if you prefer not to.</li><li>npm will downgrade permissions if it&#39;s root before running any build
-scripts that package authors specified.</li></ul>
-
-<h3 id="More-details">More details...</h3>
-
+<ul>
+<li>Use <code>sudo</code> for greater safety. Or don&#39;t, if you prefer not to.</li>
+<li>npm will downgrade permissions if it&#39;s root before running any build
+scripts that package authors specified.</li>
+</ul>
+<h3 id="more-details-">More details...</h3>
<p>As of version 0.3, it is recommended to run npm as root.
This allows npm to change the user identifier to the <code>nobody</code> user prior
to running any package build or test commands.</p>
-
<p>If you are not the root user, or if you are on a platform that does not
support uid switching, then npm will not attempt to change the userid.</p>
-
<p>If you would like to ensure that npm <strong>always</strong> runs scripts as the
&quot;nobody&quot; user, and have it fail if it cannot downgrade permissions, then
set the following configuration param:</p>
-
-<pre><code>npm config set unsafe-perm false</code></pre>
-
-<p>This will prevent running in unsafe mode, even as non-root users.</p>
-
-<h2 id="Uninstalling">Uninstalling</h2>
-
+<pre><code>npm config set unsafe-perm false
+</code></pre><p>This will prevent running in unsafe mode, even as non-root users.</p>
+<h2 id="uninstalling">Uninstalling</h2>
<p>So sad to see you go.</p>
-
-<pre><code>sudo npm uninstall npm -g</code></pre>
-
-<p>Or, if that fails,</p>
-
-<pre><code>sudo make uninstall</code></pre>
-
-<h2 id="More-Severe-Uninstalling">More Severe Uninstalling</h2>
-
+<pre><code>sudo npm uninstall npm -g
+</code></pre><p>Or, if that fails,</p>
+<pre><code>sudo make uninstall
+</code></pre><h2 id="more-severe-uninstalling">More Severe Uninstalling</h2>
<p>Usually, the above instructions are sufficient. That will remove
npm, but leave behind anything you&#39;ve installed.</p>
-
<p>If you would like to remove all the packages that you have installed,
then you can use the <code>npm ls</code> command to find them, and then <code>npm rm</code> to
remove them.</p>
-
<p>To remove cruft left behind by npm 0.x, you can use the included
<code>clean-old.sh</code> script file. You can run it conveniently like this:</p>
-
-<pre><code>npm explore npm -g -- sh scripts/clean-old.sh</code></pre>
-
-<p>npm uses two configuration files, one for per-user configs, and another
+<pre><code>npm explore npm -g -- sh scripts/clean-old.sh
+</code></pre><p>npm uses two configuration files, one for per-user configs, and another
for global (every-user) configs. You can view them by doing:</p>
-
<pre><code>npm config get userconfig # defaults to ~/.npmrc
-npm config get globalconfig # defaults to /usr/local/etc/npmrc</code></pre>
-
-<p>Uninstalling npm does not remove configuration files by default. You
+npm config get globalconfig # defaults to /usr/local/etc/npmrc
+</code></pre><p>Uninstalling npm does not remove configuration files by default. You
must remove them yourself manually if you want them gone. Note that
this means that future npm installs will not remember the settings that
you have chosen.</p>
-
-<h2 id="Using-npm-Programmatically">Using npm Programmatically</h2>
-
+<h2 id="using-npm-programmatically">Using npm Programmatically</h2>
<p>If you would like to use npm programmatically, you can do that.
It&#39;s not very well documented, but it <em>is</em> rather simple.</p>
-
<p>Most of the time, unless you actually want to do all the things that
npm does, you should try using one of npm&#39;s dependencies rather than
using npm itself, if possible.</p>
-
<p>Eventually, npm will be just a thin cli wrapper around the modules
that it depends on, but for now, there are some things that you must
use npm itself to do.</p>
-
<pre><code>var npm = require(&quot;npm&quot;)
npm.load(myConfigObject, function (er) {
if (er) return handlError(er)
@@ -157,119 +109,82 @@ npm.load(myConfigObject, function (er) {
// command succeeded, and data might have some info
})
npm.on(&quot;log&quot;, function (message) { .... })
-})</code></pre>
-
-<p>The <code>load</code> function takes an object hash of the command-line configs.
+})
+</code></pre><p>The <code>load</code> function takes an object hash of the command-line configs.
The various <code>npm.commands.&lt;cmd&gt;</code> functions take an <strong>array</strong> of
positional argument <strong>strings</strong>. The last argument to any
<code>npm.commands.&lt;cmd&gt;</code> function is a callback. Some commands take other
optional arguments. Read the source.</p>
-
<p>You cannot set configs individually for any single npm function at this
time. Since <code>npm</code> is a singleton, any call to <code>npm.config.set</code> will
change the value for <em>all</em> npm commands in that process.</p>
-
<p>See <code>./bin/npm-cli.js</code> for an example of pulling config values off of the
command line arguments using nopt. You may also want to check out <code>npm
help config</code> to learn about all the options you can set there.</p>
-
-<h2 id="More-Docs">More Docs</h2>
-
-<p>Check out the <a href="https://npmjs.org/doc/">docs</a>,
-especially the <a href="https://npmjs.org/doc/faq.html">faq</a>.</p>
-
+<h2 id="more-docs">More Docs</h2>
+<p>Check out the <a href="https://www.npmjs.org/doc/">docs</a>,
+especially the <a href="https://www.npmjs.org/doc/faq.html">faq</a>.</p>
<p>You can use the <code>npm help</code> command to read any of them.</p>
-
<p>If you&#39;re a developer, and you want to use npm to publish your program,
-you should <a href="https://npmjs.org/doc/developers.html">read this</a></p>
-
-<h2 id="Legal-Stuff">Legal Stuff</h2>
-
-<p>&quot;npm&quot; and &quot;the npm registry&quot; are owned by Isaac Z. Schlueter. All
-rights not explicitly granted in the MIT license are reserved. See the
-included LICENSE file for more details.</p>
-
-<p>&quot;Node.js&quot; and &quot;node&quot; are trademarks owned by Joyent, Inc. npm is not
-officially part of the Node.js project, and is neither owned by nor
-officially affiliated with Joyent, Inc.</p>
-
-<p>The packages in the npm registry are not part of npm itself, and are the
-sole property of their respective maintainers. While every effort is
-made to ensure accountability, there is absolutely no guarantee,
-warrantee, or assertion made as to the quality, fitness for a specific
-purpose, or lack of malice in any given npm package. Modules
-published on the npm registry are not affiliated with or endorsed by
-Joyent, Inc., Isaac Z. Schlueter, Ryan Dahl, or the Node.js project.</p>
-
-<p>If you have a complaint about a package in the npm registry, and cannot
-resolve it with the package owner, please express your concerns to
-Isaac Z. Schlueter at <a href="mailto:i@izs.me">i@izs.me</a>.</p>
-
-<h3 id="In-plain-english">In plain english</h3>
-
-<p>This is mine; not my employer&#39;s, not Node&#39;s, not Joyent&#39;s, not Ryan
-Dahl&#39;s.</p>
-
+you should <a href="https://www.npmjs.org/doc/developers.html">read this</a></p>
+<h2 id="legal-stuff">Legal Stuff</h2>
+<p>&quot;npm&quot; and &quot;The npm Registry&quot; are owned by npm, Inc.
+All rights reserved. See the included LICENSE file for more details.</p>
+<p>&quot;Node.js&quot; and &quot;node&quot; are trademarks owned by Joyent, Inc.</p>
+<p>Modules published on the npm registry are not officially endorsed by
+npm, Inc. or the Node.js project.</p>
+<p>Data published to the npm registry is not part of npm itself, and is
+the sole property of the publisher. While every effort is made to
+ensure accountability, there is absolutely no guarantee, warrantee, or
+assertion expressed or implied as to the quality, fitness for a
+specific purpose, or lack of malice in any given npm package.</p>
+<p>If you have a complaint about a package in the public npm registry,
+and cannot <a href="https://www.npmjs.org/doc/misc/npm-disputes.html">resolve it with the package
+owner</a>, please email
+<a href="&#109;&#x61;&#x69;&#x6c;&#x74;&#111;&#58;&#115;&#117;&#x70;&#112;&#x6f;&#x72;&#x74;&#x40;&#110;&#112;&#109;&#x6a;&#x73;&#46;&#x63;&#111;&#109;">&#115;&#117;&#x70;&#112;&#x6f;&#x72;&#x74;&#x40;&#110;&#112;&#109;&#x6a;&#x73;&#46;&#x63;&#111;&#109;</a> and explain the situation.</p>
+<p>Any data published to The npm Registry (including user account
+information) may be removed or modified at the sole discretion of the
+npm server administrators.</p>
+<h3 id="in-plainer-english">In plainer english</h3>
+<p>npm is the property of npm, Inc.</p>
<p>If you publish something, it&#39;s yours, and you are solely accountable
-for it. Not me, not Node, not Joyent, not Ryan Dahl.</p>
-
-<p>If other people publish something, it&#39;s theirs. Not mine, not Node&#39;s,
-not Joyent&#39;s, not Ryan Dahl&#39;s.</p>
-
-<p>Yes, you can publish something evil. It will be removed promptly if
-reported, and we&#39;ll lose respect for you. But there is no vetting
-process for published modules.</p>
-
-<p>If this concerns you, inspect the source before using packages.</p>
-
-<h2 id="BUGS">BUGS</h2>
-
+for it.</p>
+<p>If other people publish something, it&#39;s theirs.</p>
+<p>Users can publish Bad Stuff. It will be removed promptly if reported.
+But there is no vetting process for published modules, and you use
+them at your own risk. Please inspect the source.</p>
+<p>If you publish Bad Stuff, we may delete it from the registry, or even
+ban your account in extreme cases. So don&#39;t do that.</p>
+<h2 id="bugs">BUGS</h2>
<p>When you find issues, please report them:</p>
-
-<ul><li>web:
-<a href="https://github.com/isaacs/npm/issues">https://github.com/isaacs/npm/issues</a></li><li>email:
-<a href="mailto:npm-@googlegroups.com">npm-@googlegroups.com</a></li></ul>
-
+<ul>
+<li>web:
+<a href="https://github.com/npm/npm/issues">https://github.com/npm/npm/issues</a></li>
+<li>email:
+<a href="&#109;&#97;&#105;&#x6c;&#116;&#x6f;&#58;&#x6e;&#x70;&#109;&#45;&#64;&#103;&#x6f;&#111;&#x67;&#x6c;&#101;&#x67;&#114;&#x6f;&#117;&#x70;&#115;&#x2e;&#99;&#111;&#109;">&#x6e;&#x70;&#109;&#45;&#64;&#103;&#x6f;&#111;&#x67;&#x6c;&#101;&#x67;&#114;&#x6f;&#117;&#x70;&#115;&#x2e;&#99;&#111;&#109;</a></li>
+</ul>
<p>Be sure to include <em>all</em> of the output from the npm command that didn&#39;t work
as expected. The <code>npm-debug.log</code> file is also helpful to provide.</p>
-
<p>You can also look for isaacs in #node.js on irc://irc.freenode.net. He
will no doubt tell you to put the output in a gist or email.</p>
+<h2 id="see-also">SEE ALSO</h2>
+<ul>
+<li><a href="cli/npm.html">npm(1)</a></li>
+<li><a href="misc/npm-faq.html">npm-faq(7)</a></li>
+<li><a href="cli/npm-help.html">npm-help(1)</a></li>
+<li><a href="misc/npm-index.html">npm-index(7)</a></li>
+</ul>
-<h2 id="SEE-ALSO">SEE ALSO</h2>
-
-<ul><li><a href="../doc/npm.html">npm(1)</a></li><li><a href="../doc/faq.html">faq(1)</a></li><li><a href="../doc/help.html">help(1)</a></li><li><a href="../doc/index.html">index(1)</a></li></ul>
</div>
-<p id="footer"><a href="../doc/README.html">README</a> &mdash; npm@1.2.30</p>
-<script>
-;(function () {
-var wrapper = document.getElementById("wrapper")
-var els = Array.prototype.slice.call(wrapper.getElementsByTagName("*"), 0)
- .filter(function (el) {
- return el.parentNode === wrapper
- && el.tagName.match(/H[1-6]/)
- && el.id
- })
-var l = 2
- , toc = document.createElement("ul")
-toc.innerHTML = els.map(function (el) {
- var i = el.tagName.charAt(1)
- , out = ""
- while (i > l) {
- out += "<ul>"
- l ++
- }
- while (i < l) {
- out += "</ul>"
- l --
- }
- out += "<li><a href='#" + el.id + "'>" +
- ( el.innerText || el.text || el.innerHTML)
- + "</a>"
- return out
-}).join("\n")
-toc.id = "toc"
-document.body.appendChild(toc)
-})()
-</script>
-</body></html>
+
+<table border=0 cellspacing=0 cellpadding=0 id=npmlogo>
+<tr><td style="width:180px;height:10px;background:rgb(237,127,127)" colspan=18>&nbsp;</td></tr>
+<tr><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td colspan=6 style="width:60px;height:10px;background:#fff">&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td></tr>
+<tr><td colspan=2 style="width:20px;height:30px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=4 colspan=2>&nbsp;</td><td style="width:10px;height:20px;background:rgb(237,127,127)" rowspan=2>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=3 colspan=2>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff" rowspan=2>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff">&nbsp;</td></tr>
+<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
+<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
+</table>
+<p id="footer"><a href="../doc/README.html">README</a> &mdash; npm@1.4.10</p>
+
diff --git a/deps/npm/html/doc/adduser.html b/deps/npm/html/doc/adduser.html
deleted file mode 100644
index 97cd10afa..000000000
--- a/deps/npm/html/doc/adduser.html
+++ /dev/null
@@ -1,74 +0,0 @@
-<!doctype html>
-<html>
- <title>adduser</title>
- <meta http-equiv="content-type" value="text/html;utf-8">
- <link rel="stylesheet" type="text/css" href="../static/style.css">
-
- <body>
- <div id="wrapper">
-<h1><a href="../doc/adduser.html">adduser</a></h1> <p>Add a registry user account</p>
-
-<h2 id="SYNOPSIS">SYNOPSIS</h2>
-
-<pre><code>npm adduser</code></pre>
-
-<h2 id="DESCRIPTION">DESCRIPTION</h2>
-
-<p>Create or verify a user named <code>&lt;username&gt;</code> in the npm registry, and
-save the credentials to the <code>.npmrc</code> file.</p>
-
-<p>The username, password, and email are read in from prompts.</p>
-
-<p>You may use this command to change your email address, but not username
-or password.</p>
-
-<p>To reset your password, go to <a href="http://admin.npmjs.org/">http://admin.npmjs.org/</a></p>
-
-<p>You may use this command multiple times with the same user account to
-authorize on a new machine.</p>
-
-<h2 id="CONFIGURATION">CONFIGURATION</h2>
-
-<h3 id="registry">registry</h3>
-
-<p>Default: http://registry.npmjs.org/</p>
-
-<p>The base URL of the npm package registry.</p>
-
-<h2 id="SEE-ALSO">SEE ALSO</h2>
-
-<ul><li><a href="../doc/registry.html">registry(1)</a></li><li><a href="../doc/config.html">config(1)</a></li><li><a href="../doc/owner.html">owner(1)</a></li><li><a href="../doc/whoami.html">whoami(1)</a></li></ul>
-</div>
-<p id="footer">adduser &mdash; npm@1.2.30</p>
-<script>
-;(function () {
-var wrapper = document.getElementById("wrapper")
-var els = Array.prototype.slice.call(wrapper.getElementsByTagName("*"), 0)
- .filter(function (el) {
- return el.parentNode === wrapper
- && el.tagName.match(/H[1-6]/)
- && el.id
- })
-var l = 2
- , toc = document.createElement("ul")
-toc.innerHTML = els.map(function (el) {
- var i = el.tagName.charAt(1)
- , out = ""
- while (i > l) {
- out += "<ul>"
- l ++
- }
- while (i < l) {
- out += "</ul>"
- l --
- }
- out += "<li><a href='#" + el.id + "'>" +
- ( el.innerText || el.text || el.innerHTML)
- + "</a>"
- return out
-}).join("\n")
-toc.id = "toc"
-document.body.appendChild(toc)
-})()
-</script>
-</body></html>
diff --git a/deps/npm/html/doc/api/npm-bin.html b/deps/npm/html/doc/api/npm-bin.html
new file mode 100644
index 000000000..56bde010d
--- /dev/null
+++ b/deps/npm/html/doc/api/npm-bin.html
@@ -0,0 +1,32 @@
+<!doctype html>
+<html>
+ <title>npm-bin</title>
+ <meta http-equiv="content-type" value="text/html;utf-8">
+ <link rel="stylesheet" type="text/css" href="../../static/style.css">
+ <link rel="canonical" href="https://www.npmjs.org/doc/api/npm-bin.html">
+ <script async=true src="../../static/toc.js"></script>
+
+ <body>
+ <div id="wrapper">
+
+<h1><a href="../api/npm-bin.html">npm-bin</a></h1> <p>Display npm bin folder</p>
+<h2 id="synopsis">SYNOPSIS</h2>
+<pre><code>npm.commands.bin(args, cb)
+</code></pre><h2 id="description">DESCRIPTION</h2>
+<p>Print the folder where npm will install executables.</p>
+<p>This function should not be used programmatically. Instead, just refer
+to the <code>npm.bin</code> member.</p>
+
+</div>
+
+<table border=0 cellspacing=0 cellpadding=0 id=npmlogo>
+<tr><td style="width:180px;height:10px;background:rgb(237,127,127)" colspan=18>&nbsp;</td></tr>
+<tr><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td colspan=6 style="width:60px;height:10px;background:#fff">&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td></tr>
+<tr><td colspan=2 style="width:20px;height:30px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=4 colspan=2>&nbsp;</td><td style="width:10px;height:20px;background:rgb(237,127,127)" rowspan=2>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=3 colspan=2>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff" rowspan=2>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff">&nbsp;</td></tr>
+<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
+<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
+</table>
+<p id="footer">npm-bin &mdash; npm@1.4.10</p>
+
diff --git a/deps/npm/html/doc/api/npm-bugs.html b/deps/npm/html/doc/api/npm-bugs.html
new file mode 100644
index 000000000..4e5074f54
--- /dev/null
+++ b/deps/npm/html/doc/api/npm-bugs.html
@@ -0,0 +1,37 @@
+<!doctype html>
+<html>
+ <title>npm-bugs</title>
+ <meta http-equiv="content-type" value="text/html;utf-8">
+ <link rel="stylesheet" type="text/css" href="../../static/style.css">
+ <link rel="canonical" href="https://www.npmjs.org/doc/api/npm-bugs.html">
+ <script async=true src="../../static/toc.js"></script>
+
+ <body>
+ <div id="wrapper">
+
+<h1><a href="../api/npm-bugs.html">npm-bugs</a></h1> <p>Bugs for a package in a web browser maybe</p>
+<h2 id="synopsis">SYNOPSIS</h2>
+<pre><code>npm.commands.bugs(package, callback)
+</code></pre><h2 id="description">DESCRIPTION</h2>
+<p>This command tries to guess at the likely location of a package&#39;s
+bug tracker URL, and then tries to open it using the <code>--browser</code>
+config param.</p>
+<p>Like other commands, the first parameter is an array. This command only
+uses the first element, which is expected to be a package name with an
+optional version number.</p>
+<p>This command will launch a browser, so this command may not be the most
+friendly for programmatic use.</p>
+
+</div>
+
+<table border=0 cellspacing=0 cellpadding=0 id=npmlogo>
+<tr><td style="width:180px;height:10px;background:rgb(237,127,127)" colspan=18>&nbsp;</td></tr>
+<tr><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td colspan=6 style="width:60px;height:10px;background:#fff">&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td></tr>
+<tr><td colspan=2 style="width:20px;height:30px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=4 colspan=2>&nbsp;</td><td style="width:10px;height:20px;background:rgb(237,127,127)" rowspan=2>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=3 colspan=2>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff" rowspan=2>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff">&nbsp;</td></tr>
+<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
+<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
+</table>
+<p id="footer">npm-bugs &mdash; npm@1.4.10</p>
+
diff --git a/deps/npm/html/doc/api/npm-commands.html b/deps/npm/html/doc/api/npm-commands.html
new file mode 100644
index 000000000..3c68e4ba5
--- /dev/null
+++ b/deps/npm/html/doc/api/npm-commands.html
@@ -0,0 +1,40 @@
+<!doctype html>
+<html>
+ <title>npm-commands</title>
+ <meta http-equiv="content-type" value="text/html;utf-8">
+ <link rel="stylesheet" type="text/css" href="../../static/style.css">
+ <link rel="canonical" href="https://www.npmjs.org/doc/api/npm-commands.html">
+ <script async=true src="../../static/toc.js"></script>
+
+ <body>
+ <div id="wrapper">
+
+<h1><a href="../api/npm-commands.html">npm-commands</a></h1> <p>npm commands</p>
+<h2 id="synopsis">SYNOPSIS</h2>
+<pre><code>npm.commands[&lt;command&gt;](args, callback)
+</code></pre><h2 id="description">DESCRIPTION</h2>
+<p>npm comes with a full set of commands, and each of the commands takes a
+similar set of arguments.</p>
+<p>In general, all commands on the command object take an <strong>array</strong> of positional
+argument <strong>strings</strong>. The last argument to any function is a callback. Some
+commands are special and take other optional arguments.</p>
+<p>All commands have their own man page. See <code>man npm-&lt;command&gt;</code> for command-line
+usage, or <code>man 3 npm-&lt;command&gt;</code> for programmatic usage.</p>
+<h2 id="see-also">SEE ALSO</h2>
+<ul>
+<li><a href="../misc/npm-index.html">npm-index(7)</a></li>
+</ul>
+
+</div>
+
+<table border=0 cellspacing=0 cellpadding=0 id=npmlogo>
+<tr><td style="width:180px;height:10px;background:rgb(237,127,127)" colspan=18>&nbsp;</td></tr>
+<tr><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td colspan=6 style="width:60px;height:10px;background:#fff">&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td></tr>
+<tr><td colspan=2 style="width:20px;height:30px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=4 colspan=2>&nbsp;</td><td style="width:10px;height:20px;background:rgb(237,127,127)" rowspan=2>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=3 colspan=2>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff" rowspan=2>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff">&nbsp;</td></tr>
+<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
+<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
+</table>
+<p id="footer">npm-commands &mdash; npm@1.4.10</p>
+
diff --git a/deps/npm/html/doc/api/npm-config.html b/deps/npm/html/doc/api/npm-config.html
new file mode 100644
index 000000000..eee2e52bb
--- /dev/null
+++ b/deps/npm/html/doc/api/npm-config.html
@@ -0,0 +1,61 @@
+<!doctype html>
+<html>
+ <title>npm-config</title>
+ <meta http-equiv="content-type" value="text/html;utf-8">
+ <link rel="stylesheet" type="text/css" href="../../static/style.css">
+ <link rel="canonical" href="https://www.npmjs.org/doc/api/npm-config.html">
+ <script async=true src="../../static/toc.js"></script>
+
+ <body>
+ <div id="wrapper">
+
+<h1><a href="../api/npm-config.html">npm-config</a></h1> <p>Manage the npm configuration files</p>
+<h2 id="synopsis">SYNOPSIS</h2>
+<pre><code>npm.commands.config(args, callback)
+var val = npm.config.get(key)
+npm.config.set(key, val)
+</code></pre><h2 id="description">DESCRIPTION</h2>
+<p>This function acts much the same way as the command-line version. The first
+element in the array tells config what to do. Possible values are:</p>
+<ul>
+<li><p><code>set</code></p>
+<p> Sets a config parameter. The second element in <code>args</code> is interpreted as the
+ key, and the third element is interpreted as the value.</p>
+</li>
+<li><p><code>get</code></p>
+<p> Gets the value of a config parameter. The second element in <code>args</code> is the
+ key to get the value of.</p>
+</li>
+<li><p><code>delete</code> (<code>rm</code> or <code>del</code>)</p>
+<p> Deletes a parameter from the config. The second element in <code>args</code> is the
+ key to delete.</p>
+</li>
+<li><p><code>list</code> (<code>ls</code>)</p>
+<p> Show all configs that aren&#39;t secret. No parameters necessary.</p>
+</li>
+<li><p><code>edit</code>:</p>
+<p> Opens the config file in the default editor. This command isn&#39;t very useful
+ programmatically, but it is made available.</p>
+</li>
+</ul>
+<p>To programmatically access npm configuration settings, or set them for
+the duration of a program, use the <code>npm.config.set</code> and <code>npm.config.get</code>
+functions instead.</p>
+<h2 id="see-also">SEE ALSO</h2>
+<ul>
+<li><a href="../api/npm.html">npm(3)</a></li>
+</ul>
+
+</div>
+
+<table border=0 cellspacing=0 cellpadding=0 id=npmlogo>
+<tr><td style="width:180px;height:10px;background:rgb(237,127,127)" colspan=18>&nbsp;</td></tr>
+<tr><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td colspan=6 style="width:60px;height:10px;background:#fff">&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td></tr>
+<tr><td colspan=2 style="width:20px;height:30px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=4 colspan=2>&nbsp;</td><td style="width:10px;height:20px;background:rgb(237,127,127)" rowspan=2>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=3 colspan=2>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff" rowspan=2>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff">&nbsp;</td></tr>
+<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
+<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
+</table>
+<p id="footer">npm-config &mdash; npm@1.4.10</p>
+
diff --git a/deps/npm/html/doc/api/npm-deprecate.html b/deps/npm/html/doc/api/npm-deprecate.html
new file mode 100644
index 000000000..9513b9648
--- /dev/null
+++ b/deps/npm/html/doc/api/npm-deprecate.html
@@ -0,0 +1,51 @@
+<!doctype html>
+<html>
+ <title>npm-deprecate</title>
+ <meta http-equiv="content-type" value="text/html;utf-8">
+ <link rel="stylesheet" type="text/css" href="../../static/style.css">
+ <link rel="canonical" href="https://www.npmjs.org/doc/api/npm-deprecate.html">
+ <script async=true src="../../static/toc.js"></script>
+
+ <body>
+ <div id="wrapper">
+
+<h1><a href="../api/npm-deprecate.html">npm-deprecate</a></h1> <p>Deprecate a version of a package</p>
+<h2 id="synopsis">SYNOPSIS</h2>
+<pre><code>npm.commands.deprecate(args, callback)
+</code></pre><h2 id="description">DESCRIPTION</h2>
+<p>This command will update the npm registry entry for a package, providing
+a deprecation warning to all who attempt to install it.</p>
+<p>The &#39;args&#39; parameter must have exactly two elements:</p>
+<ul>
+<li><p><code>package[@version]</code></p>
+<p> The <code>version</code> portion is optional, and may be either a range, or a
+ specific version, or a tag.</p>
+</li>
+<li><p><code>message</code></p>
+<p> The warning message that will be printed whenever a user attempts to
+ install the package.</p>
+</li>
+</ul>
+<p>Note that you must be the package owner to deprecate something. See the
+<code>owner</code> and <code>adduser</code> help topics.</p>
+<p>To un-deprecate a package, specify an empty string (<code>&quot;&quot;</code>) for the <code>message</code> argument.</p>
+<h2 id="see-also">SEE ALSO</h2>
+<ul>
+<li><a href="../api/npm-publish.html">npm-publish(3)</a></li>
+<li><a href="../api/npm-unpublish.html">npm-unpublish(3)</a></li>
+<li><a href="../misc/npm-registry.html">npm-registry(7)</a></li>
+</ul>
+
+</div>
+
+<table border=0 cellspacing=0 cellpadding=0 id=npmlogo>
+<tr><td style="width:180px;height:10px;background:rgb(237,127,127)" colspan=18>&nbsp;</td></tr>
+<tr><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td colspan=6 style="width:60px;height:10px;background:#fff">&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td></tr>
+<tr><td colspan=2 style="width:20px;height:30px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=4 colspan=2>&nbsp;</td><td style="width:10px;height:20px;background:rgb(237,127,127)" rowspan=2>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=3 colspan=2>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff" rowspan=2>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff">&nbsp;</td></tr>
+<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
+<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
+</table>
+<p id="footer">npm-deprecate &mdash; npm@1.4.10</p>
+
diff --git a/deps/npm/html/doc/api/npm-docs.html b/deps/npm/html/doc/api/npm-docs.html
new file mode 100644
index 000000000..62e246e06
--- /dev/null
+++ b/deps/npm/html/doc/api/npm-docs.html
@@ -0,0 +1,37 @@
+<!doctype html>
+<html>
+ <title>npm-docs</title>
+ <meta http-equiv="content-type" value="text/html;utf-8">
+ <link rel="stylesheet" type="text/css" href="../../static/style.css">
+ <link rel="canonical" href="https://www.npmjs.org/doc/api/npm-docs.html">
+ <script async=true src="../../static/toc.js"></script>
+
+ <body>
+ <div id="wrapper">
+
+<h1><a href="../api/npm-docs.html">npm-docs</a></h1> <p>Docs for a package in a web browser maybe</p>
+<h2 id="synopsis">SYNOPSIS</h2>
+<pre><code>npm.commands.docs(package, callback)
+</code></pre><h2 id="description">DESCRIPTION</h2>
+<p>This command tries to guess at the likely location of a package&#39;s
+documentation URL, and then tries to open it using the <code>--browser</code>
+config param.</p>
+<p>Like other commands, the first parameter is an array. This command only
+uses the first element, which is expected to be a package name with an
+optional version number.</p>
+<p>This command will launch a browser, so this command may not be the most
+friendly for programmatic use.</p>
+
+</div>
+
+<table border=0 cellspacing=0 cellpadding=0 id=npmlogo>
+<tr><td style="width:180px;height:10px;background:rgb(237,127,127)" colspan=18>&nbsp;</td></tr>
+<tr><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td colspan=6 style="width:60px;height:10px;background:#fff">&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td></tr>
+<tr><td colspan=2 style="width:20px;height:30px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=4 colspan=2>&nbsp;</td><td style="width:10px;height:20px;background:rgb(237,127,127)" rowspan=2>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=3 colspan=2>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff" rowspan=2>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff">&nbsp;</td></tr>
+<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
+<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
+</table>
+<p id="footer">npm-docs &mdash; npm@1.4.10</p>
+
diff --git a/deps/npm/html/doc/api/npm-edit.html b/deps/npm/html/doc/api/npm-edit.html
new file mode 100644
index 000000000..78e685f04
--- /dev/null
+++ b/deps/npm/html/doc/api/npm-edit.html
@@ -0,0 +1,40 @@
+<!doctype html>
+<html>
+ <title>npm-edit</title>
+ <meta http-equiv="content-type" value="text/html;utf-8">
+ <link rel="stylesheet" type="text/css" href="../../static/style.css">
+ <link rel="canonical" href="https://www.npmjs.org/doc/api/npm-edit.html">
+ <script async=true src="../../static/toc.js"></script>
+
+ <body>
+ <div id="wrapper">
+
+<h1><a href="../api/npm-edit.html">npm-edit</a></h1> <p>Edit an installed package</p>
+<h2 id="synopsis">SYNOPSIS</h2>
+<pre><code>npm.commands.edit(package, callback)
+</code></pre><h2 id="description">DESCRIPTION</h2>
+<p>Opens the package folder in the default editor (or whatever you&#39;ve
+configured as the npm <code>editor</code> config -- see <code>npm help config</code>.)</p>
+<p>After it has been edited, the package is rebuilt so as to pick up any
+changes in compiled packages.</p>
+<p>For instance, you can do <code>npm install connect</code> to install connect
+into your package, and then <code>npm.commands.edit([&quot;connect&quot;], callback)</code>
+to make a few changes to your locally installed copy.</p>
+<p>The first parameter is a string array with a single element, the package
+to open. The package can optionally have a version number attached.</p>
+<p>Since this command opens an editor in a new process, be careful about where
+and how this is used.</p>
+
+</div>
+
+<table border=0 cellspacing=0 cellpadding=0 id=npmlogo>
+<tr><td style="width:180px;height:10px;background:rgb(237,127,127)" colspan=18>&nbsp;</td></tr>
+<tr><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td colspan=6 style="width:60px;height:10px;background:#fff">&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td></tr>
+<tr><td colspan=2 style="width:20px;height:30px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=4 colspan=2>&nbsp;</td><td style="width:10px;height:20px;background:rgb(237,127,127)" rowspan=2>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=3 colspan=2>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff" rowspan=2>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff">&nbsp;</td></tr>
+<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
+<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
+</table>
+<p id="footer">npm-edit &mdash; npm@1.4.10</p>
+
diff --git a/deps/npm/html/doc/api/npm-explore.html b/deps/npm/html/doc/api/npm-explore.html
new file mode 100644
index 000000000..d177e9089
--- /dev/null
+++ b/deps/npm/html/doc/api/npm-explore.html
@@ -0,0 +1,35 @@
+<!doctype html>
+<html>
+ <title>npm-explore</title>
+ <meta http-equiv="content-type" value="text/html;utf-8">
+ <link rel="stylesheet" type="text/css" href="../../static/style.css">
+ <link rel="canonical" href="https://www.npmjs.org/doc/api/npm-explore.html">
+ <script async=true src="../../static/toc.js"></script>
+
+ <body>
+ <div id="wrapper">
+
+<h1><a href="../api/npm-explore.html">npm-explore</a></h1> <p>Browse an installed package</p>
+<h2 id="synopsis">SYNOPSIS</h2>
+<pre><code>npm.commands.explore(args, callback)
+</code></pre><h2 id="description">DESCRIPTION</h2>
+<p>Spawn a subshell in the directory of the installed package specified.</p>
+<p>If a command is specified, then it is run in the subshell, which then
+immediately terminates.</p>
+<p>Note that the package is <em>not</em> automatically rebuilt afterwards, so be
+sure to use <code>npm rebuild &lt;pkg&gt;</code> if you make any changes.</p>
+<p>The first element in the &#39;args&#39; parameter must be a package name. After that is the optional command, which can be any number of strings. All of the strings will be combined into one, space-delimited command.</p>
+
+</div>
+
+<table border=0 cellspacing=0 cellpadding=0 id=npmlogo>
+<tr><td style="width:180px;height:10px;background:rgb(237,127,127)" colspan=18>&nbsp;</td></tr>
+<tr><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td colspan=6 style="width:60px;height:10px;background:#fff">&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td></tr>
+<tr><td colspan=2 style="width:20px;height:30px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=4 colspan=2>&nbsp;</td><td style="width:10px;height:20px;background:rgb(237,127,127)" rowspan=2>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=3 colspan=2>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff" rowspan=2>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff">&nbsp;</td></tr>
+<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
+<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
+</table>
+<p id="footer">npm-explore &mdash; npm@1.4.10</p>
+
diff --git a/deps/npm/html/doc/api/npm-help-search.html b/deps/npm/html/doc/api/npm-help-search.html
new file mode 100644
index 000000000..ec4c6ea06
--- /dev/null
+++ b/deps/npm/html/doc/api/npm-help-search.html
@@ -0,0 +1,48 @@
+<!doctype html>
+<html>
+ <title>npm-help-search</title>
+ <meta http-equiv="content-type" value="text/html;utf-8">
+ <link rel="stylesheet" type="text/css" href="../../static/style.css">
+ <link rel="canonical" href="https://www.npmjs.org/doc/api/npm-help-search.html">
+ <script async=true src="../../static/toc.js"></script>
+
+ <body>
+ <div id="wrapper">
+
+<h1><a href="../api/npm-help-search.html">npm-help-search</a></h1> <p>Search the help pages</p>
+<h2 id="synopsis">SYNOPSIS</h2>
+<pre><code>npm.commands.helpSearch(args, [silent,] callback)
+</code></pre><h2 id="description">DESCRIPTION</h2>
+<p>This command is rarely useful, but it exists in the rare case that it is.</p>
+<p>This command takes an array of search terms and returns the help pages that
+match in order of best match.</p>
+<p>If there is only one match, then npm displays that help section. If there
+are multiple results, the results are printed to the screen formatted and the
+array of results is returned. Each result is an object with these properties:</p>
+<ul>
+<li>hits:
+A map of args to number of hits on that arg. For example, {&quot;npm&quot;: 3}</li>
+<li>found:
+Total number of unique args that matched.</li>
+<li>totalHits:
+Total number of hits.</li>
+<li>lines:
+An array of all matching lines (and some adjacent lines).</li>
+<li>file:
+Name of the file that matched</li>
+</ul>
+<p>The silent parameter is not neccessary not used, but it may in the future.</p>
+
+</div>
+
+<table border=0 cellspacing=0 cellpadding=0 id=npmlogo>
+<tr><td style="width:180px;height:10px;background:rgb(237,127,127)" colspan=18>&nbsp;</td></tr>
+<tr><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td colspan=6 style="width:60px;height:10px;background:#fff">&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td></tr>
+<tr><td colspan=2 style="width:20px;height:30px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=4 colspan=2>&nbsp;</td><td style="width:10px;height:20px;background:rgb(237,127,127)" rowspan=2>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=3 colspan=2>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff" rowspan=2>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff">&nbsp;</td></tr>
+<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
+<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
+</table>
+<p id="footer">npm-help-search &mdash; npm@1.4.10</p>
+
diff --git a/deps/npm/html/doc/api/npm-init.html b/deps/npm/html/doc/api/npm-init.html
new file mode 100644
index 000000000..81d790bb7
--- /dev/null
+++ b/deps/npm/html/doc/api/npm-init.html
@@ -0,0 +1,43 @@
+<!doctype html>
+<html>
+ <title>npm-init</title>
+ <meta http-equiv="content-type" value="text/html;utf-8">
+ <link rel="stylesheet" type="text/css" href="../../static/style.css">
+ <link rel="canonical" href="https://www.npmjs.org/doc/api/npm-init.html">
+ <script async=true src="../../static/toc.js"></script>
+
+ <body>
+ <div id="wrapper">
+
+<h1>npm <a href="../api/init.html">init</a></h1> <p>Interactively create a package.json file</p>
+<h2 id="synopsis">SYNOPSIS</h2>
+<pre><code>npm.commands.init(args, callback)
+</code></pre><h2 id="description">DESCRIPTION</h2>
+<p>This will ask you a bunch of questions, and then write a package.json for you.</p>
+<p>It attempts to make reasonable guesses about what you want things to be set to,
+and then writes a package.json file with the options you&#39;ve selected.</p>
+<p>If you already have a package.json file, it&#39;ll read that first, and default to
+the options in there.</p>
+<p>It is strictly additive, so it does not delete options from your package.json
+without a really good reason to do so.</p>
+<p>Since this function expects to be run on the command-line, it doesn&#39;t work very
+well as a programmatically. The best option is to roll your own, and since
+JavaScript makes it stupid simple to output formatted JSON, that is the
+preferred method. If you&#39;re sure you want to handle command-line prompting,
+then go ahead and use this programmatically.</p>
+<h2 id="see-also">SEE ALSO</h2>
+<p><a href="../files/package.json.html">package.json(5)</a></p>
+
+</div>
+
+<table border=0 cellspacing=0 cellpadding=0 id=npmlogo>
+<tr><td style="width:180px;height:10px;background:rgb(237,127,127)" colspan=18>&nbsp;</td></tr>
+<tr><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td colspan=6 style="width:60px;height:10px;background:#fff">&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td></tr>
+<tr><td colspan=2 style="width:20px;height:30px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=4 colspan=2>&nbsp;</td><td style="width:10px;height:20px;background:rgb(237,127,127)" rowspan=2>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=3 colspan=2>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff" rowspan=2>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff">&nbsp;</td></tr>
+<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
+<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
+</table>
+<p id="footer">npm-init &mdash; npm@1.4.10</p>
+
diff --git a/deps/npm/html/doc/api/npm-install.html b/deps/npm/html/doc/api/npm-install.html
new file mode 100644
index 000000000..5fa76079a
--- /dev/null
+++ b/deps/npm/html/doc/api/npm-install.html
@@ -0,0 +1,36 @@
+<!doctype html>
+<html>
+ <title>npm-install</title>
+ <meta http-equiv="content-type" value="text/html;utf-8">
+ <link rel="stylesheet" type="text/css" href="../../static/style.css">
+ <link rel="canonical" href="https://www.npmjs.org/doc/api/npm-install.html">
+ <script async=true src="../../static/toc.js"></script>
+
+ <body>
+ <div id="wrapper">
+
+<h1><a href="../api/npm-install.html">npm-install</a></h1> <p>install a package programmatically</p>
+<h2 id="synopsis">SYNOPSIS</h2>
+<pre><code>npm.commands.install([where,] packages, callback)
+</code></pre><h2 id="description">DESCRIPTION</h2>
+<p>This acts much the same ways as installing on the command-line.</p>
+<p>The &#39;where&#39; parameter is optional and only used internally, and it specifies
+where the packages should be installed to.</p>
+<p>The &#39;packages&#39; parameter is an array of strings. Each element in the array is
+the name of a package to be installed.</p>
+<p>Finally, &#39;callback&#39; is a function that will be called when all packages have been
+installed or when an error has been encountered.</p>
+
+</div>
+
+<table border=0 cellspacing=0 cellpadding=0 id=npmlogo>
+<tr><td style="width:180px;height:10px;background:rgb(237,127,127)" colspan=18>&nbsp;</td></tr>
+<tr><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td colspan=6 style="width:60px;height:10px;background:#fff">&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td></tr>
+<tr><td colspan=2 style="width:20px;height:30px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=4 colspan=2>&nbsp;</td><td style="width:10px;height:20px;background:rgb(237,127,127)" rowspan=2>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=3 colspan=2>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff" rowspan=2>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff">&nbsp;</td></tr>
+<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
+<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
+</table>
+<p id="footer">npm-install &mdash; npm@1.4.10</p>
+
diff --git a/deps/npm/html/doc/api/npm-link.html b/deps/npm/html/doc/api/npm-link.html
new file mode 100644
index 000000000..1f162e3b4
--- /dev/null
+++ b/deps/npm/html/doc/api/npm-link.html
@@ -0,0 +1,46 @@
+<!doctype html>
+<html>
+ <title>npm-link</title>
+ <meta http-equiv="content-type" value="text/html;utf-8">
+ <link rel="stylesheet" type="text/css" href="../../static/style.css">
+ <link rel="canonical" href="https://www.npmjs.org/doc/api/npm-link.html">
+ <script async=true src="../../static/toc.js"></script>
+
+ <body>
+ <div id="wrapper">
+
+<h1><a href="../api/npm-link.html">npm-link</a></h1> <p>Symlink a package folder</p>
+<h2 id="synopsis">SYNOPSIS</h2>
+<pre><code>npm.command.link(callback)
+npm.command.link(packages, callback)
+</code></pre><h2 id="description">DESCRIPTION</h2>
+<p>Package linking is a two-step process.</p>
+<p>Without parameters, link will create a globally-installed
+symbolic link from <code>prefix/package-name</code> to the current folder.</p>
+<p>With a parameters, link will create a symlink from the local <code>node_modules</code>
+folder to the global symlink.</p>
+<p>When creating tarballs for <code>npm publish</code>, the linked packages are
+&quot;snapshotted&quot; to their current state by resolving the symbolic links.</p>
+<p>This is
+handy for installing your own stuff, so that you can work on it and test it
+iteratively without having to continually rebuild.</p>
+<p>For example:</p>
+<pre><code>npm.commands.link(cb) # creates global link from the cwd
+ # (say redis package)
+npm.commands.link(&#39;redis&#39;, cb) # link-install the package
+</code></pre><p>Now, any changes to the redis package will be reflected in
+the package in the current working directory</p>
+
+</div>
+
+<table border=0 cellspacing=0 cellpadding=0 id=npmlogo>
+<tr><td style="width:180px;height:10px;background:rgb(237,127,127)" colspan=18>&nbsp;</td></tr>
+<tr><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td colspan=6 style="width:60px;height:10px;background:#fff">&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td></tr>
+<tr><td colspan=2 style="width:20px;height:30px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=4 colspan=2>&nbsp;</td><td style="width:10px;height:20px;background:rgb(237,127,127)" rowspan=2>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=3 colspan=2>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff" rowspan=2>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff">&nbsp;</td></tr>
+<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
+<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
+</table>
+<p id="footer">npm-link &mdash; npm@1.4.10</p>
+
diff --git a/deps/npm/html/doc/api/npm-load.html b/deps/npm/html/doc/api/npm-load.html
new file mode 100644
index 000000000..b996d7aa9
--- /dev/null
+++ b/deps/npm/html/doc/api/npm-load.html
@@ -0,0 +1,41 @@
+<!doctype html>
+<html>
+ <title>npm-load</title>
+ <meta http-equiv="content-type" value="text/html;utf-8">
+ <link rel="stylesheet" type="text/css" href="../../static/style.css">
+ <link rel="canonical" href="https://www.npmjs.org/doc/api/npm-load.html">
+ <script async=true src="../../static/toc.js"></script>
+
+ <body>
+ <div id="wrapper">
+
+<h1><a href="../api/npm-load.html">npm-load</a></h1> <p>Load config settings</p>
+<h2 id="synopsis">SYNOPSIS</h2>
+<pre><code>npm.load(conf, cb)
+</code></pre><h2 id="description">DESCRIPTION</h2>
+<p>npm.load() must be called before any other function call. Both parameters are
+optional, but the second is recommended.</p>
+<p>The first parameter is an object hash of command-line config params, and the
+second parameter is a callback that will be called when npm is loaded and
+ready to serve.</p>
+<p>The first parameter should follow a similar structure as the package.json
+config object.</p>
+<p>For example, to emulate the --dev flag, pass an object that looks like this:</p>
+<pre><code>{
+ &quot;dev&quot;: true
+}
+</code></pre><p>For a list of all the available command-line configs, see <code>npm help config</code></p>
+
+</div>
+
+<table border=0 cellspacing=0 cellpadding=0 id=npmlogo>
+<tr><td style="width:180px;height:10px;background:rgb(237,127,127)" colspan=18>&nbsp;</td></tr>
+<tr><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td colspan=6 style="width:60px;height:10px;background:#fff">&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td></tr>
+<tr><td colspan=2 style="width:20px;height:30px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=4 colspan=2>&nbsp;</td><td style="width:10px;height:20px;background:rgb(237,127,127)" rowspan=2>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=3 colspan=2>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff" rowspan=2>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff">&nbsp;</td></tr>
+<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
+<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
+</table>
+<p id="footer">npm-load &mdash; npm@1.4.10</p>
+
diff --git a/deps/npm/html/doc/api/npm-ls.html b/deps/npm/html/doc/api/npm-ls.html
new file mode 100644
index 000000000..cd5f19880
--- /dev/null
+++ b/deps/npm/html/doc/api/npm-ls.html
@@ -0,0 +1,67 @@
+<!doctype html>
+<html>
+ <title>npm-ls</title>
+ <meta http-equiv="content-type" value="text/html;utf-8">
+ <link rel="stylesheet" type="text/css" href="../../static/style.css">
+ <link rel="canonical" href="https://www.npmjs.org/doc/api/npm-ls.html">
+ <script async=true src="../../static/toc.js"></script>
+
+ <body>
+ <div id="wrapper">
+
+<h1><a href="../api/npm-ls.html">npm-ls</a></h1> <p>List installed packages</p>
+<h2 id="synopsis">SYNOPSIS</h2>
+<pre><code>npm.commands.ls(args, [silent,] callback)
+</code></pre><h2 id="description">DESCRIPTION</h2>
+<p>This command will print to stdout all the versions of packages that are
+installed, as well as their dependencies, in a tree-structure. It will also
+return that data using the callback.</p>
+<p>This command does not take any arguments, but args must be defined.
+Beyond that, if any arguments are passed in, npm will politely warn that it
+does not take positional arguments, though you may set config flags
+like with any other command, such as <code>global</code> to list global packages.</p>
+<p>It will print out extraneous, missing, and invalid packages.</p>
+<p>If the silent parameter is set to true, nothing will be output to the screen,
+but the data will still be returned.</p>
+<p>Callback is provided an error if one occurred, the full data about which
+packages are installed and which dependencies they will receive, and a
+&quot;lite&quot; data object which just shows which versions are installed where.
+Note that the full data object is a circular structure, so care must be
+taken if it is serialized to JSON.</p>
+<h2 id="configuration">CONFIGURATION</h2>
+<h3 id="long">long</h3>
+<ul>
+<li>Default: false</li>
+<li>Type: Boolean</li>
+</ul>
+<p>Show extended information.</p>
+<h3 id="parseable">parseable</h3>
+<ul>
+<li>Default: false</li>
+<li>Type: Boolean</li>
+</ul>
+<p>Show parseable output instead of tree view.</p>
+<h3 id="global">global</h3>
+<ul>
+<li>Default: false</li>
+<li>Type: Boolean</li>
+</ul>
+<p>List packages in the global install prefix instead of in the current
+project.</p>
+<p>Note, if parseable is set or long isn&#39;t set, then duplicates will be trimmed.
+This means that if a submodule a same dependency as a parent module, then the
+dependency will only be output once.</p>
+
+</div>
+
+<table border=0 cellspacing=0 cellpadding=0 id=npmlogo>
+<tr><td style="width:180px;height:10px;background:rgb(237,127,127)" colspan=18>&nbsp;</td></tr>
+<tr><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td colspan=6 style="width:60px;height:10px;background:#fff">&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td></tr>
+<tr><td colspan=2 style="width:20px;height:30px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=4 colspan=2>&nbsp;</td><td style="width:10px;height:20px;background:rgb(237,127,127)" rowspan=2>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=3 colspan=2>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff" rowspan=2>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff">&nbsp;</td></tr>
+<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
+<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
+</table>
+<p id="footer">npm-ls &mdash; npm@1.4.10</p>
+
diff --git a/deps/npm/html/doc/api/npm-outdated.html b/deps/npm/html/doc/api/npm-outdated.html
new file mode 100644
index 000000000..854942b7d
--- /dev/null
+++ b/deps/npm/html/doc/api/npm-outdated.html
@@ -0,0 +1,32 @@
+<!doctype html>
+<html>
+ <title>npm-outdated</title>
+ <meta http-equiv="content-type" value="text/html;utf-8">
+ <link rel="stylesheet" type="text/css" href="../../static/style.css">
+ <link rel="canonical" href="https://www.npmjs.org/doc/api/npm-outdated.html">
+ <script async=true src="../../static/toc.js"></script>
+
+ <body>
+ <div id="wrapper">
+
+<h1><a href="../api/npm-outdated.html">npm-outdated</a></h1> <p>Check for outdated packages</p>
+<h2 id="synopsis">SYNOPSIS</h2>
+<pre><code>npm.commands.outdated([packages,] callback)
+</code></pre><h2 id="description">DESCRIPTION</h2>
+<p>This command will check the registry to see if the specified packages are
+currently outdated.</p>
+<p>If the &#39;packages&#39; parameter is left out, npm will check all packages.</p>
+
+</div>
+
+<table border=0 cellspacing=0 cellpadding=0 id=npmlogo>
+<tr><td style="width:180px;height:10px;background:rgb(237,127,127)" colspan=18>&nbsp;</td></tr>
+<tr><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td colspan=6 style="width:60px;height:10px;background:#fff">&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td></tr>
+<tr><td colspan=2 style="width:20px;height:30px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=4 colspan=2>&nbsp;</td><td style="width:10px;height:20px;background:rgb(237,127,127)" rowspan=2>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=3 colspan=2>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff" rowspan=2>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff">&nbsp;</td></tr>
+<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
+<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
+</table>
+<p id="footer">npm-outdated &mdash; npm@1.4.10</p>
+
diff --git a/deps/npm/html/doc/api/npm-owner.html b/deps/npm/html/doc/api/npm-owner.html
new file mode 100644
index 000000000..8a71f25e4
--- /dev/null
+++ b/deps/npm/html/doc/api/npm-owner.html
@@ -0,0 +1,51 @@
+<!doctype html>
+<html>
+ <title>npm-owner</title>
+ <meta http-equiv="content-type" value="text/html;utf-8">
+ <link rel="stylesheet" type="text/css" href="../../static/style.css">
+ <link rel="canonical" href="https://www.npmjs.org/doc/api/npm-owner.html">
+ <script async=true src="../../static/toc.js"></script>
+
+ <body>
+ <div id="wrapper">
+
+<h1><a href="../api/npm-owner.html">npm-owner</a></h1> <p>Manage package owners</p>
+<h2 id="synopsis">SYNOPSIS</h2>
+<pre><code>npm.commands.owner(args, callback)
+</code></pre><h2 id="description">DESCRIPTION</h2>
+<p>The first element of the &#39;args&#39; parameter defines what to do, and the subsequent
+elements depend on the action. Possible values for the action are (order of
+parameters are given in parenthesis):</p>
+<ul>
+<li>ls (package):
+List all the users who have access to modify a package and push new versions.
+Handy when you need to know who to bug for help.</li>
+<li>add (user, package):
+Add a new user as a maintainer of a package. This user is enabled to modify
+metadata, publish new versions, and add other owners.</li>
+<li>rm (user, package):
+Remove a user from the package owner list. This immediately revokes their
+privileges.</li>
+</ul>
+<p>Note that there is only one level of access. Either you can modify a package,
+or you can&#39;t. Future versions may contain more fine-grained access levels, but
+that is not implemented at this time.</p>
+<h2 id="see-also">SEE ALSO</h2>
+<ul>
+<li><a href="../api/npm-publish.html">npm-publish(3)</a></li>
+<li><a href="../misc/npm-registry.html">npm-registry(7)</a></li>
+</ul>
+
+</div>
+
+<table border=0 cellspacing=0 cellpadding=0 id=npmlogo>
+<tr><td style="width:180px;height:10px;background:rgb(237,127,127)" colspan=18>&nbsp;</td></tr>
+<tr><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td colspan=6 style="width:60px;height:10px;background:#fff">&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td></tr>
+<tr><td colspan=2 style="width:20px;height:30px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=4 colspan=2>&nbsp;</td><td style="width:10px;height:20px;background:rgb(237,127,127)" rowspan=2>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=3 colspan=2>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff" rowspan=2>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff">&nbsp;</td></tr>
+<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
+<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
+</table>
+<p id="footer">npm-owner &mdash; npm@1.4.10</p>
+
diff --git a/deps/npm/html/doc/api/npm-pack.html b/deps/npm/html/doc/api/npm-pack.html
new file mode 100644
index 000000000..d08cbfae6
--- /dev/null
+++ b/deps/npm/html/doc/api/npm-pack.html
@@ -0,0 +1,37 @@
+<!doctype html>
+<html>
+ <title>npm-pack</title>
+ <meta http-equiv="content-type" value="text/html;utf-8">
+ <link rel="stylesheet" type="text/css" href="../../static/style.css">
+ <link rel="canonical" href="https://www.npmjs.org/doc/api/npm-pack.html">
+ <script async=true src="../../static/toc.js"></script>
+
+ <body>
+ <div id="wrapper">
+
+<h1><a href="../api/npm-pack.html">npm-pack</a></h1> <p>Create a tarball from a package</p>
+<h2 id="synopsis">SYNOPSIS</h2>
+<pre><code>npm.commands.pack([packages,] callback)
+</code></pre><h2 id="description">DESCRIPTION</h2>
+<p>For anything that&#39;s installable (that is, a package folder, tarball,
+tarball url, name@tag, name@version, or name), this command will fetch
+it to the cache, and then copy the tarball to the current working
+directory as <code>&lt;name&gt;-&lt;version&gt;.tgz</code>, and then write the filenames out to
+stdout.</p>
+<p>If the same package is specified multiple times, then the file will be
+overwritten the second time.</p>
+<p>If no arguments are supplied, then npm packs the current package folder.</p>
+
+</div>
+
+<table border=0 cellspacing=0 cellpadding=0 id=npmlogo>
+<tr><td style="width:180px;height:10px;background:rgb(237,127,127)" colspan=18>&nbsp;</td></tr>
+<tr><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td colspan=6 style="width:60px;height:10px;background:#fff">&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td></tr>
+<tr><td colspan=2 style="width:20px;height:30px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=4 colspan=2>&nbsp;</td><td style="width:10px;height:20px;background:rgb(237,127,127)" rowspan=2>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=3 colspan=2>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff" rowspan=2>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff">&nbsp;</td></tr>
+<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
+<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
+</table>
+<p id="footer">npm-pack &mdash; npm@1.4.10</p>
+
diff --git a/deps/npm/html/doc/api/npm-prefix.html b/deps/npm/html/doc/api/npm-prefix.html
new file mode 100644
index 000000000..44a17f79c
--- /dev/null
+++ b/deps/npm/html/doc/api/npm-prefix.html
@@ -0,0 +1,33 @@
+<!doctype html>
+<html>
+ <title>npm-prefix</title>
+ <meta http-equiv="content-type" value="text/html;utf-8">
+ <link rel="stylesheet" type="text/css" href="../../static/style.css">
+ <link rel="canonical" href="https://www.npmjs.org/doc/api/npm-prefix.html">
+ <script async=true src="../../static/toc.js"></script>
+
+ <body>
+ <div id="wrapper">
+
+<h1><a href="../api/npm-prefix.html">npm-prefix</a></h1> <p>Display prefix</p>
+<h2 id="synopsis">SYNOPSIS</h2>
+<pre><code>npm.commands.prefix(args, callback)
+</code></pre><h2 id="description">DESCRIPTION</h2>
+<p>Print the prefix to standard out.</p>
+<p>&#39;args&#39; is never used and callback is never called with data.
+&#39;args&#39; must be present or things will break.</p>
+<p>This function is not useful programmatically</p>
+
+</div>
+
+<table border=0 cellspacing=0 cellpadding=0 id=npmlogo>
+<tr><td style="width:180px;height:10px;background:rgb(237,127,127)" colspan=18>&nbsp;</td></tr>
+<tr><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td colspan=6 style="width:60px;height:10px;background:#fff">&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td></tr>
+<tr><td colspan=2 style="width:20px;height:30px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=4 colspan=2>&nbsp;</td><td style="width:10px;height:20px;background:rgb(237,127,127)" rowspan=2>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=3 colspan=2>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff" rowspan=2>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff">&nbsp;</td></tr>
+<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
+<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
+</table>
+<p id="footer">npm-prefix &mdash; npm@1.4.10</p>
+
diff --git a/deps/npm/html/doc/api/npm-prune.html b/deps/npm/html/doc/api/npm-prune.html
new file mode 100644
index 000000000..0358f77a6
--- /dev/null
+++ b/deps/npm/html/doc/api/npm-prune.html
@@ -0,0 +1,34 @@
+<!doctype html>
+<html>
+ <title>npm-prune</title>
+ <meta http-equiv="content-type" value="text/html;utf-8">
+ <link rel="stylesheet" type="text/css" href="../../static/style.css">
+ <link rel="canonical" href="https://www.npmjs.org/doc/api/npm-prune.html">
+ <script async=true src="../../static/toc.js"></script>
+
+ <body>
+ <div id="wrapper">
+
+<h1><a href="../api/npm-prune.html">npm-prune</a></h1> <p>Remove extraneous packages</p>
+<h2 id="synopsis">SYNOPSIS</h2>
+<pre><code>npm.commands.prune([packages,] callback)
+</code></pre><h2 id="description">DESCRIPTION</h2>
+<p>This command removes &quot;extraneous&quot; packages.</p>
+<p>The first parameter is optional, and it specifies packages to be removed.</p>
+<p>No packages are specified, then all packages will be checked.</p>
+<p>Extraneous packages are packages that are not listed on the parent
+package&#39;s dependencies list.</p>
+
+</div>
+
+<table border=0 cellspacing=0 cellpadding=0 id=npmlogo>
+<tr><td style="width:180px;height:10px;background:rgb(237,127,127)" colspan=18>&nbsp;</td></tr>
+<tr><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td colspan=6 style="width:60px;height:10px;background:#fff">&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td></tr>
+<tr><td colspan=2 style="width:20px;height:30px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=4 colspan=2>&nbsp;</td><td style="width:10px;height:20px;background:rgb(237,127,127)" rowspan=2>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=3 colspan=2>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff" rowspan=2>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff">&nbsp;</td></tr>
+<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
+<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
+</table>
+<p id="footer">npm-prune &mdash; npm@1.4.10</p>
+
diff --git a/deps/npm/html/doc/api/npm-publish.html b/deps/npm/html/doc/api/npm-publish.html
new file mode 100644
index 000000000..e3e03960b
--- /dev/null
+++ b/deps/npm/html/doc/api/npm-publish.html
@@ -0,0 +1,50 @@
+<!doctype html>
+<html>
+ <title>npm-publish</title>
+ <meta http-equiv="content-type" value="text/html;utf-8">
+ <link rel="stylesheet" type="text/css" href="../../static/style.css">
+ <link rel="canonical" href="https://www.npmjs.org/doc/api/npm-publish.html">
+ <script async=true src="../../static/toc.js"></script>
+
+ <body>
+ <div id="wrapper">
+
+<h1><a href="../api/npm-publish.html">npm-publish</a></h1> <p>Publish a package</p>
+<h2 id="synopsis">SYNOPSIS</h2>
+<pre><code>npm.commands.publish([packages,] callback)
+</code></pre><h2 id="description">DESCRIPTION</h2>
+<p>Publishes a package to the registry so that it can be installed by name.
+Possible values in the &#39;packages&#39; array are:</p>
+<ul>
+<li><p><code>&lt;folder&gt;</code>:
+A folder containing a package.json file</p>
+</li>
+<li><p><code>&lt;tarball&gt;</code>:
+A url or file path to a gzipped tar archive containing a single folder
+with a package.json file inside.</p>
+</li>
+</ul>
+<p>If the package array is empty, npm will try to publish something in the
+current working directory.</p>
+<p>This command could fails if one of the packages specified already exists in
+the registry. Overwrites when the &quot;force&quot; environment variable is set.</p>
+<h2 id="see-also">SEE ALSO</h2>
+<ul>
+<li><a href="../misc/npm-registry.html">npm-registry(7)</a></li>
+<li><a href="../cli/npm-adduser.html">npm-adduser(1)</a></li>
+<li><a href="../api/npm-owner.html">npm-owner(3)</a></li>
+</ul>
+
+</div>
+
+<table border=0 cellspacing=0 cellpadding=0 id=npmlogo>
+<tr><td style="width:180px;height:10px;background:rgb(237,127,127)" colspan=18>&nbsp;</td></tr>
+<tr><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td colspan=6 style="width:60px;height:10px;background:#fff">&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td></tr>
+<tr><td colspan=2 style="width:20px;height:30px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=4 colspan=2>&nbsp;</td><td style="width:10px;height:20px;background:rgb(237,127,127)" rowspan=2>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=3 colspan=2>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff" rowspan=2>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff">&nbsp;</td></tr>
+<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
+<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
+</table>
+<p id="footer">npm-publish &mdash; npm@1.4.10</p>
+
diff --git a/deps/npm/html/doc/api/npm-rebuild.html b/deps/npm/html/doc/api/npm-rebuild.html
new file mode 100644
index 000000000..f37301f56
--- /dev/null
+++ b/deps/npm/html/doc/api/npm-rebuild.html
@@ -0,0 +1,34 @@
+<!doctype html>
+<html>
+ <title>npm-rebuild</title>
+ <meta http-equiv="content-type" value="text/html;utf-8">
+ <link rel="stylesheet" type="text/css" href="../../static/style.css">
+ <link rel="canonical" href="https://www.npmjs.org/doc/api/npm-rebuild.html">
+ <script async=true src="../../static/toc.js"></script>
+
+ <body>
+ <div id="wrapper">
+
+<h1><a href="../api/npm-rebuild.html">npm-rebuild</a></h1> <p>Rebuild a package</p>
+<h2 id="synopsis">SYNOPSIS</h2>
+<pre><code>npm.commands.rebuild([packages,] callback)
+</code></pre><h2 id="description">DESCRIPTION</h2>
+<p>This command runs the <code>npm build</code> command on each of the matched packages. This is useful
+when you install a new version of node, and must recompile all your C++ addons with
+the new binary. If no &#39;packages&#39; parameter is specify, every package will be rebuilt.</p>
+<h2 id="configuration">CONFIGURATION</h2>
+<p>See <code>npm help build</code></p>
+
+</div>
+
+<table border=0 cellspacing=0 cellpadding=0 id=npmlogo>
+<tr><td style="width:180px;height:10px;background:rgb(237,127,127)" colspan=18>&nbsp;</td></tr>
+<tr><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td colspan=6 style="width:60px;height:10px;background:#fff">&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td></tr>
+<tr><td colspan=2 style="width:20px;height:30px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=4 colspan=2>&nbsp;</td><td style="width:10px;height:20px;background:rgb(237,127,127)" rowspan=2>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=3 colspan=2>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff" rowspan=2>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff">&nbsp;</td></tr>
+<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
+<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
+</table>
+<p id="footer">npm-rebuild &mdash; npm@1.4.10</p>
+
diff --git a/deps/npm/html/doc/api/npm-repo.html b/deps/npm/html/doc/api/npm-repo.html
new file mode 100644
index 000000000..8af28e55c
--- /dev/null
+++ b/deps/npm/html/doc/api/npm-repo.html
@@ -0,0 +1,37 @@
+<!doctype html>
+<html>
+ <title>npm-repo</title>
+ <meta http-equiv="content-type" value="text/html;utf-8">
+ <link rel="stylesheet" type="text/css" href="../../static/style.css">
+ <link rel="canonical" href="https://www.npmjs.org/doc/api/npm-repo.html">
+ <script async=true src="../../static/toc.js"></script>
+
+ <body>
+ <div id="wrapper">
+
+<h1><a href="../api/npm-repo.html">npm-repo</a></h1> <p>Open package repository page in the browser</p>
+<h2 id="synopsis">SYNOPSIS</h2>
+<pre><code>npm.commands.repo(package, callback)
+</code></pre><h2 id="description">DESCRIPTION</h2>
+<p>This command tries to guess at the likely location of a package&#39;s
+repository URL, and then tries to open it using the <code>--browser</code>
+config param.</p>
+<p>Like other commands, the first parameter is an array. This command only
+uses the first element, which is expected to be a package name with an
+optional version number.</p>
+<p>This command will launch a browser, so this command may not be the most
+friendly for programmatic use.</p>
+
+</div>
+
+<table border=0 cellspacing=0 cellpadding=0 id=npmlogo>
+<tr><td style="width:180px;height:10px;background:rgb(237,127,127)" colspan=18>&nbsp;</td></tr>
+<tr><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td colspan=6 style="width:60px;height:10px;background:#fff">&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td></tr>
+<tr><td colspan=2 style="width:20px;height:30px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=4 colspan=2>&nbsp;</td><td style="width:10px;height:20px;background:rgb(237,127,127)" rowspan=2>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=3 colspan=2>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff" rowspan=2>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff">&nbsp;</td></tr>
+<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
+<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
+</table>
+<p id="footer">npm-repo &mdash; npm@1.4.10</p>
+
diff --git a/deps/npm/html/doc/api/npm-restart.html b/deps/npm/html/doc/api/npm-restart.html
new file mode 100644
index 000000000..bd33c4458
--- /dev/null
+++ b/deps/npm/html/doc/api/npm-restart.html
@@ -0,0 +1,40 @@
+<!doctype html>
+<html>
+ <title>npm-restart</title>
+ <meta http-equiv="content-type" value="text/html;utf-8">
+ <link rel="stylesheet" type="text/css" href="../../static/style.css">
+ <link rel="canonical" href="https://www.npmjs.org/doc/api/npm-restart.html">
+ <script async=true src="../../static/toc.js"></script>
+
+ <body>
+ <div id="wrapper">
+
+<h1><a href="../api/npm-restart.html">npm-restart</a></h1> <p>Start a package</p>
+<h2 id="synopsis">SYNOPSIS</h2>
+<pre><code>npm.commands.restart(packages, callback)
+</code></pre><h2 id="description">DESCRIPTION</h2>
+<p>This runs a package&#39;s &quot;restart&quot; script, if one was provided.
+Otherwise it runs package&#39;s &quot;stop&quot; script, if one was provided, and then
+the &quot;start&quot; script.</p>
+<p>If no version is specified, then it restarts the &quot;active&quot; version.</p>
+<p>npm can run tests on multiple packages. Just specify multiple packages
+in the <code>packages</code> parameter.</p>
+<h2 id="see-also">SEE ALSO</h2>
+<ul>
+<li><a href="../api/npm-start.html">npm-start(3)</a></li>
+<li><a href="../api/npm-stop.html">npm-stop(3)</a></li>
+</ul>
+
+</div>
+
+<table border=0 cellspacing=0 cellpadding=0 id=npmlogo>
+<tr><td style="width:180px;height:10px;background:rgb(237,127,127)" colspan=18>&nbsp;</td></tr>
+<tr><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td colspan=6 style="width:60px;height:10px;background:#fff">&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td></tr>
+<tr><td colspan=2 style="width:20px;height:30px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=4 colspan=2>&nbsp;</td><td style="width:10px;height:20px;background:rgb(237,127,127)" rowspan=2>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=3 colspan=2>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff" rowspan=2>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff">&nbsp;</td></tr>
+<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
+<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
+</table>
+<p id="footer">npm-restart &mdash; npm@1.4.10</p>
+
diff --git a/deps/npm/html/doc/api/npm-root.html b/deps/npm/html/doc/api/npm-root.html
new file mode 100644
index 000000000..ef54abb66
--- /dev/null
+++ b/deps/npm/html/doc/api/npm-root.html
@@ -0,0 +1,33 @@
+<!doctype html>
+<html>
+ <title>npm-root</title>
+ <meta http-equiv="content-type" value="text/html;utf-8">
+ <link rel="stylesheet" type="text/css" href="../../static/style.css">
+ <link rel="canonical" href="https://www.npmjs.org/doc/api/npm-root.html">
+ <script async=true src="../../static/toc.js"></script>
+
+ <body>
+ <div id="wrapper">
+
+<h1><a href="../api/npm-root.html">npm-root</a></h1> <p>Display npm root</p>
+<h2 id="synopsis">SYNOPSIS</h2>
+<pre><code>npm.commands.root(args, callback)
+</code></pre><h2 id="description">DESCRIPTION</h2>
+<p>Print the effective <code>node_modules</code> folder to standard out.</p>
+<p>&#39;args&#39; is never used and callback is never called with data.
+&#39;args&#39; must be present or things will break.</p>
+<p>This function is not useful programmatically.</p>
+
+</div>
+
+<table border=0 cellspacing=0 cellpadding=0 id=npmlogo>
+<tr><td style="width:180px;height:10px;background:rgb(237,127,127)" colspan=18>&nbsp;</td></tr>
+<tr><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td colspan=6 style="width:60px;height:10px;background:#fff">&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td></tr>
+<tr><td colspan=2 style="width:20px;height:30px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=4 colspan=2>&nbsp;</td><td style="width:10px;height:20px;background:rgb(237,127,127)" rowspan=2>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=3 colspan=2>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff" rowspan=2>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff">&nbsp;</td></tr>
+<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
+<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
+</table>
+<p id="footer">npm-root &mdash; npm@1.4.10</p>
+
diff --git a/deps/npm/html/doc/api/npm-run-script.html b/deps/npm/html/doc/api/npm-run-script.html
new file mode 100644
index 000000000..b1575d699
--- /dev/null
+++ b/deps/npm/html/doc/api/npm-run-script.html
@@ -0,0 +1,45 @@
+<!doctype html>
+<html>
+ <title>npm-run-script</title>
+ <meta http-equiv="content-type" value="text/html;utf-8">
+ <link rel="stylesheet" type="text/css" href="../../static/style.css">
+ <link rel="canonical" href="https://www.npmjs.org/doc/api/npm-run-script.html">
+ <script async=true src="../../static/toc.js"></script>
+
+ <body>
+ <div id="wrapper">
+
+<h1><a href="../api/npm-run-script.html">npm-run-script</a></h1> <p>Run arbitrary package scripts</p>
+<h2 id="synopsis">SYNOPSIS</h2>
+<pre><code>npm.commands.run-script(args, callback)
+</code></pre><h2 id="description">DESCRIPTION</h2>
+<p>This runs an arbitrary command from a package&#39;s &quot;scripts&quot; object.</p>
+<p>It is used by the test, start, restart, and stop commands, but can be
+called directly, as well.</p>
+<p>The &#39;args&#39; parameter is an array of strings. Behavior depends on the number
+of elements. If there is only one element, npm assumes that the element
+represents a command to be run on the local repository. If there is more than
+one element, then the first is assumed to be the package and the second is
+assumed to be the command to run. All other elements are ignored.</p>
+<h2 id="see-also">SEE ALSO</h2>
+<ul>
+<li><a href="../misc/npm-scripts.html">npm-scripts(7)</a></li>
+<li><a href="../api/npm-test.html">npm-test(3)</a></li>
+<li><a href="../api/npm-start.html">npm-start(3)</a></li>
+<li><a href="../api/npm-restart.html">npm-restart(3)</a></li>
+<li><a href="../api/npm-stop.html">npm-stop(3)</a></li>
+</ul>
+
+</div>
+
+<table border=0 cellspacing=0 cellpadding=0 id=npmlogo>
+<tr><td style="width:180px;height:10px;background:rgb(237,127,127)" colspan=18>&nbsp;</td></tr>
+<tr><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td colspan=6 style="width:60px;height:10px;background:#fff">&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td></tr>
+<tr><td colspan=2 style="width:20px;height:30px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=4 colspan=2>&nbsp;</td><td style="width:10px;height:20px;background:rgb(237,127,127)" rowspan=2>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=3 colspan=2>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff" rowspan=2>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff">&nbsp;</td></tr>
+<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
+<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
+</table>
+<p id="footer">npm-run-script &mdash; npm@1.4.10</p>
+
diff --git a/deps/npm/html/doc/api/npm-search.html b/deps/npm/html/doc/api/npm-search.html
new file mode 100644
index 000000000..d13d836c9
--- /dev/null
+++ b/deps/npm/html/doc/api/npm-search.html
@@ -0,0 +1,57 @@
+<!doctype html>
+<html>
+ <title>npm-search</title>
+ <meta http-equiv="content-type" value="text/html;utf-8">
+ <link rel="stylesheet" type="text/css" href="../../static/style.css">
+ <link rel="canonical" href="https://www.npmjs.org/doc/api/npm-search.html">
+ <script async=true src="../../static/toc.js"></script>
+
+ <body>
+ <div id="wrapper">
+
+<h1><a href="../api/npm-search.html">npm-search</a></h1> <p>Search for packages</p>
+<h2 id="synopsis">SYNOPSIS</h2>
+<pre><code>npm.commands.search(searchTerms, [silent,] [staleness,] callback)
+</code></pre><h2 id="description">DESCRIPTION</h2>
+<p>Search the registry for packages matching the search terms. The available parameters are:</p>
+<ul>
+<li>searchTerms:
+Array of search terms. These terms are case-insensitive.</li>
+<li>silent:
+If true, npm will not log anything to the console.</li>
+<li>staleness:
+This is the threshold for stale packages. &quot;Fresh&quot; packages are not refreshed
+from the registry. This value is measured in seconds.</li>
+<li><p>callback:
+Returns an object where each key is the name of a package, and the value
+is information about that package along with a &#39;words&#39; property, which is
+a space-delimited string of all of the interesting words in that package.
+The only properties included are those that are searched, which generally include:</p>
+<ul>
+<li>name</li>
+<li>description</li>
+<li>maintainers</li>
+<li>url</li>
+<li>keywords</li>
+</ul>
+</li>
+</ul>
+<p>A search on the registry excludes any result that does not match all of the
+search terms. It also removes any items from the results that contain an
+excluded term (the &quot;searchexclude&quot; config). The search is case insensitive
+and doesn&#39;t try to read your mind (it doesn&#39;t do any verb tense matching or the
+like).</p>
+
+</div>
+
+<table border=0 cellspacing=0 cellpadding=0 id=npmlogo>
+<tr><td style="width:180px;height:10px;background:rgb(237,127,127)" colspan=18>&nbsp;</td></tr>
+<tr><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td colspan=6 style="width:60px;height:10px;background:#fff">&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td></tr>
+<tr><td colspan=2 style="width:20px;height:30px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=4 colspan=2>&nbsp;</td><td style="width:10px;height:20px;background:rgb(237,127,127)" rowspan=2>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=3 colspan=2>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff" rowspan=2>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff">&nbsp;</td></tr>
+<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
+<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
+</table>
+<p id="footer">npm-search &mdash; npm@1.4.10</p>
+
diff --git a/deps/npm/html/doc/api/npm-shrinkwrap.html b/deps/npm/html/doc/api/npm-shrinkwrap.html
new file mode 100644
index 000000000..659d1b392
--- /dev/null
+++ b/deps/npm/html/doc/api/npm-shrinkwrap.html
@@ -0,0 +1,37 @@
+<!doctype html>
+<html>
+ <title>npm-shrinkwrap</title>
+ <meta http-equiv="content-type" value="text/html;utf-8">
+ <link rel="stylesheet" type="text/css" href="../../static/style.css">
+ <link rel="canonical" href="https://www.npmjs.org/doc/api/npm-shrinkwrap.html">
+ <script async=true src="../../static/toc.js"></script>
+
+ <body>
+ <div id="wrapper">
+
+<h1><a href="../api/npm-shrinkwrap.html">npm-shrinkwrap</a></h1> <p>programmatically generate package shrinkwrap file</p>
+<h2 id="synopsis">SYNOPSIS</h2>
+<pre><code>npm.commands.shrinkwrap(args, [silent,] callback)
+</code></pre><h2 id="description">DESCRIPTION</h2>
+<p>This acts much the same ways as shrinkwrapping on the command-line.</p>
+<p>This command does not take any arguments, but &#39;args&#39; must be defined.
+Beyond that, if any arguments are passed in, npm will politely warn that it
+does not take positional arguments.</p>
+<p>If the &#39;silent&#39; parameter is set to true, nothing will be output to the screen,
+but the shrinkwrap file will still be written.</p>
+<p>Finally, &#39;callback&#39; is a function that will be called when the shrinkwrap has
+been saved.</p>
+
+</div>
+
+<table border=0 cellspacing=0 cellpadding=0 id=npmlogo>
+<tr><td style="width:180px;height:10px;background:rgb(237,127,127)" colspan=18>&nbsp;</td></tr>
+<tr><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td colspan=6 style="width:60px;height:10px;background:#fff">&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td></tr>
+<tr><td colspan=2 style="width:20px;height:30px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=4 colspan=2>&nbsp;</td><td style="width:10px;height:20px;background:rgb(237,127,127)" rowspan=2>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=3 colspan=2>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff" rowspan=2>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff">&nbsp;</td></tr>
+<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
+<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
+</table>
+<p id="footer">npm-shrinkwrap &mdash; npm@1.4.10</p>
+
diff --git a/deps/npm/html/doc/api/npm-start.html b/deps/npm/html/doc/api/npm-start.html
new file mode 100644
index 000000000..2b2f41fd8
--- /dev/null
+++ b/deps/npm/html/doc/api/npm-start.html
@@ -0,0 +1,32 @@
+<!doctype html>
+<html>
+ <title>npm-start</title>
+ <meta http-equiv="content-type" value="text/html;utf-8">
+ <link rel="stylesheet" type="text/css" href="../../static/style.css">
+ <link rel="canonical" href="https://www.npmjs.org/doc/api/npm-start.html">
+ <script async=true src="../../static/toc.js"></script>
+
+ <body>
+ <div id="wrapper">
+
+<h1><a href="../api/npm-start.html">npm-start</a></h1> <p>Start a package</p>
+<h2 id="synopsis">SYNOPSIS</h2>
+<pre><code>npm.commands.start(packages, callback)
+</code></pre><h2 id="description">DESCRIPTION</h2>
+<p>This runs a package&#39;s &quot;start&quot; script, if one was provided.</p>
+<p>npm can run tests on multiple packages. Just specify multiple packages
+in the <code>packages</code> parameter.</p>
+
+</div>
+
+<table border=0 cellspacing=0 cellpadding=0 id=npmlogo>
+<tr><td style="width:180px;height:10px;background:rgb(237,127,127)" colspan=18>&nbsp;</td></tr>
+<tr><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td colspan=6 style="width:60px;height:10px;background:#fff">&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td></tr>
+<tr><td colspan=2 style="width:20px;height:30px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=4 colspan=2>&nbsp;</td><td style="width:10px;height:20px;background:rgb(237,127,127)" rowspan=2>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=3 colspan=2>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff" rowspan=2>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff">&nbsp;</td></tr>
+<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
+<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
+</table>
+<p id="footer">npm-start &mdash; npm@1.4.10</p>
+
diff --git a/deps/npm/html/doc/api/npm-stop.html b/deps/npm/html/doc/api/npm-stop.html
new file mode 100644
index 000000000..a7dfcedd4
--- /dev/null
+++ b/deps/npm/html/doc/api/npm-stop.html
@@ -0,0 +1,32 @@
+<!doctype html>
+<html>
+ <title>npm-stop</title>
+ <meta http-equiv="content-type" value="text/html;utf-8">
+ <link rel="stylesheet" type="text/css" href="../../static/style.css">
+ <link rel="canonical" href="https://www.npmjs.org/doc/api/npm-stop.html">
+ <script async=true src="../../static/toc.js"></script>
+
+ <body>
+ <div id="wrapper">
+
+<h1><a href="../api/npm-stop.html">npm-stop</a></h1> <p>Stop a package</p>
+<h2 id="synopsis">SYNOPSIS</h2>
+<pre><code>npm.commands.stop(packages, callback)
+</code></pre><h2 id="description">DESCRIPTION</h2>
+<p>This runs a package&#39;s &quot;stop&quot; script, if one was provided.</p>
+<p>npm can run stop on multiple packages. Just specify multiple packages
+in the <code>packages</code> parameter.</p>
+
+</div>
+
+<table border=0 cellspacing=0 cellpadding=0 id=npmlogo>
+<tr><td style="width:180px;height:10px;background:rgb(237,127,127)" colspan=18>&nbsp;</td></tr>
+<tr><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td colspan=6 style="width:60px;height:10px;background:#fff">&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td></tr>
+<tr><td colspan=2 style="width:20px;height:30px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=4 colspan=2>&nbsp;</td><td style="width:10px;height:20px;background:rgb(237,127,127)" rowspan=2>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=3 colspan=2>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff" rowspan=2>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff">&nbsp;</td></tr>
+<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
+<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
+</table>
+<p id="footer">npm-stop &mdash; npm@1.4.10</p>
+
diff --git a/deps/npm/html/doc/api/npm-submodule.html b/deps/npm/html/doc/api/npm-submodule.html
new file mode 100644
index 000000000..ab98ab5bc
--- /dev/null
+++ b/deps/npm/html/doc/api/npm-submodule.html
@@ -0,0 +1,46 @@
+<!doctype html>
+<html>
+ <title>npm-submodule</title>
+ <meta http-equiv="content-type" value="text/html;utf-8">
+ <link rel="stylesheet" type="text/css" href="../../static/style.css">
+ <link rel="canonical" href="https://www.npmjs.org/doc/api/npm-submodule.html">
+ <script async=true src="../../static/toc.js"></script>
+
+ <body>
+ <div id="wrapper">
+
+<h1><a href="../api/npm-submodule.html">npm-submodule</a></h1> <p>Add a package as a git submodule</p>
+<h2 id="synopsis">SYNOPSIS</h2>
+<pre><code>npm.commands.submodule(packages, callback)
+</code></pre><h2 id="description">DESCRIPTION</h2>
+<p>For each package specified, npm will check if it has a git repository url
+in its package.json description then add it as a git submodule at
+<code>node_modules/&lt;pkg name&gt;</code>.</p>
+<p>This is a convenience only. From then on, it&#39;s up to you to manage
+updates by using the appropriate git commands. npm will stubbornly
+refuse to update, modify, or remove anything with a <code>.git</code> subfolder
+in it.</p>
+<p>This command also does not install missing dependencies, if the package
+does not include them in its git repository. If <code>npm ls</code> reports that
+things are missing, you can either install, link, or submodule them yourself,
+or you can do <code>npm explore &lt;pkgname&gt; -- npm install</code> to install the
+dependencies into the submodule folder.</p>
+<h2 id="see-also">SEE ALSO</h2>
+<ul>
+<li>npm help json</li>
+<li>git help submodule</li>
+</ul>
+
+</div>
+
+<table border=0 cellspacing=0 cellpadding=0 id=npmlogo>
+<tr><td style="width:180px;height:10px;background:rgb(237,127,127)" colspan=18>&nbsp;</td></tr>
+<tr><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td colspan=6 style="width:60px;height:10px;background:#fff">&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td></tr>
+<tr><td colspan=2 style="width:20px;height:30px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=4 colspan=2>&nbsp;</td><td style="width:10px;height:20px;background:rgb(237,127,127)" rowspan=2>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=3 colspan=2>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff" rowspan=2>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff">&nbsp;</td></tr>
+<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
+<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
+</table>
+<p id="footer">npm-submodule &mdash; npm@1.4.10</p>
+
diff --git a/deps/npm/html/doc/api/npm-tag.html b/deps/npm/html/doc/api/npm-tag.html
new file mode 100644
index 000000000..af49ab455
--- /dev/null
+++ b/deps/npm/html/doc/api/npm-tag.html
@@ -0,0 +1,40 @@
+<!doctype html>
+<html>
+ <title>npm-tag</title>
+ <meta http-equiv="content-type" value="text/html;utf-8">
+ <link rel="stylesheet" type="text/css" href="../../static/style.css">
+ <link rel="canonical" href="https://www.npmjs.org/doc/api/npm-tag.html">
+ <script async=true src="../../static/toc.js"></script>
+
+ <body>
+ <div id="wrapper">
+
+<h1><a href="../api/npm-tag.html">npm-tag</a></h1> <p>Tag a published version</p>
+<h2 id="synopsis">SYNOPSIS</h2>
+<pre><code>npm.commands.tag(package@version, tag, callback)
+</code></pre><h2 id="description">DESCRIPTION</h2>
+<p>Tags the specified version of the package with the specified tag, or the
+<code>--tag</code> config if not specified.</p>
+<p>The &#39;package@version&#39; is an array of strings, but only the first two elements are
+currently used.</p>
+<p>The first element must be in the form package@version, where package
+is the package name and version is the version number (much like installing a
+specific version).</p>
+<p>The second element is the name of the tag to tag this version with. If this
+parameter is missing or falsey (empty), the default froom the config will be
+used. For more information about how to set this config, check
+<code>man 3 npm-config</code> for programmatic usage or <code>man npm-config</code> for cli usage.</p>
+
+</div>
+
+<table border=0 cellspacing=0 cellpadding=0 id=npmlogo>
+<tr><td style="width:180px;height:10px;background:rgb(237,127,127)" colspan=18>&nbsp;</td></tr>
+<tr><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td colspan=6 style="width:60px;height:10px;background:#fff">&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td></tr>
+<tr><td colspan=2 style="width:20px;height:30px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=4 colspan=2>&nbsp;</td><td style="width:10px;height:20px;background:rgb(237,127,127)" rowspan=2>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=3 colspan=2>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff" rowspan=2>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff">&nbsp;</td></tr>
+<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
+<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
+</table>
+<p id="footer">npm-tag &mdash; npm@1.4.10</p>
+
diff --git a/deps/npm/html/doc/api/npm-test.html b/deps/npm/html/doc/api/npm-test.html
new file mode 100644
index 000000000..548d97937
--- /dev/null
+++ b/deps/npm/html/doc/api/npm-test.html
@@ -0,0 +1,34 @@
+<!doctype html>
+<html>
+ <title>npm-test</title>
+ <meta http-equiv="content-type" value="text/html;utf-8">
+ <link rel="stylesheet" type="text/css" href="../../static/style.css">
+ <link rel="canonical" href="https://www.npmjs.org/doc/api/npm-test.html">
+ <script async=true src="../../static/toc.js"></script>
+
+ <body>
+ <div id="wrapper">
+
+<h1><a href="../api/npm-test.html">npm-test</a></h1> <p>Test a package</p>
+<h2 id="synopsis">SYNOPSIS</h2>
+<pre><code> npm.commands.test(packages, callback)
+</code></pre><h2 id="description">DESCRIPTION</h2>
+<p>This runs a package&#39;s &quot;test&quot; script, if one was provided.</p>
+<p>To run tests as a condition of installation, set the <code>npat</code> config to
+true.</p>
+<p>npm can run tests on multiple packages. Just specify multiple packages
+in the <code>packages</code> parameter.</p>
+
+</div>
+
+<table border=0 cellspacing=0 cellpadding=0 id=npmlogo>
+<tr><td style="width:180px;height:10px;background:rgb(237,127,127)" colspan=18>&nbsp;</td></tr>
+<tr><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td colspan=6 style="width:60px;height:10px;background:#fff">&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td></tr>
+<tr><td colspan=2 style="width:20px;height:30px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=4 colspan=2>&nbsp;</td><td style="width:10px;height:20px;background:rgb(237,127,127)" rowspan=2>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=3 colspan=2>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff" rowspan=2>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff">&nbsp;</td></tr>
+<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
+<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
+</table>
+<p id="footer">npm-test &mdash; npm@1.4.10</p>
+
diff --git a/deps/npm/html/doc/api/npm-uninstall.html b/deps/npm/html/doc/api/npm-uninstall.html
new file mode 100644
index 000000000..77f6233a0
--- /dev/null
+++ b/deps/npm/html/doc/api/npm-uninstall.html
@@ -0,0 +1,34 @@
+<!doctype html>
+<html>
+ <title>npm-uninstall</title>
+ <meta http-equiv="content-type" value="text/html;utf-8">
+ <link rel="stylesheet" type="text/css" href="../../static/style.css">
+ <link rel="canonical" href="https://www.npmjs.org/doc/api/npm-uninstall.html">
+ <script async=true src="../../static/toc.js"></script>
+
+ <body>
+ <div id="wrapper">
+
+<h1><a href="../api/npm-uninstall.html">npm-uninstall</a></h1> <p>uninstall a package programmatically</p>
+<h2 id="synopsis">SYNOPSIS</h2>
+<pre><code>npm.commands.uninstall(packages, callback)
+</code></pre><h2 id="description">DESCRIPTION</h2>
+<p>This acts much the same ways as uninstalling on the command-line.</p>
+<p>The &#39;packages&#39; parameter is an array of strings. Each element in the array is
+the name of a package to be uninstalled.</p>
+<p>Finally, &#39;callback&#39; is a function that will be called when all packages have been
+uninstalled or when an error has been encountered.</p>
+
+</div>
+
+<table border=0 cellspacing=0 cellpadding=0 id=npmlogo>
+<tr><td style="width:180px;height:10px;background:rgb(237,127,127)" colspan=18>&nbsp;</td></tr>
+<tr><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td colspan=6 style="width:60px;height:10px;background:#fff">&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td></tr>
+<tr><td colspan=2 style="width:20px;height:30px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=4 colspan=2>&nbsp;</td><td style="width:10px;height:20px;background:rgb(237,127,127)" rowspan=2>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=3 colspan=2>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff" rowspan=2>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff">&nbsp;</td></tr>
+<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
+<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
+</table>
+<p id="footer">npm-uninstall &mdash; npm@1.4.10</p>
+
diff --git a/deps/npm/html/doc/api/npm-unpublish.html b/deps/npm/html/doc/api/npm-unpublish.html
new file mode 100644
index 000000000..7b3c99df2
--- /dev/null
+++ b/deps/npm/html/doc/api/npm-unpublish.html
@@ -0,0 +1,37 @@
+<!doctype html>
+<html>
+ <title>npm-unpublish</title>
+ <meta http-equiv="content-type" value="text/html;utf-8">
+ <link rel="stylesheet" type="text/css" href="../../static/style.css">
+ <link rel="canonical" href="https://www.npmjs.org/doc/api/npm-unpublish.html">
+ <script async=true src="../../static/toc.js"></script>
+
+ <body>
+ <div id="wrapper">
+
+<h1><a href="../api/npm-unpublish.html">npm-unpublish</a></h1> <p>Remove a package from the registry</p>
+<h2 id="synopsis">SYNOPSIS</h2>
+<pre><code>npm.commands.unpublish(package, callback)
+</code></pre><h2 id="description">DESCRIPTION</h2>
+<p>This removes a package version from the registry, deleting its
+entry and removing the tarball.</p>
+<p>The package parameter must be defined.</p>
+<p>Only the first element in the package parameter is used. If there is no first
+element, then npm assumes that the package at the current working directory
+is what is meant.</p>
+<p>If no version is specified, or if all versions are removed then
+the root package entry is removed from the registry entirely.</p>
+
+</div>
+
+<table border=0 cellspacing=0 cellpadding=0 id=npmlogo>
+<tr><td style="width:180px;height:10px;background:rgb(237,127,127)" colspan=18>&nbsp;</td></tr>
+<tr><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td colspan=6 style="width:60px;height:10px;background:#fff">&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td></tr>
+<tr><td colspan=2 style="width:20px;height:30px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=4 colspan=2>&nbsp;</td><td style="width:10px;height:20px;background:rgb(237,127,127)" rowspan=2>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=3 colspan=2>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff" rowspan=2>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff">&nbsp;</td></tr>
+<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
+<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
+</table>
+<p id="footer">npm-unpublish &mdash; npm@1.4.10</p>
+
diff --git a/deps/npm/html/doc/api/npm-update.html b/deps/npm/html/doc/api/npm-update.html
new file mode 100644
index 000000000..f706f1e86
--- /dev/null
+++ b/deps/npm/html/doc/api/npm-update.html
@@ -0,0 +1,31 @@
+<!doctype html>
+<html>
+ <title>npm-update</title>
+ <meta http-equiv="content-type" value="text/html;utf-8">
+ <link rel="stylesheet" type="text/css" href="../../static/style.css">
+ <link rel="canonical" href="https://www.npmjs.org/doc/api/npm-update.html">
+ <script async=true src="../../static/toc.js"></script>
+
+ <body>
+ <div id="wrapper">
+
+<h1><a href="../api/npm-update.html">npm-update</a></h1> <p>Update a package</p>
+<h2 id="synopsis">SYNOPSIS</h2>
+<pre><code>npm.commands.update(packages, callback)
+</code></pre><h1 id="description">DESCRIPTION</h1>
+<p>Updates a package, upgrading it to the latest version. It also installs any missing packages.</p>
+<p>The &#39;packages&#39; argument is an array of packages to update. The &#39;callback&#39; parameter will be called when done or when an error occurs.</p>
+
+</div>
+
+<table border=0 cellspacing=0 cellpadding=0 id=npmlogo>
+<tr><td style="width:180px;height:10px;background:rgb(237,127,127)" colspan=18>&nbsp;</td></tr>
+<tr><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td colspan=6 style="width:60px;height:10px;background:#fff">&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td></tr>
+<tr><td colspan=2 style="width:20px;height:30px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=4 colspan=2>&nbsp;</td><td style="width:10px;height:20px;background:rgb(237,127,127)" rowspan=2>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=3 colspan=2>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff" rowspan=2>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff">&nbsp;</td></tr>
+<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
+<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
+</table>
+<p id="footer">npm-update &mdash; npm@1.4.10</p>
+
diff --git a/deps/npm/html/doc/api/npm-version.html b/deps/npm/html/doc/api/npm-version.html
new file mode 100644
index 000000000..ede9d6b37
--- /dev/null
+++ b/deps/npm/html/doc/api/npm-version.html
@@ -0,0 +1,36 @@
+<!doctype html>
+<html>
+ <title>npm-version</title>
+ <meta http-equiv="content-type" value="text/html;utf-8">
+ <link rel="stylesheet" type="text/css" href="../../static/style.css">
+ <link rel="canonical" href="https://www.npmjs.org/doc/api/npm-version.html">
+ <script async=true src="../../static/toc.js"></script>
+
+ <body>
+ <div id="wrapper">
+
+<h1><a href="../api/npm-version.html">npm-version</a></h1> <p>Bump a package version</p>
+<h2 id="synopsis">SYNOPSIS</h2>
+<pre><code>npm.commands.version(newversion, callback)
+</code></pre><h2 id="description">DESCRIPTION</h2>
+<p>Run this in a package directory to bump the version and write the new
+data back to the package.json file.</p>
+<p>If run in a git repo, it will also create a version commit and tag, and
+fail if the repo is not clean.</p>
+<p>Like all other commands, this function takes a string array as its first
+parameter. The difference, however, is this function will fail if it does
+not have exactly one element. The only element should be a version number.</p>
+
+</div>
+
+<table border=0 cellspacing=0 cellpadding=0 id=npmlogo>
+<tr><td style="width:180px;height:10px;background:rgb(237,127,127)" colspan=18>&nbsp;</td></tr>
+<tr><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td colspan=6 style="width:60px;height:10px;background:#fff">&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td></tr>
+<tr><td colspan=2 style="width:20px;height:30px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=4 colspan=2>&nbsp;</td><td style="width:10px;height:20px;background:rgb(237,127,127)" rowspan=2>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=3 colspan=2>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff" rowspan=2>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff">&nbsp;</td></tr>
+<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
+<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
+</table>
+<p id="footer">npm-version &mdash; npm@1.4.10</p>
+
diff --git a/deps/npm/html/doc/api/npm-view.html b/deps/npm/html/doc/api/npm-view.html
new file mode 100644
index 000000000..b4c54cf1f
--- /dev/null
+++ b/deps/npm/html/doc/api/npm-view.html
@@ -0,0 +1,85 @@
+<!doctype html>
+<html>
+ <title>npm-view</title>
+ <meta http-equiv="content-type" value="text/html;utf-8">
+ <link rel="stylesheet" type="text/css" href="../../static/style.css">
+ <link rel="canonical" href="https://www.npmjs.org/doc/api/npm-view.html">
+ <script async=true src="../../static/toc.js"></script>
+
+ <body>
+ <div id="wrapper">
+
+<h1><a href="../api/npm-view.html">npm-view</a></h1> <p>View registry info</p>
+<h2 id="synopsis">SYNOPSIS</h2>
+<pre><code>npm.commands.view(args, [silent,] callback)
+</code></pre><h2 id="description">DESCRIPTION</h2>
+<p>This command shows data about a package and prints it to the stream
+referenced by the <code>outfd</code> config, which defaults to stdout.</p>
+<p>The &quot;args&quot; parameter is an ordered list that closely resembles the command-line
+usage. The elements should be ordered such that the first element is
+the package and version (package@version). The version is optional. After that,
+the rest of the parameters are fields with optional subfields (&quot;field.subfield&quot;)
+which can be used to get only the information desired from the registry.</p>
+<p>The callback will be passed all of the data returned by the query.</p>
+<p>For example, to get the package registry entry for the <code>connect</code> package,
+you can do this:</p>
+<pre><code>npm.commands.view([&quot;connect&quot;], callback)
+</code></pre><p>If no version is specified, &quot;latest&quot; is assumed.</p>
+<p>Field names can be specified after the package descriptor.
+For example, to show the dependencies of the <code>ronn</code> package at version
+0.3.5, you could do the following:</p>
+<pre><code>npm.commands.view([&quot;ronn@0.3.5&quot;, &quot;dependencies&quot;], callback)
+</code></pre><p>You can view child field by separating them with a period.
+To view the git repository URL for the latest version of npm, you could
+do this:</p>
+<pre><code>npm.commands.view([&quot;npm&quot;, &quot;repository.url&quot;], callback)
+</code></pre><p>For fields that are arrays, requesting a non-numeric field will return
+all of the values from the objects in the list. For example, to get all
+the contributor names for the &quot;express&quot; project, you can do this:</p>
+<pre><code>npm.commands.view([&quot;express&quot;, &quot;contributors.email&quot;], callback)
+</code></pre><p>You may also use numeric indices in square braces to specifically select
+an item in an array field. To just get the email address of the first
+contributor in the list, you can do this:</p>
+<pre><code>npm.commands.view([&quot;express&quot;, &quot;contributors[0].email&quot;], callback)
+</code></pre><p>Multiple fields may be specified, and will be printed one after another.
+For exampls, to get all the contributor names and email addresses, you
+can do this:</p>
+<pre><code>npm.commands.view([&quot;express&quot;, &quot;contributors.name&quot;, &quot;contributors.email&quot;], callback)
+</code></pre><p>&quot;Person&quot; fields are shown as a string if they would be shown as an
+object. So, for example, this will show the list of npm contributors in
+the shortened string format. (See <code>npm help json</code> for more on this.)</p>
+<pre><code>npm.commands.view([&quot;npm&quot;, &quot;contributors&quot;], callback)
+</code></pre><p>If a version range is provided, then data will be printed for every
+matching version of the package. This will show which version of jsdom
+was required by each matching version of yui3:</p>
+<pre><code>npm.commands.view([&quot;yui3@&#39;&gt;0.5.4&#39;&quot;, &quot;dependencies.jsdom&quot;], callback)
+</code></pre><h2 id="output">OUTPUT</h2>
+<p>If only a single string field for a single version is output, then it
+will not be colorized or quoted, so as to enable piping the output to
+another command.</p>
+<p>If the version range matches multiple versions, than each printed value
+will be prefixed with the version it applies to.</p>
+<p>If multiple fields are requested, than each of them are prefixed with
+the field name.</p>
+<p>Console output can be disabled by setting the &#39;silent&#39; parameter to true.</p>
+<h2 id="return-value">RETURN VALUE</h2>
+<p>The data returned will be an object in this formation:</p>
+<pre><code>{ &lt;version&gt;:
+ { &lt;field&gt;: &lt;value&gt;
+ , ... }
+, ... }
+</code></pre><p>corresponding to the list of fields selected.</p>
+
+</div>
+
+<table border=0 cellspacing=0 cellpadding=0 id=npmlogo>
+<tr><td style="width:180px;height:10px;background:rgb(237,127,127)" colspan=18>&nbsp;</td></tr>
+<tr><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td colspan=6 style="width:60px;height:10px;background:#fff">&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td></tr>
+<tr><td colspan=2 style="width:20px;height:30px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=4 colspan=2>&nbsp;</td><td style="width:10px;height:20px;background:rgb(237,127,127)" rowspan=2>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=3 colspan=2>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff" rowspan=2>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff">&nbsp;</td></tr>
+<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
+<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
+</table>
+<p id="footer">npm-view &mdash; npm@1.4.10</p>
+
diff --git a/deps/npm/html/doc/api/npm-whoami.html b/deps/npm/html/doc/api/npm-whoami.html
new file mode 100644
index 000000000..b6e17a6b5
--- /dev/null
+++ b/deps/npm/html/doc/api/npm-whoami.html
@@ -0,0 +1,33 @@
+<!doctype html>
+<html>
+ <title>npm-whoami</title>
+ <meta http-equiv="content-type" value="text/html;utf-8">
+ <link rel="stylesheet" type="text/css" href="../../static/style.css">
+ <link rel="canonical" href="https://www.npmjs.org/doc/api/npm-whoami.html">
+ <script async=true src="../../static/toc.js"></script>
+
+ <body>
+ <div id="wrapper">
+
+<h1><a href="../api/npm-whoami.html">npm-whoami</a></h1> <p>Display npm username</p>
+<h2 id="synopsis">SYNOPSIS</h2>
+<pre><code>npm.commands.whoami(args, callback)
+</code></pre><h2 id="description">DESCRIPTION</h2>
+<p>Print the <code>username</code> config to standard output.</p>
+<p>&#39;args&#39; is never used and callback is never called with data.
+&#39;args&#39; must be present or things will break.</p>
+<p>This function is not useful programmatically</p>
+
+</div>
+
+<table border=0 cellspacing=0 cellpadding=0 id=npmlogo>
+<tr><td style="width:180px;height:10px;background:rgb(237,127,127)" colspan=18>&nbsp;</td></tr>
+<tr><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td colspan=6 style="width:60px;height:10px;background:#fff">&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td></tr>
+<tr><td colspan=2 style="width:20px;height:30px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=4 colspan=2>&nbsp;</td><td style="width:10px;height:20px;background:rgb(237,127,127)" rowspan=2>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=3 colspan=2>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff" rowspan=2>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff">&nbsp;</td></tr>
+<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
+<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
+</table>
+<p id="footer">npm-whoami &mdash; npm@1.4.10</p>
+
diff --git a/deps/npm/html/doc/api/npm.html b/deps/npm/html/doc/api/npm.html
new file mode 100644
index 000000000..2cc3b6448
--- /dev/null
+++ b/deps/npm/html/doc/api/npm.html
@@ -0,0 +1,114 @@
+<!doctype html>
+<html>
+ <title>npm</title>
+ <meta http-equiv="content-type" value="text/html;utf-8">
+ <link rel="stylesheet" type="text/css" href="../../static/style.css">
+ <link rel="canonical" href="https://www.npmjs.org/doc/api/npm.html">
+ <script async=true src="../../static/toc.js"></script>
+
+ <body>
+ <div id="wrapper">
+
+<h1><a href="../api/npm.html">npm</a></h1> <p>node package manager</p>
+<h2 id="synopsis">SYNOPSIS</h2>
+<pre><code>var npm = require(&quot;npm&quot;)
+npm.load([configObject, ]function (er, npm) {
+ // use the npm object, now that it&#39;s loaded.
+
+ npm.config.set(key, val)
+ val = npm.config.get(key)
+
+ console.log(&quot;prefix = %s&quot;, npm.prefix)
+
+ npm.commands.install([&quot;package&quot;], cb)
+})
+</code></pre><h2 id="version">VERSION</h2>
+<p>1.4.10</p>
+<h2 id="description">DESCRIPTION</h2>
+<p>This is the API documentation for npm.
+To find documentation of the command line
+client, see <code><a href="../cli/npm.html">npm(1)</a></code>.</p>
+<p>Prior to using npm&#39;s commands, <code>npm.load()</code> must be called.
+If you provide <code>configObject</code> as an object hash of top-level
+configs, they override the values stored in the various config
+locations. In the npm command line client, this set of configs
+is parsed from the command line options. Additional configuration
+params are loaded from two configuration files. See <code><a href="../cli/npm-config.html">npm-config(1)</a></code>,
+<code><a href="../misc/npm-config.html">npm-config(7)</a></code>, and <code><a href="../files/npmrc.html">npmrc(5)</a></code> for more information.</p>
+<p>After that, each of the functions are accessible in the
+commands object: <code>npm.commands.&lt;cmd&gt;</code>. See <code><a href="../misc/npm-index.html">npm-index(7)</a></code> for a list of
+all possible commands.</p>
+<p>All commands on the command object take an <strong>array</strong> of positional argument
+<strong>strings</strong>. The last argument to any function is a callback. Some
+commands take other optional arguments.</p>
+<p>Configs cannot currently be set on a per function basis, as each call to
+npm.config.set will change the value for <em>all</em> npm commands in that process.</p>
+<p>To find API documentation for a specific command, run the <code>npm apihelp</code>
+command.</p>
+<h2 id="methods-and-properties">METHODS AND PROPERTIES</h2>
+<ul>
+<li><p><code>npm.load(configs, cb)</code></p>
+<p> Load the configuration params, and call the <code>cb</code> function once the
+ globalconfig and userconfig files have been loaded as well, or on
+ nextTick if they&#39;ve already been loaded.</p>
+</li>
+<li><p><code>npm.config</code></p>
+<p> An object for accessing npm configuration parameters.</p>
+<ul>
+<li><code>npm.config.get(key)</code></li>
+<li><code>npm.config.set(key, val)</code></li>
+<li><code>npm.config.del(key)</code></li>
+</ul>
+</li>
+<li><p><code>npm.dir</code> or <code>npm.root</code></p>
+<p> The <code>node_modules</code> directory where npm will operate.</p>
+</li>
+<li><p><code>npm.prefix</code></p>
+<p> The prefix where npm is operating. (Most often the current working
+ directory.)</p>
+</li>
+<li><p><code>npm.cache</code></p>
+<p> The place where npm keeps JSON and tarballs it fetches from the
+ registry (or uploads to the registry).</p>
+</li>
+<li><p><code>npm.tmp</code></p>
+<p> npm&#39;s temporary working directory.</p>
+</li>
+<li><p><code>npm.deref</code></p>
+<p> Get the &quot;real&quot; name for a command that has either an alias or
+ abbreviation.</p>
+</li>
+</ul>
+<h2 id="magic">MAGIC</h2>
+<p>For each of the methods in the <code>npm.commands</code> hash, a method is added to
+the npm object, which takes a set of positional string arguments rather
+than an array and a callback.</p>
+<p>If the last argument is a callback, then it will use the supplied
+callback. However, if no callback is provided, then it will print out
+the error or results.</p>
+<p>For example, this would work in a node repl:</p>
+<pre><code>&gt; npm = require(&quot;npm&quot;)
+&gt; npm.load() // wait a sec...
+&gt; npm.install(&quot;dnode&quot;, &quot;express&quot;)
+</code></pre><p>Note that that <em>won&#39;t</em> work in a node program, since the <code>install</code>
+method will get called before the configuration load is completed.</p>
+<h2 id="abbrevs">ABBREVS</h2>
+<p>In order to support <code>npm ins foo</code> instead of <code>npm install foo</code>, the
+<code>npm.commands</code> object has a set of abbreviations as well as the full
+method names. Use the <code>npm.deref</code> method to find the real name.</p>
+<p>For example:</p>
+<pre><code>var cmd = npm.deref(&quot;unp&quot;) // cmd === &quot;unpublish&quot;
+</code></pre>
+</div>
+
+<table border=0 cellspacing=0 cellpadding=0 id=npmlogo>
+<tr><td style="width:180px;height:10px;background:rgb(237,127,127)" colspan=18>&nbsp;</td></tr>
+<tr><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td colspan=6 style="width:60px;height:10px;background:#fff">&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td></tr>
+<tr><td colspan=2 style="width:20px;height:30px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=4 colspan=2>&nbsp;</td><td style="width:10px;height:20px;background:rgb(237,127,127)" rowspan=2>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=3 colspan=2>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff" rowspan=2>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff">&nbsp;</td></tr>
+<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
+<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
+</table>
+<p id="footer">npm &mdash; npm@1.4.10</p>
+
diff --git a/deps/npm/html/doc/bin.html b/deps/npm/html/doc/bin.html
deleted file mode 100644
index 7953827ab..000000000
--- a/deps/npm/html/doc/bin.html
+++ /dev/null
@@ -1,55 +0,0 @@
-<!doctype html>
-<html>
- <title>bin</title>
- <meta http-equiv="content-type" value="text/html;utf-8">
- <link rel="stylesheet" type="text/css" href="../static/style.css">
-
- <body>
- <div id="wrapper">
-<h1><a href="../doc/bin.html">bin</a></h1> <p>Display npm bin folder</p>
-
-<h2 id="SYNOPSIS">SYNOPSIS</h2>
-
-<pre><code>npm bin</code></pre>
-
-<h2 id="DESCRIPTION">DESCRIPTION</h2>
-
-<p>Print the folder where npm will install executables.</p>
-
-<h2 id="SEE-ALSO">SEE ALSO</h2>
-
-<ul><li><a href="../doc/prefix.html">prefix(1)</a></li><li><a href="../doc/root.html">root(1)</a></li><li><a href="../doc/folders.html">folders(1)</a></li><li><a href="../doc/config.html">config(1)</a></li></ul>
-</div>
-<p id="footer">bin &mdash; npm@1.2.30</p>
-<script>
-;(function () {
-var wrapper = document.getElementById("wrapper")
-var els = Array.prototype.slice.call(wrapper.getElementsByTagName("*"), 0)
- .filter(function (el) {
- return el.parentNode === wrapper
- && el.tagName.match(/H[1-6]/)
- && el.id
- })
-var l = 2
- , toc = document.createElement("ul")
-toc.innerHTML = els.map(function (el) {
- var i = el.tagName.charAt(1)
- , out = ""
- while (i > l) {
- out += "<ul>"
- l ++
- }
- while (i < l) {
- out += "</ul>"
- l --
- }
- out += "<li><a href='#" + el.id + "'>" +
- ( el.innerText || el.text || el.innerHTML)
- + "</a>"
- return out
-}).join("\n")
-toc.id = "toc"
-document.body.appendChild(toc)
-})()
-</script>
-</body></html>
diff --git a/deps/npm/html/doc/bugs.html b/deps/npm/html/doc/bugs.html
deleted file mode 100644
index 174b94903..000000000
--- a/deps/npm/html/doc/bugs.html
+++ /dev/null
@@ -1,71 +0,0 @@
-<!doctype html>
-<html>
- <title>bugs</title>
- <meta http-equiv="content-type" value="text/html;utf-8">
- <link rel="stylesheet" type="text/css" href="../static/style.css">
-
- <body>
- <div id="wrapper">
-<h1><a href="../doc/bugs.html">bugs</a></h1> <p>Bugs for a package in a web browser maybe</p>
-
-<h2 id="SYNOPSIS">SYNOPSIS</h2>
-
-<pre><code>npm bugs &lt;pkgname&gt;</code></pre>
-
-<h2 id="DESCRIPTION">DESCRIPTION</h2>
-
-<p>This command tries to guess at the likely location of a package&#39;s
-bug tracker URL, and then tries to open it using the <code>--browser</code>
-config param.</p>
-
-<h2 id="CONFIGURATION">CONFIGURATION</h2>
-
-<h3 id="browser">browser</h3>
-
-<ul><li>Default: OS X: <code>&quot;open&quot;</code>, Windows: <code>&quot;start&quot;</code>, Others: <code>&quot;xdg-open&quot;</code></li><li>Type: String</li></ul>
-
-<p>The browser that is called by the <code>npm bugs</code> command to open websites.</p>
-
-<h3 id="registry">registry</h3>
-
-<ul><li>Default: https://registry.npmjs.org/</li><li>Type: url</li></ul>
-
-<p>The base URL of the npm package registry.</p>
-
-<h2 id="SEE-ALSO">SEE ALSO</h2>
-
-<ul><li><a href="../doc/docs.html">docs(1)</a></li><li><a href="../doc/view.html">view(1)</a></li><li><a href="../doc/publish.html">publish(1)</a></li><li><a href="../doc/registry.html">registry(1)</a></li><li><a href="../doc/config.html">config(1)</a></li><li><a href="../doc/json.html">json(1)</a></li></ul>
-</div>
-<p id="footer">bugs &mdash; npm@1.2.30</p>
-<script>
-;(function () {
-var wrapper = document.getElementById("wrapper")
-var els = Array.prototype.slice.call(wrapper.getElementsByTagName("*"), 0)
- .filter(function (el) {
- return el.parentNode === wrapper
- && el.tagName.match(/H[1-6]/)
- && el.id
- })
-var l = 2
- , toc = document.createElement("ul")
-toc.innerHTML = els.map(function (el) {
- var i = el.tagName.charAt(1)
- , out = ""
- while (i > l) {
- out += "<ul>"
- l ++
- }
- while (i < l) {
- out += "</ul>"
- l --
- }
- out += "<li><a href='#" + el.id + "'>" +
- ( el.innerText || el.text || el.innerHTML)
- + "</a>"
- return out
-}).join("\n")
-toc.id = "toc"
-document.body.appendChild(toc)
-})()
-</script>
-</body></html>
diff --git a/deps/npm/html/doc/build.html b/deps/npm/html/doc/build.html
deleted file mode 100644
index d556823b8..000000000
--- a/deps/npm/html/doc/build.html
+++ /dev/null
@@ -1,60 +0,0 @@
-<!doctype html>
-<html>
- <title>build</title>
- <meta http-equiv="content-type" value="text/html;utf-8">
- <link rel="stylesheet" type="text/css" href="../static/style.css">
-
- <body>
- <div id="wrapper">
-<h1><a href="../doc/build.html">build</a></h1> <p>Build a package</p>
-
-<h2 id="SYNOPSIS">SYNOPSIS</h2>
-
-<pre><code>npm build &lt;package-folder&gt;</code></pre>
-
-<ul><li><code>&lt;package-folder&gt;</code>:
-A folder containing a <code>package.json</code> file in its root.</li></ul>
-
-<h2 id="DESCRIPTION">DESCRIPTION</h2>
-
-<p>This is the plumbing command called by <code>npm link</code> and <code>npm install</code>.</p>
-
-<p>It should generally not be called directly.</p>
-
-<h2 id="SEE-ALSO">SEE ALSO</h2>
-
-<ul><li><a href="../doc/install.html">install(1)</a></li><li><a href="../doc/link.html">link(1)</a></li><li><a href="../doc/scripts.html">scripts(1)</a></li><li><a href="../doc/json.html">json(1)</a></li></ul>
-</div>
-<p id="footer">build &mdash; npm@1.2.30</p>
-<script>
-;(function () {
-var wrapper = document.getElementById("wrapper")
-var els = Array.prototype.slice.call(wrapper.getElementsByTagName("*"), 0)
- .filter(function (el) {
- return el.parentNode === wrapper
- && el.tagName.match(/H[1-6]/)
- && el.id
- })
-var l = 2
- , toc = document.createElement("ul")
-toc.innerHTML = els.map(function (el) {
- var i = el.tagName.charAt(1)
- , out = ""
- while (i > l) {
- out += "<ul>"
- l ++
- }
- while (i < l) {
- out += "</ul>"
- l --
- }
- out += "<li><a href='#" + el.id + "'>" +
- ( el.innerText || el.text || el.innerHTML)
- + "</a>"
- return out
-}).join("\n")
-toc.id = "toc"
-document.body.appendChild(toc)
-})()
-</script>
-</body></html>
diff --git a/deps/npm/html/doc/bundle.html b/deps/npm/html/doc/bundle.html
deleted file mode 100644
index 4b12bbca6..000000000
--- a/deps/npm/html/doc/bundle.html
+++ /dev/null
@@ -1,55 +0,0 @@
-<!doctype html>
-<html>
- <title>bundle</title>
- <meta http-equiv="content-type" value="text/html;utf-8">
- <link rel="stylesheet" type="text/css" href="../static/style.css">
-
- <body>
- <div id="wrapper">
-<h1><a href="../doc/bundle.html">bundle</a></h1> <p>REMOVED</p>
-
-<h2 id="DESCRIPTION">DESCRIPTION</h2>
-
-<p>The <code>npm bundle</code> command has been removed in 1.0, for the simple reason
-that it is no longer necessary, as the default behavior is now to
-install packages into the local space.</p>
-
-<p>Just use <code>npm install</code> now to do what <code>npm bundle</code> used to do.</p>
-
-<h2 id="SEE-ALSO">SEE ALSO</h2>
-
-<ul><li><a href="../doc/install.html">install(1)</a></li></ul>
-</div>
-<p id="footer">bundle &mdash; npm@1.2.30</p>
-<script>
-;(function () {
-var wrapper = document.getElementById("wrapper")
-var els = Array.prototype.slice.call(wrapper.getElementsByTagName("*"), 0)
- .filter(function (el) {
- return el.parentNode === wrapper
- && el.tagName.match(/H[1-6]/)
- && el.id
- })
-var l = 2
- , toc = document.createElement("ul")
-toc.innerHTML = els.map(function (el) {
- var i = el.tagName.charAt(1)
- , out = ""
- while (i > l) {
- out += "<ul>"
- l ++
- }
- while (i < l) {
- out += "</ul>"
- l --
- }
- out += "<li><a href='#" + el.id + "'>" +
- ( el.innerText || el.text || el.innerHTML)
- + "</a>"
- return out
-}).join("\n")
-toc.id = "toc"
-document.body.appendChild(toc)
-})()
-</script>
-</body></html>
diff --git a/deps/npm/html/doc/cache.html b/deps/npm/html/doc/cache.html
deleted file mode 100644
index 34e02dab3..000000000
--- a/deps/npm/html/doc/cache.html
+++ /dev/null
@@ -1,101 +0,0 @@
-<!doctype html>
-<html>
- <title>cache</title>
- <meta http-equiv="content-type" value="text/html;utf-8">
- <link rel="stylesheet" type="text/css" href="../static/style.css">
-
- <body>
- <div id="wrapper">
-<h1><a href="../doc/cache.html">cache</a></h1> <p>Manipulates packages cache</p>
-
-<h2 id="SYNOPSIS">SYNOPSIS</h2>
-
-<pre><code>npm cache add &lt;tarball file&gt;
-npm cache add &lt;folder&gt;
-npm cache add &lt;tarball url&gt;
-npm cache add &lt;name&gt;@&lt;version&gt;
-
-npm cache ls [&lt;path&gt;]
-
-npm cache clean [&lt;path&gt;]</code></pre>
-
-<h2 id="DESCRIPTION">DESCRIPTION</h2>
-
-<p>Used to add, list, or clear the npm cache folder.</p>
-
-<ul><li><p>add:
-Add the specified package to the local cache. This command is primarily
-intended to be used internally by npm, but it can provide a way to
-add data to the local installation cache explicitly.</p></li><li><p>ls:
-Show the data in the cache. Argument is a path to show in the cache
-folder. Works a bit like the <code>find</code> program, but limited by the
-<code>depth</code> config.</p></li><li><p>clean:
-Delete data out of the cache folder. If an argument is provided, then
-it specifies a subpath to delete. If no argument is provided, then
-the entire cache is cleared.</p></li></ul>
-
-<h2 id="DETAILS">DETAILS</h2>
-
-<p>npm stores cache data in <code>$HOME/.npm</code>. For each package that is added
-to the cache, three pieces of information are stored in
-<code>{cache}/{name}/{version}</code>:</p>
-
-<ul><li>.../package/:
-A folder containing the package contents as they appear in the tarball.</li><li>.../package.json:
-The package.json file, as npm sees it, with overlays applied and a _id attribute.</li><li>.../package.tgz:
-The tarball for that version.</li></ul>
-
-<p>Additionally, whenever a registry request is made, a <code>.cache.json</code> file
-is placed at the corresponding URI, to store the ETag and the requested
-data.</p>
-
-<p>Commands that make non-essential registry requests (such as <code>search</code> and
-<code>view</code>, or the completion scripts) generally specify a minimum timeout.
-If the <code>.cache.json</code> file is younger than the specified timeout, then
-they do not make an HTTP request to the registry.</p>
-
-<h2 id="CONFIGURATION">CONFIGURATION</h2>
-
-<h3 id="cache">cache</h3>
-
-<p>Default: <code>$HOME/.npm</code> on Posix, or <code>$HOME/npm-cache</code> on Windows.</p>
-
-<p>The root cache folder.</p>
-
-<h2 id="SEE-ALSO">SEE ALSO</h2>
-
-<ul><li><a href="../doc/folders.html">folders(1)</a></li><li><a href="../doc/config.html">config(1)</a></li><li><a href="../doc/install.html">install(1)</a></li><li><a href="../doc/publish.html">publish(1)</a></li><li><a href="../doc/pack.html">pack(1)</a></li></ul>
-</div>
-<p id="footer">cache &mdash; npm@1.2.30</p>
-<script>
-;(function () {
-var wrapper = document.getElementById("wrapper")
-var els = Array.prototype.slice.call(wrapper.getElementsByTagName("*"), 0)
- .filter(function (el) {
- return el.parentNode === wrapper
- && el.tagName.match(/H[1-6]/)
- && el.id
- })
-var l = 2
- , toc = document.createElement("ul")
-toc.innerHTML = els.map(function (el) {
- var i = el.tagName.charAt(1)
- , out = ""
- while (i > l) {
- out += "<ul>"
- l ++
- }
- while (i < l) {
- out += "</ul>"
- l --
- }
- out += "<li><a href='#" + el.id + "'>" +
- ( el.innerText || el.text || el.innerHTML)
- + "</a>"
- return out
-}).join("\n")
-toc.id = "toc"
-document.body.appendChild(toc)
-})()
-</script>
-</body></html>
diff --git a/deps/npm/html/doc/changelog.html b/deps/npm/html/doc/changelog.html
deleted file mode 100644
index 89e17afac..000000000
--- a/deps/npm/html/doc/changelog.html
+++ /dev/null
@@ -1,100 +0,0 @@
-<!doctype html>
-<html>
- <title>changelog</title>
- <meta http-equiv="content-type" value="text/html;utf-8">
- <link rel="stylesheet" type="text/css" href="../static/style.css">
-
- <body>
- <div id="wrapper">
-<h1><a href="../doc/changelog.html">changelog</a></h1> <p>Changes</p>
-
-<h2 id="HISTORY">HISTORY</h2>
-
-<h3 id="1-1-3-1-1-4">1.1.3, 1.1.4</h3>
-
-<ul><li>Update request to support HTTPS-over-HTTP proxy tunneling</li><li>Throw on undefined envs in config settings</li><li>Update which to 1.0.5</li><li>Fix windows UNC busyloop in findPrefix</li><li>Bundle nested bundleDependencies properly</li><li>Alias adduser to add-user</li><li>Doc updates (Christian Howe, Henrik Hodne, Andrew Lunny)</li><li>ignore logfd/outfd streams in makeEnv() (Rod Vagg)</li><li>shrinkwrap: Behave properly with url-installed deps</li><li>install: Support --save with url install targets</li><li>Support installing naked tars or single-file modules from urls etc.</li><li>init: Don&#39;t add engines section</li><li>Don&#39;t run make clean on rebuild</li><li>Added missing unicode replacement (atomizer)</li></ul>
-
-<h3 id="1-1-2">1.1.2</h3>
-
-<p>Dave Pacheco (2):
- add &quot;npm shrinkwrap&quot;</p>
-
-<p>Martin Cooper (1):
- Fix #1753 Make a copy of the cached objects we&#39;ll modify.</p>
-
-<p>Tim Oxley (1):
- correctly remove readme from default npm view command.</p>
-
-<p>Tyler Green (1):
- fix #2187 set terminal columns to Infinity if 0</p>
-
-<p>isaacs (19):
- update minimatch
- update request
- Experimental: single-file modules
- Fix #2172 Don&#39;t remove global mans uninstalling local pkgs
- Add --versions flag to show the version of node as well
- Support --json flag for ls output
- update request to 2.9.151</p>
-
-<h3 id="1-1">1.1</h3>
-
-<ul><li>Replace system tar dependency with a JS tar</li><li>Continue to refine</li></ul>
-
-<h3 id="1-0">1.0</h3>
-
-<ul><li>Greatly simplified folder structure </li><li>Install locally (bundle by default) </li><li>Drastic rearchitecture</li></ul>
-
-<h3 id="0-3">0.3</h3>
-
-<ul><li>More correct permission/uid handling when running as root </li><li>Require node 0.4.0 </li><li>Reduce featureset </li><li>Packages without &quot;main&quot; modules don&#39;t export modules</li><li>Remove support for invalid JSON (since node doesn&#39;t support it)</li></ul>
-
-<h3 id="0-2">0.2</h3>
-
-<ul><li>First allegedly &quot;stable&quot; release</li><li>Most functionality implemented </li><li>Used shim files and <code>name@version</code> symlinks</li><li>Feature explosion</li><li>Kind of a mess</li></ul>
-
-<h3 id="0-1">0.1</h3>
-
-<ul><li>push to beta, and announce </li><li>Solaris and Cygwin support</li></ul>
-
-<h3 id="0-0">0.0</h3>
-
-<ul><li>Lots of sketches and false starts; abandoned a few times</li><li>Core functionality established</li></ul>
-
-<h2 id="SEE-ALSO">SEE ALSO</h2>
-
-<ul><li><a href="../doc/npm.html">npm(1)</a></li><li><a href="../doc/faq.html">faq(1)</a></li></ul>
-</div>
-<p id="footer">changelog &mdash; npm@1.2.30</p>
-<script>
-;(function () {
-var wrapper = document.getElementById("wrapper")
-var els = Array.prototype.slice.call(wrapper.getElementsByTagName("*"), 0)
- .filter(function (el) {
- return el.parentNode === wrapper
- && el.tagName.match(/H[1-6]/)
- && el.id
- })
-var l = 2
- , toc = document.createElement("ul")
-toc.innerHTML = els.map(function (el) {
- var i = el.tagName.charAt(1)
- , out = ""
- while (i > l) {
- out += "<ul>"
- l ++
- }
- while (i < l) {
- out += "</ul>"
- l --
- }
- out += "<li><a href='#" + el.id + "'>" +
- ( el.innerText || el.text || el.innerHTML)
- + "</a>"
- return out
-}).join("\n")
-toc.id = "toc"
-document.body.appendChild(toc)
-})()
-</script>
-</body></html>
diff --git a/deps/npm/html/doc/cli/npm-adduser.html b/deps/npm/html/doc/cli/npm-adduser.html
new file mode 100644
index 000000000..94f3f5d9e
--- /dev/null
+++ b/deps/npm/html/doc/cli/npm-adduser.html
@@ -0,0 +1,50 @@
+<!doctype html>
+<html>
+ <title>npm-adduser</title>
+ <meta http-equiv="content-type" value="text/html;utf-8">
+ <link rel="stylesheet" type="text/css" href="../../static/style.css">
+ <link rel="canonical" href="https://www.npmjs.org/doc/cli/npm-adduser.html">
+ <script async=true src="../../static/toc.js"></script>
+
+ <body>
+ <div id="wrapper">
+
+<h1><a href="../cli/npm-adduser.html">npm-adduser</a></h1> <p>Add a registry user account</p>
+<h2 id="synopsis">SYNOPSIS</h2>
+<pre><code>npm adduser
+</code></pre><h2 id="description">DESCRIPTION</h2>
+<p>Create or verify a user named <code>&lt;username&gt;</code> in the npm registry, and
+save the credentials to the <code>.npmrc</code> file.</p>
+<p>The username, password, and email are read in from prompts.</p>
+<p>You may use this command to change your email address, but not username
+or password.</p>
+<p>To reset your password, go to <a href="https://npmjs.org/forgot">https://npmjs.org/forgot</a></p>
+<p>You may use this command multiple times with the same user account to
+authorize on a new machine.</p>
+<h2 id="configuration">CONFIGURATION</h2>
+<h3 id="registry">registry</h3>
+<p>Default: <a href="http://registry.npmjs.org/">http://registry.npmjs.org/</a></p>
+<p>The base URL of the npm package registry.</p>
+<h2 id="see-also">SEE ALSO</h2>
+<ul>
+<li><a href="../misc/npm-registry.html">npm-registry(7)</a></li>
+<li><a href="../cli/npm-config.html">npm-config(1)</a></li>
+<li><a href="../misc/npm-config.html">npm-config(7)</a></li>
+<li><a href="../files/npmrc.html">npmrc(5)</a></li>
+<li><a href="../cli/npm-owner.html">npm-owner(1)</a></li>
+<li><a href="../cli/npm-whoami.html">npm-whoami(1)</a></li>
+</ul>
+
+</div>
+
+<table border=0 cellspacing=0 cellpadding=0 id=npmlogo>
+<tr><td style="width:180px;height:10px;background:rgb(237,127,127)" colspan=18>&nbsp;</td></tr>
+<tr><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td colspan=6 style="width:60px;height:10px;background:#fff">&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td></tr>
+<tr><td colspan=2 style="width:20px;height:30px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=4 colspan=2>&nbsp;</td><td style="width:10px;height:20px;background:rgb(237,127,127)" rowspan=2>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=3 colspan=2>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff" rowspan=2>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff">&nbsp;</td></tr>
+<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
+<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
+</table>
+<p id="footer">npm-adduser &mdash; npm@1.4.10</p>
+
diff --git a/deps/npm/html/doc/cli/npm-bin.html b/deps/npm/html/doc/cli/npm-bin.html
new file mode 100644
index 000000000..7bb77547a
--- /dev/null
+++ b/deps/npm/html/doc/cli/npm-bin.html
@@ -0,0 +1,39 @@
+<!doctype html>
+<html>
+ <title>npm-bin</title>
+ <meta http-equiv="content-type" value="text/html;utf-8">
+ <link rel="stylesheet" type="text/css" href="../../static/style.css">
+ <link rel="canonical" href="https://www.npmjs.org/doc/cli/npm-bin.html">
+ <script async=true src="../../static/toc.js"></script>
+
+ <body>
+ <div id="wrapper">
+
+<h1><a href="../cli/npm-bin.html">npm-bin</a></h1> <p>Display npm bin folder</p>
+<h2 id="synopsis">SYNOPSIS</h2>
+<pre><code>npm bin
+</code></pre><h2 id="description">DESCRIPTION</h2>
+<p>Print the folder where npm will install executables.</p>
+<h2 id="see-also">SEE ALSO</h2>
+<ul>
+<li><a href="../cli/npm-prefix.html">npm-prefix(1)</a></li>
+<li><a href="../cli/npm-root.html">npm-root(1)</a></li>
+<li><a href="../files/npm-folders.html">npm-folders(5)</a></li>
+<li><a href="../cli/npm-config.html">npm-config(1)</a></li>
+<li><a href="../misc/npm-config.html">npm-config(7)</a></li>
+<li><a href="../files/npmrc.html">npmrc(5)</a></li>
+</ul>
+
+</div>
+
+<table border=0 cellspacing=0 cellpadding=0 id=npmlogo>
+<tr><td style="width:180px;height:10px;background:rgb(237,127,127)" colspan=18>&nbsp;</td></tr>
+<tr><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td colspan=6 style="width:60px;height:10px;background:#fff">&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td></tr>
+<tr><td colspan=2 style="width:20px;height:30px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=4 colspan=2>&nbsp;</td><td style="width:10px;height:20px;background:rgb(237,127,127)" rowspan=2>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=3 colspan=2>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff" rowspan=2>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff">&nbsp;</td></tr>
+<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
+<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
+</table>
+<p id="footer">npm-bin &mdash; npm@1.4.10</p>
+
diff --git a/deps/npm/html/doc/cli/npm-bugs.html b/deps/npm/html/doc/cli/npm-bugs.html
new file mode 100644
index 000000000..e308b5687
--- /dev/null
+++ b/deps/npm/html/doc/cli/npm-bugs.html
@@ -0,0 +1,58 @@
+<!doctype html>
+<html>
+ <title>npm-bugs</title>
+ <meta http-equiv="content-type" value="text/html;utf-8">
+ <link rel="stylesheet" type="text/css" href="../../static/style.css">
+ <link rel="canonical" href="https://www.npmjs.org/doc/cli/npm-bugs.html">
+ <script async=true src="../../static/toc.js"></script>
+
+ <body>
+ <div id="wrapper">
+
+<h1><a href="../cli/npm-bugs.html">npm-bugs</a></h1> <p>Bugs for a package in a web browser maybe</p>
+<h2 id="synopsis">SYNOPSIS</h2>
+<pre><code>npm bugs &lt;pkgname&gt;
+npm bugs (with no args in a package dir)
+</code></pre><h2 id="description">DESCRIPTION</h2>
+<p>This command tries to guess at the likely location of a package&#39;s
+bug tracker URL, and then tries to open it using the <code>--browser</code>
+config param. If no package name is provided, it will search for
+a <code>package.json</code> in the current folder and use the <code>name</code> property.</p>
+<h2 id="configuration">CONFIGURATION</h2>
+<h3 id="browser">browser</h3>
+<ul>
+<li>Default: OS X: <code>&quot;open&quot;</code>, Windows: <code>&quot;start&quot;</code>, Others: <code>&quot;xdg-open&quot;</code></li>
+<li>Type: String</li>
+</ul>
+<p>The browser that is called by the <code>npm bugs</code> command to open websites.</p>
+<h3 id="registry">registry</h3>
+<ul>
+<li>Default: <a href="https://registry.npmjs.org/">https://registry.npmjs.org/</a></li>
+<li>Type: url</li>
+</ul>
+<p>The base URL of the npm package registry.</p>
+<h2 id="see-also">SEE ALSO</h2>
+<ul>
+<li><a href="../cli/npm-docs.html">npm-docs(1)</a></li>
+<li><a href="../cli/npm-view.html">npm-view(1)</a></li>
+<li><a href="../cli/npm-publish.html">npm-publish(1)</a></li>
+<li><a href="../misc/npm-registry.html">npm-registry(7)</a></li>
+<li><a href="../cli/npm-config.html">npm-config(1)</a></li>
+<li><a href="../misc/npm-config.html">npm-config(7)</a></li>
+<li><a href="../files/npmrc.html">npmrc(5)</a></li>
+<li><a href="../files/package.json.html">package.json(5)</a></li>
+</ul>
+
+</div>
+
+<table border=0 cellspacing=0 cellpadding=0 id=npmlogo>
+<tr><td style="width:180px;height:10px;background:rgb(237,127,127)" colspan=18>&nbsp;</td></tr>
+<tr><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td colspan=6 style="width:60px;height:10px;background:#fff">&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td></tr>
+<tr><td colspan=2 style="width:20px;height:30px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=4 colspan=2>&nbsp;</td><td style="width:10px;height:20px;background:rgb(237,127,127)" rowspan=2>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=3 colspan=2>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff" rowspan=2>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff">&nbsp;</td></tr>
+<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
+<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
+</table>
+<p id="footer">npm-bugs &mdash; npm@1.4.10</p>
+
diff --git a/deps/npm/html/doc/cli/npm-build.html b/deps/npm/html/doc/cli/npm-build.html
new file mode 100644
index 000000000..ccf049e04
--- /dev/null
+++ b/deps/npm/html/doc/cli/npm-build.html
@@ -0,0 +1,42 @@
+<!doctype html>
+<html>
+ <title>npm-build</title>
+ <meta http-equiv="content-type" value="text/html;utf-8">
+ <link rel="stylesheet" type="text/css" href="../../static/style.css">
+ <link rel="canonical" href="https://www.npmjs.org/doc/cli/npm-build.html">
+ <script async=true src="../../static/toc.js"></script>
+
+ <body>
+ <div id="wrapper">
+
+<h1><a href="../cli/npm-build.html">npm-build</a></h1> <p>Build a package</p>
+<h2 id="synopsis">SYNOPSIS</h2>
+<pre><code>npm build &lt;package-folder&gt;
+</code></pre><ul>
+<li><code>&lt;package-folder&gt;</code>:
+A folder containing a <code>package.json</code> file in its root.</li>
+</ul>
+<h2 id="description">DESCRIPTION</h2>
+<p>This is the plumbing command called by <code>npm link</code> and <code>npm install</code>.</p>
+<p>It should generally not be called directly.</p>
+<h2 id="see-also">SEE ALSO</h2>
+<ul>
+<li><a href="../cli/npm-install.html">npm-install(1)</a></li>
+<li><a href="../cli/npm-link.html">npm-link(1)</a></li>
+<li><a href="../misc/npm-scripts.html">npm-scripts(7)</a></li>
+<li><a href="../files/package.json.html">package.json(5)</a></li>
+</ul>
+
+</div>
+
+<table border=0 cellspacing=0 cellpadding=0 id=npmlogo>
+<tr><td style="width:180px;height:10px;background:rgb(237,127,127)" colspan=18>&nbsp;</td></tr>
+<tr><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td colspan=6 style="width:60px;height:10px;background:#fff">&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td></tr>
+<tr><td colspan=2 style="width:20px;height:30px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=4 colspan=2>&nbsp;</td><td style="width:10px;height:20px;background:rgb(237,127,127)" rowspan=2>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=3 colspan=2>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff" rowspan=2>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff">&nbsp;</td></tr>
+<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
+<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
+</table>
+<p id="footer">npm-build &mdash; npm@1.4.10</p>
+
diff --git a/deps/npm/html/doc/cli/npm-bundle.html b/deps/npm/html/doc/cli/npm-bundle.html
new file mode 100644
index 000000000..7493151d1
--- /dev/null
+++ b/deps/npm/html/doc/cli/npm-bundle.html
@@ -0,0 +1,35 @@
+<!doctype html>
+<html>
+ <title>npm-bundle</title>
+ <meta http-equiv="content-type" value="text/html;utf-8">
+ <link rel="stylesheet" type="text/css" href="../../static/style.css">
+ <link rel="canonical" href="https://www.npmjs.org/doc/cli/npm-bundle.html">
+ <script async=true src="../../static/toc.js"></script>
+
+ <body>
+ <div id="wrapper">
+
+<h1><a href="../cli/npm-bundle.html">npm-bundle</a></h1> <p>REMOVED</p>
+<h2 id="description">DESCRIPTION</h2>
+<p>The <code>npm bundle</code> command has been removed in 1.0, for the simple reason
+that it is no longer necessary, as the default behavior is now to
+install packages into the local space.</p>
+<p>Just use <code>npm install</code> now to do what <code>npm bundle</code> used to do.</p>
+<h2 id="see-also">SEE ALSO</h2>
+<ul>
+<li><a href="../cli/npm-install.html">npm-install(1)</a></li>
+</ul>
+
+</div>
+
+<table border=0 cellspacing=0 cellpadding=0 id=npmlogo>
+<tr><td style="width:180px;height:10px;background:rgb(237,127,127)" colspan=18>&nbsp;</td></tr>
+<tr><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td colspan=6 style="width:60px;height:10px;background:#fff">&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td></tr>
+<tr><td colspan=2 style="width:20px;height:30px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=4 colspan=2>&nbsp;</td><td style="width:10px;height:20px;background:rgb(237,127,127)" rowspan=2>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=3 colspan=2>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff" rowspan=2>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff">&nbsp;</td></tr>
+<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
+<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
+</table>
+<p id="footer">npm-bundle &mdash; npm@1.4.10</p>
+
diff --git a/deps/npm/html/doc/cli/npm-cache.html b/deps/npm/html/doc/cli/npm-cache.html
new file mode 100644
index 000000000..1d0d0805c
--- /dev/null
+++ b/deps/npm/html/doc/cli/npm-cache.html
@@ -0,0 +1,87 @@
+<!doctype html>
+<html>
+ <title>npm-cache</title>
+ <meta http-equiv="content-type" value="text/html;utf-8">
+ <link rel="stylesheet" type="text/css" href="../../static/style.css">
+ <link rel="canonical" href="https://www.npmjs.org/doc/cli/npm-cache.html">
+ <script async=true src="../../static/toc.js"></script>
+
+ <body>
+ <div id="wrapper">
+
+<h1><a href="../cli/npm-cache.html">npm-cache</a></h1> <p>Manipulates packages cache</p>
+<h2 id="synopsis">SYNOPSIS</h2>
+<pre><code>npm cache add &lt;tarball file&gt;
+npm cache add &lt;folder&gt;
+npm cache add &lt;tarball url&gt;
+npm cache add &lt;name&gt;@&lt;version&gt;
+
+npm cache ls [&lt;path&gt;]
+
+npm cache clean [&lt;path&gt;]
+</code></pre><h2 id="description">DESCRIPTION</h2>
+<p>Used to add, list, or clear the npm cache folder.</p>
+<ul>
+<li><p>add:
+Add the specified package to the local cache. This command is primarily
+intended to be used internally by npm, but it can provide a way to
+add data to the local installation cache explicitly.</p>
+</li>
+<li><p>ls:
+Show the data in the cache. Argument is a path to show in the cache
+folder. Works a bit like the <code>find</code> program, but limited by the
+<code>depth</code> config.</p>
+</li>
+<li><p>clean:
+Delete data out of the cache folder. If an argument is provided, then
+it specifies a subpath to delete. If no argument is provided, then
+the entire cache is cleared.</p>
+</li>
+</ul>
+<h2 id="details">DETAILS</h2>
+<p>npm stores cache data in the directory specified in <code>npm config get cache</code>.
+For each package that is added to the cache, three pieces of information are
+stored in <code>{cache}/{name}/{version}</code>:</p>
+<ul>
+<li>.../package/:
+A folder containing the package contents as they appear in the tarball.</li>
+<li>.../package.json:
+The package.json file, as npm sees it, with overlays applied and a _id attribute.</li>
+<li>.../package.tgz:
+The tarball for that version.</li>
+</ul>
+<p>Additionally, whenever a registry request is made, a <code>.cache.json</code> file
+is placed at the corresponding URI, to store the ETag and the requested
+data.</p>
+<p>Commands that make non-essential registry requests (such as <code>search</code> and
+<code>view</code>, or the completion scripts) generally specify a minimum timeout.
+If the <code>.cache.json</code> file is younger than the specified timeout, then
+they do not make an HTTP request to the registry.</p>
+<h2 id="configuration">CONFIGURATION</h2>
+<h3 id="cache">cache</h3>
+<p>Default: <code>~/.npm</code> on Posix, or <code>%AppData%/npm-cache</code> on Windows.</p>
+<p>The root cache folder.</p>
+<h2 id="see-also">SEE ALSO</h2>
+<ul>
+<li><a href="../files/npm-folders.html">npm-folders(5)</a></li>
+<li><a href="../cli/npm-config.html">npm-config(1)</a></li>
+<li><a href="../misc/npm-config.html">npm-config(7)</a></li>
+<li><a href="../files/npmrc.html">npmrc(5)</a></li>
+<li><a href="../cli/npm-install.html">npm-install(1)</a></li>
+<li><a href="../cli/npm-publish.html">npm-publish(1)</a></li>
+<li><a href="../cli/npm-pack.html">npm-pack(1)</a></li>
+</ul>
+
+</div>
+
+<table border=0 cellspacing=0 cellpadding=0 id=npmlogo>
+<tr><td style="width:180px;height:10px;background:rgb(237,127,127)" colspan=18>&nbsp;</td></tr>
+<tr><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td colspan=6 style="width:60px;height:10px;background:#fff">&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td></tr>
+<tr><td colspan=2 style="width:20px;height:30px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=4 colspan=2>&nbsp;</td><td style="width:10px;height:20px;background:rgb(237,127,127)" rowspan=2>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=3 colspan=2>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff" rowspan=2>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff">&nbsp;</td></tr>
+<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
+<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
+</table>
+<p id="footer">npm-cache &mdash; npm@1.4.10</p>
+
diff --git a/deps/npm/html/doc/cli/npm-completion.html b/deps/npm/html/doc/cli/npm-completion.html
new file mode 100644
index 000000000..5208ee05d
--- /dev/null
+++ b/deps/npm/html/doc/cli/npm-completion.html
@@ -0,0 +1,46 @@
+<!doctype html>
+<html>
+ <title>npm-completion</title>
+ <meta http-equiv="content-type" value="text/html;utf-8">
+ <link rel="stylesheet" type="text/css" href="../../static/style.css">
+ <link rel="canonical" href="https://www.npmjs.org/doc/cli/npm-completion.html">
+ <script async=true src="../../static/toc.js"></script>
+
+ <body>
+ <div id="wrapper">
+
+<h1><a href="../cli/npm-completion.html">npm-completion</a></h1> <p>Tab Completion for npm</p>
+<h2 id="synopsis">SYNOPSIS</h2>
+<pre><code>. &lt;(npm completion)
+</code></pre><h2 id="description">DESCRIPTION</h2>
+<p>Enables tab-completion in all npm commands.</p>
+<p>The synopsis above
+loads the completions into your current shell. Adding it to
+your ~/.bashrc or ~/.zshrc will make the completions available
+everywhere.</p>
+<p>You may of course also pipe the output of npm completion to a file
+such as <code>/usr/local/etc/bash_completion.d/npm</code> if you have a system
+that will read that file for you.</p>
+<p>When <code>COMP_CWORD</code>, <code>COMP_LINE</code>, and <code>COMP_POINT</code> are defined in the
+environment, <code>npm completion</code> acts in &quot;plumbing mode&quot;, and outputs
+completions based on the arguments.</p>
+<h2 id="see-also">SEE ALSO</h2>
+<ul>
+<li><a href="../misc/npm-developers.html">npm-developers(7)</a></li>
+<li><a href="../misc/npm-faq.html">npm-faq(7)</a></li>
+<li><a href="../cli/npm.html">npm(1)</a></li>
+</ul>
+
+</div>
+
+<table border=0 cellspacing=0 cellpadding=0 id=npmlogo>
+<tr><td style="width:180px;height:10px;background:rgb(237,127,127)" colspan=18>&nbsp;</td></tr>
+<tr><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td colspan=6 style="width:60px;height:10px;background:#fff">&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td></tr>
+<tr><td colspan=2 style="width:20px;height:30px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=4 colspan=2>&nbsp;</td><td style="width:10px;height:20px;background:rgb(237,127,127)" rowspan=2>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=3 colspan=2>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff" rowspan=2>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff">&nbsp;</td></tr>
+<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
+<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
+</table>
+<p id="footer">npm-completion &mdash; npm@1.4.10</p>
+
diff --git a/deps/npm/html/doc/cli/npm-config.html b/deps/npm/html/doc/cli/npm-config.html
new file mode 100644
index 000000000..a44e771d5
--- /dev/null
+++ b/deps/npm/html/doc/cli/npm-config.html
@@ -0,0 +1,70 @@
+<!doctype html>
+<html>
+ <title>npm-config</title>
+ <meta http-equiv="content-type" value="text/html;utf-8">
+ <link rel="stylesheet" type="text/css" href="../../static/style.css">
+ <link rel="canonical" href="https://www.npmjs.org/doc/cli/npm-config.html">
+ <script async=true src="../../static/toc.js"></script>
+
+ <body>
+ <div id="wrapper">
+
+<h1><a href="../cli/npm-config.html">npm-config</a></h1> <p>Manage the npm configuration files</p>
+<h2 id="synopsis">SYNOPSIS</h2>
+<pre><code>npm config set &lt;key&gt; &lt;value&gt; [--global]
+npm config get &lt;key&gt;
+npm config delete &lt;key&gt;
+npm config list
+npm config edit
+npm c [set|get|delete|list]
+npm get &lt;key&gt;
+npm set &lt;key&gt; &lt;value&gt; [--global]
+</code></pre><h2 id="description">DESCRIPTION</h2>
+<p>npm gets its config settings from the command line, environment
+variables, <code>npmrc</code> files, and in some cases, the <code>package.json</code> file.</p>
+<p>See <a href="../files/npmrc.html">npmrc(5)</a> for more information about the npmrc files.</p>
+<p>See <code><a href="../misc/npm-config.html">npm-config(7)</a></code> for a more thorough discussion of the mechanisms
+involved.</p>
+<p>The <code>npm config</code> command can be used to update and edit the contents
+of the user and global npmrc files.</p>
+<h2 id="sub-commands">Sub-commands</h2>
+<p>Config supports the following sub-commands:</p>
+<h3 id="set">set</h3>
+<pre><code>npm config set key value
+</code></pre><p>Sets the config key to the value.</p>
+<p>If value is omitted, then it sets it to &quot;true&quot;.</p>
+<h3 id="get">get</h3>
+<pre><code>npm config get key
+</code></pre><p>Echo the config value to stdout.</p>
+<h3 id="list">list</h3>
+<pre><code>npm config list
+</code></pre><p>Show all the config settings.</p>
+<h3 id="delete">delete</h3>
+<pre><code>npm config delete key
+</code></pre><p>Deletes the key from all configuration files.</p>
+<h3 id="edit">edit</h3>
+<pre><code>npm config edit
+</code></pre><p>Opens the config file in an editor. Use the <code>--global</code> flag to edit the
+global config.</p>
+<h2 id="see-also">SEE ALSO</h2>
+<ul>
+<li><a href="../files/npm-folders.html">npm-folders(5)</a></li>
+<li><a href="../misc/npm-config.html">npm-config(7)</a></li>
+<li><a href="../files/package.json.html">package.json(5)</a></li>
+<li><a href="../files/npmrc.html">npmrc(5)</a></li>
+<li><a href="../cli/npm.html">npm(1)</a></li>
+</ul>
+
+</div>
+
+<table border=0 cellspacing=0 cellpadding=0 id=npmlogo>
+<tr><td style="width:180px;height:10px;background:rgb(237,127,127)" colspan=18>&nbsp;</td></tr>
+<tr><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td colspan=6 style="width:60px;height:10px;background:#fff">&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td></tr>
+<tr><td colspan=2 style="width:20px;height:30px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=4 colspan=2>&nbsp;</td><td style="width:10px;height:20px;background:rgb(237,127,127)" rowspan=2>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=3 colspan=2>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff" rowspan=2>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff">&nbsp;</td></tr>
+<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
+<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
+</table>
+<p id="footer">npm-config &mdash; npm@1.4.10</p>
+
diff --git a/deps/npm/html/doc/cli/npm-dedupe.html b/deps/npm/html/doc/cli/npm-dedupe.html
new file mode 100644
index 000000000..17bbbe703
--- /dev/null
+++ b/deps/npm/html/doc/cli/npm-dedupe.html
@@ -0,0 +1,67 @@
+<!doctype html>
+<html>
+ <title>npm-dedupe</title>
+ <meta http-equiv="content-type" value="text/html;utf-8">
+ <link rel="stylesheet" type="text/css" href="../../static/style.css">
+ <link rel="canonical" href="https://www.npmjs.org/doc/cli/npm-dedupe.html">
+ <script async=true src="../../static/toc.js"></script>
+
+ <body>
+ <div id="wrapper">
+
+<h1><a href="../cli/npm-dedupe.html">npm-dedupe</a></h1> <p>Reduce duplication</p>
+<h2 id="synopsis">SYNOPSIS</h2>
+<pre><code>npm dedupe [package names...]
+npm ddp [package names...]
+</code></pre><h2 id="description">DESCRIPTION</h2>
+<p>Searches the local package tree and attempts to simplify the overall
+structure by moving dependencies further up the tree, where they can
+be more effectively shared by multiple dependent packages.</p>
+<p>For example, consider this dependency graph:</p>
+<pre><code>a
++-- b &lt;-- depends on c@1.0.x
+| `-- c@1.0.3
+`-- d &lt;-- depends on c@~1.0.9
+ `-- c@1.0.10
+</code></pre><p>In this case, <code><a href="../cli/npm-dedupe.html">npm-dedupe(1)</a></code> will transform the tree to:</p>
+<pre><code>a
++-- b
++-- d
+`-- c@1.0.10
+</code></pre><p>Because of the hierarchical nature of node&#39;s module lookup, b and d
+will both get their dependency met by the single c package at the root
+level of the tree.</p>
+<p>If a suitable version exists at the target location in the tree
+already, then it will be left untouched, but the other duplicates will
+be deleted.</p>
+<p>If no suitable version can be found, then a warning is printed, and
+nothing is done.</p>
+<p>If any arguments are supplied, then they are filters, and only the
+named packages will be touched.</p>
+<p>Note that this operation transforms the dependency tree, and may
+result in packages getting updated versions, perhaps from the npm
+registry.</p>
+<p>This feature is experimental, and may change in future versions.</p>
+<p>The <code>--tag</code> argument will apply to all of the affected dependencies. If a
+tag with the given name exists, the tagged version is preferred over newer
+versions.</p>
+<h2 id="see-also">SEE ALSO</h2>
+<ul>
+<li><a href="../cli/npm-ls.html">npm-ls(1)</a></li>
+<li><a href="../cli/npm-update.html">npm-update(1)</a></li>
+<li><a href="../cli/npm-install.html">npm-install(1)</a></li>
+</ul>
+
+</div>
+
+<table border=0 cellspacing=0 cellpadding=0 id=npmlogo>
+<tr><td style="width:180px;height:10px;background:rgb(237,127,127)" colspan=18>&nbsp;</td></tr>
+<tr><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td colspan=6 style="width:60px;height:10px;background:#fff">&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td></tr>
+<tr><td colspan=2 style="width:20px;height:30px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=4 colspan=2>&nbsp;</td><td style="width:10px;height:20px;background:rgb(237,127,127)" rowspan=2>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=3 colspan=2>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff" rowspan=2>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff">&nbsp;</td></tr>
+<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
+<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
+</table>
+<p id="footer">npm-dedupe &mdash; npm@1.4.10</p>
+
diff --git a/deps/npm/html/doc/cli/npm-deprecate.html b/deps/npm/html/doc/cli/npm-deprecate.html
new file mode 100644
index 000000000..4852aa339
--- /dev/null
+++ b/deps/npm/html/doc/cli/npm-deprecate.html
@@ -0,0 +1,42 @@
+<!doctype html>
+<html>
+ <title>npm-deprecate</title>
+ <meta http-equiv="content-type" value="text/html;utf-8">
+ <link rel="stylesheet" type="text/css" href="../../static/style.css">
+ <link rel="canonical" href="https://www.npmjs.org/doc/cli/npm-deprecate.html">
+ <script async=true src="../../static/toc.js"></script>
+
+ <body>
+ <div id="wrapper">
+
+<h1><a href="../cli/npm-deprecate.html">npm-deprecate</a></h1> <p>Deprecate a version of a package</p>
+<h2 id="synopsis">SYNOPSIS</h2>
+<pre><code>npm deprecate &lt;name&gt;[@&lt;version&gt;] &lt;message&gt;
+</code></pre><h2 id="description">DESCRIPTION</h2>
+<p>This command will update the npm registry entry for a package, providing
+a deprecation warning to all who attempt to install it.</p>
+<p>It works on version ranges as well as specific versions, so you can do
+something like this:</p>
+<pre><code>npm deprecate my-thing@&quot;&lt; 0.2.3&quot; &quot;critical bug fixed in v0.2.3&quot;
+</code></pre><p>Note that you must be the package owner to deprecate something. See the
+<code>owner</code> and <code>adduser</code> help topics.</p>
+<p>To un-deprecate a package, specify an empty string (<code>&quot;&quot;</code>) for the <code>message</code> argument.</p>
+<h2 id="see-also">SEE ALSO</h2>
+<ul>
+<li><a href="../cli/npm-publish.html">npm-publish(1)</a></li>
+<li><a href="../misc/npm-registry.html">npm-registry(7)</a></li>
+</ul>
+
+</div>
+
+<table border=0 cellspacing=0 cellpadding=0 id=npmlogo>
+<tr><td style="width:180px;height:10px;background:rgb(237,127,127)" colspan=18>&nbsp;</td></tr>
+<tr><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td colspan=6 style="width:60px;height:10px;background:#fff">&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td></tr>
+<tr><td colspan=2 style="width:20px;height:30px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=4 colspan=2>&nbsp;</td><td style="width:10px;height:20px;background:rgb(237,127,127)" rowspan=2>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=3 colspan=2>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff" rowspan=2>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff">&nbsp;</td></tr>
+<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
+<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
+</table>
+<p id="footer">npm-deprecate &mdash; npm@1.4.10</p>
+
diff --git a/deps/npm/html/doc/cli/npm-docs.html b/deps/npm/html/doc/cli/npm-docs.html
new file mode 100644
index 000000000..bef7fad93
--- /dev/null
+++ b/deps/npm/html/doc/cli/npm-docs.html
@@ -0,0 +1,60 @@
+<!doctype html>
+<html>
+ <title>npm-docs</title>
+ <meta http-equiv="content-type" value="text/html;utf-8">
+ <link rel="stylesheet" type="text/css" href="../../static/style.css">
+ <link rel="canonical" href="https://www.npmjs.org/doc/cli/npm-docs.html">
+ <script async=true src="../../static/toc.js"></script>
+
+ <body>
+ <div id="wrapper">
+
+<h1><a href="../cli/npm-docs.html">npm-docs</a></h1> <p>Docs for a package in a web browser maybe</p>
+<h2 id="synopsis">SYNOPSIS</h2>
+<pre><code>npm docs [&lt;pkgname&gt; [&lt;pkgname&gt; ...]]
+npm docs (with no args in a package dir)
+npm home [&lt;pkgname&gt; [&lt;pkgname&gt; ...]]
+npm home (with no args in a package dir)
+</code></pre><h2 id="description">DESCRIPTION</h2>
+<p>This command tries to guess at the likely location of a package&#39;s
+documentation URL, and then tries to open it using the <code>--browser</code>
+config param. You can pass multiple package names at once. If no
+package name is provided, it will search for a <code>package.json</code> in
+the current folder and use the <code>name</code> property.</p>
+<h2 id="configuration">CONFIGURATION</h2>
+<h3 id="browser">browser</h3>
+<ul>
+<li>Default: OS X: <code>&quot;open&quot;</code>, Windows: <code>&quot;start&quot;</code>, Others: <code>&quot;xdg-open&quot;</code></li>
+<li>Type: String</li>
+</ul>
+<p>The browser that is called by the <code>npm docs</code> command to open websites.</p>
+<h3 id="registry">registry</h3>
+<ul>
+<li>Default: <a href="https://registry.npmjs.org/">https://registry.npmjs.org/</a></li>
+<li>Type: url</li>
+</ul>
+<p>The base URL of the npm package registry.</p>
+<h2 id="see-also">SEE ALSO</h2>
+<ul>
+<li><a href="../cli/npm-view.html">npm-view(1)</a></li>
+<li><a href="../cli/npm-publish.html">npm-publish(1)</a></li>
+<li><a href="../misc/npm-registry.html">npm-registry(7)</a></li>
+<li><a href="../cli/npm-config.html">npm-config(1)</a></li>
+<li><a href="../misc/npm-config.html">npm-config(7)</a></li>
+<li><a href="../files/npmrc.html">npmrc(5)</a></li>
+<li><a href="../files/package.json.html">package.json(5)</a></li>
+</ul>
+
+</div>
+
+<table border=0 cellspacing=0 cellpadding=0 id=npmlogo>
+<tr><td style="width:180px;height:10px;background:rgb(237,127,127)" colspan=18>&nbsp;</td></tr>
+<tr><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td colspan=6 style="width:60px;height:10px;background:#fff">&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td></tr>
+<tr><td colspan=2 style="width:20px;height:30px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=4 colspan=2>&nbsp;</td><td style="width:10px;height:20px;background:rgb(237,127,127)" rowspan=2>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=3 colspan=2>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff" rowspan=2>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff">&nbsp;</td></tr>
+<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
+<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
+</table>
+<p id="footer">npm-docs &mdash; npm@1.4.10</p>
+
diff --git a/deps/npm/html/doc/cli/npm-edit.html b/deps/npm/html/doc/cli/npm-edit.html
new file mode 100644
index 000000000..ad2b9b2c5
--- /dev/null
+++ b/deps/npm/html/doc/cli/npm-edit.html
@@ -0,0 +1,53 @@
+<!doctype html>
+<html>
+ <title>npm-edit</title>
+ <meta http-equiv="content-type" value="text/html;utf-8">
+ <link rel="stylesheet" type="text/css" href="../../static/style.css">
+ <link rel="canonical" href="https://www.npmjs.org/doc/cli/npm-edit.html">
+ <script async=true src="../../static/toc.js"></script>
+
+ <body>
+ <div id="wrapper">
+
+<h1><a href="../cli/npm-edit.html">npm-edit</a></h1> <p>Edit an installed package</p>
+<h2 id="synopsis">SYNOPSIS</h2>
+<pre><code>npm edit &lt;name&gt;[@&lt;version&gt;]
+</code></pre><h2 id="description">DESCRIPTION</h2>
+<p>Opens the package folder in the default editor (or whatever you&#39;ve
+configured as the npm <code>editor</code> config -- see <code><a href="../misc/npm-config.html">npm-config(7)</a></code>.)</p>
+<p>After it has been edited, the package is rebuilt so as to pick up any
+changes in compiled packages.</p>
+<p>For instance, you can do <code>npm install connect</code> to install connect
+into your package, and then <code>npm edit connect</code> to make a few
+changes to your locally installed copy.</p>
+<h2 id="configuration">CONFIGURATION</h2>
+<h3 id="editor">editor</h3>
+<ul>
+<li>Default: <code>EDITOR</code> environment variable if set, or <code>&quot;vi&quot;</code> on Posix,
+or <code>&quot;notepad&quot;</code> on Windows.</li>
+<li>Type: path</li>
+</ul>
+<p>The command to run for <code>npm edit</code> or <code>npm config edit</code>.</p>
+<h2 id="see-also">SEE ALSO</h2>
+<ul>
+<li><a href="../files/npm-folders.html">npm-folders(5)</a></li>
+<li><a href="../cli/npm-explore.html">npm-explore(1)</a></li>
+<li><a href="../cli/npm-install.html">npm-install(1)</a></li>
+<li><a href="../cli/npm-config.html">npm-config(1)</a></li>
+<li><a href="../misc/npm-config.html">npm-config(7)</a></li>
+<li><a href="../files/npmrc.html">npmrc(5)</a></li>
+</ul>
+
+</div>
+
+<table border=0 cellspacing=0 cellpadding=0 id=npmlogo>
+<tr><td style="width:180px;height:10px;background:rgb(237,127,127)" colspan=18>&nbsp;</td></tr>
+<tr><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td colspan=6 style="width:60px;height:10px;background:#fff">&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td></tr>
+<tr><td colspan=2 style="width:20px;height:30px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=4 colspan=2>&nbsp;</td><td style="width:10px;height:20px;background:rgb(237,127,127)" rowspan=2>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=3 colspan=2>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff" rowspan=2>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff">&nbsp;</td></tr>
+<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
+<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
+</table>
+<p id="footer">npm-edit &mdash; npm@1.4.10</p>
+
diff --git a/deps/npm/html/doc/cli/npm-explore.html b/deps/npm/html/doc/cli/npm-explore.html
new file mode 100644
index 000000000..13a906d26
--- /dev/null
+++ b/deps/npm/html/doc/cli/npm-explore.html
@@ -0,0 +1,54 @@
+<!doctype html>
+<html>
+ <title>npm-explore</title>
+ <meta http-equiv="content-type" value="text/html;utf-8">
+ <link rel="stylesheet" type="text/css" href="../../static/style.css">
+ <link rel="canonical" href="https://www.npmjs.org/doc/cli/npm-explore.html">
+ <script async=true src="../../static/toc.js"></script>
+
+ <body>
+ <div id="wrapper">
+
+<h1><a href="../cli/npm-explore.html">npm-explore</a></h1> <p>Browse an installed package</p>
+<h2 id="synopsis">SYNOPSIS</h2>
+<pre><code>npm explore &lt;name&gt;[@&lt;version&gt;] [ -- &lt;cmd&gt;]
+</code></pre><h2 id="description">DESCRIPTION</h2>
+<p>Spawn a subshell in the directory of the installed package specified.</p>
+<p>If a command is specified, then it is run in the subshell, which then
+immediately terminates.</p>
+<p>This is particularly handy in the case of git submodules in the
+<code>node_modules</code> folder:</p>
+<pre><code>npm explore some-dependency -- git pull origin master
+</code></pre><p>Note that the package is <em>not</em> automatically rebuilt afterwards, so be
+sure to use <code>npm rebuild &lt;pkg&gt;</code> if you make any changes.</p>
+<h2 id="configuration">CONFIGURATION</h2>
+<h3 id="shell">shell</h3>
+<ul>
+<li>Default: SHELL environment variable, or &quot;bash&quot; on Posix, or &quot;cmd&quot; on
+Windows</li>
+<li>Type: path</li>
+</ul>
+<p>The shell to run for the <code>npm explore</code> command.</p>
+<h2 id="see-also">SEE ALSO</h2>
+<ul>
+<li><a href="../cli/npm-submodule.html">npm-submodule(1)</a></li>
+<li><a href="../files/npm-folders.html">npm-folders(5)</a></li>
+<li><a href="../cli/npm-edit.html">npm-edit(1)</a></li>
+<li><a href="../cli/npm-rebuild.html">npm-rebuild(1)</a></li>
+<li><a href="../cli/npm-build.html">npm-build(1)</a></li>
+<li><a href="../cli/npm-install.html">npm-install(1)</a></li>
+</ul>
+
+</div>
+
+<table border=0 cellspacing=0 cellpadding=0 id=npmlogo>
+<tr><td style="width:180px;height:10px;background:rgb(237,127,127)" colspan=18>&nbsp;</td></tr>
+<tr><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td colspan=6 style="width:60px;height:10px;background:#fff">&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td></tr>
+<tr><td colspan=2 style="width:20px;height:30px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=4 colspan=2>&nbsp;</td><td style="width:10px;height:20px;background:rgb(237,127,127)" rowspan=2>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=3 colspan=2>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff" rowspan=2>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff">&nbsp;</td></tr>
+<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
+<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
+</table>
+<p id="footer">npm-explore &mdash; npm@1.4.10</p>
+
diff --git a/deps/npm/html/doc/cli/npm-help-search.html b/deps/npm/html/doc/cli/npm-help-search.html
new file mode 100644
index 000000000..74c0efae5
--- /dev/null
+++ b/deps/npm/html/doc/cli/npm-help-search.html
@@ -0,0 +1,50 @@
+<!doctype html>
+<html>
+ <title>npm-help-search</title>
+ <meta http-equiv="content-type" value="text/html;utf-8">
+ <link rel="stylesheet" type="text/css" href="../../static/style.css">
+ <link rel="canonical" href="https://www.npmjs.org/doc/cli/npm-help-search.html">
+ <script async=true src="../../static/toc.js"></script>
+
+ <body>
+ <div id="wrapper">
+
+<h1><a href="../cli/npm-help-search.html">npm-help-search</a></h1> <p>Search npm help documentation</p>
+<h2 id="synopsis">SYNOPSIS</h2>
+<pre><code>npm help-search some search terms
+</code></pre><h2 id="description">DESCRIPTION</h2>
+<p>This command will search the npm markdown documentation files for the
+terms provided, and then list the results, sorted by relevance.</p>
+<p>If only one result is found, then it will show that help topic.</p>
+<p>If the argument to <code>npm help</code> is not a known help topic, then it will
+call <code>help-search</code>. It is rarely if ever necessary to call this
+command directly.</p>
+<h2 id="configuration">CONFIGURATION</h2>
+<h3 id="long">long</h3>
+<ul>
+<li>Type: Boolean</li>
+<li>Default false</li>
+</ul>
+<p>If true, the &quot;long&quot; flag will cause help-search to output context around
+where the terms were found in the documentation.</p>
+<p>If false, then help-search will just list out the help topics found.</p>
+<h2 id="see-also">SEE ALSO</h2>
+<ul>
+<li><a href="../cli/npm.html">npm(1)</a></li>
+<li><a href="../misc/npm-faq.html">npm-faq(7)</a></li>
+<li><a href="../cli/npm-help.html">npm-help(1)</a></li>
+</ul>
+
+</div>
+
+<table border=0 cellspacing=0 cellpadding=0 id=npmlogo>
+<tr><td style="width:180px;height:10px;background:rgb(237,127,127)" colspan=18>&nbsp;</td></tr>
+<tr><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td colspan=6 style="width:60px;height:10px;background:#fff">&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td></tr>
+<tr><td colspan=2 style="width:20px;height:30px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=4 colspan=2>&nbsp;</td><td style="width:10px;height:20px;background:rgb(237,127,127)" rowspan=2>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=3 colspan=2>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff" rowspan=2>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff">&nbsp;</td></tr>
+<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
+<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
+</table>
+<p id="footer">npm-help-search &mdash; npm@1.4.10</p>
+
diff --git a/deps/npm/html/doc/cli/npm-help.html b/deps/npm/html/doc/cli/npm-help.html
new file mode 100644
index 000000000..da1bbd929
--- /dev/null
+++ b/deps/npm/html/doc/cli/npm-help.html
@@ -0,0 +1,56 @@
+<!doctype html>
+<html>
+ <title>npm-help</title>
+ <meta http-equiv="content-type" value="text/html;utf-8">
+ <link rel="stylesheet" type="text/css" href="../../static/style.css">
+ <link rel="canonical" href="https://www.npmjs.org/doc/cli/npm-help.html">
+ <script async=true src="../../static/toc.js"></script>
+
+ <body>
+ <div id="wrapper">
+
+<h1><a href="../cli/npm-help.html">npm-help</a></h1> <p>Get help on npm</p>
+<h2 id="synopsis">SYNOPSIS</h2>
+<pre><code>npm help &lt;topic&gt;
+npm help some search terms
+</code></pre><h2 id="description">DESCRIPTION</h2>
+<p>If supplied a topic, then show the appropriate documentation page.</p>
+<p>If the topic does not exist, or if multiple terms are provided, then run
+the <code>help-search</code> command to find a match. Note that, if <code>help-search</code>
+finds a single subject, then it will run <code>help</code> on that topic, so unique
+matches are equivalent to specifying a topic name.</p>
+<h2 id="configuration">CONFIGURATION</h2>
+<h3 id="viewer">viewer</h3>
+<ul>
+<li>Default: &quot;man&quot; on Posix, &quot;browser&quot; on Windows</li>
+<li>Type: path</li>
+</ul>
+<p>The program to use to view help content.</p>
+<p>Set to <code>&quot;browser&quot;</code> to view html help content in the default web browser.</p>
+<h2 id="see-also">SEE ALSO</h2>
+<ul>
+<li><a href="../cli/npm.html">npm(1)</a></li>
+<li><a href="../../doc/README.html">README</a></li>
+<li><a href="../misc/npm-faq.html">npm-faq(7)</a></li>
+<li><a href="../files/npm-folders.html">npm-folders(5)</a></li>
+<li><a href="../cli/npm-config.html">npm-config(1)</a></li>
+<li><a href="../misc/npm-config.html">npm-config(7)</a></li>
+<li><a href="../files/npmrc.html">npmrc(5)</a></li>
+<li><a href="../files/package.json.html">package.json(5)</a></li>
+<li><a href="../cli/npm-help-search.html">npm-help-search(1)</a></li>
+<li><a href="../misc/npm-index.html">npm-index(7)</a></li>
+</ul>
+
+</div>
+
+<table border=0 cellspacing=0 cellpadding=0 id=npmlogo>
+<tr><td style="width:180px;height:10px;background:rgb(237,127,127)" colspan=18>&nbsp;</td></tr>
+<tr><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td colspan=6 style="width:60px;height:10px;background:#fff">&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td></tr>
+<tr><td colspan=2 style="width:20px;height:30px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=4 colspan=2>&nbsp;</td><td style="width:10px;height:20px;background:rgb(237,127,127)" rowspan=2>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=3 colspan=2>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff" rowspan=2>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff">&nbsp;</td></tr>
+<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
+<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
+</table>
+<p id="footer">npm-help &mdash; npm@1.4.10</p>
+
diff --git a/deps/npm/html/doc/cli/npm-init.html b/deps/npm/html/doc/cli/npm-init.html
new file mode 100644
index 000000000..443503060
--- /dev/null
+++ b/deps/npm/html/doc/cli/npm-init.html
@@ -0,0 +1,42 @@
+<!doctype html>
+<html>
+ <title>npm-init</title>
+ <meta http-equiv="content-type" value="text/html;utf-8">
+ <link rel="stylesheet" type="text/css" href="../../static/style.css">
+ <link rel="canonical" href="https://www.npmjs.org/doc/cli/npm-init.html">
+ <script async=true src="../../static/toc.js"></script>
+
+ <body>
+ <div id="wrapper">
+
+<h1><a href="../cli/npm-init.html">npm-init</a></h1> <p>Interactively create a package.json file</p>
+<h2 id="synopsis">SYNOPSIS</h2>
+<pre><code>npm init
+</code></pre><h2 id="description">DESCRIPTION</h2>
+<p>This will ask you a bunch of questions, and then write a package.json for you.</p>
+<p>It attempts to make reasonable guesses about what you want things to be set to,
+and then writes a package.json file with the options you&#39;ve selected.</p>
+<p>If you already have a package.json file, it&#39;ll read that first, and default to
+the options in there.</p>
+<p>It is strictly additive, so it does not delete options from your package.json
+without a really good reason to do so.</p>
+<h2 id="see-also">SEE ALSO</h2>
+<ul>
+<li><a href="https://github.com/isaacs/init-package-json">https://github.com/isaacs/init-package-json</a></li>
+<li><a href="../files/package.json.html">package.json(5)</a></li>
+<li><a href="../cli/npm-version.html">npm-version(1)</a></li>
+</ul>
+
+</div>
+
+<table border=0 cellspacing=0 cellpadding=0 id=npmlogo>
+<tr><td style="width:180px;height:10px;background:rgb(237,127,127)" colspan=18>&nbsp;</td></tr>
+<tr><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td colspan=6 style="width:60px;height:10px;background:#fff">&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td></tr>
+<tr><td colspan=2 style="width:20px;height:30px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=4 colspan=2>&nbsp;</td><td style="width:10px;height:20px;background:rgb(237,127,127)" rowspan=2>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=3 colspan=2>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff" rowspan=2>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff">&nbsp;</td></tr>
+<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
+<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
+</table>
+<p id="footer">npm-init &mdash; npm@1.4.10</p>
+
diff --git a/deps/npm/html/doc/cli/npm-install.html b/deps/npm/html/doc/cli/npm-install.html
new file mode 100644
index 000000000..af7251cd7
--- /dev/null
+++ b/deps/npm/html/doc/cli/npm-install.html
@@ -0,0 +1,224 @@
+<!doctype html>
+<html>
+ <title>npm-install</title>
+ <meta http-equiv="content-type" value="text/html;utf-8">
+ <link rel="stylesheet" type="text/css" href="../../static/style.css">
+ <link rel="canonical" href="https://www.npmjs.org/doc/cli/npm-install.html">
+ <script async=true src="../../static/toc.js"></script>
+
+ <body>
+ <div id="wrapper">
+
+<h1><a href="../cli/npm-install.html">npm-install</a></h1> <p>Install a package</p>
+<h2 id="synopsis">SYNOPSIS</h2>
+<pre><code>npm install (with no args in a package dir)
+npm install &lt;tarball file&gt;
+npm install &lt;tarball url&gt;
+npm install &lt;folder&gt;
+npm install &lt;name&gt; [--save|--save-dev|--save-optional] [--save-exact]
+npm install &lt;name&gt;@&lt;tag&gt;
+npm install &lt;name&gt;@&lt;version&gt;
+npm install &lt;name&gt;@&lt;version range&gt;
+npm i (with any of the previous argument usage)
+</code></pre><h2 id="description">DESCRIPTION</h2>
+<p>This command installs a package, and any packages that it depends on. If the
+package has a shrinkwrap file, the installation of dependencies will be driven
+by that. See <a href="../cli/npm-shrinkwrap.html">npm-shrinkwrap(1)</a>.</p>
+<p>A <code>package</code> is:</p>
+<ul>
+<li>a) a folder containing a program described by a package.json file</li>
+<li>b) a gzipped tarball containing (a)</li>
+<li>c) a url that resolves to (b)</li>
+<li>d) a <code>&lt;name&gt;@&lt;version&gt;</code> that is published on the registry (see <code><a href="../misc/npm-registry.html">npm-registry(7)</a></code>) with (c)</li>
+<li>e) a <code>&lt;name&gt;@&lt;tag&gt;</code> that points to (d)</li>
+<li>f) a <code>&lt;name&gt;</code> that has a &quot;latest&quot; tag satisfying (e)</li>
+<li>g) a <code>&lt;git remote url&gt;</code> that resolves to (b)</li>
+</ul>
+<p>Even if you never publish your package, you can still get a lot of
+benefits of using npm if you just want to write a node program (a), and
+perhaps if you also want to be able to easily install it elsewhere
+after packing it up into a tarball (b).</p>
+<ul>
+<li><p><code>npm install</code> (in package directory, no arguments):</p>
+<p> Install the dependencies in the local node_modules folder.</p>
+<p> In global mode (ie, with <code>-g</code> or <code>--global</code> appended to the command),
+ it installs the current package context (ie, the current working
+ directory) as a global package.</p>
+<p> By default, <code>npm install</code> will install all modules listed as
+ dependencies. With the <code>--production</code> flag,
+ npm will not install modules listed in <code>devDependencies</code>.</p>
+</li>
+<li><p><code>npm install &lt;folder&gt;</code>:</p>
+<p> Install a package that is sitting in a folder on the filesystem.</p>
+</li>
+<li><p><code>npm install &lt;tarball file&gt;</code>:</p>
+<p> Install a package that is sitting on the filesystem. Note: if you just want
+ to link a dev directory into your npm root, you can do this more easily by
+ using <code>npm link</code>.</p>
+<p> Example:</p>
+<pre><code> npm install ./package.tgz
+</code></pre></li>
+<li><p><code>npm install &lt;tarball url&gt;</code>:</p>
+<p> Fetch the tarball url, and then install it. In order to distinguish between
+ this and other options, the argument must start with &quot;http://&quot; or &quot;https://&quot;</p>
+<p> Example:</p>
+<pre><code> npm install https://github.com/indexzero/forever/tarball/v0.5.6
+</code></pre></li>
+<li><p><code>npm install &lt;name&gt; [--save|--save-dev|--save-optional]</code>:</p>
+<p> Do a <code>&lt;name&gt;@&lt;tag&gt;</code> install, where <code>&lt;tag&gt;</code> is the &quot;tag&quot; config. (See
+ <code><a href="../misc/npm-config.html">npm-config(7)</a></code>.)</p>
+<p> In most cases, this will install the latest version
+ of the module published on npm.</p>
+<p> Example:</p>
+<pre><code> npm install sax
+</code></pre><p> <code>npm install</code> takes 3 exclusive, optional flags which save or update
+ the package version in your main package.json:</p>
+<ul>
+<li><p><code>--save</code>: Package will appear in your <code>dependencies</code>.</p>
+</li>
+<li><p><code>--save-dev</code>: Package will appear in your <code>devDependencies</code>.</p>
+</li>
+<li><p><code>--save-optional</code>: Package will appear in your <code>optionalDependencies</code>.</p>
+<p>When using any of the above options to save dependencies to your
+package.json, there is an additional, optional flag:</p>
+</li>
+<li><p><code>--save-exact</code>: Saved dependencies will be configured with an
+exact version rather than using npm&#39;s default semver range
+operator.</p>
+<p>Examples:</p>
+<pre><code>npm install sax --save
+npm install node-tap --save-dev
+npm install dtrace-provider --save-optional
+npm install readable-stream --save --save-exact
+</code></pre></li>
+</ul>
+</li>
+</ul>
+<pre><code>**Note**: If there is a file or folder named `&lt;name&gt;` in the current
+working directory, then it will try to install that, and only try to
+fetch the package by name if it is not valid.
+</code></pre><ul>
+<li><p><code>npm install &lt;name&gt;@&lt;tag&gt;</code>:</p>
+<p> Install the version of the package that is referenced by the specified tag.
+ If the tag does not exist in the registry data for that package, then this
+ will fail.</p>
+<p> Example:</p>
+<pre><code> npm install sax@latest
+</code></pre></li>
+<li><p><code>npm install &lt;name&gt;@&lt;version&gt;</code>:</p>
+<p> Install the specified version of the package. This will fail if the version
+ has not been published to the registry.</p>
+<p> Example:</p>
+<pre><code> npm install sax@0.1.1
+</code></pre></li>
+<li><p><code>npm install &lt;name&gt;@&lt;version range&gt;</code>:</p>
+<p> Install a version of the package matching the specified version range. This
+ will follow the same rules for resolving dependencies described in <code><a href="../files/package.json.html">package.json(5)</a></code>.</p>
+<p> Note that most version ranges must be put in quotes so that your shell will
+ treat it as a single argument.</p>
+<p> Example:</p>
+<pre><code> npm install sax@&quot;&gt;=0.1.0 &lt;0.2.0&quot;
+</code></pre></li>
+<li><p><code>npm install &lt;git remote url&gt;</code>:</p>
+<p> Install a package by cloning a git remote url. The format of the git
+ url is:</p>
+<pre><code> &lt;protocol&gt;://[&lt;user&gt;@]&lt;hostname&gt;&lt;separator&gt;&lt;path&gt;[#&lt;commit-ish&gt;]
+</code></pre><p> <code>&lt;protocol&gt;</code> is one of <code>git</code>, <code>git+ssh</code>, <code>git+http</code>, or
+ <code>git+https</code>. If no <code>&lt;commit-ish&gt;</code> is specified, then <code>master</code> is
+ used.</p>
+<p> Examples:</p>
+<pre><code> git+ssh://git@github.com:npm/npm.git#v1.0.27
+ git+https://isaacs@github.com/npm/npm.git
+ git://github.com/npm/npm.git#v1.0.27
+</code></pre></li>
+</ul>
+<p>You may combine multiple arguments, and even multiple types of arguments.
+For example:</p>
+<pre><code>npm install sax@&quot;&gt;=0.1.0 &lt;0.2.0&quot; bench supervisor
+</code></pre><p>The <code>--tag</code> argument will apply to all of the specified install targets. If a
+tag with the given name exists, the tagged version is preferred over newer
+versions.</p>
+<p>The <code>--force</code> argument will force npm to fetch remote resources even if a
+local copy exists on disk.</p>
+<pre><code>npm install sax --force
+</code></pre><p>The <code>--global</code> argument will cause npm to install the package globally
+rather than locally. See <code><a href="../files/npm-folders.html">npm-folders(5)</a></code>.</p>
+<p>The <code>--link</code> argument will cause npm to link global installs into the
+local space in some cases.</p>
+<p>The <code>--no-bin-links</code> argument will prevent npm from creating symlinks for
+any binaries the package might contain.</p>
+<p>The <code>--no-optional</code> argument will prevent optional dependencies from
+being installed.</p>
+<p>The <code>--no-shrinkwrap</code> argument, which will ignore an available
+shrinkwrap file and use the package.json instead.</p>
+<p>The <code>--nodedir=/path/to/node/source</code> argument will allow npm to find the
+node source code so that npm can compile native modules.</p>
+<p>See <code><a href="../misc/npm-config.html">npm-config(7)</a></code>. Many of the configuration params have some
+effect on installation, since that&#39;s most of what npm does.</p>
+<h2 id="algorithm">ALGORITHM</h2>
+<p>To install a package, npm uses the following algorithm:</p>
+<pre><code>install(where, what, family, ancestors)
+fetch what, unpack to &lt;where&gt;/node_modules/&lt;what&gt;
+for each dep in what.dependencies
+ resolve dep to precise version
+for each dep@version in what.dependencies
+ not in &lt;where&gt;/node_modules/&lt;what&gt;/node_modules/*
+ and not in &lt;family&gt;
+ add precise version deps to &lt;family&gt;
+ install(&lt;where&gt;/node_modules/&lt;what&gt;, dep, family)
+</code></pre><p>For this <code>package{dep}</code> structure: <code>A{B,C}, B{C}, C{D}</code>,
+this algorithm produces:</p>
+<pre><code>A
++-- B
+`-- C
+ `-- D
+</code></pre><p>That is, the dependency from B to C is satisfied by the fact that A
+already caused C to be installed at a higher level.</p>
+<p>See <a href="../files/npm-folders.html">npm-folders(5)</a> for a more detailed description of the specific
+folder structures that npm creates.</p>
+<h3 id="limitations-of-npm-s-install-algorithm">Limitations of npm&#39;s Install Algorithm</h3>
+<p>There are some very rare and pathological edge-cases where a cycle can
+cause npm to try to install a never-ending tree of packages. Here is
+the simplest case:</p>
+<pre><code>A -&gt; B -&gt; A&#39; -&gt; B&#39; -&gt; A -&gt; B -&gt; A&#39; -&gt; B&#39; -&gt; A -&gt; ...
+</code></pre><p>where <code>A</code> is some version of a package, and <code>A&#39;</code> is a different version
+of the same package. Because <code>B</code> depends on a different version of <code>A</code>
+than the one that is already in the tree, it must install a separate
+copy. The same is true of <code>A&#39;</code>, which must install <code>B&#39;</code>. Because <code>B&#39;</code>
+depends on the original version of <code>A</code>, which has been overridden, the
+cycle falls into infinite regress.</p>
+<p>To avoid this situation, npm flat-out refuses to install any
+<code>name@version</code> that is already present anywhere in the tree of package
+folder ancestors. A more correct, but more complex, solution would be
+to symlink the existing version into the new location. If this ever
+affects a real use-case, it will be investigated.</p>
+<h2 id="see-also">SEE ALSO</h2>
+<ul>
+<li><a href="../files/npm-folders.html">npm-folders(5)</a></li>
+<li><a href="../cli/npm-update.html">npm-update(1)</a></li>
+<li><a href="../cli/npm-link.html">npm-link(1)</a></li>
+<li><a href="../cli/npm-rebuild.html">npm-rebuild(1)</a></li>
+<li><a href="../misc/npm-scripts.html">npm-scripts(7)</a></li>
+<li><a href="../cli/npm-build.html">npm-build(1)</a></li>
+<li><a href="../cli/npm-config.html">npm-config(1)</a></li>
+<li><a href="../misc/npm-config.html">npm-config(7)</a></li>
+<li><a href="../files/npmrc.html">npmrc(5)</a></li>
+<li><a href="../misc/npm-registry.html">npm-registry(7)</a></li>
+<li><a href="../cli/npm-tag.html">npm-tag(1)</a></li>
+<li><a href="../cli/npm-rm.html">npm-rm(1)</a></li>
+<li><a href="../cli/npm-shrinkwrap.html">npm-shrinkwrap(1)</a></li>
+</ul>
+
+</div>
+
+<table border=0 cellspacing=0 cellpadding=0 id=npmlogo>
+<tr><td style="width:180px;height:10px;background:rgb(237,127,127)" colspan=18>&nbsp;</td></tr>
+<tr><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td colspan=6 style="width:60px;height:10px;background:#fff">&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td></tr>
+<tr><td colspan=2 style="width:20px;height:30px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=4 colspan=2>&nbsp;</td><td style="width:10px;height:20px;background:rgb(237,127,127)" rowspan=2>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=3 colspan=2>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff" rowspan=2>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff">&nbsp;</td></tr>
+<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
+<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
+</table>
+<p id="footer">npm-install &mdash; npm@1.4.10</p>
+
diff --git a/deps/npm/html/doc/cli/npm-link.html b/deps/npm/html/doc/cli/npm-link.html
new file mode 100644
index 000000000..ab9d36e59
--- /dev/null
+++ b/deps/npm/html/doc/cli/npm-link.html
@@ -0,0 +1,70 @@
+<!doctype html>
+<html>
+ <title>npm-link</title>
+ <meta http-equiv="content-type" value="text/html;utf-8">
+ <link rel="stylesheet" type="text/css" href="../../static/style.css">
+ <link rel="canonical" href="https://www.npmjs.org/doc/cli/npm-link.html">
+ <script async=true src="../../static/toc.js"></script>
+
+ <body>
+ <div id="wrapper">
+
+<h1><a href="../cli/npm-link.html">npm-link</a></h1> <p>Symlink a package folder</p>
+<h2 id="synopsis">SYNOPSIS</h2>
+<pre><code>npm link (in package folder)
+npm link &lt;pkgname&gt;
+npm ln (with any of the previous argument usage)
+</code></pre><h2 id="description">DESCRIPTION</h2>
+<p>Package linking is a two-step process.</p>
+<p>First, <code>npm link</code> in a package folder will create a globally-installed
+symbolic link from <code>prefix/package-name</code> to the current folder.</p>
+<p>Next, in some other location, <code>npm link package-name</code> will create a
+symlink from the local <code>node_modules</code> folder to the global symlink.</p>
+<p>Note that <code>package-name</code> is taken from <code>package.json</code>,
+not from directory name.</p>
+<p>When creating tarballs for <code>npm publish</code>, the linked packages are
+&quot;snapshotted&quot; to their current state by resolving the symbolic links.</p>
+<p>This is
+handy for installing your own stuff, so that you can work on it and test it
+iteratively without having to continually rebuild.</p>
+<p>For example:</p>
+<pre><code>cd ~/projects/node-redis # go into the package directory
+npm link # creates global link
+cd ~/projects/node-bloggy # go into some other package directory.
+npm link redis # link-install the package
+</code></pre><p>Now, any changes to ~/projects/node-redis will be reflected in
+~/projects/node-bloggy/node_modules/redis/</p>
+<p>You may also shortcut the two steps in one. For example, to do the
+above use-case in a shorter way:</p>
+<pre><code>cd ~/projects/node-bloggy # go into the dir of your main project
+npm link ../node-redis # link the dir of your dependency
+</code></pre><p>The second line is the equivalent of doing:</p>
+<pre><code>(cd ../node-redis; npm link)
+npm link redis
+</code></pre><p>That is, it first creates a global link, and then links the global
+installation target into your project&#39;s <code>node_modules</code> folder.</p>
+<h2 id="see-also">SEE ALSO</h2>
+<ul>
+<li><a href="../misc/npm-developers.html">npm-developers(7)</a></li>
+<li><a href="../misc/npm-faq.html">npm-faq(7)</a></li>
+<li><a href="../files/package.json.html">package.json(5)</a></li>
+<li><a href="../cli/npm-install.html">npm-install(1)</a></li>
+<li><a href="../files/npm-folders.html">npm-folders(5)</a></li>
+<li><a href="../cli/npm-config.html">npm-config(1)</a></li>
+<li><a href="../misc/npm-config.html">npm-config(7)</a></li>
+<li><a href="../files/npmrc.html">npmrc(5)</a></li>
+</ul>
+
+</div>
+
+<table border=0 cellspacing=0 cellpadding=0 id=npmlogo>
+<tr><td style="width:180px;height:10px;background:rgb(237,127,127)" colspan=18>&nbsp;</td></tr>
+<tr><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td colspan=6 style="width:60px;height:10px;background:#fff">&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td></tr>
+<tr><td colspan=2 style="width:20px;height:30px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=4 colspan=2>&nbsp;</td><td style="width:10px;height:20px;background:rgb(237,127,127)" rowspan=2>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=3 colspan=2>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff" rowspan=2>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff">&nbsp;</td></tr>
+<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
+<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
+</table>
+<p id="footer">npm-link &mdash; npm@1.4.10</p>
+
diff --git a/deps/npm/html/doc/cli/npm-ls.html b/deps/npm/html/doc/cli/npm-ls.html
new file mode 100644
index 000000000..1d7ecfa1b
--- /dev/null
+++ b/deps/npm/html/doc/cli/npm-ls.html
@@ -0,0 +1,89 @@
+<!doctype html>
+<html>
+ <title>npm-ls</title>
+ <meta http-equiv="content-type" value="text/html;utf-8">
+ <link rel="stylesheet" type="text/css" href="../../static/style.css">
+ <link rel="canonical" href="https://www.npmjs.org/doc/cli/npm-ls.html">
+ <script async=true src="../../static/toc.js"></script>
+
+ <body>
+ <div id="wrapper">
+
+<h1><a href="../cli/npm-ls.html">npm-ls</a></h1> <p>List installed packages</p>
+<h2 id="synopsis">SYNOPSIS</h2>
+<pre><code>npm list [&lt;pkg&gt; ...]
+npm ls [&lt;pkg&gt; ...]
+npm la [&lt;pkg&gt; ...]
+npm ll [&lt;pkg&gt; ...]
+</code></pre><h2 id="description">DESCRIPTION</h2>
+<p>This command will print to stdout all the versions of packages that are
+installed, as well as their dependencies, in a tree-structure.</p>
+<p>Positional arguments are <code>name@version-range</code> identifiers, which will
+limit the results to only the paths to the packages named. Note that
+nested packages will <em>also</em> show the paths to the specified packages.
+For example, running <code>npm ls promzard</code> in npm&#39;s source tree will show:</p>
+<pre><code>npm@1.4.10 /path/to/npm
+└─┬ init-package-json@0.0.4
+ └── promzard@0.1.5
+</code></pre><p>It will print out extraneous, missing, and invalid packages.</p>
+<p>If a project specifies git urls for dependencies these are shown
+in parentheses after the name@version to make it easier for users to
+recognize potential forks of a project.</p>
+<p>When run as <code>ll</code> or <code>la</code>, it shows extended information by default.</p>
+<h2 id="configuration">CONFIGURATION</h2>
+<h3 id="json">json</h3>
+<ul>
+<li>Default: false</li>
+<li>Type: Boolean</li>
+</ul>
+<p>Show information in JSON format.</p>
+<h3 id="long">long</h3>
+<ul>
+<li>Default: false</li>
+<li>Type: Boolean</li>
+</ul>
+<p>Show extended information.</p>
+<h3 id="parseable">parseable</h3>
+<ul>
+<li>Default: false</li>
+<li>Type: Boolean</li>
+</ul>
+<p>Show parseable output instead of tree view.</p>
+<h3 id="global">global</h3>
+<ul>
+<li>Default: false</li>
+<li>Type: Boolean</li>
+</ul>
+<p>List packages in the global install prefix instead of in the current
+project.</p>
+<h3 id="depth">depth</h3>
+<ul>
+<li>Type: Int</li>
+</ul>
+<p>Max display depth of the dependency tree.</p>
+<h2 id="see-also">SEE ALSO</h2>
+<ul>
+<li><a href="../cli/npm-config.html">npm-config(1)</a></li>
+<li><a href="../misc/npm-config.html">npm-config(7)</a></li>
+<li><a href="../files/npmrc.html">npmrc(5)</a></li>
+<li><a href="../files/npm-folders.html">npm-folders(5)</a></li>
+<li><a href="../cli/npm-install.html">npm-install(1)</a></li>
+<li><a href="../cli/npm-link.html">npm-link(1)</a></li>
+<li><a href="../cli/npm-prune.html">npm-prune(1)</a></li>
+<li><a href="../cli/npm-outdated.html">npm-outdated(1)</a></li>
+<li><a href="../cli/npm-update.html">npm-update(1)</a></li>
+</ul>
+
+</div>
+
+<table border=0 cellspacing=0 cellpadding=0 id=npmlogo>
+<tr><td style="width:180px;height:10px;background:rgb(237,127,127)" colspan=18>&nbsp;</td></tr>
+<tr><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td colspan=6 style="width:60px;height:10px;background:#fff">&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td></tr>
+<tr><td colspan=2 style="width:20px;height:30px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=4 colspan=2>&nbsp;</td><td style="width:10px;height:20px;background:rgb(237,127,127)" rowspan=2>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=3 colspan=2>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff" rowspan=2>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff">&nbsp;</td></tr>
+<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
+<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
+</table>
+<p id="footer">npm-ls &mdash; npm@1.4.10</p>
+
diff --git a/deps/npm/html/doc/cli/npm-outdated.html b/deps/npm/html/doc/cli/npm-outdated.html
new file mode 100644
index 000000000..94224cc90
--- /dev/null
+++ b/deps/npm/html/doc/cli/npm-outdated.html
@@ -0,0 +1,71 @@
+<!doctype html>
+<html>
+ <title>npm-outdated</title>
+ <meta http-equiv="content-type" value="text/html;utf-8">
+ <link rel="stylesheet" type="text/css" href="../../static/style.css">
+ <link rel="canonical" href="https://www.npmjs.org/doc/cli/npm-outdated.html">
+ <script async=true src="../../static/toc.js"></script>
+
+ <body>
+ <div id="wrapper">
+
+<h1><a href="../cli/npm-outdated.html">npm-outdated</a></h1> <p>Check for outdated packages</p>
+<h2 id="synopsis">SYNOPSIS</h2>
+<pre><code>npm outdated [&lt;name&gt; [&lt;name&gt; ...]]
+</code></pre><h2 id="description">DESCRIPTION</h2>
+<p>This command will check the registry to see if any (or, specific) installed
+packages are currently outdated.</p>
+<p>The resulting field &#39;wanted&#39; shows the latest version according to the
+version specified in the package.json, the field &#39;latest&#39; the very latest
+version of the package.</p>
+<h2 id="configuration">CONFIGURATION</h2>
+<h3 id="json">json</h3>
+<ul>
+<li>Default: false</li>
+<li>Type: Boolean</li>
+</ul>
+<p>Show information in JSON format.</p>
+<h3 id="long">long</h3>
+<ul>
+<li>Default: false</li>
+<li>Type: Boolean</li>
+</ul>
+<p>Show extended information.</p>
+<h3 id="parseable">parseable</h3>
+<ul>
+<li>Default: false</li>
+<li>Type: Boolean</li>
+</ul>
+<p>Show parseable output instead of tree view.</p>
+<h3 id="global">global</h3>
+<ul>
+<li>Default: false</li>
+<li>Type: Boolean</li>
+</ul>
+<p>Check packages in the global install prefix instead of in the current
+project.</p>
+<h3 id="depth">depth</h3>
+<ul>
+<li>Type: Int</li>
+</ul>
+<p>Max depth for checking dependency tree.</p>
+<h2 id="see-also">SEE ALSO</h2>
+<ul>
+<li><a href="../cli/npm-update.html">npm-update(1)</a></li>
+<li><a href="../misc/npm-registry.html">npm-registry(7)</a></li>
+<li><a href="../files/npm-folders.html">npm-folders(5)</a></li>
+</ul>
+
+</div>
+
+<table border=0 cellspacing=0 cellpadding=0 id=npmlogo>
+<tr><td style="width:180px;height:10px;background:rgb(237,127,127)" colspan=18>&nbsp;</td></tr>
+<tr><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td colspan=6 style="width:60px;height:10px;background:#fff">&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td></tr>
+<tr><td colspan=2 style="width:20px;height:30px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=4 colspan=2>&nbsp;</td><td style="width:10px;height:20px;background:rgb(237,127,127)" rowspan=2>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=3 colspan=2>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff" rowspan=2>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff">&nbsp;</td></tr>
+<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
+<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
+</table>
+<p id="footer">npm-outdated &mdash; npm@1.4.10</p>
+
diff --git a/deps/npm/html/doc/cli/npm-owner.html b/deps/npm/html/doc/cli/npm-owner.html
new file mode 100644
index 000000000..e73d1d352
--- /dev/null
+++ b/deps/npm/html/doc/cli/npm-owner.html
@@ -0,0 +1,53 @@
+<!doctype html>
+<html>
+ <title>npm-owner</title>
+ <meta http-equiv="content-type" value="text/html;utf-8">
+ <link rel="stylesheet" type="text/css" href="../../static/style.css">
+ <link rel="canonical" href="https://www.npmjs.org/doc/cli/npm-owner.html">
+ <script async=true src="../../static/toc.js"></script>
+
+ <body>
+ <div id="wrapper">
+
+<h1><a href="../cli/npm-owner.html">npm-owner</a></h1> <p>Manage package owners</p>
+<h2 id="synopsis">SYNOPSIS</h2>
+<pre><code>npm owner ls &lt;package name&gt;
+npm owner add &lt;user&gt; &lt;package name&gt;
+npm owner rm &lt;user&gt; &lt;package name&gt;
+</code></pre><h2 id="description">DESCRIPTION</h2>
+<p>Manage ownership of published packages.</p>
+<ul>
+<li>ls:
+List all the users who have access to modify a package and push new versions.
+Handy when you need to know who to bug for help.</li>
+<li>add:
+Add a new user as a maintainer of a package. This user is enabled to modify
+metadata, publish new versions, and add other owners.</li>
+<li>rm:
+Remove a user from the package owner list. This immediately revokes their
+privileges.</li>
+</ul>
+<p>Note that there is only one level of access. Either you can modify a package,
+or you can&#39;t. Future versions may contain more fine-grained access levels, but
+that is not implemented at this time.</p>
+<h2 id="see-also">SEE ALSO</h2>
+<ul>
+<li><a href="../cli/npm-publish.html">npm-publish(1)</a></li>
+<li><a href="../misc/npm-registry.html">npm-registry(7)</a></li>
+<li><a href="../cli/npm-adduser.html">npm-adduser(1)</a></li>
+<li><a href="../misc/npm-disputes.html">npm-disputes(7)</a></li>
+</ul>
+
+</div>
+
+<table border=0 cellspacing=0 cellpadding=0 id=npmlogo>
+<tr><td style="width:180px;height:10px;background:rgb(237,127,127)" colspan=18>&nbsp;</td></tr>
+<tr><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td colspan=6 style="width:60px;height:10px;background:#fff">&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td></tr>
+<tr><td colspan=2 style="width:20px;height:30px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=4 colspan=2>&nbsp;</td><td style="width:10px;height:20px;background:rgb(237,127,127)" rowspan=2>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=3 colspan=2>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff" rowspan=2>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff">&nbsp;</td></tr>
+<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
+<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
+</table>
+<p id="footer">npm-owner &mdash; npm@1.4.10</p>
+
diff --git a/deps/npm/html/doc/cli/npm-pack.html b/deps/npm/html/doc/cli/npm-pack.html
new file mode 100644
index 000000000..9d6b56b10
--- /dev/null
+++ b/deps/npm/html/doc/cli/npm-pack.html
@@ -0,0 +1,45 @@
+<!doctype html>
+<html>
+ <title>npm-pack</title>
+ <meta http-equiv="content-type" value="text/html;utf-8">
+ <link rel="stylesheet" type="text/css" href="../../static/style.css">
+ <link rel="canonical" href="https://www.npmjs.org/doc/cli/npm-pack.html">
+ <script async=true src="../../static/toc.js"></script>
+
+ <body>
+ <div id="wrapper">
+
+<h1><a href="../cli/npm-pack.html">npm-pack</a></h1> <p>Create a tarball from a package</p>
+<h2 id="synopsis">SYNOPSIS</h2>
+<pre><code>npm pack [&lt;pkg&gt; [&lt;pkg&gt; ...]]
+</code></pre><h2 id="description">DESCRIPTION</h2>
+<p>For anything that&#39;s installable (that is, a package folder, tarball,
+tarball url, name@tag, name@version, or name), this command will fetch
+it to the cache, and then copy the tarball to the current working
+directory as <code>&lt;name&gt;-&lt;version&gt;.tgz</code>, and then write the filenames out to
+stdout.</p>
+<p>If the same package is specified multiple times, then the file will be
+overwritten the second time.</p>
+<p>If no arguments are supplied, then npm packs the current package folder.</p>
+<h2 id="see-also">SEE ALSO</h2>
+<ul>
+<li><a href="../cli/npm-cache.html">npm-cache(1)</a></li>
+<li><a href="../cli/npm-publish.html">npm-publish(1)</a></li>
+<li><a href="../cli/npm-config.html">npm-config(1)</a></li>
+<li><a href="../misc/npm-config.html">npm-config(7)</a></li>
+<li><a href="../files/npmrc.html">npmrc(5)</a></li>
+</ul>
+
+</div>
+
+<table border=0 cellspacing=0 cellpadding=0 id=npmlogo>
+<tr><td style="width:180px;height:10px;background:rgb(237,127,127)" colspan=18>&nbsp;</td></tr>
+<tr><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td colspan=6 style="width:60px;height:10px;background:#fff">&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td></tr>
+<tr><td colspan=2 style="width:20px;height:30px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=4 colspan=2>&nbsp;</td><td style="width:10px;height:20px;background:rgb(237,127,127)" rowspan=2>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=3 colspan=2>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff" rowspan=2>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff">&nbsp;</td></tr>
+<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
+<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
+</table>
+<p id="footer">npm-pack &mdash; npm@1.4.10</p>
+
diff --git a/deps/npm/html/doc/cli/npm-prefix.html b/deps/npm/html/doc/cli/npm-prefix.html
new file mode 100644
index 000000000..3ddc96fab
--- /dev/null
+++ b/deps/npm/html/doc/cli/npm-prefix.html
@@ -0,0 +1,39 @@
+<!doctype html>
+<html>
+ <title>npm-prefix</title>
+ <meta http-equiv="content-type" value="text/html;utf-8">
+ <link rel="stylesheet" type="text/css" href="../../static/style.css">
+ <link rel="canonical" href="https://www.npmjs.org/doc/cli/npm-prefix.html">
+ <script async=true src="../../static/toc.js"></script>
+
+ <body>
+ <div id="wrapper">
+
+<h1><a href="../cli/npm-prefix.html">npm-prefix</a></h1> <p>Display prefix</p>
+<h2 id="synopsis">SYNOPSIS</h2>
+<pre><code>npm prefix
+</code></pre><h2 id="description">DESCRIPTION</h2>
+<p>Print the prefix to standard out.</p>
+<h2 id="see-also">SEE ALSO</h2>
+<ul>
+<li><a href="../cli/npm-root.html">npm-root(1)</a></li>
+<li><a href="../cli/npm-bin.html">npm-bin(1)</a></li>
+<li><a href="../files/npm-folders.html">npm-folders(5)</a></li>
+<li><a href="../cli/npm-config.html">npm-config(1)</a></li>
+<li><a href="../misc/npm-config.html">npm-config(7)</a></li>
+<li><a href="../files/npmrc.html">npmrc(5)</a></li>
+</ul>
+
+</div>
+
+<table border=0 cellspacing=0 cellpadding=0 id=npmlogo>
+<tr><td style="width:180px;height:10px;background:rgb(237,127,127)" colspan=18>&nbsp;</td></tr>
+<tr><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td colspan=6 style="width:60px;height:10px;background:#fff">&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td></tr>
+<tr><td colspan=2 style="width:20px;height:30px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=4 colspan=2>&nbsp;</td><td style="width:10px;height:20px;background:rgb(237,127,127)" rowspan=2>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=3 colspan=2>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff" rowspan=2>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff">&nbsp;</td></tr>
+<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
+<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
+</table>
+<p id="footer">npm-prefix &mdash; npm@1.4.10</p>
+
diff --git a/deps/npm/html/doc/cli/npm-prune.html b/deps/npm/html/doc/cli/npm-prune.html
new file mode 100644
index 000000000..f555382b2
--- /dev/null
+++ b/deps/npm/html/doc/cli/npm-prune.html
@@ -0,0 +1,43 @@
+<!doctype html>
+<html>
+ <title>npm-prune</title>
+ <meta http-equiv="content-type" value="text/html;utf-8">
+ <link rel="stylesheet" type="text/css" href="../../static/style.css">
+ <link rel="canonical" href="https://www.npmjs.org/doc/cli/npm-prune.html">
+ <script async=true src="../../static/toc.js"></script>
+
+ <body>
+ <div id="wrapper">
+
+<h1><a href="../cli/npm-prune.html">npm-prune</a></h1> <p>Remove extraneous packages</p>
+<h2 id="synopsis">SYNOPSIS</h2>
+<pre><code>npm prune [&lt;name&gt; [&lt;name ...]]
+npm prune [&lt;name&gt; [&lt;name ...]] [--production]
+</code></pre><h2 id="description">DESCRIPTION</h2>
+<p>This command removes &quot;extraneous&quot; packages. If a package name is
+provided, then only packages matching one of the supplied names are
+removed.</p>
+<p>Extraneous packages are packages that are not listed on the parent
+package&#39;s dependencies list.</p>
+<p>If the <code>--production</code> flag is specified, this command will remove the
+packages specified in your <code>devDependencies</code>.</p>
+<h2 id="see-also">SEE ALSO</h2>
+<ul>
+<li><a href="../cli/npm-rm.html">npm-rm(1)</a></li>
+<li><a href="../files/npm-folders.html">npm-folders(5)</a></li>
+<li><a href="../cli/npm-ls.html">npm-ls(1)</a></li>
+</ul>
+
+</div>
+
+<table border=0 cellspacing=0 cellpadding=0 id=npmlogo>
+<tr><td style="width:180px;height:10px;background:rgb(237,127,127)" colspan=18>&nbsp;</td></tr>
+<tr><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td colspan=6 style="width:60px;height:10px;background:#fff">&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td></tr>
+<tr><td colspan=2 style="width:20px;height:30px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=4 colspan=2>&nbsp;</td><td style="width:10px;height:20px;background:rgb(237,127,127)" rowspan=2>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=3 colspan=2>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff" rowspan=2>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff">&nbsp;</td></tr>
+<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
+<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
+</table>
+<p id="footer">npm-prune &mdash; npm@1.4.10</p>
+
diff --git a/deps/npm/html/doc/cli/npm-publish.html b/deps/npm/html/doc/cli/npm-publish.html
new file mode 100644
index 000000000..876c2caf4
--- /dev/null
+++ b/deps/npm/html/doc/cli/npm-publish.html
@@ -0,0 +1,58 @@
+<!doctype html>
+<html>
+ <title>npm-publish</title>
+ <meta http-equiv="content-type" value="text/html;utf-8">
+ <link rel="stylesheet" type="text/css" href="../../static/style.css">
+ <link rel="canonical" href="https://www.npmjs.org/doc/cli/npm-publish.html">
+ <script async=true src="../../static/toc.js"></script>
+
+ <body>
+ <div id="wrapper">
+
+<h1><a href="../cli/npm-publish.html">npm-publish</a></h1> <p>Publish a package</p>
+<h2 id="synopsis">SYNOPSIS</h2>
+<pre><code>npm publish &lt;tarball&gt; [--tag &lt;tag&gt;]
+npm publish &lt;folder&gt; [--tag &lt;tag&gt;]
+</code></pre><h2 id="description">DESCRIPTION</h2>
+<p>Publishes a package to the registry so that it can be installed by name.</p>
+<ul>
+<li><p><code>&lt;folder&gt;</code>:
+A folder containing a package.json file</p>
+</li>
+<li><p><code>&lt;tarball&gt;</code>:
+A url or file path to a gzipped tar archive containing a single folder
+with a package.json file inside.</p>
+</li>
+<li><p><code>[--tag &lt;tag&gt;]</code>
+Registers the published package with the given tag, such that <code>npm install
+&lt;name&gt;@&lt;tag&gt;</code> will install this version. By default, <code>npm publish</code> updates
+and <code>npm install</code> installs the <code>latest</code> tag.</p>
+</li>
+</ul>
+<p>Fails if the package name and version combination already exists in
+the registry.</p>
+<p>Once a package is published with a given name and version, that
+specific name and version combination can never be used again, even if
+it is removed with <a href="../cli/npm-unpublish.html">npm-unpublish(1)</a>.</p>
+<h2 id="see-also">SEE ALSO</h2>
+<ul>
+<li><a href="../misc/npm-registry.html">npm-registry(7)</a></li>
+<li><a href="../cli/npm-adduser.html">npm-adduser(1)</a></li>
+<li><a href="../cli/npm-owner.html">npm-owner(1)</a></li>
+<li><a href="../cli/npm-deprecate.html">npm-deprecate(1)</a></li>
+<li><a href="../cli/npm-tag.html">npm-tag(1)</a></li>
+</ul>
+
+</div>
+
+<table border=0 cellspacing=0 cellpadding=0 id=npmlogo>
+<tr><td style="width:180px;height:10px;background:rgb(237,127,127)" colspan=18>&nbsp;</td></tr>
+<tr><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td colspan=6 style="width:60px;height:10px;background:#fff">&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td></tr>
+<tr><td colspan=2 style="width:20px;height:30px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=4 colspan=2>&nbsp;</td><td style="width:10px;height:20px;background:rgb(237,127,127)" rowspan=2>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=3 colspan=2>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff" rowspan=2>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff">&nbsp;</td></tr>
+<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
+<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
+</table>
+<p id="footer">npm-publish &mdash; npm@1.4.10</p>
+
diff --git a/deps/npm/html/doc/cli/npm-rebuild.html b/deps/npm/html/doc/cli/npm-rebuild.html
new file mode 100644
index 000000000..cf5b553d1
--- /dev/null
+++ b/deps/npm/html/doc/cli/npm-rebuild.html
@@ -0,0 +1,42 @@
+<!doctype html>
+<html>
+ <title>npm-rebuild</title>
+ <meta http-equiv="content-type" value="text/html;utf-8">
+ <link rel="stylesheet" type="text/css" href="../../static/style.css">
+ <link rel="canonical" href="https://www.npmjs.org/doc/cli/npm-rebuild.html">
+ <script async=true src="../../static/toc.js"></script>
+
+ <body>
+ <div id="wrapper">
+
+<h1><a href="../cli/npm-rebuild.html">npm-rebuild</a></h1> <p>Rebuild a package</p>
+<h2 id="synopsis">SYNOPSIS</h2>
+<pre><code>npm rebuild [&lt;name&gt; [&lt;name&gt; ...]]
+npm rb [&lt;name&gt; [&lt;name&gt; ...]]
+</code></pre><ul>
+<li><code>&lt;name&gt;</code>:
+The package to rebuild</li>
+</ul>
+<h2 id="description">DESCRIPTION</h2>
+<p>This command runs the <code>npm build</code> command on the matched folders. This is useful
+when you install a new version of node, and must recompile all your C++ addons with
+the new binary.</p>
+<h2 id="see-also">SEE ALSO</h2>
+<ul>
+<li><a href="../cli/npm-build.html">npm-build(1)</a></li>
+<li><a href="../cli/npm-install.html">npm-install(1)</a></li>
+</ul>
+
+</div>
+
+<table border=0 cellspacing=0 cellpadding=0 id=npmlogo>
+<tr><td style="width:180px;height:10px;background:rgb(237,127,127)" colspan=18>&nbsp;</td></tr>
+<tr><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td colspan=6 style="width:60px;height:10px;background:#fff">&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td></tr>
+<tr><td colspan=2 style="width:20px;height:30px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=4 colspan=2>&nbsp;</td><td style="width:10px;height:20px;background:rgb(237,127,127)" rowspan=2>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=3 colspan=2>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff" rowspan=2>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff">&nbsp;</td></tr>
+<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
+<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
+</table>
+<p id="footer">npm-rebuild &mdash; npm@1.4.10</p>
+
diff --git a/deps/npm/html/doc/cli/npm-repo.html b/deps/npm/html/doc/cli/npm-repo.html
new file mode 100644
index 000000000..325d607a8
--- /dev/null
+++ b/deps/npm/html/doc/cli/npm-repo.html
@@ -0,0 +1,46 @@
+<!doctype html>
+<html>
+ <title>npm-repo</title>
+ <meta http-equiv="content-type" value="text/html;utf-8">
+ <link rel="stylesheet" type="text/css" href="../../static/style.css">
+ <link rel="canonical" href="https://www.npmjs.org/doc/cli/npm-repo.html">
+ <script async=true src="../../static/toc.js"></script>
+
+ <body>
+ <div id="wrapper">
+
+<h1><a href="../cli/npm-repo.html">npm-repo</a></h1> <p>Open package repository page in the browser</p>
+<h2 id="synopsis">SYNOPSIS</h2>
+<pre><code>npm repo &lt;pkgname&gt;
+npm repo (with no args in a package dir)
+</code></pre><h2 id="description">DESCRIPTION</h2>
+<p>This command tries to guess at the likely location of a package&#39;s
+repository URL, and then tries to open it using the <code>--browser</code>
+config param. If no package name is provided, it will search for
+a <code>package.json</code> in the current folder and use the <code>name</code> property.</p>
+<h2 id="configuration">CONFIGURATION</h2>
+<h3 id="browser">browser</h3>
+<ul>
+<li>Default: OS X: <code>&quot;open&quot;</code>, Windows: <code>&quot;start&quot;</code>, Others: <code>&quot;xdg-open&quot;</code></li>
+<li>Type: String</li>
+</ul>
+<p>The browser that is called by the <code>npm repo</code> command to open websites.</p>
+<h2 id="see-also">SEE ALSO</h2>
+<ul>
+<li><a href="../cli/npm-docs.html">npm-docs(1)</a></li>
+<li><a href="../cli/npm-config.html">npm-config(1)</a></li>
+</ul>
+
+</div>
+
+<table border=0 cellspacing=0 cellpadding=0 id=npmlogo>
+<tr><td style="width:180px;height:10px;background:rgb(237,127,127)" colspan=18>&nbsp;</td></tr>
+<tr><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td colspan=6 style="width:60px;height:10px;background:#fff">&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td></tr>
+<tr><td colspan=2 style="width:20px;height:30px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=4 colspan=2>&nbsp;</td><td style="width:10px;height:20px;background:rgb(237,127,127)" rowspan=2>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=3 colspan=2>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff" rowspan=2>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff">&nbsp;</td></tr>
+<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
+<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
+</table>
+<p id="footer">npm-repo &mdash; npm@1.4.10</p>
+
diff --git a/deps/npm/html/doc/cli/npm-restart.html b/deps/npm/html/doc/cli/npm-restart.html
new file mode 100644
index 000000000..cef310499
--- /dev/null
+++ b/deps/npm/html/doc/cli/npm-restart.html
@@ -0,0 +1,41 @@
+<!doctype html>
+<html>
+ <title>npm-restart</title>
+ <meta http-equiv="content-type" value="text/html;utf-8">
+ <link rel="stylesheet" type="text/css" href="../../static/style.css">
+ <link rel="canonical" href="https://www.npmjs.org/doc/cli/npm-restart.html">
+ <script async=true src="../../static/toc.js"></script>
+
+ <body>
+ <div id="wrapper">
+
+<h1><a href="../cli/npm-restart.html">npm-restart</a></h1> <p>Start a package</p>
+<h2 id="synopsis">SYNOPSIS</h2>
+<pre><code>npm restart &lt;name&gt;
+</code></pre><h2 id="description">DESCRIPTION</h2>
+<p>This runs a package&#39;s &quot;restart&quot; script, if one was provided.
+Otherwise it runs package&#39;s &quot;stop&quot; script, if one was provided, and then
+the &quot;start&quot; script.</p>
+<p>If no version is specified, then it restarts the &quot;active&quot; version.</p>
+<h2 id="see-also">SEE ALSO</h2>
+<ul>
+<li><a href="../cli/npm-run-script.html">npm-run-script(1)</a></li>
+<li><a href="../misc/npm-scripts.html">npm-scripts(7)</a></li>
+<li><a href="../cli/npm-test.html">npm-test(1)</a></li>
+<li><a href="../cli/npm-start.html">npm-start(1)</a></li>
+<li><a href="../cli/npm-stop.html">npm-stop(1)</a></li>
+</ul>
+
+</div>
+
+<table border=0 cellspacing=0 cellpadding=0 id=npmlogo>
+<tr><td style="width:180px;height:10px;background:rgb(237,127,127)" colspan=18>&nbsp;</td></tr>
+<tr><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td colspan=6 style="width:60px;height:10px;background:#fff">&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td></tr>
+<tr><td colspan=2 style="width:20px;height:30px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=4 colspan=2>&nbsp;</td><td style="width:10px;height:20px;background:rgb(237,127,127)" rowspan=2>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=3 colspan=2>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff" rowspan=2>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff">&nbsp;</td></tr>
+<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
+<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
+</table>
+<p id="footer">npm-restart &mdash; npm@1.4.10</p>
+
diff --git a/deps/npm/html/doc/cli/npm-rm.html b/deps/npm/html/doc/cli/npm-rm.html
new file mode 100644
index 000000000..d8f6491ba
--- /dev/null
+++ b/deps/npm/html/doc/cli/npm-rm.html
@@ -0,0 +1,43 @@
+<!doctype html>
+<html>
+ <title>npm-rm</title>
+ <meta http-equiv="content-type" value="text/html;utf-8">
+ <link rel="stylesheet" type="text/css" href="../../static/style.css">
+ <link rel="canonical" href="https://www.npmjs.org/doc/cli/npm-rm.html">
+ <script async=true src="../../static/toc.js"></script>
+
+ <body>
+ <div id="wrapper">
+
+<h1><a href="../cli/npm-rm.html">npm-rm</a></h1> <p>Remove a package</p>
+<h2 id="synopsis">SYNOPSIS</h2>
+<pre><code>npm rm &lt;name&gt;
+npm r &lt;name&gt;
+npm uninstall &lt;name&gt;
+npm un &lt;name&gt;
+</code></pre><h2 id="description">DESCRIPTION</h2>
+<p>This uninstalls a package, completely removing everything npm installed
+on its behalf.</p>
+<h2 id="see-also">SEE ALSO</h2>
+<ul>
+<li><a href="../cli/npm-prune.html">npm-prune(1)</a></li>
+<li><a href="../cli/npm-install.html">npm-install(1)</a></li>
+<li><a href="../files/npm-folders.html">npm-folders(5)</a></li>
+<li><a href="../cli/npm-config.html">npm-config(1)</a></li>
+<li><a href="../misc/npm-config.html">npm-config(7)</a></li>
+<li><a href="../files/npmrc.html">npmrc(5)</a></li>
+</ul>
+
+</div>
+
+<table border=0 cellspacing=0 cellpadding=0 id=npmlogo>
+<tr><td style="width:180px;height:10px;background:rgb(237,127,127)" colspan=18>&nbsp;</td></tr>
+<tr><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td colspan=6 style="width:60px;height:10px;background:#fff">&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td></tr>
+<tr><td colspan=2 style="width:20px;height:30px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=4 colspan=2>&nbsp;</td><td style="width:10px;height:20px;background:rgb(237,127,127)" rowspan=2>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=3 colspan=2>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff" rowspan=2>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff">&nbsp;</td></tr>
+<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
+<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
+</table>
+<p id="footer">npm-rm &mdash; npm@1.4.10</p>
+
diff --git a/deps/npm/html/doc/cli/npm-root.html b/deps/npm/html/doc/cli/npm-root.html
new file mode 100644
index 000000000..e4f097ee1
--- /dev/null
+++ b/deps/npm/html/doc/cli/npm-root.html
@@ -0,0 +1,39 @@
+<!doctype html>
+<html>
+ <title>npm-root</title>
+ <meta http-equiv="content-type" value="text/html;utf-8">
+ <link rel="stylesheet" type="text/css" href="../../static/style.css">
+ <link rel="canonical" href="https://www.npmjs.org/doc/cli/npm-root.html">
+ <script async=true src="../../static/toc.js"></script>
+
+ <body>
+ <div id="wrapper">
+
+<h1><a href="../cli/npm-root.html">npm-root</a></h1> <p>Display npm root</p>
+<h2 id="synopsis">SYNOPSIS</h2>
+<pre><code>npm root
+</code></pre><h2 id="description">DESCRIPTION</h2>
+<p>Print the effective <code>node_modules</code> folder to standard out.</p>
+<h2 id="see-also">SEE ALSO</h2>
+<ul>
+<li><a href="../cli/npm-prefix.html">npm-prefix(1)</a></li>
+<li><a href="../cli/npm-bin.html">npm-bin(1)</a></li>
+<li><a href="../files/npm-folders.html">npm-folders(5)</a></li>
+<li><a href="../cli/npm-config.html">npm-config(1)</a></li>
+<li><a href="../misc/npm-config.html">npm-config(7)</a></li>
+<li><a href="../files/npmrc.html">npmrc(5)</a></li>
+</ul>
+
+</div>
+
+<table border=0 cellspacing=0 cellpadding=0 id=npmlogo>
+<tr><td style="width:180px;height:10px;background:rgb(237,127,127)" colspan=18>&nbsp;</td></tr>
+<tr><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td colspan=6 style="width:60px;height:10px;background:#fff">&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td></tr>
+<tr><td colspan=2 style="width:20px;height:30px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=4 colspan=2>&nbsp;</td><td style="width:10px;height:20px;background:rgb(237,127,127)" rowspan=2>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=3 colspan=2>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff" rowspan=2>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff">&nbsp;</td></tr>
+<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
+<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
+</table>
+<p id="footer">npm-root &mdash; npm@1.4.10</p>
+
diff --git a/deps/npm/html/doc/cli/npm-run-script.html b/deps/npm/html/doc/cli/npm-run-script.html
new file mode 100644
index 000000000..64afc282b
--- /dev/null
+++ b/deps/npm/html/doc/cli/npm-run-script.html
@@ -0,0 +1,43 @@
+<!doctype html>
+<html>
+ <title>npm-run-script</title>
+ <meta http-equiv="content-type" value="text/html;utf-8">
+ <link rel="stylesheet" type="text/css" href="../../static/style.css">
+ <link rel="canonical" href="https://www.npmjs.org/doc/cli/npm-run-script.html">
+ <script async=true src="../../static/toc.js"></script>
+
+ <body>
+ <div id="wrapper">
+
+<h1><a href="../cli/npm-run-script.html">npm-run-script</a></h1> <p>Run arbitrary package scripts</p>
+<h2 id="synopsis">SYNOPSIS</h2>
+<pre><code>npm run-script [&lt;pkg&gt;] [command]
+</code></pre><h2 id="description">DESCRIPTION</h2>
+<p>This runs an arbitrary command from a package&#39;s <code>&quot;scripts&quot;</code> object.
+If no package name is provided, it will search for a <code>package.json</code>
+in the current folder and use its <code>&quot;scripts&quot;</code> object. If no <code>&quot;command&quot;</code>
+is provided, it will list the available top level scripts.</p>
+<p>It is used by the test, start, restart, and stop commands, but can be
+called directly, as well.</p>
+<h2 id="see-also">SEE ALSO</h2>
+<ul>
+<li><a href="../misc/npm-scripts.html">npm-scripts(7)</a></li>
+<li><a href="../cli/npm-test.html">npm-test(1)</a></li>
+<li><a href="../cli/npm-start.html">npm-start(1)</a></li>
+<li><a href="../cli/npm-restart.html">npm-restart(1)</a></li>
+<li><a href="../cli/npm-stop.html">npm-stop(1)</a></li>
+</ul>
+
+</div>
+
+<table border=0 cellspacing=0 cellpadding=0 id=npmlogo>
+<tr><td style="width:180px;height:10px;background:rgb(237,127,127)" colspan=18>&nbsp;</td></tr>
+<tr><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td colspan=6 style="width:60px;height:10px;background:#fff">&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td></tr>
+<tr><td colspan=2 style="width:20px;height:30px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=4 colspan=2>&nbsp;</td><td style="width:10px;height:20px;background:rgb(237,127,127)" rowspan=2>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=3 colspan=2>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff" rowspan=2>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff">&nbsp;</td></tr>
+<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
+<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
+</table>
+<p id="footer">npm-run-script &mdash; npm@1.4.10</p>
+
diff --git a/deps/npm/html/doc/cli/npm-search.html b/deps/npm/html/doc/cli/npm-search.html
new file mode 100644
index 000000000..e71c6bb2a
--- /dev/null
+++ b/deps/npm/html/doc/cli/npm-search.html
@@ -0,0 +1,53 @@
+<!doctype html>
+<html>
+ <title>npm-search</title>
+ <meta http-equiv="content-type" value="text/html;utf-8">
+ <link rel="stylesheet" type="text/css" href="../../static/style.css">
+ <link rel="canonical" href="https://www.npmjs.org/doc/cli/npm-search.html">
+ <script async=true src="../../static/toc.js"></script>
+
+ <body>
+ <div id="wrapper">
+
+<h1><a href="../cli/npm-search.html">npm-search</a></h1> <p>Search for packages</p>
+<h2 id="synopsis">SYNOPSIS</h2>
+<pre><code>npm search [--long] [search terms ...]
+npm s [search terms ...]
+npm se [search terms ...]
+</code></pre><h2 id="description">DESCRIPTION</h2>
+<p>Search the registry for packages matching the search terms.</p>
+<p>If a term starts with <code>/</code>, then it&#39;s interpreted as a regular expression.
+A trailing <code>/</code> will be ignored in this case. (Note that many regular
+expression characters must be escaped or quoted in most shells.)</p>
+<h2 id="configuration">CONFIGURATION</h2>
+<h3 id="long">long</h3>
+<ul>
+<li>Default: false</li>
+<li>Type: Boolean</li>
+</ul>
+<p>Display full package descriptions and other long text across multiple
+lines. When disabled (default) search results are truncated to fit
+neatly on a single line. Modules with extremely long names will
+fall on multiple lines.</p>
+<h2 id="see-also">SEE ALSO</h2>
+<ul>
+<li><a href="../misc/npm-registry.html">npm-registry(7)</a></li>
+<li><a href="../cli/npm-config.html">npm-config(1)</a></li>
+<li><a href="../misc/npm-config.html">npm-config(7)</a></li>
+<li><a href="../files/npmrc.html">npmrc(5)</a></li>
+<li><a href="../cli/npm-view.html">npm-view(1)</a></li>
+</ul>
+
+</div>
+
+<table border=0 cellspacing=0 cellpadding=0 id=npmlogo>
+<tr><td style="width:180px;height:10px;background:rgb(237,127,127)" colspan=18>&nbsp;</td></tr>
+<tr><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td colspan=6 style="width:60px;height:10px;background:#fff">&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td></tr>
+<tr><td colspan=2 style="width:20px;height:30px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=4 colspan=2>&nbsp;</td><td style="width:10px;height:20px;background:rgb(237,127,127)" rowspan=2>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=3 colspan=2>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff" rowspan=2>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff">&nbsp;</td></tr>
+<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
+<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
+</table>
+<p id="footer">npm-search &mdash; npm@1.4.10</p>
+
diff --git a/deps/npm/html/doc/cli/npm-shrinkwrap.html b/deps/npm/html/doc/cli/npm-shrinkwrap.html
new file mode 100644
index 000000000..03c63e443
--- /dev/null
+++ b/deps/npm/html/doc/cli/npm-shrinkwrap.html
@@ -0,0 +1,176 @@
+<!doctype html>
+<html>
+ <title>npm-shrinkwrap</title>
+ <meta http-equiv="content-type" value="text/html;utf-8">
+ <link rel="stylesheet" type="text/css" href="../../static/style.css">
+ <link rel="canonical" href="https://www.npmjs.org/doc/cli/npm-shrinkwrap.html">
+ <script async=true src="../../static/toc.js"></script>
+
+ <body>
+ <div id="wrapper">
+
+<h1><a href="../cli/npm-shrinkwrap.html">npm-shrinkwrap</a></h1> <p>Lock down dependency versions</p>
+<h2 id="synopsis">SYNOPSIS</h2>
+<pre><code>npm shrinkwrap
+</code></pre><h2 id="description">DESCRIPTION</h2>
+<p>This command locks down the versions of a package&#39;s dependencies so
+that you can control exactly which versions of each dependency will be
+used when your package is installed. The &quot;package.json&quot; file is still
+required if you want to use &quot;npm install&quot;.</p>
+<p>By default, &quot;npm install&quot; recursively installs the target&#39;s
+dependencies (as specified in package.json), choosing the latest
+available version that satisfies the dependency&#39;s semver pattern. In
+some situations, particularly when shipping software where each change
+is tightly managed, it&#39;s desirable to fully specify each version of
+each dependency recursively so that subsequent builds and deploys do
+not inadvertently pick up newer versions of a dependency that satisfy
+the semver pattern. Specifying specific semver patterns in each
+dependency&#39;s package.json would facilitate this, but that&#39;s not always
+possible or desirable, as when another author owns the npm package.
+It&#39;s also possible to check dependencies directly into source control,
+but that may be undesirable for other reasons.</p>
+<p>As an example, consider package A:</p>
+<pre><code>{
+ &quot;name&quot;: &quot;A&quot;,
+ &quot;version&quot;: &quot;0.1.0&quot;,
+ &quot;dependencies&quot;: {
+ &quot;B&quot;: &quot;&lt;0.1.0&quot;
+ }
+}
+</code></pre><p>package B:</p>
+<pre><code>{
+ &quot;name&quot;: &quot;B&quot;,
+ &quot;version&quot;: &quot;0.0.1&quot;,
+ &quot;dependencies&quot;: {
+ &quot;C&quot;: &quot;&lt;0.1.0&quot;
+ }
+}
+</code></pre><p>and package C:</p>
+<pre><code>{
+ &quot;name&quot;: &quot;C,
+ &quot;version&quot;: &quot;0.0.1&quot;
+}
+</code></pre><p>If these are the only versions of A, B, and C available in the
+registry, then a normal &quot;npm install A&quot; will install:</p>
+<pre><code>A@0.1.0
+`-- B@0.0.1
+ `-- C@0.0.1
+</code></pre><p>However, if B@0.0.2 is published, then a fresh &quot;npm install A&quot; will
+install:</p>
+<pre><code>A@0.1.0
+`-- B@0.0.2
+ `-- C@0.0.1
+</code></pre><p>assuming the new version did not modify B&#39;s dependencies. Of course,
+the new version of B could include a new version of C and any number
+of new dependencies. If such changes are undesirable, the author of A
+could specify a dependency on B@0.0.1. However, if A&#39;s author and B&#39;s
+author are not the same person, there&#39;s no way for A&#39;s author to say
+that he or she does not want to pull in newly published versions of C
+when B hasn&#39;t changed at all.</p>
+<p>In this case, A&#39;s author can run</p>
+<pre><code>npm shrinkwrap
+</code></pre><p>This generates npm-shrinkwrap.json, which will look something like this:</p>
+<pre><code>{
+ &quot;name&quot;: &quot;A&quot;,
+ &quot;version&quot;: &quot;0.1.0&quot;,
+ &quot;dependencies&quot;: {
+ &quot;B&quot;: {
+ &quot;version&quot;: &quot;0.0.1&quot;,
+ &quot;dependencies&quot;: {
+ &quot;C&quot;: {
+ &quot;version&quot;: &quot;0.1.0&quot;
+ }
+ }
+ }
+ }
+}
+</code></pre><p>The shrinkwrap command has locked down the dependencies based on
+what&#39;s currently installed in node_modules. When &quot;npm install&quot;
+installs a package with a npm-shrinkwrap.json file in the package
+root, the shrinkwrap file (rather than package.json files) completely
+drives the installation of that package and all of its dependencies
+(recursively). So now the author publishes A@0.1.0, and subsequent
+installs of this package will use B@0.0.1 and C@0.1.0, regardless the
+dependencies and versions listed in A&#39;s, B&#39;s, and C&#39;s package.json
+files.</p>
+<h3 id="using-shrinkwrapped-packages">Using shrinkwrapped packages</h3>
+<p>Using a shrinkwrapped package is no different than using any other
+package: you can &quot;npm install&quot; it by hand, or add a dependency to your
+package.json file and &quot;npm install&quot; it.</p>
+<h3 id="building-shrinkwrapped-packages">Building shrinkwrapped packages</h3>
+<p>To shrinkwrap an existing package:</p>
+<ol>
+<li>Run &quot;npm install&quot; in the package root to install the current
+versions of all dependencies.</li>
+<li>Validate that the package works as expected with these versions.</li>
+<li>Run &quot;npm shrinkwrap&quot;, add npm-shrinkwrap.json to git, and publish
+your package.</li>
+</ol>
+<p>To add or update a dependency in a shrinkwrapped package:</p>
+<ol>
+<li>Run &quot;npm install&quot; in the package root to install the current
+versions of all dependencies.</li>
+<li>Add or update dependencies. &quot;npm install&quot; each new or updated
+package individually and then update package.json. Note that they
+must be explicitly named in order to be installed: running <code>npm
+install</code> with no arguments will merely reproduce the existing
+shrinkwrap.</li>
+<li>Validate that the package works as expected with the new
+dependencies.</li>
+<li>Run &quot;npm shrinkwrap&quot;, commit the new npm-shrinkwrap.json, and
+publish your package.</li>
+</ol>
+<p>You can use <a href="../cli/npm-outdated.html">npm-outdated(1)</a> to view dependencies with newer versions
+available.</p>
+<h3 id="other-notes">Other Notes</h3>
+<p>A shrinkwrap file must be consistent with the package&#39;s package.json
+file. &quot;npm shrinkwrap&quot; will fail if required dependencies are not
+already installed, since that would result in a shrinkwrap that
+wouldn&#39;t actually work. Similarly, the command will fail if there are
+extraneous packages (not referenced by package.json), since that would
+indicate that package.json is not correct.</p>
+<p>Since &quot;npm shrinkwrap&quot; is intended to lock down your dependencies for
+production use, <code>devDependencies</code> will not be included unless you
+explicitly set the <code>--dev</code> flag when you run <code>npm shrinkwrap</code>. If
+installed <code>devDependencies</code> are excluded, then npm will print a
+warning. If you want them to be installed with your module by
+default, please consider adding them to <code>dependencies</code> instead.</p>
+<p>If shrinkwrapped package A depends on shrinkwrapped package B, B&#39;s
+shrinkwrap will not be used as part of the installation of A. However,
+because A&#39;s shrinkwrap is constructed from a valid installation of B
+and recursively specifies all dependencies, the contents of B&#39;s
+shrinkwrap will implicitly be included in A&#39;s shrinkwrap.</p>
+<h3 id="caveats">Caveats</h3>
+<p>Shrinkwrap files only lock down package versions, not actual package
+contents. While discouraged, a package author can republish an
+existing version of a package, causing shrinkwrapped packages using
+that version to pick up different code than they were before. If you
+want to avoid any risk that a byzantine author replaces a package
+you&#39;re using with code that breaks your application, you could modify
+the shrinkwrap file to use git URL references rather than version
+numbers so that npm always fetches all packages from git.</p>
+<p>If you wish to lock down the specific bytes included in a package, for
+example to have 100% confidence in being able to reproduce a
+deployment or build, then you ought to check your dependencies into
+source control, or pursue some other mechanism that can verify
+contents rather than versions.</p>
+<h2 id="see-also">SEE ALSO</h2>
+<ul>
+<li><a href="../cli/npm-install.html">npm-install(1)</a></li>
+<li><a href="../files/package.json.html">package.json(5)</a></li>
+<li><a href="../cli/npm-ls.html">npm-ls(1)</a></li>
+</ul>
+
+</div>
+
+<table border=0 cellspacing=0 cellpadding=0 id=npmlogo>
+<tr><td style="width:180px;height:10px;background:rgb(237,127,127)" colspan=18>&nbsp;</td></tr>
+<tr><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td colspan=6 style="width:60px;height:10px;background:#fff">&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td></tr>
+<tr><td colspan=2 style="width:20px;height:30px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=4 colspan=2>&nbsp;</td><td style="width:10px;height:20px;background:rgb(237,127,127)" rowspan=2>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=3 colspan=2>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff" rowspan=2>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff">&nbsp;</td></tr>
+<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
+<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
+</table>
+<p id="footer">npm-shrinkwrap &mdash; npm@1.4.10</p>
+
diff --git a/deps/npm/html/doc/cli/npm-star.html b/deps/npm/html/doc/cli/npm-star.html
new file mode 100644
index 000000000..053fd9b8e
--- /dev/null
+++ b/deps/npm/html/doc/cli/npm-star.html
@@ -0,0 +1,40 @@
+<!doctype html>
+<html>
+ <title>npm-star</title>
+ <meta http-equiv="content-type" value="text/html;utf-8">
+ <link rel="stylesheet" type="text/css" href="../../static/style.css">
+ <link rel="canonical" href="https://www.npmjs.org/doc/cli/npm-star.html">
+ <script async=true src="../../static/toc.js"></script>
+
+ <body>
+ <div id="wrapper">
+
+<h1><a href="../cli/npm-star.html">npm-star</a></h1> <p>Mark your favorite packages</p>
+<h2 id="synopsis">SYNOPSIS</h2>
+<pre><code>npm star &lt;pkgname&gt; [&lt;pkg&gt;, ...]
+npm unstar &lt;pkgname&gt; [&lt;pkg&gt;, ...]
+</code></pre><h2 id="description">DESCRIPTION</h2>
+<p>&quot;Starring&quot; a package means that you have some interest in it. It&#39;s
+a vaguely positive way to show that you care.</p>
+<p>&quot;Unstarring&quot; is the same thing, but in reverse.</p>
+<p>It&#39;s a boolean thing. Starring repeatedly has no additional effect.</p>
+<h2 id="see-also">SEE ALSO</h2>
+<ul>
+<li><a href="../cli/npm-view.html">npm-view(1)</a></li>
+<li><a href="../cli/npm-whoami.html">npm-whoami(1)</a></li>
+<li><a href="../cli/npm-adduser.html">npm-adduser(1)</a></li>
+</ul>
+
+</div>
+
+<table border=0 cellspacing=0 cellpadding=0 id=npmlogo>
+<tr><td style="width:180px;height:10px;background:rgb(237,127,127)" colspan=18>&nbsp;</td></tr>
+<tr><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td colspan=6 style="width:60px;height:10px;background:#fff">&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td></tr>
+<tr><td colspan=2 style="width:20px;height:30px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=4 colspan=2>&nbsp;</td><td style="width:10px;height:20px;background:rgb(237,127,127)" rowspan=2>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=3 colspan=2>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff" rowspan=2>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff">&nbsp;</td></tr>
+<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
+<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
+</table>
+<p id="footer">npm-star &mdash; npm@1.4.10</p>
+
diff --git a/deps/npm/html/doc/cli/npm-stars.html b/deps/npm/html/doc/cli/npm-stars.html
new file mode 100644
index 000000000..4ce9697ca
--- /dev/null
+++ b/deps/npm/html/doc/cli/npm-stars.html
@@ -0,0 +1,41 @@
+<!doctype html>
+<html>
+ <title>npm-stars</title>
+ <meta http-equiv="content-type" value="text/html;utf-8">
+ <link rel="stylesheet" type="text/css" href="../../static/style.css">
+ <link rel="canonical" href="https://www.npmjs.org/doc/cli/npm-stars.html">
+ <script async=true src="../../static/toc.js"></script>
+
+ <body>
+ <div id="wrapper">
+
+<h1><a href="../cli/npm-stars.html">npm-stars</a></h1> <p>View packages marked as favorites</p>
+<h2 id="synopsis">SYNOPSIS</h2>
+<pre><code>npm stars
+npm stars [username]
+</code></pre><h2 id="description">DESCRIPTION</h2>
+<p>If you have starred a lot of neat things and want to find them again
+quickly this command lets you do just that.</p>
+<p>You may also want to see your friend&#39;s favorite packages, in this case
+you will most certainly enjoy this command.</p>
+<h2 id="see-also">SEE ALSO</h2>
+<ul>
+<li><a href="../cli/npm-star.html">npm-star(1)</a></li>
+<li><a href="../cli/npm-view.html">npm-view(1)</a></li>
+<li><a href="../cli/npm-whoami.html">npm-whoami(1)</a></li>
+<li><a href="../cli/npm-adduser.html">npm-adduser(1)</a></li>
+</ul>
+
+</div>
+
+<table border=0 cellspacing=0 cellpadding=0 id=npmlogo>
+<tr><td style="width:180px;height:10px;background:rgb(237,127,127)" colspan=18>&nbsp;</td></tr>
+<tr><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td colspan=6 style="width:60px;height:10px;background:#fff">&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td></tr>
+<tr><td colspan=2 style="width:20px;height:30px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=4 colspan=2>&nbsp;</td><td style="width:10px;height:20px;background:rgb(237,127,127)" rowspan=2>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=3 colspan=2>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff" rowspan=2>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff">&nbsp;</td></tr>
+<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
+<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
+</table>
+<p id="footer">npm-stars &mdash; npm@1.4.10</p>
+
diff --git a/deps/npm/html/doc/cli/npm-start.html b/deps/npm/html/doc/cli/npm-start.html
new file mode 100644
index 000000000..412a9916c
--- /dev/null
+++ b/deps/npm/html/doc/cli/npm-start.html
@@ -0,0 +1,38 @@
+<!doctype html>
+<html>
+ <title>npm-start</title>
+ <meta http-equiv="content-type" value="text/html;utf-8">
+ <link rel="stylesheet" type="text/css" href="../../static/style.css">
+ <link rel="canonical" href="https://www.npmjs.org/doc/cli/npm-start.html">
+ <script async=true src="../../static/toc.js"></script>
+
+ <body>
+ <div id="wrapper">
+
+<h1><a href="../cli/npm-start.html">npm-start</a></h1> <p>Start a package</p>
+<h2 id="synopsis">SYNOPSIS</h2>
+<pre><code>npm start &lt;name&gt;
+</code></pre><h2 id="description">DESCRIPTION</h2>
+<p>This runs a package&#39;s &quot;start&quot; script, if one was provided.</p>
+<h2 id="see-also">SEE ALSO</h2>
+<ul>
+<li><a href="../cli/npm-run-script.html">npm-run-script(1)</a></li>
+<li><a href="../misc/npm-scripts.html">npm-scripts(7)</a></li>
+<li><a href="../cli/npm-test.html">npm-test(1)</a></li>
+<li><a href="../cli/npm-restart.html">npm-restart(1)</a></li>
+<li><a href="../cli/npm-stop.html">npm-stop(1)</a></li>
+</ul>
+
+</div>
+
+<table border=0 cellspacing=0 cellpadding=0 id=npmlogo>
+<tr><td style="width:180px;height:10px;background:rgb(237,127,127)" colspan=18>&nbsp;</td></tr>
+<tr><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td colspan=6 style="width:60px;height:10px;background:#fff">&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td></tr>
+<tr><td colspan=2 style="width:20px;height:30px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=4 colspan=2>&nbsp;</td><td style="width:10px;height:20px;background:rgb(237,127,127)" rowspan=2>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=3 colspan=2>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff" rowspan=2>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff">&nbsp;</td></tr>
+<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
+<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
+</table>
+<p id="footer">npm-start &mdash; npm@1.4.10</p>
+
diff --git a/deps/npm/html/doc/cli/npm-stop.html b/deps/npm/html/doc/cli/npm-stop.html
new file mode 100644
index 000000000..76a83fd56
--- /dev/null
+++ b/deps/npm/html/doc/cli/npm-stop.html
@@ -0,0 +1,38 @@
+<!doctype html>
+<html>
+ <title>npm-stop</title>
+ <meta http-equiv="content-type" value="text/html;utf-8">
+ <link rel="stylesheet" type="text/css" href="../../static/style.css">
+ <link rel="canonical" href="https://www.npmjs.org/doc/cli/npm-stop.html">
+ <script async=true src="../../static/toc.js"></script>
+
+ <body>
+ <div id="wrapper">
+
+<h1><a href="../cli/npm-stop.html">npm-stop</a></h1> <p>Stop a package</p>
+<h2 id="synopsis">SYNOPSIS</h2>
+<pre><code>npm stop &lt;name&gt;
+</code></pre><h2 id="description">DESCRIPTION</h2>
+<p>This runs a package&#39;s &quot;stop&quot; script, if one was provided.</p>
+<h2 id="see-also">SEE ALSO</h2>
+<ul>
+<li><a href="../cli/npm-run-script.html">npm-run-script(1)</a></li>
+<li><a href="../misc/npm-scripts.html">npm-scripts(7)</a></li>
+<li><a href="../cli/npm-test.html">npm-test(1)</a></li>
+<li><a href="../cli/npm-start.html">npm-start(1)</a></li>
+<li><a href="../cli/npm-restart.html">npm-restart(1)</a></li>
+</ul>
+
+</div>
+
+<table border=0 cellspacing=0 cellpadding=0 id=npmlogo>
+<tr><td style="width:180px;height:10px;background:rgb(237,127,127)" colspan=18>&nbsp;</td></tr>
+<tr><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td colspan=6 style="width:60px;height:10px;background:#fff">&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td></tr>
+<tr><td colspan=2 style="width:20px;height:30px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=4 colspan=2>&nbsp;</td><td style="width:10px;height:20px;background:rgb(237,127,127)" rowspan=2>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=3 colspan=2>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff" rowspan=2>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff">&nbsp;</td></tr>
+<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
+<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
+</table>
+<p id="footer">npm-stop &mdash; npm@1.4.10</p>
+
diff --git a/deps/npm/html/doc/cli/npm-submodule.html b/deps/npm/html/doc/cli/npm-submodule.html
new file mode 100644
index 000000000..e8cba1b48
--- /dev/null
+++ b/deps/npm/html/doc/cli/npm-submodule.html
@@ -0,0 +1,46 @@
+<!doctype html>
+<html>
+ <title>npm-submodule</title>
+ <meta http-equiv="content-type" value="text/html;utf-8">
+ <link rel="stylesheet" type="text/css" href="../../static/style.css">
+ <link rel="canonical" href="https://www.npmjs.org/doc/cli/npm-submodule.html">
+ <script async=true src="../../static/toc.js"></script>
+
+ <body>
+ <div id="wrapper">
+
+<h1><a href="../cli/npm-submodule.html">npm-submodule</a></h1> <p>Add a package as a git submodule</p>
+<h2 id="synopsis">SYNOPSIS</h2>
+<pre><code>npm submodule &lt;pkg&gt;
+</code></pre><h2 id="description">DESCRIPTION</h2>
+<p>If the specified package has a git repository url in its package.json
+description, then this command will add it as a git submodule at
+<code>node_modules/&lt;pkg name&gt;</code>.</p>
+<p>This is a convenience only. From then on, it&#39;s up to you to manage
+updates by using the appropriate git commands. npm will stubbornly
+refuse to update, modify, or remove anything with a <code>.git</code> subfolder
+in it.</p>
+<p>This command also does not install missing dependencies, if the package
+does not include them in its git repository. If <code>npm ls</code> reports that
+things are missing, you can either install, link, or submodule them yourself,
+or you can do <code>npm explore &lt;pkgname&gt; -- npm install</code> to install the
+dependencies into the submodule folder.</p>
+<h2 id="see-also">SEE ALSO</h2>
+<ul>
+<li><a href="../files/package.json.html">package.json(5)</a></li>
+<li>git help submodule</li>
+</ul>
+
+</div>
+
+<table border=0 cellspacing=0 cellpadding=0 id=npmlogo>
+<tr><td style="width:180px;height:10px;background:rgb(237,127,127)" colspan=18>&nbsp;</td></tr>
+<tr><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td colspan=6 style="width:60px;height:10px;background:#fff">&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td></tr>
+<tr><td colspan=2 style="width:20px;height:30px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=4 colspan=2>&nbsp;</td><td style="width:10px;height:20px;background:rgb(237,127,127)" rowspan=2>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=3 colspan=2>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff" rowspan=2>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff">&nbsp;</td></tr>
+<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
+<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
+</table>
+<p id="footer">npm-submodule &mdash; npm@1.4.10</p>
+
diff --git a/deps/npm/html/doc/cli/npm-tag.html b/deps/npm/html/doc/cli/npm-tag.html
new file mode 100644
index 000000000..9e7a83f7d
--- /dev/null
+++ b/deps/npm/html/doc/cli/npm-tag.html
@@ -0,0 +1,48 @@
+<!doctype html>
+<html>
+ <title>npm-tag</title>
+ <meta http-equiv="content-type" value="text/html;utf-8">
+ <link rel="stylesheet" type="text/css" href="../../static/style.css">
+ <link rel="canonical" href="https://www.npmjs.org/doc/cli/npm-tag.html">
+ <script async=true src="../../static/toc.js"></script>
+
+ <body>
+ <div id="wrapper">
+
+<h1><a href="../cli/npm-tag.html">npm-tag</a></h1> <p>Tag a published version</p>
+<h2 id="synopsis">SYNOPSIS</h2>
+<pre><code>npm tag &lt;name&gt;@&lt;version&gt; [&lt;tag&gt;]
+</code></pre><h2 id="description">DESCRIPTION</h2>
+<p>Tags the specified version of the package with the specified tag, or the
+<code>--tag</code> config if not specified.</p>
+<p>A tag can be used when installing packages as a reference to a version instead
+of using a specific version number:</p>
+<pre><code>npm install &lt;name&gt;@&lt;tag&gt;
+</code></pre><p>When installing dependencies, a preferred tagged version may be specified:</p>
+<pre><code>npm install --tag &lt;tag&gt;
+</code></pre><p>This also applies to <code>npm dedupe</code>.</p>
+<p>Publishing a package always sets the &quot;latest&quot; tag to the published version.</p>
+<h2 id="see-also">SEE ALSO</h2>
+<ul>
+<li><a href="../cli/npm-publish.html">npm-publish(1)</a></li>
+<li><a href="../cli/npm-install.html">npm-install(1)</a></li>
+<li><a href="../cli/npm-dedupe.html">npm-dedupe(1)</a></li>
+<li><a href="../misc/npm-registry.html">npm-registry(7)</a></li>
+<li><a href="../cli/npm-config.html">npm-config(1)</a></li>
+<li><a href="../misc/npm-config.html">npm-config(7)</a></li>
+<li><a href="../files/npmrc.html">npmrc(5)</a></li>
+</ul>
+
+</div>
+
+<table border=0 cellspacing=0 cellpadding=0 id=npmlogo>
+<tr><td style="width:180px;height:10px;background:rgb(237,127,127)" colspan=18>&nbsp;</td></tr>
+<tr><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td colspan=6 style="width:60px;height:10px;background:#fff">&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td></tr>
+<tr><td colspan=2 style="width:20px;height:30px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=4 colspan=2>&nbsp;</td><td style="width:10px;height:20px;background:rgb(237,127,127)" rowspan=2>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=3 colspan=2>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff" rowspan=2>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff">&nbsp;</td></tr>
+<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
+<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
+</table>
+<p id="footer">npm-tag &mdash; npm@1.4.10</p>
+
diff --git a/deps/npm/html/doc/cli/npm-test.html b/deps/npm/html/doc/cli/npm-test.html
new file mode 100644
index 000000000..155b93005
--- /dev/null
+++ b/deps/npm/html/doc/cli/npm-test.html
@@ -0,0 +1,41 @@
+<!doctype html>
+<html>
+ <title>npm-test</title>
+ <meta http-equiv="content-type" value="text/html;utf-8">
+ <link rel="stylesheet" type="text/css" href="../../static/style.css">
+ <link rel="canonical" href="https://www.npmjs.org/doc/cli/npm-test.html">
+ <script async=true src="../../static/toc.js"></script>
+
+ <body>
+ <div id="wrapper">
+
+<h1><a href="../cli/npm-test.html">npm-test</a></h1> <p>Test a package</p>
+<h2 id="synopsis">SYNOPSIS</h2>
+<pre><code> npm test &lt;name&gt;
+ npm tst &lt;name&gt;
+</code></pre><h2 id="description">DESCRIPTION</h2>
+<p>This runs a package&#39;s &quot;test&quot; script, if one was provided.</p>
+<p>To run tests as a condition of installation, set the <code>npat</code> config to
+true.</p>
+<h2 id="see-also">SEE ALSO</h2>
+<ul>
+<li><a href="../cli/npm-run-script.html">npm-run-script(1)</a></li>
+<li><a href="../misc/npm-scripts.html">npm-scripts(7)</a></li>
+<li><a href="../cli/npm-start.html">npm-start(1)</a></li>
+<li><a href="../cli/npm-restart.html">npm-restart(1)</a></li>
+<li><a href="../cli/npm-stop.html">npm-stop(1)</a></li>
+</ul>
+
+</div>
+
+<table border=0 cellspacing=0 cellpadding=0 id=npmlogo>
+<tr><td style="width:180px;height:10px;background:rgb(237,127,127)" colspan=18>&nbsp;</td></tr>
+<tr><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td colspan=6 style="width:60px;height:10px;background:#fff">&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td></tr>
+<tr><td colspan=2 style="width:20px;height:30px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=4 colspan=2>&nbsp;</td><td style="width:10px;height:20px;background:rgb(237,127,127)" rowspan=2>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=3 colspan=2>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff" rowspan=2>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff">&nbsp;</td></tr>
+<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
+<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
+</table>
+<p id="footer">npm-test &mdash; npm@1.4.10</p>
+
diff --git a/deps/npm/html/doc/cli/npm-uninstall.html b/deps/npm/html/doc/cli/npm-uninstall.html
new file mode 100644
index 000000000..343bc01d8
--- /dev/null
+++ b/deps/npm/html/doc/cli/npm-uninstall.html
@@ -0,0 +1,59 @@
+<!doctype html>
+<html>
+ <title>npm-uninstall</title>
+ <meta http-equiv="content-type" value="text/html;utf-8">
+ <link rel="stylesheet" type="text/css" href="../../static/style.css">
+ <link rel="canonical" href="https://www.npmjs.org/doc/cli/npm-uninstall.html">
+ <script async=true src="../../static/toc.js"></script>
+
+ <body>
+ <div id="wrapper">
+
+<h1><a href="../cli/npm-rm.html">npm-rm</a></h1> <p>Remove a package</p>
+<h2 id="synopsis">SYNOPSIS</h2>
+<pre><code>npm uninstall &lt;name&gt; [--save|--save-dev|--save-optional]
+npm rm (with any of the previous argument usage)
+</code></pre><h2 id="description">DESCRIPTION</h2>
+<p>This uninstalls a package, completely removing everything npm installed
+on its behalf.</p>
+<p>Example:</p>
+<pre><code>npm uninstall sax
+</code></pre><p>In global mode (ie, with <code>-g</code> or <code>--global</code> appended to the command),
+it uninstalls the current package context as a global package.</p>
+<p><code>npm uninstall</code> takes 3 exclusive, optional flags which save or update
+the package version in your main package.json:</p>
+<ul>
+<li><p><code>--save</code>: Package will be removed from your <code>dependencies</code>.</p>
+</li>
+<li><p><code>--save-dev</code>: Package will be removed from your <code>devDependencies</code>.</p>
+</li>
+<li><p><code>--save-optional</code>: Package will be removed from your <code>optionalDependencies</code>.</p>
+</li>
+</ul>
+<p>Examples:</p>
+<pre><code>npm uninstall sax --save
+npm uninstall node-tap --save-dev
+npm uninstall dtrace-provider --save-optional
+</code></pre><h2 id="see-also">SEE ALSO</h2>
+<ul>
+<li><a href="../cli/npm-prune.html">npm-prune(1)</a></li>
+<li><a href="../cli/npm-install.html">npm-install(1)</a></li>
+<li><a href="../files/npm-folders.html">npm-folders(5)</a></li>
+<li><a href="../cli/npm-config.html">npm-config(1)</a></li>
+<li><a href="../misc/npm-config.html">npm-config(7)</a></li>
+<li><a href="../files/npmrc.html">npmrc(5)</a></li>
+</ul>
+
+</div>
+
+<table border=0 cellspacing=0 cellpadding=0 id=npmlogo>
+<tr><td style="width:180px;height:10px;background:rgb(237,127,127)" colspan=18>&nbsp;</td></tr>
+<tr><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td colspan=6 style="width:60px;height:10px;background:#fff">&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td></tr>
+<tr><td colspan=2 style="width:20px;height:30px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=4 colspan=2>&nbsp;</td><td style="width:10px;height:20px;background:rgb(237,127,127)" rowspan=2>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=3 colspan=2>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff" rowspan=2>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff">&nbsp;</td></tr>
+<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
+<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
+</table>
+<p id="footer">npm-uninstall &mdash; npm@1.4.10</p>
+
diff --git a/deps/npm/html/doc/cli/npm-unpublish.html b/deps/npm/html/doc/cli/npm-unpublish.html
new file mode 100644
index 000000000..de53589b5
--- /dev/null
+++ b/deps/npm/html/doc/cli/npm-unpublish.html
@@ -0,0 +1,50 @@
+<!doctype html>
+<html>
+ <title>npm-unpublish</title>
+ <meta http-equiv="content-type" value="text/html;utf-8">
+ <link rel="stylesheet" type="text/css" href="../../static/style.css">
+ <link rel="canonical" href="https://www.npmjs.org/doc/cli/npm-unpublish.html">
+ <script async=true src="../../static/toc.js"></script>
+
+ <body>
+ <div id="wrapper">
+
+<h1><a href="../cli/npm-unpublish.html">npm-unpublish</a></h1> <p>Remove a package from the registry</p>
+<h2 id="synopsis">SYNOPSIS</h2>
+<pre><code>npm unpublish &lt;name&gt;[@&lt;version&gt;]
+</code></pre><h2 id="warning">WARNING</h2>
+<p><strong>It is generally considered bad behavior to remove versions of a library
+that others are depending on!</strong></p>
+<p>Consider using the <code>deprecate</code> command
+instead, if your intent is to encourage users to upgrade.</p>
+<p>There is plenty of room on the registry.</p>
+<h2 id="description">DESCRIPTION</h2>
+<p>This removes a package version from the registry, deleting its
+entry and removing the tarball.</p>
+<p>If no version is specified, or if all versions are removed then
+the root package entry is removed from the registry entirely.</p>
+<p>Even if a package version is unpublished, that specific name and
+version combination can never be reused. In order to publish the
+package again, a new version number must be used.</p>
+<h2 id="see-also">SEE ALSO</h2>
+<ul>
+<li><a href="../cli/npm-deprecate.html">npm-deprecate(1)</a></li>
+<li><a href="../cli/npm-publish.html">npm-publish(1)</a></li>
+<li><a href="../misc/npm-registry.html">npm-registry(7)</a></li>
+<li><a href="../cli/npm-adduser.html">npm-adduser(1)</a></li>
+<li><a href="../cli/npm-owner.html">npm-owner(1)</a></li>
+</ul>
+
+</div>
+
+<table border=0 cellspacing=0 cellpadding=0 id=npmlogo>
+<tr><td style="width:180px;height:10px;background:rgb(237,127,127)" colspan=18>&nbsp;</td></tr>
+<tr><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td colspan=6 style="width:60px;height:10px;background:#fff">&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td></tr>
+<tr><td colspan=2 style="width:20px;height:30px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=4 colspan=2>&nbsp;</td><td style="width:10px;height:20px;background:rgb(237,127,127)" rowspan=2>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=3 colspan=2>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff" rowspan=2>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff">&nbsp;</td></tr>
+<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
+<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
+</table>
+<p id="footer">npm-unpublish &mdash; npm@1.4.10</p>
+
diff --git a/deps/npm/html/doc/cli/npm-update.html b/deps/npm/html/doc/cli/npm-update.html
new file mode 100644
index 000000000..7d624199f
--- /dev/null
+++ b/deps/npm/html/doc/cli/npm-update.html
@@ -0,0 +1,42 @@
+<!doctype html>
+<html>
+ <title>npm-update</title>
+ <meta http-equiv="content-type" value="text/html;utf-8">
+ <link rel="stylesheet" type="text/css" href="../../static/style.css">
+ <link rel="canonical" href="https://www.npmjs.org/doc/cli/npm-update.html">
+ <script async=true src="../../static/toc.js"></script>
+
+ <body>
+ <div id="wrapper">
+
+<h1><a href="../cli/npm-update.html">npm-update</a></h1> <p>Update a package</p>
+<h2 id="synopsis">SYNOPSIS</h2>
+<pre><code>npm update [-g] [&lt;name&gt; [&lt;name&gt; ...]]
+</code></pre><h2 id="description">DESCRIPTION</h2>
+<p>This command will update all the packages listed to the latest version
+(specified by the <code>tag</code> config).</p>
+<p>It will also install missing packages.</p>
+<p>If the <code>-g</code> flag is specified, this command will update globally installed packages.
+If no package name is specified, all packages in the specified location (global or local) will be updated.</p>
+<h2 id="see-also">SEE ALSO</h2>
+<ul>
+<li><a href="../cli/npm-install.html">npm-install(1)</a></li>
+<li><a href="../cli/npm-outdated.html">npm-outdated(1)</a></li>
+<li><a href="../misc/npm-registry.html">npm-registry(7)</a></li>
+<li><a href="../files/npm-folders.html">npm-folders(5)</a></li>
+<li><a href="../cli/npm-ls.html">npm-ls(1)</a></li>
+</ul>
+
+</div>
+
+<table border=0 cellspacing=0 cellpadding=0 id=npmlogo>
+<tr><td style="width:180px;height:10px;background:rgb(237,127,127)" colspan=18>&nbsp;</td></tr>
+<tr><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td colspan=6 style="width:60px;height:10px;background:#fff">&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td></tr>
+<tr><td colspan=2 style="width:20px;height:30px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=4 colspan=2>&nbsp;</td><td style="width:10px;height:20px;background:rgb(237,127,127)" rowspan=2>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=3 colspan=2>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff" rowspan=2>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff">&nbsp;</td></tr>
+<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
+<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
+</table>
+<p id="footer">npm-update &mdash; npm@1.4.10</p>
+
diff --git a/deps/npm/html/doc/cli/npm-version.html b/deps/npm/html/doc/cli/npm-version.html
new file mode 100644
index 000000000..027c8ebfe
--- /dev/null
+++ b/deps/npm/html/doc/cli/npm-version.html
@@ -0,0 +1,59 @@
+<!doctype html>
+<html>
+ <title>npm-version</title>
+ <meta http-equiv="content-type" value="text/html;utf-8">
+ <link rel="stylesheet" type="text/css" href="../../static/style.css">
+ <link rel="canonical" href="https://www.npmjs.org/doc/cli/npm-version.html">
+ <script async=true src="../../static/toc.js"></script>
+
+ <body>
+ <div id="wrapper">
+
+<h1><a href="../cli/npm-version.html">npm-version</a></h1> <p>Bump a package version</p>
+<h2 id="synopsis">SYNOPSIS</h2>
+<pre><code>npm version [&lt;newversion&gt; | major | minor | patch]
+</code></pre><h2 id="description">DESCRIPTION</h2>
+<p>Run this in a package directory to bump the version and write the new
+data back to the package.json file.</p>
+<p>The <code>newversion</code> argument should be a valid semver string, <em>or</em> a valid
+second argument to semver.inc (one of &quot;patch&quot;, &quot;minor&quot;, or
+&quot;major&quot;). In the second case, the existing version will be incremented
+by 1 in the specified field.</p>
+<p>If run in a git repo, it will also create a version commit and tag, and
+fail if the repo is not clean.</p>
+<p>If supplied with <code>--message</code> (shorthand: <code>-m</code>) config option, npm will
+use it as a commit message when creating a version commit. If the
+<code>message</code> config contains <code>%s</code> then that will be replaced with the
+resulting version number. For example:</p>
+<pre><code>npm version patch -m &quot;Upgrade to %s for reasons&quot;
+</code></pre><p>If the <code>sign-git-tag</code> config is set, then the tag will be signed using
+the <code>-s</code> flag to git. Note that you must have a default GPG key set up
+in your git config for this to work properly. For example:</p>
+<pre><code>$ npm config set sign-git-tag true
+$ npm version patch
+
+You need a passphrase to unlock the secret key for
+user: &quot;isaacs (http://blog.izs.me/) &lt;i@izs.me&gt;&quot;
+2048-bit RSA key, ID 6C481CF6, created 2010-08-31
+
+Enter passphrase:
+</code></pre><h2 id="see-also">SEE ALSO</h2>
+<ul>
+<li><a href="../cli/npm-init.html">npm-init(1)</a></li>
+<li><a href="../files/package.json.html">package.json(5)</a></li>
+<li><a href="../misc/semver.html">semver(7)</a></li>
+</ul>
+
+</div>
+
+<table border=0 cellspacing=0 cellpadding=0 id=npmlogo>
+<tr><td style="width:180px;height:10px;background:rgb(237,127,127)" colspan=18>&nbsp;</td></tr>
+<tr><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td colspan=6 style="width:60px;height:10px;background:#fff">&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td></tr>
+<tr><td colspan=2 style="width:20px;height:30px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=4 colspan=2>&nbsp;</td><td style="width:10px;height:20px;background:rgb(237,127,127)" rowspan=2>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=3 colspan=2>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff" rowspan=2>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff">&nbsp;</td></tr>
+<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
+<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
+</table>
+<p id="footer">npm-version &mdash; npm@1.4.10</p>
+
diff --git a/deps/npm/html/doc/cli/npm-view.html b/deps/npm/html/doc/cli/npm-view.html
new file mode 100644
index 000000000..adce11547
--- /dev/null
+++ b/deps/npm/html/doc/cli/npm-view.html
@@ -0,0 +1,86 @@
+<!doctype html>
+<html>
+ <title>npm-view</title>
+ <meta http-equiv="content-type" value="text/html;utf-8">
+ <link rel="stylesheet" type="text/css" href="../../static/style.css">
+ <link rel="canonical" href="https://www.npmjs.org/doc/cli/npm-view.html">
+ <script async=true src="../../static/toc.js"></script>
+
+ <body>
+ <div id="wrapper">
+
+<h1><a href="../cli/npm-view.html">npm-view</a></h1> <p>View registry info</p>
+<h2 id="synopsis">SYNOPSIS</h2>
+<pre><code>npm view &lt;name&gt;[@&lt;version&gt;] [&lt;field&gt;[.&lt;subfield&gt;]...]
+npm v &lt;name&gt;[@&lt;version&gt;] [&lt;field&gt;[.&lt;subfield&gt;]...]
+</code></pre><h2 id="description">DESCRIPTION</h2>
+<p>This command shows data about a package and prints it to the stream
+referenced by the <code>outfd</code> config, which defaults to stdout.</p>
+<p>To show the package registry entry for the <code>connect</code> package, you can do
+this:</p>
+<pre><code>npm view connect
+</code></pre><p>The default version is &quot;latest&quot; if unspecified.</p>
+<p>Field names can be specified after the package descriptor.
+For example, to show the dependencies of the <code>ronn</code> package at version
+0.3.5, you could do the following:</p>
+<pre><code>npm view ronn@0.3.5 dependencies
+</code></pre><p>You can view child field by separating them with a period.
+To view the git repository URL for the latest version of npm, you could
+do this:</p>
+<pre><code>npm view npm repository.url
+</code></pre><p>This makes it easy to view information about a dependency with a bit of
+shell scripting. For example, to view all the data about the version of
+opts that ronn depends on, you can do this:</p>
+<pre><code>npm view opts@$(npm view ronn dependencies.opts)
+</code></pre><p>For fields that are arrays, requesting a non-numeric field will return
+all of the values from the objects in the list. For example, to get all
+the contributor names for the &quot;express&quot; project, you can do this:</p>
+<pre><code>npm view express contributors.email
+</code></pre><p>You may also use numeric indices in square braces to specifically select
+an item in an array field. To just get the email address of the first
+contributor in the list, you can do this:</p>
+<pre><code>npm view express contributors[0].email
+</code></pre><p>Multiple fields may be specified, and will be printed one after another.
+For exampls, to get all the contributor names and email addresses, you
+can do this:</p>
+<pre><code>npm view express contributors.name contributors.email
+</code></pre><p>&quot;Person&quot; fields are shown as a string if they would be shown as an
+object. So, for example, this will show the list of npm contributors in
+the shortened string format. (See <code><a href="../files/package.json.html">package.json(5)</a></code> for more on this.)</p>
+<pre><code>npm view npm contributors
+</code></pre><p>If a version range is provided, then data will be printed for every
+matching version of the package. This will show which version of jsdom
+was required by each matching version of yui3:</p>
+<pre><code>npm view yui3@&#39;&gt;0.5.4&#39; dependencies.jsdom
+</code></pre><h2 id="output">OUTPUT</h2>
+<p>If only a single string field for a single version is output, then it
+will not be colorized or quoted, so as to enable piping the output to
+another command. If the field is an object, it will be output as a JavaScript object literal.</p>
+<p>If the --json flag is given, the outputted fields will be JSON.</p>
+<p>If the version range matches multiple versions, than each printed value
+will be prefixed with the version it applies to.</p>
+<p>If multiple fields are requested, than each of them are prefixed with
+the field name.</p>
+<h2 id="see-also">SEE ALSO</h2>
+<ul>
+<li><a href="../cli/npm-search.html">npm-search(1)</a></li>
+<li><a href="../misc/npm-registry.html">npm-registry(7)</a></li>
+<li><a href="../cli/npm-config.html">npm-config(1)</a></li>
+<li><a href="../misc/npm-config.html">npm-config(7)</a></li>
+<li><a href="../files/npmrc.html">npmrc(5)</a></li>
+<li><a href="../cli/npm-docs.html">npm-docs(1)</a></li>
+</ul>
+
+</div>
+
+<table border=0 cellspacing=0 cellpadding=0 id=npmlogo>
+<tr><td style="width:180px;height:10px;background:rgb(237,127,127)" colspan=18>&nbsp;</td></tr>
+<tr><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td colspan=6 style="width:60px;height:10px;background:#fff">&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td></tr>
+<tr><td colspan=2 style="width:20px;height:30px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=4 colspan=2>&nbsp;</td><td style="width:10px;height:20px;background:rgb(237,127,127)" rowspan=2>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=3 colspan=2>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff" rowspan=2>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff">&nbsp;</td></tr>
+<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
+<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
+</table>
+<p id="footer">npm-view &mdash; npm@1.4.10</p>
+
diff --git a/deps/npm/html/doc/cli/npm-whoami.html b/deps/npm/html/doc/cli/npm-whoami.html
new file mode 100644
index 000000000..e91ab740d
--- /dev/null
+++ b/deps/npm/html/doc/cli/npm-whoami.html
@@ -0,0 +1,37 @@
+<!doctype html>
+<html>
+ <title>npm-whoami</title>
+ <meta http-equiv="content-type" value="text/html;utf-8">
+ <link rel="stylesheet" type="text/css" href="../../static/style.css">
+ <link rel="canonical" href="https://www.npmjs.org/doc/cli/npm-whoami.html">
+ <script async=true src="../../static/toc.js"></script>
+
+ <body>
+ <div id="wrapper">
+
+<h1><a href="../cli/npm-whoami.html">npm-whoami</a></h1> <p>Display npm username</p>
+<h2 id="synopsis">SYNOPSIS</h2>
+<pre><code>npm whoami
+</code></pre><h2 id="description">DESCRIPTION</h2>
+<p>Print the <code>username</code> config to standard output.</p>
+<h2 id="see-also">SEE ALSO</h2>
+<ul>
+<li><a href="../cli/npm-config.html">npm-config(1)</a></li>
+<li><a href="../misc/npm-config.html">npm-config(7)</a></li>
+<li><a href="../files/npmrc.html">npmrc(5)</a></li>
+<li><a href="../cli/npm-adduser.html">npm-adduser(1)</a></li>
+</ul>
+
+</div>
+
+<table border=0 cellspacing=0 cellpadding=0 id=npmlogo>
+<tr><td style="width:180px;height:10px;background:rgb(237,127,127)" colspan=18>&nbsp;</td></tr>
+<tr><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td colspan=6 style="width:60px;height:10px;background:#fff">&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td></tr>
+<tr><td colspan=2 style="width:20px;height:30px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=4 colspan=2>&nbsp;</td><td style="width:10px;height:20px;background:rgb(237,127,127)" rowspan=2>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=3 colspan=2>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff" rowspan=2>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff">&nbsp;</td></tr>
+<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
+<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
+</table>
+<p id="footer">npm-whoami &mdash; npm@1.4.10</p>
+
diff --git a/deps/npm/html/doc/cli/npm.html b/deps/npm/html/doc/cli/npm.html
new file mode 100644
index 000000000..6381af290
--- /dev/null
+++ b/deps/npm/html/doc/cli/npm.html
@@ -0,0 +1,145 @@
+<!doctype html>
+<html>
+ <title>npm</title>
+ <meta http-equiv="content-type" value="text/html;utf-8">
+ <link rel="stylesheet" type="text/css" href="../../static/style.css">
+ <link rel="canonical" href="https://www.npmjs.org/doc/cli/npm.html">
+ <script async=true src="../../static/toc.js"></script>
+
+ <body>
+ <div id="wrapper">
+
+<h1><a href="../cli/npm.html">npm</a></h1> <p>node package manager</p>
+<h2 id="synopsis">SYNOPSIS</h2>
+<pre><code>npm &lt;command&gt; [args]
+</code></pre><h2 id="version">VERSION</h2>
+<p>1.4.10</p>
+<h2 id="description">DESCRIPTION</h2>
+<p>npm is the package manager for the Node JavaScript platform. It puts
+modules in place so that node can find them, and manages dependency
+conflicts intelligently.</p>
+<p>It is extremely configurable to support a wide variety of use cases.
+Most commonly, it is used to publish, discover, install, and develop node
+programs.</p>
+<p>Run <code>npm help</code> to get a list of available commands.</p>
+<h2 id="introduction">INTRODUCTION</h2>
+<p>You probably got npm because you want to install stuff.</p>
+<p>Use <code>npm install blerg</code> to install the latest version of &quot;blerg&quot;. Check out
+<code><a href="../cli/npm-install.html">npm-install(1)</a></code> for more info. It can do a lot of stuff.</p>
+<p>Use the <code>npm search</code> command to show everything that&#39;s available.
+Use <code>npm ls</code> to show everything you&#39;ve installed.</p>
+<h2 id="directories">DIRECTORIES</h2>
+<p>See <code><a href="../files/npm-folders.html">npm-folders(5)</a></code> to learn about where npm puts stuff.</p>
+<p>In particular, npm has two modes of operation:</p>
+<ul>
+<li>global mode:<br>npm installs packages into the install prefix at
+<code>prefix/lib/node_modules</code> and bins are installed in <code>prefix/bin</code>.</li>
+<li>local mode:<br>npm installs packages into the current project directory, which
+defaults to the current working directory. Packages are installed to
+<code>./node_modules</code>, and bins are installed to <code>./node_modules/.bin</code>.</li>
+</ul>
+<p>Local mode is the default. Use <code>--global</code> or <code>-g</code> on any command to
+operate in global mode instead.</p>
+<h2 id="developer-usage">DEVELOPER USAGE</h2>
+<p>If you&#39;re using npm to develop and publish your code, check out the
+following help topics:</p>
+<ul>
+<li>json:
+Make a package.json file. See <code><a href="../files/package.json.html">package.json(5)</a></code>.</li>
+<li>link:
+For linking your current working code into Node&#39;s path, so that you
+don&#39;t have to reinstall every time you make a change. Use
+<code>npm link</code> to do this.</li>
+<li>install:
+It&#39;s a good idea to install things if you don&#39;t need the symbolic link.
+Especially, installing other peoples code from the registry is done via
+<code>npm install</code></li>
+<li>adduser:
+Create an account or log in. Credentials are stored in the
+user config file.</li>
+<li>publish:
+Use the <code>npm publish</code> command to upload your code to the registry.</li>
+</ul>
+<h2 id="configuration">CONFIGURATION</h2>
+<p>npm is extremely configurable. It reads its configuration options from
+5 places.</p>
+<ul>
+<li>Command line switches:<br>Set a config with <code>--key val</code>. All keys take a value, even if they
+are booleans (the config parser doesn&#39;t know what the options are at
+the time of parsing.) If no value is provided, then the option is set
+to boolean <code>true</code>.</li>
+<li>Environment Variables:<br>Set any config by prefixing the name in an environment variable with
+<code>npm_config_</code>. For example, <code>export npm_config_key=val</code>.</li>
+<li>User Configs:<br>The file at $HOME/.npmrc is an ini-formatted list of configs. If
+present, it is parsed. If the <code>userconfig</code> option is set in the cli
+or env, then that will be used instead.</li>
+<li>Global Configs:<br>The file found at ../etc/npmrc (from the node executable, by default
+this resolves to /usr/local/etc/npmrc) will be parsed if it is found.
+If the <code>globalconfig</code> option is set in the cli, env, or user config,
+then that file is parsed instead.</li>
+<li>Defaults:<br>npm&#39;s default configuration options are defined in
+lib/utils/config-defs.js. These must not be changed.</li>
+</ul>
+<p>See <code><a href="../misc/npm-config.html">npm-config(7)</a></code> for much much more information.</p>
+<h2 id="contributions">CONTRIBUTIONS</h2>
+<p>Patches welcome!</p>
+<ul>
+<li>code:
+Read through <code><a href="../misc/npm-coding-style.html">npm-coding-style(7)</a></code> if you plan to submit code.
+You don&#39;t have to agree with it, but you do have to follow it.</li>
+<li>docs:
+If you find an error in the documentation, edit the appropriate markdown
+file in the &quot;doc&quot; folder. (Don&#39;t worry about generating the man page.)</li>
+</ul>
+<p>Contributors are listed in npm&#39;s <code>package.json</code> file. You can view them
+easily by doing <code>npm view npm contributors</code>.</p>
+<p>If you would like to contribute, but don&#39;t know what to work on, check
+the issues list or ask on the mailing list.</p>
+<ul>
+<li><a href="http://github.com/npm/npm/issues">http://github.com/npm/npm/issues</a></li>
+<li><a href="&#109;&#x61;&#105;&#108;&#x74;&#111;&#58;&#110;&#112;&#109;&#x2d;&#x40;&#103;&#111;&#x6f;&#x67;&#108;&#x65;&#103;&#x72;&#x6f;&#117;&#112;&#x73;&#46;&#x63;&#x6f;&#x6d;">&#110;&#112;&#109;&#x2d;&#x40;&#103;&#111;&#x6f;&#x67;&#108;&#x65;&#103;&#x72;&#x6f;&#117;&#112;&#x73;&#46;&#x63;&#x6f;&#x6d;</a></li>
+</ul>
+<h2 id="bugs">BUGS</h2>
+<p>When you find issues, please report them:</p>
+<ul>
+<li>web:
+<a href="http://github.com/npm/npm/issues">http://github.com/npm/npm/issues</a></li>
+<li>email:
+<a href="&#109;&#x61;&#x69;&#108;&#116;&#x6f;&#x3a;&#x6e;&#112;&#109;&#x2d;&#x40;&#103;&#111;&#x6f;&#103;&#108;&#x65;&#x67;&#114;&#111;&#x75;&#x70;&#115;&#x2e;&#x63;&#111;&#x6d;">&#x6e;&#112;&#109;&#x2d;&#x40;&#103;&#111;&#x6f;&#103;&#108;&#x65;&#x67;&#114;&#111;&#x75;&#x70;&#115;&#x2e;&#x63;&#111;&#x6d;</a></li>
+</ul>
+<p>Be sure to include <em>all</em> of the output from the npm command that didn&#39;t work
+as expected. The <code>npm-debug.log</code> file is also helpful to provide.</p>
+<p>You can also look for isaacs in #node.js on irc://irc.freenode.net. He
+will no doubt tell you to put the output in a gist or email.</p>
+<h2 id="author">AUTHOR</h2>
+<p><a href="http://blog.izs.me/">Isaac Z. Schlueter</a> ::
+<a href="https://github.com/isaacs/">isaacs</a> ::
+<a href="http://twitter.com/izs">@izs</a> ::
+<a href="&#109;&#x61;&#x69;&#108;&#116;&#x6f;&#x3a;&#x69;&#64;&#105;&#x7a;&#115;&#46;&#x6d;&#x65;">&#x69;&#64;&#105;&#x7a;&#115;&#46;&#x6d;&#x65;</a></p>
+<h2 id="see-also">SEE ALSO</h2>
+<ul>
+<li><a href="../cli/npm-help.html">npm-help(1)</a></li>
+<li><a href="../misc/npm-faq.html">npm-faq(7)</a></li>
+<li><a href="../../doc/README.html">README</a></li>
+<li><a href="../files/package.json.html">package.json(5)</a></li>
+<li><a href="../cli/npm-install.html">npm-install(1)</a></li>
+<li><a href="../cli/npm-config.html">npm-config(1)</a></li>
+<li><a href="../misc/npm-config.html">npm-config(7)</a></li>
+<li><a href="../files/npmrc.html">npmrc(5)</a></li>
+<li><a href="../misc/npm-index.html">npm-index(7)</a></li>
+<li><a href="../api/npm.html">npm(3)</a></li>
+</ul>
+
+</div>
+
+<table border=0 cellspacing=0 cellpadding=0 id=npmlogo>
+<tr><td style="width:180px;height:10px;background:rgb(237,127,127)" colspan=18>&nbsp;</td></tr>
+<tr><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td colspan=6 style="width:60px;height:10px;background:#fff">&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td></tr>
+<tr><td colspan=2 style="width:20px;height:30px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=4 colspan=2>&nbsp;</td><td style="width:10px;height:20px;background:rgb(237,127,127)" rowspan=2>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=3 colspan=2>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff" rowspan=2>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff">&nbsp;</td></tr>
+<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
+<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
+</table>
+<p id="footer">npm &mdash; npm@1.4.10</p>
+
diff --git a/deps/npm/html/doc/coding-style.html b/deps/npm/html/doc/coding-style.html
deleted file mode 100644
index 8ddb8b725..000000000
--- a/deps/npm/html/doc/coding-style.html
+++ /dev/null
@@ -1,217 +0,0 @@
-<!doctype html>
-<html>
- <title>coding-style</title>
- <meta http-equiv="content-type" value="text/html;utf-8">
- <link rel="stylesheet" type="text/css" href="../static/style.css">
-
- <body>
- <div id="wrapper">
-<h1><a href="../doc/coding-style.html">coding-style</a></h1> <p>npm&#39;s &quot;funny&quot; coding style</p>
-
-<h2 id="DESCRIPTION">DESCRIPTION</h2>
-
-<p>npm&#39;s coding style is a bit unconventional. It is not different for
-difference&#39;s sake, but rather a carefully crafted style that is
-designed to reduce visual clutter and make bugs more apparent.</p>
-
-<p>If you want to contribute to npm (which is very encouraged), you should
-make your code conform to npm&#39;s style.</p>
-
-<p>Note: this concerns npm&#39;s code not the specific packages at npmjs.org</p>
-
-<h2 id="Line-Length">Line Length</h2>
-
-<p>Keep lines shorter than 80 characters. It&#39;s better for lines to be
-too short than to be too long. Break up long lists, objects, and other
-statements onto multiple lines.</p>
-
-<h2 id="Indentation">Indentation</h2>
-
-<p>Two-spaces. Tabs are better, but they look like hell in web browsers
-(and on github), and node uses 2 spaces, so that&#39;s that.</p>
-
-<p>Configure your editor appropriately.</p>
-
-<h2 id="Curly-braces">Curly braces</h2>
-
-<p>Curly braces belong on the same line as the thing that necessitates them.</p>
-
-<p>Bad:</p>
-
-<pre><code>function ()
-{</code></pre>
-
-<p>Good:</p>
-
-<pre><code>function () {</code></pre>
-
-<p>If a block needs to wrap to the next line, use a curly brace. Don&#39;t
-use it if it doesn&#39;t.</p>
-
-<p>Bad:</p>
-
-<pre><code>if (foo) { bar() }
-while (foo)
- bar()</code></pre>
-
-<p>Good:</p>
-
-<pre><code>if (foo) bar()
-while (foo) {
- bar()
-}</code></pre>
-
-<h2 id="Semicolons">Semicolons</h2>
-
-<p>Don&#39;t use them except in four situations:</p>
-
-<ul><li><code>for (;;)</code> loops. They&#39;re actually required.</li><li>null loops like: <code>while (something) ;</code> (But you&#39;d better have a good
-reason for doing that.)</li><li><code>case &quot;foo&quot;: doSomething(); break</code></li><li>In front of a leading <code>(</code> or <code>[</code> at the start of the line.
-This prevents the expression from being interpreted
-as a function call or property access, respectively.</li></ul>
-
-<p>Some examples of good semicolon usage:</p>
-
-<pre><code>;(x || y).doSomething()
-;[a, b, c].forEach(doSomething)
-for (var i = 0; i &lt; 10; i ++) {
- switch (state) {
- case &quot;begin&quot;: start(); continue
- case &quot;end&quot;: finish(); break
- default: throw new Error(&quot;unknown state&quot;)
- }
- end()
-}</code></pre>
-
-<p>Note that starting lines with <code>-</code> and <code>+</code> also should be prefixed
-with a semicolon, but this is much less common.</p>
-
-<h2 id="Comma-First">Comma First</h2>
-
-<p>If there is a list of things separated by commas, and it wraps
-across multiple lines, put the comma at the start of the next
-line, directly below the token that starts the list. Put the
-final token in the list on a line by itself. For example:</p>
-
-<pre><code>var magicWords = [ &quot;abracadabra&quot;
- , &quot;gesundheit&quot;
- , &quot;ventrilo&quot;
- ]
- , spells = { &quot;fireball&quot; : function () { setOnFire() }
- , &quot;water&quot; : function () { putOut() }
- }
- , a = 1
- , b = &quot;abc&quot;
- , etc
- , somethingElse</code></pre>
-
-<h2 id="Whitespace">Whitespace</h2>
-
-<p>Put a single space in front of ( for anything other than a function call.
-Also use a single space wherever it makes things more readable.</p>
-
-<p>Don&#39;t leave trailing whitespace at the end of lines. Don&#39;t indent empty
-lines. Don&#39;t use more spaces than are helpful.</p>
-
-<h2 id="Functions">Functions</h2>
-
-<p>Use named functions. They make stack traces a lot easier to read.</p>
-
-<h2 id="Callbacks-Sync-async-Style">Callbacks, Sync/async Style</h2>
-
-<p>Use the asynchronous/non-blocking versions of things as much as possible.
-It might make more sense for npm to use the synchronous fs APIs, but this
-way, the fs and http and child process stuff all uses the same callback-passing
-methodology.</p>
-
-<p>The callback should always be the last argument in the list. Its first
-argument is the Error or null.</p>
-
-<p>Be very careful never to ever ever throw anything. It&#39;s worse than useless.
-Just send the error message back as the first argument to the callback.</p>
-
-<h2 id="Errors">Errors</h2>
-
-<p>Always create a new Error object with your message. Don&#39;t just return a
-string message to the callback. Stack traces are handy.</p>
-
-<h2 id="Logging">Logging</h2>
-
-<p>Logging is done using the <a href="https://github.com/isaacs/npmlog">npmlog</a>
-utility.</p>
-
-<p>Please clean up logs when they are no longer helpful. In particular,
-logging the same object over and over again is not helpful. Logs should
-report what&#39;s happening so that it&#39;s easier to track down where a fault
-occurs.</p>
-
-<p>Use appropriate log levels. See <code><a href="../doc/config.html">config(1)</a></code> and search for
-&quot;loglevel&quot;.</p>
-
-<h2 id="Case-naming-etc">Case, naming, etc.</h2>
-
-<p>Use <code>lowerCamelCase</code> for multiword identifiers when they refer to objects,
-functions, methods, members, or anything not specified in this section.</p>
-
-<p>Use <code>UpperCamelCase</code> for class names (things that you&#39;d pass to &quot;new&quot;).</p>
-
-<p>Use <code>all-lower-hyphen-css-case</code> for multiword filenames and config keys.</p>
-
-<p>Use named functions. They make stack traces easier to follow.</p>
-
-<p>Use <code>CAPS_SNAKE_CASE</code> for constants, things that should never change
-and are rarely used.</p>
-
-<p>Use a single uppercase letter for function names where the function
-would normally be anonymous, but needs to call itself recursively. It
-makes it clear that it&#39;s a &quot;throwaway&quot; function.</p>
-
-<h2 id="null-undefined-false-0">null, undefined, false, 0</h2>
-
-<p>Boolean variables and functions should always be either <code>true</code> or
-<code>false</code>. Don&#39;t set it to 0 unless it&#39;s supposed to be a number.</p>
-
-<p>When something is intentionally missing or removed, set it to <code>null</code>.</p>
-
-<p>Don&#39;t set things to <code>undefined</code>. Reserve that value to mean &quot;not yet
-set to anything.&quot;</p>
-
-<p>Boolean objects are verboten.</p>
-
-<h2 id="SEE-ALSO">SEE ALSO</h2>
-
-<ul><li><a href="../doc/developers.html">developers(1)</a></li><li><a href="../doc/faq.html">faq(1)</a></li><li><a href="../doc/npm.html">npm(1)</a></li></ul>
-</div>
-<p id="footer">coding-style &mdash; npm@1.2.30</p>
-<script>
-;(function () {
-var wrapper = document.getElementById("wrapper")
-var els = Array.prototype.slice.call(wrapper.getElementsByTagName("*"), 0)
- .filter(function (el) {
- return el.parentNode === wrapper
- && el.tagName.match(/H[1-6]/)
- && el.id
- })
-var l = 2
- , toc = document.createElement("ul")
-toc.innerHTML = els.map(function (el) {
- var i = el.tagName.charAt(1)
- , out = ""
- while (i > l) {
- out += "<ul>"
- l ++
- }
- while (i < l) {
- out += "</ul>"
- l --
- }
- out += "<li><a href='#" + el.id + "'>" +
- ( el.innerText || el.text || el.innerHTML)
- + "</a>"
- return out
-}).join("\n")
-toc.id = "toc"
-document.body.appendChild(toc)
-})()
-</script>
-</body></html>
diff --git a/deps/npm/html/doc/completion.html b/deps/npm/html/doc/completion.html
deleted file mode 100644
index 06e7d515d..000000000
--- a/deps/npm/html/doc/completion.html
+++ /dev/null
@@ -1,68 +0,0 @@
-<!doctype html>
-<html>
- <title>completion</title>
- <meta http-equiv="content-type" value="text/html;utf-8">
- <link rel="stylesheet" type="text/css" href="../static/style.css">
-
- <body>
- <div id="wrapper">
-<h1><a href="../doc/completion.html">completion</a></h1> <p>Tab Completion for npm</p>
-
-<h2 id="SYNOPSIS">SYNOPSIS</h2>
-
-<pre><code>. &lt;(npm completion)</code></pre>
-
-<h2 id="DESCRIPTION">DESCRIPTION</h2>
-
-<p>Enables tab-completion in all npm commands.</p>
-
-<p>The synopsis above
-loads the completions into your current shell. Adding it to
-your ~/.bashrc or ~/.zshrc will make the completions available
-everywhere.</p>
-
-<p>You may of course also pipe the output of npm completion to a file
-such as <code>/usr/local/etc/bash_completion.d/npm</code> if you have a system
-that will read that file for you.</p>
-
-<p>When <code>COMP_CWORD</code>, <code>COMP_LINE</code>, and <code>COMP_POINT</code> are defined in the
-environment, <code>npm completion</code> acts in &quot;plumbing mode&quot;, and outputs
-completions based on the arguments.</p>
-
-<h2 id="SEE-ALSO">SEE ALSO</h2>
-
-<ul><li><a href="../doc/developers.html">developers(1)</a></li><li><a href="../doc/faq.html">faq(1)</a></li><li><a href="../doc/npm.html">npm(1)</a></li></ul>
-</div>
-<p id="footer">completion &mdash; npm@1.2.30</p>
-<script>
-;(function () {
-var wrapper = document.getElementById("wrapper")
-var els = Array.prototype.slice.call(wrapper.getElementsByTagName("*"), 0)
- .filter(function (el) {
- return el.parentNode === wrapper
- && el.tagName.match(/H[1-6]/)
- && el.id
- })
-var l = 2
- , toc = document.createElement("ul")
-toc.innerHTML = els.map(function (el) {
- var i = el.tagName.charAt(1)
- , out = ""
- while (i > l) {
- out += "<ul>"
- l ++
- }
- while (i < l) {
- out += "</ul>"
- l --
- }
- out += "<li><a href='#" + el.id + "'>" +
- ( el.innerText || el.text || el.innerHTML)
- + "</a>"
- return out
-}).join("\n")
-toc.id = "toc"
-document.body.appendChild(toc)
-})()
-</script>
-</body></html>
diff --git a/deps/npm/html/doc/config.html b/deps/npm/html/doc/config.html
deleted file mode 100644
index 2e8546f0d..000000000
--- a/deps/npm/html/doc/config.html
+++ /dev/null
@@ -1,813 +0,0 @@
-<!doctype html>
-<html>
- <title>config</title>
- <meta http-equiv="content-type" value="text/html;utf-8">
- <link rel="stylesheet" type="text/css" href="../static/style.css">
-
- <body>
- <div id="wrapper">
-<h1><a href="../doc/config.html">config</a></h1> <p>Manage the npm configuration file</p>
-
-<h2 id="SYNOPSIS">SYNOPSIS</h2>
-
-<pre><code>npm config set &lt;key&gt; &lt;value&gt; [--global]
-npm config get &lt;key&gt;
-npm config delete &lt;key&gt;
-npm config list
-npm config edit
-npm get &lt;key&gt;
-npm set &lt;key&gt; &lt;value&gt; [--global]</code></pre>
-
-<h2 id="DESCRIPTION">DESCRIPTION</h2>
-
-<p>npm gets its configuration values from 6 sources, in this priority:</p>
-
-<h3 id="Command-Line-Flags">Command Line Flags</h3>
-
-<p>Putting <code>--foo bar</code> on the command line sets the
-<code>foo</code> configuration parameter to <code>&quot;bar&quot;</code>. A <code>--</code> argument tells the cli
-parser to stop reading flags. A <code>--flag</code> parameter that is at the <em>end</em> of
-the command will be given the value of <code>true</code>.</p>
-
-<h3 id="Environment-Variables">Environment Variables</h3>
-
-<p>Any environment variables that start with <code>npm_config_</code> will be interpreted
-as a configuration parameter. For example, putting <code>npm_config_foo=bar</code> in
-your environment will set the <code>foo</code> configuration parameter to <code>bar</code>. Any
-environment configurations that are not given a value will be given the value
-of <code>true</code>. Config values are case-insensitive, so <code>NPM_CONFIG_FOO=bar</code> will
-work the same.</p>
-
-<h3 id="Per-user-config-file">Per-user config file</h3>
-
-<p><code>$HOME/.npmrc</code> (or the <code>userconfig</code> param, if set above)</p>
-
-<p>This file is an ini-file formatted list of <code>key = value</code> parameters.
-Environment variables can be replaced using <code>${VARIABLE_NAME}</code>. For example:</p>
-
-<pre><code>prefix = ${HOME}/.npm-packages</code></pre>
-
-<h3 id="Global-config-file">Global config file</h3>
-
-<p><code>$PREFIX/etc/npmrc</code> (or the <code>globalconfig</code> param, if set above):
-This file is an ini-file formatted list of <code>key = value</code> parameters.
-Environment variables can be replaced as above.</p>
-
-<h3 id="Built-in-config-file">Built-in config file</h3>
-
-<p><code>path/to/npm/itself/npmrc</code></p>
-
-<p>This is an unchangeable &quot;builtin&quot;
-configuration file that npm keeps consistent across updates. Set
-fields in here using the <code>./configure</code> script that comes with npm.
-This is primarily for distribution maintainers to override default
-configs in a standard and consistent manner.</p>
-
-<h3 id="Default-Configs">Default Configs</h3>
-
-<p>A set of configuration parameters that are internal to npm, and are
-defaults if nothing else is specified.</p>
-
-<h2 id="Sub-commands">Sub-commands</h2>
-
-<p>Config supports the following sub-commands:</p>
-
-<h3 id="set">set</h3>
-
-<pre><code>npm config set key value</code></pre>
-
-<p>Sets the config key to the value.</p>
-
-<p>If value is omitted, then it sets it to &quot;true&quot;.</p>
-
-<h3 id="get">get</h3>
-
-<pre><code>npm config get key</code></pre>
-
-<p>Echo the config value to stdout.</p>
-
-<h3 id="list">list</h3>
-
-<pre><code>npm config list</code></pre>
-
-<p>Show all the config settings.</p>
-
-<h3 id="delete">delete</h3>
-
-<pre><code>npm config delete key</code></pre>
-
-<p>Deletes the key from all configuration files.</p>
-
-<h3 id="edit">edit</h3>
-
-<pre><code>npm config edit</code></pre>
-
-<p>Opens the config file in an editor. Use the <code>--global</code> flag to edit the
-global config.</p>
-
-<h2 id="Shorthands-and-Other-CLI-Niceties">Shorthands and Other CLI Niceties</h2>
-
-<p>The following shorthands are parsed on the command-line:</p>
-
-<ul><li><code>-v</code>: <code>--version</code></li><li><code>-h</code>, <code>-?</code>, <code>--help</code>, <code>-H</code>: <code>--usage</code></li><li><code>-s</code>, <code>--silent</code>: <code>--loglevel silent</code></li><li><code>-q</code>, <code>--quiet</code>: <code>--loglevel warn</code></li><li><code>-d</code>: <code>--loglevel info</code></li><li><code>-dd</code>, <code>--verbose</code>: <code>--loglevel verbose</code></li><li><code>-ddd</code>: <code>--loglevel silly</code></li><li><code>-g</code>: <code>--global</code></li><li><code>-l</code>: <code>--long</code></li><li><code>-m</code>: <code>--message</code></li><li><code>-p</code>, <code>--porcelain</code>: <code>--parseable</code></li><li><code>-reg</code>: <code>--registry</code></li><li><code>-v</code>: <code>--version</code></li><li><code>-f</code>: <code>--force</code></li><li><code>-desc</code>: <code>--description</code></li><li><code>-S</code>: <code>--save</code></li><li><code>-D</code>: <code>--save-dev</code></li><li><code>-O</code>: <code>--save-optional</code></li><li><code>-B</code>: <code>--save-bundle</code></li><li><code>-y</code>: <code>--yes</code></li><li><code>-n</code>: <code>--yes false</code></li><li><code>ll</code> and <code>la</code> commands: <code>ls --long</code></li></ul>
-
-<p>If the specified configuration param resolves unambiguously to a known
-configuration parameter, then it is expanded to that configuration
-parameter. For example:</p>
-
-<pre><code>npm ls --par
-# same as:
-npm ls --parseable</code></pre>
-
-<p>If multiple single-character shorthands are strung together, and the
-resulting combination is unambiguously not some other configuration
-param, then it is expanded to its various component pieces. For
-example:</p>
-
-<pre><code>npm ls -gpld
-# same as:
-npm ls --global --parseable --long --loglevel info</code></pre>
-
-<h2 id="Per-Package-Config-Settings">Per-Package Config Settings</h2>
-
-<p>When running scripts (see <code><a href="../doc/scripts.html">scripts(1)</a></code>)
-the package.json &quot;config&quot; keys are overwritten in the environment if
-there is a config param of <code>&lt;name&gt;[@&lt;version&gt;]:&lt;key&gt;</code>. For example, if
-the package.json has this:</p>
-
-<pre><code>{ &quot;name&quot; : &quot;foo&quot;
-, &quot;config&quot; : { &quot;port&quot; : &quot;8080&quot; }
-, &quot;scripts&quot; : { &quot;start&quot; : &quot;node server.js&quot; } }</code></pre>
-
-<p>and the server.js is this:</p>
-
-<pre><code>http.createServer(...).listen(process.env.npm_package_config_port)</code></pre>
-
-<p>then the user could change the behavior by doing:</p>
-
-<pre><code>npm config set foo:port 80</code></pre>
-
-<h2 id="Config-Settings">Config Settings</h2>
-
-<h3 id="always-auth">always-auth</h3>
-
-<ul><li>Default: false</li><li>Type: Boolean</li></ul>
-
-<p>Force npm to always require authentication when accessing the registry,
-even for <code>GET</code> requests.</p>
-
-<h3 id="bin-links">bin-links</h3>
-
-<ul><li>Default: <code>true</code></li><li>Type: Boolean</li></ul>
-
-<p>Tells npm to create symlinks (or <code>.cmd</code> shims on Windows) for package
-executables.</p>
-
-<p>Set to false to have it not do this. This can be used to work around
-the fact that some file systems don&#39;t support symlinks, even on
-ostensibly Unix systems.</p>
-
-<h3 id="browser">browser</h3>
-
-<ul><li>Default: OS X: <code>&quot;open&quot;</code>, Windows: <code>&quot;start&quot;</code>, Others: <code>&quot;xdg-open&quot;</code></li><li>Type: String</li></ul>
-
-<p>The browser that is called by the <code>npm docs</code> command to open websites.</p>
-
-<h3 id="ca">ca</h3>
-
-<ul><li>Default: The npm CA certificate</li><li>Type: String or null</li></ul>
-
-<p>The Certificate Authority signing certificate that is trusted for SSL
-connections to the registry.</p>
-
-<p>Set to <code>null</code> to only allow &quot;known&quot; registrars, or to a specific CA cert
-to trust only that specific signing authority.</p>
-
-<p>See also the <code>strict-ssl</code> config.</p>
-
-<h3 id="cache">cache</h3>
-
-<ul><li>Default: Windows: <code>%APPDATA%\npm-cache</code>, Posix: <code>~/.npm</code></li><li>Type: path</li></ul>
-
-<p>The location of npm&#39;s cache directory. See <code><a href="../doc/cache.html">cache(1)</a></code></p>
-
-<h3 id="cache-lock-stale">cache-lock-stale</h3>
-
-<ul><li>Default: 60000 (1 minute)</li><li>Type: Number</li></ul>
-
-<p>The number of ms before cache folder lockfiles are considered stale.</p>
-
-<h3 id="cache-lock-retries">cache-lock-retries</h3>
-
-<ul><li>Default: 10</li><li>Type: Number</li></ul>
-
-<p>Number of times to retry to acquire a lock on cache folder lockfiles.</p>
-
-<h3 id="cache-lock-wait">cache-lock-wait</h3>
-
-<ul><li>Default: 10000 (10 seconds)</li><li>Type: Number</li></ul>
-
-<p>Number of ms to wait for cache lock files to expire.</p>
-
-<h3 id="cache-max">cache-max</h3>
-
-<ul><li>Default: Infinity</li><li>Type: Number</li></ul>
-
-<p>The maximum time (in seconds) to keep items in the registry cache before
-re-checking against the registry.</p>
-
-<p>Note that no purging is done unless the <code>npm cache clean</code> command is
-explicitly used, and that only GET requests use the cache.</p>
-
-<h3 id="cache-min">cache-min</h3>
-
-<ul><li>Default: 10</li><li>Type: Number</li></ul>
-
-<p>The minimum time (in seconds) to keep items in the registry cache before
-re-checking against the registry.</p>
-
-<p>Note that no purging is done unless the <code>npm cache clean</code> command is
-explicitly used, and that only GET requests use the cache.</p>
-
-<h3 id="color">color</h3>
-
-<ul><li>Default: true on Posix, false on Windows</li><li>Type: Boolean or <code>&quot;always&quot;</code></li></ul>
-
-<p>If false, never shows colors. If <code>&quot;always&quot;</code> then always shows colors.
-If true, then only prints color codes for tty file descriptors.</p>
-
-<h3 id="coverage">coverage</h3>
-
-<ul><li>Default: false</li><li>Type: Boolean</li></ul>
-
-<p>A flag to tell test-harness to run with their coverage options enabled,
-if they respond to the <code>npm_config_coverage</code> environment variable.</p>
-
-<h3 id="depth">depth</h3>
-
-<ul><li>Default: Infinity</li><li>Type: Number</li></ul>
-
-<p>The depth to go when recursing directories for <code>npm ls</code> and
-<code>npm cache ls</code>.</p>
-
-<h3 id="description">description</h3>
-
-<ul><li>Default: true</li><li>Type: Boolean</li></ul>
-
-<p>Show the description in <code>npm search</code></p>
-
-<h3 id="dev">dev</h3>
-
-<ul><li>Default: false</li><li>Type: Boolean</li></ul>
-
-<p>Install <code>dev-dependencies</code> along with packages.</p>
-
-<p>Note that <code>dev-dependencies</code> are also installed if the <code>npat</code> flag is
-set.</p>
-
-<h3 id="editor">editor</h3>
-
-<ul><li>Default: <code>EDITOR</code> environment variable if set, or <code>&quot;vi&quot;</code> on Posix,
-or <code>&quot;notepad&quot;</code> on Windows.</li><li>Type: path</li></ul>
-
-<p>The command to run for <code>npm edit</code> or <code>npm config edit</code>.</p>
-
-<h3 id="engine-strict">engine-strict</h3>
-
-<ul><li>Default: false</li><li>Type: Boolean</li></ul>
-
-<p>If set to true, then npm will stubbornly refuse to install (or even
-consider installing) any package that claims to not be compatible with
-the current Node.js version.</p>
-
-<h3 id="force">force</h3>
-
-<ul><li>Default: false</li><li>Type: Boolean</li></ul>
-
-<p>Makes various commands more forceful.</p>
-
-<ul><li>lifecycle script failure does not block progress.</li><li>publishing clobbers previously published versions.</li><li>skips cache when requesting from the registry.</li><li>prevents checks against clobbering non-npm files.</li></ul>
-
-<h3 id="fetch-retries">fetch-retries</h3>
-
-<ul><li>Default: 2</li><li>Type: Number</li></ul>
-
-<p>The &quot;retries&quot; config for the <code>retry</code> module to use when fetching
-packages from the registry.</p>
-
-<h3 id="fetch-retry-factor">fetch-retry-factor</h3>
-
-<ul><li>Default: 10</li><li>Type: Number</li></ul>
-
-<p>The &quot;factor&quot; config for the <code>retry</code> module to use when fetching
-packages.</p>
-
-<h3 id="fetch-retry-mintimeout">fetch-retry-mintimeout</h3>
-
-<ul><li>Default: 10000 (10 seconds)</li><li>Type: Number</li></ul>
-
-<p>The &quot;minTimeout&quot; config for the <code>retry</code> module to use when fetching
-packages.</p>
-
-<h3 id="fetch-retry-maxtimeout">fetch-retry-maxtimeout</h3>
-
-<ul><li>Default: 60000 (1 minute)</li><li>Type: Number</li></ul>
-
-<p>The &quot;maxTimeout&quot; config for the <code>retry</code> module to use when fetching
-packages.</p>
-
-<h3 id="git">git</h3>
-
-<ul><li>Default: <code>&quot;git&quot;</code></li><li>Type: String</li></ul>
-
-<p>The command to use for git commands. If git is installed on the
-computer, but is not in the <code>PATH</code>, then set this to the full path to
-the git binary.</p>
-
-<h3 id="global">global</h3>
-
-<ul><li>Default: false</li><li>Type: Boolean</li></ul>
-
-<p>Operates in &quot;global&quot; mode, so that packages are installed into the
-<code>prefix</code> folder instead of the current working directory. See
-<code><a href="../doc/folders.html">folders(1)</a></code> for more on the differences in behavior.</p>
-
-<ul><li>packages are installed into the <code>{prefix}/lib/node_modules</code> folder, instead of the
-current working directory.</li><li>bin files are linked to <code>{prefix}/bin</code></li><li>man pages are linked to <code>{prefix}/share/man</code></li></ul>
-
-<h3 id="globalconfig">globalconfig</h3>
-
-<ul><li>Default: {prefix}/etc/npmrc</li><li>Type: path</li></ul>
-
-<p>The config file to read for global config options.</p>
-
-<h3 id="globalignorefile">globalignorefile</h3>
-
-<ul><li>Default: {prefix}/etc/npmignore</li><li>Type: path</li></ul>
-
-<p>The config file to read for global ignore patterns to apply to all users
-and all projects.</p>
-
-<p>If not found, but there is a &quot;gitignore&quot; file in the
-same directory, then that will be used instead.</p>
-
-<h3 id="group">group</h3>
-
-<ul><li>Default: GID of the current process</li><li>Type: String or Number</li></ul>
-
-<p>The group to use when running package scripts in global mode as the root
-user.</p>
-
-<h3 id="https-proxy">https-proxy</h3>
-
-<ul><li>Default: the <code>HTTPS_PROXY</code> or <code>https_proxy</code> or <code>HTTP_PROXY</code> or
-<code>http_proxy</code> environment variables.</li><li>Type: url</li></ul>
-
-<p>A proxy to use for outgoing https requests.</p>
-
-<h3 id="user-agent">user-agent</h3>
-
-<ul><li>Default: node/{process.version} {process.platform} {process.arch}</li><li>Type: String</li></ul>
-
-<p>Sets a User-Agent to the request header</p>
-
-<h3 id="ignore">ignore</h3>
-
-<ul><li>Default: &quot;&quot;</li><li>Type: string</li></ul>
-
-<p>A white-space separated list of glob patterns of files to always exclude
-from packages when building tarballs.</p>
-
-<h3 id="init-module">init-module</h3>
-
-<ul><li>Default: ~/.npm-init.js</li><li>Type: path</li></ul>
-
-<p>A module that will be loaded by the <code>npm init</code> command. See the
-documentation for the
-<a href="https://github.com/isaacs/init-package-json">init-package-json</a> module
-for more information, or <a href="../doc/init.html">init(1)</a>.</p>
-
-<h3 id="init-version">init.version</h3>
-
-<ul><li>Default: &quot;0.0.0&quot;</li><li>Type: semver</li></ul>
-
-<p>The value <code>npm init</code> should use by default for the package version.</p>
-
-<h3 id="init-author-name">init.author.name</h3>
-
-<ul><li>Default: &quot;&quot;</li><li>Type: String</li></ul>
-
-<p>The value <code>npm init</code> should use by default for the package author&#39;s name.</p>
-
-<h3 id="init-author-email">init.author.email</h3>
-
-<ul><li>Default: &quot;&quot;</li><li>Type: String</li></ul>
-
-<p>The value <code>npm init</code> should use by default for the package author&#39;s email.</p>
-
-<h3 id="init-author-url">init.author.url</h3>
-
-<ul><li>Default: &quot;&quot;</li><li>Type: String</li></ul>
-
-<p>The value <code>npm init</code> should use by default for the package author&#39;s homepage.</p>
-
-<h3 id="json">json</h3>
-
-<ul><li>Default: false</li><li>Type: Boolean</li></ul>
-
-<p>Whether or not to output JSON data, rather than the normal output.</p>
-
-<p>This feature is currently experimental, and the output data structures
-for many commands is either not implemented in JSON yet, or subject to
-change. Only the output from <code>npm ls --json</code> is currently valid.</p>
-
-<h3 id="link">link</h3>
-
-<ul><li>Default: false</li><li>Type: Boolean</li></ul>
-
-<p>If true, then local installs will link if there is a suitable globally
-installed package.</p>
-
-<p>Note that this means that local installs can cause things to be
-installed into the global space at the same time. The link is only done
-if one of the two conditions are met:</p>
-
-<ul><li>The package is not already installed globally, or</li><li>the globally installed version is identical to the version that is
-being installed locally.</li></ul>
-
-<h3 id="loglevel">loglevel</h3>
-
-<ul><li>Default: &quot;http&quot;</li><li>Type: String</li><li>Values: &quot;silent&quot;, &quot;win&quot;, &quot;error&quot;, &quot;warn&quot;, &quot;http&quot;, &quot;info&quot;, &quot;verbose&quot;, &quot;silly&quot;</li></ul>
-
-<p>What level of logs to report. On failure, <em>all</em> logs are written to
-<code>npm-debug.log</code> in the current working directory.</p>
-
-<p>Any logs of a higher level than the setting are shown.
-The default is &quot;http&quot;, which shows http, warn, and error output.</p>
-
-<h3 id="logstream">logstream</h3>
-
-<ul><li>Default: process.stderr</li><li>Type: Stream</li></ul>
-
-<p>This is the stream that is passed to the
-<a href="https://github.com/isaacs/npmlog">npmlog</a> module at run time.</p>
-
-<p>It cannot be set from the command line, but if you are using npm
-programmatically, you may wish to send logs to somewhere other than
-stderr.</p>
-
-<p>If the <code>color</code> config is set to true, then this stream will receive
-colored output if it is a TTY.</p>
-
-<h3 id="long">long</h3>
-
-<ul><li>Default: false</li><li>Type: Boolean</li></ul>
-
-<p>Show extended information in <code>npm ls</code></p>
-
-<h3 id="message">message</h3>
-
-<ul><li>Default: &quot;%s&quot;</li><li>Type: String</li></ul>
-
-<p>Commit message which is used by <code>npm version</code> when creating version commit.</p>
-
-<p>Any &quot;%s&quot; in the message will be replaced with the version number.</p>
-
-<h3 id="node-version">node-version</h3>
-
-<ul><li>Default: process.version</li><li>Type: semver or false</li></ul>
-
-<p>The node version to use when checking package&#39;s &quot;engines&quot; hash.</p>
-
-<h3 id="npat">npat</h3>
-
-<ul><li>Default: false</li><li>Type: Boolean</li></ul>
-
-<p>Run tests on installation and report results to the
-<code>npaturl</code>.</p>
-
-<h3 id="npaturl">npaturl</h3>
-
-<ul><li>Default: Not yet implemented</li><li>Type: url</li></ul>
-
-<p>The url to report npat test results.</p>
-
-<h3 id="onload-script">onload-script</h3>
-
-<ul><li>Default: false</li><li>Type: path</li></ul>
-
-<p>A node module to <code>require()</code> when npm loads. Useful for programmatic
-usage.</p>
-
-<h3 id="optional">optional</h3>
-
-<ul><li>Default: true</li><li>Type: Boolean</li></ul>
-
-<p>Attempt to install packages in the <code>optionalDependencies</code> hash. Note
-that if these packages fail to install, the overall installation
-process is not aborted.</p>
-
-<h3 id="parseable">parseable</h3>
-
-<ul><li>Default: false</li><li>Type: Boolean</li></ul>
-
-<p>Output parseable results from commands that write to
-standard output.</p>
-
-<h3 id="prefix">prefix</h3>
-
-<ul><li>Default: see <a href="../doc/folders.html">folders(1)</a></li><li>Type: path</li></ul>
-
-<p>The location to install global items. If set on the command line, then
-it forces non-global commands to run in the specified folder.</p>
-
-<h3 id="production">production</h3>
-
-<ul><li>Default: false</li><li>Type: Boolean</li></ul>
-
-<p>Set to true to run in &quot;production&quot; mode.</p>
-
-<ol><li>devDependencies are not installed at the topmost level when running
-local <code>npm install</code> without any arguments.</li><li>Set the NODE_ENV=&quot;production&quot; for lifecycle scripts.</li></ol>
-
-<h3 id="proprietary-attribs">proprietary-attribs</h3>
-
-<ul><li>Default: true</li><li>Type: Boolean</li></ul>
-
-<p>Whether or not to include proprietary extended attributes in the
-tarballs created by npm.</p>
-
-<p>Unless you are expecting to unpack package tarballs with something other
-than npm -- particularly a very outdated tar implementation -- leave
-this as true.</p>
-
-<h3 id="proxy">proxy</h3>
-
-<ul><li>Default: <code>HTTP_PROXY</code> or <code>http_proxy</code> environment variable, or null</li><li>Type: url</li></ul>
-
-<p>A proxy to use for outgoing http requests.</p>
-
-<h3 id="rebuild-bundle">rebuild-bundle</h3>
-
-<ul><li>Default: true</li><li>Type: Boolean</li></ul>
-
-<p>Rebuild bundled dependencies after installation.</p>
-
-<h3 id="registry">registry</h3>
-
-<ul><li>Default: https://registry.npmjs.org/</li><li>Type: url</li></ul>
-
-<p>The base URL of the npm package registry.</p>
-
-<h3 id="rollback">rollback</h3>
-
-<ul><li>Default: true</li><li>Type: Boolean</li></ul>
-
-<p>Remove failed installs.</p>
-
-<h3 id="save">save</h3>
-
-<ul><li>Default: false</li><li>Type: Boolean</li></ul>
-
-<p>Save installed packages to a package.json file as dependencies.</p>
-
-<p>When used with the <code>npm rm</code> command, it removes it from the dependencies
-hash.</p>
-
-<p>Only works if there is already a package.json file present.</p>
-
-<h3 id="save-bundle">save-bundle</h3>
-
-<ul><li>Default: false</li><li>Type: Boolean</li></ul>
-
-<p>If a package would be saved at install time by the use of <code>--save</code>,
-<code>--save-dev</code>, or <code>--save-optional</code>, then also put it in the
-<code>bundleDependencies</code> list.</p>
-
-<p>When used with the <code>npm rm</code> command, it removes it from the
-bundledDependencies list.</p>
-
-<h3 id="save-dev">save-dev</h3>
-
-<ul><li>Default: false</li><li>Type: Boolean</li></ul>
-
-<p>Save installed packages to a package.json file as devDependencies.</p>
-
-<p>When used with the <code>npm rm</code> command, it removes it from the devDependencies
-hash.</p>
-
-<p>Only works if there is already a package.json file present.</p>
-
-<h3 id="save-optional">save-optional</h3>
-
-<ul><li>Default: false</li><li>Type: Boolean</li></ul>
-
-<p>Save installed packages to a package.json file as optionalDependencies.</p>
-
-<p>When used with the <code>npm rm</code> command, it removes it from the devDependencies
-hash.</p>
-
-<p>Only works if there is already a package.json file present.</p>
-
-<h3 id="searchopts">searchopts</h3>
-
-<ul><li>Default: &quot;&quot;</li><li>Type: String</li></ul>
-
-<p>Space-separated options that are always passed to search.</p>
-
-<h3 id="searchexclude">searchexclude</h3>
-
-<ul><li>Default: &quot;&quot;</li><li>Type: String</li></ul>
-
-<p>Space-separated options that limit the results from search.</p>
-
-<h3 id="searchsort">searchsort</h3>
-
-<ul><li>Default: &quot;name&quot;</li><li>Type: String</li><li>Values: &quot;name&quot;, &quot;-name&quot;, &quot;date&quot;, &quot;-date&quot;, &quot;description&quot;,
-&quot;-description&quot;, &quot;keywords&quot;, &quot;-keywords&quot;</li></ul>
-
-<p>Indication of which field to sort search results by. Prefix with a <code>-</code>
-character to indicate reverse sort.</p>
-
-<h3 id="shell">shell</h3>
-
-<ul><li>Default: SHELL environment variable, or &quot;bash&quot; on Posix, or &quot;cmd&quot; on
-Windows</li><li>Type: path</li></ul>
-
-<p>The shell to run for the <code>npm explore</code> command.</p>
-
-<h3 id="shrinkwrap">shrinkwrap</h3>
-
-<ul><li>Default: true</li><li>Type: Boolean</li></ul>
-
-<p>If set to false, then ignore <code>npm-shrinkwrap.json</code> files when
-installing.</p>
-
-<h3 id="sign-git-tag">sign-git-tag</h3>
-
-<ul><li>Default: false</li><li>Type: Boolean</li></ul>
-
-<p>If set to true, then the <code>npm version</code> command will tag the version
-using <code>-s</code> to add a signature.</p>
-
-<p>Note that git requires you to have set up GPG keys in your git configs
-for this to work properly.</p>
-
-<h3 id="strict-ssl">strict-ssl</h3>
-
-<ul><li>Default: true</li><li>Type: Boolean</li></ul>
-
-<p>Whether or not to do SSL key validation when making requests to the
-registry via https.</p>
-
-<p>See also the <code>ca</code> config.</p>
-
-<h3 id="tag">tag</h3>
-
-<ul><li>Default: latest</li><li>Type: String</li></ul>
-
-<p>If you ask npm to install a package and don&#39;t tell it a specific version, then
-it will install the specified tag.</p>
-
-<p>Also the tag that is added to the package@version specified by the <code>npm
-tag</code> command, if no explicit tag is given.</p>
-
-<h3 id="tmp">tmp</h3>
-
-<ul><li>Default: TMPDIR environment variable, or &quot;/tmp&quot;</li><li>Type: path</li></ul>
-
-<p>Where to store temporary files and folders. All temp files are deleted
-on success, but left behind on failure for forensic purposes.</p>
-
-<h3 id="unicode">unicode</h3>
-
-<ul><li>Default: true</li><li>Type: Boolean</li></ul>
-
-<p>When set to true, npm uses unicode characters in the tree output. When
-false, it uses ascii characters to draw trees.</p>
-
-<h3 id="unsafe-perm">unsafe-perm</h3>
-
-<ul><li>Default: false if running as root, true otherwise</li><li>Type: Boolean</li></ul>
-
-<p>Set to true to suppress the UID/GID switching when running package
-scripts. If set explicitly to false, then installing as a non-root user
-will fail.</p>
-
-<h3 id="usage">usage</h3>
-
-<ul><li>Default: false</li><li>Type: Boolean</li></ul>
-
-<p>Set to show short usage output (like the -H output)
-instead of complete help when doing <code><a href="../doc/help.html">help(1)</a></code>.</p>
-
-<h3 id="user">user</h3>
-
-<ul><li>Default: &quot;nobody&quot;</li><li>Type: String or Number</li></ul>
-
-<p>The UID to set to when running package scripts as root.</p>
-
-<h3 id="username">username</h3>
-
-<ul><li>Default: null</li><li>Type: String</li></ul>
-
-<p>The username on the npm registry. Set with <code>npm adduser</code></p>
-
-<h3 id="userconfig">userconfig</h3>
-
-<ul><li>Default: ~/.npmrc</li><li>Type: path</li></ul>
-
-<p>The location of user-level configuration settings.</p>
-
-<h3 id="userignorefile">userignorefile</h3>
-
-<ul><li>Default: ~/.npmignore</li><li>Type: path</li></ul>
-
-<p>The location of a user-level ignore file to apply to all packages.</p>
-
-<p>If not found, but there is a .gitignore file in the same directory, then
-that will be used instead.</p>
-
-<h3 id="umask">umask</h3>
-
-<ul><li>Default: 022</li><li>Type: Octal numeric string</li></ul>
-
-<p>The &quot;umask&quot; value to use when setting the file creation mode on files
-and folders.</p>
-
-<p>Folders and executables are given a mode which is <code>0777</code> masked against
-this value. Other files are given a mode which is <code>0666</code> masked against
-this value. Thus, the defaults are <code>0755</code> and <code>0644</code> respectively.</p>
-
-<h3 id="version">version</h3>
-
-<ul><li>Default: false</li><li>Type: boolean</li></ul>
-
-<p>If true, output the npm version and exit successfully.</p>
-
-<p>Only relevant when specified explicitly on the command line.</p>
-
-<h3 id="versions">versions</h3>
-
-<ul><li>Default: false</li><li>Type: boolean</li></ul>
-
-<p>If true, output the npm version as well as node&#39;s <code>process.versions</code>
-hash, and exit successfully.</p>
-
-<p>Only relevant when specified explicitly on the command line.</p>
-
-<h3 id="viewer">viewer</h3>
-
-<ul><li>Default: &quot;man&quot; on Posix, &quot;browser&quot; on Windows</li><li>Type: path</li></ul>
-
-<p>The program to use to view help content.</p>
-
-<p>Set to <code>&quot;browser&quot;</code> to view html help content in the default web browser.</p>
-
-<h3 id="yes">yes</h3>
-
-<ul><li>Default: null</li><li>Type: Boolean or null</li></ul>
-
-<p>If set to <code>null</code>, then prompt the user for responses in some
-circumstances.</p>
-
-<p>If set to <code>true</code>, then answer &quot;yes&quot; to any prompt. If set to <code>false</code>
-then answer &quot;no&quot; to any prompt.</p>
-
-<h2 id="SEE-ALSO">SEE ALSO</h2>
-
-<ul><li><a href="../doc/folders.html">folders(1)</a></li><li><a href="../doc/npm.html">npm(1)</a></li></ul>
-</div>
-<p id="footer">config &mdash; npm@1.2.30</p>
-<script>
-;(function () {
-var wrapper = document.getElementById("wrapper")
-var els = Array.prototype.slice.call(wrapper.getElementsByTagName("*"), 0)
- .filter(function (el) {
- return el.parentNode === wrapper
- && el.tagName.match(/H[1-6]/)
- && el.id
- })
-var l = 2
- , toc = document.createElement("ul")
-toc.innerHTML = els.map(function (el) {
- var i = el.tagName.charAt(1)
- , out = ""
- while (i > l) {
- out += "<ul>"
- l ++
- }
- while (i < l) {
- out += "</ul>"
- l --
- }
- out += "<li><a href='#" + el.id + "'>" +
- ( el.innerText || el.text || el.innerHTML)
- + "</a>"
- return out
-}).join("\n")
-toc.id = "toc"
-document.body.appendChild(toc)
-})()
-</script>
-</body></html>
diff --git a/deps/npm/html/doc/dedupe.html b/deps/npm/html/doc/dedupe.html
deleted file mode 100644
index c82f069bd..000000000
--- a/deps/npm/html/doc/dedupe.html
+++ /dev/null
@@ -1,92 +0,0 @@
-<!doctype html>
-<html>
- <title>dedupe</title>
- <meta http-equiv="content-type" value="text/html;utf-8">
- <link rel="stylesheet" type="text/css" href="../static/style.css">
-
- <body>
- <div id="wrapper">
-<h1><a href="../doc/dedupe.html">dedupe</a></h1> <p>Reduce duplication</p>
-
-<h2 id="SYNOPSIS">SYNOPSIS</h2>
-
-<pre><code>npm dedupe [package names...]</code></pre>
-
-<h2 id="DESCRIPTION">DESCRIPTION</h2>
-
-<p>Searches the local package tree and attempts to simplify the overall
-structure by moving dependencies further up the tree, where they can
-be more effectively shared by multiple dependent packages.</p>
-
-<p>For example, consider this dependency graph:</p>
-
-<pre><code>a
-+-- b &lt;-- depends on c@1.0.x
-| `-- c@1.0.3
-`-- d &lt;-- depends on c@~1.0.9
- `-- c@1.0.10</code></pre>
-
-<p>In this case, <code><a href="../doc/dedupe.html">dedupe(1)</a></code> will transform the tree to:</p>
-
-<pre><code>a
-+-- b
-+-- d
-`-- c@1.0.10</code></pre>
-
-<p>Because of the hierarchical nature of node&#39;s module lookup, b and d
-will both get their dependency met by the single c package at the root
-level of the tree.</p>
-
-<p>If a suitable version exists at the target location in the tree
-already, then it will be left untouched, but the other duplicates will
-be deleted.</p>
-
-<p>If no suitable version can be found, then a warning is printed, and
-nothing is done.</p>
-
-<p>If any arguments are supplied, then they are filters, and only the
-named packages will be touched.</p>
-
-<p>Note that this operation transforms the dependency tree, and may
-result in packages getting updated versions, perhaps from the npm
-registry.</p>
-
-<p>This feature is experimental, and may change in future versions.</p>
-
-<h2 id="SEE-ALSO">SEE ALSO</h2>
-
-<ul><li><a href="../doc/ls.html">ls(1)</a></li><li><a href="../doc/update.html">update(1)</a></li><li><a href="../doc/install.html">install(1)</a></li></ul>
-</div>
-<p id="footer">dedupe &mdash; npm@1.2.30</p>
-<script>
-;(function () {
-var wrapper = document.getElementById("wrapper")
-var els = Array.prototype.slice.call(wrapper.getElementsByTagName("*"), 0)
- .filter(function (el) {
- return el.parentNode === wrapper
- && el.tagName.match(/H[1-6]/)
- && el.id
- })
-var l = 2
- , toc = document.createElement("ul")
-toc.innerHTML = els.map(function (el) {
- var i = el.tagName.charAt(1)
- , out = ""
- while (i > l) {
- out += "<ul>"
- l ++
- }
- while (i < l) {
- out += "</ul>"
- l --
- }
- out += "<li><a href='#" + el.id + "'>" +
- ( el.innerText || el.text || el.innerHTML)
- + "</a>"
- return out
-}).join("\n")
-toc.id = "toc"
-document.body.appendChild(toc)
-})()
-</script>
-</body></html>
diff --git a/deps/npm/html/doc/deprecate.html b/deps/npm/html/doc/deprecate.html
deleted file mode 100644
index 67803ee62..000000000
--- a/deps/npm/html/doc/deprecate.html
+++ /dev/null
@@ -1,66 +0,0 @@
-<!doctype html>
-<html>
- <title>deprecate</title>
- <meta http-equiv="content-type" value="text/html;utf-8">
- <link rel="stylesheet" type="text/css" href="../static/style.css">
-
- <body>
- <div id="wrapper">
-<h1><a href="../doc/deprecate.html">deprecate</a></h1> <p>Deprecate a version of a package</p>
-
-<h2 id="SYNOPSIS">SYNOPSIS</h2>
-
-<pre><code>npm deprecate &lt;name&gt;[@&lt;version&gt;] &lt;message&gt;</code></pre>
-
-<h2 id="DESCRIPTION">DESCRIPTION</h2>
-
-<p>This command will update the npm registry entry for a package, providing
-a deprecation warning to all who attempt to install it.</p>
-
-<p>It works on version ranges as well as specific versions, so you can do
-something like this:</p>
-
-<pre><code>npm deprecate my-thing@&quot;&lt; 0.2.3&quot; &quot;critical bug fixed in v0.2.3&quot;</code></pre>
-
-<p>Note that you must be the package owner to deprecate something. See the
-<code>owner</code> and <code>adduser</code> help topics.</p>
-
-<p>To un-deprecate a package, specify an empty string (<code>&quot;&quot;</code>) for the <code>message</code> argument.</p>
-
-<h2 id="SEE-ALSO">SEE ALSO</h2>
-
-<ul><li><a href="../doc/publish.html">publish(1)</a></li><li><a href="../doc/registry.html">registry(1)</a></li></ul>
-</div>
-<p id="footer">deprecate &mdash; npm@1.2.30</p>
-<script>
-;(function () {
-var wrapper = document.getElementById("wrapper")
-var els = Array.prototype.slice.call(wrapper.getElementsByTagName("*"), 0)
- .filter(function (el) {
- return el.parentNode === wrapper
- && el.tagName.match(/H[1-6]/)
- && el.id
- })
-var l = 2
- , toc = document.createElement("ul")
-toc.innerHTML = els.map(function (el) {
- var i = el.tagName.charAt(1)
- , out = ""
- while (i > l) {
- out += "<ul>"
- l ++
- }
- while (i < l) {
- out += "</ul>"
- l --
- }
- out += "<li><a href='#" + el.id + "'>" +
- ( el.innerText || el.text || el.innerHTML)
- + "</a>"
- return out
-}).join("\n")
-toc.id = "toc"
-document.body.appendChild(toc)
-})()
-</script>
-</body></html>
diff --git a/deps/npm/html/doc/developers.html b/deps/npm/html/doc/developers.html
deleted file mode 100644
index 1e6de37f7..000000000
--- a/deps/npm/html/doc/developers.html
+++ /dev/null
@@ -1,209 +0,0 @@
-<!doctype html>
-<html>
- <title>developers</title>
- <meta http-equiv="content-type" value="text/html;utf-8">
- <link rel="stylesheet" type="text/css" href="../static/style.css">
-
- <body>
- <div id="wrapper">
-<h1><a href="../doc/developers.html">developers</a></h1> <p>Developer Guide</p>
-
-<h2 id="DESCRIPTION">DESCRIPTION</h2>
-
-<p>So, you&#39;ve decided to use npm to develop (and maybe publish/deploy)
-your project.</p>
-
-<p>Fantastic!</p>
-
-<p>There are a few things that you need to do above the simple steps
-that your users will do to install your program.</p>
-
-<h2 id="About-These-Documents">About These Documents</h2>
-
-<p>These are man pages. If you install npm, you should be able to
-then do <code>man npm-thing</code> to get the documentation on a particular
-topic, or <code>npm help thing</code> to see the same information.</p>
-
-<h2 id="What-is-a-package">What is a <code>package</code></h2>
-
-<p>A package is:</p>
-
-<ul><li>a) a folder containing a program described by a package.json file</li><li>b) a gzipped tarball containing (a)</li><li>c) a url that resolves to (b)</li><li>d) a <code>&lt;name&gt;@&lt;version&gt;</code> that is published on the registry with (c)</li><li>e) a <code>&lt;name&gt;@&lt;tag&gt;</code> that points to (d)</li><li>f) a <code>&lt;name&gt;</code> that has a &quot;latest&quot; tag satisfying (e)</li><li>g) a <code>git</code> url that, when cloned, results in (a).</li></ul>
-
-<p>Even if you never publish your package, you can still get a lot of
-benefits of using npm if you just want to write a node program (a), and
-perhaps if you also want to be able to easily install it elsewhere
-after packing it up into a tarball (b).</p>
-
-<p>Git urls can be of the form:</p>
-
-<pre><code>git://github.com/user/project.git#commit-ish
-git+ssh://user@hostname:project.git#commit-ish
-git+http://user@hostname/project/blah.git#commit-ish
-git+https://user@hostname/project/blah.git#commit-ish</code></pre>
-
-<p>The <code>commit-ish</code> can be any tag, sha, or branch which can be supplied as
-an argument to <code>git checkout</code>. The default is <code>master</code>.</p>
-
-<h2 id="The-package-json-File">The package.json File</h2>
-
-<p>You need to have a <code>package.json</code> file in the root of your project to do
-much of anything with npm. That is basically the whole interface.</p>
-
-<p>See <code><a href="../doc/json.html">json(1)</a></code> for details about what goes in that file. At the very
-least, you need:</p>
-
-<ul><li><p>name:
-This should be a string that identifies your project. Please do not
-use the name to specify that it runs on node, or is in JavaScript.
-You can use the &quot;engines&quot; field to explicitly state the versions of
-node (or whatever else) that your program requires, and it&#39;s pretty
-well assumed that it&#39;s javascript.</p><p>It does not necessarily need to match your github repository name.</p><p>So, <code>node-foo</code> and <code>bar-js</code> are bad names. <code>foo</code> or <code>bar</code> are better.</p></li><li><p>version:
-A semver-compatible version.</p></li><li><p>engines:
-Specify the versions of node (or whatever else) that your program
-runs on. The node API changes a lot, and there may be bugs or new
-functionality that you depend on. Be explicit.</p></li><li><p>author:
-Take some credit.</p></li><li><p>scripts:
-If you have a special compilation or installation script, then you
-should put it in the <code>scripts</code> hash. You should definitely have at
-least a basic smoke-test command as the &quot;scripts.test&quot; field.
-See <a href="../doc/scripts.html">scripts(1)</a>.</p></li><li><p>main:
-If you have a single module that serves as the entry point to your
-program (like what the &quot;foo&quot; package gives you at require(&quot;foo&quot;)),
-then you need to specify that in the &quot;main&quot; field.</p></li><li><p>directories:
-This is a hash of folders. The best ones to include are &quot;lib&quot; and
-&quot;doc&quot;, but if you specify a folder full of man pages in &quot;man&quot;, then
-they&#39;ll get installed just like these ones.</p></li></ul>
-
-<p>You can use <code>npm init</code> in the root of your package in order to get you
-started with a pretty basic package.json file. See <code><a href="../doc/init.html">init(1)</a></code> for
-more info.</p>
-
-<h2 id="Keeping-files-out-of-your-package">Keeping files <em>out</em> of your package</h2>
-
-<p>Use a <code>.npmignore</code> file to keep stuff out of your package. If there&#39;s
-no <code>.npmignore</code> file, but there <em>is</em> a <code>.gitignore</code> file, then npm will
-ignore the stuff matched by the <code>.gitignore</code> file. If you <em>want</em> to
-include something that is excluded by your <code>.gitignore</code> file, you can
-create an empty <code>.npmignore</code> file to override it.</p>
-
-<p>By default, the following paths and files are ignored, so there&#39;s no
-need to add them to <code>.npmignore</code> explicitly:</p>
-
-<ul><li><code>.*.swp</code></li><li><code>._*</code></li><li><code>.DS_Store</code></li><li><code>.git</code></li><li><code>.hg</code></li><li><code>.lock-wscript</code></li><li><code>.svn</code></li><li><code>.wafpickle-*</code></li><li><code>CVS</code></li><li><code>npm-debug.log</code></li></ul>
-
-<p>Additionally, everything in <code>node_modules</code> is ignored, except for
-bundled dependencies. npm automatically handles this for you, so don&#39;t
-bother adding <code>node_modules</code> to <code>.npmignore</code>.</p>
-
-<p>The following paths and files are never ignored, so adding them to
-<code>.npmignore</code> is pointless:</p>
-
-<ul><li><code>package.json</code></li><li><code><a href="../doc/README.html">README</a>.*</code></li></ul>
-
-<h2 id="Link-Packages">Link Packages</h2>
-
-<p><code>npm link</code> is designed to install a development package and see the
-changes in real time without having to keep re-installing it. (You do
-need to either re-link or <code>npm rebuild -g</code> to update compiled packages,
-of course.)</p>
-
-<p>More info at <code><a href="../doc/link.html">link(1)</a></code>.</p>
-
-<h2 id="Before-Publishing-Make-Sure-Your-Package-Installs-and-Works">Before Publishing: Make Sure Your Package Installs and Works</h2>
-
-<p><strong>This is important.</strong></p>
-
-<p>If you can not install it locally, you&#39;ll have
-problems trying to publish it. Or, worse yet, you&#39;ll be able to
-publish it, but you&#39;ll be publishing a broken or pointless package.
-So don&#39;t do that.</p>
-
-<p>In the root of your package, do this:</p>
-
-<pre><code>npm install . -g</code></pre>
-
-<p>That&#39;ll show you that it&#39;s working. If you&#39;d rather just create a symlink
-package that points to your working directory, then do this:</p>
-
-<pre><code>npm link</code></pre>
-
-<p>Use <code>npm ls -g</code> to see if it&#39;s there.</p>
-
-<p>To test a local install, go into some other folder, and then do:</p>
-
-<pre><code>cd ../some-other-folder
-npm install ../my-package</code></pre>
-
-<p>to install it locally into the node_modules folder in that other place.</p>
-
-<p>Then go into the node-repl, and try using require(&quot;my-thing&quot;) to
-bring in your module&#39;s main module.</p>
-
-<h2 id="Create-a-User-Account">Create a User Account</h2>
-
-<p>Create a user with the adduser command. It works like this:</p>
-
-<pre><code>npm adduser</code></pre>
-
-<p>and then follow the prompts.</p>
-
-<p>This is documented better in <a href="../doc/adduser.html">adduser(1)</a>.</p>
-
-<h2 id="Publish-your-package">Publish your package</h2>
-
-<p>This part&#39;s easy. IN the root of your folder, do this:</p>
-
-<pre><code>npm publish</code></pre>
-
-<p>You can give publish a url to a tarball, or a filename of a tarball,
-or a path to a folder.</p>
-
-<p>Note that pretty much <strong>everything in that folder will be exposed</strong>
-by default. So, if you have secret stuff in there, use a
-<code>.npmignore</code> file to list out the globs to ignore, or publish
-from a fresh checkout.</p>
-
-<h2 id="Brag-about-it">Brag about it</h2>
-
-<p>Send emails, write blogs, blab in IRC.</p>
-
-<p>Tell the world how easy it is to install your program!</p>
-
-<h2 id="SEE-ALSO">SEE ALSO</h2>
-
-<ul><li><a href="../doc/faq.html">faq(1)</a></li><li><a href="../doc/npm.html">npm(1)</a></li><li><a href="../doc/init.html">init(1)</a></li><li><a href="../doc/json.html">json(1)</a></li><li><a href="../doc/scripts.html">scripts(1)</a></li><li><a href="../doc/publish.html">publish(1)</a></li><li><a href="../doc/adduser.html">adduser(1)</a></li><li><a href="../doc/registry.html">registry(1)</a></li></ul>
-</div>
-<p id="footer">developers &mdash; npm@1.2.30</p>
-<script>
-;(function () {
-var wrapper = document.getElementById("wrapper")
-var els = Array.prototype.slice.call(wrapper.getElementsByTagName("*"), 0)
- .filter(function (el) {
- return el.parentNode === wrapper
- && el.tagName.match(/H[1-6]/)
- && el.id
- })
-var l = 2
- , toc = document.createElement("ul")
-toc.innerHTML = els.map(function (el) {
- var i = el.tagName.charAt(1)
- , out = ""
- while (i > l) {
- out += "<ul>"
- l ++
- }
- while (i < l) {
- out += "</ul>"
- l --
- }
- out += "<li><a href='#" + el.id + "'>" +
- ( el.innerText || el.text || el.innerHTML)
- + "</a>"
- return out
-}).join("\n")
-toc.id = "toc"
-document.body.appendChild(toc)
-})()
-</script>
-</body></html>
diff --git a/deps/npm/html/doc/disputes.html b/deps/npm/html/doc/disputes.html
deleted file mode 100644
index 9077df689..000000000
--- a/deps/npm/html/doc/disputes.html
+++ /dev/null
@@ -1,126 +0,0 @@
-<!doctype html>
-<html>
- <title>disputes</title>
- <meta http-equiv="content-type" value="text/html;utf-8">
- <link rel="stylesheet" type="text/css" href="../static/style.css">
-
- <body>
- <div id="wrapper">
-<h1><a href="../doc/disputes.html">disputes</a></h1> <p>Handling Module Name Disputes</p>
-
-<h2 id="SYNOPSIS">SYNOPSIS</h2>
-
-<ol><li>Get the author email with <code>npm owner ls &lt;pkgname&gt;</code></li><li>Email the author, CC <a href="mailto:i@izs.me">i@izs.me</a>.</li><li>After a few weeks, if there&#39;s no resolution, we&#39;ll sort it out.</li></ol>
-
-<p>Don&#39;t squat on package names. Publish code or move out of the way.</p>
-
-<h2 id="DESCRIPTION">DESCRIPTION</h2>
-
-<p>There sometimes arise cases where a user publishes a module, and then
-later, some other user wants to use that name. Here are some common
-ways that happens (each of these is based on actual events.)</p>
-
-<ol><li>Joe writes a JavaScript module <code>foo</code>, which is not node-specific.
-Joe doesn&#39;t use node at all. Bob wants to use <code>foo</code> in node, so he
-wraps it in an npm module. Some time later, Joe starts using node,
-and wants to take over management of his program.</li><li>Bob writes an npm module <code>foo</code>, and publishes it. Perhaps much
-later, Joe finds a bug in <code>foo</code>, and fixes it. He sends a pull
-request to Bob, but Bob doesn&#39;t have the time to deal with it,
-because he has a new job and a new baby and is focused on his new
-erlang project, and kind of not involved with node any more. Joe
-would like to publish a new <code>foo</code>, but can&#39;t, because the name is
-taken.</li><li>Bob writes a 10-line flow-control library, and calls it <code>foo</code>, and
-publishes it to the npm registry. Being a simple little thing, it
-never really has to be updated. Joe works for Foo Inc, the makers
-of the critically acclaimed and widely-marketed <code>foo</code> JavaScript
-toolkit framework. They publish it to npm as <code>foojs</code>, but people are
-routinely confused when <code>npm install foo</code> is some different thing.</li><li>Bob writes a parser for the widely-known <code>foo</code> file format, because
-he needs it for work. Then, he gets a new job, and never updates the
-prototype. Later on, Joe writes a much more complete <code>foo</code> parser,
-but can&#39;t publish, because Bob&#39;s <code>foo</code> is in the way.</li></ol>
-
-<p>The validity of Joe&#39;s claim in each situation can be debated. However,
-Joe&#39;s appropriate course of action in each case is the same.</p>
-
-<ol><li><code>npm owner ls foo</code>. This will tell Joe the email address of the
-owner (Bob).</li><li>Joe emails Bob, explaining the situation <strong>as respectfully as possible</strong>,
-and what he would like to do with the module name. He adds
-isaacs <a href="mailto:i@izs.me">i@izs.me</a> to the CC list of the email. Mention in the email
-that Bob can run <code>npm owner add joe foo</code> to add Joe as an owner of
-the <code>foo</code> package.</li><li>After a reasonable amount of time, if Bob has not responded, or if
-Bob and Joe can&#39;t come to any sort of resolution, email isaacs
-<a href="mailto:i@izs.me">i@izs.me</a> and we&#39;ll sort it out. (&quot;Reasonable&quot; is usually about 4
-weeks, but extra time is allowed around common holidays.)</li></ol>
-
-<h2 id="REASONING">REASONING</h2>
-
-<p>In almost every case so far, the parties involved have been able to reach
-an amicable resolution without any major intervention. Most people
-really do want to be reasonable, and are probably not even aware that
-they&#39;re in your way.</p>
-
-<p>Module ecosystems are most vibrant and powerful when they are as
-self-directed as possible. If an admin one day deletes something you
-had worked on, then that is going to make most people quite upset,
-regardless of the justification. When humans solve their problems by
-talking to other humans with respect, everyone has the chance to end up
-feeling good about the interaction.</p>
-
-<h2 id="EXCEPTIONS">EXCEPTIONS</h2>
-
-<p>Some things are not allowed, and will be removed without discussion if
-they are brought to the attention of the npm registry admins, including
-but not limited to:</p>
-
-<ol><li>Malware (that is, a package designed to exploit or harm the machine on
-which it is installed).</li><li>Violations of copyright or licenses (for example, cloning an
-MIT-licensed program, and then removing or changing the copyright and
-license statement).</li><li>Illegal content.</li><li>&quot;Squatting&quot; on a package name that you <em>plan</em> to use, but aren&#39;t
-actually using. Sorry, I don&#39;t care how great the name is, or how
-perfect a fit it is for the thing that someday might happen. If
-someone wants to use it today, and you&#39;re just taking up space with
-an empty tarball, you&#39;re going to be evicted.</li><li>Putting empty packages in the registry. Packages must have SOME
-functionality. It can be silly, but it can&#39;t be <em>nothing</em>. (See
-also: squatting.)</li><li>Doing weird things with the registry, like using it as your own
-personal application database or otherwise putting non-packagey
-things into it.</li></ol>
-
-<p>If you see bad behavior like this, please report it right away.</p>
-
-<h2 id="SEE-ALSO">SEE ALSO</h2>
-
-<ul><li><a href="../doc/registry.html">registry(1)</a></li><li><a href="../doc/owner.html">owner(1)</a></li></ul>
-</div>
-<p id="footer">disputes &mdash; npm@1.2.30</p>
-<script>
-;(function () {
-var wrapper = document.getElementById("wrapper")
-var els = Array.prototype.slice.call(wrapper.getElementsByTagName("*"), 0)
- .filter(function (el) {
- return el.parentNode === wrapper
- && el.tagName.match(/H[1-6]/)
- && el.id
- })
-var l = 2
- , toc = document.createElement("ul")
-toc.innerHTML = els.map(function (el) {
- var i = el.tagName.charAt(1)
- , out = ""
- while (i > l) {
- out += "<ul>"
- l ++
- }
- while (i < l) {
- out += "</ul>"
- l --
- }
- out += "<li><a href='#" + el.id + "'>" +
- ( el.innerText || el.text || el.innerHTML)
- + "</a>"
- return out
-}).join("\n")
-toc.id = "toc"
-document.body.appendChild(toc)
-})()
-</script>
-</body></html>
diff --git a/deps/npm/html/doc/docs.html b/deps/npm/html/doc/docs.html
deleted file mode 100644
index c6338db45..000000000
--- a/deps/npm/html/doc/docs.html
+++ /dev/null
@@ -1,72 +0,0 @@
-<!doctype html>
-<html>
- <title>docs</title>
- <meta http-equiv="content-type" value="text/html;utf-8">
- <link rel="stylesheet" type="text/css" href="../static/style.css">
-
- <body>
- <div id="wrapper">
-<h1><a href="../doc/docs.html">docs</a></h1> <p>Docs for a package in a web browser maybe</p>
-
-<h2 id="SYNOPSIS">SYNOPSIS</h2>
-
-<pre><code>npm docs &lt;pkgname&gt;
-npm home &lt;pkgname&gt;</code></pre>
-
-<h2 id="DESCRIPTION">DESCRIPTION</h2>
-
-<p>This command tries to guess at the likely location of a package&#39;s
-documentation URL, and then tries to open it using the <code>--browser</code>
-config param.</p>
-
-<h2 id="CONFIGURATION">CONFIGURATION</h2>
-
-<h3 id="browser">browser</h3>
-
-<ul><li>Default: OS X: <code>&quot;open&quot;</code>, Windows: <code>&quot;start&quot;</code>, Others: <code>&quot;xdg-open&quot;</code></li><li>Type: String</li></ul>
-
-<p>The browser that is called by the <code>npm docs</code> command to open websites.</p>
-
-<h3 id="registry">registry</h3>
-
-<ul><li>Default: https://registry.npmjs.org/</li><li>Type: url</li></ul>
-
-<p>The base URL of the npm package registry.</p>
-
-<h2 id="SEE-ALSO">SEE ALSO</h2>
-
-<ul><li><a href="../doc/view.html">view(1)</a></li><li><a href="../doc/publish.html">publish(1)</a></li><li><a href="../doc/registry.html">registry(1)</a></li><li><a href="../doc/config.html">config(1)</a></li><li><a href="../doc/json.html">json(1)</a></li></ul>
-</div>
-<p id="footer">docs &mdash; npm@1.2.30</p>
-<script>
-;(function () {
-var wrapper = document.getElementById("wrapper")
-var els = Array.prototype.slice.call(wrapper.getElementsByTagName("*"), 0)
- .filter(function (el) {
- return el.parentNode === wrapper
- && el.tagName.match(/H[1-6]/)
- && el.id
- })
-var l = 2
- , toc = document.createElement("ul")
-toc.innerHTML = els.map(function (el) {
- var i = el.tagName.charAt(1)
- , out = ""
- while (i > l) {
- out += "<ul>"
- l ++
- }
- while (i < l) {
- out += "</ul>"
- l --
- }
- out += "<li><a href='#" + el.id + "'>" +
- ( el.innerText || el.text || el.innerHTML)
- + "</a>"
- return out
-}).join("\n")
-toc.id = "toc"
-document.body.appendChild(toc)
-})()
-</script>
-</body></html>
diff --git a/deps/npm/html/doc/edit.html b/deps/npm/html/doc/edit.html
deleted file mode 100644
index 1d897a607..000000000
--- a/deps/npm/html/doc/edit.html
+++ /dev/null
@@ -1,72 +0,0 @@
-<!doctype html>
-<html>
- <title>edit</title>
- <meta http-equiv="content-type" value="text/html;utf-8">
- <link rel="stylesheet" type="text/css" href="../static/style.css">
-
- <body>
- <div id="wrapper">
-<h1><a href="../doc/edit.html">edit</a></h1> <p>Edit an installed package</p>
-
-<h2 id="SYNOPSIS">SYNOPSIS</h2>
-
-<pre><code>npm edit &lt;name&gt;[@&lt;version&gt;]</code></pre>
-
-<h2 id="DESCRIPTION">DESCRIPTION</h2>
-
-<p>Opens the package folder in the default editor (or whatever you&#39;ve
-configured as the npm <code>editor</code> config -- see <code><a href="../doc/config.html">config(1)</a></code>.)</p>
-
-<p>After it has been edited, the package is rebuilt so as to pick up any
-changes in compiled packages.</p>
-
-<p>For instance, you can do <code>npm install connect</code> to install connect
-into your package, and then <code>npm edit connect</code> to make a few
-changes to your locally installed copy.</p>
-
-<h2 id="CONFIGURATION">CONFIGURATION</h2>
-
-<h3 id="editor">editor</h3>
-
-<ul><li>Default: <code>EDITOR</code> environment variable if set, or <code>&quot;vi&quot;</code> on Posix,
-or <code>&quot;notepad&quot;</code> on Windows.</li><li>Type: path</li></ul>
-
-<p>The command to run for <code>npm edit</code> or <code>npm config edit</code>.</p>
-
-<h2 id="SEE-ALSO">SEE ALSO</h2>
-
-<ul><li><a href="../doc/folders.html">folders(1)</a></li><li><a href="../doc/explore.html">explore(1)</a></li><li><a href="../doc/install.html">install(1)</a></li><li><a href="../doc/config.html">config(1)</a></li></ul>
-</div>
-<p id="footer">edit &mdash; npm@1.2.30</p>
-<script>
-;(function () {
-var wrapper = document.getElementById("wrapper")
-var els = Array.prototype.slice.call(wrapper.getElementsByTagName("*"), 0)
- .filter(function (el) {
- return el.parentNode === wrapper
- && el.tagName.match(/H[1-6]/)
- && el.id
- })
-var l = 2
- , toc = document.createElement("ul")
-toc.innerHTML = els.map(function (el) {
- var i = el.tagName.charAt(1)
- , out = ""
- while (i > l) {
- out += "<ul>"
- l ++
- }
- while (i < l) {
- out += "</ul>"
- l --
- }
- out += "<li><a href='#" + el.id + "'>" +
- ( el.innerText || el.text || el.innerHTML)
- + "</a>"
- return out
-}).join("\n")
-toc.id = "toc"
-document.body.appendChild(toc)
-})()
-</script>
-</body></html>
diff --git a/deps/npm/html/doc/explore.html b/deps/npm/html/doc/explore.html
deleted file mode 100644
index 0ce0eabae..000000000
--- a/deps/npm/html/doc/explore.html
+++ /dev/null
@@ -1,75 +0,0 @@
-<!doctype html>
-<html>
- <title>explore</title>
- <meta http-equiv="content-type" value="text/html;utf-8">
- <link rel="stylesheet" type="text/css" href="../static/style.css">
-
- <body>
- <div id="wrapper">
-<h1><a href="../doc/explore.html">explore</a></h1> <p>Browse an installed package</p>
-
-<h2 id="SYNOPSIS">SYNOPSIS</h2>
-
-<pre><code>npm explore &lt;name&gt;[@&lt;version&gt;] [ -- &lt;cmd&gt;]</code></pre>
-
-<h2 id="DESCRIPTION">DESCRIPTION</h2>
-
-<p>Spawn a subshell in the directory of the installed package specified.</p>
-
-<p>If a command is specified, then it is run in the subshell, which then
-immediately terminates.</p>
-
-<p>This is particularly handy in the case of git submodules in the
-<code>node_modules</code> folder:</p>
-
-<pre><code>npm explore some-dependency -- git pull origin master</code></pre>
-
-<p>Note that the package is <em>not</em> automatically rebuilt afterwards, so be
-sure to use <code>npm rebuild &lt;pkg&gt;</code> if you make any changes.</p>
-
-<h2 id="CONFIGURATION">CONFIGURATION</h2>
-
-<h3 id="shell">shell</h3>
-
-<ul><li>Default: SHELL environment variable, or &quot;bash&quot; on Posix, or &quot;cmd&quot; on
-Windows</li><li>Type: path</li></ul>
-
-<p>The shell to run for the <code>npm explore</code> command.</p>
-
-<h2 id="SEE-ALSO">SEE ALSO</h2>
-
-<ul><li><a href="../doc/submodule.html">submodule(1)</a></li><li><a href="../doc/folders.html">folders(1)</a></li><li><a href="../doc/edit.html">edit(1)</a></li><li><a href="../doc/rebuild.html">rebuild(1)</a></li><li><a href="../doc/build.html">build(1)</a></li><li><a href="../doc/install.html">install(1)</a></li></ul>
-</div>
-<p id="footer">explore &mdash; npm@1.2.30</p>
-<script>
-;(function () {
-var wrapper = document.getElementById("wrapper")
-var els = Array.prototype.slice.call(wrapper.getElementsByTagName("*"), 0)
- .filter(function (el) {
- return el.parentNode === wrapper
- && el.tagName.match(/H[1-6]/)
- && el.id
- })
-var l = 2
- , toc = document.createElement("ul")
-toc.innerHTML = els.map(function (el) {
- var i = el.tagName.charAt(1)
- , out = ""
- while (i > l) {
- out += "<ul>"
- l ++
- }
- while (i < l) {
- out += "</ul>"
- l --
- }
- out += "<li><a href='#" + el.id + "'>" +
- ( el.innerText || el.text || el.innerHTML)
- + "</a>"
- return out
-}).join("\n")
-toc.id = "toc"
-document.body.appendChild(toc)
-})()
-</script>
-</body></html>
diff --git a/deps/npm/html/doc/faq.html b/deps/npm/html/doc/faq.html
deleted file mode 100644
index d720d905f..000000000
--- a/deps/npm/html/doc/faq.html
+++ /dev/null
@@ -1,337 +0,0 @@
-<!doctype html>
-<html>
- <title>faq</title>
- <meta http-equiv="content-type" value="text/html;utf-8">
- <link rel="stylesheet" type="text/css" href="../static/style.css">
-
- <body>
- <div id="wrapper">
-<h1><a href="../doc/faq.html">faq</a></h1> <p>Frequently Asked Questions</p>
-
-<h2 id="Where-can-I-find-these-docs-in-HTML">Where can I find these docs in HTML?</h2>
-
-<p><a href="https://npmjs.org/doc/">https://npmjs.org/doc/</a>, or run:</p>
-
-<pre><code>npm config set viewer browser</code></pre>
-
-<p>to open these documents in your default web browser rather than <code>man</code>.</p>
-
-<h2 id="It-didn-t-work">It didn&#39;t work.</h2>
-
-<p>That&#39;s not really a question.</p>
-
-<h2 id="Why-didn-t-it-work">Why didn&#39;t it work?</h2>
-
-<p>I don&#39;t know yet.</p>
-
-<p>Read the error output, and if you can&#39;t figure out what it means,
-do what it says and post a bug with all the information it asks for.</p>
-
-<h2 id="Where-does-npm-put-stuff">Where does npm put stuff?</h2>
-
-<p>See <code><a href="../doc/folders.html">folders(1)</a></code></p>
-
-<p>tl;dr:</p>
-
-<ul><li>Use the <code>npm root</code> command to see where modules go, and the <code>npm bin</code>
-command to see where executables go</li><li>Global installs are different from local installs. If you install
-something with the <code>-g</code> flag, then its executables go in <code>npm bin -g</code>
-and its modules go in <code>npm root -g</code>.</li></ul>
-
-<h2 id="How-do-I-install-something-on-my-computer-in-a-central-location">How do I install something on my computer in a central location?</h2>
-
-<p>Install it globally by tacking <code>-g</code> or <code>--global</code> to the command. (This
-is especially important for command line utilities that need to add
-their bins to the global system <code>PATH</code>.)</p>
-
-<h2 id="I-installed-something-globally-but-I-can-t-require-it">I installed something globally, but I can&#39;t <code>require()</code> it</h2>
-
-<p>Install it locally.</p>
-
-<p>The global install location is a place for command-line utilities
-to put their bins in the system <code>PATH</code>. It&#39;s not for use with <code>require()</code>.</p>
-
-<p>If you <code>require()</code> a module in your code, then that means it&#39;s a
-dependency, and a part of your program. You need to install it locally
-in your program.</p>
-
-<h2 id="Why-can-t-npm-just-put-everything-in-one-place-like-other-package-managers">Why can&#39;t npm just put everything in one place, like other package managers?</h2>
-
-<p>Not every change is an improvement, but every improvement is a change.
-This would be like asking git to do network IO for every commit. It&#39;s
-not going to happen, because it&#39;s a terrible idea that causes more
-problems than it solves.</p>
-
-<p>It is much harder to avoid dependency conflicts without nesting
-dependencies. This is fundamental to the way that npm works, and has
-proven to be an extremely successful approach. See <code><a href="../doc/folders.html">folders(1)</a></code> for
-more details.</p>
-
-<p>If you want a package to be installed in one place, and have all your
-programs reference the same copy of it, then use the <code>npm link</code> command.
-That&#39;s what it&#39;s for. Install it globally, then link it into each
-program that uses it.</p>
-
-<h2 id="Whatever-I-really-want-the-old-style-everything-global-style">Whatever, I really want the old style &#39;everything global&#39; style.</h2>
-
-<p>Write your own package manager, then. It&#39;s not that hard.</p>
-
-<p>npm will not help you do something that is known to be a bad idea.</p>
-
-<h2 id="node_modules-is-the-name-of-my-deity-s-arch-rival-and-a-Forbidden-Word-in-my-religion-Can-I-configure-npm-to-use-a-different-folder"><code>&quot;node_modules&quot;</code> is the name of my deity&#39;s arch-rival, and a Forbidden Word in my religion. Can I configure npm to use a different folder?</h2>
-
-<p>No. This will never happen. This question comes up sometimes,
-because it seems silly from the outside that npm couldn&#39;t just be
-configured to put stuff somewhere else, and then npm could load them
-from there. It&#39;s an arbitrary spelling choice, right? What&#39;s the big
-deal?</p>
-
-<p>At the time of this writing, the string <code>&#39;node_modules&#39;</code> appears 151
-times in 53 separate files in npm and node core (excluding tests and
-documentation).</p>
-
-<p>Some of these references are in node&#39;s built-in module loader. Since
-npm is not involved <strong>at all</strong> at run-time, node itself would have to
-be configured to know where you&#39;ve decided to stick stuff. Complexity
-hurdle #1. Since the Node module system is locked, this cannot be
-changed, and is enough to kill this request. But I&#39;ll continue, in
-deference to your deity&#39;s delicate feelings regarding spelling.</p>
-
-<p>Many of the others are in dependencies that npm uses, which are not
-necessarily tightly coupled to npm (in the sense that they do not read
-npm&#39;s configuration files, etc.) Each of these would have to be
-configured to take the name of the <code>node_modules</code> folder as a
-parameter. Complexity hurdle #2.</p>
-
-<p>Furthermore, npm has the ability to &quot;bundle&quot; dependencies by adding
-the dep names to the <code>&quot;bundledDependencies&quot;</code> list in package.json,
-which causes the folder to be included in the package tarball. What
-if the author of a module bundles its dependencies, and they use a
-different spelling for <code>node_modules</code>? npm would have to rename the
-folder at publish time, and then be smart enough to unpack it using
-your locally configured name. Complexity hurdle #3.</p>
-
-<p>Furthermore, what happens when you <em>change</em> this name? Fine, it&#39;s
-easy enough the first time, just rename the <code>node_modules</code> folders to
-<code>./blergyblerp/</code> or whatever name you choose. But what about when you
-change it again? npm doesn&#39;t currently track any state about past
-configuration settings, so this would be rather difficult to do
-properly. It would have to track every previous value for this
-config, and always accept any of them, or else yesterday&#39;s install may
-be broken tomorrow. Complexity hurdle #5.</p>
-
-<p>Never going to happen. The folder is named <code>node_modules</code>. It is
-written indelibly in the Node Way, handed down from the ancient times
-of Node 0.3.</p>
-
-<h2 id="Should-I-check-my-node_modules-folder-into-git">Should I check my <code>node_modules</code> folder into git?</h2>
-
-<p>Mikeal Rogers answered this question very well:</p>
-
-<p><a href="http://www.mikealrogers.com/posts/nodemodules-in-git.html">http://www.mikealrogers.com/posts/nodemodules-in-git.html</a></p>
-
-<p>tl;dr</p>
-
-<ul><li>Check <code>node_modules</code> into git for things you <strong>deploy</strong>, such as
-websites and apps.</li><li>Do not check <code>node_modules</code> into git for libraries and modules
-intended to be reused.</li><li>Use npm to manage dependencies in your dev environment, but not in
-your deployment scripts.</li></ul>
-
-<h2 id="Is-it-npm-or-NPM-or-Npm">Is it &#39;npm&#39; or &#39;NPM&#39; or &#39;Npm&#39;?</h2>
-
-<p>npm should never be capitalized unless it is being displayed in a
-location that is customarily all-caps (such as the title of man pages.)</p>
-
-<h2 id="If-npm-is-an-acronym-why-is-it-never-capitalized">If &#39;npm&#39; is an acronym, why is it never capitalized?</h2>
-
-<p>Contrary to the belief of many, &quot;npm&quot; is not in fact an abbreviation for
-&quot;Node Package Manager&quot;. It is a recursive bacronymic abbreviation for
-&quot;npm is not an acronym&quot;. (If it was &quot;ninaa&quot;, then it would be an
-acronym, and thus incorrectly named.)</p>
-
-<p>&quot;NPM&quot;, however, <em>is</em> an acronym (more precisely, a capitonym) for the
-National Association of Pastoral Musicians. You can learn more
-about them at <a href="http://npm.org/">http://npm.org/</a>.</p>
-
-<p>In software, &quot;NPM&quot; is a Non-Parametric Mapping utility written by
-Chris Rorden. You can analyze pictures of brains with it. Learn more
-about the (capitalized) NPM program at <a href="http://www.cabiatl.com/mricro/npm/">http://www.cabiatl.com/mricro/npm/</a>.</p>
-
-<p>The first seed that eventually grew into this flower was a bash utility
-named &quot;pm&quot;, which was a shortened descendent of &quot;pkgmakeinst&quot;, a
-bash function that was used to install various different things on different
-platforms, most often using Yahoo&#39;s <code>yinst</code>. If <code>npm</code> was ever an
-acronym for anything, it was <code>node pm</code> or maybe <code>new pm</code>.</p>
-
-<p>So, in all seriousness, the &quot;npm&quot; project is named after its command-line
-utility, which was organically selected to be easily typed by a right-handed
-programmer using a US QWERTY keyboard layout, ending with the
-right-ring-finger in a postition to type the <code>-</code> key for flags and
-other command-line arguments. That command-line utility is always
-lower-case, though it starts most sentences it is a part of.</p>
-
-<h2 id="How-do-I-list-installed-packages">How do I list installed packages?</h2>
-
-<p><code>npm ls</code></p>
-
-<h2 id="How-do-I-search-for-packages">How do I search for packages?</h2>
-
-<p><code>npm search</code></p>
-
-<p>Arguments are greps. <code>npm search jsdom</code> shows jsdom packages.</p>
-
-<h2 id="How-do-I-update-npm">How do I update npm?</h2>
-
-<pre><code>npm update npm -g</code></pre>
-
-<p>You can also update all outdated local packages by doing <code>npm update</code> without
-any arguments, or global packages by doing <code>npm update -g</code>.</p>
-
-<p>Occasionally, the version of npm will progress such that the current
-version cannot be properly installed with the version that you have
-installed already. (Consider, if there is ever a bug in the <code>update</code>
-command.)</p>
-
-<p>In those cases, you can do this:</p>
-
-<pre><code>curl https://npmjs.org/install.sh | sh</code></pre>
-
-<h2 id="What-is-a-package">What is a <code>package</code>?</h2>
-
-<p>A package is:</p>
-
-<ul><li>a) a folder containing a program described by a package.json file</li><li>b) a gzipped tarball containing (a)</li><li>c) a url that resolves to (b)</li><li>d) a <code>&lt;name&gt;@&lt;version&gt;</code> that is published on the registry with (c)</li><li>e) a <code>&lt;name&gt;@&lt;tag&gt;</code> that points to (d)</li><li>f) a <code>&lt;name&gt;</code> that has a &quot;latest&quot; tag satisfying (e)</li><li>g) a <code>git</code> url that, when cloned, results in (a).</li></ul>
-
-<p>Even if you never publish your package, you can still get a lot of
-benefits of using npm if you just want to write a node program (a), and
-perhaps if you also want to be able to easily install it elsewhere
-after packing it up into a tarball (b).</p>
-
-<p>Git urls can be of the form:</p>
-
-<pre><code>git://github.com/user/project.git#commit-ish
-git+ssh://user@hostname:project.git#commit-ish
-git+http://user@hostname/project/blah.git#commit-ish
-git+https://user@hostname/project/blah.git#commit-ish</code></pre>
-
-<p>The <code>commit-ish</code> can be any tag, sha, or branch which can be supplied as
-an argument to <code>git checkout</code>. The default is <code>master</code>.</p>
-
-<h2 id="How-do-I-install-node-with-npm">How do I install node with npm?</h2>
-
-<p>You don&#39;t. Try one of these node version managers:</p>
-
-<p>Unix:</p>
-
-<ul><li><a href="http://github.com/isaacs/nave">http://github.com/isaacs/nave</a></li><li><a href="http://github.com/visionmedia/n">http://github.com/visionmedia/n</a></li><li><a href="http://github.com/creationix/nvm">http://github.com/creationix/nvm</a></li></ul>
-
-<p>Windows:</p>
-
-<ul><li><a href="http://github.com/marcelklehr/nodist">http://github.com/marcelklehr/nodist</a></li><li><a href="https://github.com/hakobera/nvmw">https://github.com/hakobera/nvmw</a></li></ul>
-
-<h2 id="How-can-I-use-npm-for-development">How can I use npm for development?</h2>
-
-<p>See <code><a href="../doc/developers.html">developers(1)</a></code> and <code><a href="../doc/json.html">json(1)</a></code>.</p>
-
-<p>You&#39;ll most likely want to <code>npm link</code> your development folder. That&#39;s
-awesomely handy.</p>
-
-<p>To set up your own private registry, check out <code><a href="../doc/registry.html">registry(1)</a></code>.</p>
-
-<h2 id="Can-I-list-a-url-as-a-dependency">Can I list a url as a dependency?</h2>
-
-<p>Yes. It should be a url to a gzipped tarball containing a single folder
-that has a package.json in its root, or a git url.
-(See &quot;what is a package?&quot; above.)</p>
-
-<h2 id="How-do-I-symlink-to-a-dev-folder-so-I-don-t-have-to-keep-re-installing">How do I symlink to a dev folder so I don&#39;t have to keep re-installing?</h2>
-
-<p>See <code><a href="../doc/link.html">link(1)</a></code></p>
-
-<h2 id="The-package-registry-website-What-is-that-exactly">The package registry website. What is that exactly?</h2>
-
-<p>See <code><a href="../doc/registry.html">registry(1)</a></code>.</p>
-
-<h2 id="What-s-up-with-the-insecure-channel-warnings">What&#39;s up with the insecure channel warnings?</h2>
-
-<p>Until node 0.4.10, there were problems sending big files over HTTPS. That
-means that publishes go over HTTP by default in those versions of node.</p>
-
-<h2 id="I-forgot-my-password-and-can-t-publish-How-do-I-reset-it">I forgot my password, and can&#39;t publish. How do I reset it?</h2>
-
-<p>Go to <a href="https://npmjs.org/forgot">https://npmjs.org/forgot</a>.</p>
-
-<h2 id="I-get-ECONNREFUSED-a-lot-What-s-up">I get ECONNREFUSED a lot. What&#39;s up?</h2>
-
-<p>Either the registry is down, or node&#39;s DNS isn&#39;t able to reach out.</p>
-
-<p>To check if the registry is down, open up <a href="http://registry.npmjs.org/">http://registry.npmjs.org/</a>
-in a web browser. This will also tell you if you are just unable to
-access the internet for some reason.</p>
-
-<p>If the registry IS down, let me know by emailing or posting an issue.
-We&#39;ll have someone kick it or something.</p>
-
-<h2 id="Why-no-namespaces">Why no namespaces?</h2>
-
-<p>Please see this discussion: <a href="https://github.com/isaacs/npm/issues/798">https://github.com/isaacs/npm/issues/798</a></p>
-
-<p>tl;dr - It doesn&#39;t actually make things better, and can make them worse.</p>
-
-<p>If you want to namespace your own packages, you may: simply use the
-<code>-</code> character to separate the names. npm is a mostly anarchic system.
-There is not sufficient need to impose namespace rules on everyone.</p>
-
-<h2 id="Who-does-npm">Who does npm?</h2>
-
-<p><code>npm view npm author</code></p>
-
-<p><code>npm view npm contributors</code></p>
-
-<h2 id="I-have-a-question-or-request-not-addressed-here-Where-should-I-put-it">I have a question or request not addressed here. Where should I put it?</h2>
-
-<p>Discuss it on the mailing list, or post an issue.</p>
-
-<ul><li><a href="mailto:npm-@googlegroups.com">npm-@googlegroups.com</a></li><li><a href="https://github.com/isaacs/npm/issues">https://github.com/isaacs/npm/issues</a></li></ul>
-
-<h2 id="Why-does-npm-hate-me">Why does npm hate me?</h2>
-
-<p>npm is not capable of hatred. It loves everyone, especially you.</p>
-
-<h2 id="SEE-ALSO">SEE ALSO</h2>
-
-<ul><li><a href="../doc/npm.html">npm(1)</a></li><li><a href="../doc/developers.html">developers(1)</a></li><li><a href="../doc/json.html">json(1)</a></li><li><a href="../doc/config.html">config(1)</a></li><li><a href="../doc/folders.html">folders(1)</a></li></ul>
-</div>
-<p id="footer">faq &mdash; npm@1.2.30</p>
-<script>
-;(function () {
-var wrapper = document.getElementById("wrapper")
-var els = Array.prototype.slice.call(wrapper.getElementsByTagName("*"), 0)
- .filter(function (el) {
- return el.parentNode === wrapper
- && el.tagName.match(/H[1-6]/)
- && el.id
- })
-var l = 2
- , toc = document.createElement("ul")
-toc.innerHTML = els.map(function (el) {
- var i = el.tagName.charAt(1)
- , out = ""
- while (i > l) {
- out += "<ul>"
- l ++
- }
- while (i < l) {
- out += "</ul>"
- l --
- }
- out += "<li><a href='#" + el.id + "'>" +
- ( el.innerText || el.text || el.innerHTML)
- + "</a>"
- return out
-}).join("\n")
-toc.id = "toc"
-document.body.appendChild(toc)
-})()
-</script>
-</body></html>
diff --git a/deps/npm/html/doc/files/npm-folders.html b/deps/npm/html/doc/files/npm-folders.html
new file mode 100644
index 000000000..5846fe962
--- /dev/null
+++ b/deps/npm/html/doc/files/npm-folders.html
@@ -0,0 +1,183 @@
+<!doctype html>
+<html>
+ <title>npm-folders</title>
+ <meta http-equiv="content-type" value="text/html;utf-8">
+ <link rel="stylesheet" type="text/css" href="../../static/style.css">
+ <link rel="canonical" href="https://www.npmjs.org/doc/files/npm-folders.html">
+ <script async=true src="../../static/toc.js"></script>
+
+ <body>
+ <div id="wrapper">
+
+<h1><a href="../files/npm-folders.html">npm-folders</a></h1> <p>Folder Structures Used by npm</p>
+<h2 id="description">DESCRIPTION</h2>
+<p>npm puts various things on your computer. That&#39;s its job.</p>
+<p>This document will tell you what it puts where.</p>
+<h3 id="tl-dr">tl;dr</h3>
+<ul>
+<li>Local install (default): puts stuff in <code>./node_modules</code> of the current
+package root.</li>
+<li>Global install (with <code>-g</code>): puts stuff in /usr/local or wherever node
+is installed.</li>
+<li>Install it <strong>locally</strong> if you&#39;re going to <code>require()</code> it.</li>
+<li>Install it <strong>globally</strong> if you&#39;re going to run it on the command line.</li>
+<li>If you need both, then install it in both places, or use <code>npm link</code>.</li>
+</ul>
+<h3 id="prefix-configuration">prefix Configuration</h3>
+<p>The <code>prefix</code> config defaults to the location where node is installed.
+On most systems, this is <code>/usr/local</code>, and most of the time is the same
+as node&#39;s <code>process.installPrefix</code>.</p>
+<p>On windows, this is the exact location of the node.exe binary. On Unix
+systems, it&#39;s one level up, since node is typically installed at
+<code>{prefix}/bin/node</code> rather than <code>{prefix}/node.exe</code>.</p>
+<p>When the <code>global</code> flag is set, npm installs things into this prefix.
+When it is not set, it uses the root of the current package, or the
+current working directory if not in a package already.</p>
+<h3 id="node-modules">Node Modules</h3>
+<p>Packages are dropped into the <code>node_modules</code> folder under the <code>prefix</code>.
+When installing locally, this means that you can
+<code>require(&quot;packagename&quot;)</code> to load its main module, or
+<code>require(&quot;packagename/lib/path/to/sub/module&quot;)</code> to load other modules.</p>
+<p>Global installs on Unix systems go to <code>{prefix}/lib/node_modules</code>.
+Global installs on Windows go to <code>{prefix}/node_modules</code> (that is, no
+<code>lib</code> folder.)</p>
+<p>If you wish to <code>require()</code> a package, then install it locally.</p>
+<h3 id="executables">Executables</h3>
+<p>When in global mode, executables are linked into <code>{prefix}/bin</code> on Unix,
+or directly into <code>{prefix}</code> on Windows.</p>
+<p>When in local mode, executables are linked into
+<code>./node_modules/.bin</code> so that they can be made available to scripts run
+through npm. (For example, so that a test runner will be in the path
+when you run <code>npm test</code>.)</p>
+<h3 id="man-pages">Man Pages</h3>
+<p>When in global mode, man pages are linked into <code>{prefix}/share/man</code>.</p>
+<p>When in local mode, man pages are not installed.</p>
+<p>Man pages are not installed on Windows systems.</p>
+<h3 id="cache">Cache</h3>
+<p>See <code><a href="../cli/npm-cache.html">npm-cache(1)</a></code>. Cache files are stored in <code>~/.npm</code> on Posix, or
+<code>~/npm-cache</code> on Windows.</p>
+<p>This is controlled by the <code>cache</code> configuration param.</p>
+<h3 id="temp-files">Temp Files</h3>
+<p>Temporary files are stored by default in the folder specified by the
+<code>tmp</code> config, which defaults to the TMPDIR, TMP, or TEMP environment
+variables, or <code>/tmp</code> on Unix and <code>c:\windows\temp</code> on Windows.</p>
+<p>Temp files are given a unique folder under this root for each run of the
+program, and are deleted upon successful exit.</p>
+<h2 id="more-information">More Information</h2>
+<p>When installing locally, npm first tries to find an appropriate
+<code>prefix</code> folder. This is so that <code>npm install foo@1.2.3</code> will install
+to the sensible root of your package, even if you happen to have <code>cd</code>ed
+into some other folder.</p>
+<p>Starting at the $PWD, npm will walk up the folder tree checking for a
+folder that contains either a <code>package.json</code> file, or a <code>node_modules</code>
+folder. If such a thing is found, then that is treated as the effective
+&quot;current directory&quot; for the purpose of running npm commands. (This
+behavior is inspired by and similar to git&#39;s .git-folder seeking
+logic when running git commands in a working dir.)</p>
+<p>If no package root is found, then the current folder is used.</p>
+<p>When you run <code>npm install foo@1.2.3</code>, then the package is loaded into
+the cache, and then unpacked into <code>./node_modules/foo</code>. Then, any of
+foo&#39;s dependencies are similarly unpacked into
+<code>./node_modules/foo/node_modules/...</code>.</p>
+<p>Any bin files are symlinked to <code>./node_modules/.bin/</code>, so that they may
+be found by npm scripts when necessary.</p>
+<h3 id="global-installation">Global Installation</h3>
+<p>If the <code>global</code> configuration is set to true, then npm will
+install packages &quot;globally&quot;.</p>
+<p>For global installation, packages are installed roughly the same way,
+but using the folders described above.</p>
+<h3 id="cycles-conflicts-and-folder-parsimony">Cycles, Conflicts, and Folder Parsimony</h3>
+<p>Cycles are handled using the property of node&#39;s module system that it
+walks up the directories looking for <code>node_modules</code> folders. So, at every
+stage, if a package is already installed in an ancestor <code>node_modules</code>
+folder, then it is not installed at the current location.</p>
+<p>Consider the case above, where <code>foo -&gt; bar -&gt; baz</code>. Imagine if, in
+addition to that, baz depended on bar, so you&#39;d have:
+<code>foo -&gt; bar -&gt; baz -&gt; bar -&gt; baz ...</code>. However, since the folder
+structure is: <code>foo/node_modules/bar/node_modules/baz</code>, there&#39;s no need to
+put another copy of bar into <code>.../baz/node_modules</code>, since when it calls
+require(&quot;bar&quot;), it will get the copy that is installed in
+<code>foo/node_modules/bar</code>.</p>
+<p>This shortcut is only used if the exact same
+version would be installed in multiple nested <code>node_modules</code> folders. It
+is still possible to have <code>a/node_modules/b/node_modules/a</code> if the two
+&quot;a&quot; packages are different versions. However, without repeating the
+exact same package multiple times, an infinite regress will always be
+prevented.</p>
+<p>Another optimization can be made by installing dependencies at the
+highest level possible, below the localized &quot;target&quot; folder.</p>
+<h4 id="example">Example</h4>
+<p>Consider this dependency graph:</p>
+<pre><code>foo
++-- blerg@1.2.5
++-- bar@1.2.3
+| +-- blerg@1.x (latest=1.3.7)
+| +-- baz@2.x
+| | `-- quux@3.x
+| | `-- bar@1.2.3 (cycle)
+| `-- asdf@*
+`-- baz@1.2.3
+ `-- quux@3.x
+ `-- bar
+</code></pre><p>In this case, we might expect a folder structure like this:</p>
+<pre><code>foo
++-- node_modules
+ +-- blerg (1.2.5) &lt;---[A]
+ +-- bar (1.2.3) &lt;---[B]
+ | `-- node_modules
+ | +-- baz (2.0.2) &lt;---[C]
+ | | `-- node_modules
+ | | `-- quux (3.2.0)
+ | `-- asdf (2.3.4)
+ `-- baz (1.2.3) &lt;---[D]
+ `-- node_modules
+ `-- quux (3.2.0) &lt;---[E]
+</code></pre><p>Since foo depends directly on <code>bar@1.2.3</code> and <code>baz@1.2.3</code>, those are
+installed in foo&#39;s <code>node_modules</code> folder.</p>
+<p>Even though the latest copy of blerg is 1.3.7, foo has a specific
+dependency on version 1.2.5. So, that gets installed at [A]. Since the
+parent installation of blerg satisfies bar&#39;s dependency on <code>blerg@1.x</code>,
+it does not install another copy under [B].</p>
+<p>Bar [B] also has dependencies on baz and asdf, so those are installed in
+bar&#39;s <code>node_modules</code> folder. Because it depends on <code>baz@2.x</code>, it cannot
+re-use the <code>baz@1.2.3</code> installed in the parent <code>node_modules</code> folder [D],
+and must install its own copy [C].</p>
+<p>Underneath bar, the <code>baz -&gt; quux -&gt; bar</code> dependency creates a cycle.
+However, because bar is already in quux&#39;s ancestry [B], it does not
+unpack another copy of bar into that folder.</p>
+<p>Underneath <code>foo -&gt; baz</code> [D], quux&#39;s [E] folder tree is empty, because its
+dependency on bar is satisfied by the parent folder copy installed at [B].</p>
+<p>For a graphical breakdown of what is installed where, use <code>npm ls</code>.</p>
+<h3 id="publishing">Publishing</h3>
+<p>Upon publishing, npm will look in the <code>node_modules</code> folder. If any of
+the items there are not in the <code>bundledDependencies</code> array, then they will
+not be included in the package tarball.</p>
+<p>This allows a package maintainer to install all of their dependencies
+(and dev dependencies) locally, but only re-publish those items that
+cannot be found elsewhere. See <code><a href="../files/package.json.html">package.json(5)</a></code> for more information.</p>
+<h2 id="see-also">SEE ALSO</h2>
+<ul>
+<li><a href="../misc/npm-faq.html">npm-faq(7)</a></li>
+<li><a href="../files/package.json.html">package.json(5)</a></li>
+<li><a href="../cli/npm-install.html">npm-install(1)</a></li>
+<li><a href="../cli/npm-pack.html">npm-pack(1)</a></li>
+<li><a href="../cli/npm-cache.html">npm-cache(1)</a></li>
+<li><a href="../cli/npm-config.html">npm-config(1)</a></li>
+<li><a href="../files/npmrc.html">npmrc(5)</a></li>
+<li><a href="../misc/npm-config.html">npm-config(7)</a></li>
+<li><a href="../cli/npm-publish.html">npm-publish(1)</a></li>
+</ul>
+
+</div>
+
+<table border=0 cellspacing=0 cellpadding=0 id=npmlogo>
+<tr><td style="width:180px;height:10px;background:rgb(237,127,127)" colspan=18>&nbsp;</td></tr>
+<tr><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td colspan=6 style="width:60px;height:10px;background:#fff">&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td></tr>
+<tr><td colspan=2 style="width:20px;height:30px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=4 colspan=2>&nbsp;</td><td style="width:10px;height:20px;background:rgb(237,127,127)" rowspan=2>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=3 colspan=2>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff" rowspan=2>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff">&nbsp;</td></tr>
+<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
+<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
+</table>
+<p id="footer">npm-folders &mdash; npm@1.4.10</p>
+
diff --git a/deps/npm/html/doc/files/npm-global.html b/deps/npm/html/doc/files/npm-global.html
new file mode 100644
index 000000000..5846fe962
--- /dev/null
+++ b/deps/npm/html/doc/files/npm-global.html
@@ -0,0 +1,183 @@
+<!doctype html>
+<html>
+ <title>npm-folders</title>
+ <meta http-equiv="content-type" value="text/html;utf-8">
+ <link rel="stylesheet" type="text/css" href="../../static/style.css">
+ <link rel="canonical" href="https://www.npmjs.org/doc/files/npm-folders.html">
+ <script async=true src="../../static/toc.js"></script>
+
+ <body>
+ <div id="wrapper">
+
+<h1><a href="../files/npm-folders.html">npm-folders</a></h1> <p>Folder Structures Used by npm</p>
+<h2 id="description">DESCRIPTION</h2>
+<p>npm puts various things on your computer. That&#39;s its job.</p>
+<p>This document will tell you what it puts where.</p>
+<h3 id="tl-dr">tl;dr</h3>
+<ul>
+<li>Local install (default): puts stuff in <code>./node_modules</code> of the current
+package root.</li>
+<li>Global install (with <code>-g</code>): puts stuff in /usr/local or wherever node
+is installed.</li>
+<li>Install it <strong>locally</strong> if you&#39;re going to <code>require()</code> it.</li>
+<li>Install it <strong>globally</strong> if you&#39;re going to run it on the command line.</li>
+<li>If you need both, then install it in both places, or use <code>npm link</code>.</li>
+</ul>
+<h3 id="prefix-configuration">prefix Configuration</h3>
+<p>The <code>prefix</code> config defaults to the location where node is installed.
+On most systems, this is <code>/usr/local</code>, and most of the time is the same
+as node&#39;s <code>process.installPrefix</code>.</p>
+<p>On windows, this is the exact location of the node.exe binary. On Unix
+systems, it&#39;s one level up, since node is typically installed at
+<code>{prefix}/bin/node</code> rather than <code>{prefix}/node.exe</code>.</p>
+<p>When the <code>global</code> flag is set, npm installs things into this prefix.
+When it is not set, it uses the root of the current package, or the
+current working directory if not in a package already.</p>
+<h3 id="node-modules">Node Modules</h3>
+<p>Packages are dropped into the <code>node_modules</code> folder under the <code>prefix</code>.
+When installing locally, this means that you can
+<code>require(&quot;packagename&quot;)</code> to load its main module, or
+<code>require(&quot;packagename/lib/path/to/sub/module&quot;)</code> to load other modules.</p>
+<p>Global installs on Unix systems go to <code>{prefix}/lib/node_modules</code>.
+Global installs on Windows go to <code>{prefix}/node_modules</code> (that is, no
+<code>lib</code> folder.)</p>
+<p>If you wish to <code>require()</code> a package, then install it locally.</p>
+<h3 id="executables">Executables</h3>
+<p>When in global mode, executables are linked into <code>{prefix}/bin</code> on Unix,
+or directly into <code>{prefix}</code> on Windows.</p>
+<p>When in local mode, executables are linked into
+<code>./node_modules/.bin</code> so that they can be made available to scripts run
+through npm. (For example, so that a test runner will be in the path
+when you run <code>npm test</code>.)</p>
+<h3 id="man-pages">Man Pages</h3>
+<p>When in global mode, man pages are linked into <code>{prefix}/share/man</code>.</p>
+<p>When in local mode, man pages are not installed.</p>
+<p>Man pages are not installed on Windows systems.</p>
+<h3 id="cache">Cache</h3>
+<p>See <code><a href="../cli/npm-cache.html">npm-cache(1)</a></code>. Cache files are stored in <code>~/.npm</code> on Posix, or
+<code>~/npm-cache</code> on Windows.</p>
+<p>This is controlled by the <code>cache</code> configuration param.</p>
+<h3 id="temp-files">Temp Files</h3>
+<p>Temporary files are stored by default in the folder specified by the
+<code>tmp</code> config, which defaults to the TMPDIR, TMP, or TEMP environment
+variables, or <code>/tmp</code> on Unix and <code>c:\windows\temp</code> on Windows.</p>
+<p>Temp files are given a unique folder under this root for each run of the
+program, and are deleted upon successful exit.</p>
+<h2 id="more-information">More Information</h2>
+<p>When installing locally, npm first tries to find an appropriate
+<code>prefix</code> folder. This is so that <code>npm install foo@1.2.3</code> will install
+to the sensible root of your package, even if you happen to have <code>cd</code>ed
+into some other folder.</p>
+<p>Starting at the $PWD, npm will walk up the folder tree checking for a
+folder that contains either a <code>package.json</code> file, or a <code>node_modules</code>
+folder. If such a thing is found, then that is treated as the effective
+&quot;current directory&quot; for the purpose of running npm commands. (This
+behavior is inspired by and similar to git&#39;s .git-folder seeking
+logic when running git commands in a working dir.)</p>
+<p>If no package root is found, then the current folder is used.</p>
+<p>When you run <code>npm install foo@1.2.3</code>, then the package is loaded into
+the cache, and then unpacked into <code>./node_modules/foo</code>. Then, any of
+foo&#39;s dependencies are similarly unpacked into
+<code>./node_modules/foo/node_modules/...</code>.</p>
+<p>Any bin files are symlinked to <code>./node_modules/.bin/</code>, so that they may
+be found by npm scripts when necessary.</p>
+<h3 id="global-installation">Global Installation</h3>
+<p>If the <code>global</code> configuration is set to true, then npm will
+install packages &quot;globally&quot;.</p>
+<p>For global installation, packages are installed roughly the same way,
+but using the folders described above.</p>
+<h3 id="cycles-conflicts-and-folder-parsimony">Cycles, Conflicts, and Folder Parsimony</h3>
+<p>Cycles are handled using the property of node&#39;s module system that it
+walks up the directories looking for <code>node_modules</code> folders. So, at every
+stage, if a package is already installed in an ancestor <code>node_modules</code>
+folder, then it is not installed at the current location.</p>
+<p>Consider the case above, where <code>foo -&gt; bar -&gt; baz</code>. Imagine if, in
+addition to that, baz depended on bar, so you&#39;d have:
+<code>foo -&gt; bar -&gt; baz -&gt; bar -&gt; baz ...</code>. However, since the folder
+structure is: <code>foo/node_modules/bar/node_modules/baz</code>, there&#39;s no need to
+put another copy of bar into <code>.../baz/node_modules</code>, since when it calls
+require(&quot;bar&quot;), it will get the copy that is installed in
+<code>foo/node_modules/bar</code>.</p>
+<p>This shortcut is only used if the exact same
+version would be installed in multiple nested <code>node_modules</code> folders. It
+is still possible to have <code>a/node_modules/b/node_modules/a</code> if the two
+&quot;a&quot; packages are different versions. However, without repeating the
+exact same package multiple times, an infinite regress will always be
+prevented.</p>
+<p>Another optimization can be made by installing dependencies at the
+highest level possible, below the localized &quot;target&quot; folder.</p>
+<h4 id="example">Example</h4>
+<p>Consider this dependency graph:</p>
+<pre><code>foo
++-- blerg@1.2.5
++-- bar@1.2.3
+| +-- blerg@1.x (latest=1.3.7)
+| +-- baz@2.x
+| | `-- quux@3.x
+| | `-- bar@1.2.3 (cycle)
+| `-- asdf@*
+`-- baz@1.2.3
+ `-- quux@3.x
+ `-- bar
+</code></pre><p>In this case, we might expect a folder structure like this:</p>
+<pre><code>foo
++-- node_modules
+ +-- blerg (1.2.5) &lt;---[A]
+ +-- bar (1.2.3) &lt;---[B]
+ | `-- node_modules
+ | +-- baz (2.0.2) &lt;---[C]
+ | | `-- node_modules
+ | | `-- quux (3.2.0)
+ | `-- asdf (2.3.4)
+ `-- baz (1.2.3) &lt;---[D]
+ `-- node_modules
+ `-- quux (3.2.0) &lt;---[E]
+</code></pre><p>Since foo depends directly on <code>bar@1.2.3</code> and <code>baz@1.2.3</code>, those are
+installed in foo&#39;s <code>node_modules</code> folder.</p>
+<p>Even though the latest copy of blerg is 1.3.7, foo has a specific
+dependency on version 1.2.5. So, that gets installed at [A]. Since the
+parent installation of blerg satisfies bar&#39;s dependency on <code>blerg@1.x</code>,
+it does not install another copy under [B].</p>
+<p>Bar [B] also has dependencies on baz and asdf, so those are installed in
+bar&#39;s <code>node_modules</code> folder. Because it depends on <code>baz@2.x</code>, it cannot
+re-use the <code>baz@1.2.3</code> installed in the parent <code>node_modules</code> folder [D],
+and must install its own copy [C].</p>
+<p>Underneath bar, the <code>baz -&gt; quux -&gt; bar</code> dependency creates a cycle.
+However, because bar is already in quux&#39;s ancestry [B], it does not
+unpack another copy of bar into that folder.</p>
+<p>Underneath <code>foo -&gt; baz</code> [D], quux&#39;s [E] folder tree is empty, because its
+dependency on bar is satisfied by the parent folder copy installed at [B].</p>
+<p>For a graphical breakdown of what is installed where, use <code>npm ls</code>.</p>
+<h3 id="publishing">Publishing</h3>
+<p>Upon publishing, npm will look in the <code>node_modules</code> folder. If any of
+the items there are not in the <code>bundledDependencies</code> array, then they will
+not be included in the package tarball.</p>
+<p>This allows a package maintainer to install all of their dependencies
+(and dev dependencies) locally, but only re-publish those items that
+cannot be found elsewhere. See <code><a href="../files/package.json.html">package.json(5)</a></code> for more information.</p>
+<h2 id="see-also">SEE ALSO</h2>
+<ul>
+<li><a href="../misc/npm-faq.html">npm-faq(7)</a></li>
+<li><a href="../files/package.json.html">package.json(5)</a></li>
+<li><a href="../cli/npm-install.html">npm-install(1)</a></li>
+<li><a href="../cli/npm-pack.html">npm-pack(1)</a></li>
+<li><a href="../cli/npm-cache.html">npm-cache(1)</a></li>
+<li><a href="../cli/npm-config.html">npm-config(1)</a></li>
+<li><a href="../files/npmrc.html">npmrc(5)</a></li>
+<li><a href="../misc/npm-config.html">npm-config(7)</a></li>
+<li><a href="../cli/npm-publish.html">npm-publish(1)</a></li>
+</ul>
+
+</div>
+
+<table border=0 cellspacing=0 cellpadding=0 id=npmlogo>
+<tr><td style="width:180px;height:10px;background:rgb(237,127,127)" colspan=18>&nbsp;</td></tr>
+<tr><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td colspan=6 style="width:60px;height:10px;background:#fff">&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td></tr>
+<tr><td colspan=2 style="width:20px;height:30px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=4 colspan=2>&nbsp;</td><td style="width:10px;height:20px;background:rgb(237,127,127)" rowspan=2>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=3 colspan=2>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff" rowspan=2>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff">&nbsp;</td></tr>
+<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
+<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
+</table>
+<p id="footer">npm-folders &mdash; npm@1.4.10</p>
+
diff --git a/deps/npm/html/doc/files/npm-json.html b/deps/npm/html/doc/files/npm-json.html
new file mode 100644
index 000000000..43a9f0742
--- /dev/null
+++ b/deps/npm/html/doc/files/npm-json.html
@@ -0,0 +1,463 @@
+<!doctype html>
+<html>
+ <title>package.json</title>
+ <meta http-equiv="content-type" value="text/html;utf-8">
+ <link rel="stylesheet" type="text/css" href="../../static/style.css">
+ <link rel="canonical" href="https://www.npmjs.org/doc/files/package.json.html">
+ <script async=true src="../../static/toc.js"></script>
+
+ <body>
+ <div id="wrapper">
+
+<h1><a href="../files/package.json.html">package.json</a></h1> <p>Specifics of npm&#39;s package.json handling</p>
+<h2 id="description">DESCRIPTION</h2>
+<p>This document is all you need to know about what&#39;s required in your package.json
+file. It must be actual JSON, not just a JavaScript object literal.</p>
+<p>A lot of the behavior described in this document is affected by the config
+settings described in <code><a href="../misc/npm-config.html">npm-config(7)</a></code>.</p>
+<h2 id="name">name</h2>
+<p>The <em>most</em> important things in your package.json are the name and version fields.
+Those are actually required, and your package won&#39;t install without
+them. The name and version together form an identifier that is assumed
+to be completely unique. Changes to the package should come along with
+changes to the version.</p>
+<p>The name is what your thing is called. Some tips:</p>
+<ul>
+<li>Don&#39;t put &quot;js&quot; or &quot;node&quot; in the name. It&#39;s assumed that it&#39;s js, since you&#39;re
+writing a package.json file, and you can specify the engine using the &quot;engines&quot;
+field. (See below.)</li>
+<li>The name ends up being part of a URL, an argument on the command line, and a
+folder name. Any name with non-url-safe characters will be rejected.
+Also, it can&#39;t start with a dot or an underscore.</li>
+<li>The name will probably be passed as an argument to require(), so it should
+be something short, but also reasonably descriptive.</li>
+<li>You may want to check the npm registry to see if there&#39;s something by that name
+already, before you get too attached to it. <a href="http://registry.npmjs.org/">http://registry.npmjs.org/</a></li>
+</ul>
+<h2 id="version">version</h2>
+<p>The <em>most</em> important things in your package.json are the name and version fields.
+Those are actually required, and your package won&#39;t install without
+them. The name and version together form an identifier that is assumed
+to be completely unique. Changes to the package should come along with
+changes to the version.</p>
+<p>Version must be parseable by
+<a href="https://github.com/isaacs/node-semver">node-semver</a>, which is bundled
+with npm as a dependency. (<code>npm install semver</code> to use it yourself.)</p>
+<p>More on version numbers and ranges at <a href="../misc/semver.html">semver(7)</a>.</p>
+<h2 id="description">description</h2>
+<p>Put a description in it. It&#39;s a string. This helps people discover your
+package, as it&#39;s listed in <code>npm search</code>.</p>
+<h2 id="keywords">keywords</h2>
+<p>Put keywords in it. It&#39;s an array of strings. This helps people
+discover your package as it&#39;s listed in <code>npm search</code>.</p>
+<h2 id="homepage">homepage</h2>
+<p>The url to the project homepage.</p>
+<p><strong>NOTE</strong>: This is <em>not</em> the same as &quot;url&quot;. If you put a &quot;url&quot; field,
+then the registry will think it&#39;s a redirection to your package that has
+been published somewhere else, and spit at you.</p>
+<p>Literally. Spit. I&#39;m so not kidding.</p>
+<h2 id="bugs">bugs</h2>
+<p>The url to your project&#39;s issue tracker and / or the email address to which
+issues should be reported. These are helpful for people who encounter issues
+with your package.</p>
+<p>It should look like this:</p>
+<pre><code>{ &quot;url&quot; : &quot;http://github.com/owner/project/issues&quot;
+, &quot;email&quot; : &quot;project@hostname.com&quot;
+}
+</code></pre><p>You can specify either one or both values. If you want to provide only a url,
+you can specify the value for &quot;bugs&quot; as a simple string instead of an object.</p>
+<p>If a url is provided, it will be used by the <code>npm bugs</code> command.</p>
+<h2 id="license">license</h2>
+<p>You should specify a license for your package so that people know how they are
+permitted to use it, and any restrictions you&#39;re placing on it.</p>
+<p>The simplest way, assuming you&#39;re using a common license such as BSD-3-Clause
+or MIT, is to just specify the standard SPDX ID of the license you&#39;re using,
+like this:</p>
+<pre><code>{ &quot;license&quot; : &quot;BSD-3-Clause&quot; }
+</code></pre><p>You can check <a href="https://spdx.org/licenses/">the full list of SPDX license IDs</a>.
+Ideally you should pick one that is
+<a href="http://opensource.org/licenses/alphabetical">OSI</a> approved.</p>
+<p>It&#39;s also a good idea to include a LICENSE file at the top level in
+your package.</p>
+<h2 id="people-fields-author-contributors">people fields: author, contributors</h2>
+<p>The &quot;author&quot; is one person. &quot;contributors&quot; is an array of people. A &quot;person&quot;
+is an object with a &quot;name&quot; field and optionally &quot;url&quot; and &quot;email&quot;, like this:</p>
+<pre><code>{ &quot;name&quot; : &quot;Barney Rubble&quot;
+, &quot;email&quot; : &quot;b@rubble.com&quot;
+, &quot;url&quot; : &quot;http://barnyrubble.tumblr.com/&quot;
+}
+</code></pre><p>Or you can shorten that all into a single string, and npm will parse it for you:</p>
+<pre><code>&quot;Barney Rubble &lt;b@rubble.com&gt; (http://barnyrubble.tumblr.com/)
+</code></pre><p>Both email and url are optional either way.</p>
+<p>npm also sets a top-level &quot;maintainers&quot; field with your npm user info.</p>
+<h2 id="files">files</h2>
+<p>The &quot;files&quot; field is an array of files to include in your project. If
+you name a folder in the array, then it will also include the files
+inside that folder. (Unless they would be ignored by another rule.)</p>
+<p>You can also provide a &quot;.npmignore&quot; file in the root of your package,
+which will keep files from being included, even if they would be picked
+up by the files array. The &quot;.npmignore&quot; file works just like a
+&quot;.gitignore&quot;.</p>
+<h2 id="main">main</h2>
+<p>The main field is a module ID that is the primary entry point to your program.
+That is, if your package is named <code>foo</code>, and a user installs it, and then does
+<code>require(&quot;foo&quot;)</code>, then your main module&#39;s exports object will be returned.</p>
+<p>This should be a module ID relative to the root of your package folder.</p>
+<p>For most modules, it makes the most sense to have a main script and often not
+much else.</p>
+<h2 id="bin">bin</h2>
+<p>A lot of packages have one or more executable files that they&#39;d like to
+install into the PATH. npm makes this pretty easy (in fact, it uses this
+feature to install the &quot;npm&quot; executable.)</p>
+<p>To use this, supply a <code>bin</code> field in your package.json which is a map of
+command name to local file name. On install, npm will symlink that file into
+<code>prefix/bin</code> for global installs, or <code>./node_modules/.bin/</code> for local
+installs.</p>
+<p>For example, npm has this:</p>
+<pre><code>{ &quot;bin&quot; : { &quot;npm&quot; : &quot;./cli.js&quot; } }
+</code></pre><p>So, when you install npm, it&#39;ll create a symlink from the <code>cli.js</code> script to
+<code>/usr/local/bin/npm</code>.</p>
+<p>If you have a single executable, and its name should be the name
+of the package, then you can just supply it as a string. For example:</p>
+<pre><code>{ &quot;name&quot;: &quot;my-program&quot;
+, &quot;version&quot;: &quot;1.2.5&quot;
+, &quot;bin&quot;: &quot;./path/to/program&quot; }
+</code></pre><p>would be the same as this:</p>
+<pre><code>{ &quot;name&quot;: &quot;my-program&quot;
+, &quot;version&quot;: &quot;1.2.5&quot;
+, &quot;bin&quot; : { &quot;my-program&quot; : &quot;./path/to/program&quot; } }
+</code></pre><h2 id="man">man</h2>
+<p>Specify either a single file or an array of filenames to put in place for the
+<code>man</code> program to find.</p>
+<p>If only a single file is provided, then it&#39;s installed such that it is the
+result from <code>man &lt;pkgname&gt;</code>, regardless of its actual filename. For example:</p>
+<pre><code>{ &quot;name&quot; : &quot;foo&quot;
+, &quot;version&quot; : &quot;1.2.3&quot;
+, &quot;description&quot; : &quot;A packaged foo fooer for fooing foos&quot;
+, &quot;main&quot; : &quot;foo.js&quot;
+, &quot;man&quot; : &quot;./man/doc.1&quot;
+}
+</code></pre><p>would link the <code>./man/doc.1</code> file in such that it is the target for <code>man foo</code></p>
+<p>If the filename doesn&#39;t start with the package name, then it&#39;s prefixed.
+So, this:</p>
+<pre><code>{ &quot;name&quot; : &quot;foo&quot;
+, &quot;version&quot; : &quot;1.2.3&quot;
+, &quot;description&quot; : &quot;A packaged foo fooer for fooing foos&quot;
+, &quot;main&quot; : &quot;foo.js&quot;
+, &quot;man&quot; : [ &quot;./man/foo.1&quot;, &quot;./man/bar.1&quot; ]
+}
+</code></pre><p>will create files to do <code>man foo</code> and <code>man foo-bar</code>.</p>
+<p>Man files must end with a number, and optionally a <code>.gz</code> suffix if they are
+compressed. The number dictates which man section the file is installed into.</p>
+<pre><code>{ &quot;name&quot; : &quot;foo&quot;
+, &quot;version&quot; : &quot;1.2.3&quot;
+, &quot;description&quot; : &quot;A packaged foo fooer for fooing foos&quot;
+, &quot;main&quot; : &quot;foo.js&quot;
+, &quot;man&quot; : [ &quot;./man/foo.1&quot;, &quot;./man/foo.2&quot; ]
+}
+</code></pre><p>will create entries for <code>man foo</code> and <code>man 2 foo</code></p>
+<h2 id="directories">directories</h2>
+<p>The CommonJS <a href="http://wiki.commonjs.org/wiki/Packages/1.0">Packages</a> spec details a
+few ways that you can indicate the structure of your package using a <code>directories</code>
+hash. If you look at <a href="http://registry.npmjs.org/npm/latest">npm&#39;s package.json</a>,
+you&#39;ll see that it has directories for doc, lib, and man.</p>
+<p>In the future, this information may be used in other creative ways.</p>
+<h3 id="directories-lib">directories.lib</h3>
+<p>Tell people where the bulk of your library is. Nothing special is done
+with the lib folder in any way, but it&#39;s useful meta info.</p>
+<h3 id="directories-bin">directories.bin</h3>
+<p>If you specify a &quot;bin&quot; directory, then all the files in that folder will
+be used as the &quot;bin&quot; hash.</p>
+<p>If you have a &quot;bin&quot; hash already, then this has no effect.</p>
+<h3 id="directories-man">directories.man</h3>
+<p>A folder that is full of man pages. Sugar to generate a &quot;man&quot; array by
+walking the folder.</p>
+<h3 id="directories-doc">directories.doc</h3>
+<p>Put markdown files in here. Eventually, these will be displayed nicely,
+maybe, someday.</p>
+<h3 id="directories-example">directories.example</h3>
+<p>Put example scripts in here. Someday, it might be exposed in some clever way.</p>
+<h2 id="repository">repository</h2>
+<p>Specify the place where your code lives. This is helpful for people who
+want to contribute. If the git repo is on github, then the <code>npm docs</code>
+command will be able to find you.</p>
+<p>Do it like this:</p>
+<pre><code>&quot;repository&quot; :
+ { &quot;type&quot; : &quot;git&quot;
+ , &quot;url&quot; : &quot;http://github.com/npm/npm.git&quot;
+ }
+
+&quot;repository&quot; :
+ { &quot;type&quot; : &quot;svn&quot;
+ , &quot;url&quot; : &quot;http://v8.googlecode.com/svn/trunk/&quot;
+ }
+</code></pre><p>The URL should be a publicly available (perhaps read-only) url that can be handed
+directly to a VCS program without any modification. It should not be a url to an
+html project page that you put in your browser. It&#39;s for computers.</p>
+<h2 id="scripts">scripts</h2>
+<p>The &quot;scripts&quot; member is an object hash of script commands that are run
+at various times in the lifecycle of your package. The key is the lifecycle
+event, and the value is the command to run at that point.</p>
+<p>See <code><a href="../misc/npm-scripts.html">npm-scripts(7)</a></code> to find out more about writing package scripts.</p>
+<h2 id="config">config</h2>
+<p>A &quot;config&quot; hash can be used to set configuration
+parameters used in package scripts that persist across upgrades. For
+instance, if a package had the following:</p>
+<pre><code>{ &quot;name&quot; : &quot;foo&quot;
+, &quot;config&quot; : { &quot;port&quot; : &quot;8080&quot; } }
+</code></pre><p>and then had a &quot;start&quot; command that then referenced the
+<code>npm_package_config_port</code> environment variable, then the user could
+override that by doing <code>npm config set foo:port 8001</code>.</p>
+<p>See <code><a href="../misc/npm-config.html">npm-config(7)</a></code> and <code><a href="../misc/npm-scripts.html">npm-scripts(7)</a></code> for more on package
+configs.</p>
+<h2 id="dependencies">dependencies</h2>
+<p>Dependencies are specified with a simple hash of package name to
+version range. The version range is a string which has one or more
+space-separated descriptors. Dependencies can also be identified with
+a tarball or git URL.</p>
+<p><strong>Please do not put test harnesses or transpilers in your
+<code>dependencies</code> hash.</strong> See <code>devDependencies</code>, below.</p>
+<p>See <a href="../misc/semver.html">semver(7)</a> for more details about specifying version ranges.</p>
+<ul>
+<li><code>version</code> Must match <code>version</code> exactly</li>
+<li><code>&gt;version</code> Must be greater than <code>version</code></li>
+<li><code>&gt;=version</code> etc</li>
+<li><code>&lt;version</code></li>
+<li><code>&lt;=version</code></li>
+<li><code>~version</code> &quot;Approximately equivalent to version&quot; See <a href="../misc/semver.html">semver(7)</a></li>
+<li><code>^version</code> &quot;Compatible with version&quot; See <a href="../misc/semver.html">semver(7)</a></li>
+<li><code>1.2.x</code> 1.2.0, 1.2.1, etc., but not 1.3.0</li>
+<li><code>http://...</code> See &#39;URLs as Dependencies&#39; below</li>
+<li><code>*</code> Matches any version</li>
+<li><code>&quot;&quot;</code> (just an empty string) Same as <code>*</code></li>
+<li><code>version1 - version2</code> Same as <code>&gt;=version1 &lt;=version2</code>.</li>
+<li><code>range1 || range2</code> Passes if either range1 or range2 are satisfied.</li>
+<li><code>git...</code> See &#39;Git URLs as Dependencies&#39; below</li>
+<li><code>user/repo</code> See &#39;GitHub URLs&#39; below</li>
+</ul>
+<p>For example, these are all valid:</p>
+<pre><code>{ &quot;dependencies&quot; :
+ { &quot;foo&quot; : &quot;1.0.0 - 2.9999.9999&quot;
+ , &quot;bar&quot; : &quot;&gt;=1.0.2 &lt;2.1.2&quot;
+ , &quot;baz&quot; : &quot;&gt;1.0.2 &lt;=2.3.4&quot;
+ , &quot;boo&quot; : &quot;2.0.1&quot;
+ , &quot;qux&quot; : &quot;&lt;1.0.0 || &gt;=2.3.1 &lt;2.4.5 || &gt;=2.5.2 &lt;3.0.0&quot;
+ , &quot;asd&quot; : &quot;http://asdf.com/asdf.tar.gz&quot;
+ , &quot;til&quot; : &quot;~1.2&quot;
+ , &quot;elf&quot; : &quot;~1.2.3&quot;
+ , &quot;two&quot; : &quot;2.x&quot;
+ , &quot;thr&quot; : &quot;3.3.x&quot;
+ }
+}
+</code></pre><h3 id="urls-as-dependencies">URLs as Dependencies</h3>
+<p>You may specify a tarball URL in place of a version range.</p>
+<p>This tarball will be downloaded and installed locally to your package at
+install time.</p>
+<h3 id="git-urls-as-dependencies">Git URLs as Dependencies</h3>
+<p>Git urls can be of the form:</p>
+<pre><code>git://github.com/user/project.git#commit-ish
+git+ssh://user@hostname:project.git#commit-ish
+git+ssh://user@hostname/project.git#commit-ish
+git+http://user@hostname/project/blah.git#commit-ish
+git+https://user@hostname/project/blah.git#commit-ish
+</code></pre><p>The <code>commit-ish</code> can be any tag, sha, or branch which can be supplied as
+an argument to <code>git checkout</code>. The default is <code>master</code>.</p>
+<h2 id="github-urls">GitHub URLs</h2>
+<p>As of version 1.1.65, you can refer to GitHub urls as just &quot;foo&quot;: &quot;user/foo-project&quot;. For example:</p>
+<pre><code>{
+ &quot;name&quot;: &quot;foo&quot;,
+ &quot;version&quot;: &quot;0.0.0&quot;,
+ &quot;dependencies&quot;: {
+ &quot;express&quot;: &quot;visionmedia/express&quot;
+ }
+}
+</code></pre><h2 id="devdependencies">devDependencies</h2>
+<p>If someone is planning on downloading and using your module in their
+program, then they probably don&#39;t want or need to download and build
+the external test or documentation framework that you use.</p>
+<p>In this case, it&#39;s best to list these additional items in a
+<code>devDependencies</code> hash.</p>
+<p>These things will be installed when doing <code>npm link</code> or <code>npm install</code>
+from the root of a package, and can be managed like any other npm
+configuration param. See <code><a href="../misc/npm-config.html">npm-config(7)</a></code> for more on the topic.</p>
+<p>For build steps that are not platform-specific, such as compiling
+CoffeeScript or other languages to JavaScript, use the <code>prepublish</code>
+script to do this, and make the required package a devDependency.</p>
+<p>For example:</p>
+<pre><code>{ &quot;name&quot;: &quot;ethopia-waza&quot;,
+ &quot;description&quot;: &quot;a delightfully fruity coffee varietal&quot;,
+ &quot;version&quot;: &quot;1.2.3&quot;,
+ &quot;devDependencies&quot;: {
+ &quot;coffee-script&quot;: &quot;~1.6.3&quot;
+ },
+ &quot;scripts&quot;: {
+ &quot;prepublish&quot;: &quot;coffee -o lib/ -c src/waza.coffee&quot;
+ },
+ &quot;main&quot;: &quot;lib/waza.js&quot;
+}
+</code></pre><p>The <code>prepublish</code> script will be run before publishing, so that users
+can consume the functionality without requiring them to compile it
+themselves. In dev mode (ie, locally running <code>npm install</code>), it&#39;ll
+run this script as well, so that you can test it easily.</p>
+<h2 id="peerdependencies">peerDependencies</h2>
+<p>In some cases, you want to express the compatibility of your package with an
+host tool or library, while not necessarily doing a <code>require</code> of this host.
+This is usually refered to as a <em>plugin</em>. Notably, your module may be exposing
+a specific interface, expected and specified by the host documentation.</p>
+<p>For example:</p>
+<pre><code>{
+ &quot;name&quot;: &quot;tea-latte&quot;,
+ &quot;version&quot;: &quot;1.3.5&quot;
+ &quot;peerDependencies&quot;: {
+ &quot;tea&quot;: &quot;2.x&quot;
+ }
+}
+</code></pre><p>This ensures your package <code>tea-latte</code> can be installed <em>along</em> with the second
+major version of the host package <code>tea</code> only. The host package is automatically
+installed if needed. <code>npm install tea-latte</code> could possibly yield the following
+dependency graph:</p>
+<pre><code>├── tea-latte@1.3.5
+└── tea@2.2.0
+</code></pre><p>Trying to install another plugin with a conflicting requirement will cause an
+error. For this reason, make sure your plugin requirement is as broad as
+possible, and not to lock it down to specific patch versions.</p>
+<p>Assuming the host complies with <a href="http://semver.org/">semver</a>, only changes in
+the host package&#39;s major version will break your plugin. Thus, if you&#39;ve worked
+with every 1.x version of the host package, use <code>&quot;^1.0&quot;</code> or <code>&quot;1.x&quot;</code> to express
+this. If you depend on features introduced in 1.5.2, use <code>&quot;&gt;= 1.5.2 &lt; 2&quot;</code>.</p>
+<h2 id="bundleddependencies">bundledDependencies</h2>
+<p>Array of package names that will be bundled when publishing the package.</p>
+<p>If this is spelled <code>&quot;bundleDependencies&quot;</code>, then that is also honorable.</p>
+<h2 id="optionaldependencies">optionalDependencies</h2>
+<p>If a dependency can be used, but you would like npm to proceed if it
+cannot be found or fails to install, then you may put it in the
+<code>optionalDependencies</code> hash. This is a map of package name to version
+or url, just like the <code>dependencies</code> hash. The difference is that
+failure is tolerated.</p>
+<p>It is still your program&#39;s responsibility to handle the lack of the
+dependency. For example, something like this:</p>
+<pre><code>try {
+ var foo = require(&#39;foo&#39;)
+ var fooVersion = require(&#39;foo/package.json&#39;).version
+} catch (er) {
+ foo = null
+}
+if ( notGoodFooVersion(fooVersion) ) {
+ foo = null
+}
+
+// .. then later in your program ..
+
+if (foo) {
+ foo.doFooThings()
+}
+</code></pre><p>Entries in <code>optionalDependencies</code> will override entries of the same name in
+<code>dependencies</code>, so it&#39;s usually best to only put in one place.</p>
+<h2 id="engines">engines</h2>
+<p>You can specify the version of node that your stuff works on:</p>
+<pre><code>{ &quot;engines&quot; : { &quot;node&quot; : &quot;&gt;=0.10.3 &lt;0.12&quot; } }
+</code></pre><p>And, like with dependencies, if you don&#39;t specify the version (or if you
+specify &quot;*&quot; as the version), then any version of node will do.</p>
+<p>If you specify an &quot;engines&quot; field, then npm will require that &quot;node&quot; be
+somewhere on that list. If &quot;engines&quot; is omitted, then npm will just assume
+that it works on node.</p>
+<p>You can also use the &quot;engines&quot; field to specify which versions of npm
+are capable of properly installing your program. For example:</p>
+<pre><code>{ &quot;engines&quot; : { &quot;npm&quot; : &quot;~1.0.20&quot; } }
+</code></pre><p>Note that, unless the user has set the <code>engine-strict</code> config flag, this
+field is advisory only.</p>
+<h2 id="enginestrict">engineStrict</h2>
+<p>If you are sure that your module will <em>definitely not</em> run properly on
+versions of Node/npm other than those specified in the <code>engines</code> hash,
+then you can set <code>&quot;engineStrict&quot;: true</code> in your package.json file.
+This will override the user&#39;s <code>engine-strict</code> config setting.</p>
+<p>Please do not do this unless you are really very very sure. If your
+engines hash is something overly restrictive, you can quite easily and
+inadvertently lock yourself into obscurity and prevent your users from
+updating to new versions of Node. Consider this choice carefully. If
+people abuse it, it will be removed in a future version of npm.</p>
+<h2 id="os">os</h2>
+<p>You can specify which operating systems your
+module will run on:</p>
+<pre><code>&quot;os&quot; : [ &quot;darwin&quot;, &quot;linux&quot; ]
+</code></pre><p>You can also blacklist instead of whitelist operating systems,
+just prepend the blacklisted os with a &#39;!&#39;:</p>
+<pre><code>&quot;os&quot; : [ &quot;!win32&quot; ]
+</code></pre><p>The host operating system is determined by <code>process.platform</code></p>
+<p>It is allowed to both blacklist, and whitelist, although there isn&#39;t any
+good reason to do this.</p>
+<h2 id="cpu">cpu</h2>
+<p>If your code only runs on certain cpu architectures,
+you can specify which ones.</p>
+<pre><code>&quot;cpu&quot; : [ &quot;x64&quot;, &quot;ia32&quot; ]
+</code></pre><p>Like the <code>os</code> option, you can also blacklist architectures:</p>
+<pre><code>&quot;cpu&quot; : [ &quot;!arm&quot;, &quot;!mips&quot; ]
+</code></pre><p>The host architecture is determined by <code>process.arch</code></p>
+<h2 id="preferglobal">preferGlobal</h2>
+<p>If your package is primarily a command-line application that should be
+installed globally, then set this value to <code>true</code> to provide a warning
+if it is installed locally.</p>
+<p>It doesn&#39;t actually prevent users from installing it locally, but it
+does help prevent some confusion if it doesn&#39;t work as expected.</p>
+<h2 id="private">private</h2>
+<p>If you set <code>&quot;private&quot;: true</code> in your package.json, then npm will refuse
+to publish it.</p>
+<p>This is a way to prevent accidental publication of private repositories.
+If you would like to ensure that a given package is only ever published
+to a specific registry (for example, an internal registry),
+then use the <code>publishConfig</code> hash described below
+to override the <code>registry</code> config param at publish-time.</p>
+<h2 id="publishconfig">publishConfig</h2>
+<p>This is a set of config values that will be used at publish-time. It&#39;s
+especially handy if you want to set the tag or registry, so that you can
+ensure that a given package is not tagged with &quot;latest&quot; or published to
+the global public registry by default.</p>
+<p>Any config values can be overridden, but of course only &quot;tag&quot; and
+&quot;registry&quot; probably matter for the purposes of publishing.</p>
+<p>See <code><a href="../misc/npm-config.html">npm-config(7)</a></code> to see the list of config options that can be
+overridden.</p>
+<h2 id="default-values">DEFAULT VALUES</h2>
+<p>npm will default some values based on package contents.</p>
+<ul>
+<li><p><code>&quot;scripts&quot;: {&quot;start&quot;: &quot;node server.js&quot;}</code></p>
+<p>If there is a <code>server.js</code> file in the root of your package, then npm
+will default the <code>start</code> command to <code>node server.js</code>.</p>
+</li>
+<li><p><code>&quot;scripts&quot;:{&quot;preinstall&quot;: &quot;node-gyp rebuild&quot;}</code></p>
+<p>If there is a <code>binding.gyp</code> file in the root of your package, npm will
+default the <code>preinstall</code> command to compile using node-gyp.</p>
+</li>
+<li><p><code>&quot;contributors&quot;: [...]</code></p>
+<p>If there is an <code>AUTHORS</code> file in the root of your package, npm will
+treat each line as a <code>Name &lt;email&gt; (url)</code> format, where email and url
+are optional. Lines which start with a <code>#</code> or are blank, will be
+ignored.</p>
+</li>
+</ul>
+<h2 id="see-also">SEE ALSO</h2>
+<ul>
+<li><a href="../misc/semver.html">semver(7)</a></li>
+<li><a href="../cli/npm-init.html">npm-init(1)</a></li>
+<li><a href="../cli/npm-version.html">npm-version(1)</a></li>
+<li><a href="../cli/npm-config.html">npm-config(1)</a></li>
+<li><a href="../misc/npm-config.html">npm-config(7)</a></li>
+<li><a href="../cli/npm-help.html">npm-help(1)</a></li>
+<li><a href="../misc/npm-faq.html">npm-faq(7)</a></li>
+<li><a href="../cli/npm-install.html">npm-install(1)</a></li>
+<li><a href="../cli/npm-publish.html">npm-publish(1)</a></li>
+<li><a href="../cli/npm-rm.html">npm-rm(1)</a></li>
+</ul>
+
+</div>
+
+<table border=0 cellspacing=0 cellpadding=0 id=npmlogo>
+<tr><td style="width:180px;height:10px;background:rgb(237,127,127)" colspan=18>&nbsp;</td></tr>
+<tr><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td colspan=6 style="width:60px;height:10px;background:#fff">&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td></tr>
+<tr><td colspan=2 style="width:20px;height:30px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=4 colspan=2>&nbsp;</td><td style="width:10px;height:20px;background:rgb(237,127,127)" rowspan=2>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=3 colspan=2>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff" rowspan=2>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff">&nbsp;</td></tr>
+<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
+<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
+</table>
+<p id="footer">package.json &mdash; npm@1.4.10</p>
+
diff --git a/deps/npm/html/doc/files/npmrc.html b/deps/npm/html/doc/files/npmrc.html
new file mode 100644
index 000000000..b6df4dc57
--- /dev/null
+++ b/deps/npm/html/doc/files/npmrc.html
@@ -0,0 +1,68 @@
+<!doctype html>
+<html>
+ <title>npmrc</title>
+ <meta http-equiv="content-type" value="text/html;utf-8">
+ <link rel="stylesheet" type="text/css" href="../../static/style.css">
+ <link rel="canonical" href="https://www.npmjs.org/doc/files/npmrc.html">
+ <script async=true src="../../static/toc.js"></script>
+
+ <body>
+ <div id="wrapper">
+
+<h1><a href="../files/npmrc.html">npmrc</a></h1> <p>The npm config files</p>
+<h2 id="description">DESCRIPTION</h2>
+<p>npm gets its config settings from the command line, environment
+variables, and <code>npmrc</code> files.</p>
+<p>The <code>npm config</code> command can be used to update and edit the contents
+of the user and global npmrc files.</p>
+<p>For a list of available configuration options, see <a href="../misc/npm-config.html">npm-config(7)</a>.</p>
+<h2 id="files">FILES</h2>
+<p>The three relevant files are:</p>
+<ul>
+<li>per-user config file (~/.npmrc)</li>
+<li>global config file ($PREFIX/npmrc)</li>
+<li>npm builtin config file (/path/to/npm/npmrc)</li>
+</ul>
+<p>All npm config files are an ini-formatted list of <code>key = value</code>
+parameters. Environment variables can be replaced using
+<code>${VARIABLE_NAME}</code>. For example:</p>
+<pre><code>prefix = ${HOME}/.npm-packages
+</code></pre><p>Each of these files is loaded, and config options are resolved in
+priority order. For example, a setting in the userconfig file would
+override the setting in the globalconfig file.</p>
+<h3 id="per-user-config-file">Per-user config file</h3>
+<p><code>$HOME/.npmrc</code> (or the <code>userconfig</code> param, if set in the environment
+or on the command line)</p>
+<h3 id="global-config-file">Global config file</h3>
+<p><code>$PREFIX/etc/npmrc</code> (or the <code>globalconfig</code> param, if set above):
+This file is an ini-file formatted list of <code>key = value</code> parameters.
+Environment variables can be replaced as above.</p>
+<h3 id="built-in-config-file">Built-in config file</h3>
+<p><code>path/to/npm/itself/npmrc</code></p>
+<p>This is an unchangeable &quot;builtin&quot; configuration file that npm keeps
+consistent across updates. Set fields in here using the <code>./configure</code>
+script that comes with npm. This is primarily for distribution
+maintainers to override default configs in a standard and consistent
+manner.</p>
+<h2 id="see-also">SEE ALSO</h2>
+<ul>
+<li><a href="../files/npm-folders.html">npm-folders(5)</a></li>
+<li><a href="../cli/npm-config.html">npm-config(1)</a></li>
+<li><a href="../misc/npm-config.html">npm-config(7)</a></li>
+<li><a href="../files/package.json.html">package.json(5)</a></li>
+<li><a href="../cli/npm.html">npm(1)</a></li>
+</ul>
+
+</div>
+
+<table border=0 cellspacing=0 cellpadding=0 id=npmlogo>
+<tr><td style="width:180px;height:10px;background:rgb(237,127,127)" colspan=18>&nbsp;</td></tr>
+<tr><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td colspan=6 style="width:60px;height:10px;background:#fff">&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td></tr>
+<tr><td colspan=2 style="width:20px;height:30px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=4 colspan=2>&nbsp;</td><td style="width:10px;height:20px;background:rgb(237,127,127)" rowspan=2>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=3 colspan=2>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff" rowspan=2>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff">&nbsp;</td></tr>
+<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
+<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
+</table>
+<p id="footer">npmrc &mdash; npm@1.4.10</p>
+
diff --git a/deps/npm/html/doc/files/package.json.html b/deps/npm/html/doc/files/package.json.html
new file mode 100644
index 000000000..43a9f0742
--- /dev/null
+++ b/deps/npm/html/doc/files/package.json.html
@@ -0,0 +1,463 @@
+<!doctype html>
+<html>
+ <title>package.json</title>
+ <meta http-equiv="content-type" value="text/html;utf-8">
+ <link rel="stylesheet" type="text/css" href="../../static/style.css">
+ <link rel="canonical" href="https://www.npmjs.org/doc/files/package.json.html">
+ <script async=true src="../../static/toc.js"></script>
+
+ <body>
+ <div id="wrapper">
+
+<h1><a href="../files/package.json.html">package.json</a></h1> <p>Specifics of npm&#39;s package.json handling</p>
+<h2 id="description">DESCRIPTION</h2>
+<p>This document is all you need to know about what&#39;s required in your package.json
+file. It must be actual JSON, not just a JavaScript object literal.</p>
+<p>A lot of the behavior described in this document is affected by the config
+settings described in <code><a href="../misc/npm-config.html">npm-config(7)</a></code>.</p>
+<h2 id="name">name</h2>
+<p>The <em>most</em> important things in your package.json are the name and version fields.
+Those are actually required, and your package won&#39;t install without
+them. The name and version together form an identifier that is assumed
+to be completely unique. Changes to the package should come along with
+changes to the version.</p>
+<p>The name is what your thing is called. Some tips:</p>
+<ul>
+<li>Don&#39;t put &quot;js&quot; or &quot;node&quot; in the name. It&#39;s assumed that it&#39;s js, since you&#39;re
+writing a package.json file, and you can specify the engine using the &quot;engines&quot;
+field. (See below.)</li>
+<li>The name ends up being part of a URL, an argument on the command line, and a
+folder name. Any name with non-url-safe characters will be rejected.
+Also, it can&#39;t start with a dot or an underscore.</li>
+<li>The name will probably be passed as an argument to require(), so it should
+be something short, but also reasonably descriptive.</li>
+<li>You may want to check the npm registry to see if there&#39;s something by that name
+already, before you get too attached to it. <a href="http://registry.npmjs.org/">http://registry.npmjs.org/</a></li>
+</ul>
+<h2 id="version">version</h2>
+<p>The <em>most</em> important things in your package.json are the name and version fields.
+Those are actually required, and your package won&#39;t install without
+them. The name and version together form an identifier that is assumed
+to be completely unique. Changes to the package should come along with
+changes to the version.</p>
+<p>Version must be parseable by
+<a href="https://github.com/isaacs/node-semver">node-semver</a>, which is bundled
+with npm as a dependency. (<code>npm install semver</code> to use it yourself.)</p>
+<p>More on version numbers and ranges at <a href="../misc/semver.html">semver(7)</a>.</p>
+<h2 id="description">description</h2>
+<p>Put a description in it. It&#39;s a string. This helps people discover your
+package, as it&#39;s listed in <code>npm search</code>.</p>
+<h2 id="keywords">keywords</h2>
+<p>Put keywords in it. It&#39;s an array of strings. This helps people
+discover your package as it&#39;s listed in <code>npm search</code>.</p>
+<h2 id="homepage">homepage</h2>
+<p>The url to the project homepage.</p>
+<p><strong>NOTE</strong>: This is <em>not</em> the same as &quot;url&quot;. If you put a &quot;url&quot; field,
+then the registry will think it&#39;s a redirection to your package that has
+been published somewhere else, and spit at you.</p>
+<p>Literally. Spit. I&#39;m so not kidding.</p>
+<h2 id="bugs">bugs</h2>
+<p>The url to your project&#39;s issue tracker and / or the email address to which
+issues should be reported. These are helpful for people who encounter issues
+with your package.</p>
+<p>It should look like this:</p>
+<pre><code>{ &quot;url&quot; : &quot;http://github.com/owner/project/issues&quot;
+, &quot;email&quot; : &quot;project@hostname.com&quot;
+}
+</code></pre><p>You can specify either one or both values. If you want to provide only a url,
+you can specify the value for &quot;bugs&quot; as a simple string instead of an object.</p>
+<p>If a url is provided, it will be used by the <code>npm bugs</code> command.</p>
+<h2 id="license">license</h2>
+<p>You should specify a license for your package so that people know how they are
+permitted to use it, and any restrictions you&#39;re placing on it.</p>
+<p>The simplest way, assuming you&#39;re using a common license such as BSD-3-Clause
+or MIT, is to just specify the standard SPDX ID of the license you&#39;re using,
+like this:</p>
+<pre><code>{ &quot;license&quot; : &quot;BSD-3-Clause&quot; }
+</code></pre><p>You can check <a href="https://spdx.org/licenses/">the full list of SPDX license IDs</a>.
+Ideally you should pick one that is
+<a href="http://opensource.org/licenses/alphabetical">OSI</a> approved.</p>
+<p>It&#39;s also a good idea to include a LICENSE file at the top level in
+your package.</p>
+<h2 id="people-fields-author-contributors">people fields: author, contributors</h2>
+<p>The &quot;author&quot; is one person. &quot;contributors&quot; is an array of people. A &quot;person&quot;
+is an object with a &quot;name&quot; field and optionally &quot;url&quot; and &quot;email&quot;, like this:</p>
+<pre><code>{ &quot;name&quot; : &quot;Barney Rubble&quot;
+, &quot;email&quot; : &quot;b@rubble.com&quot;
+, &quot;url&quot; : &quot;http://barnyrubble.tumblr.com/&quot;
+}
+</code></pre><p>Or you can shorten that all into a single string, and npm will parse it for you:</p>
+<pre><code>&quot;Barney Rubble &lt;b@rubble.com&gt; (http://barnyrubble.tumblr.com/)
+</code></pre><p>Both email and url are optional either way.</p>
+<p>npm also sets a top-level &quot;maintainers&quot; field with your npm user info.</p>
+<h2 id="files">files</h2>
+<p>The &quot;files&quot; field is an array of files to include in your project. If
+you name a folder in the array, then it will also include the files
+inside that folder. (Unless they would be ignored by another rule.)</p>
+<p>You can also provide a &quot;.npmignore&quot; file in the root of your package,
+which will keep files from being included, even if they would be picked
+up by the files array. The &quot;.npmignore&quot; file works just like a
+&quot;.gitignore&quot;.</p>
+<h2 id="main">main</h2>
+<p>The main field is a module ID that is the primary entry point to your program.
+That is, if your package is named <code>foo</code>, and a user installs it, and then does
+<code>require(&quot;foo&quot;)</code>, then your main module&#39;s exports object will be returned.</p>
+<p>This should be a module ID relative to the root of your package folder.</p>
+<p>For most modules, it makes the most sense to have a main script and often not
+much else.</p>
+<h2 id="bin">bin</h2>
+<p>A lot of packages have one or more executable files that they&#39;d like to
+install into the PATH. npm makes this pretty easy (in fact, it uses this
+feature to install the &quot;npm&quot; executable.)</p>
+<p>To use this, supply a <code>bin</code> field in your package.json which is a map of
+command name to local file name. On install, npm will symlink that file into
+<code>prefix/bin</code> for global installs, or <code>./node_modules/.bin/</code> for local
+installs.</p>
+<p>For example, npm has this:</p>
+<pre><code>{ &quot;bin&quot; : { &quot;npm&quot; : &quot;./cli.js&quot; } }
+</code></pre><p>So, when you install npm, it&#39;ll create a symlink from the <code>cli.js</code> script to
+<code>/usr/local/bin/npm</code>.</p>
+<p>If you have a single executable, and its name should be the name
+of the package, then you can just supply it as a string. For example:</p>
+<pre><code>{ &quot;name&quot;: &quot;my-program&quot;
+, &quot;version&quot;: &quot;1.2.5&quot;
+, &quot;bin&quot;: &quot;./path/to/program&quot; }
+</code></pre><p>would be the same as this:</p>
+<pre><code>{ &quot;name&quot;: &quot;my-program&quot;
+, &quot;version&quot;: &quot;1.2.5&quot;
+, &quot;bin&quot; : { &quot;my-program&quot; : &quot;./path/to/program&quot; } }
+</code></pre><h2 id="man">man</h2>
+<p>Specify either a single file or an array of filenames to put in place for the
+<code>man</code> program to find.</p>
+<p>If only a single file is provided, then it&#39;s installed such that it is the
+result from <code>man &lt;pkgname&gt;</code>, regardless of its actual filename. For example:</p>
+<pre><code>{ &quot;name&quot; : &quot;foo&quot;
+, &quot;version&quot; : &quot;1.2.3&quot;
+, &quot;description&quot; : &quot;A packaged foo fooer for fooing foos&quot;
+, &quot;main&quot; : &quot;foo.js&quot;
+, &quot;man&quot; : &quot;./man/doc.1&quot;
+}
+</code></pre><p>would link the <code>./man/doc.1</code> file in such that it is the target for <code>man foo</code></p>
+<p>If the filename doesn&#39;t start with the package name, then it&#39;s prefixed.
+So, this:</p>
+<pre><code>{ &quot;name&quot; : &quot;foo&quot;
+, &quot;version&quot; : &quot;1.2.3&quot;
+, &quot;description&quot; : &quot;A packaged foo fooer for fooing foos&quot;
+, &quot;main&quot; : &quot;foo.js&quot;
+, &quot;man&quot; : [ &quot;./man/foo.1&quot;, &quot;./man/bar.1&quot; ]
+}
+</code></pre><p>will create files to do <code>man foo</code> and <code>man foo-bar</code>.</p>
+<p>Man files must end with a number, and optionally a <code>.gz</code> suffix if they are
+compressed. The number dictates which man section the file is installed into.</p>
+<pre><code>{ &quot;name&quot; : &quot;foo&quot;
+, &quot;version&quot; : &quot;1.2.3&quot;
+, &quot;description&quot; : &quot;A packaged foo fooer for fooing foos&quot;
+, &quot;main&quot; : &quot;foo.js&quot;
+, &quot;man&quot; : [ &quot;./man/foo.1&quot;, &quot;./man/foo.2&quot; ]
+}
+</code></pre><p>will create entries for <code>man foo</code> and <code>man 2 foo</code></p>
+<h2 id="directories">directories</h2>
+<p>The CommonJS <a href="http://wiki.commonjs.org/wiki/Packages/1.0">Packages</a> spec details a
+few ways that you can indicate the structure of your package using a <code>directories</code>
+hash. If you look at <a href="http://registry.npmjs.org/npm/latest">npm&#39;s package.json</a>,
+you&#39;ll see that it has directories for doc, lib, and man.</p>
+<p>In the future, this information may be used in other creative ways.</p>
+<h3 id="directories-lib">directories.lib</h3>
+<p>Tell people where the bulk of your library is. Nothing special is done
+with the lib folder in any way, but it&#39;s useful meta info.</p>
+<h3 id="directories-bin">directories.bin</h3>
+<p>If you specify a &quot;bin&quot; directory, then all the files in that folder will
+be used as the &quot;bin&quot; hash.</p>
+<p>If you have a &quot;bin&quot; hash already, then this has no effect.</p>
+<h3 id="directories-man">directories.man</h3>
+<p>A folder that is full of man pages. Sugar to generate a &quot;man&quot; array by
+walking the folder.</p>
+<h3 id="directories-doc">directories.doc</h3>
+<p>Put markdown files in here. Eventually, these will be displayed nicely,
+maybe, someday.</p>
+<h3 id="directories-example">directories.example</h3>
+<p>Put example scripts in here. Someday, it might be exposed in some clever way.</p>
+<h2 id="repository">repository</h2>
+<p>Specify the place where your code lives. This is helpful for people who
+want to contribute. If the git repo is on github, then the <code>npm docs</code>
+command will be able to find you.</p>
+<p>Do it like this:</p>
+<pre><code>&quot;repository&quot; :
+ { &quot;type&quot; : &quot;git&quot;
+ , &quot;url&quot; : &quot;http://github.com/npm/npm.git&quot;
+ }
+
+&quot;repository&quot; :
+ { &quot;type&quot; : &quot;svn&quot;
+ , &quot;url&quot; : &quot;http://v8.googlecode.com/svn/trunk/&quot;
+ }
+</code></pre><p>The URL should be a publicly available (perhaps read-only) url that can be handed
+directly to a VCS program without any modification. It should not be a url to an
+html project page that you put in your browser. It&#39;s for computers.</p>
+<h2 id="scripts">scripts</h2>
+<p>The &quot;scripts&quot; member is an object hash of script commands that are run
+at various times in the lifecycle of your package. The key is the lifecycle
+event, and the value is the command to run at that point.</p>
+<p>See <code><a href="../misc/npm-scripts.html">npm-scripts(7)</a></code> to find out more about writing package scripts.</p>
+<h2 id="config">config</h2>
+<p>A &quot;config&quot; hash can be used to set configuration
+parameters used in package scripts that persist across upgrades. For
+instance, if a package had the following:</p>
+<pre><code>{ &quot;name&quot; : &quot;foo&quot;
+, &quot;config&quot; : { &quot;port&quot; : &quot;8080&quot; } }
+</code></pre><p>and then had a &quot;start&quot; command that then referenced the
+<code>npm_package_config_port</code> environment variable, then the user could
+override that by doing <code>npm config set foo:port 8001</code>.</p>
+<p>See <code><a href="../misc/npm-config.html">npm-config(7)</a></code> and <code><a href="../misc/npm-scripts.html">npm-scripts(7)</a></code> for more on package
+configs.</p>
+<h2 id="dependencies">dependencies</h2>
+<p>Dependencies are specified with a simple hash of package name to
+version range. The version range is a string which has one or more
+space-separated descriptors. Dependencies can also be identified with
+a tarball or git URL.</p>
+<p><strong>Please do not put test harnesses or transpilers in your
+<code>dependencies</code> hash.</strong> See <code>devDependencies</code>, below.</p>
+<p>See <a href="../misc/semver.html">semver(7)</a> for more details about specifying version ranges.</p>
+<ul>
+<li><code>version</code> Must match <code>version</code> exactly</li>
+<li><code>&gt;version</code> Must be greater than <code>version</code></li>
+<li><code>&gt;=version</code> etc</li>
+<li><code>&lt;version</code></li>
+<li><code>&lt;=version</code></li>
+<li><code>~version</code> &quot;Approximately equivalent to version&quot; See <a href="../misc/semver.html">semver(7)</a></li>
+<li><code>^version</code> &quot;Compatible with version&quot; See <a href="../misc/semver.html">semver(7)</a></li>
+<li><code>1.2.x</code> 1.2.0, 1.2.1, etc., but not 1.3.0</li>
+<li><code>http://...</code> See &#39;URLs as Dependencies&#39; below</li>
+<li><code>*</code> Matches any version</li>
+<li><code>&quot;&quot;</code> (just an empty string) Same as <code>*</code></li>
+<li><code>version1 - version2</code> Same as <code>&gt;=version1 &lt;=version2</code>.</li>
+<li><code>range1 || range2</code> Passes if either range1 or range2 are satisfied.</li>
+<li><code>git...</code> See &#39;Git URLs as Dependencies&#39; below</li>
+<li><code>user/repo</code> See &#39;GitHub URLs&#39; below</li>
+</ul>
+<p>For example, these are all valid:</p>
+<pre><code>{ &quot;dependencies&quot; :
+ { &quot;foo&quot; : &quot;1.0.0 - 2.9999.9999&quot;
+ , &quot;bar&quot; : &quot;&gt;=1.0.2 &lt;2.1.2&quot;
+ , &quot;baz&quot; : &quot;&gt;1.0.2 &lt;=2.3.4&quot;
+ , &quot;boo&quot; : &quot;2.0.1&quot;
+ , &quot;qux&quot; : &quot;&lt;1.0.0 || &gt;=2.3.1 &lt;2.4.5 || &gt;=2.5.2 &lt;3.0.0&quot;
+ , &quot;asd&quot; : &quot;http://asdf.com/asdf.tar.gz&quot;
+ , &quot;til&quot; : &quot;~1.2&quot;
+ , &quot;elf&quot; : &quot;~1.2.3&quot;
+ , &quot;two&quot; : &quot;2.x&quot;
+ , &quot;thr&quot; : &quot;3.3.x&quot;
+ }
+}
+</code></pre><h3 id="urls-as-dependencies">URLs as Dependencies</h3>
+<p>You may specify a tarball URL in place of a version range.</p>
+<p>This tarball will be downloaded and installed locally to your package at
+install time.</p>
+<h3 id="git-urls-as-dependencies">Git URLs as Dependencies</h3>
+<p>Git urls can be of the form:</p>
+<pre><code>git://github.com/user/project.git#commit-ish
+git+ssh://user@hostname:project.git#commit-ish
+git+ssh://user@hostname/project.git#commit-ish
+git+http://user@hostname/project/blah.git#commit-ish
+git+https://user@hostname/project/blah.git#commit-ish
+</code></pre><p>The <code>commit-ish</code> can be any tag, sha, or branch which can be supplied as
+an argument to <code>git checkout</code>. The default is <code>master</code>.</p>
+<h2 id="github-urls">GitHub URLs</h2>
+<p>As of version 1.1.65, you can refer to GitHub urls as just &quot;foo&quot;: &quot;user/foo-project&quot;. For example:</p>
+<pre><code>{
+ &quot;name&quot;: &quot;foo&quot;,
+ &quot;version&quot;: &quot;0.0.0&quot;,
+ &quot;dependencies&quot;: {
+ &quot;express&quot;: &quot;visionmedia/express&quot;
+ }
+}
+</code></pre><h2 id="devdependencies">devDependencies</h2>
+<p>If someone is planning on downloading and using your module in their
+program, then they probably don&#39;t want or need to download and build
+the external test or documentation framework that you use.</p>
+<p>In this case, it&#39;s best to list these additional items in a
+<code>devDependencies</code> hash.</p>
+<p>These things will be installed when doing <code>npm link</code> or <code>npm install</code>
+from the root of a package, and can be managed like any other npm
+configuration param. See <code><a href="../misc/npm-config.html">npm-config(7)</a></code> for more on the topic.</p>
+<p>For build steps that are not platform-specific, such as compiling
+CoffeeScript or other languages to JavaScript, use the <code>prepublish</code>
+script to do this, and make the required package a devDependency.</p>
+<p>For example:</p>
+<pre><code>{ &quot;name&quot;: &quot;ethopia-waza&quot;,
+ &quot;description&quot;: &quot;a delightfully fruity coffee varietal&quot;,
+ &quot;version&quot;: &quot;1.2.3&quot;,
+ &quot;devDependencies&quot;: {
+ &quot;coffee-script&quot;: &quot;~1.6.3&quot;
+ },
+ &quot;scripts&quot;: {
+ &quot;prepublish&quot;: &quot;coffee -o lib/ -c src/waza.coffee&quot;
+ },
+ &quot;main&quot;: &quot;lib/waza.js&quot;
+}
+</code></pre><p>The <code>prepublish</code> script will be run before publishing, so that users
+can consume the functionality without requiring them to compile it
+themselves. In dev mode (ie, locally running <code>npm install</code>), it&#39;ll
+run this script as well, so that you can test it easily.</p>
+<h2 id="peerdependencies">peerDependencies</h2>
+<p>In some cases, you want to express the compatibility of your package with an
+host tool or library, while not necessarily doing a <code>require</code> of this host.
+This is usually refered to as a <em>plugin</em>. Notably, your module may be exposing
+a specific interface, expected and specified by the host documentation.</p>
+<p>For example:</p>
+<pre><code>{
+ &quot;name&quot;: &quot;tea-latte&quot;,
+ &quot;version&quot;: &quot;1.3.5&quot;
+ &quot;peerDependencies&quot;: {
+ &quot;tea&quot;: &quot;2.x&quot;
+ }
+}
+</code></pre><p>This ensures your package <code>tea-latte</code> can be installed <em>along</em> with the second
+major version of the host package <code>tea</code> only. The host package is automatically
+installed if needed. <code>npm install tea-latte</code> could possibly yield the following
+dependency graph:</p>
+<pre><code>├── tea-latte@1.3.5
+└── tea@2.2.0
+</code></pre><p>Trying to install another plugin with a conflicting requirement will cause an
+error. For this reason, make sure your plugin requirement is as broad as
+possible, and not to lock it down to specific patch versions.</p>
+<p>Assuming the host complies with <a href="http://semver.org/">semver</a>, only changes in
+the host package&#39;s major version will break your plugin. Thus, if you&#39;ve worked
+with every 1.x version of the host package, use <code>&quot;^1.0&quot;</code> or <code>&quot;1.x&quot;</code> to express
+this. If you depend on features introduced in 1.5.2, use <code>&quot;&gt;= 1.5.2 &lt; 2&quot;</code>.</p>
+<h2 id="bundleddependencies">bundledDependencies</h2>
+<p>Array of package names that will be bundled when publishing the package.</p>
+<p>If this is spelled <code>&quot;bundleDependencies&quot;</code>, then that is also honorable.</p>
+<h2 id="optionaldependencies">optionalDependencies</h2>
+<p>If a dependency can be used, but you would like npm to proceed if it
+cannot be found or fails to install, then you may put it in the
+<code>optionalDependencies</code> hash. This is a map of package name to version
+or url, just like the <code>dependencies</code> hash. The difference is that
+failure is tolerated.</p>
+<p>It is still your program&#39;s responsibility to handle the lack of the
+dependency. For example, something like this:</p>
+<pre><code>try {
+ var foo = require(&#39;foo&#39;)
+ var fooVersion = require(&#39;foo/package.json&#39;).version
+} catch (er) {
+ foo = null
+}
+if ( notGoodFooVersion(fooVersion) ) {
+ foo = null
+}
+
+// .. then later in your program ..
+
+if (foo) {
+ foo.doFooThings()
+}
+</code></pre><p>Entries in <code>optionalDependencies</code> will override entries of the same name in
+<code>dependencies</code>, so it&#39;s usually best to only put in one place.</p>
+<h2 id="engines">engines</h2>
+<p>You can specify the version of node that your stuff works on:</p>
+<pre><code>{ &quot;engines&quot; : { &quot;node&quot; : &quot;&gt;=0.10.3 &lt;0.12&quot; } }
+</code></pre><p>And, like with dependencies, if you don&#39;t specify the version (or if you
+specify &quot;*&quot; as the version), then any version of node will do.</p>
+<p>If you specify an &quot;engines&quot; field, then npm will require that &quot;node&quot; be
+somewhere on that list. If &quot;engines&quot; is omitted, then npm will just assume
+that it works on node.</p>
+<p>You can also use the &quot;engines&quot; field to specify which versions of npm
+are capable of properly installing your program. For example:</p>
+<pre><code>{ &quot;engines&quot; : { &quot;npm&quot; : &quot;~1.0.20&quot; } }
+</code></pre><p>Note that, unless the user has set the <code>engine-strict</code> config flag, this
+field is advisory only.</p>
+<h2 id="enginestrict">engineStrict</h2>
+<p>If you are sure that your module will <em>definitely not</em> run properly on
+versions of Node/npm other than those specified in the <code>engines</code> hash,
+then you can set <code>&quot;engineStrict&quot;: true</code> in your package.json file.
+This will override the user&#39;s <code>engine-strict</code> config setting.</p>
+<p>Please do not do this unless you are really very very sure. If your
+engines hash is something overly restrictive, you can quite easily and
+inadvertently lock yourself into obscurity and prevent your users from
+updating to new versions of Node. Consider this choice carefully. If
+people abuse it, it will be removed in a future version of npm.</p>
+<h2 id="os">os</h2>
+<p>You can specify which operating systems your
+module will run on:</p>
+<pre><code>&quot;os&quot; : [ &quot;darwin&quot;, &quot;linux&quot; ]
+</code></pre><p>You can also blacklist instead of whitelist operating systems,
+just prepend the blacklisted os with a &#39;!&#39;:</p>
+<pre><code>&quot;os&quot; : [ &quot;!win32&quot; ]
+</code></pre><p>The host operating system is determined by <code>process.platform</code></p>
+<p>It is allowed to both blacklist, and whitelist, although there isn&#39;t any
+good reason to do this.</p>
+<h2 id="cpu">cpu</h2>
+<p>If your code only runs on certain cpu architectures,
+you can specify which ones.</p>
+<pre><code>&quot;cpu&quot; : [ &quot;x64&quot;, &quot;ia32&quot; ]
+</code></pre><p>Like the <code>os</code> option, you can also blacklist architectures:</p>
+<pre><code>&quot;cpu&quot; : [ &quot;!arm&quot;, &quot;!mips&quot; ]
+</code></pre><p>The host architecture is determined by <code>process.arch</code></p>
+<h2 id="preferglobal">preferGlobal</h2>
+<p>If your package is primarily a command-line application that should be
+installed globally, then set this value to <code>true</code> to provide a warning
+if it is installed locally.</p>
+<p>It doesn&#39;t actually prevent users from installing it locally, but it
+does help prevent some confusion if it doesn&#39;t work as expected.</p>
+<h2 id="private">private</h2>
+<p>If you set <code>&quot;private&quot;: true</code> in your package.json, then npm will refuse
+to publish it.</p>
+<p>This is a way to prevent accidental publication of private repositories.
+If you would like to ensure that a given package is only ever published
+to a specific registry (for example, an internal registry),
+then use the <code>publishConfig</code> hash described below
+to override the <code>registry</code> config param at publish-time.</p>
+<h2 id="publishconfig">publishConfig</h2>
+<p>This is a set of config values that will be used at publish-time. It&#39;s
+especially handy if you want to set the tag or registry, so that you can
+ensure that a given package is not tagged with &quot;latest&quot; or published to
+the global public registry by default.</p>
+<p>Any config values can be overridden, but of course only &quot;tag&quot; and
+&quot;registry&quot; probably matter for the purposes of publishing.</p>
+<p>See <code><a href="../misc/npm-config.html">npm-config(7)</a></code> to see the list of config options that can be
+overridden.</p>
+<h2 id="default-values">DEFAULT VALUES</h2>
+<p>npm will default some values based on package contents.</p>
+<ul>
+<li><p><code>&quot;scripts&quot;: {&quot;start&quot;: &quot;node server.js&quot;}</code></p>
+<p>If there is a <code>server.js</code> file in the root of your package, then npm
+will default the <code>start</code> command to <code>node server.js</code>.</p>
+</li>
+<li><p><code>&quot;scripts&quot;:{&quot;preinstall&quot;: &quot;node-gyp rebuild&quot;}</code></p>
+<p>If there is a <code>binding.gyp</code> file in the root of your package, npm will
+default the <code>preinstall</code> command to compile using node-gyp.</p>
+</li>
+<li><p><code>&quot;contributors&quot;: [...]</code></p>
+<p>If there is an <code>AUTHORS</code> file in the root of your package, npm will
+treat each line as a <code>Name &lt;email&gt; (url)</code> format, where email and url
+are optional. Lines which start with a <code>#</code> or are blank, will be
+ignored.</p>
+</li>
+</ul>
+<h2 id="see-also">SEE ALSO</h2>
+<ul>
+<li><a href="../misc/semver.html">semver(7)</a></li>
+<li><a href="../cli/npm-init.html">npm-init(1)</a></li>
+<li><a href="../cli/npm-version.html">npm-version(1)</a></li>
+<li><a href="../cli/npm-config.html">npm-config(1)</a></li>
+<li><a href="../misc/npm-config.html">npm-config(7)</a></li>
+<li><a href="../cli/npm-help.html">npm-help(1)</a></li>
+<li><a href="../misc/npm-faq.html">npm-faq(7)</a></li>
+<li><a href="../cli/npm-install.html">npm-install(1)</a></li>
+<li><a href="../cli/npm-publish.html">npm-publish(1)</a></li>
+<li><a href="../cli/npm-rm.html">npm-rm(1)</a></li>
+</ul>
+
+</div>
+
+<table border=0 cellspacing=0 cellpadding=0 id=npmlogo>
+<tr><td style="width:180px;height:10px;background:rgb(237,127,127)" colspan=18>&nbsp;</td></tr>
+<tr><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td colspan=6 style="width:60px;height:10px;background:#fff">&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td></tr>
+<tr><td colspan=2 style="width:20px;height:30px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=4 colspan=2>&nbsp;</td><td style="width:10px;height:20px;background:rgb(237,127,127)" rowspan=2>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=3 colspan=2>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff" rowspan=2>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff">&nbsp;</td></tr>
+<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
+<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
+</table>
+<p id="footer">package.json &mdash; npm@1.4.10</p>
+
diff --git a/deps/npm/html/doc/folders.html b/deps/npm/html/doc/folders.html
deleted file mode 100644
index 3ff8e074b..000000000
--- a/deps/npm/html/doc/folders.html
+++ /dev/null
@@ -1,240 +0,0 @@
-<!doctype html>
-<html>
- <title>folders</title>
- <meta http-equiv="content-type" value="text/html;utf-8">
- <link rel="stylesheet" type="text/css" href="../static/style.css">
-
- <body>
- <div id="wrapper">
-<h1><a href="../doc/folders.html">folders</a></h1> <p>Folder Structures Used by npm</p>
-
-<h2 id="DESCRIPTION">DESCRIPTION</h2>
-
-<p>npm puts various things on your computer. That&#39;s its job.</p>
-
-<p>This document will tell you what it puts where.</p>
-
-<h3 id="tl-dr">tl;dr</h3>
-
-<ul><li>Local install (default): puts stuff in <code>./node_modules</code> of the current
-package root.</li><li>Global install (with <code>-g</code>): puts stuff in /usr/local or wherever node
-is installed.</li><li>Install it <strong>locally</strong> if you&#39;re going to <code>require()</code> it.</li><li>Install it <strong>globally</strong> if you&#39;re going to run it on the command line.</li><li>If you need both, then install it in both places, or use <code>npm link</code>.</li></ul>
-
-<h3 id="prefix-Configuration">prefix Configuration</h3>
-
-<p>The <code>prefix</code> config defaults to the location where node is installed.
-On most systems, this is <code>/usr/local</code>, and most of the time is the same
-as node&#39;s <code>process.installPrefix</code>.</p>
-
-<p>On windows, this is the exact location of the node.exe binary. On Unix
-systems, it&#39;s one level up, since node is typically installed at
-<code>{prefix}/bin/node</code> rather than <code>{prefix}/node.exe</code>.</p>
-
-<p>When the <code>global</code> flag is set, npm installs things into this prefix.
-When it is not set, it uses the root of the current package, or the
-current working directory if not in a package already.</p>
-
-<h3 id="Node-Modules">Node Modules</h3>
-
-<p>Packages are dropped into the <code>node_modules</code> folder under the <code>prefix</code>.
-When installing locally, this means that you can
-<code>require(&quot;packagename&quot;)</code> to load its main module, or
-<code>require(&quot;packagename/lib/path/to/sub/module&quot;)</code> to load other modules.</p>
-
-<p>Global installs on Unix systems go to <code>{prefix}/lib/node_modules</code>.
-Global installs on Windows go to <code>{prefix}/node_modules</code> (that is, no
-<code>lib</code> folder.)</p>
-
-<p>If you wish to <code>require()</code> a package, then install it locally.</p>
-
-<h3 id="Executables">Executables</h3>
-
-<p>When in global mode, executables are linked into <code>{prefix}/bin</code> on Unix,
-or directly into <code>{prefix}</code> on Windows.</p>
-
-<p>When in local mode, executables are linked into
-<code>./node_modules/.bin</code> so that they can be made available to scripts run
-through npm. (For example, so that a test runner will be in the path
-when you run <code>npm test</code>.)</p>
-
-<h3 id="Man-Pages">Man Pages</h3>
-
-<p>When in global mode, man pages are linked into <code>{prefix}/share/man</code>.</p>
-
-<p>When in local mode, man pages are not installed.</p>
-
-<p>Man pages are not installed on Windows systems.</p>
-
-<h3 id="Cache">Cache</h3>
-
-<p>See <code><a href="../doc/cache.html">cache(1)</a></code>. Cache files are stored in <code>~/.npm</code> on Posix, or
-<code>~/npm-cache</code> on Windows.</p>
-
-<p>This is controlled by the <code>cache</code> configuration param.</p>
-
-<h3 id="Temp-Files">Temp Files</h3>
-
-<p>Temporary files are stored by default in the folder specified by the
-<code>tmp</code> config, which defaults to the TMPDIR, TMP, or TEMP environment
-variables, or <code>/tmp</code> on Unix and <code>c:\windows\temp</code> on Windows.</p>
-
-<p>Temp files are given a unique folder under this root for each run of the
-program, and are deleted upon successful exit.</p>
-
-<h2 id="More-Information">More Information</h2>
-
-<p>When installing locally, npm first tries to find an appropriate
-<code>prefix</code> folder. This is so that <code>npm install foo@1.2.3</code> will install
-to the sensible root of your package, even if you happen to have <code>cd</code>ed
-into some other folder.</p>
-
-<p>Starting at the $PWD, npm will walk up the folder tree checking for a
-folder that contains either a <code>package.json</code> file, or a <code>node_modules</code>
-folder. If such a thing is found, then that is treated as the effective
-&quot;current directory&quot; for the purpose of running npm commands. (This
-behavior is inspired by and similar to git&#39;s .git-folder seeking
-logic when running git commands in a working dir.)</p>
-
-<p>If no package root is found, then the current folder is used.</p>
-
-<p>When you run <code>npm install foo@1.2.3</code>, then the package is loaded into
-the cache, and then unpacked into <code>./node_modules/foo</code>. Then, any of
-foo&#39;s dependencies are similarly unpacked into
-<code>./node_modules/foo/node_modules/...</code>.</p>
-
-<p>Any bin files are symlinked to <code>./node_modules/.bin/</code>, so that they may
-be found by npm scripts when necessary.</p>
-
-<h3 id="Global-Installation">Global Installation</h3>
-
-<p>If the <code>global</code> configuration is set to true, then npm will
-install packages &quot;globally&quot;.</p>
-
-<p>For global installation, packages are installed roughly the same way,
-but using the folders described above.</p>
-
-<h3 id="Cycles-Conflicts-and-Folder-Parsimony">Cycles, Conflicts, and Folder Parsimony</h3>
-
-<p>Cycles are handled using the property of node&#39;s module system that it
-walks up the directories looking for <code>node_modules</code> folders. So, at every
-stage, if a package is already installed in an ancestor <code>node_modules</code>
-folder, then it is not installed at the current location.</p>
-
-<p>Consider the case above, where <code>foo -&gt; bar -&gt; baz</code>. Imagine if, in
-addition to that, baz depended on bar, so you&#39;d have:
-<code>foo -&gt; bar -&gt; baz -&gt; bar -&gt; baz ...</code>. However, since the folder
-structure is: <code>foo/node_modules/bar/node_modules/baz</code>, there&#39;s no need to
-put another copy of bar into <code>.../baz/node_modules</code>, since when it calls
-require(&quot;bar&quot;), it will get the copy that is installed in
-<code>foo/node_modules/bar</code>.</p>
-
-<p>This shortcut is only used if the exact same
-version would be installed in multiple nested <code>node_modules</code> folders. It
-is still possible to have <code>a/node_modules/b/node_modules/a</code> if the two
-&quot;a&quot; packages are different versions. However, without repeating the
-exact same package multiple times, an infinite regress will always be
-prevented.</p>
-
-<p>Another optimization can be made by installing dependencies at the
-highest level possible, below the localized &quot;target&quot; folder.</p>
-
-<h4 id="Example">Example</h4>
-
-<p>Consider this dependency graph:</p>
-
-<pre><code>foo
-+-- blerg@1.2.5
-+-- bar@1.2.3
-| +-- blerg@1.x (latest=1.3.7)
-| +-- baz@2.x
-| | `-- quux@3.x
-| | `-- bar@1.2.3 (cycle)
-| `-- asdf@*
-`-- baz@1.2.3
- `-- quux@3.x
- `-- bar</code></pre>
-
-<p>In this case, we might expect a folder structure like this:</p>
-
-<pre><code>foo
-+-- node_modules
- +-- blerg (1.2.5) &lt;---[A]
- +-- bar (1.2.3) &lt;---[B]
- | `-- node_modules
- | +-- baz (2.0.2) &lt;---[C]
- | | `-- node_modules
- | | `-- quux (3.2.0)
- | `-- asdf (2.3.4)
- `-- baz (1.2.3) &lt;---[D]
- `-- node_modules
- `-- quux (3.2.0) &lt;---[E]</code></pre>
-
-<p>Since foo depends directly on <code>bar@1.2.3</code> and <code>baz@1.2.3</code>, those are
-installed in foo&#39;s <code>node_modules</code> folder.</p>
-
-<p>Even though the latest copy of blerg is 1.3.7, foo has a specific
-dependency on version 1.2.5. So, that gets installed at [A]. Since the
-parent installation of blerg satisfies bar&#39;s dependency on <code>blerg@1.x</code>,
-it does not install another copy under [B].</p>
-
-<p>Bar [B] also has dependencies on baz and asdf, so those are installed in
-bar&#39;s <code>node_modules</code> folder. Because it depends on <code>baz@2.x</code>, it cannot
-re-use the <code>baz@1.2.3</code> installed in the parent <code>node_modules</code> folder [D],
-and must install its own copy [C].</p>
-
-<p>Underneath bar, the <code>baz -&gt; quux -&gt; bar</code> dependency creates a cycle.
-However, because bar is already in quux&#39;s ancestry [B], it does not
-unpack another copy of bar into that folder.</p>
-
-<p>Underneath <code>foo -&gt; baz</code> [D], quux&#39;s [E] folder tree is empty, because its
-dependency on bar is satisfied by the parent folder copy installed at [B].</p>
-
-<p>For a graphical breakdown of what is installed where, use <code>npm ls</code>.</p>
-
-<h3 id="Publishing">Publishing</h3>
-
-<p>Upon publishing, npm will look in the <code>node_modules</code> folder. If any of
-the items there are not in the <code>bundledDependencies</code> array, then they will
-not be included in the package tarball.</p>
-
-<p>This allows a package maintainer to install all of their dependencies
-(and dev dependencies) locally, but only re-publish those items that
-cannot be found elsewhere. See <code><a href="../doc/json.html">json(1)</a></code> for more information.</p>
-
-<h2 id="SEE-ALSO">SEE ALSO</h2>
-
-<ul><li><a href="../doc/faq.html">faq(1)</a></li><li><a href="../doc/json.html">json(1)</a></li><li><a href="../doc/install.html">install(1)</a></li><li><a href="../doc/pack.html">pack(1)</a></li><li><a href="../doc/cache.html">cache(1)</a></li><li><a href="../doc/config.html">config(1)</a></li><li><a href="../doc/publish.html">publish(1)</a></li></ul>
-</div>
-<p id="footer">folders &mdash; npm@1.2.30</p>
-<script>
-;(function () {
-var wrapper = document.getElementById("wrapper")
-var els = Array.prototype.slice.call(wrapper.getElementsByTagName("*"), 0)
- .filter(function (el) {
- return el.parentNode === wrapper
- && el.tagName.match(/H[1-6]/)
- && el.id
- })
-var l = 2
- , toc = document.createElement("ul")
-toc.innerHTML = els.map(function (el) {
- var i = el.tagName.charAt(1)
- , out = ""
- while (i > l) {
- out += "<ul>"
- l ++
- }
- while (i < l) {
- out += "</ul>"
- l --
- }
- out += "<li><a href='#" + el.id + "'>" +
- ( el.innerText || el.text || el.innerHTML)
- + "</a>"
- return out
-}).join("\n")
-toc.id = "toc"
-document.body.appendChild(toc)
-})()
-</script>
-</body></html>
diff --git a/deps/npm/html/doc/global.html b/deps/npm/html/doc/global.html
deleted file mode 100644
index 5d40d64be..000000000
--- a/deps/npm/html/doc/global.html
+++ /dev/null
@@ -1,240 +0,0 @@
-<!doctype html>
-<html>
- <title>global</title>
- <meta http-equiv="content-type" value="text/html;utf-8">
- <link rel="stylesheet" type="text/css" href="../static/style.css">
-
- <body>
- <div id="wrapper">
-<h1><a href="../doc/folders.html">folders</a></h1> <p>Folder Structures Used by npm</p>
-
-<h2 id="DESCRIPTION">DESCRIPTION</h2>
-
-<p>npm puts various things on your computer. That&#39;s its job.</p>
-
-<p>This document will tell you what it puts where.</p>
-
-<h3 id="tl-dr">tl;dr</h3>
-
-<ul><li>Local install (default): puts stuff in <code>./node_modules</code> of the current
-package root.</li><li>Global install (with <code>-g</code>): puts stuff in /usr/local or wherever node
-is installed.</li><li>Install it <strong>locally</strong> if you&#39;re going to <code>require()</code> it.</li><li>Install it <strong>globally</strong> if you&#39;re going to run it on the command line.</li><li>If you need both, then install it in both places, or use <code>npm link</code>.</li></ul>
-
-<h3 id="prefix-Configuration">prefix Configuration</h3>
-
-<p>The <code>prefix</code> config defaults to the location where node is installed.
-On most systems, this is <code>/usr/local</code>, and most of the time is the same
-as node&#39;s <code>process.installPrefix</code>.</p>
-
-<p>On windows, this is the exact location of the node.exe binary. On Unix
-systems, it&#39;s one level up, since node is typically installed at
-<code>{prefix}/bin/node</code> rather than <code>{prefix}/node.exe</code>.</p>
-
-<p>When the <code>global</code> flag is set, npm installs things into this prefix.
-When it is not set, it uses the root of the current package, or the
-current working directory if not in a package already.</p>
-
-<h3 id="Node-Modules">Node Modules</h3>
-
-<p>Packages are dropped into the <code>node_modules</code> folder under the <code>prefix</code>.
-When installing locally, this means that you can
-<code>require(&quot;packagename&quot;)</code> to load its main module, or
-<code>require(&quot;packagename/lib/path/to/sub/module&quot;)</code> to load other modules.</p>
-
-<p>Global installs on Unix systems go to <code>{prefix}/lib/node_modules</code>.
-Global installs on Windows go to <code>{prefix}/node_modules</code> (that is, no
-<code>lib</code> folder.)</p>
-
-<p>If you wish to <code>require()</code> a package, then install it locally.</p>
-
-<h3 id="Executables">Executables</h3>
-
-<p>When in global mode, executables are linked into <code>{prefix}/bin</code> on Unix,
-or directly into <code>{prefix}</code> on Windows.</p>
-
-<p>When in local mode, executables are linked into
-<code>./node_modules/.bin</code> so that they can be made available to scripts run
-through npm. (For example, so that a test runner will be in the path
-when you run <code>npm test</code>.)</p>
-
-<h3 id="Man-Pages">Man Pages</h3>
-
-<p>When in global mode, man pages are linked into <code>{prefix}/share/man</code>.</p>
-
-<p>When in local mode, man pages are not installed.</p>
-
-<p>Man pages are not installed on Windows systems.</p>
-
-<h3 id="Cache">Cache</h3>
-
-<p>See <code><a href="../doc/cache.html">cache(1)</a></code>. Cache files are stored in <code>~/.npm</code> on Posix, or
-<code>~/npm-cache</code> on Windows.</p>
-
-<p>This is controlled by the <code>cache</code> configuration param.</p>
-
-<h3 id="Temp-Files">Temp Files</h3>
-
-<p>Temporary files are stored by default in the folder specified by the
-<code>tmp</code> config, which defaults to the TMPDIR, TMP, or TEMP environment
-variables, or <code>/tmp</code> on Unix and <code>c:\windows\temp</code> on Windows.</p>
-
-<p>Temp files are given a unique folder under this root for each run of the
-program, and are deleted upon successful exit.</p>
-
-<h2 id="More-Information">More Information</h2>
-
-<p>When installing locally, npm first tries to find an appropriate
-<code>prefix</code> folder. This is so that <code>npm install foo@1.2.3</code> will install
-to the sensible root of your package, even if you happen to have <code>cd</code>ed
-into some other folder.</p>
-
-<p>Starting at the $PWD, npm will walk up the folder tree checking for a
-folder that contains either a <code>package.json</code> file, or a <code>node_modules</code>
-folder. If such a thing is found, then that is treated as the effective
-&quot;current directory&quot; for the purpose of running npm commands. (This
-behavior is inspired by and similar to git&#39;s .git-folder seeking
-logic when running git commands in a working dir.)</p>
-
-<p>If no package root is found, then the current folder is used.</p>
-
-<p>When you run <code>npm install foo@1.2.3</code>, then the package is loaded into
-the cache, and then unpacked into <code>./node_modules/foo</code>. Then, any of
-foo&#39;s dependencies are similarly unpacked into
-<code>./node_modules/foo/node_modules/...</code>.</p>
-
-<p>Any bin files are symlinked to <code>./node_modules/.bin/</code>, so that they may
-be found by npm scripts when necessary.</p>
-
-<h3 id="Global-Installation">Global Installation</h3>
-
-<p>If the <code>global</code> configuration is set to true, then npm will
-install packages &quot;globally&quot;.</p>
-
-<p>For global installation, packages are installed roughly the same way,
-but using the folders described above.</p>
-
-<h3 id="Cycles-Conflicts-and-Folder-Parsimony">Cycles, Conflicts, and Folder Parsimony</h3>
-
-<p>Cycles are handled using the property of node&#39;s module system that it
-walks up the directories looking for <code>node_modules</code> folders. So, at every
-stage, if a package is already installed in an ancestor <code>node_modules</code>
-folder, then it is not installed at the current location.</p>
-
-<p>Consider the case above, where <code>foo -&gt; bar -&gt; baz</code>. Imagine if, in
-addition to that, baz depended on bar, so you&#39;d have:
-<code>foo -&gt; bar -&gt; baz -&gt; bar -&gt; baz ...</code>. However, since the folder
-structure is: <code>foo/node_modules/bar/node_modules/baz</code>, there&#39;s no need to
-put another copy of bar into <code>.../baz/node_modules</code>, since when it calls
-require(&quot;bar&quot;), it will get the copy that is installed in
-<code>foo/node_modules/bar</code>.</p>
-
-<p>This shortcut is only used if the exact same
-version would be installed in multiple nested <code>node_modules</code> folders. It
-is still possible to have <code>a/node_modules/b/node_modules/a</code> if the two
-&quot;a&quot; packages are different versions. However, without repeating the
-exact same package multiple times, an infinite regress will always be
-prevented.</p>
-
-<p>Another optimization can be made by installing dependencies at the
-highest level possible, below the localized &quot;target&quot; folder.</p>
-
-<h4 id="Example">Example</h4>
-
-<p>Consider this dependency graph:</p>
-
-<pre><code>foo
-+-- blerg@1.2.5
-+-- bar@1.2.3
-| +-- blerg@1.x (latest=1.3.7)
-| +-- baz@2.x
-| | `-- quux@3.x
-| | `-- bar@1.2.3 (cycle)
-| `-- asdf@*
-`-- baz@1.2.3
- `-- quux@3.x
- `-- bar</code></pre>
-
-<p>In this case, we might expect a folder structure like this:</p>
-
-<pre><code>foo
-+-- node_modules
- +-- blerg (1.2.5) &lt;---[A]
- +-- bar (1.2.3) &lt;---[B]
- | +-- node_modules
- | | `-- baz (2.0.2) &lt;---[C]
- | | `-- node_modules
- | | `-- quux (3.2.0)
- | `-- asdf (2.3.4)
- `-- baz (1.2.3) &lt;---[D]
- `-- node_modules
- `-- quux (3.2.0) &lt;---[E]</code></pre>
-
-<p>Since foo depends directly on bar@1.2.3 and baz@1.2.3, those are
-installed in foo&#39;s <code>node_modules</code> folder.</p>
-
-<p>Even though the latest copy of blerg is 1.3.7, foo has a specific
-dependency on version 1.2.5. So, that gets installed at [A]. Since the
-parent installation of blerg satisfie&#39;s bar&#39;s dependency on blerg@1.x,
-it does not install another copy under [B].</p>
-
-<p>Bar [B] also has dependencies on baz and asdf, so those are installed in
-bar&#39;s <code>node_modules</code> folder. Because it depends on <code>baz@2.x</code>, it cannot
-re-use the <code>baz@1.2.3</code> installed in the parent <code>node_modules</code> folder [D],
-and must install its own copy [C].</p>
-
-<p>Underneath bar, the <code>baz-&gt;quux-&gt;bar</code> dependency creates a cycle.
-However, because <code>bar</code> is already in <code>quux</code>&#39;s ancestry [B], it does not
-unpack another copy of bar into that folder.</p>
-
-<p>Underneath <code>foo-&gt;baz</code> [D], quux&#39;s [E] folder tree is empty, because its
-dependency on bar is satisfied by the parent folder copy installed at [B].</p>
-
-<p>For a graphical breakdown of what is installed where, use <code>npm ls</code>.</p>
-
-<h3 id="Publishing">Publishing</h3>
-
-<p>Upon publishing, npm will look in the <code>node_modules</code> folder. If any of
-the items there are not in the <code>bundledDependencies</code> array, then they will
-not be included in the package tarball.</p>
-
-<p>This allows a package maintainer to install all of their dependencies
-(and dev dependencies) locally, but only re-publish those items that
-cannot be found elsewhere. See <code><a href="../doc/json.html">json(1)</a></code> for more information.</p>
-
-<h2 id="SEE-ALSO">SEE ALSO</h2>
-
-<ul><li><a href="../doc/faq.html">faq(1)</a></li><li><a href="../doc/json.html">json(1)</a></li><li><a href="../doc/install.html">install(1)</a></li><li><a href="../doc/pack.html">pack(1)</a></li><li><a href="../doc/cache.html">cache(1)</a></li><li><a href="../doc/config.html">config(1)</a></li><li><a href="../doc/publish.html">publish(1)</a></li></ul>
-</div>
-<p id="footer">global &mdash; npm@1.2.30</p>
-<script>
-;(function () {
-var wrapper = document.getElementById("wrapper")
-var els = Array.prototype.slice.call(wrapper.getElementsByTagName("*"), 0)
- .filter(function (el) {
- return el.parentNode === wrapper
- && el.tagName.match(/H[1-6]/)
- && el.id
- })
-var l = 2
- , toc = document.createElement("ul")
-toc.innerHTML = els.map(function (el) {
- var i = el.tagName.charAt(1)
- , out = ""
- while (i > l) {
- out += "<ul>"
- l ++
- }
- while (i < l) {
- out += "</ul>"
- l --
- }
- out += "<li><a href='#" + el.id + "'>" +
- ( el.innerText || el.text || el.innerHTML)
- + "</a>"
- return out
-}).join("\n")
-toc.id = "toc"
-document.body.appendChild(toc)
-})()
-</script>
-</body></html>
diff --git a/deps/npm/html/doc/help-search.html b/deps/npm/html/doc/help-search.html
deleted file mode 100644
index 91e090b53..000000000
--- a/deps/npm/html/doc/help-search.html
+++ /dev/null
@@ -1,73 +0,0 @@
-<!doctype html>
-<html>
- <title>help-search</title>
- <meta http-equiv="content-type" value="text/html;utf-8">
- <link rel="stylesheet" type="text/css" href="../static/style.css">
-
- <body>
- <div id="wrapper">
-<h1><a href="../doc/help-search.html">help-search</a></h1> <p>Search npm help documentation</p>
-
-<h2 id="SYNOPSIS">SYNOPSIS</h2>
-
-<pre><code>npm help-search some search terms</code></pre>
-
-<h2 id="DESCRIPTION">DESCRIPTION</h2>
-
-<p>This command will search the npm markdown documentation files for the
-terms provided, and then list the results, sorted by relevance.</p>
-
-<p>If only one result is found, then it will show that help topic.</p>
-
-<p>If the argument to <code>npm help</code> is not a known help topic, then it will
-call <code>help-search</code>. It is rarely if ever necessary to call this
-command directly.</p>
-
-<h2 id="CONFIGURATION">CONFIGURATION</h2>
-
-<h3 id="long">long</h3>
-
-<ul><li>Type: Boolean</li><li>Default false</li></ul>
-
-<p>If true, the &quot;long&quot; flag will cause help-search to output context around
-where the terms were found in the documentation.</p>
-
-<p>If false, then help-search will just list out the help topics found.</p>
-
-<h2 id="SEE-ALSO">SEE ALSO</h2>
-
-<ul><li><a href="../doc/npm.html">npm(1)</a></li><li><a href="../doc/faq.html">faq(1)</a></li><li><a href="../doc/help.html">help(1)</a></li></ul>
-</div>
-<p id="footer">help-search &mdash; npm@1.2.30</p>
-<script>
-;(function () {
-var wrapper = document.getElementById("wrapper")
-var els = Array.prototype.slice.call(wrapper.getElementsByTagName("*"), 0)
- .filter(function (el) {
- return el.parentNode === wrapper
- && el.tagName.match(/H[1-6]/)
- && el.id
- })
-var l = 2
- , toc = document.createElement("ul")
-toc.innerHTML = els.map(function (el) {
- var i = el.tagName.charAt(1)
- , out = ""
- while (i > l) {
- out += "<ul>"
- l ++
- }
- while (i < l) {
- out += "</ul>"
- l --
- }
- out += "<li><a href='#" + el.id + "'>" +
- ( el.innerText || el.text || el.innerHTML)
- + "</a>"
- return out
-}).join("\n")
-toc.id = "toc"
-document.body.appendChild(toc)
-})()
-</script>
-</body></html>
diff --git a/deps/npm/html/doc/help.html b/deps/npm/html/doc/help.html
deleted file mode 100644
index 2612a1a82..000000000
--- a/deps/npm/html/doc/help.html
+++ /dev/null
@@ -1,71 +0,0 @@
-<!doctype html>
-<html>
- <title>help</title>
- <meta http-equiv="content-type" value="text/html;utf-8">
- <link rel="stylesheet" type="text/css" href="../static/style.css">
-
- <body>
- <div id="wrapper">
-<h1><a href="../doc/help.html">help</a></h1> <p>Get help on npm</p>
-
-<h2 id="SYNOPSIS">SYNOPSIS</h2>
-
-<pre><code>npm help &lt;topic&gt;
-npm help some search terms</code></pre>
-
-<h2 id="DESCRIPTION">DESCRIPTION</h2>
-
-<p>If supplied a topic, then show the appropriate documentation page.</p>
-
-<p>If the topic does not exist, or if multiple terms are provided, then run
-the <code>help-search</code> command to find a match. Note that, if <code>help-search</code>
-finds a single subject, then it will run <code>help</code> on that topic, so unique
-matches are equivalent to specifying a topic name.</p>
-
-<h2 id="CONFIGURATION">CONFIGURATION</h2>
-
-<h3 id="viewer">viewer</h3>
-
-<ul><li>Default: &quot;man&quot; on Posix, &quot;browser&quot; on Windows</li><li>Type: path</li></ul>
-
-<p>The program to use to view help content.</p>
-
-<p>Set to <code>&quot;browser&quot;</code> to view html help content in the default web browser.</p>
-
-<h2 id="SEE-ALSO">SEE ALSO</h2>
-
-<ul><li><a href="../doc/npm.html">npm(1)</a></li><li><a href="../doc/README.html">README</a></li><li><a href="../doc/faq.html">faq(1)</a></li><li><a href="../doc/folders.html">folders(1)</a></li><li><a href="../doc/config.html">config(1)</a></li><li><a href="../doc/json.html">json(1)</a></li><li><a href="../doc/help-search.html">help-search(1)</a></li><li><a href="../doc/index.html">index(1)</a></li></ul>
-</div>
-<p id="footer">help &mdash; npm@1.2.30</p>
-<script>
-;(function () {
-var wrapper = document.getElementById("wrapper")
-var els = Array.prototype.slice.call(wrapper.getElementsByTagName("*"), 0)
- .filter(function (el) {
- return el.parentNode === wrapper
- && el.tagName.match(/H[1-6]/)
- && el.id
- })
-var l = 2
- , toc = document.createElement("ul")
-toc.innerHTML = els.map(function (el) {
- var i = el.tagName.charAt(1)
- , out = ""
- while (i > l) {
- out += "<ul>"
- l ++
- }
- while (i < l) {
- out += "</ul>"
- l --
- }
- out += "<li><a href='#" + el.id + "'>" +
- ( el.innerText || el.text || el.innerHTML)
- + "</a>"
- return out
-}).join("\n")
-toc.id = "toc"
-document.body.appendChild(toc)
-})()
-</script>
-</body></html>
diff --git a/deps/npm/html/doc/index.html b/deps/npm/html/doc/index.html
index 55ffe5a41..91c6876e9 100644
--- a/deps/npm/html/doc/index.html
+++ b/deps/npm/html/doc/index.html
@@ -1,435 +1,230 @@
<!doctype html>
<html>
- <title>index</title>
+ <title>npm-index</title>
<meta http-equiv="content-type" value="text/html;utf-8">
<link rel="stylesheet" type="text/css" href="../static/style.css">
+ <link rel="canonical" href="https://www.npmjs.org/doc/index.html">
+ <script async=true src="../../static/toc.js"></script>
<body>
<div id="wrapper">
-<h1><a href="../doc/index.html">index</a></h1> <p>Index of all npm documentation</p>
-<h2 id="npm-README-1"><a href="../doc/README.html">README</a></h2>
+<h1><a href="misc/npm-index.html">npm-index</a></h1> <p>Index of all npm documentation</p>
+<h2 id="readme-1-"><a href="../doc/README.html">README</a></h2>
+<p>node package manager</p>
+<h1 id="command-line-documentation">Command Line Documentation</h1>
+<h2 id="npm-1-"><a href="cli/npm.html">npm(1)</a></h2>
+<p>node package manager</p>
+<h2 id="npm-adduser-1-"><a href="cli/npm-adduser.html">npm-adduser(1)</a></h2>
+<p>Add a registry user account</p>
+<h2 id="npm-bin-1-"><a href="cli/npm-bin.html">npm-bin(1)</a></h2>
+<p>Display npm bin folder</p>
+<h2 id="npm-bugs-1-"><a href="cli/npm-bugs.html">npm-bugs(1)</a></h2>
+<p>Bugs for a package in a web browser maybe</p>
+<h2 id="npm-build-1-"><a href="cli/npm-build.html">npm-build(1)</a></h2>
+<p>Build a package</p>
+<h2 id="npm-bundle-1-"><a href="cli/npm-bundle.html">npm-bundle(1)</a></h2>
+<p>REMOVED</p>
+<h2 id="npm-cache-1-"><a href="cli/npm-cache.html">npm-cache(1)</a></h2>
+<p>Manipulates packages cache</p>
+<h2 id="npm-completion-1-"><a href="cli/npm-completion.html">npm-completion(1)</a></h2>
+<p>Tab Completion for npm</p>
+<h2 id="npm-config-1-"><a href="cli/npm-config.html">npm-config(1)</a></h2>
+<p>Manage the npm configuration files</p>
+<h2 id="npm-dedupe-1-"><a href="cli/npm-dedupe.html">npm-dedupe(1)</a></h2>
+<p>Reduce duplication</p>
+<h2 id="npm-deprecate-1-"><a href="cli/npm-deprecate.html">npm-deprecate(1)</a></h2>
+<p>Deprecate a version of a package</p>
+<h2 id="npm-docs-1-"><a href="cli/npm-docs.html">npm-docs(1)</a></h2>
+<p>Docs for a package in a web browser maybe</p>
+<h2 id="npm-edit-1-"><a href="cli/npm-edit.html">npm-edit(1)</a></h2>
+<p>Edit an installed package</p>
+<h2 id="npm-explore-1-"><a href="cli/npm-explore.html">npm-explore(1)</a></h2>
+<p>Browse an installed package</p>
+<h2 id="npm-help-search-1-"><a href="cli/npm-help-search.html">npm-help-search(1)</a></h2>
+<p>Search npm help documentation</p>
+<h2 id="npm-help-1-"><a href="cli/npm-help.html">npm-help(1)</a></h2>
+<p>Get help on npm</p>
+<h2 id="npm-init-1-"><a href="cli/npm-init.html">npm-init(1)</a></h2>
+<p>Interactively create a package.json file</p>
+<h2 id="npm-install-1-"><a href="cli/npm-install.html">npm-install(1)</a></h2>
+<p>Install a package</p>
+<h2 id="npm-link-1-"><a href="cli/npm-link.html">npm-link(1)</a></h2>
+<p>Symlink a package folder</p>
+<h2 id="npm-ls-1-"><a href="cli/npm-ls.html">npm-ls(1)</a></h2>
+<p>List installed packages</p>
+<h2 id="npm-outdated-1-"><a href="cli/npm-outdated.html">npm-outdated(1)</a></h2>
+<p>Check for outdated packages</p>
+<h2 id="npm-owner-1-"><a href="cli/npm-owner.html">npm-owner(1)</a></h2>
+<p>Manage package owners</p>
+<h2 id="npm-pack-1-"><a href="cli/npm-pack.html">npm-pack(1)</a></h2>
+<p>Create a tarball from a package</p>
+<h2 id="npm-prefix-1-"><a href="cli/npm-prefix.html">npm-prefix(1)</a></h2>
+<p>Display prefix</p>
+<h2 id="npm-prune-1-"><a href="cli/npm-prune.html">npm-prune(1)</a></h2>
+<p>Remove extraneous packages</p>
+<h2 id="npm-publish-1-"><a href="cli/npm-publish.html">npm-publish(1)</a></h2>
+<p>Publish a package</p>
+<h2 id="npm-rebuild-1-"><a href="cli/npm-rebuild.html">npm-rebuild(1)</a></h2>
+<p>Rebuild a package</p>
+<h2 id="npm-repo-1-"><a href="cli/npm-repo.html">npm-repo(1)</a></h2>
+<p>Open package repository page in the browser</p>
+<h2 id="npm-restart-1-"><a href="cli/npm-restart.html">npm-restart(1)</a></h2>
+<p>Start a package</p>
+<h2 id="npm-rm-1-"><a href="cli/npm-rm.html">npm-rm(1)</a></h2>
+<p>Remove a package</p>
+<h2 id="npm-root-1-"><a href="cli/npm-root.html">npm-root(1)</a></h2>
+<p>Display npm root</p>
+<h2 id="npm-run-script-1-"><a href="cli/npm-run-script.html">npm-run-script(1)</a></h2>
+<p>Run arbitrary package scripts</p>
+<h2 id="npm-search-1-"><a href="cli/npm-search.html">npm-search(1)</a></h2>
+<p>Search for packages</p>
+<h2 id="npm-shrinkwrap-1-"><a href="cli/npm-shrinkwrap.html">npm-shrinkwrap(1)</a></h2>
+<p>Lock down dependency versions</p>
+<h2 id="npm-star-1-"><a href="cli/npm-star.html">npm-star(1)</a></h2>
+<p>Mark your favorite packages</p>
+<h2 id="npm-stars-1-"><a href="cli/npm-stars.html">npm-stars(1)</a></h2>
+<p>View packages marked as favorites</p>
+<h2 id="npm-start-1-"><a href="cli/npm-start.html">npm-start(1)</a></h2>
+<p>Start a package</p>
+<h2 id="npm-stop-1-"><a href="cli/npm-stop.html">npm-stop(1)</a></h2>
+<p>Stop a package</p>
+<h2 id="npm-submodule-1-"><a href="cli/npm-submodule.html">npm-submodule(1)</a></h2>
+<p>Add a package as a git submodule</p>
+<h2 id="npm-tag-1-"><a href="cli/npm-tag.html">npm-tag(1)</a></h2>
+<p>Tag a published version</p>
+<h2 id="npm-test-1-"><a href="cli/npm-test.html">npm-test(1)</a></h2>
+<p>Test a package</p>
+<h2 id="npm-uninstall-1-"><a href="cli/npm-uninstall.html">npm-uninstall(1)</a></h2>
+<p>Remove a package</p>
+<h2 id="npm-unpublish-1-"><a href="cli/npm-unpublish.html">npm-unpublish(1)</a></h2>
+<p>Remove a package from the registry</p>
+<h2 id="npm-update-1-"><a href="cli/npm-update.html">npm-update(1)</a></h2>
+<p>Update a package</p>
+<h2 id="npm-version-1-"><a href="cli/npm-version.html">npm-version(1)</a></h2>
+<p>Bump a package version</p>
+<h2 id="npm-view-1-"><a href="cli/npm-view.html">npm-view(1)</a></h2>
+<p>View registry info</p>
+<h2 id="npm-whoami-1-"><a href="cli/npm-whoami.html">npm-whoami(1)</a></h2>
+<p>Display npm username</p>
+<h1 id="api-documentation">API Documentation</h1>
+<h2 id="npm-3-"><a href="api/npm.html">npm(3)</a></h2>
+<p>node package manager</p>
+<h2 id="npm-bin-3-"><a href="api/npm-bin.html">npm-bin(3)</a></h2>
+<p>Display npm bin folder</p>
+<h2 id="npm-bugs-3-"><a href="api/npm-bugs.html">npm-bugs(3)</a></h2>
+<p>Bugs for a package in a web browser maybe</p>
+<h2 id="npm-commands-3-"><a href="api/npm-commands.html">npm-commands(3)</a></h2>
+<p>npm commands</p>
+<h2 id="npm-config-3-"><a href="api/npm-config.html">npm-config(3)</a></h2>
+<p>Manage the npm configuration files</p>
+<h2 id="npm-deprecate-3-"><a href="api/npm-deprecate.html">npm-deprecate(3)</a></h2>
+<p>Deprecate a version of a package</p>
+<h2 id="npm-docs-3-"><a href="api/npm-docs.html">npm-docs(3)</a></h2>
+<p>Docs for a package in a web browser maybe</p>
+<h2 id="npm-edit-3-"><a href="api/npm-edit.html">npm-edit(3)</a></h2>
+<p>Edit an installed package</p>
+<h2 id="npm-explore-3-"><a href="api/npm-explore.html">npm-explore(3)</a></h2>
+<p>Browse an installed package</p>
+<h2 id="npm-help-search-3-"><a href="api/npm-help-search.html">npm-help-search(3)</a></h2>
+<p>Search the help pages</p>
+<h2 id="npm-init-3-"><a href="api/npm-init.html">npm-init(3)</a></h2>
+<p>Interactively create a package.json file</p>
+<h2 id="npm-install-3-"><a href="api/npm-install.html">npm-install(3)</a></h2>
+<p>install a package programmatically</p>
+<h2 id="npm-link-3-"><a href="api/npm-link.html">npm-link(3)</a></h2>
+<p>Symlink a package folder</p>
+<h2 id="npm-load-3-"><a href="api/npm-load.html">npm-load(3)</a></h2>
+<p>Load config settings</p>
+<h2 id="npm-ls-3-"><a href="api/npm-ls.html">npm-ls(3)</a></h2>
+<p>List installed packages</p>
+<h2 id="npm-outdated-3-"><a href="api/npm-outdated.html">npm-outdated(3)</a></h2>
+<p>Check for outdated packages</p>
+<h2 id="npm-owner-3-"><a href="api/npm-owner.html">npm-owner(3)</a></h2>
+<p>Manage package owners</p>
+<h2 id="npm-pack-3-"><a href="api/npm-pack.html">npm-pack(3)</a></h2>
+<p>Create a tarball from a package</p>
+<h2 id="npm-prefix-3-"><a href="api/npm-prefix.html">npm-prefix(3)</a></h2>
+<p>Display prefix</p>
+<h2 id="npm-prune-3-"><a href="api/npm-prune.html">npm-prune(3)</a></h2>
+<p>Remove extraneous packages</p>
+<h2 id="npm-publish-3-"><a href="api/npm-publish.html">npm-publish(3)</a></h2>
+<p>Publish a package</p>
+<h2 id="npm-rebuild-3-"><a href="api/npm-rebuild.html">npm-rebuild(3)</a></h2>
+<p>Rebuild a package</p>
+<h2 id="npm-repo-3-"><a href="api/npm-repo.html">npm-repo(3)</a></h2>
+<p>Open package repository page in the browser</p>
+<h2 id="npm-restart-3-"><a href="api/npm-restart.html">npm-restart(3)</a></h2>
+<p>Start a package</p>
+<h2 id="npm-root-3-"><a href="api/npm-root.html">npm-root(3)</a></h2>
+<p>Display npm root</p>
+<h2 id="npm-run-script-3-"><a href="api/npm-run-script.html">npm-run-script(3)</a></h2>
+<p>Run arbitrary package scripts</p>
+<h2 id="npm-search-3-"><a href="api/npm-search.html">npm-search(3)</a></h2>
+<p>Search for packages</p>
+<h2 id="npm-shrinkwrap-3-"><a href="api/npm-shrinkwrap.html">npm-shrinkwrap(3)</a></h2>
+<p>programmatically generate package shrinkwrap file</p>
+<h2 id="npm-start-3-"><a href="api/npm-start.html">npm-start(3)</a></h2>
+<p>Start a package</p>
+<h2 id="npm-stop-3-"><a href="api/npm-stop.html">npm-stop(3)</a></h2>
+<p>Stop a package</p>
+<h2 id="npm-submodule-3-"><a href="api/npm-submodule.html">npm-submodule(3)</a></h2>
+<p>Add a package as a git submodule</p>
+<h2 id="npm-tag-3-"><a href="api/npm-tag.html">npm-tag(3)</a></h2>
+<p>Tag a published version</p>
+<h2 id="npm-test-3-"><a href="api/npm-test.html">npm-test(3)</a></h2>
+<p>Test a package</p>
+<h2 id="npm-uninstall-3-"><a href="api/npm-uninstall.html">npm-uninstall(3)</a></h2>
+<p>uninstall a package programmatically</p>
+<h2 id="npm-unpublish-3-"><a href="api/npm-unpublish.html">npm-unpublish(3)</a></h2>
+<p>Remove a package from the registry</p>
+<h2 id="npm-update-3-"><a href="api/npm-update.html">npm-update(3)</a></h2>
+<p>Update a package</p>
+<h2 id="npm-version-3-"><a href="api/npm-version.html">npm-version(3)</a></h2>
+<p>Bump a package version</p>
+<h2 id="npm-view-3-"><a href="api/npm-view.html">npm-view(3)</a></h2>
+<p>View registry info</p>
+<h2 id="npm-whoami-3-"><a href="api/npm-whoami.html">npm-whoami(3)</a></h2>
+<p>Display npm username</p>
+<h1 id="files">Files</h1>
+<h2 id="npm-folders-5-"><a href="files/npm-folders.html">npm-folders(5)</a></h2>
+<p>Folder Structures Used by npm</p>
+<h2 id="npmrc-5-"><a href="files/npmrc.html">npmrc(5)</a></h2>
+<p>The npm config files</p>
+<h2 id="package-json-5-"><a href="files/package.json.html">package.json(5)</a></h2>
+<p>Specifics of npm&#39;s package.json handling</p>
+<h1 id="misc">Misc</h1>
+<h2 id="npm-coding-style-7-"><a href="misc/npm-coding-style.html">npm-coding-style(7)</a></h2>
+<p>npm&#39;s &quot;funny&quot; coding style</p>
+<h2 id="npm-config-7-"><a href="misc/npm-config.html">npm-config(7)</a></h2>
+<p>More than you probably want to know about npm configuration</p>
+<h2 id="npm-developers-7-"><a href="misc/npm-developers.html">npm-developers(7)</a></h2>
+<p>Developer Guide</p>
+<h2 id="npm-disputes-7-"><a href="misc/npm-disputes.html">npm-disputes(7)</a></h2>
+<p>Handling Module Name Disputes</p>
+<h2 id="npm-faq-7-"><a href="misc/npm-faq.html">npm-faq(7)</a></h2>
+<p>Frequently Asked Questions</p>
+<h2 id="npm-index-7-"><a href="misc/npm-index.html">npm-index(7)</a></h2>
+<p>Index of all npm documentation</p>
+<h2 id="npm-registry-7-"><a href="misc/npm-registry.html">npm-registry(7)</a></h2>
+<p>The JavaScript Package Registry</p>
+<h2 id="npm-scripts-7-"><a href="misc/npm-scripts.html">npm-scripts(7)</a></h2>
+<p>How npm handles the &quot;scripts&quot; field</p>
+<h2 id="removing-npm-7-"><a href="misc/removing-npm.html">removing-npm(7)</a></h2>
+<p>Cleaning the Slate</p>
+<h2 id="semver-7-"><a href="misc/semver.html">semver(7)</a></h2>
+<p>The semantic versioner for npm</p>
-<p> node package manager</p>
-
-<h1>Command Line Documentation</h1>
-
-<h2 id="npm-adduser-1"><a href="../doc/adduser.html">adduser(1)</a></h2>
-
-<p> Add a registry user account</p>
-
-<h2 id="npm-bin-1"><a href="../doc/bin.html">bin(1)</a></h2>
-
-<p> Display npm bin folder</p>
-
-<h2 id="npm-bugs-1"><a href="../doc/bugs.html">bugs(1)</a></h2>
-
-<p> Bugs for a package in a web browser maybe</p>
-
-<h2 id="npm-build-1"><a href="../doc/build.html">build(1)</a></h2>
-
-<p> Build a package</p>
-
-<h2 id="npm-bundle-1"><a href="../doc/bundle.html">bundle(1)</a></h2>
-
-<p> REMOVED</p>
-
-<h2 id="npm-cache-1"><a href="../doc/cache.html">cache(1)</a></h2>
-
-<p> Manipulates packages cache</p>
-
-<h2 id="npm-changelog-1"><a href="../doc/changelog.html">changelog(1)</a></h2>
-
-<p> Changes</p>
-
-<h2 id="npm-coding-style-1"><a href="../doc/coding-style.html">coding-style(1)</a></h2>
-
-<p> npm&#39;s &quot;funny&quot; coding style</p>
-
-<h2 id="npm-completion-1"><a href="../doc/completion.html">completion(1)</a></h2>
-
-<p> Tab Completion for npm</p>
-
-<h2 id="npm-config-1"><a href="../doc/config.html">config(1)</a></h2>
-
-<p> Manage the npm configuration file</p>
-
-<h2 id="npm-dedupe-1"><a href="../doc/dedupe.html">dedupe(1)</a></h2>
-
-<p> Reduce duplication</p>
-
-<h2 id="npm-deprecate-1"><a href="../doc/deprecate.html">deprecate(1)</a></h2>
-
-<p> Deprecate a version of a package</p>
-
-<h2 id="npm-developers-1"><a href="../doc/developers.html">developers(1)</a></h2>
-
-<p> Developer Guide</p>
-
-<h2 id="npm-disputes-1"><a href="../doc/disputes.html">disputes(1)</a></h2>
-
-<p> Handling Module Name Disputes</p>
-
-<h2 id="npm-docs-1"><a href="../doc/docs.html">docs(1)</a></h2>
-
-<p> Docs for a package in a web browser maybe</p>
-
-<h2 id="npm-edit-1"><a href="../doc/edit.html">edit(1)</a></h2>
-
-<p> Edit an installed package</p>
-
-<h2 id="npm-explore-1"><a href="../doc/explore.html">explore(1)</a></h2>
-
-<p> Browse an installed package</p>
-
-<h2 id="npm-faq-1"><a href="../doc/faq.html">faq(1)</a></h2>
-
-<p> Frequently Asked Questions</p>
-
-<h2 id="npm-folders-1"><a href="../doc/folders.html">folders(1)</a></h2>
-
-<p> Folder Structures Used by npm</p>
-
-<h2 id="npm-global-1"><a href="../doc/global.html">global(1)</a></h2>
-
-<p> Folder Structures Used by npm</p>
-
-<h2 id="npm-help-search-1"><a href="../doc/help-search.html">help-search(1)</a></h2>
-
-<p> Search npm help documentation</p>
-
-<h2 id="npm-help-1"><a href="../doc/help.html">help(1)</a></h2>
-
-<p> Get help on npm</p>
-
-<h2 id="npm-init-1"><a href="../doc/init.html">init(1)</a></h2>
-
-<p> Interactively create a package.json file</p>
-
-<h2 id="npm-install-1"><a href="../doc/install.html">install(1)</a></h2>
-
-<p> Install a package</p>
-
-<h2 id="npm-json-1"><a href="../doc/json.html">json(1)</a></h2>
-
-<p> Specifics of npm&#39;s package.json handling</p>
-
-<h2 id="npm-link-1"><a href="../doc/link.html">link(1)</a></h2>
-
-<p> Symlink a package folder</p>
-
-<h2 id="npm-ls-1"><a href="../doc/ls.html">ls(1)</a></h2>
-
-<p> List installed packages</p>
-
-<h2 id="npm-1"><a href="../doc/npm.html">npm(1)</a></h2>
-
-<p> node package manager</p>
-
-<h2 id="npm-outdated-1"><a href="../doc/outdated.html">outdated(1)</a></h2>
-
-<p> Check for outdated packages</p>
-
-<h2 id="npm-owner-1"><a href="../doc/owner.html">owner(1)</a></h2>
-
-<p> Manage package owners</p>
-
-<h2 id="npm-pack-1"><a href="../doc/pack.html">pack(1)</a></h2>
-
-<p> Create a tarball from a package</p>
-
-<h2 id="npm-prefix-1"><a href="../doc/prefix.html">prefix(1)</a></h2>
-
-<p> Display prefix</p>
-
-<h2 id="npm-prune-1"><a href="../doc/prune.html">prune(1)</a></h2>
-
-<p> Remove extraneous packages</p>
-
-<h2 id="npm-publish-1"><a href="../doc/publish.html">publish(1)</a></h2>
-
-<p> Publish a package</p>
-
-<h2 id="npm-rebuild-1"><a href="../doc/rebuild.html">rebuild(1)</a></h2>
-
-<p> Rebuild a package</p>
-
-<h2 id="npm-registry-1"><a href="../doc/registry.html">registry(1)</a></h2>
-
-<p> The JavaScript Package Registry</p>
-
-<h2 id="npm-removing-npm-1"><a href="../doc/removing-npm.html">removing-npm(1)</a></h2>
-
-<p> Cleaning the Slate</p>
-
-<h2 id="npm-restart-1"><a href="../doc/restart.html">restart(1)</a></h2>
-
-<p> Start a package</p>
-
-<h2 id="npm-rm-1"><a href="../doc/rm.html">rm(1)</a></h2>
-
-<p> Remove a package</p>
-
-<h2 id="npm-root-1"><a href="../doc/root.html">root(1)</a></h2>
-
-<p> Display npm root</p>
-
-<h2 id="npm-run-script-1"><a href="../doc/run-script.html">run-script(1)</a></h2>
-
-<p> Run arbitrary package scripts</p>
-
-<h2 id="npm-scripts-1"><a href="../doc/scripts.html">scripts(1)</a></h2>
-
-<p> How npm handles the &quot;scripts&quot; field</p>
-
-<h2 id="npm-search-1"><a href="../doc/search.html">search(1)</a></h2>
-
-<p> Search for packages</p>
-
-<h2 id="npm-semver-1"><a href="../doc/semver.html">semver(1)</a></h2>
-
-<p> The semantic versioner for npm</p>
-
-<h2 id="npm-shrinkwrap-1"><a href="../doc/shrinkwrap.html">shrinkwrap(1)</a></h2>
-
-<p> Lock down dependency versions</p>
-
-<h2 id="npm-star-1"><a href="../doc/star.html">star(1)</a></h2>
-
-<p> Mark your favorite packages</p>
-
-<h2 id="npm-stars-1"><a href="../doc/stars.html">stars(1)</a></h2>
-
-<p> View packages marked as favorites</p>
-
-<h2 id="npm-start-1"><a href="../doc/start.html">start(1)</a></h2>
-
-<p> Start a package</p>
-
-<h2 id="npm-stop-1"><a href="../doc/stop.html">stop(1)</a></h2>
-
-<p> Stop a package</p>
-
-<h2 id="npm-submodule-1"><a href="../doc/submodule.html">submodule(1)</a></h2>
-
-<p> Add a package as a git submodule</p>
-
-<h2 id="npm-tag-1"><a href="../doc/tag.html">tag(1)</a></h2>
-
-<p> Tag a published version</p>
-
-<h2 id="npm-test-1"><a href="../doc/test.html">test(1)</a></h2>
-
-<p> Test a package</p>
-
-<h2 id="npm-uninstall-1"><a href="../doc/uninstall.html">uninstall(1)</a></h2>
-
-<p> Remove a package</p>
-
-<h2 id="npm-unpublish-1"><a href="../doc/unpublish.html">unpublish(1)</a></h2>
-
-<p> Remove a package from the registry</p>
-
-<h2 id="npm-update-1"><a href="../doc/update.html">update(1)</a></h2>
-
-<p> Update a package</p>
-
-<h2 id="npm-version-1"><a href="../doc/version.html">version(1)</a></h2>
-
-<p> Bump a package version</p>
-
-<h2 id="npm-view-1"><a href="../doc/view.html">view(1)</a></h2>
-
-<p> View registry info</p>
-
-<h2 id="npm-whoami-1"><a href="../doc/whoami.html">whoami(1)</a></h2>
-
-<p> Display npm username</p>
-
-<h1>API Documentation</h1>
-
-<h2 id="npm-bin-3"><a href="../api/bin.html">bin(3)</a></h2>
-
-<p> Display npm bin folder</p>
-
-<h2 id="npm-bugs-3"><a href="../api/bugs.html">bugs(3)</a></h2>
-
-<p> Bugs for a package in a web browser maybe</p>
-
-<h2 id="npm-commands-3"><a href="../api/commands.html">commands(3)</a></h2>
-
-<p> npm commands</p>
-
-<h2 id="npm-config-3"><a href="../api/config.html">config(3)</a></h2>
-
-<p> Manage the npm configuration files</p>
-
-<h2 id="npm-deprecate-3"><a href="../api/deprecate.html">deprecate(3)</a></h2>
-
-<p> Deprecate a version of a package</p>
-
-<h2 id="npm-docs-3"><a href="../api/docs.html">docs(3)</a></h2>
-
-<p> Docs for a package in a web browser maybe</p>
-
-<h2 id="npm-edit-3"><a href="../api/edit.html">edit(3)</a></h2>
-
-<p> Edit an installed package</p>
-
-<h2 id="npm-explore-3"><a href="../api/explore.html">explore(3)</a></h2>
-
-<p> Browse an installed package</p>
-
-<h2 id="npm-help-search-3"><a href="../api/help-search.html">help-search(3)</a></h2>
-
-<p> Search the help pages</p>
-
-<h2 id="npm-init-3"><a href="../api/init.html">init(3)</a></h2>
-
-<p> Interactively create a package.json file</p>
-
-<h2 id="npm-install-3"><a href="../api/install.html">install(3)</a></h2>
-
-<p> install a package programmatically</p>
-
-<h2 id="npm-link-3"><a href="../api/link.html">link(3)</a></h2>
-
-<p> Symlink a package folder</p>
-
-<h2 id="npm-load-3"><a href="../api/load.html">load(3)</a></h2>
-
-<p> Load config settings</p>
-
-<h2 id="npm-ls-3"><a href="../api/ls.html">ls(3)</a></h2>
-
-<p> List installed packages</p>
-
-<h2 id="npm-3"><a href="../api/npm.html">npm(3)</a></h2>
-
-<p> node package manager</p>
-
-<h2 id="npm-outdated-3"><a href="../api/outdated.html">outdated(3)</a></h2>
-
-<p> Check for outdated packages</p>
-
-<h2 id="npm-owner-3"><a href="../api/owner.html">owner(3)</a></h2>
-
-<p> Manage package owners</p>
-
-<h2 id="npm-pack-3"><a href="../api/pack.html">pack(3)</a></h2>
-
-<p> Create a tarball from a package</p>
-
-<h2 id="npm-prefix-3"><a href="../api/prefix.html">prefix(3)</a></h2>
-
-<p> Display prefix</p>
-
-<h2 id="npm-prune-3"><a href="../api/prune.html">prune(3)</a></h2>
-
-<p> Remove extraneous packages</p>
-
-<h2 id="npm-publish-3"><a href="../api/publish.html">publish(3)</a></h2>
-
-<p> Publish a package</p>
-
-<h2 id="npm-rebuild-3"><a href="../api/rebuild.html">rebuild(3)</a></h2>
-
-<p> Rebuild a package</p>
-
-<h2 id="npm-restart-3"><a href="../api/restart.html">restart(3)</a></h2>
-
-<p> Start a package</p>
-
-<h2 id="npm-root-3"><a href="../api/root.html">root(3)</a></h2>
-
-<p> Display npm root</p>
-
-<h2 id="npm-run-script-3"><a href="../api/run-script.html">run-script(3)</a></h2>
-
-<p> Run arbitrary package scripts</p>
-
-<h2 id="npm-search-3"><a href="../api/search.html">search(3)</a></h2>
-
-<p> Search for packages</p>
-
-<h2 id="npm-shrinkwrap-3"><a href="../api/shrinkwrap.html">shrinkwrap(3)</a></h2>
-
-<p> programmatically generate package shrinkwrap file</p>
-
-<h2 id="npm-start-3"><a href="../api/start.html">start(3)</a></h2>
-
-<p> Start a package</p>
-
-<h2 id="npm-stop-3"><a href="../api/stop.html">stop(3)</a></h2>
-
-<p> Stop a package</p>
-
-<h2 id="npm-submodule-3"><a href="../api/submodule.html">submodule(3)</a></h2>
-
-<p> Add a package as a git submodule</p>
-
-<h2 id="npm-tag-3"><a href="../api/tag.html">tag(3)</a></h2>
-
-<p> Tag a published version</p>
-
-<h2 id="npm-test-3"><a href="../api/test.html">test(3)</a></h2>
-
-<p> Test a package</p>
-
-<h2 id="npm-uninstall-3"><a href="../api/uninstall.html">uninstall(3)</a></h2>
-
-<p> uninstall a package programmatically</p>
-
-<h2 id="npm-unpublish-3"><a href="../api/unpublish.html">unpublish(3)</a></h2>
-
-<p> Remove a package from the registry</p>
-
-<h2 id="npm-update-3"><a href="../api/update.html">update(3)</a></h2>
-
-<p> Update a package</p>
-
-<h2 id="npm-version-3"><a href="../api/version.html">version(3)</a></h2>
-
-<p> Bump a package version</p>
-
-<h2 id="npm-view-3"><a href="../api/view.html">view(3)</a></h2>
-
-<p> View registry info</p>
+</div>
-<h2 id="npm-whoami-3"><a href="../api/whoami.html">whoami(3)</a></h2>
+<table border=0 cellspacing=0 cellpadding=0 id=npmlogo>
+<tr><td style="width:180px;height:10px;background:rgb(237,127,127)" colspan=18>&nbsp;</td></tr>
+<tr><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td colspan=6 style="width:60px;height:10px;background:#fff">&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td></tr>
+<tr><td colspan=2 style="width:20px;height:30px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=4 colspan=2>&nbsp;</td><td style="width:10px;height:20px;background:rgb(237,127,127)" rowspan=2>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=3 colspan=2>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff" rowspan=2>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff">&nbsp;</td></tr>
+<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
+<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
+</table>
+<p id="footer">npm-index &mdash; npm@1.4.10</p>
-<p> Display npm username</p>
-</div>
-<p id="footer">index &mdash; npm@1.2.30</p>
-<script>
-;(function () {
-var wrapper = document.getElementById("wrapper")
-var els = Array.prototype.slice.call(wrapper.getElementsByTagName("*"), 0)
- .filter(function (el) {
- return el.parentNode === wrapper
- && el.tagName.match(/H[1-6]/)
- && el.id
- })
-var l = 2
- , toc = document.createElement("ul")
-toc.innerHTML = els.map(function (el) {
- var i = el.tagName.charAt(1)
- , out = ""
- while (i > l) {
- out += "<ul>"
- l ++
- }
- while (i < l) {
- out += "</ul>"
- l --
- }
- out += "<li><a href='#" + el.id + "'>" +
- ( el.innerText || el.text || el.innerHTML)
- + "</a>"
- return out
-}).join("\n")
-toc.id = "toc"
-document.body.appendChild(toc)
-})()
-</script>
-</body></html>
diff --git a/deps/npm/html/doc/init.html b/deps/npm/html/doc/init.html
deleted file mode 100644
index 5d327ceca..000000000
--- a/deps/npm/html/doc/init.html
+++ /dev/null
@@ -1,64 +0,0 @@
-<!doctype html>
-<html>
- <title>init</title>
- <meta http-equiv="content-type" value="text/html;utf-8">
- <link rel="stylesheet" type="text/css" href="../static/style.css">
-
- <body>
- <div id="wrapper">
-<h1><a href="../doc/init.html">init</a></h1> <p>Interactively create a package.json file</p>
-
-<h2 id="SYNOPSIS">SYNOPSIS</h2>
-
-<pre><code>npm init</code></pre>
-
-<h2 id="DESCRIPTION">DESCRIPTION</h2>
-
-<p>This will ask you a bunch of questions, and then write a package.json for you.</p>
-
-<p>It attempts to make reasonable guesses about what you want things to be set to,
-and then writes a package.json file with the options you&#39;ve selected.</p>
-
-<p>If you already have a package.json file, it&#39;ll read that first, and default to
-the options in there.</p>
-
-<p>It is strictly additive, so it does not delete options from your package.json
-without a really good reason to do so.</p>
-
-<h2 id="SEE-ALSO">SEE ALSO</h2>
-
-<ul><li><a href="https://github.com/isaacs/init-package-json">https://github.com/isaacs/init-package-json</a></li><li><a href="../doc/json.html">json(1)</a></li><li><a href="../doc/version.html">version(1)</a></li></ul>
-</div>
-<p id="footer">init &mdash; npm@1.2.30</p>
-<script>
-;(function () {
-var wrapper = document.getElementById("wrapper")
-var els = Array.prototype.slice.call(wrapper.getElementsByTagName("*"), 0)
- .filter(function (el) {
- return el.parentNode === wrapper
- && el.tagName.match(/H[1-6]/)
- && el.id
- })
-var l = 2
- , toc = document.createElement("ul")
-toc.innerHTML = els.map(function (el) {
- var i = el.tagName.charAt(1)
- , out = ""
- while (i > l) {
- out += "<ul>"
- l ++
- }
- while (i < l) {
- out += "</ul>"
- l --
- }
- out += "<li><a href='#" + el.id + "'>" +
- ( el.innerText || el.text || el.innerHTML)
- + "</a>"
- return out
-}).join("\n")
-toc.id = "toc"
-document.body.appendChild(toc)
-})()
-</script>
-</body></html>
diff --git a/deps/npm/html/doc/install.html b/deps/npm/html/doc/install.html
deleted file mode 100644
index f8c523ec4..000000000
--- a/deps/npm/html/doc/install.html
+++ /dev/null
@@ -1,177 +0,0 @@
-<!doctype html>
-<html>
- <title>install</title>
- <meta http-equiv="content-type" value="text/html;utf-8">
- <link rel="stylesheet" type="text/css" href="../static/style.css">
-
- <body>
- <div id="wrapper">
-<h1><a href="../doc/install.html">install</a></h1> <p>Install a package</p>
-
-<h2 id="SYNOPSIS">SYNOPSIS</h2>
-
-<pre><code>npm install (with no args in a package dir)
-npm install &lt;tarball file&gt;
-npm install &lt;tarball url&gt;
-npm install &lt;folder&gt;
-npm install &lt;name&gt; [--save|--save-dev|--save-optional]
-npm install &lt;name&gt;@&lt;tag&gt;
-npm install &lt;name&gt;@&lt;version&gt;
-npm install &lt;name&gt;@&lt;version range&gt;
-npm install &lt;name&gt;@&lt;version range&gt;</code></pre>
-
-<h2 id="DESCRIPTION">DESCRIPTION</h2>
-
-<p>This command installs a package, and any packages that it depends on. If the
-package has a shrinkwrap file, the installation of dependencies will be driven
-by that. See <a href="../doc/shrinkwrap.html">shrinkwrap(1)</a>.</p>
-
-<p>A <code>package</code> is:</p>
-
-<ul><li>a) a folder containing a program described by a package.json file</li><li>b) a gzipped tarball containing (a)</li><li>c) a url that resolves to (b)</li><li>d) a <code>&lt;name&gt;@&lt;version&gt;</code> that is published on the registry with (c)</li><li>e) a <code>&lt;name&gt;@&lt;tag&gt;</code> that points to (d)</li><li>f) a <code>&lt;name&gt;</code> that has a &quot;latest&quot; tag satisfying (e)</li><li>g) a <code>&lt;git remote url&gt;</code> that resolves to (b)</li></ul>
-
-<p>Even if you never publish your package, you can still get a lot of
-benefits of using npm if you just want to write a node program (a), and
-perhaps if you also want to be able to easily install it elsewhere
-after packing it up into a tarball (b).</p>
-
-<ul><li><p><code>npm install</code> (in package directory, no arguments):</p><p>Install the dependencies in the local node_modules folder.</p><p>In global mode (ie, with <code>-g</code> or <code>--global</code> appended to the command),
-it installs the current package context (ie, the current working
-directory) as a global package.</p></li><li><p><code>npm install &lt;folder&gt;</code>:</p><p>Install a package that is sitting in a folder on the filesystem.</p></li><li><p><code>npm install &lt;tarball file&gt;</code>:</p><p>Install a package that is sitting on the filesystem. Note: if you just want
-to link a dev directory into your npm root, you can do this more easily by
-using <code>npm link</code>.</p><p>Example:</p><pre><code> npm install ./package.tgz</code></pre></li><li><p><code>npm install &lt;tarball url&gt;</code>:</p><p>Fetch the tarball url, and then install it. In order to distinguish between
-this and other options, the argument must start with &quot;http://&quot; or &quot;https://&quot;</p><p>Example:</p><pre><code> npm install https://github.com/indexzero/forever/tarball/v0.5.6</code></pre></li><li><p><code>npm install &lt;name&gt; [--save|--save-dev|--save-optional]</code>:</p><p>Do a <code>&lt;name&gt;@&lt;tag&gt;</code> install, where <code>&lt;tag&gt;</code> is the &quot;tag&quot; config. (See
-<code><a href="../doc/config.html">config(1)</a></code>.)</p><p>In most cases, this will install the latest version
-of the module published on npm.</p><p>Example:</p><p> npm install sax</p><p><code>npm install</code> takes 3 exclusive, optional flags which save or update
-the package version in your main package.json:</p><ul><li><p><code>--save</code>: Package will appear in your <code>dependencies</code>.</p></li><li><p><code>--save-dev</code>: Package will appear in your <code>devDependencies</code>.</p></li><li><p><code>--save-optional</code>: Package will appear in your <code>optionalDependencies</code>.</p><p>Examples:</p><p> npm install sax --save
- npm install node-tap --save-dev
- npm install dtrace-provider --save-optional</p><p><strong>Note</strong>: If there is a file or folder named <code>&lt;name&gt;</code> in the current
-working directory, then it will try to install that, and only try to
-fetch the package by name if it is not valid.</p></li></ul></li><li><p><code>npm install &lt;name&gt;@&lt;tag&gt;</code>:</p><p>Install the version of the package that is referenced by the specified tag.
-If the tag does not exist in the registry data for that package, then this
-will fail.</p><p>Example:</p><pre><code> npm install sax@latest</code></pre></li><li><p><code>npm install &lt;name&gt;@&lt;version&gt;</code>:</p><p>Install the specified version of the package. This will fail if the version
-has not been published to the registry.</p><p>Example:</p><pre><code> npm install sax@0.1.1</code></pre></li><li><p><code>npm install &lt;name&gt;@&lt;version range&gt;</code>:</p><p>Install a version of the package matching the specified version range. This
-will follow the same rules for resolving dependencies described in <code><a href="../doc/json.html">json(1)</a></code>.</p><p>Note that most version ranges must be put in quotes so that your shell will
-treat it as a single argument.</p><p>Example:</p><p> npm install sax@&quot;&gt;=0.1.0 &lt;0.2.0&quot;</p></li><li><p><code>npm install &lt;git remote url&gt;</code>:</p><p>Install a package by cloning a git remote url. The format of the git
-url is:</p><p> &lt;protocol&gt;://[&lt;user&gt;@]&lt;hostname&gt;&lt;separator&gt;&lt;path&gt;[#&lt;commit-ish&gt;]</p><p><code>&lt;protocol&gt;</code> is one of <code>git</code>, <code>git+ssh</code>, <code>git+http</code>, or
-<code>git+https</code>. If no <code>&lt;commit-ish&gt;</code> is specified, then <code>master</code> is
-used.</p><p>Examples:</p><pre><code> git+ssh://git@github.com:isaacs/npm.git#v1.0.27
- git+https://isaacs@github.com/isaacs/npm.git
- git://github.com/isaacs/npm.git#v1.0.27</code></pre></li></ul>
-
-<p>You may combine multiple arguments, and even multiple types of arguments.
-For example:</p>
-
-<pre><code>npm install sax@&quot;&gt;=0.1.0 &lt;0.2.0&quot; bench supervisor</code></pre>
-
-<p>The <code>--tag</code> argument will apply to all of the specified install targets.</p>
-
-<p>The <code>--force</code> argument will force npm to fetch remote resources even if a
-local copy exists on disk.</p>
-
-<pre><code>npm install sax --force</code></pre>
-
-<p>The <code>--global</code> argument will cause npm to install the package globally
-rather than locally. See <code><a href="../doc/folders.html">folders(1)</a></code>.</p>
-
-<p>The <code>--link</code> argument will cause npm to link global installs into the
-local space in some cases.</p>
-
-<p>The <code>--no-bin-links</code> argument will prevent npm from creating symlinks for
-any binaries the package might contain.</p>
-
-<p>The <code>--no-shrinkwrap</code> argument, which will ignore an available
-shrinkwrap file and use the package.json instead.</p>
-
-<p>The <code>--nodedir=/path/to/node/source</code> argument will allow npm to find the
-node source code so that npm can compile native modules.</p>
-
-<p>See <code><a href="../doc/config.html">config(1)</a></code>. Many of the configuration params have some
-effect on installation, since that&#39;s most of what npm does.</p>
-
-<h2 id="ALGORITHM">ALGORITHM</h2>
-
-<p>To install a package, npm uses the following algorithm:</p>
-
-<pre><code>install(where, what, family, ancestors)
-fetch what, unpack to &lt;where&gt;/node_modules/&lt;what&gt;
-for each dep in what.dependencies
- resolve dep to precise version
-for each dep@version in what.dependencies
- not in &lt;where&gt;/node_modules/&lt;what&gt;/node_modules/*
- and not in &lt;family&gt;
- add precise version deps to &lt;family&gt;
- install(&lt;where&gt;/node_modules/&lt;what&gt;, dep, family)</code></pre>
-
-<p>For this <code>package{dep}</code> structure: <code>A{B,C}, B{C}, C{D}</code>,
-this algorithm produces:</p>
-
-<pre><code>A
-+-- B
-`-- C
- `-- D</code></pre>
-
-<p>That is, the dependency from B to C is satisfied by the fact that A
-already caused C to be installed at a higher level.</p>
-
-<p>See <a href="../doc/folders.html">folders(1)</a> for a more detailed description of the specific
-folder structures that npm creates.</p>
-
-<h3 id="Limitations-of-npm-s-Install-Algorithm">Limitations of npm&#39;s Install Algorithm</h3>
-
-<p>There are some very rare and pathological edge-cases where a cycle can
-cause npm to try to install a never-ending tree of packages. Here is
-the simplest case:</p>
-
-<pre><code>A -&gt; B -&gt; A&#39; -&gt; B&#39; -&gt; A -&gt; B -&gt; A&#39; -&gt; B&#39; -&gt; A -&gt; ...</code></pre>
-
-<p>where <code>A</code> is some version of a package, and <code>A&#39;</code> is a different version
-of the same package. Because <code>B</code> depends on a different version of <code>A</code>
-than the one that is already in the tree, it must install a separate
-copy. The same is true of <code>A&#39;</code>, which must install <code>B&#39;</code>. Because <code>B&#39;</code>
-depends on the original version of <code>A</code>, which has been overridden, the
-cycle falls into infinite regress.</p>
-
-<p>To avoid this situation, npm flat-out refuses to install any
-<code>name@version</code> that is already present anywhere in the tree of package
-folder ancestors. A more correct, but more complex, solution would be
-to symlink the existing version into the new location. If this ever
-affects a real use-case, it will be investigated.</p>
-
-<h2 id="SEE-ALSO">SEE ALSO</h2>
-
-<ul><li><a href="../doc/folders.html">folders(1)</a></li><li><a href="../doc/update.html">update(1)</a></li><li><a href="../doc/link.html">link(1)</a></li><li><a href="../doc/rebuild.html">rebuild(1)</a></li><li><a href="../doc/scripts.html">scripts(1)</a></li><li><a href="../doc/build.html">build(1)</a></li><li><a href="../doc/config.html">config(1)</a></li><li><a href="../doc/registry.html">registry(1)</a></li><li><a href="../doc/folders.html">folders(1)</a></li><li><a href="../doc/tag.html">tag(1)</a></li><li><a href="../doc/rm.html">rm(1)</a></li><li><a href="../doc/shrinkwrap.html">shrinkwrap(1)</a></li></ul>
-</div>
-<p id="footer">install &mdash; npm@1.2.30</p>
-<script>
-;(function () {
-var wrapper = document.getElementById("wrapper")
-var els = Array.prototype.slice.call(wrapper.getElementsByTagName("*"), 0)
- .filter(function (el) {
- return el.parentNode === wrapper
- && el.tagName.match(/H[1-6]/)
- && el.id
- })
-var l = 2
- , toc = document.createElement("ul")
-toc.innerHTML = els.map(function (el) {
- var i = el.tagName.charAt(1)
- , out = ""
- while (i > l) {
- out += "<ul>"
- l ++
- }
- while (i < l) {
- out += "</ul>"
- l --
- }
- out += "<li><a href='#" + el.id + "'>" +
- ( el.innerText || el.text || el.innerHTML)
- + "</a>"
- return out
-}).join("\n")
-toc.id = "toc"
-document.body.appendChild(toc)
-})()
-</script>
-</body></html>
diff --git a/deps/npm/html/doc/json.html b/deps/npm/html/doc/json.html
deleted file mode 100644
index 0f498d4e7..000000000
--- a/deps/npm/html/doc/json.html
+++ /dev/null
@@ -1,581 +0,0 @@
-<!doctype html>
-<html>
- <title>json</title>
- <meta http-equiv="content-type" value="text/html;utf-8">
- <link rel="stylesheet" type="text/css" href="../static/style.css">
-
- <body>
- <div id="wrapper">
-<h1><a href="../doc/json.html">json</a></h1> <p>Specifics of npm&#39;s package.json handling</p>
-
-<h2 id="DESCRIPTION">DESCRIPTION</h2>
-
-<p>This document is all you need to know about what&#39;s required in your package.json
-file. It must be actual JSON, not just a JavaScript object literal.</p>
-
-<p>A lot of the behavior described in this document is affected by the config
-settings described in <code><a href="../doc/config.html">config(1)</a></code>.</p>
-
-<h2 id="DEFAULT-VALUES">DEFAULT VALUES</h2>
-
-<p>npm will default some values based on package contents.</p>
-
-<ul><li><p><code>&quot;scripts&quot;: {&quot;start&quot;: &quot;node server.js&quot;}</code></p><p>If there is a <code>server.js</code> file in the root of your package, then npm
-will default the <code>start</code> command to <code>node server.js</code>.</p></li><li><p><code>&quot;scripts&quot;:{&quot;preinstall&quot;: &quot;node-waf clean || true; node-waf configure build&quot;}</code></p><p>If there is a <code>wscript</code> file in the root of your package, npm will
-default the <code>preinstall</code> command to compile using node-waf.</p></li><li><p><code>&quot;scripts&quot;:{&quot;preinstall&quot;: &quot;node-gyp rebuild&quot;}</code></p><p>If there is a <code>binding.gyp</code> file in the root of your package, npm will
-default the <code>preinstall</code> command to compile using node-gyp.</p></li><li><p><code>&quot;contributors&quot;: [...]</code></p><p>If there is an <code>AUTHORS</code> file in the root of your package, npm will
-treat each line as a <code>Name &lt;email&gt; (url)</code> format, where email and url
-are optional. Lines which start with a <code>#</code> or are blank, will be
-ignored.</p></li></ul>
-
-<h2 id="name">name</h2>
-
-<p>The <em>most</em> important things in your package.json are the name and version fields.
-Those are actually required, and your package won&#39;t install without
-them. The name and version together form an identifier that is assumed
-to be completely unique. Changes to the package should come along with
-changes to the version.</p>
-
-<p>The name is what your thing is called. Some tips:</p>
-
-<ul><li>Don&#39;t put &quot;js&quot; or &quot;node&quot; in the name. It&#39;s assumed that it&#39;s js, since you&#39;re
-writing a package.json file, and you can specify the engine using the &quot;engines&quot;
-field. (See below.)</li><li>The name ends up being part of a URL, an argument on the command line, and a
-folder name. Any name with non-url-safe characters will be rejected.
-Also, it can&#39;t start with a dot or an underscore.</li><li>The name will probably be passed as an argument to require(), so it should
-be something short, but also reasonably descriptive.</li><li>You may want to check the npm registry to see if there&#39;s something by that name
-already, before you get too attached to it. http://registry.npmjs.org/</li></ul>
-
-<h2 id="version">version</h2>
-
-<p>The <em>most</em> important things in your package.json are the name and version fields.
-Those are actually required, and your package won&#39;t install without
-them. The name and version together form an identifier that is assumed
-to be completely unique. Changes to the package should come along with
-changes to the version.</p>
-
-<p>Version must be parseable by
-<a href="https://github.com/isaacs/node-semver">node-semver</a>, which is bundled
-with npm as a dependency. (<code>npm install semver</code> to use it yourself.)</p>
-
-<p>Here&#39;s how npm&#39;s semver implementation deviates from what&#39;s on semver.org:</p>
-
-<ul><li>Versions can start with &quot;v&quot;</li><li>A numeric item separated from the main three-number version by a hyphen
-will be interpreted as a &quot;build&quot; number, and will <em>increase</em> the version.
-But, if the tag is not a number separated by a hyphen, then it&#39;s treated
-as a pre-release tag, and is <em>less than</em> the version without a tag.
-So, <code>0.1.2-7 &gt; 0.1.2-7-beta &gt; 0.1.2-6 &gt; 0.1.2 &gt; 0.1.2beta</code></li></ul>
-
-<p>This is a little bit confusing to explain, but matches what you see in practice
-when people create tags in git like &quot;v1.2.3&quot; and then do &quot;git describe&quot; to generate
-a patch version.</p>
-
-<h2 id="description">description</h2>
-
-<p>Put a description in it. It&#39;s a string. This helps people discover your
-package, as it&#39;s listed in <code>npm search</code>.</p>
-
-<h2 id="keywords">keywords</h2>
-
-<p>Put keywords in it. It&#39;s an array of strings. This helps people
-discover your package as it&#39;s listed in <code>npm search</code>.</p>
-
-<h2 id="homepage">homepage</h2>
-
-<p>The url to the project homepage.</p>
-
-<p><strong>NOTE</strong>: This is <em>not</em> the same as &quot;url&quot;. If you put a &quot;url&quot; field,
-then the registry will think it&#39;s a redirection to your package that has
-been published somewhere else, and spit at you.</p>
-
-<p>Literally. Spit. I&#39;m so not kidding.</p>
-
-<h2 id="bugs">bugs</h2>
-
-<p>The url to your project&#39;s issue tracker and / or the email address to which
-issues should be reported. These are helpful for people who encounter issues
-with your package.</p>
-
-<p>It should look like this:</p>
-
-<pre><code>{ &quot;url&quot; : &quot;http://github.com/owner/project/issues&quot;
-, &quot;email&quot; : &quot;project@hostname.com&quot;
-}</code></pre>
-
-<p>You can specify either one or both values. If you want to provide only a url,
-you can specify the value for &quot;bugs&quot; as a simple string instead of an object.</p>
-
-<p>If a url is provided, it will be used by the <code>npm bugs</code> command.</p>
-
-<h2 id="license">license</h2>
-
-<p>You should specify a license for your package so that people know how they are
-permitted to use it, and any restrictions you&#39;re placing on it.</p>
-
-<p>The simplest way, assuming you&#39;re using a common license such as BSD or MIT, is
-to just specify the name of the license you&#39;re using, like this:</p>
-
-<pre><code>{ &quot;license&quot; : &quot;BSD&quot; }</code></pre>
-
-<p>If you have more complex licensing terms, or you want to provide more detail
-in your package.json file, you can use the more verbose plural form, like this:</p>
-
-<pre><code>&quot;licenses&quot; : [
- { &quot;type&quot; : &quot;MyLicense&quot;
- , &quot;url&quot; : &quot;http://github.com/owner/project/path/to/license&quot;
- }
-]</code></pre>
-
-<p>It&#39;s also a good idea to include a license file at the top level in your package.</p>
-
-<h2 id="people-fields-author-contributors">people fields: author, contributors</h2>
-
-<p>The &quot;author&quot; is one person. &quot;contributors&quot; is an array of people. A &quot;person&quot;
-is an object with a &quot;name&quot; field and optionally &quot;url&quot; and &quot;email&quot;, like this:</p>
-
-<pre><code>{ &quot;name&quot; : &quot;Barney Rubble&quot;
-, &quot;email&quot; : &quot;b@rubble.com&quot;
-, &quot;url&quot; : &quot;http://barnyrubble.tumblr.com/&quot;
-}</code></pre>
-
-<p>Or you can shorten that all into a single string, and npm will parse it for you:</p>
-
-<pre><code>&quot;Barney Rubble &lt;b@rubble.com&gt; (http://barnyrubble.tumblr.com/)</code></pre>
-
-<p>Both email and url are optional either way.</p>
-
-<p>npm also sets a top-level &quot;maintainers&quot; field with your npm user info.</p>
-
-<h2 id="files">files</h2>
-
-<p>The &quot;files&quot; field is an array of files to include in your project. If
-you name a folder in the array, then it will also include the files
-inside that folder. (Unless they would be ignored by another rule.)</p>
-
-<p>You can also provide a &quot;.npmignore&quot; file in the root of your package,
-which will keep files from being included, even if they would be picked
-up by the files array. The &quot;.npmignore&quot; file works just like a
-&quot;.gitignore&quot;.</p>
-
-<h2 id="main">main</h2>
-
-<p>The main field is a module ID that is the primary entry point to your program.
-That is, if your package is named <code>foo</code>, and a user installs it, and then does
-<code>require(&quot;foo&quot;)</code>, then your main module&#39;s exports object will be returned.</p>
-
-<p>This should be a module ID relative to the root of your package folder.</p>
-
-<p>For most modules, it makes the most sense to have a main script and often not
-much else.</p>
-
-<h2 id="bin">bin</h2>
-
-<p>A lot of packages have one or more executable files that they&#39;d like to
-install into the PATH. npm makes this pretty easy (in fact, it uses this
-feature to install the &quot;npm&quot; executable.)</p>
-
-<p>To use this, supply a <code>bin</code> field in your package.json which is a map of
-command name to local file name. On install, npm will symlink that file into
-<code>prefix/bin</code> for global installs, or <code>./node_modules/.bin/</code> for local
-installs.</p>
-
-<p>For example, npm has this:</p>
-
-<pre><code>{ &quot;bin&quot; : { &quot;npm&quot; : &quot;./cli.js&quot; } }</code></pre>
-
-<p>So, when you install npm, it&#39;ll create a symlink from the <code>cli.js</code> script to
-<code>/usr/local/bin/npm</code>.</p>
-
-<p>If you have a single executable, and its name should be the name
-of the package, then you can just supply it as a string. For example:</p>
-
-<pre><code>{ &quot;name&quot;: &quot;my-program&quot;
-, &quot;version&quot;: &quot;1.2.5&quot;
-, &quot;bin&quot;: &quot;./path/to/program&quot; }</code></pre>
-
-<p>would be the same as this:</p>
-
-<pre><code>{ &quot;name&quot;: &quot;my-program&quot;
-, &quot;version&quot;: &quot;1.2.5&quot;
-, &quot;bin&quot; : { &quot;my-program&quot; : &quot;./path/to/program&quot; } }</code></pre>
-
-<h2 id="man">man</h2>
-
-<p>Specify either a single file or an array of filenames to put in place for the
-<code>man</code> program to find.</p>
-
-<p>If only a single file is provided, then it&#39;s installed such that it is the
-result from <code>man &lt;pkgname&gt;</code>, regardless of its actual filename. For example:</p>
-
-<pre><code>{ &quot;name&quot; : &quot;foo&quot;
-, &quot;version&quot; : &quot;1.2.3&quot;
-, &quot;description&quot; : &quot;A packaged foo fooer for fooing foos&quot;
-, &quot;main&quot; : &quot;foo.js&quot;
-, &quot;man&quot; : &quot;./man/doc.1&quot;
-}</code></pre>
-
-<p>would link the <code>./man/doc.1</code> file in such that it is the target for <code>man foo</code></p>
-
-<p>If the filename doesn&#39;t start with the package name, then it&#39;s prefixed.
-So, this:</p>
-
-<pre><code>{ &quot;name&quot; : &quot;foo&quot;
-, &quot;version&quot; : &quot;1.2.3&quot;
-, &quot;description&quot; : &quot;A packaged foo fooer for fooing foos&quot;
-, &quot;main&quot; : &quot;foo.js&quot;
-, &quot;man&quot; : [ &quot;./man/foo.1&quot;, &quot;./man/bar.1&quot; ]
-}</code></pre>
-
-<p>will create files to do <code>man foo</code> and <code>man foo-bar</code>.</p>
-
-<p>Man files must end with a number, and optionally a <code>.gz</code> suffix if they are
-compressed. The number dictates which man section the file is installed into.</p>
-
-<pre><code>{ &quot;name&quot; : &quot;foo&quot;
-, &quot;version&quot; : &quot;1.2.3&quot;
-, &quot;description&quot; : &quot;A packaged foo fooer for fooing foos&quot;
-, &quot;main&quot; : &quot;foo.js&quot;
-, &quot;man&quot; : [ &quot;./man/foo.1&quot;, &quot;./man/foo.2&quot; ]
-}</code></pre>
-
-<p>will create entries for <code>man foo</code> and <code>man 2 foo</code></p>
-
-<h2 id="directories">directories</h2>
-
-<p>The CommonJS <a href="http://wiki.commonjs.org/wiki/Packages/1.0">Packages</a> spec details a
-few ways that you can indicate the structure of your package using a <code>directories</code>
-hash. If you look at <a href="http://registry.npmjs.org/npm/latest">npm&#39;s package.json</a>,
-you&#39;ll see that it has directories for doc, lib, and man.</p>
-
-<p>In the future, this information may be used in other creative ways.</p>
-
-<h3 id="directories-lib">directories.lib</h3>
-
-<p>Tell people where the bulk of your library is. Nothing special is done
-with the lib folder in any way, but it&#39;s useful meta info.</p>
-
-<h3 id="directories-bin">directories.bin</h3>
-
-<p>If you specify a &quot;bin&quot; directory, then all the files in that folder will
-be used as the &quot;bin&quot; hash.</p>
-
-<p>If you have a &quot;bin&quot; hash already, then this has no effect.</p>
-
-<h3 id="directories-man">directories.man</h3>
-
-<p>A folder that is full of man pages. Sugar to generate a &quot;man&quot; array by
-walking the folder.</p>
-
-<h3 id="directories-doc">directories.doc</h3>
-
-<p>Put markdown files in here. Eventually, these will be displayed nicely,
-maybe, someday.</p>
-
-<h3 id="directories-example">directories.example</h3>
-
-<p>Put example scripts in here. Someday, it might be exposed in some clever way.</p>
-
-<h2 id="repository">repository</h2>
-
-<p>Specify the place where your code lives. This is helpful for people who
-want to contribute. If the git repo is on github, then the <code>npm docs</code>
-command will be able to find you.</p>
-
-<p>Do it like this:</p>
-
-<pre><code>&quot;repository&quot; :
- { &quot;type&quot; : &quot;git&quot;
- , &quot;url&quot; : &quot;http://github.com/isaacs/npm.git&quot;
- }
-
-&quot;repository&quot; :
- { &quot;type&quot; : &quot;svn&quot;
- , &quot;url&quot; : &quot;http://v8.googlecode.com/svn/trunk/&quot;
- }</code></pre>
-
-<p>The URL should be a publicly available (perhaps read-only) url that can be handed
-directly to a VCS program without any modification. It should not be a url to an
-html project page that you put in your browser. It&#39;s for computers.</p>
-
-<h2 id="scripts">scripts</h2>
-
-<p>The &quot;scripts&quot; member is an object hash of script commands that are run
-at various times in the lifecycle of your package. The key is the lifecycle
-event, and the value is the command to run at that point.</p>
-
-<p>See <code><a href="../doc/scripts.html">scripts(1)</a></code> to find out more about writing package scripts.</p>
-
-<h2 id="config">config</h2>
-
-<p>A &quot;config&quot; hash can be used to set configuration
-parameters used in package scripts that persist across upgrades. For
-instance, if a package had the following:</p>
-
-<pre><code>{ &quot;name&quot; : &quot;foo&quot;
-, &quot;config&quot; : { &quot;port&quot; : &quot;8080&quot; } }</code></pre>
-
-<p>and then had a &quot;start&quot; command that then referenced the
-<code>npm_package_config_port</code> environment variable, then the user could
-override that by doing <code>npm config set foo:port 8001</code>.</p>
-
-<p>See <code><a href="../doc/config.html">config(1)</a></code> and <code><a href="../doc/scripts.html">scripts(1)</a></code> for more on package
-configs.</p>
-
-<h2 id="dependencies">dependencies</h2>
-
-<p>Dependencies are specified with a simple hash of package name to version
-range. The version range is EITHER a string which has one or more
-space-separated descriptors, OR a range like &quot;fromVersion - toVersion&quot;</p>
-
-<p><strong>Please do not put test harnesses in your <code>dependencies</code> hash.</strong> See
-<code>devDependencies</code>, below.</p>
-
-<p>Version range descriptors may be any of the following styles, where &quot;version&quot;
-is a semver compatible version identifier.</p>
-
-<ul><li><code>version</code> Must match <code>version</code> exactly</li><li><code>=version</code> Same as just <code>version</code></li><li><code>&gt;version</code> Must be greater than <code>version</code></li><li><code>&gt;=version</code> etc</li><li><code>&lt;version</code></li><li><code>&lt;=version</code></li><li><code>~version</code> See &#39;Tilde Version Ranges&#39; below</li><li><code>1.2.x</code> See &#39;X Version Ranges&#39; below</li><li><code>http://...</code> See &#39;URLs as Dependencies&#39; below</li><li><code>*</code> Matches any version</li><li><code>&quot;&quot;</code> (just an empty string) Same as <code>*</code></li><li><code>version1 - version2</code> Same as <code>&gt;=version1 &lt;=version2</code>.</li><li><code>range1 || range2</code> Passes if either range1 or range2 are satisfied.</li><li><code>git...</code> See &#39;Git URLs as Dependencies&#39; below</li></ul>
-
-<p>For example, these are all valid:</p>
-
-<pre><code>{ &quot;dependencies&quot; :
- { &quot;foo&quot; : &quot;1.0.0 - 2.9999.9999&quot;
- , &quot;bar&quot; : &quot;&gt;=1.0.2 &lt;2.1.2&quot;
- , &quot;baz&quot; : &quot;&gt;1.0.2 &lt;=2.3.4&quot;
- , &quot;boo&quot; : &quot;2.0.1&quot;
- , &quot;qux&quot; : &quot;&lt;1.0.0 || &gt;=2.3.1 &lt;2.4.5 || &gt;=2.5.2 &lt;3.0.0&quot;
- , &quot;asd&quot; : &quot;http://asdf.com/asdf.tar.gz&quot;
- , &quot;til&quot; : &quot;~1.2&quot;
- , &quot;elf&quot; : &quot;~1.2.3&quot;
- , &quot;two&quot; : &quot;2.x&quot;
- , &quot;thr&quot; : &quot;3.3.x&quot;
- }
-}</code></pre>
-
-<h3 id="Tilde-Version-Ranges">Tilde Version Ranges</h3>
-
-<p>A range specifier starting with a tilde <code>~</code> character is matched against
-a version in the following fashion.</p>
-
-<ul><li>The version must be at least as high as the range.</li><li>The version must be less than the next major revision above the range.</li></ul>
-
-<p>For example, the following are equivalent:</p>
-
-<ul><li><code>&quot;~1.2.3&quot; = &quot;&gt;=1.2.3 &lt;1.3.0&quot;</code></li><li><code>&quot;~1.2&quot; = &quot;&gt;=1.2.0 &lt;1.3.0&quot;</code></li><li><code>&quot;~1&quot; = &quot;&gt;=1.0.0 &lt;1.1.0&quot;</code></li></ul>
-
-<h3 id="X-Version-Ranges">X Version Ranges</h3>
-
-<p>An &quot;x&quot; in a version range specifies that the version number must start
-with the supplied digits, but any digit may be used in place of the x.</p>
-
-<p>The following are equivalent:</p>
-
-<ul><li><code>&quot;1.2.x&quot; = &quot;&gt;=1.2.0 &lt;1.3.0&quot;</code></li><li><code>&quot;1.x.x&quot; = &quot;&gt;=1.0.0 &lt;2.0.0&quot;</code></li><li><code>&quot;1.2&quot; = &quot;1.2.x&quot;</code></li><li><code>&quot;1.x&quot; = &quot;1.x.x&quot;</code></li><li><code>&quot;1&quot; = &quot;1.x.x&quot;</code></li></ul>
-
-<p>You may not supply a comparator with a version containing an x. Any
-digits after the first &quot;x&quot; are ignored.</p>
-
-<h3 id="URLs-as-Dependencies">URLs as Dependencies</h3>
-
-<p>Starting with npm version 0.2.14, you may specify a tarball URL in place
-of a version range.</p>
-
-<p>This tarball will be downloaded and installed locally to your package at
-install time.</p>
-
-<h3 id="Git-URLs-as-Dependencies">Git URLs as Dependencies</h3>
-
-<p>Git urls can be of the form:</p>
-
-<pre><code>git://github.com/user/project.git#commit-ish
-git+ssh://user@hostname:project.git#commit-ish
-git+ssh://user@hostname/project.git#commit-ish
-git+http://user@hostname/project/blah.git#commit-ish
-git+https://user@hostname/project/blah.git#commit-ish</code></pre>
-
-<p>The <code>commit-ish</code> can be any tag, sha, or branch which can be supplied as
-an argument to <code>git checkout</code>. The default is <code>master</code>.</p>
-
-<h2 id="devDependencies">devDependencies</h2>
-
-<p>If someone is planning on downloading and using your module in their
-program, then they probably don&#39;t want or need to download and build
-the external test or documentation framework that you use.</p>
-
-<p>In this case, it&#39;s best to list these additional items in a
-<code>devDependencies</code> hash.</p>
-
-<p>These things will be installed whenever the <code>--dev</code> configuration flag
-is set. This flag is set automatically when doing <code>npm link</code> or when doing
-<code>npm install</code> from the root of a package, and can be managed like any other npm
-configuration param. See <code><a href="../doc/config.html">config(1)</a></code> for more on the topic.</p>
-
-<h2 id="bundledDependencies">bundledDependencies</h2>
-
-<p>Array of package names that will be bundled when publishing the package.</p>
-
-<p>If this is spelled <code>&quot;bundleDependencies&quot;</code>, then that is also honorable.</p>
-
-<h2 id="optionalDependencies">optionalDependencies</h2>
-
-<p>If a dependency can be used, but you would like npm to proceed if it
-cannot be found or fails to install, then you may put it in the
-<code>optionalDependencies</code> hash. This is a map of package name to version
-or url, just like the <code>dependencies</code> hash. The difference is that
-failure is tolerated.</p>
-
-<p>It is still your program&#39;s responsibility to handle the lack of the
-dependency. For example, something like this:</p>
-
-<pre><code>try {
- var foo = require(&#39;foo&#39;)
- var fooVersion = require(&#39;foo/package.json&#39;).version
-} catch (er) {
- foo = null
-}
-if ( notGoodFooVersion(fooVersion) ) {
- foo = null
-}
-
-// .. then later in your program ..
-
-if (foo) {
- foo.doFooThings()
-}</code></pre>
-
-<p>Entries in <code>optionalDependencies</code> will override entries of the same name in
-<code>dependencies</code>, so it&#39;s usually best to only put in one place.</p>
-
-<h2 id="engines">engines</h2>
-
-<p>You can specify the version of node that your stuff works on:</p>
-
-<pre><code>{ &quot;engines&quot; : { &quot;node&quot; : &quot;&gt;=0.1.27 &lt;0.1.30&quot; } }</code></pre>
-
-<p>And, like with dependencies, if you don&#39;t specify the version (or if you
-specify &quot;*&quot; as the version), then any version of node will do.</p>
-
-<p>If you specify an &quot;engines&quot; field, then npm will require that &quot;node&quot; be
-somewhere on that list. If &quot;engines&quot; is omitted, then npm will just assume
-that it works on node.</p>
-
-<p>You can also use the &quot;engines&quot; field to specify which versions of npm
-are capable of properly installing your program. For example:</p>
-
-<pre><code>{ &quot;engines&quot; : { &quot;npm&quot; : &quot;~1.0.20&quot; } }</code></pre>
-
-<p>Note that, unless the user has set the <code>engine-strict</code> config flag, this
-field is advisory only.</p>
-
-<h2 id="engineStrict">engineStrict</h2>
-
-<p>If you are sure that your module will <em>definitely not</em> run properly on
-versions of Node/npm other than those specified in the <code>engines</code> hash,
-then you can set <code>&quot;engineStrict&quot;: true</code> in your package.json file.
-This will override the user&#39;s <code>engine-strict</code> config setting.</p>
-
-<p>Please do not do this unless you are really very very sure. If your
-engines hash is something overly restrictive, you can quite easily and
-inadvertently lock yourself into obscurity and prevent your users from
-updating to new versions of Node. Consider this choice carefully. If
-people abuse it, it will be removed in a future version of npm.</p>
-
-<h2 id="os">os</h2>
-
-<p>You can specify which operating systems your
-module will run on:</p>
-
-<pre><code>&quot;os&quot; : [ &quot;darwin&quot;, &quot;linux&quot; ]</code></pre>
-
-<p>You can also blacklist instead of whitelist operating systems,
-just prepend the blacklisted os with a &#39;!&#39;:</p>
-
-<pre><code>&quot;os&quot; : [ &quot;!win32&quot; ]</code></pre>
-
-<p>The host operating system is determined by <code>process.platform</code></p>
-
-<p>It is allowed to both blacklist, and whitelist, although there isn&#39;t any
-good reason to do this.</p>
-
-<h2 id="cpu">cpu</h2>
-
-<p>If your code only runs on certain cpu architectures,
-you can specify which ones.</p>
-
-<pre><code>&quot;cpu&quot; : [ &quot;x64&quot;, &quot;ia32&quot; ]</code></pre>
-
-<p>Like the <code>os</code> option, you can also blacklist architectures:</p>
-
-<pre><code>&quot;cpu&quot; : [ &quot;!arm&quot;, &quot;!mips&quot; ]</code></pre>
-
-<p>The host architecture is determined by <code>process.arch</code></p>
-
-<h2 id="preferGlobal">preferGlobal</h2>
-
-<p>If your package is primarily a command-line application that should be
-installed globally, then set this value to <code>true</code> to provide a warning
-if it is installed locally.</p>
-
-<p>It doesn&#39;t actually prevent users from installing it locally, but it
-does help prevent some confusion if it doesn&#39;t work as expected.</p>
-
-<h2 id="private">private</h2>
-
-<p>If you set <code>&quot;private&quot;: true</code> in your package.json, then npm will refuse
-to publish it.</p>
-
-<p>This is a way to prevent accidental publication of private repositories.
-If you would like to ensure that a given package is only ever published
-to a specific registry (for example, an internal registry),
-then use the <code>publishConfig</code> hash described below
-to override the <code>registry</code> config param at publish-time.</p>
-
-<h2 id="publishConfig">publishConfig</h2>
-
-<p>This is a set of config values that will be used at publish-time. It&#39;s
-especially handy if you want to set the tag or registry, so that you can
-ensure that a given package is not tagged with &quot;latest&quot; or published to
-the global public registry by default.</p>
-
-<p>Any config values can be overridden, but of course only &quot;tag&quot; and
-&quot;registry&quot; probably matter for the purposes of publishing.</p>
-
-<p>See <code><a href="../doc/config.html">config(1)</a></code> to see the list of config options that can be
-overridden.</p>
-
-<h2 id="SEE-ALSO">SEE ALSO</h2>
-
-<ul><li><a href="../doc/semver.html">semver(1)</a></li><li><a href="../doc/init.html">init(1)</a></li><li><a href="../doc/version.html">version(1)</a></li><li><a href="../doc/config.html">config(1)</a></li><li><a href="../doc/help.html">help(1)</a></li><li><a href="../doc/faq.html">faq(1)</a></li><li><a href="../doc/install.html">install(1)</a></li><li><a href="../doc/publish.html">publish(1)</a></li><li><a href="../doc/rm.html">rm(1)</a></li></ul>
-</div>
-<p id="footer">json &mdash; npm@1.2.30</p>
-<script>
-;(function () {
-var wrapper = document.getElementById("wrapper")
-var els = Array.prototype.slice.call(wrapper.getElementsByTagName("*"), 0)
- .filter(function (el) {
- return el.parentNode === wrapper
- && el.tagName.match(/H[1-6]/)
- && el.id
- })
-var l = 2
- , toc = document.createElement("ul")
-toc.innerHTML = els.map(function (el) {
- var i = el.tagName.charAt(1)
- , out = ""
- while (i > l) {
- out += "<ul>"
- l ++
- }
- while (i < l) {
- out += "</ul>"
- l --
- }
- out += "<li><a href='#" + el.id + "'>" +
- ( el.innerText || el.text || el.innerHTML)
- + "</a>"
- return out
-}).join("\n")
-toc.id = "toc"
-document.body.appendChild(toc)
-})()
-</script>
-</body></html>
diff --git a/deps/npm/html/doc/link.html b/deps/npm/html/doc/link.html
deleted file mode 100644
index 0457b8e07..000000000
--- a/deps/npm/html/doc/link.html
+++ /dev/null
@@ -1,96 +0,0 @@
-<!doctype html>
-<html>
- <title>link</title>
- <meta http-equiv="content-type" value="text/html;utf-8">
- <link rel="stylesheet" type="text/css" href="../static/style.css">
-
- <body>
- <div id="wrapper">
-<h1><a href="../doc/link.html">link</a></h1> <p>Symlink a package folder</p>
-
-<h2 id="SYNOPSIS">SYNOPSIS</h2>
-
-<pre><code>npm link (in package folder)
-npm link &lt;pkgname&gt;</code></pre>
-
-<h2 id="DESCRIPTION">DESCRIPTION</h2>
-
-<p>Package linking is a two-step process.</p>
-
-<p>First, <code>npm link</code> in a package folder will create a globally-installed
-symbolic link from <code>prefix/package-name</code> to the current folder.</p>
-
-<p>Next, in some other location, <code>npm link package-name</code> will create a
-symlink from the local <code>node_modules</code> folder to the global symlink.</p>
-
-<p>Note that <code>package-name</code> is taken from <code>package.json</code> ,
-not from directory name.</p>
-
-<p>When creating tarballs for <code>npm publish</code>, the linked packages are
-&quot;snapshotted&quot; to their current state by resolving the symbolic links.</p>
-
-<p>This is
-handy for installing your own stuff, so that you can work on it and test it
-iteratively without having to continually rebuild.</p>
-
-<p>For example:</p>
-
-<pre><code>cd ~/projects/node-redis # go into the package directory
-npm link # creates global link
-cd ~/projects/node-bloggy # go into some other package directory.
-npm link redis # link-install the package</code></pre>
-
-<p>Now, any changes to ~/projects/node-redis will be reflected in
-~/projects/node-bloggy/node_modules/redis/</p>
-
-<p>You may also shortcut the two steps in one. For example, to do the
-above use-case in a shorter way:</p>
-
-<pre><code>cd ~/projects/node-bloggy # go into the dir of your main project
-npm link ../node-redis # link the dir of your dependency</code></pre>
-
-<p>The second line is the equivalent of doing:</p>
-
-<pre><code>(cd ../node-redis; npm link)
-npm link redis</code></pre>
-
-<p>That is, it first creates a global link, and then links the global
-installation target into your project&#39;s <code>node_modules</code> folder.</p>
-
-<h2 id="SEE-ALSO">SEE ALSO</h2>
-
-<ul><li><a href="../doc/developers.html">developers(1)</a></li><li><a href="../doc/faq.html">faq(1)</a></li><li><a href="../doc/json.html">json(1)</a></li><li><a href="../doc/install.html">install(1)</a></li><li><a href="../doc/folders.html">folders(1)</a></li><li><a href="../doc/config.html">config(1)</a></li></ul>
-</div>
-<p id="footer">link &mdash; npm@1.2.30</p>
-<script>
-;(function () {
-var wrapper = document.getElementById("wrapper")
-var els = Array.prototype.slice.call(wrapper.getElementsByTagName("*"), 0)
- .filter(function (el) {
- return el.parentNode === wrapper
- && el.tagName.match(/H[1-6]/)
- && el.id
- })
-var l = 2
- , toc = document.createElement("ul")
-toc.innerHTML = els.map(function (el) {
- var i = el.tagName.charAt(1)
- , out = ""
- while (i > l) {
- out += "<ul>"
- l ++
- }
- while (i < l) {
- out += "</ul>"
- l --
- }
- out += "<li><a href='#" + el.id + "'>" +
- ( el.innerText || el.text || el.innerHTML)
- + "</a>"
- return out
-}).join("\n")
-toc.id = "toc"
-document.body.appendChild(toc)
-})()
-</script>
-</body></html>
diff --git a/deps/npm/html/doc/list.html b/deps/npm/html/doc/list.html
deleted file mode 100644
index 45f4b7d1a..000000000
--- a/deps/npm/html/doc/list.html
+++ /dev/null
@@ -1,99 +0,0 @@
-<!doctype html>
-<html>
- <title>list</title>
- <meta http-equiv="content-type" value="text/html;utf-8">
- <link rel="stylesheet" type="text/css" href="../static/style.css">
-
- <body>
- <div id="wrapper">
-<h1><a href="../doc/ls.html">ls</a></h1> <p>List installed packages</p>
-
-<h2 id="SYNOPSIS">SYNOPSIS</h2>
-
-<pre><code>npm list [&lt;pkg&gt; ...]
-npm ls [&lt;pkg&gt; ...]
-npm la [&lt;pkg&gt; ...]
-npm ll [&lt;pkg&gt; ...]</code></pre>
-
-<h2 id="DESCRIPTION">DESCRIPTION</h2>
-
-<p>This command will print to stdout all the versions of packages that are
-installed, as well as their dependencies, in a tree-structure.</p>
-
-<p>Positional arguments are <code>name@version-range</code> identifiers, which will
-limit the results to only the paths to the packages named. Note that
-nested packages will <em>also</em> show the paths to the specified packages.
-For example, running <code>npm ls promzard</code> in npm&#39;s source tree will show:</p>
-
-<pre><code>npm@1.1.59 /path/to/npm
-└─┬ init-package-json@0.0.4
- └── promzard@0.1.5</code></pre>
-
-<p>It will show print out extraneous, missing, and invalid packages.</p>
-
-<p>When run as <code>ll</code> or <code>la</code>, it shows extended information by default.</p>
-
-<h2 id="CONFIGURATION">CONFIGURATION</h2>
-
-<h3 id="json">json</h3>
-
-<ul><li>Default: false</li><li>Type: Boolean</li></ul>
-
-<p>Show information in JSON format.</p>
-
-<h3 id="long">long</h3>
-
-<ul><li>Default: false</li><li>Type: Boolean</li></ul>
-
-<p>Show extended information.</p>
-
-<h3 id="parseable">parseable</h3>
-
-<ul><li>Default: false</li><li>Type: Boolean</li></ul>
-
-<p>Show parseable output instead of tree view.</p>
-
-<h3 id="global">global</h3>
-
-<ul><li>Default: false</li><li>Type: Boolean</li></ul>
-
-<p>List packages in the global install prefix instead of in the current
-project.</p>
-
-<h2 id="SEE-ALSO">SEE ALSO</h2>
-
-<ul><li><a href="../doc/config.html">config(1)</a></li><li><a href="../doc/folders.html">folders(1)</a></li><li><a href="../doc/install.html">install(1)</a></li><li><a href="../doc/link.html">link(1)</a></li><li><a href="../doc/prune.html">prune(1)</a></li><li><a href="../doc/outdated.html">outdated(1)</a></li><li><a href="../doc/update.html">update(1)</a></li></ul>
-</div>
-<p id="footer">list &mdash; npm@1.1.59</p>
-<script>
-;(function () {
-var wrapper = document.getElementById("wrapper")
-var els = Array.prototype.slice.call(wrapper.getElementsByTagName("*"), 0)
- .filter(function (el) {
- return el.parentNode === wrapper
- && el.tagName.match(/H[1-6]/)
- && el.id
- })
-var l = 2
- , toc = document.createElement("ul")
-toc.innerHTML = els.map(function (el) {
- var i = el.tagName.charAt(1)
- , out = ""
- while (i > l) {
- out += "<ul>"
- l ++
- }
- while (i < l) {
- out += "</ul>"
- l --
- }
- out += "<li><a href='#" + el.id + "'>" +
- ( el.innerText || el.text || el.innerHTML)
- + "</a>"
- return out
-}).join("\n")
-toc.id = "toc"
-document.body.appendChild(toc)
-})()
-</script>
-</body></html>
diff --git a/deps/npm/html/doc/ls.html b/deps/npm/html/doc/ls.html
deleted file mode 100644
index cdca8bac6..000000000
--- a/deps/npm/html/doc/ls.html
+++ /dev/null
@@ -1,99 +0,0 @@
-<!doctype html>
-<html>
- <title>ls</title>
- <meta http-equiv="content-type" value="text/html;utf-8">
- <link rel="stylesheet" type="text/css" href="../static/style.css">
-
- <body>
- <div id="wrapper">
-<h1><a href="../doc/ls.html">ls</a></h1> <p>List installed packages</p>
-
-<h2 id="SYNOPSIS">SYNOPSIS</h2>
-
-<pre><code>npm list [&lt;pkg&gt; ...]
-npm ls [&lt;pkg&gt; ...]
-npm la [&lt;pkg&gt; ...]
-npm ll [&lt;pkg&gt; ...]</code></pre>
-
-<h2 id="DESCRIPTION">DESCRIPTION</h2>
-
-<p>This command will print to stdout all the versions of packages that are
-installed, as well as their dependencies, in a tree-structure.</p>
-
-<p>Positional arguments are <code>name@version-range</code> identifiers, which will
-limit the results to only the paths to the packages named. Note that
-nested packages will <em>also</em> show the paths to the specified packages.
-For example, running <code>npm ls promzard</code> in npm&#39;s source tree will show:</p>
-
-<pre><code>npm@1.2.30 /path/to/npm
-└─┬ init-package-json@0.0.4
- └── promzard@0.1.5</code></pre>
-
-<p>It will show print out extraneous, missing, and invalid packages.</p>
-
-<p>When run as <code>ll</code> or <code>la</code>, it shows extended information by default.</p>
-
-<h2 id="CONFIGURATION">CONFIGURATION</h2>
-
-<h3 id="json">json</h3>
-
-<ul><li>Default: false</li><li>Type: Boolean</li></ul>
-
-<p>Show information in JSON format.</p>
-
-<h3 id="long">long</h3>
-
-<ul><li>Default: false</li><li>Type: Boolean</li></ul>
-
-<p>Show extended information.</p>
-
-<h3 id="parseable">parseable</h3>
-
-<ul><li>Default: false</li><li>Type: Boolean</li></ul>
-
-<p>Show parseable output instead of tree view.</p>
-
-<h3 id="global">global</h3>
-
-<ul><li>Default: false</li><li>Type: Boolean</li></ul>
-
-<p>List packages in the global install prefix instead of in the current
-project.</p>
-
-<h2 id="SEE-ALSO">SEE ALSO</h2>
-
-<ul><li><a href="../doc/config.html">config(1)</a></li><li><a href="../doc/folders.html">folders(1)</a></li><li><a href="../doc/install.html">install(1)</a></li><li><a href="../doc/link.html">link(1)</a></li><li><a href="../doc/prune.html">prune(1)</a></li><li><a href="../doc/outdated.html">outdated(1)</a></li><li><a href="../doc/update.html">update(1)</a></li></ul>
-</div>
-<p id="footer">ls &mdash; npm@1.2.30</p>
-<script>
-;(function () {
-var wrapper = document.getElementById("wrapper")
-var els = Array.prototype.slice.call(wrapper.getElementsByTagName("*"), 0)
- .filter(function (el) {
- return el.parentNode === wrapper
- && el.tagName.match(/H[1-6]/)
- && el.id
- })
-var l = 2
- , toc = document.createElement("ul")
-toc.innerHTML = els.map(function (el) {
- var i = el.tagName.charAt(1)
- , out = ""
- while (i > l) {
- out += "<ul>"
- l ++
- }
- while (i < l) {
- out += "</ul>"
- l --
- }
- out += "<li><a href='#" + el.id + "'>" +
- ( el.innerText || el.text || el.innerHTML)
- + "</a>"
- return out
-}).join("\n")
-toc.id = "toc"
-document.body.appendChild(toc)
-})()
-</script>
-</body></html>
diff --git a/deps/npm/html/doc/misc/npm-coding-style.html b/deps/npm/html/doc/misc/npm-coding-style.html
new file mode 100644
index 000000000..f26eb2931
--- /dev/null
+++ b/deps/npm/html/doc/misc/npm-coding-style.html
@@ -0,0 +1,151 @@
+<!doctype html>
+<html>
+ <title>npm-coding-style</title>
+ <meta http-equiv="content-type" value="text/html;utf-8">
+ <link rel="stylesheet" type="text/css" href="../../static/style.css">
+ <link rel="canonical" href="https://www.npmjs.org/doc/misc/npm-coding-style.html">
+ <script async=true src="../../static/toc.js"></script>
+
+ <body>
+ <div id="wrapper">
+
+<h1><a href="../misc/npm-coding-style.html">npm-coding-style</a></h1> <p>npm&#39;s &quot;funny&quot; coding style</p>
+<h2 id="description">DESCRIPTION</h2>
+<p>npm&#39;s coding style is a bit unconventional. It is not different for
+difference&#39;s sake, but rather a carefully crafted style that is
+designed to reduce visual clutter and make bugs more apparent.</p>
+<p>If you want to contribute to npm (which is very encouraged), you should
+make your code conform to npm&#39;s style.</p>
+<p>Note: this concerns npm&#39;s code not the specific packages at npmjs.org</p>
+<h2 id="line-length">Line Length</h2>
+<p>Keep lines shorter than 80 characters. It&#39;s better for lines to be
+too short than to be too long. Break up long lists, objects, and other
+statements onto multiple lines.</p>
+<h2 id="indentation">Indentation</h2>
+<p>Two-spaces. Tabs are better, but they look like hell in web browsers
+(and on github), and node uses 2 spaces, so that&#39;s that.</p>
+<p>Configure your editor appropriately.</p>
+<h2 id="curly-braces">Curly braces</h2>
+<p>Curly braces belong on the same line as the thing that necessitates them.</p>
+<p>Bad:</p>
+<pre><code>function ()
+{
+</code></pre><p>Good:</p>
+<pre><code>function () {
+</code></pre><p>If a block needs to wrap to the next line, use a curly brace. Don&#39;t
+use it if it doesn&#39;t.</p>
+<p>Bad:</p>
+<pre><code>if (foo) { bar() }
+while (foo)
+ bar()
+</code></pre><p>Good:</p>
+<pre><code>if (foo) bar()
+while (foo) {
+ bar()
+}
+</code></pre><h2 id="semicolons">Semicolons</h2>
+<p>Don&#39;t use them except in four situations:</p>
+<ul>
+<li><code>for (;;)</code> loops. They&#39;re actually required.</li>
+<li>null loops like: <code>while (something) ;</code> (But you&#39;d better have a good
+reason for doing that.)</li>
+<li><code>case &quot;foo&quot;: doSomething(); break</code></li>
+<li>In front of a leading <code>(</code> or <code>[</code> at the start of the line.
+This prevents the expression from being interpreted
+as a function call or property access, respectively.</li>
+</ul>
+<p>Some examples of good semicolon usage:</p>
+<pre><code>;(x || y).doSomething()
+;[a, b, c].forEach(doSomething)
+for (var i = 0; i &lt; 10; i ++) {
+ switch (state) {
+ case &quot;begin&quot;: start(); continue
+ case &quot;end&quot;: finish(); break
+ default: throw new Error(&quot;unknown state&quot;)
+ }
+ end()
+}
+</code></pre><p>Note that starting lines with <code>-</code> and <code>+</code> also should be prefixed
+with a semicolon, but this is much less common.</p>
+<h2 id="comma-first">Comma First</h2>
+<p>If there is a list of things separated by commas, and it wraps
+across multiple lines, put the comma at the start of the next
+line, directly below the token that starts the list. Put the
+final token in the list on a line by itself. For example:</p>
+<pre><code>var magicWords = [ &quot;abracadabra&quot;
+ , &quot;gesundheit&quot;
+ , &quot;ventrilo&quot;
+ ]
+ , spells = { &quot;fireball&quot; : function () { setOnFire() }
+ , &quot;water&quot; : function () { putOut() }
+ }
+ , a = 1
+ , b = &quot;abc&quot;
+ , etc
+ , somethingElse
+</code></pre><h2 id="whitespace">Whitespace</h2>
+<p>Put a single space in front of ( for anything other than a function call.
+Also use a single space wherever it makes things more readable.</p>
+<p>Don&#39;t leave trailing whitespace at the end of lines. Don&#39;t indent empty
+lines. Don&#39;t use more spaces than are helpful.</p>
+<h2 id="functions">Functions</h2>
+<p>Use named functions. They make stack traces a lot easier to read.</p>
+<h2 id="callbacks-sync-async-style">Callbacks, Sync/async Style</h2>
+<p>Use the asynchronous/non-blocking versions of things as much as possible.
+It might make more sense for npm to use the synchronous fs APIs, but this
+way, the fs and http and child process stuff all uses the same callback-passing
+methodology.</p>
+<p>The callback should always be the last argument in the list. Its first
+argument is the Error or null.</p>
+<p>Be very careful never to ever ever throw anything. It&#39;s worse than useless.
+Just send the error message back as the first argument to the callback.</p>
+<h2 id="errors">Errors</h2>
+<p>Always create a new Error object with your message. Don&#39;t just return a
+string message to the callback. Stack traces are handy.</p>
+<h2 id="logging">Logging</h2>
+<p>Logging is done using the <a href="https://github.com/npm/npmlog">npmlog</a>
+utility.</p>
+<p>Please clean up logs when they are no longer helpful. In particular,
+logging the same object over and over again is not helpful. Logs should
+report what&#39;s happening so that it&#39;s easier to track down where a fault
+occurs.</p>
+<p>Use appropriate log levels. See <code><a href="../misc/npm-config.html">npm-config(7)</a></code> and search for
+&quot;loglevel&quot;.</p>
+<h2 id="case-naming-etc-">Case, naming, etc.</h2>
+<p>Use <code>lowerCamelCase</code> for multiword identifiers when they refer to objects,
+functions, methods, members, or anything not specified in this section.</p>
+<p>Use <code>UpperCamelCase</code> for class names (things that you&#39;d pass to &quot;new&quot;).</p>
+<p>Use <code>all-lower-hyphen-css-case</code> for multiword filenames and config keys.</p>
+<p>Use named functions. They make stack traces easier to follow.</p>
+<p>Use <code>CAPS_SNAKE_CASE</code> for constants, things that should never change
+and are rarely used.</p>
+<p>Use a single uppercase letter for function names where the function
+would normally be anonymous, but needs to call itself recursively. It
+makes it clear that it&#39;s a &quot;throwaway&quot; function.</p>
+<h2 id="null-undefined-false-0">null, undefined, false, 0</h2>
+<p>Boolean variables and functions should always be either <code>true</code> or
+<code>false</code>. Don&#39;t set it to 0 unless it&#39;s supposed to be a number.</p>
+<p>When something is intentionally missing or removed, set it to <code>null</code>.</p>
+<p>Don&#39;t set things to <code>undefined</code>. Reserve that value to mean &quot;not yet
+set to anything.&quot;</p>
+<p>Boolean objects are verboten.</p>
+<h2 id="see-also">SEE ALSO</h2>
+<ul>
+<li><a href="../misc/npm-developers.html">npm-developers(7)</a></li>
+<li><a href="../misc/npm-faq.html">npm-faq(7)</a></li>
+<li><a href="../cli/npm.html">npm(1)</a></li>
+</ul>
+
+</div>
+
+<table border=0 cellspacing=0 cellpadding=0 id=npmlogo>
+<tr><td style="width:180px;height:10px;background:rgb(237,127,127)" colspan=18>&nbsp;</td></tr>
+<tr><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td colspan=6 style="width:60px;height:10px;background:#fff">&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td></tr>
+<tr><td colspan=2 style="width:20px;height:30px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=4 colspan=2>&nbsp;</td><td style="width:10px;height:20px;background:rgb(237,127,127)" rowspan=2>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=3 colspan=2>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff" rowspan=2>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff">&nbsp;</td></tr>
+<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
+<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
+</table>
+<p id="footer">npm-coding-style &mdash; npm@1.4.10</p>
+
diff --git a/deps/npm/html/doc/misc/npm-config.html b/deps/npm/html/doc/misc/npm-config.html
new file mode 100644
index 000000000..e279450aa
--- /dev/null
+++ b/deps/npm/html/doc/misc/npm-config.html
@@ -0,0 +1,735 @@
+<!doctype html>
+<html>
+ <title>npm-config</title>
+ <meta http-equiv="content-type" value="text/html;utf-8">
+ <link rel="stylesheet" type="text/css" href="../../static/style.css">
+ <link rel="canonical" href="https://www.npmjs.org/doc/misc/npm-config.html">
+ <script async=true src="../../static/toc.js"></script>
+
+ <body>
+ <div id="wrapper">
+
+<h1><a href="../misc/npm-config.html">npm-config</a></h1> <p>More than you probably want to know about npm configuration</p>
+<h2 id="description">DESCRIPTION</h2>
+<p>npm gets its configuration values from 6 sources, in this priority:</p>
+<h3 id="command-line-flags">Command Line Flags</h3>
+<p>Putting <code>--foo bar</code> on the command line sets the <code>foo</code> configuration
+parameter to <code>&quot;bar&quot;</code>. A <code>--</code> argument tells the cli parser to stop
+reading flags. A <code>--flag</code> parameter that is at the <em>end</em> of the
+command will be given the value of <code>true</code>.</p>
+<h3 id="environment-variables">Environment Variables</h3>
+<p>Any environment variables that start with <code>npm_config_</code> will be
+interpreted as a configuration parameter. For example, putting
+<code>npm_config_foo=bar</code> in your environment will set the <code>foo</code>
+configuration parameter to <code>bar</code>. Any environment configurations that
+are not given a value will be given the value of <code>true</code>. Config
+values are case-insensitive, so <code>NPM_CONFIG_FOO=bar</code> will work the
+same.</p>
+<h3 id="npmrc-files">npmrc Files</h3>
+<p>The three relevant files are:</p>
+<ul>
+<li>per-user config file (~/.npmrc)</li>
+<li>global config file ($PREFIX/npmrc)</li>
+<li>npm builtin config file (/path/to/npm/npmrc)</li>
+</ul>
+<p>See <a href="../files/npmrc.html">npmrc(5)</a> for more details.</p>
+<h3 id="default-configs">Default Configs</h3>
+<p>A set of configuration parameters that are internal to npm, and are
+defaults if nothing else is specified.</p>
+<h2 id="shorthands-and-other-cli-niceties">Shorthands and Other CLI Niceties</h2>
+<p>The following shorthands are parsed on the command-line:</p>
+<ul>
+<li><code>-v</code>: <code>--version</code></li>
+<li><code>-h</code>, <code>-?</code>, <code>--help</code>, <code>-H</code>: <code>--usage</code></li>
+<li><code>-s</code>, <code>--silent</code>: <code>--loglevel silent</code></li>
+<li><code>-q</code>, <code>--quiet</code>: <code>--loglevel warn</code></li>
+<li><code>-d</code>: <code>--loglevel info</code></li>
+<li><code>-dd</code>, <code>--verbose</code>: <code>--loglevel verbose</code></li>
+<li><code>-ddd</code>: <code>--loglevel silly</code></li>
+<li><code>-g</code>: <code>--global</code></li>
+<li><code>-l</code>: <code>--long</code></li>
+<li><code>-m</code>: <code>--message</code></li>
+<li><code>-p</code>, <code>--porcelain</code>: <code>--parseable</code></li>
+<li><code>-reg</code>: <code>--registry</code></li>
+<li><code>-v</code>: <code>--version</code></li>
+<li><code>-f</code>: <code>--force</code></li>
+<li><code>-desc</code>: <code>--description</code></li>
+<li><code>-S</code>: <code>--save</code></li>
+<li><code>-D</code>: <code>--save-dev</code></li>
+<li><code>-O</code>: <code>--save-optional</code></li>
+<li><code>-B</code>: <code>--save-bundle</code></li>
+<li><code>-E</code>: <code>--save-exact</code></li>
+<li><code>-y</code>: <code>--yes</code></li>
+<li><code>-n</code>: <code>--yes false</code></li>
+<li><code>ll</code> and <code>la</code> commands: <code>ls --long</code></li>
+</ul>
+<p>If the specified configuration param resolves unambiguously to a known
+configuration parameter, then it is expanded to that configuration
+parameter. For example:</p>
+<pre><code>npm ls --par
+# same as:
+npm ls --parseable
+</code></pre><p>If multiple single-character shorthands are strung together, and the
+resulting combination is unambiguously not some other configuration
+param, then it is expanded to its various component pieces. For
+example:</p>
+<pre><code>npm ls -gpld
+# same as:
+npm ls --global --parseable --long --loglevel info
+</code></pre><h2 id="per-package-config-settings">Per-Package Config Settings</h2>
+<p>When running scripts (see <code><a href="../misc/npm-scripts.html">npm-scripts(7)</a></code>) the package.json &quot;config&quot;
+keys are overwritten in the environment if there is a config param of
+<code>&lt;name&gt;[@&lt;version&gt;]:&lt;key&gt;</code>. For example, if the package.json has
+this:</p>
+<pre><code>{ &quot;name&quot; : &quot;foo&quot;
+, &quot;config&quot; : { &quot;port&quot; : &quot;8080&quot; }
+, &quot;scripts&quot; : { &quot;start&quot; : &quot;node server.js&quot; } }
+</code></pre><p>and the server.js is this:</p>
+<pre><code>http.createServer(...).listen(process.env.npm_package_config_port)
+</code></pre><p>then the user could change the behavior by doing:</p>
+<pre><code>npm config set foo:port 80
+</code></pre><p>See <a href="../files/package.json.html">package.json(5)</a> for more information.</p>
+<h2 id="config-settings">Config Settings</h2>
+<h3 id="always-auth">always-auth</h3>
+<ul>
+<li>Default: false</li>
+<li>Type: Boolean</li>
+</ul>
+<p>Force npm to always require authentication when accessing the registry,
+even for <code>GET</code> requests.</p>
+<h3 id="bin-links">bin-links</h3>
+<ul>
+<li>Default: <code>true</code></li>
+<li>Type: Boolean</li>
+</ul>
+<p>Tells npm to create symlinks (or <code>.cmd</code> shims on Windows) for package
+executables.</p>
+<p>Set to false to have it not do this. This can be used to work around
+the fact that some file systems don&#39;t support symlinks, even on
+ostensibly Unix systems.</p>
+<h3 id="browser">browser</h3>
+<ul>
+<li>Default: OS X: <code>&quot;open&quot;</code>, Windows: <code>&quot;start&quot;</code>, Others: <code>&quot;xdg-open&quot;</code></li>
+<li>Type: String</li>
+</ul>
+<p>The browser that is called by the <code>npm docs</code> command to open websites.</p>
+<h3 id="ca">ca</h3>
+<ul>
+<li>Default: The npm CA certificate</li>
+<li>Type: String or null</li>
+</ul>
+<p>The Certificate Authority signing certificate that is trusted for SSL
+connections to the registry.</p>
+<p>Set to <code>null</code> to only allow &quot;known&quot; registrars, or to a specific CA cert
+to trust only that specific signing authority.</p>
+<p>See also the <code>strict-ssl</code> config.</p>
+<h3 id="cache">cache</h3>
+<ul>
+<li>Default: Windows: <code>%AppData%\npm-cache</code>, Posix: <code>~/.npm</code></li>
+<li>Type: path</li>
+</ul>
+<p>The location of npm&#39;s cache directory. See <code><a href="../cli/npm-cache.html">npm-cache(1)</a></code></p>
+<h3 id="cache-lock-stale">cache-lock-stale</h3>
+<ul>
+<li>Default: 60000 (1 minute)</li>
+<li>Type: Number</li>
+</ul>
+<p>The number of ms before cache folder lockfiles are considered stale.</p>
+<h3 id="cache-lock-retries">cache-lock-retries</h3>
+<ul>
+<li>Default: 10</li>
+<li>Type: Number</li>
+</ul>
+<p>Number of times to retry to acquire a lock on cache folder lockfiles.</p>
+<h3 id="cache-lock-wait">cache-lock-wait</h3>
+<ul>
+<li>Default: 10000 (10 seconds)</li>
+<li>Type: Number</li>
+</ul>
+<p>Number of ms to wait for cache lock files to expire.</p>
+<h3 id="cache-max">cache-max</h3>
+<ul>
+<li>Default: Infinity</li>
+<li>Type: Number</li>
+</ul>
+<p>The maximum time (in seconds) to keep items in the registry cache before
+re-checking against the registry.</p>
+<p>Note that no purging is done unless the <code>npm cache clean</code> command is
+explicitly used, and that only GET requests use the cache.</p>
+<h3 id="cache-min">cache-min</h3>
+<ul>
+<li>Default: 10</li>
+<li>Type: Number</li>
+</ul>
+<p>The minimum time (in seconds) to keep items in the registry cache before
+re-checking against the registry.</p>
+<p>Note that no purging is done unless the <code>npm cache clean</code> command is
+explicitly used, and that only GET requests use the cache.</p>
+<h3 id="cert">cert</h3>
+<ul>
+<li>Default: <code>null</code></li>
+<li>Type: String</li>
+</ul>
+<p>A client certificate to pass when accessing the registry.</p>
+<h3 id="color">color</h3>
+<ul>
+<li>Default: true on Posix, false on Windows</li>
+<li>Type: Boolean or <code>&quot;always&quot;</code></li>
+</ul>
+<p>If false, never shows colors. If <code>&quot;always&quot;</code> then always shows colors.
+If true, then only prints color codes for tty file descriptors.</p>
+<h3 id="depth">depth</h3>
+<ul>
+<li>Default: Infinity</li>
+<li>Type: Number</li>
+</ul>
+<p>The depth to go when recursing directories for <code>npm ls</code> and
+<code>npm cache ls</code>.</p>
+<h3 id="description">description</h3>
+<ul>
+<li>Default: true</li>
+<li>Type: Boolean</li>
+</ul>
+<p>Show the description in <code>npm search</code></p>
+<h3 id="dev">dev</h3>
+<ul>
+<li>Default: false</li>
+<li>Type: Boolean</li>
+</ul>
+<p>Install <code>dev-dependencies</code> along with packages.</p>
+<p>Note that <code>dev-dependencies</code> are also installed if the <code>npat</code> flag is
+set.</p>
+<h3 id="editor">editor</h3>
+<ul>
+<li>Default: <code>EDITOR</code> environment variable if set, or <code>&quot;vi&quot;</code> on Posix,
+or <code>&quot;notepad&quot;</code> on Windows.</li>
+<li>Type: path</li>
+</ul>
+<p>The command to run for <code>npm edit</code> or <code>npm config edit</code>.</p>
+<h3 id="email">email</h3>
+<p>The email of the logged-in user.</p>
+<p>Set by the <code>npm adduser</code> command. Should not be set explicitly.</p>
+<h3 id="engine-strict">engine-strict</h3>
+<ul>
+<li>Default: false</li>
+<li>Type: Boolean</li>
+</ul>
+<p>If set to true, then npm will stubbornly refuse to install (or even
+consider installing) any package that claims to not be compatible with
+the current Node.js version.</p>
+<h3 id="force">force</h3>
+<ul>
+<li>Default: false</li>
+<li>Type: Boolean</li>
+</ul>
+<p>Makes various commands more forceful.</p>
+<ul>
+<li>lifecycle script failure does not block progress.</li>
+<li>publishing clobbers previously published versions.</li>
+<li>skips cache when requesting from the registry.</li>
+<li>prevents checks against clobbering non-npm files.</li>
+</ul>
+<h3 id="fetch-retries">fetch-retries</h3>
+<ul>
+<li>Default: 2</li>
+<li>Type: Number</li>
+</ul>
+<p>The &quot;retries&quot; config for the <code>retry</code> module to use when fetching
+packages from the registry.</p>
+<h3 id="fetch-retry-factor">fetch-retry-factor</h3>
+<ul>
+<li>Default: 10</li>
+<li>Type: Number</li>
+</ul>
+<p>The &quot;factor&quot; config for the <code>retry</code> module to use when fetching
+packages.</p>
+<h3 id="fetch-retry-mintimeout">fetch-retry-mintimeout</h3>
+<ul>
+<li>Default: 10000 (10 seconds)</li>
+<li>Type: Number</li>
+</ul>
+<p>The &quot;minTimeout&quot; config for the <code>retry</code> module to use when fetching
+packages.</p>
+<h3 id="fetch-retry-maxtimeout">fetch-retry-maxtimeout</h3>
+<ul>
+<li>Default: 60000 (1 minute)</li>
+<li>Type: Number</li>
+</ul>
+<p>The &quot;maxTimeout&quot; config for the <code>retry</code> module to use when fetching
+packages.</p>
+<h3 id="git">git</h3>
+<ul>
+<li>Default: <code>&quot;git&quot;</code></li>
+<li>Type: String</li>
+</ul>
+<p>The command to use for git commands. If git is installed on the
+computer, but is not in the <code>PATH</code>, then set this to the full path to
+the git binary.</p>
+<h3 id="git-tag-version">git-tag-version</h3>
+<ul>
+<li>Default: <code>true</code></li>
+<li>Type: Boolean</li>
+</ul>
+<p>Tag the commit when using the <code>npm version</code> command.</p>
+<h3 id="global">global</h3>
+<ul>
+<li>Default: false</li>
+<li>Type: Boolean</li>
+</ul>
+<p>Operates in &quot;global&quot; mode, so that packages are installed into the
+<code>prefix</code> folder instead of the current working directory. See
+<code><a href="../files/npm-folders.html">npm-folders(5)</a></code> for more on the differences in behavior.</p>
+<ul>
+<li>packages are installed into the <code>{prefix}/lib/node_modules</code> folder, instead of the
+current working directory.</li>
+<li>bin files are linked to <code>{prefix}/bin</code></li>
+<li>man pages are linked to <code>{prefix}/share/man</code></li>
+</ul>
+<h3 id="globalconfig">globalconfig</h3>
+<ul>
+<li>Default: {prefix}/etc/npmrc</li>
+<li>Type: path</li>
+</ul>
+<p>The config file to read for global config options.</p>
+<h3 id="group">group</h3>
+<ul>
+<li>Default: GID of the current process</li>
+<li>Type: String or Number</li>
+</ul>
+<p>The group to use when running package scripts in global mode as the root
+user.</p>
+<h3 id="heading">heading</h3>
+<ul>
+<li>Default: <code>&quot;npm&quot;</code></li>
+<li>Type: String</li>
+</ul>
+<p>The string that starts all the debugging log output.</p>
+<h3 id="https-proxy">https-proxy</h3>
+<ul>
+<li>Default: the <code>HTTPS_PROXY</code> or <code>https_proxy</code> or <code>HTTP_PROXY</code> or
+<code>http_proxy</code> environment variables.</li>
+<li>Type: url</li>
+</ul>
+<p>A proxy to use for outgoing https requests.</p>
+<h3 id="ignore-scripts">ignore-scripts</h3>
+<ul>
+<li>Default: false</li>
+<li>Type: Boolean</li>
+</ul>
+<p>If true, npm does not run scripts specified in package.json files.</p>
+<h3 id="init-module">init-module</h3>
+<ul>
+<li>Default: ~/.npm-init.js</li>
+<li>Type: path</li>
+</ul>
+<p>A module that will be loaded by the <code>npm init</code> command. See the
+documentation for the
+<a href="https://github.com/isaacs/init-package-json">init-package-json</a> module
+for more information, or <a href="../cli/npm-init.html">npm-init(1)</a>.</p>
+<h3 id="init-author-name">init.author.name</h3>
+<ul>
+<li>Default: &quot;&quot;</li>
+<li>Type: String</li>
+</ul>
+<p>The value <code>npm init</code> should use by default for the package author&#39;s name.</p>
+<h3 id="init-author-email">init.author.email</h3>
+<ul>
+<li>Default: &quot;&quot;</li>
+<li>Type: String</li>
+</ul>
+<p>The value <code>npm init</code> should use by default for the package author&#39;s email.</p>
+<h3 id="init-author-url">init.author.url</h3>
+<ul>
+<li>Default: &quot;&quot;</li>
+<li>Type: String</li>
+</ul>
+<p>The value <code>npm init</code> should use by default for the package author&#39;s homepage.</p>
+<h3 id="init-license">init.license</h3>
+<ul>
+<li>Default: &quot;ISC&quot;</li>
+<li>Type: String</li>
+</ul>
+<p>The value <code>npm init</code> should use by default for the package license.</p>
+<h3 id="json">json</h3>
+<ul>
+<li>Default: false</li>
+<li>Type: Boolean</li>
+</ul>
+<p>Whether or not to output JSON data, rather than the normal output.</p>
+<p>This feature is currently experimental, and the output data structures
+for many commands is either not implemented in JSON yet, or subject to
+change. Only the output from <code>npm ls --json</code> is currently valid.</p>
+<h3 id="key">key</h3>
+<ul>
+<li>Default: <code>null</code></li>
+<li>Type: String</li>
+</ul>
+<p>A client key to pass when accessing the registry.</p>
+<h3 id="link">link</h3>
+<ul>
+<li>Default: false</li>
+<li>Type: Boolean</li>
+</ul>
+<p>If true, then local installs will link if there is a suitable globally
+installed package.</p>
+<p>Note that this means that local installs can cause things to be
+installed into the global space at the same time. The link is only done
+if one of the two conditions are met:</p>
+<ul>
+<li>The package is not already installed globally, or</li>
+<li>the globally installed version is identical to the version that is
+being installed locally.</li>
+</ul>
+<h3 id="local-address">local-address</h3>
+<ul>
+<li>Default: undefined</li>
+<li>Type: IP Address</li>
+</ul>
+<p>The IP address of the local interface to use when making connections
+to the npm registry. Must be IPv4 in versions of Node prior to 0.12.</p>
+<h3 id="loglevel">loglevel</h3>
+<ul>
+<li>Default: &quot;http&quot;</li>
+<li>Type: String</li>
+<li>Values: &quot;silent&quot;, &quot;win&quot;, &quot;error&quot;, &quot;warn&quot;, &quot;http&quot;, &quot;info&quot;, &quot;verbose&quot;, &quot;silly&quot;</li>
+</ul>
+<p>What level of logs to report. On failure, <em>all</em> logs are written to
+<code>npm-debug.log</code> in the current working directory.</p>
+<p>Any logs of a higher level than the setting are shown.
+The default is &quot;http&quot;, which shows http, warn, and error output.</p>
+<h3 id="logstream">logstream</h3>
+<ul>
+<li>Default: process.stderr</li>
+<li>Type: Stream</li>
+</ul>
+<p>This is the stream that is passed to the
+<a href="https://github.com/npm/npmlog">npmlog</a> module at run time.</p>
+<p>It cannot be set from the command line, but if you are using npm
+programmatically, you may wish to send logs to somewhere other than
+stderr.</p>
+<p>If the <code>color</code> config is set to true, then this stream will receive
+colored output if it is a TTY.</p>
+<h3 id="long">long</h3>
+<ul>
+<li>Default: false</li>
+<li>Type: Boolean</li>
+</ul>
+<p>Show extended information in <code>npm ls</code> and <code>npm search</code>.</p>
+<h3 id="message">message</h3>
+<ul>
+<li>Default: &quot;%s&quot;</li>
+<li>Type: String</li>
+</ul>
+<p>Commit message which is used by <code>npm version</code> when creating version commit.</p>
+<p>Any &quot;%s&quot; in the message will be replaced with the version number.</p>
+<h3 id="node-version">node-version</h3>
+<ul>
+<li>Default: process.version</li>
+<li>Type: semver or false</li>
+</ul>
+<p>The node version to use when checking package&#39;s &quot;engines&quot; hash.</p>
+<h3 id="npat">npat</h3>
+<ul>
+<li>Default: false</li>
+<li>Type: Boolean</li>
+</ul>
+<p>Run tests on installation.</p>
+<h3 id="onload-script">onload-script</h3>
+<ul>
+<li>Default: false</li>
+<li>Type: path</li>
+</ul>
+<p>A node module to <code>require()</code> when npm loads. Useful for programmatic
+usage.</p>
+<h3 id="optional">optional</h3>
+<ul>
+<li>Default: true</li>
+<li>Type: Boolean</li>
+</ul>
+<p>Attempt to install packages in the <code>optionalDependencies</code> hash. Note
+that if these packages fail to install, the overall installation
+process is not aborted.</p>
+<h3 id="parseable">parseable</h3>
+<ul>
+<li>Default: false</li>
+<li>Type: Boolean</li>
+</ul>
+<p>Output parseable results from commands that write to
+standard output.</p>
+<h3 id="prefix">prefix</h3>
+<ul>
+<li>Default: see <a href="../files/npm-folders.html">npm-folders(5)</a></li>
+<li>Type: path</li>
+</ul>
+<p>The location to install global items. If set on the command line, then
+it forces non-global commands to run in the specified folder.</p>
+<h3 id="production">production</h3>
+<ul>
+<li>Default: false</li>
+<li>Type: Boolean</li>
+</ul>
+<p>Set to true to run in &quot;production&quot; mode.</p>
+<ol>
+<li>devDependencies are not installed at the topmost level when running
+local <code>npm install</code> without any arguments.</li>
+<li>Set the NODE_ENV=&quot;production&quot; for lifecycle scripts.</li>
+</ol>
+<h3 id="proprietary-attribs">proprietary-attribs</h3>
+<ul>
+<li>Default: true</li>
+<li>Type: Boolean</li>
+</ul>
+<p>Whether or not to include proprietary extended attributes in the
+tarballs created by npm.</p>
+<p>Unless you are expecting to unpack package tarballs with something other
+than npm -- particularly a very outdated tar implementation -- leave
+this as true.</p>
+<h3 id="proxy">proxy</h3>
+<ul>
+<li>Default: <code>HTTP_PROXY</code> or <code>http_proxy</code> environment variable, or null</li>
+<li>Type: url</li>
+</ul>
+<p>A proxy to use for outgoing http requests.</p>
+<h3 id="rebuild-bundle">rebuild-bundle</h3>
+<ul>
+<li>Default: true</li>
+<li>Type: Boolean</li>
+</ul>
+<p>Rebuild bundled dependencies after installation.</p>
+<h3 id="registry">registry</h3>
+<ul>
+<li>Default: <a href="https://registry.npmjs.org/">https://registry.npmjs.org/</a></li>
+<li>Type: url</li>
+</ul>
+<p>The base URL of the npm package registry.</p>
+<h3 id="rollback">rollback</h3>
+<ul>
+<li>Default: true</li>
+<li>Type: Boolean</li>
+</ul>
+<p>Remove failed installs.</p>
+<h3 id="save">save</h3>
+<ul>
+<li>Default: false</li>
+<li>Type: Boolean</li>
+</ul>
+<p>Save installed packages to a package.json file as dependencies.</p>
+<p>When used with the <code>npm rm</code> command, it removes it from the dependencies
+hash.</p>
+<p>Only works if there is already a package.json file present.</p>
+<h3 id="save-bundle">save-bundle</h3>
+<ul>
+<li>Default: false</li>
+<li>Type: Boolean</li>
+</ul>
+<p>If a package would be saved at install time by the use of <code>--save</code>,
+<code>--save-dev</code>, or <code>--save-optional</code>, then also put it in the
+<code>bundleDependencies</code> list.</p>
+<p>When used with the <code>npm rm</code> command, it removes it from the
+bundledDependencies list.</p>
+<h3 id="save-dev">save-dev</h3>
+<ul>
+<li>Default: false</li>
+<li>Type: Boolean</li>
+</ul>
+<p>Save installed packages to a package.json file as devDependencies.</p>
+<p>When used with the <code>npm rm</code> command, it removes it from the
+devDependencies hash.</p>
+<p>Only works if there is already a package.json file present.</p>
+<h3 id="save-exact">save-exact</h3>
+<ul>
+<li>Default: false</li>
+<li>Type: Boolean</li>
+</ul>
+<p>Dependencies saved to package.json using <code>--save</code>, <code>--save-dev</code> or
+<code>--save-optional</code> will be configured with an exact version rather than
+using npm&#39;s default semver range operator.</p>
+<h3 id="save-optional">save-optional</h3>
+<ul>
+<li>Default: false</li>
+<li>Type: Boolean</li>
+</ul>
+<p>Save installed packages to a package.json file as
+optionalDependencies.</p>
+<p>When used with the <code>npm rm</code> command, it removes it from the
+devDependencies hash.</p>
+<p>Only works if there is already a package.json file present.</p>
+<h3 id="save-prefix">save-prefix</h3>
+<ul>
+<li>Default: &#39;^&#39;</li>
+<li>Type: String</li>
+</ul>
+<p>Configure how versions of packages installed to a package.json file via
+<code>--save</code> or <code>--save-dev</code> get prefixed.</p>
+<p>For example if a package has version <code>1.2.3</code>, by default it&#39;s version is
+set to <code>^1.2.3</code> which allows minor upgrades for that package, but after<br><code>npm config set save-prefix=&#39;~&#39;</code> it would be set to <code>~1.2.3</code> which only allows
+patch upgrades.</p>
+<h3 id="searchopts">searchopts</h3>
+<ul>
+<li>Default: &quot;&quot;</li>
+<li>Type: String</li>
+</ul>
+<p>Space-separated options that are always passed to search.</p>
+<h3 id="searchexclude">searchexclude</h3>
+<ul>
+<li>Default: &quot;&quot;</li>
+<li>Type: String</li>
+</ul>
+<p>Space-separated options that limit the results from search.</p>
+<h3 id="searchsort">searchsort</h3>
+<ul>
+<li>Default: &quot;name&quot;</li>
+<li>Type: String</li>
+<li>Values: &quot;name&quot;, &quot;-name&quot;, &quot;date&quot;, &quot;-date&quot;, &quot;description&quot;,
+&quot;-description&quot;, &quot;keywords&quot;, &quot;-keywords&quot;</li>
+</ul>
+<p>Indication of which field to sort search results by. Prefix with a <code>-</code>
+character to indicate reverse sort.</p>
+<h3 id="shell">shell</h3>
+<ul>
+<li>Default: SHELL environment variable, or &quot;bash&quot; on Posix, or &quot;cmd&quot; on
+Windows</li>
+<li>Type: path</li>
+</ul>
+<p>The shell to run for the <code>npm explore</code> command.</p>
+<h3 id="shrinkwrap">shrinkwrap</h3>
+<ul>
+<li>Default: true</li>
+<li>Type: Boolean</li>
+</ul>
+<p>If set to false, then ignore <code>npm-shrinkwrap.json</code> files when
+installing.</p>
+<h3 id="sign-git-tag">sign-git-tag</h3>
+<ul>
+<li>Default: false</li>
+<li>Type: Boolean</li>
+</ul>
+<p>If set to true, then the <code>npm version</code> command will tag the version
+using <code>-s</code> to add a signature.</p>
+<p>Note that git requires you to have set up GPG keys in your git configs
+for this to work properly.</p>
+<h3 id="strict-ssl">strict-ssl</h3>
+<ul>
+<li>Default: true</li>
+<li>Type: Boolean</li>
+</ul>
+<p>Whether or not to do SSL key validation when making requests to the
+registry via https.</p>
+<p>See also the <code>ca</code> config.</p>
+<h3 id="tag">tag</h3>
+<ul>
+<li>Default: latest</li>
+<li>Type: String</li>
+</ul>
+<p>If you ask npm to install a package and don&#39;t tell it a specific version, then
+it will install the specified tag.</p>
+<p>Also the tag that is added to the package@version specified by the <code>npm
+tag</code> command, if no explicit tag is given.</p>
+<h3 id="tmp">tmp</h3>
+<ul>
+<li>Default: TMPDIR environment variable, or &quot;/tmp&quot;</li>
+<li>Type: path</li>
+</ul>
+<p>Where to store temporary files and folders. All temp files are deleted
+on success, but left behind on failure for forensic purposes.</p>
+<h3 id="unicode">unicode</h3>
+<ul>
+<li>Default: true</li>
+<li>Type: Boolean</li>
+</ul>
+<p>When set to true, npm uses unicode characters in the tree output. When
+false, it uses ascii characters to draw trees.</p>
+<h3 id="unsafe-perm">unsafe-perm</h3>
+<ul>
+<li>Default: false if running as root, true otherwise</li>
+<li>Type: Boolean</li>
+</ul>
+<p>Set to true to suppress the UID/GID switching when running package
+scripts. If set explicitly to false, then installing as a non-root user
+will fail.</p>
+<h3 id="usage">usage</h3>
+<ul>
+<li>Default: false</li>
+<li>Type: Boolean</li>
+</ul>
+<p>Set to show short usage output (like the -H output)
+instead of complete help when doing <code><a href="../cli/npm-help.html">npm-help(1)</a></code>.</p>
+<h3 id="user">user</h3>
+<ul>
+<li>Default: &quot;nobody&quot;</li>
+<li>Type: String or Number</li>
+</ul>
+<p>The UID to set to when running package scripts as root.</p>
+<h3 id="username">username</h3>
+<ul>
+<li>Default: null</li>
+<li>Type: String</li>
+</ul>
+<p>The username on the npm registry. Set with <code>npm adduser</code></p>
+<h3 id="userconfig">userconfig</h3>
+<ul>
+<li>Default: ~/.npmrc</li>
+<li>Type: path</li>
+</ul>
+<p>The location of user-level configuration settings.</p>
+<h3 id="umask">umask</h3>
+<ul>
+<li>Default: 022</li>
+<li>Type: Octal numeric string</li>
+</ul>
+<p>The &quot;umask&quot; value to use when setting the file creation mode on files
+and folders.</p>
+<p>Folders and executables are given a mode which is <code>0777</code> masked against
+this value. Other files are given a mode which is <code>0666</code> masked against
+this value. Thus, the defaults are <code>0755</code> and <code>0644</code> respectively.</p>
+<h3 id="user-agent">user-agent</h3>
+<ul>
+<li>Default: node/{process.version} {process.platform} {process.arch}</li>
+<li>Type: String</li>
+</ul>
+<p>Sets a User-Agent to the request header</p>
+<h3 id="version">version</h3>
+<ul>
+<li>Default: false</li>
+<li>Type: boolean</li>
+</ul>
+<p>If true, output the npm version and exit successfully.</p>
+<p>Only relevant when specified explicitly on the command line.</p>
+<h3 id="versions">versions</h3>
+<ul>
+<li>Default: false</li>
+<li>Type: boolean</li>
+</ul>
+<p>If true, output the npm version as well as node&#39;s <code>process.versions</code>
+hash, and exit successfully.</p>
+<p>Only relevant when specified explicitly on the command line.</p>
+<h3 id="viewer">viewer</h3>
+<ul>
+<li>Default: &quot;man&quot; on Posix, &quot;browser&quot; on Windows</li>
+<li>Type: path</li>
+</ul>
+<p>The program to use to view help content.</p>
+<p>Set to <code>&quot;browser&quot;</code> to view html help content in the default web browser.</p>
+<h2 id="see-also">SEE ALSO</h2>
+<ul>
+<li><a href="../cli/npm-config.html">npm-config(1)</a></li>
+<li><a href="../misc/npm-config.html">npm-config(7)</a></li>
+<li><a href="../files/npmrc.html">npmrc(5)</a></li>
+<li><a href="../misc/npm-scripts.html">npm-scripts(7)</a></li>
+<li><a href="../files/npm-folders.html">npm-folders(5)</a></li>
+<li><a href="../cli/npm.html">npm(1)</a></li>
+</ul>
+
+</div>
+
+<table border=0 cellspacing=0 cellpadding=0 id=npmlogo>
+<tr><td style="width:180px;height:10px;background:rgb(237,127,127)" colspan=18>&nbsp;</td></tr>
+<tr><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td colspan=6 style="width:60px;height:10px;background:#fff">&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td></tr>
+<tr><td colspan=2 style="width:20px;height:30px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=4 colspan=2>&nbsp;</td><td style="width:10px;height:20px;background:rgb(237,127,127)" rowspan=2>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=3 colspan=2>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff" rowspan=2>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff">&nbsp;</td></tr>
+<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
+<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
+</table>
+<p id="footer">npm-config &mdash; npm@1.4.10</p>
+
diff --git a/deps/npm/html/doc/misc/npm-developers.html b/deps/npm/html/doc/misc/npm-developers.html
new file mode 100644
index 000000000..6076b8ef1
--- /dev/null
+++ b/deps/npm/html/doc/misc/npm-developers.html
@@ -0,0 +1,185 @@
+<!doctype html>
+<html>
+ <title>npm-developers</title>
+ <meta http-equiv="content-type" value="text/html;utf-8">
+ <link rel="stylesheet" type="text/css" href="../../static/style.css">
+ <link rel="canonical" href="https://www.npmjs.org/doc/misc/npm-developers.html">
+ <script async=true src="../../static/toc.js"></script>
+
+ <body>
+ <div id="wrapper">
+
+<h1><a href="../misc/npm-developers.html">npm-developers</a></h1> <p>Developer Guide</p>
+<h2 id="description">DESCRIPTION</h2>
+<p>So, you&#39;ve decided to use npm to develop (and maybe publish/deploy)
+your project.</p>
+<p>Fantastic!</p>
+<p>There are a few things that you need to do above the simple steps
+that your users will do to install your program.</p>
+<h2 id="about-these-documents">About These Documents</h2>
+<p>These are man pages. If you install npm, you should be able to
+then do <code>man npm-thing</code> to get the documentation on a particular
+topic, or <code>npm help thing</code> to see the same information.</p>
+<h2 id="what-is-a-package-">What is a <code>package</code></h2>
+<p>A package is:</p>
+<ul>
+<li>a) a folder containing a program described by a package.json file</li>
+<li>b) a gzipped tarball containing (a)</li>
+<li>c) a url that resolves to (b)</li>
+<li>d) a <code>&lt;name&gt;@&lt;version&gt;</code> that is published on the registry with (c)</li>
+<li>e) a <code>&lt;name&gt;@&lt;tag&gt;</code> that points to (d)</li>
+<li>f) a <code>&lt;name&gt;</code> that has a &quot;latest&quot; tag satisfying (e)</li>
+<li>g) a <code>git</code> url that, when cloned, results in (a).</li>
+</ul>
+<p>Even if you never publish your package, you can still get a lot of
+benefits of using npm if you just want to write a node program (a), and
+perhaps if you also want to be able to easily install it elsewhere
+after packing it up into a tarball (b).</p>
+<p>Git urls can be of the form:</p>
+<pre><code>git://github.com/user/project.git#commit-ish
+git+ssh://user@hostname:project.git#commit-ish
+git+http://user@hostname/project/blah.git#commit-ish
+git+https://user@hostname/project/blah.git#commit-ish
+</code></pre><p>The <code>commit-ish</code> can be any tag, sha, or branch which can be supplied as
+an argument to <code>git checkout</code>. The default is <code>master</code>.</p>
+<h2 id="the-package-json-file">The package.json File</h2>
+<p>You need to have a <code>package.json</code> file in the root of your project to do
+much of anything with npm. That is basically the whole interface.</p>
+<p>See <code><a href="../files/package.json.html">package.json(5)</a></code> for details about what goes in that file. At the very
+least, you need:</p>
+<ul>
+<li><p>name:
+This should be a string that identifies your project. Please do not
+use the name to specify that it runs on node, or is in JavaScript.
+You can use the &quot;engines&quot; field to explicitly state the versions of
+node (or whatever else) that your program requires, and it&#39;s pretty
+well assumed that it&#39;s javascript.</p>
+<p>It does not necessarily need to match your github repository name.</p>
+<p>So, <code>node-foo</code> and <code>bar-js</code> are bad names. <code>foo</code> or <code>bar</code> are better.</p>
+</li>
+<li><p>version:
+A semver-compatible version.</p>
+</li>
+<li><p>engines:
+Specify the versions of node (or whatever else) that your program
+runs on. The node API changes a lot, and there may be bugs or new
+functionality that you depend on. Be explicit.</p>
+</li>
+<li><p>author:
+Take some credit.</p>
+</li>
+<li><p>scripts:
+If you have a special compilation or installation script, then you
+should put it in the <code>scripts</code> hash. You should definitely have at
+least a basic smoke-test command as the &quot;scripts.test&quot; field.
+See <a href="../misc/npm-scripts.html">npm-scripts(7)</a>.</p>
+</li>
+<li><p>main:
+If you have a single module that serves as the entry point to your
+program (like what the &quot;foo&quot; package gives you at require(&quot;foo&quot;)),
+then you need to specify that in the &quot;main&quot; field.</p>
+</li>
+<li><p>directories:
+This is a hash of folders. The best ones to include are &quot;lib&quot; and
+&quot;doc&quot;, but if you specify a folder full of man pages in &quot;man&quot;, then
+they&#39;ll get installed just like these ones.</p>
+</li>
+</ul>
+<p>You can use <code>npm init</code> in the root of your package in order to get you
+started with a pretty basic package.json file. See <code><a href="../cli/npm-init.html">npm-init(1)</a></code> for
+more info.</p>
+<h2 id="keeping-files-out-of-your-package">Keeping files <em>out</em> of your package</h2>
+<p>Use a <code>.npmignore</code> file to keep stuff out of your package. If there&#39;s
+no <code>.npmignore</code> file, but there <em>is</em> a <code>.gitignore</code> file, then npm will
+ignore the stuff matched by the <code>.gitignore</code> file. If you <em>want</em> to
+include something that is excluded by your <code>.gitignore</code> file, you can
+create an empty <code>.npmignore</code> file to override it.</p>
+<p>By default, the following paths and files are ignored, so there&#39;s no
+need to add them to <code>.npmignore</code> explicitly:</p>
+<ul>
+<li><code>.*.swp</code></li>
+<li><code>._*</code></li>
+<li><code>.DS_Store</code></li>
+<li><code>.git</code></li>
+<li><code>.hg</code></li>
+<li><code>.lock-wscript</code></li>
+<li><code>.svn</code></li>
+<li><code>.wafpickle-*</code></li>
+<li><code>CVS</code></li>
+<li><code>npm-debug.log</code></li>
+</ul>
+<p>Additionally, everything in <code>node_modules</code> is ignored, except for
+bundled dependencies. npm automatically handles this for you, so don&#39;t
+bother adding <code>node_modules</code> to <code>.npmignore</code>.</p>
+<p>The following paths and files are never ignored, so adding them to
+<code>.npmignore</code> is pointless:</p>
+<ul>
+<li><code>package.json</code></li>
+<li><code><a href="../../doc/README.html">README</a>.*</code></li>
+</ul>
+<h2 id="link-packages">Link Packages</h2>
+<p><code>npm link</code> is designed to install a development package and see the
+changes in real time without having to keep re-installing it. (You do
+need to either re-link or <code>npm rebuild -g</code> to update compiled packages,
+of course.)</p>
+<p>More info at <code><a href="../cli/npm-link.html">npm-link(1)</a></code>.</p>
+<h2 id="before-publishing-make-sure-your-package-installs-and-works">Before Publishing: Make Sure Your Package Installs and Works</h2>
+<p><strong>This is important.</strong></p>
+<p>If you can not install it locally, you&#39;ll have
+problems trying to publish it. Or, worse yet, you&#39;ll be able to
+publish it, but you&#39;ll be publishing a broken or pointless package.
+So don&#39;t do that.</p>
+<p>In the root of your package, do this:</p>
+<pre><code>npm install . -g
+</code></pre><p>That&#39;ll show you that it&#39;s working. If you&#39;d rather just create a symlink
+package that points to your working directory, then do this:</p>
+<pre><code>npm link
+</code></pre><p>Use <code>npm ls -g</code> to see if it&#39;s there.</p>
+<p>To test a local install, go into some other folder, and then do:</p>
+<pre><code>cd ../some-other-folder
+npm install ../my-package
+</code></pre><p>to install it locally into the node_modules folder in that other place.</p>
+<p>Then go into the node-repl, and try using require(&quot;my-thing&quot;) to
+bring in your module&#39;s main module.</p>
+<h2 id="create-a-user-account">Create a User Account</h2>
+<p>Create a user with the adduser command. It works like this:</p>
+<pre><code>npm adduser
+</code></pre><p>and then follow the prompts.</p>
+<p>This is documented better in <a href="../cli/npm-adduser.html">npm-adduser(1)</a>.</p>
+<h2 id="publish-your-package">Publish your package</h2>
+<p>This part&#39;s easy. IN the root of your folder, do this:</p>
+<pre><code>npm publish
+</code></pre><p>You can give publish a url to a tarball, or a filename of a tarball,
+or a path to a folder.</p>
+<p>Note that pretty much <strong>everything in that folder will be exposed</strong>
+by default. So, if you have secret stuff in there, use a
+<code>.npmignore</code> file to list out the globs to ignore, or publish
+from a fresh checkout.</p>
+<h2 id="brag-about-it">Brag about it</h2>
+<p>Send emails, write blogs, blab in IRC.</p>
+<p>Tell the world how easy it is to install your program!</p>
+<h2 id="see-also">SEE ALSO</h2>
+<ul>
+<li><a href="../misc/npm-faq.html">npm-faq(7)</a></li>
+<li><a href="../cli/npm.html">npm(1)</a></li>
+<li><a href="../cli/npm-init.html">npm-init(1)</a></li>
+<li><a href="../files/package.json.html">package.json(5)</a></li>
+<li><a href="../misc/npm-scripts.html">npm-scripts(7)</a></li>
+<li><a href="../cli/npm-publish.html">npm-publish(1)</a></li>
+<li><a href="../cli/npm-adduser.html">npm-adduser(1)</a></li>
+<li><a href="../misc/npm-registry.html">npm-registry(7)</a></li>
+</ul>
+
+</div>
+
+<table border=0 cellspacing=0 cellpadding=0 id=npmlogo>
+<tr><td style="width:180px;height:10px;background:rgb(237,127,127)" colspan=18>&nbsp;</td></tr>
+<tr><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td colspan=6 style="width:60px;height:10px;background:#fff">&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td></tr>
+<tr><td colspan=2 style="width:20px;height:30px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=4 colspan=2>&nbsp;</td><td style="width:10px;height:20px;background:rgb(237,127,127)" rowspan=2>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=3 colspan=2>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff" rowspan=2>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff">&nbsp;</td></tr>
+<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
+<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
+</table>
+<p id="footer">npm-developers &mdash; npm@1.4.10</p>
+
diff --git a/deps/npm/html/doc/misc/npm-disputes.html b/deps/npm/html/doc/misc/npm-disputes.html
new file mode 100644
index 000000000..e7db18cab
--- /dev/null
+++ b/deps/npm/html/doc/misc/npm-disputes.html
@@ -0,0 +1,116 @@
+<!doctype html>
+<html>
+ <title>npm-disputes</title>
+ <meta http-equiv="content-type" value="text/html;utf-8">
+ <link rel="stylesheet" type="text/css" href="../../static/style.css">
+ <link rel="canonical" href="https://www.npmjs.org/doc/misc/npm-disputes.html">
+ <script async=true src="../../static/toc.js"></script>
+
+ <body>
+ <div id="wrapper">
+
+<h1><a href="../misc/npm-disputes.html">npm-disputes</a></h1> <p>Handling Module Name Disputes</p>
+<h2 id="synopsis">SYNOPSIS</h2>
+<ol>
+<li>Get the author email with <code>npm owner ls &lt;pkgname&gt;</code></li>
+<li>Email the author, CC <a href="&#x6d;&#97;&#x69;&#x6c;&#116;&#x6f;&#58;&#x73;&#117;&#112;&#112;&#x6f;&#x72;&#x74;&#64;&#x6e;&#112;&#109;&#x6a;&#x73;&#x2e;&#x63;&#x6f;&#x6d;">&#x73;&#117;&#112;&#112;&#x6f;&#x72;&#x74;&#64;&#x6e;&#112;&#109;&#x6a;&#x73;&#x2e;&#x63;&#x6f;&#x6d;</a></li>
+<li>After a few weeks, if there&#39;s no resolution, we&#39;ll sort it out.</li>
+</ol>
+<p>Don&#39;t squat on package names. Publish code or move out of the way.</p>
+<h2 id="description">DESCRIPTION</h2>
+<p>There sometimes arise cases where a user publishes a module, and then
+later, some other user wants to use that name. Here are some common
+ways that happens (each of these is based on actual events.)</p>
+<ol>
+<li>Joe writes a JavaScript module <code>foo</code>, which is not node-specific.
+Joe doesn&#39;t use node at all. Bob wants to use <code>foo</code> in node, so he
+wraps it in an npm module. Some time later, Joe starts using node,
+and wants to take over management of his program.</li>
+<li>Bob writes an npm module <code>foo</code>, and publishes it. Perhaps much
+later, Joe finds a bug in <code>foo</code>, and fixes it. He sends a pull
+request to Bob, but Bob doesn&#39;t have the time to deal with it,
+because he has a new job and a new baby and is focused on his new
+erlang project, and kind of not involved with node any more. Joe
+would like to publish a new <code>foo</code>, but can&#39;t, because the name is
+taken.</li>
+<li>Bob writes a 10-line flow-control library, and calls it <code>foo</code>, and
+publishes it to the npm registry. Being a simple little thing, it
+never really has to be updated. Joe works for Foo Inc, the makers
+of the critically acclaimed and widely-marketed <code>foo</code> JavaScript
+toolkit framework. They publish it to npm as <code>foojs</code>, but people are
+routinely confused when <code>npm install foo</code> is some different thing.</li>
+<li>Bob writes a parser for the widely-known <code>foo</code> file format, because
+he needs it for work. Then, he gets a new job, and never updates the
+prototype. Later on, Joe writes a much more complete <code>foo</code> parser,
+but can&#39;t publish, because Bob&#39;s <code>foo</code> is in the way.</li>
+</ol>
+<p>The validity of Joe&#39;s claim in each situation can be debated. However,
+Joe&#39;s appropriate course of action in each case is the same.</p>
+<ol>
+<li><code>npm owner ls foo</code>. This will tell Joe the email address of the
+owner (Bob).</li>
+<li>Joe emails Bob, explaining the situation <strong>as respectfully as
+possible</strong>, and what he would like to do with the module name. He
+adds the npm support staff <a href="&#109;&#97;&#105;&#108;&#x74;&#x6f;&#58;&#115;&#117;&#x70;&#x70;&#111;&#114;&#116;&#x40;&#x6e;&#112;&#x6d;&#106;&#115;&#46;&#99;&#111;&#109;">&#115;&#117;&#x70;&#x70;&#111;&#114;&#116;&#x40;&#x6e;&#112;&#x6d;&#106;&#115;&#46;&#99;&#111;&#109;</a> to the CC list of
+the email. Mention in the email that Bob can run <code>npm owner add
+joe foo</code> to add Joe as an owner of the <code>foo</code> package.</li>
+<li>After a reasonable amount of time, if Bob has not responded, or if
+Bob and Joe can&#39;t come to any sort of resolution, email support
+<a href="&#109;&#x61;&#x69;&#108;&#116;&#x6f;&#x3a;&#115;&#x75;&#112;&#x70;&#111;&#x72;&#116;&#x40;&#x6e;&#112;&#109;&#106;&#115;&#x2e;&#99;&#x6f;&#x6d;">&#115;&#x75;&#112;&#x70;&#111;&#x72;&#116;&#x40;&#x6e;&#112;&#109;&#106;&#115;&#x2e;&#99;&#x6f;&#x6d;</a> and we&#39;ll sort it out. (&quot;Reasonable&quot; is
+usually at least 4 weeks, but extra time is allowed around common
+holidays.)</li>
+</ol>
+<h2 id="reasoning">REASONING</h2>
+<p>In almost every case so far, the parties involved have been able to reach
+an amicable resolution without any major intervention. Most people
+really do want to be reasonable, and are probably not even aware that
+they&#39;re in your way.</p>
+<p>Module ecosystems are most vibrant and powerful when they are as
+self-directed as possible. If an admin one day deletes something you
+had worked on, then that is going to make most people quite upset,
+regardless of the justification. When humans solve their problems by
+talking to other humans with respect, everyone has the chance to end up
+feeling good about the interaction.</p>
+<h2 id="exceptions">EXCEPTIONS</h2>
+<p>Some things are not allowed, and will be removed without discussion if
+they are brought to the attention of the npm registry admins, including
+but not limited to:</p>
+<ol>
+<li>Malware (that is, a package designed to exploit or harm the machine on
+which it is installed).</li>
+<li>Violations of copyright or licenses (for example, cloning an
+MIT-licensed program, and then removing or changing the copyright and
+license statement).</li>
+<li>Illegal content.</li>
+<li>&quot;Squatting&quot; on a package name that you <em>plan</em> to use, but aren&#39;t
+actually using. Sorry, I don&#39;t care how great the name is, or how
+perfect a fit it is for the thing that someday might happen. If
+someone wants to use it today, and you&#39;re just taking up space with
+an empty tarball, you&#39;re going to be evicted.</li>
+<li>Putting empty packages in the registry. Packages must have SOME
+functionality. It can be silly, but it can&#39;t be <em>nothing</em>. (See
+also: squatting.)</li>
+<li>Doing weird things with the registry, like using it as your own
+personal application database or otherwise putting non-packagey
+things into it.</li>
+</ol>
+<p>If you see bad behavior like this, please report it right away.</p>
+<h2 id="see-also">SEE ALSO</h2>
+<ul>
+<li><a href="../misc/npm-registry.html">npm-registry(7)</a></li>
+<li><a href="../cli/npm-owner.html">npm-owner(1)</a></li>
+</ul>
+
+</div>
+
+<table border=0 cellspacing=0 cellpadding=0 id=npmlogo>
+<tr><td style="width:180px;height:10px;background:rgb(237,127,127)" colspan=18>&nbsp;</td></tr>
+<tr><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td colspan=6 style="width:60px;height:10px;background:#fff">&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td></tr>
+<tr><td colspan=2 style="width:20px;height:30px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=4 colspan=2>&nbsp;</td><td style="width:10px;height:20px;background:rgb(237,127,127)" rowspan=2>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=3 colspan=2>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff" rowspan=2>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff">&nbsp;</td></tr>
+<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
+<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
+</table>
+<p id="footer">npm-disputes &mdash; npm@1.4.10</p>
+
diff --git a/deps/npm/html/doc/misc/npm-faq.html b/deps/npm/html/doc/misc/npm-faq.html
new file mode 100644
index 000000000..02ba3f901
--- /dev/null
+++ b/deps/npm/html/doc/misc/npm-faq.html
@@ -0,0 +1,289 @@
+<!doctype html>
+<html>
+ <title>npm-faq</title>
+ <meta http-equiv="content-type" value="text/html;utf-8">
+ <link rel="stylesheet" type="text/css" href="../../static/style.css">
+ <link rel="canonical" href="https://www.npmjs.org/doc/misc/npm-faq.html">
+ <script async=true src="../../static/toc.js"></script>
+
+ <body>
+ <div id="wrapper">
+
+<h1><a href="../misc/npm-faq.html">npm-faq</a></h1> <p>Frequently Asked Questions</p>
+<h2 id="where-can-i-find-these-docs-in-html-">Where can I find these docs in HTML?</h2>
+<p><a href="https://www.npmjs.org/doc/">https://www.npmjs.org/doc/</a>, or run:</p>
+<pre><code>npm config set viewer browser
+</code></pre><p>to open these documents in your default web browser rather than <code>man</code>.</p>
+<h2 id="it-didn-t-work-">It didn&#39;t work.</h2>
+<p>That&#39;s not really a question.</p>
+<h2 id="why-didn-t-it-work-">Why didn&#39;t it work?</h2>
+<p>I don&#39;t know yet.</p>
+<p>Read the error output, and if you can&#39;t figure out what it means,
+do what it says and post a bug with all the information it asks for.</p>
+<h2 id="where-does-npm-put-stuff-">Where does npm put stuff?</h2>
+<p>See <code><a href="../files/npm-folders.html">npm-folders(5)</a></code></p>
+<p>tl;dr:</p>
+<ul>
+<li>Use the <code>npm root</code> command to see where modules go, and the <code>npm bin</code>
+command to see where executables go</li>
+<li>Global installs are different from local installs. If you install
+something with the <code>-g</code> flag, then its executables go in <code>npm bin -g</code>
+and its modules go in <code>npm root -g</code>.</li>
+</ul>
+<h2 id="how-do-i-install-something-on-my-computer-in-a-central-location-">How do I install something on my computer in a central location?</h2>
+<p>Install it globally by tacking <code>-g</code> or <code>--global</code> to the command. (This
+is especially important for command line utilities that need to add
+their bins to the global system <code>PATH</code>.)</p>
+<h2 id="i-installed-something-globally-but-i-can-t-require-it">I installed something globally, but I can&#39;t <code>require()</code> it</h2>
+<p>Install it locally.</p>
+<p>The global install location is a place for command-line utilities
+to put their bins in the system <code>PATH</code>. It&#39;s not for use with <code>require()</code>.</p>
+<p>If you <code>require()</code> a module in your code, then that means it&#39;s a
+dependency, and a part of your program. You need to install it locally
+in your program.</p>
+<h2 id="why-can-t-npm-just-put-everything-in-one-place-like-other-package-managers-">Why can&#39;t npm just put everything in one place, like other package managers?</h2>
+<p>Not every change is an improvement, but every improvement is a change.
+This would be like asking git to do network IO for every commit. It&#39;s
+not going to happen, because it&#39;s a terrible idea that causes more
+problems than it solves.</p>
+<p>It is much harder to avoid dependency conflicts without nesting
+dependencies. This is fundamental to the way that npm works, and has
+proven to be an extremely successful approach. See <code><a href="../files/npm-folders.html">npm-folders(5)</a></code> for
+more details.</p>
+<p>If you want a package to be installed in one place, and have all your
+programs reference the same copy of it, then use the <code>npm link</code> command.
+That&#39;s what it&#39;s for. Install it globally, then link it into each
+program that uses it.</p>
+<h2 id="whatever-i-really-want-the-old-style-everything-global-style-">Whatever, I really want the old style &#39;everything global&#39; style.</h2>
+<p>Write your own package manager. You could probably even wrap up <code>npm</code>
+in a shell script if you really wanted to.</p>
+<p>npm will not help you do something that is known to be a bad idea.</p>
+<h2 id="should-i-check-my-node_modules-folder-into-git-">Should I check my <code>node_modules</code> folder into git?</h2>
+<p>Mikeal Rogers answered this question very well:</p>
+<p><a href="http://www.futurealoof.com/posts/nodemodules-in-git.html">http://www.futurealoof.com/posts/nodemodules-in-git.html</a></p>
+<p>tl;dr</p>
+<ul>
+<li>Check <code>node_modules</code> into git for things you <strong>deploy</strong>, such as
+websites and apps.</li>
+<li>Do not check <code>node_modules</code> into git for libraries and modules
+intended to be reused.</li>
+<li>Use npm to manage dependencies in your dev environment, but not in
+your deployment scripts.</li>
+</ul>
+<h2 id="is-it-npm-or-npm-or-npm-">Is it &#39;npm&#39; or &#39;NPM&#39; or &#39;Npm&#39;?</h2>
+<p>npm should never be capitalized unless it is being displayed in a
+location that is customarily all-caps (such as the title of man pages.)</p>
+<h2 id="if-npm-is-an-acronym-why-is-it-never-capitalized-">If &#39;npm&#39; is an acronym, why is it never capitalized?</h2>
+<p>Contrary to the belief of many, &quot;npm&quot; is not in fact an abbreviation for
+&quot;Node Package Manager&quot;. It is a recursive bacronymic abbreviation for
+&quot;npm is not an acronym&quot;. (If it was &quot;ninaa&quot;, then it would be an
+acronym, and thus incorrectly named.)</p>
+<p>&quot;NPM&quot;, however, <em>is</em> an acronym (more precisely, a capitonym) for the
+National Association of Pastoral Musicians. You can learn more
+about them at <a href="http://npm.org/">http://npm.org/</a>.</p>
+<p>In software, &quot;NPM&quot; is a Non-Parametric Mapping utility written by
+Chris Rorden. You can analyze pictures of brains with it. Learn more
+about the (capitalized) NPM program at <a href="http://www.cabiatl.com/mricro/npm/">http://www.cabiatl.com/mricro/npm/</a>.</p>
+<p>The first seed that eventually grew into this flower was a bash utility
+named &quot;pm&quot;, which was a shortened descendent of &quot;pkgmakeinst&quot;, a
+bash function that was used to install various different things on different
+platforms, most often using Yahoo&#39;s <code>yinst</code>. If <code>npm</code> was ever an
+acronym for anything, it was <code>node pm</code> or maybe <code>new pm</code>.</p>
+<p>So, in all seriousness, the &quot;npm&quot; project is named after its command-line
+utility, which was organically selected to be easily typed by a right-handed
+programmer using a US QWERTY keyboard layout, ending with the
+right-ring-finger in a postition to type the <code>-</code> key for flags and
+other command-line arguments. That command-line utility is always
+lower-case, though it starts most sentences it is a part of.</p>
+<h2 id="how-do-i-list-installed-packages-">How do I list installed packages?</h2>
+<p><code>npm ls</code></p>
+<h2 id="how-do-i-search-for-packages-">How do I search for packages?</h2>
+<p><code>npm search</code></p>
+<p>Arguments are greps. <code>npm search jsdom</code> shows jsdom packages.</p>
+<h2 id="how-do-i-update-npm-">How do I update npm?</h2>
+<pre><code>npm update npm -g
+</code></pre><p>You can also update all outdated local packages by doing <code>npm update</code> without
+any arguments, or global packages by doing <code>npm update -g</code>.</p>
+<p>Occasionally, the version of npm will progress such that the current
+version cannot be properly installed with the version that you have
+installed already. (Consider, if there is ever a bug in the <code>update</code>
+command.)</p>
+<p>In those cases, you can do this:</p>
+<pre><code>curl https://www.npmjs.org/install.sh | sh
+</code></pre><h2 id="what-is-a-package-">What is a <code>package</code>?</h2>
+<p>A package is:</p>
+<ul>
+<li>a) a folder containing a program described by a package.json file</li>
+<li>b) a gzipped tarball containing (a)</li>
+<li>c) a url that resolves to (b)</li>
+<li>d) a <code>&lt;name&gt;@&lt;version&gt;</code> that is published on the registry with (c)</li>
+<li>e) a <code>&lt;name&gt;@&lt;tag&gt;</code> that points to (d)</li>
+<li>f) a <code>&lt;name&gt;</code> that has a &quot;latest&quot; tag satisfying (e)</li>
+<li>g) a <code>git</code> url that, when cloned, results in (a).</li>
+</ul>
+<p>Even if you never publish your package, you can still get a lot of
+benefits of using npm if you just want to write a node program (a), and
+perhaps if you also want to be able to easily install it elsewhere
+after packing it up into a tarball (b).</p>
+<p>Git urls can be of the form:</p>
+<pre><code>git://github.com/user/project.git#commit-ish
+git+ssh://user@hostname:project.git#commit-ish
+git+http://user@hostname/project/blah.git#commit-ish
+git+https://user@hostname/project/blah.git#commit-ish
+</code></pre><p>The <code>commit-ish</code> can be any tag, sha, or branch which can be supplied as
+an argument to <code>git checkout</code>. The default is <code>master</code>.</p>
+<h2 id="what-is-a-module-">What is a <code>module</code>?</h2>
+<p>A module is anything that can be loaded with <code>require()</code> in a Node.js
+program. The following things are all examples of things that can be
+loaded as modules:</p>
+<ul>
+<li>A folder with a <code>package.json</code> file containing a <code>main</code> field.</li>
+<li>A folder with an <code>index.js</code> file in it.</li>
+<li>A JavaScript file.</li>
+</ul>
+<p>Most npm packages are modules, because they are libraries that you
+load with <code>require</code>. However, there&#39;s no requirement that an npm
+package be a module! Some only contain an executable command-line
+interface, and don&#39;t provide a <code>main</code> field for use in Node programs.</p>
+<p>Almost all npm packages (at least, those that are Node programs)
+<em>contain</em> many modules within them (because every file they load with
+<code>require()</code> is a module).</p>
+<p>In the context of a Node program, the <code>module</code> is also the thing that
+was loaded <em>from</em> a file. For example, in the following program:</p>
+<pre><code>var req = require(&#39;request&#39;)
+</code></pre><p>we might say that &quot;The variable <code>req</code> refers to the <code>request</code> module&quot;.</p>
+<h2 id="so-why-is-it-the-node_modules-folder-but-package-json-file-why-not-node_packages-or-module-json-">So, why is it the &quot;<code>node_modules</code>&quot; folder, but &quot;<code>package.json</code>&quot; file? Why not <code>node_packages</code> or <code>module.json</code>?</h2>
+<p>The <code>package.json</code> file defines the package. (See &quot;What is a
+package?&quot; above.)</p>
+<p>The <code>node_modules</code> folder is the place Node.js looks for modules.
+(See &quot;What is a module?&quot; above.)</p>
+<p>For example, if you create a file at <code>node_modules/foo.js</code> and then
+had a program that did <code>var f = require(&#39;foo.js&#39;)</code> then it would load
+the module. However, <code>foo.js</code> is not a &quot;package&quot; in this case,
+because it does not have a package.json.</p>
+<p>Alternatively, if you create a package which does not have an
+<code>index.js</code> or a <code>&quot;main&quot;</code> field in the <code>package.json</code> file, then it is
+not a module. Even if it&#39;s installed in <code>node_modules</code>, it can&#39;t be
+an argument to <code>require()</code>.</p>
+<h2 id="-node_modules-is-the-name-of-my-deity-s-arch-rival-and-a-forbidden-word-in-my-religion-can-i-configure-npm-to-use-a-different-folder-"><code>&quot;node_modules&quot;</code> is the name of my deity&#39;s arch-rival, and a Forbidden Word in my religion. Can I configure npm to use a different folder?</h2>
+<p>No. This will never happen. This question comes up sometimes,
+because it seems silly from the outside that npm couldn&#39;t just be
+configured to put stuff somewhere else, and then npm could load them
+from there. It&#39;s an arbitrary spelling choice, right? What&#39;s the big
+deal?</p>
+<p>At the time of this writing, the string <code>&#39;node_modules&#39;</code> appears 151
+times in 53 separate files in npm and node core (excluding tests and
+documentation).</p>
+<p>Some of these references are in node&#39;s built-in module loader. Since
+npm is not involved <strong>at all</strong> at run-time, node itself would have to
+be configured to know where you&#39;ve decided to stick stuff. Complexity
+hurdle #1. Since the Node module system is locked, this cannot be
+changed, and is enough to kill this request. But I&#39;ll continue, in
+deference to your deity&#39;s delicate feelings regarding spelling.</p>
+<p>Many of the others are in dependencies that npm uses, which are not
+necessarily tightly coupled to npm (in the sense that they do not read
+npm&#39;s configuration files, etc.) Each of these would have to be
+configured to take the name of the <code>node_modules</code> folder as a
+parameter. Complexity hurdle #2.</p>
+<p>Furthermore, npm has the ability to &quot;bundle&quot; dependencies by adding
+the dep names to the <code>&quot;bundledDependencies&quot;</code> list in package.json,
+which causes the folder to be included in the package tarball. What
+if the author of a module bundles its dependencies, and they use a
+different spelling for <code>node_modules</code>? npm would have to rename the
+folder at publish time, and then be smart enough to unpack it using
+your locally configured name. Complexity hurdle #3.</p>
+<p>Furthermore, what happens when you <em>change</em> this name? Fine, it&#39;s
+easy enough the first time, just rename the <code>node_modules</code> folders to
+<code>./blergyblerp/</code> or whatever name you choose. But what about when you
+change it again? npm doesn&#39;t currently track any state about past
+configuration settings, so this would be rather difficult to do
+properly. It would have to track every previous value for this
+config, and always accept any of them, or else yesterday&#39;s install may
+be broken tomorrow. Complexity hurdle #5.</p>
+<p>Never going to happen. The folder is named <code>node_modules</code>. It is
+written indelibly in the Node Way, handed down from the ancient times
+of Node 0.3.</p>
+<h2 id="how-do-i-install-node-with-npm-">How do I install node with npm?</h2>
+<p>You don&#39;t. Try one of these node version managers:</p>
+<p>Unix:</p>
+<ul>
+<li><a href="http://github.com/isaacs/nave">http://github.com/isaacs/nave</a></li>
+<li><a href="http://github.com/visionmedia/n">http://github.com/visionmedia/n</a></li>
+<li><a href="http://github.com/creationix/nvm">http://github.com/creationix/nvm</a></li>
+</ul>
+<p>Windows:</p>
+<ul>
+<li><a href="http://github.com/marcelklehr/nodist">http://github.com/marcelklehr/nodist</a></li>
+<li><a href="https://github.com/hakobera/nvmw">https://github.com/hakobera/nvmw</a></li>
+<li><a href="https://github.com/nanjingboy/nvmw">https://github.com/nanjingboy/nvmw</a></li>
+</ul>
+<h2 id="how-can-i-use-npm-for-development-">How can I use npm for development?</h2>
+<p>See <code><a href="../misc/npm-developers.html">npm-developers(7)</a></code> and <code><a href="../files/package.json.html">package.json(5)</a></code>.</p>
+<p>You&#39;ll most likely want to <code>npm link</code> your development folder. That&#39;s
+awesomely handy.</p>
+<p>To set up your own private registry, check out <code><a href="../misc/npm-registry.html">npm-registry(7)</a></code>.</p>
+<h2 id="can-i-list-a-url-as-a-dependency-">Can I list a url as a dependency?</h2>
+<p>Yes. It should be a url to a gzipped tarball containing a single folder
+that has a package.json in its root, or a git url.
+(See &quot;what is a package?&quot; above.)</p>
+<h2 id="how-do-i-symlink-to-a-dev-folder-so-i-don-t-have-to-keep-re-installing-">How do I symlink to a dev folder so I don&#39;t have to keep re-installing?</h2>
+<p>See <code><a href="../cli/npm-link.html">npm-link(1)</a></code></p>
+<h2 id="the-package-registry-website-what-is-that-exactly-">The package registry website. What is that exactly?</h2>
+<p>See <code><a href="../misc/npm-registry.html">npm-registry(7)</a></code>.</p>
+<h2 id="i-forgot-my-password-and-can-t-publish-how-do-i-reset-it-">I forgot my password, and can&#39;t publish. How do I reset it?</h2>
+<p>Go to <a href="https://npmjs.org/forgot">https://npmjs.org/forgot</a>.</p>
+<h2 id="i-get-econnrefused-a-lot-what-s-up-">I get ECONNREFUSED a lot. What&#39;s up?</h2>
+<p>Either the registry is down, or node&#39;s DNS isn&#39;t able to reach out.</p>
+<p>To check if the registry is down, open up
+<a href="https://registry.npmjs.org/">https://registry.npmjs.org/</a> in a web browser. This will also tell
+you if you are just unable to access the internet for some reason.</p>
+<p>If the registry IS down, let us know by emailing <a href="&#x6d;&#x61;&#x69;&#108;&#116;&#x6f;&#58;&#x73;&#x75;&#x70;&#x70;&#111;&#x72;&#116;&#x40;&#110;&#112;&#x6d;&#x6a;&#115;&#x2e;&#x63;&#x6f;&#109;">&#x73;&#x75;&#x70;&#x70;&#111;&#x72;&#116;&#x40;&#110;&#112;&#x6d;&#x6a;&#115;&#x2e;&#x63;&#x6f;&#109;</a>
+or posting an issue at <a href="https://github.com/npm/npm/issues">https://github.com/npm/npm/issues</a>. If it&#39;s
+down for the world (and not just on your local network) then we&#39;re
+probably already being pinged about it.</p>
+<p>You can also often get a faster response by visiting the #npm channel
+on Freenode IRC.</p>
+<h2 id="why-no-namespaces-">Why no namespaces?</h2>
+<p>Please see this discussion: <a href="https://github.com/npm/npm/issues/798">https://github.com/npm/npm/issues/798</a></p>
+<p>tl;dr - It doesn&#39;t actually make things better, and can make them worse.</p>
+<p>If you want to namespace your own packages, you may: simply use the
+<code>-</code> character to separate the names. npm is a mostly anarchic system.
+There is not sufficient need to impose namespace rules on everyone.</p>
+<h2 id="who-does-npm-">Who does npm?</h2>
+<p>npm was originally written by Isaac Z. Schlueter, and many others have
+contributed to it, some of them quite substantially.</p>
+<p>The npm open source project, The npm Registry, and <a href="https://www.npmjs.org">the community
+website</a> are maintained and operated by the
+good folks at <a href="https://www.npmjs.com">npm, Inc.</a></p>
+<h2 id="i-have-a-question-or-request-not-addressed-here-where-should-i-put-it-">I have a question or request not addressed here. Where should I put it?</h2>
+<p>Post an issue on the github project:</p>
+<ul>
+<li><a href="https://github.com/npm/npm/issues">https://github.com/npm/npm/issues</a></li>
+</ul>
+<h2 id="why-does-npm-hate-me-">Why does npm hate me?</h2>
+<p>npm is not capable of hatred. It loves everyone, especially you.</p>
+<h2 id="see-also">SEE ALSO</h2>
+<ul>
+<li><a href="../cli/npm.html">npm(1)</a></li>
+<li><a href="../misc/npm-developers.html">npm-developers(7)</a></li>
+<li><a href="../files/package.json.html">package.json(5)</a></li>
+<li><a href="../cli/npm-config.html">npm-config(1)</a></li>
+<li><a href="../misc/npm-config.html">npm-config(7)</a></li>
+<li><a href="../files/npmrc.html">npmrc(5)</a></li>
+<li><a href="../misc/npm-config.html">npm-config(7)</a></li>
+<li><a href="../files/npm-folders.html">npm-folders(5)</a></li>
+</ul>
+
+</div>
+
+<table border=0 cellspacing=0 cellpadding=0 id=npmlogo>
+<tr><td style="width:180px;height:10px;background:rgb(237,127,127)" colspan=18>&nbsp;</td></tr>
+<tr><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td colspan=6 style="width:60px;height:10px;background:#fff">&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td></tr>
+<tr><td colspan=2 style="width:20px;height:30px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=4 colspan=2>&nbsp;</td><td style="width:10px;height:20px;background:rgb(237,127,127)" rowspan=2>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=3 colspan=2>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff" rowspan=2>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff">&nbsp;</td></tr>
+<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
+<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
+</table>
+<p id="footer">npm-faq &mdash; npm@1.4.10</p>
+
diff --git a/deps/npm/html/doc/misc/npm-index.html b/deps/npm/html/doc/misc/npm-index.html
new file mode 100644
index 000000000..47dcc35c7
--- /dev/null
+++ b/deps/npm/html/doc/misc/npm-index.html
@@ -0,0 +1,230 @@
+<!doctype html>
+<html>
+ <title>npm-index</title>
+ <meta http-equiv="content-type" value="text/html;utf-8">
+ <link rel="stylesheet" type="text/css" href="../../static/style.css">
+ <link rel="canonical" href="https://www.npmjs.org/doc/misc/npm-index.html">
+ <script async=true src="../../static/toc.js"></script>
+
+ <body>
+ <div id="wrapper">
+
+<h1><a href="../misc/npm-index.html">npm-index</a></h1> <p>Index of all npm documentation</p>
+<h2 id="readme-1-"><a href="../../doc/README.html">README</a></h2>
+<p>node package manager</p>
+<h1 id="command-line-documentation">Command Line Documentation</h1>
+<h2 id="npm-1-"><a href="../cli/npm.html">npm(1)</a></h2>
+<p>node package manager</p>
+<h2 id="npm-adduser-1-"><a href="../cli/npm-adduser.html">npm-adduser(1)</a></h2>
+<p>Add a registry user account</p>
+<h2 id="npm-bin-1-"><a href="../cli/npm-bin.html">npm-bin(1)</a></h2>
+<p>Display npm bin folder</p>
+<h2 id="npm-bugs-1-"><a href="../cli/npm-bugs.html">npm-bugs(1)</a></h2>
+<p>Bugs for a package in a web browser maybe</p>
+<h2 id="npm-build-1-"><a href="../cli/npm-build.html">npm-build(1)</a></h2>
+<p>Build a package</p>
+<h2 id="npm-bundle-1-"><a href="../cli/npm-bundle.html">npm-bundle(1)</a></h2>
+<p>REMOVED</p>
+<h2 id="npm-cache-1-"><a href="../cli/npm-cache.html">npm-cache(1)</a></h2>
+<p>Manipulates packages cache</p>
+<h2 id="npm-completion-1-"><a href="../cli/npm-completion.html">npm-completion(1)</a></h2>
+<p>Tab Completion for npm</p>
+<h2 id="npm-config-1-"><a href="../cli/npm-config.html">npm-config(1)</a></h2>
+<p>Manage the npm configuration files</p>
+<h2 id="npm-dedupe-1-"><a href="../cli/npm-dedupe.html">npm-dedupe(1)</a></h2>
+<p>Reduce duplication</p>
+<h2 id="npm-deprecate-1-"><a href="../cli/npm-deprecate.html">npm-deprecate(1)</a></h2>
+<p>Deprecate a version of a package</p>
+<h2 id="npm-docs-1-"><a href="../cli/npm-docs.html">npm-docs(1)</a></h2>
+<p>Docs for a package in a web browser maybe</p>
+<h2 id="npm-edit-1-"><a href="../cli/npm-edit.html">npm-edit(1)</a></h2>
+<p>Edit an installed package</p>
+<h2 id="npm-explore-1-"><a href="../cli/npm-explore.html">npm-explore(1)</a></h2>
+<p>Browse an installed package</p>
+<h2 id="npm-help-search-1-"><a href="../cli/npm-help-search.html">npm-help-search(1)</a></h2>
+<p>Search npm help documentation</p>
+<h2 id="npm-help-1-"><a href="../cli/npm-help.html">npm-help(1)</a></h2>
+<p>Get help on npm</p>
+<h2 id="npm-init-1-"><a href="../cli/npm-init.html">npm-init(1)</a></h2>
+<p>Interactively create a package.json file</p>
+<h2 id="npm-install-1-"><a href="../cli/npm-install.html">npm-install(1)</a></h2>
+<p>Install a package</p>
+<h2 id="npm-link-1-"><a href="../cli/npm-link.html">npm-link(1)</a></h2>
+<p>Symlink a package folder</p>
+<h2 id="npm-ls-1-"><a href="../cli/npm-ls.html">npm-ls(1)</a></h2>
+<p>List installed packages</p>
+<h2 id="npm-outdated-1-"><a href="../cli/npm-outdated.html">npm-outdated(1)</a></h2>
+<p>Check for outdated packages</p>
+<h2 id="npm-owner-1-"><a href="../cli/npm-owner.html">npm-owner(1)</a></h2>
+<p>Manage package owners</p>
+<h2 id="npm-pack-1-"><a href="../cli/npm-pack.html">npm-pack(1)</a></h2>
+<p>Create a tarball from a package</p>
+<h2 id="npm-prefix-1-"><a href="../cli/npm-prefix.html">npm-prefix(1)</a></h2>
+<p>Display prefix</p>
+<h2 id="npm-prune-1-"><a href="../cli/npm-prune.html">npm-prune(1)</a></h2>
+<p>Remove extraneous packages</p>
+<h2 id="npm-publish-1-"><a href="../cli/npm-publish.html">npm-publish(1)</a></h2>
+<p>Publish a package</p>
+<h2 id="npm-rebuild-1-"><a href="../cli/npm-rebuild.html">npm-rebuild(1)</a></h2>
+<p>Rebuild a package</p>
+<h2 id="npm-repo-1-"><a href="../cli/npm-repo.html">npm-repo(1)</a></h2>
+<p>Open package repository page in the browser</p>
+<h2 id="npm-restart-1-"><a href="../cli/npm-restart.html">npm-restart(1)</a></h2>
+<p>Start a package</p>
+<h2 id="npm-rm-1-"><a href="../cli/npm-rm.html">npm-rm(1)</a></h2>
+<p>Remove a package</p>
+<h2 id="npm-root-1-"><a href="../cli/npm-root.html">npm-root(1)</a></h2>
+<p>Display npm root</p>
+<h2 id="npm-run-script-1-"><a href="../cli/npm-run-script.html">npm-run-script(1)</a></h2>
+<p>Run arbitrary package scripts</p>
+<h2 id="npm-search-1-"><a href="../cli/npm-search.html">npm-search(1)</a></h2>
+<p>Search for packages</p>
+<h2 id="npm-shrinkwrap-1-"><a href="../cli/npm-shrinkwrap.html">npm-shrinkwrap(1)</a></h2>
+<p>Lock down dependency versions</p>
+<h2 id="npm-star-1-"><a href="../cli/npm-star.html">npm-star(1)</a></h2>
+<p>Mark your favorite packages</p>
+<h2 id="npm-stars-1-"><a href="../cli/npm-stars.html">npm-stars(1)</a></h2>
+<p>View packages marked as favorites</p>
+<h2 id="npm-start-1-"><a href="../cli/npm-start.html">npm-start(1)</a></h2>
+<p>Start a package</p>
+<h2 id="npm-stop-1-"><a href="../cli/npm-stop.html">npm-stop(1)</a></h2>
+<p>Stop a package</p>
+<h2 id="npm-submodule-1-"><a href="../cli/npm-submodule.html">npm-submodule(1)</a></h2>
+<p>Add a package as a git submodule</p>
+<h2 id="npm-tag-1-"><a href="../cli/npm-tag.html">npm-tag(1)</a></h2>
+<p>Tag a published version</p>
+<h2 id="npm-test-1-"><a href="../cli/npm-test.html">npm-test(1)</a></h2>
+<p>Test a package</p>
+<h2 id="npm-uninstall-1-"><a href="../cli/npm-uninstall.html">npm-uninstall(1)</a></h2>
+<p>Remove a package</p>
+<h2 id="npm-unpublish-1-"><a href="../cli/npm-unpublish.html">npm-unpublish(1)</a></h2>
+<p>Remove a package from the registry</p>
+<h2 id="npm-update-1-"><a href="../cli/npm-update.html">npm-update(1)</a></h2>
+<p>Update a package</p>
+<h2 id="npm-version-1-"><a href="../cli/npm-version.html">npm-version(1)</a></h2>
+<p>Bump a package version</p>
+<h2 id="npm-view-1-"><a href="../cli/npm-view.html">npm-view(1)</a></h2>
+<p>View registry info</p>
+<h2 id="npm-whoami-1-"><a href="../cli/npm-whoami.html">npm-whoami(1)</a></h2>
+<p>Display npm username</p>
+<h1 id="api-documentation">API Documentation</h1>
+<h2 id="npm-3-"><a href="../api/npm.html">npm(3)</a></h2>
+<p>node package manager</p>
+<h2 id="npm-bin-3-"><a href="../api/npm-bin.html">npm-bin(3)</a></h2>
+<p>Display npm bin folder</p>
+<h2 id="npm-bugs-3-"><a href="../api/npm-bugs.html">npm-bugs(3)</a></h2>
+<p>Bugs for a package in a web browser maybe</p>
+<h2 id="npm-commands-3-"><a href="../api/npm-commands.html">npm-commands(3)</a></h2>
+<p>npm commands</p>
+<h2 id="npm-config-3-"><a href="../api/npm-config.html">npm-config(3)</a></h2>
+<p>Manage the npm configuration files</p>
+<h2 id="npm-deprecate-3-"><a href="../api/npm-deprecate.html">npm-deprecate(3)</a></h2>
+<p>Deprecate a version of a package</p>
+<h2 id="npm-docs-3-"><a href="../api/npm-docs.html">npm-docs(3)</a></h2>
+<p>Docs for a package in a web browser maybe</p>
+<h2 id="npm-edit-3-"><a href="../api/npm-edit.html">npm-edit(3)</a></h2>
+<p>Edit an installed package</p>
+<h2 id="npm-explore-3-"><a href="../api/npm-explore.html">npm-explore(3)</a></h2>
+<p>Browse an installed package</p>
+<h2 id="npm-help-search-3-"><a href="../api/npm-help-search.html">npm-help-search(3)</a></h2>
+<p>Search the help pages</p>
+<h2 id="npm-init-3-"><a href="../api/npm-init.html">npm-init(3)</a></h2>
+<p>Interactively create a package.json file</p>
+<h2 id="npm-install-3-"><a href="../api/npm-install.html">npm-install(3)</a></h2>
+<p>install a package programmatically</p>
+<h2 id="npm-link-3-"><a href="../api/npm-link.html">npm-link(3)</a></h2>
+<p>Symlink a package folder</p>
+<h2 id="npm-load-3-"><a href="../api/npm-load.html">npm-load(3)</a></h2>
+<p>Load config settings</p>
+<h2 id="npm-ls-3-"><a href="../api/npm-ls.html">npm-ls(3)</a></h2>
+<p>List installed packages</p>
+<h2 id="npm-outdated-3-"><a href="../api/npm-outdated.html">npm-outdated(3)</a></h2>
+<p>Check for outdated packages</p>
+<h2 id="npm-owner-3-"><a href="../api/npm-owner.html">npm-owner(3)</a></h2>
+<p>Manage package owners</p>
+<h2 id="npm-pack-3-"><a href="../api/npm-pack.html">npm-pack(3)</a></h2>
+<p>Create a tarball from a package</p>
+<h2 id="npm-prefix-3-"><a href="../api/npm-prefix.html">npm-prefix(3)</a></h2>
+<p>Display prefix</p>
+<h2 id="npm-prune-3-"><a href="../api/npm-prune.html">npm-prune(3)</a></h2>
+<p>Remove extraneous packages</p>
+<h2 id="npm-publish-3-"><a href="../api/npm-publish.html">npm-publish(3)</a></h2>
+<p>Publish a package</p>
+<h2 id="npm-rebuild-3-"><a href="../api/npm-rebuild.html">npm-rebuild(3)</a></h2>
+<p>Rebuild a package</p>
+<h2 id="npm-repo-3-"><a href="../api/npm-repo.html">npm-repo(3)</a></h2>
+<p>Open package repository page in the browser</p>
+<h2 id="npm-restart-3-"><a href="../api/npm-restart.html">npm-restart(3)</a></h2>
+<p>Start a package</p>
+<h2 id="npm-root-3-"><a href="../api/npm-root.html">npm-root(3)</a></h2>
+<p>Display npm root</p>
+<h2 id="npm-run-script-3-"><a href="../api/npm-run-script.html">npm-run-script(3)</a></h2>
+<p>Run arbitrary package scripts</p>
+<h2 id="npm-search-3-"><a href="../api/npm-search.html">npm-search(3)</a></h2>
+<p>Search for packages</p>
+<h2 id="npm-shrinkwrap-3-"><a href="../api/npm-shrinkwrap.html">npm-shrinkwrap(3)</a></h2>
+<p>programmatically generate package shrinkwrap file</p>
+<h2 id="npm-start-3-"><a href="../api/npm-start.html">npm-start(3)</a></h2>
+<p>Start a package</p>
+<h2 id="npm-stop-3-"><a href="../api/npm-stop.html">npm-stop(3)</a></h2>
+<p>Stop a package</p>
+<h2 id="npm-submodule-3-"><a href="../api/npm-submodule.html">npm-submodule(3)</a></h2>
+<p>Add a package as a git submodule</p>
+<h2 id="npm-tag-3-"><a href="../api/npm-tag.html">npm-tag(3)</a></h2>
+<p>Tag a published version</p>
+<h2 id="npm-test-3-"><a href="../api/npm-test.html">npm-test(3)</a></h2>
+<p>Test a package</p>
+<h2 id="npm-uninstall-3-"><a href="../api/npm-uninstall.html">npm-uninstall(3)</a></h2>
+<p>uninstall a package programmatically</p>
+<h2 id="npm-unpublish-3-"><a href="../api/npm-unpublish.html">npm-unpublish(3)</a></h2>
+<p>Remove a package from the registry</p>
+<h2 id="npm-update-3-"><a href="../api/npm-update.html">npm-update(3)</a></h2>
+<p>Update a package</p>
+<h2 id="npm-version-3-"><a href="../api/npm-version.html">npm-version(3)</a></h2>
+<p>Bump a package version</p>
+<h2 id="npm-view-3-"><a href="../api/npm-view.html">npm-view(3)</a></h2>
+<p>View registry info</p>
+<h2 id="npm-whoami-3-"><a href="../api/npm-whoami.html">npm-whoami(3)</a></h2>
+<p>Display npm username</p>
+<h1 id="files">Files</h1>
+<h2 id="npm-folders-5-"><a href="../files/npm-folders.html">npm-folders(5)</a></h2>
+<p>Folder Structures Used by npm</p>
+<h2 id="npmrc-5-"><a href="../files/npmrc.html">npmrc(5)</a></h2>
+<p>The npm config files</p>
+<h2 id="package-json-5-"><a href="../files/package.json.html">package.json(5)</a></h2>
+<p>Specifics of npm&#39;s package.json handling</p>
+<h1 id="misc">Misc</h1>
+<h2 id="npm-coding-style-7-"><a href="../misc/npm-coding-style.html">npm-coding-style(7)</a></h2>
+<p>npm&#39;s &quot;funny&quot; coding style</p>
+<h2 id="npm-config-7-"><a href="../misc/npm-config.html">npm-config(7)</a></h2>
+<p>More than you probably want to know about npm configuration</p>
+<h2 id="npm-developers-7-"><a href="../misc/npm-developers.html">npm-developers(7)</a></h2>
+<p>Developer Guide</p>
+<h2 id="npm-disputes-7-"><a href="../misc/npm-disputes.html">npm-disputes(7)</a></h2>
+<p>Handling Module Name Disputes</p>
+<h2 id="npm-faq-7-"><a href="../misc/npm-faq.html">npm-faq(7)</a></h2>
+<p>Frequently Asked Questions</p>
+<h2 id="npm-index-7-"><a href="../misc/npm-index.html">npm-index(7)</a></h2>
+<p>Index of all npm documentation</p>
+<h2 id="npm-registry-7-"><a href="../misc/npm-registry.html">npm-registry(7)</a></h2>
+<p>The JavaScript Package Registry</p>
+<h2 id="npm-scripts-7-"><a href="../misc/npm-scripts.html">npm-scripts(7)</a></h2>
+<p>How npm handles the &quot;scripts&quot; field</p>
+<h2 id="removing-npm-7-"><a href="../misc/removing-npm.html">removing-npm(7)</a></h2>
+<p>Cleaning the Slate</p>
+<h2 id="semver-7-"><a href="../misc/semver.html">semver(7)</a></h2>
+<p>The semantic versioner for npm</p>
+
+</div>
+
+<table border=0 cellspacing=0 cellpadding=0 id=npmlogo>
+<tr><td style="width:180px;height:10px;background:rgb(237,127,127)" colspan=18>&nbsp;</td></tr>
+<tr><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td colspan=6 style="width:60px;height:10px;background:#fff">&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td></tr>
+<tr><td colspan=2 style="width:20px;height:30px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=4 colspan=2>&nbsp;</td><td style="width:10px;height:20px;background:rgb(237,127,127)" rowspan=2>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=3 colspan=2>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff" rowspan=2>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff">&nbsp;</td></tr>
+<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
+<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
+</table>
+<p id="footer">npm-index &mdash; npm@1.4.10</p>
+
diff --git a/deps/npm/html/doc/misc/npm-registry.html b/deps/npm/html/doc/misc/npm-registry.html
new file mode 100644
index 000000000..50f0b5967
--- /dev/null
+++ b/deps/npm/html/doc/misc/npm-registry.html
@@ -0,0 +1,75 @@
+<!doctype html>
+<html>
+ <title>npm-registry</title>
+ <meta http-equiv="content-type" value="text/html;utf-8">
+ <link rel="stylesheet" type="text/css" href="../../static/style.css">
+ <link rel="canonical" href="https://www.npmjs.org/doc/misc/npm-registry.html">
+ <script async=true src="../../static/toc.js"></script>
+
+ <body>
+ <div id="wrapper">
+
+<h1><a href="../misc/npm-registry.html">npm-registry</a></h1> <p>The JavaScript Package Registry</p>
+<h2 id="description">DESCRIPTION</h2>
+<p>To resolve packages by name and version, npm talks to a registry website
+that implements the CommonJS Package Registry specification for reading
+package info.</p>
+<p>Additionally, npm&#39;s package registry implementation supports several
+write APIs as well, to allow for publishing packages and managing user
+account information.</p>
+<p>The official public npm registry is at <a href="http://registry.npmjs.org/">http://registry.npmjs.org/</a>. It
+is powered by a CouchDB database at
+<a href="http://isaacs.iriscouch.com/registry">http://isaacs.iriscouch.com/registry</a>. The code for the couchapp is
+available at <a href="http://github.com/npm/npmjs.org">http://github.com/npm/npmjs.org</a>. npm user accounts
+are CouchDB users, stored in the <a href="http://isaacs.iriscouch.com/_users">http://isaacs.iriscouch.com/_users</a>
+database.</p>
+<p>The registry URL is supplied by the <code>registry</code> config parameter. See
+<code><a href="../cli/npm-config.html">npm-config(1)</a></code>, <code><a href="../files/npmrc.html">npmrc(5)</a></code>, and <code><a href="../misc/npm-config.html">npm-config(7)</a></code> for more on managing
+npm&#39;s configuration.</p>
+<h2 id="can-i-run-my-own-private-registry-">Can I run my own private registry?</h2>
+<p>Yes!</p>
+<p>The easiest way is to replicate the couch database, and use the same (or
+similar) design doc to implement the APIs.</p>
+<p>If you set up continuous replication from the official CouchDB, and then
+set your internal CouchDB as the registry config, then you&#39;ll be able
+to read any published packages, in addition to your private ones, and by
+default will only publish internally. If you then want to publish a
+package for the whole world to see, you can simply override the
+<code>--registry</code> config for that command.</p>
+<h2 id="i-don-t-want-my-package-published-in-the-official-registry-it-s-private-">I don&#39;t want my package published in the official registry. It&#39;s private.</h2>
+<p>Set <code>&quot;private&quot;: true</code> in your package.json to prevent it from being
+published at all, or
+<code>&quot;publishConfig&quot;:{&quot;registry&quot;:&quot;http://my-internal-registry.local&quot;}</code>
+to force it to be published only to your internal registry.</p>
+<p>See <code><a href="../files/package.json.html">package.json(5)</a></code> for more info on what goes in the package.json file.</p>
+<h2 id="will-you-replicate-from-my-registry-into-the-public-one-">Will you replicate from my registry into the public one?</h2>
+<p>No. If you want things to be public, then publish them into the public
+registry using npm. What little security there is would be for nought
+otherwise.</p>
+<h2 id="do-i-have-to-use-couchdb-to-build-a-registry-that-npm-can-talk-to-">Do I have to use couchdb to build a registry that npm can talk to?</h2>
+<p>No, but it&#39;s way easier. Basically, yes, you do, or you have to
+effectively implement the entire CouchDB API anyway.</p>
+<h2 id="is-there-a-website-or-something-to-see-package-docs-and-such-">Is there a website or something to see package docs and such?</h2>
+<p>Yes, head over to <a href="https://npmjs.org/">https://npmjs.org/</a></p>
+<h2 id="see-also">SEE ALSO</h2>
+<ul>
+<li><a href="../cli/npm-config.html">npm-config(1)</a></li>
+<li><a href="../misc/npm-config.html">npm-config(7)</a></li>
+<li><a href="../files/npmrc.html">npmrc(5)</a></li>
+<li><a href="../misc/npm-developers.html">npm-developers(7)</a></li>
+<li><a href="../misc/npm-disputes.html">npm-disputes(7)</a></li>
+</ul>
+
+</div>
+
+<table border=0 cellspacing=0 cellpadding=0 id=npmlogo>
+<tr><td style="width:180px;height:10px;background:rgb(237,127,127)" colspan=18>&nbsp;</td></tr>
+<tr><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td colspan=6 style="width:60px;height:10px;background:#fff">&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td></tr>
+<tr><td colspan=2 style="width:20px;height:30px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=4 colspan=2>&nbsp;</td><td style="width:10px;height:20px;background:rgb(237,127,127)" rowspan=2>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=3 colspan=2>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff" rowspan=2>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff">&nbsp;</td></tr>
+<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
+<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
+</table>
+<p id="footer">npm-registry &mdash; npm@1.4.10</p>
+
diff --git a/deps/npm/html/doc/misc/npm-scripts.html b/deps/npm/html/doc/misc/npm-scripts.html
new file mode 100644
index 000000000..2fcb00949
--- /dev/null
+++ b/deps/npm/html/doc/misc/npm-scripts.html
@@ -0,0 +1,222 @@
+<!doctype html>
+<html>
+ <title>npm-scripts</title>
+ <meta http-equiv="content-type" value="text/html;utf-8">
+ <link rel="stylesheet" type="text/css" href="../../static/style.css">
+ <link rel="canonical" href="https://www.npmjs.org/doc/misc/npm-scripts.html">
+ <script async=true src="../../static/toc.js"></script>
+
+ <body>
+ <div id="wrapper">
+
+<h1><a href="../misc/npm-scripts.html">npm-scripts</a></h1> <p>How npm handles the &quot;scripts&quot; field</p>
+<h2 id="description">DESCRIPTION</h2>
+<p>npm supports the &quot;scripts&quot; member of the package.json script, for the
+following scripts:</p>
+<ul>
+<li>prepublish:
+Run BEFORE the package is published. (Also run on local <code>npm
+install</code> without any arguments.)</li>
+<li>publish, postpublish:
+Run AFTER the package is published.</li>
+<li>preinstall:
+Run BEFORE the package is installed</li>
+<li>install, postinstall:
+Run AFTER the package is installed.</li>
+<li>preuninstall, uninstall:
+Run BEFORE the package is uninstalled.</li>
+<li>postuninstall:
+Run AFTER the package is uninstalled.</li>
+<li>preupdate:
+Run BEFORE the package is updated with the update command.</li>
+<li>update, postupdate:
+Run AFTER the package is updated with the update command.</li>
+<li>pretest, test, posttest:
+Run by the <code>npm test</code> command.</li>
+<li>prestop, stop, poststop:
+Run by the <code>npm stop</code> command.</li>
+<li>prestart, start, poststart:
+Run by the <code>npm start</code> command.</li>
+<li>prerestart, restart, postrestart:
+Run by the <code>npm restart</code> command. Note: <code>npm restart</code> will run the
+stop and start scripts if no <code>restart</code> script is provided.</li>
+</ul>
+<p>Additionally, arbitrary scripts can be run by doing
+<code>npm run-script &lt;stage&gt; &lt;pkg&gt;</code>.</p>
+<h2 id="note-install-scripts-are-an-antipattern">NOTE: INSTALL SCRIPTS ARE AN ANTIPATTERN</h2>
+<p><strong>tl;dr</strong> Don&#39;t use <code>install</code>. Use a <code>.gyp</code> file for compilation, and
+<code>prepublish</code> for anything else.</p>
+<p>You should almost never have to explicitly set a <code>preinstall</code> or
+<code>install</code> script. If you are doing this, please consider if there is
+another option.</p>
+<p>The only valid use of <code>install</code> or <code>preinstall</code> scripts is for
+compilation which must be done on the target architecture. In early
+versions of node, this was often done using the <code>node-waf</code> scripts, or
+a standalone <code>Makefile</code>, and early versions of npm required that it be
+explicitly set in package.json. This was not portable, and harder to
+do properly.</p>
+<p>In the current version of node, the standard way to do this is using a
+<code>.gyp</code> file. If you have a file with a <code>.gyp</code> extension in the root
+of your package, then npm will run the appropriate <code>node-gyp</code> commands
+automatically at install time. This is the only officially supported
+method for compiling binary addons, and does not require that you add
+anything to your package.json file.</p>
+<p>If you have to do other things before your package is used, in a way
+that is not dependent on the operating system or architecture of the
+target system, then use a <code>prepublish</code> script instead. This includes
+tasks such as:</p>
+<ul>
+<li>Compile CoffeeScript source code into JavaScript.</li>
+<li>Create minified versions of JavaScript source code.</li>
+<li>Fetching remote resources that your package will use.</li>
+</ul>
+<p>The advantage of doing these things at <code>prepublish</code> time instead of
+<code>preinstall</code> or <code>install</code> time is that they can be done once, in a
+single place, and thus greatly reduce complexity and variability.
+Additionally, this means that:</p>
+<ul>
+<li>You can depend on <code>coffee-script</code> as a <code>devDependency</code>, and thus
+your users don&#39;t need to have it installed.</li>
+<li>You don&#39;t need to include the minifiers in your package, reducing
+the size for your users.</li>
+<li>You don&#39;t need to rely on your users having <code>curl</code> or <code>wget</code> or
+other system tools on the target machines.</li>
+</ul>
+<h2 id="default-values">DEFAULT VALUES</h2>
+<p>npm will default some script values based on package contents.</p>
+<ul>
+<li><p><code>&quot;start&quot;: &quot;node server.js&quot;</code>:</p>
+<p>If there is a <code>server.js</code> file in the root of your package, then npm
+will default the <code>start</code> command to <code>node server.js</code>.</p>
+</li>
+<li><p><code>&quot;preinstall&quot;: &quot;node-waf clean || true; node-waf configure build&quot;</code>:</p>
+<p>If there is a <code>wscript</code> file in the root of your package, npm will
+default the <code>preinstall</code> command to compile using node-waf.</p>
+</li>
+</ul>
+<h2 id="user">USER</h2>
+<p>If npm was invoked with root privileges, then it will change the uid
+to the user account or uid specified by the <code>user</code> config, which
+defaults to <code>nobody</code>. Set the <code>unsafe-perm</code> flag to run scripts with
+root privileges.</p>
+<h2 id="environment">ENVIRONMENT</h2>
+<p>Package scripts run in an environment where many pieces of information
+are made available regarding the setup of npm and the current state of
+the process.</p>
+<h3 id="path">path</h3>
+<p>If you depend on modules that define executable scripts, like test
+suites, then those executables will be added to the <code>PATH</code> for
+executing the scripts. So, if your package.json has this:</p>
+<pre><code>{ &quot;name&quot; : &quot;foo&quot;
+, &quot;dependencies&quot; : { &quot;bar&quot; : &quot;0.1.x&quot; }
+, &quot;scripts&quot;: { &quot;start&quot; : &quot;bar ./test&quot; } }
+</code></pre><p>then you could run <code>npm start</code> to execute the <code>bar</code> script, which is
+exported into the <code>node_modules/.bin</code> directory on <code>npm install</code>.</p>
+<h3 id="package-json-vars">package.json vars</h3>
+<p>The package.json fields are tacked onto the <code>npm_package_</code> prefix. So,
+for instance, if you had <code>{&quot;name&quot;:&quot;foo&quot;, &quot;version&quot;:&quot;1.2.5&quot;}</code> in your
+package.json file, then your package scripts would have the
+<code>npm_package_name</code> environment variable set to &quot;foo&quot;, and the
+<code>npm_package_version</code> set to &quot;1.2.5&quot;</p>
+<h3 id="configuration">configuration</h3>
+<p>Configuration parameters are put in the environment with the
+<code>npm_config_</code> prefix. For instance, you can view the effective <code>root</code>
+config by checking the <code>npm_config_root</code> environment variable.</p>
+<h3 id="special-package-json-config-hash">Special: package.json &quot;config&quot; hash</h3>
+<p>The package.json &quot;config&quot; keys are overwritten in the environment if
+there is a config param of <code>&lt;name&gt;[@&lt;version&gt;]:&lt;key&gt;</code>. For example,
+if the package.json has this:</p>
+<pre><code>{ &quot;name&quot; : &quot;foo&quot;
+, &quot;config&quot; : { &quot;port&quot; : &quot;8080&quot; }
+, &quot;scripts&quot; : { &quot;start&quot; : &quot;node server.js&quot; } }
+</code></pre><p>and the server.js is this:</p>
+<pre><code>http.createServer(...).listen(process.env.npm_package_config_port)
+</code></pre><p>then the user could change the behavior by doing:</p>
+<pre><code>npm config set foo:port 80
+</code></pre><h3 id="current-lifecycle-event">current lifecycle event</h3>
+<p>Lastly, the <code>npm_lifecycle_event</code> environment variable is set to
+whichever stage of the cycle is being executed. So, you could have a
+single script used for different parts of the process which switches
+based on what&#39;s currently happening.</p>
+<p>Objects are flattened following this format, so if you had
+<code>{&quot;scripts&quot;:{&quot;install&quot;:&quot;foo.js&quot;}}</code> in your package.json, then you&#39;d
+see this in the script:</p>
+<pre><code>process.env.npm_package_scripts_install === &quot;foo.js&quot;
+</code></pre><h2 id="examples">EXAMPLES</h2>
+<p>For example, if your package.json contains this:</p>
+<pre><code>{ &quot;scripts&quot; :
+ { &quot;install&quot; : &quot;scripts/install.js&quot;
+ , &quot;postinstall&quot; : &quot;scripts/install.js&quot;
+ , &quot;uninstall&quot; : &quot;scripts/uninstall.js&quot;
+ }
+}
+</code></pre><p>then the <code>scripts/install.js</code> will be called for the install,
+post-install, stages of the lifecycle, and the <code>scripts/uninstall.js</code>
+would be called when the package is uninstalled. Since
+<code>scripts/install.js</code> is running for three different phases, it would
+be wise in this case to look at the <code>npm_lifecycle_event</code> environment
+variable.</p>
+<p>If you want to run a make command, you can do so. This works just
+fine:</p>
+<pre><code>{ &quot;scripts&quot; :
+ { &quot;preinstall&quot; : &quot;./configure&quot;
+ , &quot;install&quot; : &quot;make &amp;&amp; make install&quot;
+ , &quot;test&quot; : &quot;make test&quot;
+ }
+}
+</code></pre><h2 id="exiting">EXITING</h2>
+<p>Scripts are run by passing the line as a script argument to <code>sh</code>.</p>
+<p>If the script exits with a code other than 0, then this will abort the
+process.</p>
+<p>Note that these script files don&#39;t have to be nodejs or even
+javascript programs. They just have to be some kind of executable
+file.</p>
+<h2 id="hook-scripts">HOOK SCRIPTS</h2>
+<p>If you want to run a specific script at a specific lifecycle event for
+ALL packages, then you can use a hook script.</p>
+<p>Place an executable file at <code>node_modules/.hooks/{eventname}</code>, and
+it&#39;ll get run for all packages when they are going through that point
+in the package lifecycle for any packages installed in that root.</p>
+<p>Hook scripts are run exactly the same way as package.json scripts.
+That is, they are in a separate child process, with the env described
+above.</p>
+<h2 id="best-practices">BEST PRACTICES</h2>
+<ul>
+<li>Don&#39;t exit with a non-zero error code unless you <em>really</em> mean it.
+Except for uninstall scripts, this will cause the npm action to
+fail, and potentially be rolled back. If the failure is minor or
+only will prevent some optional features, then it&#39;s better to just
+print a warning and exit successfully.</li>
+<li>Try not to use scripts to do what npm can do for you. Read through
+<code><a href="../files/package.json.html">package.json(5)</a></code> to see all the things that you can specify and enable
+by simply describing your package appropriately. In general, this
+will lead to a more robust and consistent state.</li>
+<li>Inspect the env to determine where to put things. For instance, if
+the <code>npm_config_binroot</code> environ is set to <code>/home/user/bin</code>, then
+don&#39;t try to install executables into <code>/usr/local/bin</code>. The user
+probably set it up that way for a reason.</li>
+<li>Don&#39;t prefix your script commands with &quot;sudo&quot;. If root permissions
+are required for some reason, then it&#39;ll fail with that error, and
+the user will sudo the npm command in question.</li>
+</ul>
+<h2 id="see-also">SEE ALSO</h2>
+<ul>
+<li><a href="../cli/npm-run-script.html">npm-run-script(1)</a></li>
+<li><a href="../files/package.json.html">package.json(5)</a></li>
+<li><a href="../misc/npm-developers.html">npm-developers(7)</a></li>
+<li><a href="../cli/npm-install.html">npm-install(1)</a></li>
+</ul>
+
+</div>
+
+<table border=0 cellspacing=0 cellpadding=0 id=npmlogo>
+<tr><td style="width:180px;height:10px;background:rgb(237,127,127)" colspan=18>&nbsp;</td></tr>
+<tr><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td colspan=6 style="width:60px;height:10px;background:#fff">&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td></tr>
+<tr><td colspan=2 style="width:20px;height:30px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=4 colspan=2>&nbsp;</td><td style="width:10px;height:20px;background:rgb(237,127,127)" rowspan=2>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=3 colspan=2>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff" rowspan=2>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff">&nbsp;</td></tr>
+<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
+<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
+</table>
+<p id="footer">npm-scripts &mdash; npm@1.4.10</p>
+
diff --git a/deps/npm/html/doc/misc/removing-npm.html b/deps/npm/html/doc/misc/removing-npm.html
new file mode 100644
index 000000000..7b77eecf3
--- /dev/null
+++ b/deps/npm/html/doc/misc/removing-npm.html
@@ -0,0 +1,61 @@
+<!doctype html>
+<html>
+ <title>removing-npm</title>
+ <meta http-equiv="content-type" value="text/html;utf-8">
+ <link rel="stylesheet" type="text/css" href="../../static/style.css">
+ <link rel="canonical" href="https://www.npmjs.org/doc/misc/removing-npm.html">
+ <script async=true src="../../static/toc.js"></script>
+
+ <body>
+ <div id="wrapper">
+
+<h1><a href="../cli/npm-removal.html">npm-removal</a></h1> <p>Cleaning the Slate</p>
+<h2 id="synopsis">SYNOPSIS</h2>
+<p>So sad to see you go.</p>
+<pre><code>sudo npm uninstall npm -g
+</code></pre><p>Or, if that fails, get the npm source code, and do:</p>
+<pre><code>sudo make uninstall
+</code></pre><h2 id="more-severe-uninstalling">More Severe Uninstalling</h2>
+<p>Usually, the above instructions are sufficient. That will remove
+npm, but leave behind anything you&#39;ve installed.</p>
+<p>If that doesn&#39;t work, or if you require more drastic measures,
+continue reading.</p>
+<p>Note that this is only necessary for globally-installed packages. Local
+installs are completely contained within a project&#39;s <code>node_modules</code>
+folder. Delete that folder, and everything is gone (unless a package&#39;s
+install script is particularly ill-behaved).</p>
+<p>This assumes that you installed node and npm in the default place. If
+you configured node with a different <code>--prefix</code>, or installed npm with a
+different prefix setting, then adjust the paths accordingly, replacing
+<code>/usr/local</code> with your install prefix.</p>
+<p>To remove everything npm-related manually:</p>
+<pre><code>rm -rf /usr/local/{lib/node{,/.npm,_modules},bin,share/man}/npm*
+</code></pre><p>If you installed things <em>with</em> npm, then your best bet is to uninstall
+them with npm first, and then install them again once you have a
+proper install. This can help find any symlinks that are lying
+around:</p>
+<pre><code>ls -laF /usr/local/{lib/node{,/.npm},bin,share/man} | grep npm
+</code></pre><p>Prior to version 0.3, npm used shim files for executables and node
+modules. To track those down, you can do the following:</p>
+<pre><code>find /usr/local/{lib/node,bin} -exec grep -l npm \{\} \; ;
+</code></pre><p>(This is also in the <a href="../../doc/README.html">README</a> file.)</p>
+<h2 id="see-also">SEE ALSO</h2>
+<ul>
+<li><a href="../../doc/README.html">README</a></li>
+<li><a href="../cli/npm-rm.html">npm-rm(1)</a></li>
+<li><a href="../cli/npm-prune.html">npm-prune(1)</a></li>
+</ul>
+
+</div>
+
+<table border=0 cellspacing=0 cellpadding=0 id=npmlogo>
+<tr><td style="width:180px;height:10px;background:rgb(237,127,127)" colspan=18>&nbsp;</td></tr>
+<tr><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td colspan=6 style="width:60px;height:10px;background:#fff">&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td></tr>
+<tr><td colspan=2 style="width:20px;height:30px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=4 colspan=2>&nbsp;</td><td style="width:10px;height:20px;background:rgb(237,127,127)" rowspan=2>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=3 colspan=2>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff" rowspan=2>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff">&nbsp;</td></tr>
+<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
+<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
+</table>
+<p id="footer">removing-npm &mdash; npm@1.4.10</p>
+
diff --git a/deps/npm/html/doc/misc/semver.html b/deps/npm/html/doc/misc/semver.html
new file mode 100644
index 000000000..4e28efd60
--- /dev/null
+++ b/deps/npm/html/doc/misc/semver.html
@@ -0,0 +1,151 @@
+<!doctype html>
+<html>
+ <title>semver</title>
+ <meta http-equiv="content-type" value="text/html;utf-8">
+ <link rel="stylesheet" type="text/css" href="../../static/style.css">
+ <link rel="canonical" href="https://www.npmjs.org/doc/misc/semver.html">
+ <script async=true src="../../static/toc.js"></script>
+
+ <body>
+ <div id="wrapper">
+
+<h1><a href="../misc/semver.html">semver</a></h1> <p>The semantic versioner for npm</p>
+<h2 id="usage">Usage</h2>
+<pre><code>$ npm install semver
+
+semver.valid(&#39;1.2.3&#39;) // &#39;1.2.3&#39;
+semver.valid(&#39;a.b.c&#39;) // null
+semver.clean(&#39; =v1.2.3 &#39;) // &#39;1.2.3&#39;
+semver.satisfies(&#39;1.2.3&#39;, &#39;1.x || &gt;=2.5.0 || 5.0.0 - 7.2.3&#39;) // true
+semver.gt(&#39;1.2.3&#39;, &#39;9.8.7&#39;) // false
+semver.lt(&#39;1.2.3&#39;, &#39;9.8.7&#39;) // true
+</code></pre><p>As a command-line utility:</p>
+<pre><code>$ semver -h
+
+Usage: semver &lt;version&gt; [&lt;version&gt; [...]] [-r &lt;range&gt; | -i &lt;inc&gt; | -d &lt;dec&gt;]
+Test if version(s) satisfy the supplied range(s), and sort them.
+
+Multiple versions or ranges may be supplied, unless increment
+or decrement options are specified. In that case, only a single
+version may be used, and it is incremented by the specified level
+
+Program exits successfully if any valid version satisfies
+all supplied ranges, and prints all satisfying versions.
+
+If no versions are valid, or ranges are not satisfied,
+then exits failure.
+
+Versions are printed in ascending order, so supplying
+multiple versions to the utility will just sort them.
+</code></pre><h2 id="versions">Versions</h2>
+<p>A &quot;version&quot; is described by the v2.0.0 specification found at
+<a href="http://semver.org/">http://semver.org/</a>.</p>
+<p>A leading <code>&quot;=&quot;</code> or <code>&quot;v&quot;</code> character is stripped off and ignored.</p>
+<h2 id="ranges">Ranges</h2>
+<p>The following range styles are supported:</p>
+<ul>
+<li><code>1.2.3</code> A specific version. When nothing else will do. Note that
+build metadata is still ignored, so <code>1.2.3+build2012</code> will satisfy
+this range.</li>
+<li><code>&gt;1.2.3</code> Greater than a specific version.</li>
+<li><code>&lt;1.2.3</code> Less than a specific version. If there is no prerelease
+tag on the version range, then no prerelease version will be allowed
+either, even though these are technically &quot;less than&quot;.</li>
+<li><code>&gt;=1.2.3</code> Greater than or equal to. Note that prerelease versions
+are NOT equal to their &quot;normal&quot; equivalents, so <code>1.2.3-beta</code> will
+not satisfy this range, but <code>2.3.0-beta</code> will.</li>
+<li><code>&lt;=1.2.3</code> Less than or equal to. In this case, prerelease versions
+ARE allowed, so <code>1.2.3-beta</code> would satisfy.</li>
+<li><code>1.2.3 - 2.3.4</code> := <code>&gt;=1.2.3 &lt;=2.3.4</code></li>
+<li><code>~1.2.3</code> := <code>&gt;=1.2.3-0 &lt;1.3.0-0</code> &quot;Reasonably close to 1.2.3&quot;. When
+using tilde operators, prerelease versions are supported as well,
+but a prerelease of the next significant digit will NOT be
+satisfactory, so <code>1.3.0-beta</code> will not satisfy <code>~1.2.3</code>.</li>
+<li><code>^1.2.3</code> := <code>&gt;=1.2.3-0 &lt;2.0.0-0</code> &quot;Compatible with 1.2.3&quot;. When
+using caret operators, anything from the specified version (including
+prerelease) will be supported up to, but not including, the next
+major version (or its prereleases). <code>1.5.1</code> will satisfy <code>^1.2.3</code>,
+while <code>1.2.2</code> and <code>2.0.0-beta</code> will not.</li>
+<li><code>^0.1.3</code> := <code>&gt;=0.1.3-0 &lt;0.2.0-0</code> &quot;Compatible with 0.1.3&quot;. 0.x.x versions are
+special: the first non-zero component indicates potentially breaking changes,
+meaning the caret operator matches any version with the same first non-zero
+component starting at the specified version.</li>
+<li><code>^0.0.2</code> := <code>=0.0.2</code> &quot;Only the version 0.0.2 is considered compatible&quot;</li>
+<li><code>~1.2</code> := <code>&gt;=1.2.0-0 &lt;1.3.0-0</code> &quot;Any version starting with 1.2&quot;</li>
+<li><code>^1.2</code> := <code>&gt;=1.2.0-0 &lt;2.0.0-0</code> &quot;Any version compatible with 1.2&quot;</li>
+<li><code>1.2.x</code> := <code>&gt;=1.2.0-0 &lt;1.3.0-0</code> &quot;Any version starting with 1.2&quot;</li>
+<li><code>~1</code> := <code>&gt;=1.0.0-0 &lt;2.0.0-0</code> &quot;Any version starting with 1&quot;</li>
+<li><code>^1</code> := <code>&gt;=1.0.0-0 &lt;2.0.0-0</code> &quot;Any version compatible with 1&quot;</li>
+<li><code>1.x</code> := <code>&gt;=1.0.0-0 &lt;2.0.0-0</code> &quot;Any version starting with 1&quot;</li>
+</ul>
+<p>Ranges can be joined with either a space (which implies &quot;and&quot;) or a
+<code>||</code> (which implies &quot;or&quot;).</p>
+<h2 id="functions">Functions</h2>
+<p>All methods and classes take a final <code>loose</code> boolean argument that, if
+true, will be more forgiving about not-quite-valid semver strings.
+The resulting output will always be 100% strict, of course.</p>
+<p>Strict-mode Comparators and Ranges will be strict about the SemVer
+strings that they parse.</p>
+<ul>
+<li>valid(v): Return the parsed version, or null if it&#39;s not valid.</li>
+<li>inc(v, release): Return the version incremented by the release type
+(major, minor, patch, or prerelease), or null if it&#39;s not valid.</li>
+</ul>
+<h3 id="comparison">Comparison</h3>
+<ul>
+<li>gt(v1, v2): <code>v1 &gt; v2</code></li>
+<li>gte(v1, v2): <code>v1 &gt;= v2</code></li>
+<li>lt(v1, v2): <code>v1 &lt; v2</code></li>
+<li>lte(v1, v2): <code>v1 &lt;= v2</code></li>
+<li>eq(v1, v2): <code>v1 == v2</code> This is true if they&#39;re logically equivalent,
+even if they&#39;re not the exact same string. You already know how to
+compare strings.</li>
+<li>neq(v1, v2): <code>v1 != v2</code> The opposite of eq.</li>
+<li>cmp(v1, comparator, v2): Pass in a comparison string, and it&#39;ll call
+the corresponding function above. <code>&quot;===&quot;</code> and <code>&quot;!==&quot;</code> do simple
+string comparison, but are included for completeness. Throws if an
+invalid comparison string is provided.</li>
+<li>compare(v1, v2): Return 0 if v1 == v2, or 1 if v1 is greater, or -1 if
+v2 is greater. Sorts in ascending order if passed to Array.sort().</li>
+<li>rcompare(v1, v2): The reverse of compare. Sorts an array of versions
+in descending order when passed to Array.sort().</li>
+</ul>
+<h3 id="ranges">Ranges</h3>
+<ul>
+<li>validRange(range): Return the valid range or null if it&#39;s not valid</li>
+<li>satisfies(version, range): Return true if the version satisfies the
+range.</li>
+<li>maxSatisfying(versions, range): Return the highest version in the list
+that satisfies the range, or null if none of them do.</li>
+<li>gtr(version, range): Return true if version is greater than all the
+versions possible in the range.</li>
+<li>ltr(version, range): Return true if version is less than all the
+versions possible in the range.</li>
+<li>outside(version, range, hilo): Return true if the version is outside
+the bounds of the range in either the high or low direction. The
+<code>hilo</code> argument must be either the string <code>&#39;&gt;&#39;</code> or <code>&#39;&lt;&#39;</code>. (This is
+the function called by <code>gtr</code> and <code>ltr</code>.)</li>
+</ul>
+<p>Note that, since ranges may be non-contiguous, a version might not be
+greater than a range, less than a range, <em>or</em> satisfy a range! For
+example, the range <code>1.2 &lt;1.2.9 || &gt;2.0.0</code> would have a hole from <code>1.2.9</code>
+until <code>2.0.0</code>, so the version <code>1.2.10</code> would not be greater than the
+range (because 2.0.1 satisfies, which is higher), nor less than the
+range (since 1.2.8 satisfies, which is lower), and it also does not
+satisfy the range.</p>
+<p>If you want to know if a version satisfies or does not satisfy a
+range, use the <code>satisfies(version, range)</code> function.</p>
+
+</div>
+
+<table border=0 cellspacing=0 cellpadding=0 id=npmlogo>
+<tr><td style="width:180px;height:10px;background:rgb(237,127,127)" colspan=18>&nbsp;</td></tr>
+<tr><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td colspan=6 style="width:60px;height:10px;background:#fff">&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td></tr>
+<tr><td colspan=2 style="width:20px;height:30px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=4 colspan=2>&nbsp;</td><td style="width:10px;height:20px;background:rgb(237,127,127)" rowspan=2>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=3 colspan=2>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff" rowspan=2>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff">&nbsp;</td></tr>
+<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
+<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
+</table>
+<p id="footer">semver &mdash; npm@1.4.10</p>
+
diff --git a/deps/npm/html/doc/npm.html b/deps/npm/html/doc/npm.html
deleted file mode 100644
index 44e6aa6aa..000000000
--- a/deps/npm/html/doc/npm.html
+++ /dev/null
@@ -1,170 +0,0 @@
-<!doctype html>
-<html>
- <title>npm</title>
- <meta http-equiv="content-type" value="text/html;utf-8">
- <link rel="stylesheet" type="text/css" href="../static/style.css">
-
- <body>
- <div id="wrapper">
-<h1><a href="../doc/npm.html">npm</a></h1> <p>node package manager</p>
-
-<h2 id="SYNOPSIS">SYNOPSIS</h2>
-
-<pre><code>npm &lt;command&gt; [args]</code></pre>
-
-<h2 id="VERSION">VERSION</h2>
-
-<p>1.2.30</p>
-
-<h2 id="DESCRIPTION">DESCRIPTION</h2>
-
-<p>npm is the package manager for the Node JavaScript platform. It puts
-modules in place so that node can find them, and manages dependency
-conflicts intelligently.</p>
-
-<p>It is extremely configurable to support a wide variety of use cases.
-Most commonly, it is used to publish, discover, install, and develop node
-programs.</p>
-
-<p>Run <code>npm help</code> to get a list of available commands.</p>
-
-<h2 id="INTRODUCTION">INTRODUCTION</h2>
-
-<p>You probably got npm because you want to install stuff.</p>
-
-<p>Use <code>npm install blerg</code> to install the latest version of &quot;blerg&quot;. Check out
-<code><a href="../doc/install.html">install(1)</a></code> for more info. It can do a lot of stuff.</p>
-
-<p>Use the <code>npm search</code> command to show everything that&#39;s available.
-Use <code>npm ls</code> to show everything you&#39;ve installed.</p>
-
-<h2 id="DIRECTORIES">DIRECTORIES</h2>
-
-<p>See <code><a href="../doc/folders.html">folders(1)</a></code> to learn about where npm puts stuff.</p>
-
-<p>In particular, npm has two modes of operation:</p>
-
-<ul><li>global mode:<br />npm installs packages into the install prefix at
-<code>prefix/lib/node_modules</code> and bins are installed in <code>prefix/bin</code>.</li><li>local mode:<br />npm installs packages into the current project directory, which
-defaults to the current working directory. Packages are installed to
-<code>./node_modules</code>, and bins are installed to <code>./node_modules/.bin</code>.</li></ul>
-
-<p>Local mode is the default. Use <code>--global</code> or <code>-g</code> on any command to
-operate in global mode instead.</p>
-
-<h2 id="DEVELOPER-USAGE">DEVELOPER USAGE</h2>
-
-<p>If you&#39;re using npm to develop and publish your code, check out the
-following help topics:</p>
-
-<ul><li>json:
-Make a package.json file. See <code><a href="../doc/json.html">json(1)</a></code>.</li><li>link:
-For linking your current working code into Node&#39;s path, so that you
-don&#39;t have to reinstall every time you make a change. Use
-<code>npm link</code> to do this.</li><li>install:
-It&#39;s a good idea to install things if you don&#39;t need the symbolic link.
-Especially, installing other peoples code from the registry is done via
-<code>npm install</code></li><li>adduser:
-Create an account or log in. Credentials are stored in the
-user config file.</li><li>publish:
-Use the <code>npm publish</code> command to upload your code to the registry.</li></ul>
-
-<h2 id="CONFIGURATION">CONFIGURATION</h2>
-
-<p>npm is extremely configurable. It reads its configuration options from
-5 places.</p>
-
-<ul><li>Command line switches:<br />Set a config with <code>--key val</code>. All keys take a value, even if they
-are booleans (the config parser doesn&#39;t know what the options are at
-the time of parsing.) If no value is provided, then the option is set
-to boolean <code>true</code>.</li><li>Environment Variables:<br />Set any config by prefixing the name in an environment variable with
-<code>npm_config_</code>. For example, <code>export npm_config_key=val</code>.</li><li>User Configs:<br />The file at $HOME/.npmrc is an ini-formatted list of configs. If
-present, it is parsed. If the <code>userconfig</code> option is set in the cli
-or env, then that will be used instead.</li><li>Global Configs:<br />The file found at ../etc/npmrc (from the node executable, by default
-this resolves to /usr/local/etc/npmrc) will be parsed if it is found.
-If the <code>globalconfig</code> option is set in the cli, env, or user config,
-then that file is parsed instead.</li><li>Defaults:<br />npm&#39;s default configuration options are defined in
-lib/utils/config-defs.js. These must not be changed.</li></ul>
-
-<p>See <code><a href="../doc/config.html">config(1)</a></code> for much much more information.</p>
-
-<h2 id="CONTRIBUTIONS">CONTRIBUTIONS</h2>
-
-<p>Patches welcome!</p>
-
-<ul><li>code:
-Read through <code><a href="../doc/coding-style.html">coding-style(1)</a></code> if you plan to submit code.
-You don&#39;t have to agree with it, but you do have to follow it.</li><li>docs:
-If you find an error in the documentation, edit the appropriate markdown
-file in the &quot;doc&quot; folder. (Don&#39;t worry about generating the man page.)</li></ul>
-
-<p>Contributors are listed in npm&#39;s <code>package.json</code> file. You can view them
-easily by doing <code>npm view npm contributors</code>.</p>
-
-<p>If you would like to contribute, but don&#39;t know what to work on, check
-the issues list or ask on the mailing list.</p>
-
-<ul><li><a href="http://github.com/isaacs/npm/issues">http://github.com/isaacs/npm/issues</a></li><li><a href="mailto:npm-@googlegroups.com">npm-@googlegroups.com</a></li></ul>
-
-<h2 id="BUGS">BUGS</h2>
-
-<p>When you find issues, please report them:</p>
-
-<ul><li>web:
-<a href="http://github.com/isaacs/npm/issues">http://github.com/isaacs/npm/issues</a></li><li>email:
-<a href="mailto:npm-@googlegroups.com">npm-@googlegroups.com</a></li></ul>
-
-<p>Be sure to include <em>all</em> of the output from the npm command that didn&#39;t work
-as expected. The <code>npm-debug.log</code> file is also helpful to provide.</p>
-
-<p>You can also look for isaacs in #node.js on irc://irc.freenode.net. He
-will no doubt tell you to put the output in a gist or email.</p>
-
-<h2 id="HISTORY">HISTORY</h2>
-
-<p>See <a href="../doc/changelog.html">changelog(1)</a></p>
-
-<h2 id="AUTHOR">AUTHOR</h2>
-
-<p><a href="http://blog.izs.me/">Isaac Z. Schlueter</a> ::
-<a href="https://github.com/isaacs/">isaacs</a> ::
-<a href="http://twitter.com/izs">@izs</a> ::
-<a href="mailto:i@izs.me">i@izs.me</a></p>
-
-<h2 id="SEE-ALSO">SEE ALSO</h2>
-
-<ul><li><a href="../doc/help.html">help(1)</a></li><li><a href="../doc/faq.html">faq(1)</a></li><li><a href="../doc/README.html">README</a></li><li><a href="../doc/json.html">json(1)</a></li><li><a href="../doc/install.html">install(1)</a></li><li><a href="../doc/config.html">config(1)</a></li><li><a href="../doc/index.html">index(1)</a></li><li><a href="../api/npm.html">npm(3)</a></li></ul>
-</div>
-<p id="footer">npm &mdash; npm@1.2.30</p>
-<script>
-;(function () {
-var wrapper = document.getElementById("wrapper")
-var els = Array.prototype.slice.call(wrapper.getElementsByTagName("*"), 0)
- .filter(function (el) {
- return el.parentNode === wrapper
- && el.tagName.match(/H[1-6]/)
- && el.id
- })
-var l = 2
- , toc = document.createElement("ul")
-toc.innerHTML = els.map(function (el) {
- var i = el.tagName.charAt(1)
- , out = ""
- while (i > l) {
- out += "<ul>"
- l ++
- }
- while (i < l) {
- out += "</ul>"
- l --
- }
- out += "<li><a href='#" + el.id + "'>" +
- ( el.innerText || el.text || el.innerHTML)
- + "</a>"
- return out
-}).join("\n")
-toc.id = "toc"
-document.body.appendChild(toc)
-})()
-</script>
-</body></html>
diff --git a/deps/npm/html/doc/outdated.html b/deps/npm/html/doc/outdated.html
deleted file mode 100644
index 2c096562c..000000000
--- a/deps/npm/html/doc/outdated.html
+++ /dev/null
@@ -1,56 +0,0 @@
-<!doctype html>
-<html>
- <title>outdated</title>
- <meta http-equiv="content-type" value="text/html;utf-8">
- <link rel="stylesheet" type="text/css" href="../static/style.css">
-
- <body>
- <div id="wrapper">
-<h1><a href="../doc/outdated.html">outdated</a></h1> <p>Check for outdated packages</p>
-
-<h2 id="SYNOPSIS">SYNOPSIS</h2>
-
-<pre><code>npm outdated [&lt;name&gt; [&lt;name&gt; ...]]</code></pre>
-
-<h2 id="DESCRIPTION">DESCRIPTION</h2>
-
-<p>This command will check the registry to see if any (or, specific) installed
-packages are currently outdated.</p>
-
-<h2 id="SEE-ALSO">SEE ALSO</h2>
-
-<ul><li><a href="../doc/update.html">update(1)</a></li><li><a href="../doc/registry.html">registry(1)</a></li><li><a href="../doc/folders.html">folders(1)</a></li></ul>
-</div>
-<p id="footer">outdated &mdash; npm@1.2.30</p>
-<script>
-;(function () {
-var wrapper = document.getElementById("wrapper")
-var els = Array.prototype.slice.call(wrapper.getElementsByTagName("*"), 0)
- .filter(function (el) {
- return el.parentNode === wrapper
- && el.tagName.match(/H[1-6]/)
- && el.id
- })
-var l = 2
- , toc = document.createElement("ul")
-toc.innerHTML = els.map(function (el) {
- var i = el.tagName.charAt(1)
- , out = ""
- while (i > l) {
- out += "<ul>"
- l ++
- }
- while (i < l) {
- out += "</ul>"
- l --
- }
- out += "<li><a href='#" + el.id + "'>" +
- ( el.innerText || el.text || el.innerHTML)
- + "</a>"
- return out
-}).join("\n")
-toc.id = "toc"
-document.body.appendChild(toc)
-})()
-</script>
-</body></html>
diff --git a/deps/npm/html/doc/owner.html b/deps/npm/html/doc/owner.html
deleted file mode 100644
index 1f2439823..000000000
--- a/deps/npm/html/doc/owner.html
+++ /dev/null
@@ -1,69 +0,0 @@
-<!doctype html>
-<html>
- <title>owner</title>
- <meta http-equiv="content-type" value="text/html;utf-8">
- <link rel="stylesheet" type="text/css" href="../static/style.css">
-
- <body>
- <div id="wrapper">
-<h1><a href="../doc/owner.html">owner</a></h1> <p>Manage package owners</p>
-
-<h2 id="SYNOPSIS">SYNOPSIS</h2>
-
-<pre><code>npm owner ls &lt;package name&gt;
-npm owner add &lt;user&gt; &lt;package name&gt;
-npm owner rm &lt;user&gt; &lt;package name&gt;</code></pre>
-
-<h2 id="DESCRIPTION">DESCRIPTION</h2>
-
-<p>Manage ownership of published packages.</p>
-
-<ul><li>ls:
-List all the users who have access to modify a package and push new versions.
-Handy when you need to know who to bug for help.</li><li>add:
-Add a new user as a maintainer of a package. This user is enabled to modify
-metadata, publish new versions, and add other owners.</li><li>rm:
-Remove a user from the package owner list. This immediately revokes their
-privileges.</li></ul>
-
-<p>Note that there is only one level of access. Either you can modify a package,
-or you can&#39;t. Future versions may contain more fine-grained access levels, but
-that is not implemented at this time.</p>
-
-<h2 id="SEE-ALSO">SEE ALSO</h2>
-
-<ul><li><a href="../doc/publish.html">publish(1)</a></li><li><a href="../doc/registry.html">registry(1)</a></li><li><a href="../doc/adduser.html">adduser(1)</a></li><li><a href="../doc/disputes.html">disputes(1)</a></li></ul>
-</div>
-<p id="footer">owner &mdash; npm@1.2.30</p>
-<script>
-;(function () {
-var wrapper = document.getElementById("wrapper")
-var els = Array.prototype.slice.call(wrapper.getElementsByTagName("*"), 0)
- .filter(function (el) {
- return el.parentNode === wrapper
- && el.tagName.match(/H[1-6]/)
- && el.id
- })
-var l = 2
- , toc = document.createElement("ul")
-toc.innerHTML = els.map(function (el) {
- var i = el.tagName.charAt(1)
- , out = ""
- while (i > l) {
- out += "<ul>"
- l ++
- }
- while (i < l) {
- out += "</ul>"
- l --
- }
- out += "<li><a href='#" + el.id + "'>" +
- ( el.innerText || el.text || el.innerHTML)
- + "</a>"
- return out
-}).join("\n")
-toc.id = "toc"
-document.body.appendChild(toc)
-})()
-</script>
-</body></html>
diff --git a/deps/npm/html/doc/pack.html b/deps/npm/html/doc/pack.html
deleted file mode 100644
index 666292a2c..000000000
--- a/deps/npm/html/doc/pack.html
+++ /dev/null
@@ -1,64 +0,0 @@
-<!doctype html>
-<html>
- <title>pack</title>
- <meta http-equiv="content-type" value="text/html;utf-8">
- <link rel="stylesheet" type="text/css" href="../static/style.css">
-
- <body>
- <div id="wrapper">
-<h1><a href="../doc/pack.html">pack</a></h1> <p>Create a tarball from a package</p>
-
-<h2 id="SYNOPSIS">SYNOPSIS</h2>
-
-<pre><code>npm pack [&lt;pkg&gt; [&lt;pkg&gt; ...]]</code></pre>
-
-<h2 id="DESCRIPTION">DESCRIPTION</h2>
-
-<p>For anything that&#39;s installable (that is, a package folder, tarball,
-tarball url, name@tag, name@version, or name), this command will fetch
-it to the cache, and then copy the tarball to the current working
-directory as <code>&lt;name&gt;-&lt;version&gt;.tgz</code>, and then write the filenames out to
-stdout.</p>
-
-<p>If the same package is specified multiple times, then the file will be
-overwritten the second time.</p>
-
-<p>If no arguments are supplied, then npm packs the current package folder.</p>
-
-<h2 id="SEE-ALSO">SEE ALSO</h2>
-
-<ul><li><a href="../doc/cache.html">cache(1)</a></li><li><a href="../doc/publish.html">publish(1)</a></li><li><a href="../doc/config.html">config(1)</a></li></ul>
-</div>
-<p id="footer">pack &mdash; npm@1.2.30</p>
-<script>
-;(function () {
-var wrapper = document.getElementById("wrapper")
-var els = Array.prototype.slice.call(wrapper.getElementsByTagName("*"), 0)
- .filter(function (el) {
- return el.parentNode === wrapper
- && el.tagName.match(/H[1-6]/)
- && el.id
- })
-var l = 2
- , toc = document.createElement("ul")
-toc.innerHTML = els.map(function (el) {
- var i = el.tagName.charAt(1)
- , out = ""
- while (i > l) {
- out += "<ul>"
- l ++
- }
- while (i < l) {
- out += "</ul>"
- l --
- }
- out += "<li><a href='#" + el.id + "'>" +
- ( el.innerText || el.text || el.innerHTML)
- + "</a>"
- return out
-}).join("\n")
-toc.id = "toc"
-document.body.appendChild(toc)
-})()
-</script>
-</body></html>
diff --git a/deps/npm/html/doc/prefix.html b/deps/npm/html/doc/prefix.html
deleted file mode 100644
index a8058cb6c..000000000
--- a/deps/npm/html/doc/prefix.html
+++ /dev/null
@@ -1,55 +0,0 @@
-<!doctype html>
-<html>
- <title>prefix</title>
- <meta http-equiv="content-type" value="text/html;utf-8">
- <link rel="stylesheet" type="text/css" href="../static/style.css">
-
- <body>
- <div id="wrapper">
-<h1><a href="../doc/prefix.html">prefix</a></h1> <p>Display prefix</p>
-
-<h2 id="SYNOPSIS">SYNOPSIS</h2>
-
-<pre><code>npm prefix</code></pre>
-
-<h2 id="DESCRIPTION">DESCRIPTION</h2>
-
-<p>Print the prefix to standard out.</p>
-
-<h2 id="SEE-ALSO">SEE ALSO</h2>
-
-<ul><li><a href="../doc/root.html">root(1)</a></li><li><a href="../doc/bin.html">bin(1)</a></li><li><a href="../doc/folders.html">folders(1)</a></li><li><a href="../doc/config.html">config(1)</a></li></ul>
-</div>
-<p id="footer">prefix &mdash; npm@1.2.30</p>
-<script>
-;(function () {
-var wrapper = document.getElementById("wrapper")
-var els = Array.prototype.slice.call(wrapper.getElementsByTagName("*"), 0)
- .filter(function (el) {
- return el.parentNode === wrapper
- && el.tagName.match(/H[1-6]/)
- && el.id
- })
-var l = 2
- , toc = document.createElement("ul")
-toc.innerHTML = els.map(function (el) {
- var i = el.tagName.charAt(1)
- , out = ""
- while (i > l) {
- out += "<ul>"
- l ++
- }
- while (i < l) {
- out += "</ul>"
- l --
- }
- out += "<li><a href='#" + el.id + "'>" +
- ( el.innerText || el.text || el.innerHTML)
- + "</a>"
- return out
-}).join("\n")
-toc.id = "toc"
-document.body.appendChild(toc)
-})()
-</script>
-</body></html>
diff --git a/deps/npm/html/doc/prune.html b/deps/npm/html/doc/prune.html
deleted file mode 100644
index 7fdd57629..000000000
--- a/deps/npm/html/doc/prune.html
+++ /dev/null
@@ -1,60 +0,0 @@
-<!doctype html>
-<html>
- <title>prune</title>
- <meta http-equiv="content-type" value="text/html;utf-8">
- <link rel="stylesheet" type="text/css" href="../static/style.css">
-
- <body>
- <div id="wrapper">
-<h1><a href="../doc/prune.html">prune</a></h1> <p>Remove extraneous packages</p>
-
-<h2 id="SYNOPSIS">SYNOPSIS</h2>
-
-<pre><code>npm prune [&lt;name&gt; [&lt;name ...]]</code></pre>
-
-<h2 id="DESCRIPTION">DESCRIPTION</h2>
-
-<p>This command removes &quot;extraneous&quot; packages. If a package name is
-provided, then only packages matching one of the supplied names are
-removed.</p>
-
-<p>Extraneous packages are packages that are not listed on the parent
-package&#39;s dependencies list.</p>
-
-<h2 id="SEE-ALSO">SEE ALSO</h2>
-
-<ul><li><a href="../doc/rm.html">rm(1)</a></li><li><a href="../doc/folders.html">folders(1)</a></li><li><a href="../doc/list.html">list(1)</a></li></ul>
-</div>
-<p id="footer">prune &mdash; npm@1.2.30</p>
-<script>
-;(function () {
-var wrapper = document.getElementById("wrapper")
-var els = Array.prototype.slice.call(wrapper.getElementsByTagName("*"), 0)
- .filter(function (el) {
- return el.parentNode === wrapper
- && el.tagName.match(/H[1-6]/)
- && el.id
- })
-var l = 2
- , toc = document.createElement("ul")
-toc.innerHTML = els.map(function (el) {
- var i = el.tagName.charAt(1)
- , out = ""
- while (i > l) {
- out += "<ul>"
- l ++
- }
- while (i < l) {
- out += "</ul>"
- l --
- }
- out += "<li><a href='#" + el.id + "'>" +
- ( el.innerText || el.text || el.innerHTML)
- + "</a>"
- return out
-}).join("\n")
-toc.id = "toc"
-document.body.appendChild(toc)
-})()
-</script>
-</body></html>
diff --git a/deps/npm/html/doc/publish.html b/deps/npm/html/doc/publish.html
deleted file mode 100644
index a52f648e1..000000000
--- a/deps/npm/html/doc/publish.html
+++ /dev/null
@@ -1,64 +0,0 @@
-<!doctype html>
-<html>
- <title>publish</title>
- <meta http-equiv="content-type" value="text/html;utf-8">
- <link rel="stylesheet" type="text/css" href="../static/style.css">
-
- <body>
- <div id="wrapper">
-<h1><a href="../doc/publish.html">publish</a></h1> <p>Publish a package</p>
-
-<h2 id="SYNOPSIS">SYNOPSIS</h2>
-
-<pre><code>npm publish &lt;tarball&gt;
-npm publish &lt;folder&gt;</code></pre>
-
-<h2 id="DESCRIPTION">DESCRIPTION</h2>
-
-<p>Publishes a package to the registry so that it can be installed by name.</p>
-
-<ul><li><p><code>&lt;folder&gt;</code>:
-A folder containing a package.json file</p></li><li><p><code>&lt;tarball&gt;</code>:
-A url or file path to a gzipped tar archive containing a single folder
-with a package.json file inside.</p></li></ul>
-
-<p>Fails if the package name and version combination already exists in
-the registry. Overwrites when the &quot;--force&quot; flag is set.</p>
-
-<h2 id="SEE-ALSO">SEE ALSO</h2>
-
-<ul><li><a href="../doc/registry.html">registry(1)</a></li><li><a href="../doc/adduser.html">adduser(1)</a></li><li><a href="../doc/owner.html">owner(1)</a></li><li><a href="../doc/deprecate.html">deprecate(1)</a></li><li><a href="../doc/tag.html">tag(1)</a></li></ul>
-</div>
-<p id="footer">publish &mdash; npm@1.2.30</p>
-<script>
-;(function () {
-var wrapper = document.getElementById("wrapper")
-var els = Array.prototype.slice.call(wrapper.getElementsByTagName("*"), 0)
- .filter(function (el) {
- return el.parentNode === wrapper
- && el.tagName.match(/H[1-6]/)
- && el.id
- })
-var l = 2
- , toc = document.createElement("ul")
-toc.innerHTML = els.map(function (el) {
- var i = el.tagName.charAt(1)
- , out = ""
- while (i > l) {
- out += "<ul>"
- l ++
- }
- while (i < l) {
- out += "</ul>"
- l --
- }
- out += "<li><a href='#" + el.id + "'>" +
- ( el.innerText || el.text || el.innerHTML)
- + "</a>"
- return out
-}).join("\n")
-toc.id = "toc"
-document.body.appendChild(toc)
-})()
-</script>
-</body></html>
diff --git a/deps/npm/html/doc/rebuild.html b/deps/npm/html/doc/rebuild.html
deleted file mode 100644
index cdd2cc0fa..000000000
--- a/deps/npm/html/doc/rebuild.html
+++ /dev/null
@@ -1,60 +0,0 @@
-<!doctype html>
-<html>
- <title>rebuild</title>
- <meta http-equiv="content-type" value="text/html;utf-8">
- <link rel="stylesheet" type="text/css" href="../static/style.css">
-
- <body>
- <div id="wrapper">
-<h1><a href="../doc/rebuild.html">rebuild</a></h1> <p>Rebuild a package</p>
-
-<h2 id="SYNOPSIS">SYNOPSIS</h2>
-
-<pre><code>npm rebuild [&lt;name&gt; [&lt;name&gt; ...]]</code></pre>
-
-<ul><li><code>&lt;name&gt;</code>:
-The package to rebuild</li></ul>
-
-<h2 id="DESCRIPTION">DESCRIPTION</h2>
-
-<p>This command runs the <code>npm build</code> command on the matched folders. This is useful
-when you install a new version of node, and must recompile all your C++ addons with
-the new binary.</p>
-
-<h2 id="SEE-ALSO">SEE ALSO</h2>
-
-<ul><li><a href="../doc/build.html">build(1)</a></li><li><a href="../doc/install.html">install(1)</a></li></ul>
-</div>
-<p id="footer">rebuild &mdash; npm@1.2.30</p>
-<script>
-;(function () {
-var wrapper = document.getElementById("wrapper")
-var els = Array.prototype.slice.call(wrapper.getElementsByTagName("*"), 0)
- .filter(function (el) {
- return el.parentNode === wrapper
- && el.tagName.match(/H[1-6]/)
- && el.id
- })
-var l = 2
- , toc = document.createElement("ul")
-toc.innerHTML = els.map(function (el) {
- var i = el.tagName.charAt(1)
- , out = ""
- while (i > l) {
- out += "<ul>"
- l ++
- }
- while (i < l) {
- out += "</ul>"
- l --
- }
- out += "<li><a href='#" + el.id + "'>" +
- ( el.innerText || el.text || el.innerHTML)
- + "</a>"
- return out
-}).join("\n")
-toc.id = "toc"
-document.body.appendChild(toc)
-})()
-</script>
-</body></html>
diff --git a/deps/npm/html/doc/registry.html b/deps/npm/html/doc/registry.html
deleted file mode 100644
index b2af93902..000000000
--- a/deps/npm/html/doc/registry.html
+++ /dev/null
@@ -1,130 +0,0 @@
-<!doctype html>
-<html>
- <title>registry</title>
- <meta http-equiv="content-type" value="text/html;utf-8">
- <link rel="stylesheet" type="text/css" href="../static/style.css">
-
- <body>
- <div id="wrapper">
-<h1><a href="../doc/registry.html">registry</a></h1> <p>The JavaScript Package Registry</p>
-
-<h2 id="DESCRIPTION">DESCRIPTION</h2>
-
-<p>To resolve packages by name and version, npm talks to a registry website
-that implements the CommonJS Package Registry specification for reading
-package info.</p>
-
-<p>Additionally, npm&#39;s package registry implementation supports several
-write APIs as well, to allow for publishing packages and managing user
-account information.</p>
-
-<p>The official public npm registry is at <a href="http://registry.npmjs.org/">http://registry.npmjs.org/</a>. It
-is powered by a CouchDB database at
-<a href="http://isaacs.iriscouch.com/registry">http://isaacs.iriscouch.com/registry</a>. The code for the couchapp is
-available at <a href="http://github.com/isaacs/npmjs.org">http://github.com/isaacs/npmjs.org</a>. npm user accounts
-are CouchDB users, stored in the <a href="http://isaacs.iriscouch.com/_users">http://isaacs.iriscouch.com/_users</a>
-database.</p>
-
-<p>The registry URL is supplied by the <code>registry</code> config parameter. See
-<code><a href="../doc/config.html">config(1)</a></code> for more on managing npm&#39;s configuration.</p>
-
-<h2 id="Can-I-run-my-own-private-registry">Can I run my own private registry?</h2>
-
-<p>Yes!</p>
-
-<p>The easiest way is to replicate the couch database, and use the same (or
-similar) design doc to implement the APIs.</p>
-
-<p>If you set up continuous replication from the official CouchDB, and then
-set your internal CouchDB as the registry config, then you&#39;ll be able
-to read any published packages, in addition to your private ones, and by
-default will only publish internally. If you then want to publish a
-package for the whole world to see, you can simply override the
-<code>--registry</code> config for that command.</p>
-
-<h2 id="I-don-t-want-my-package-published-in-the-official-registry-It-s-private">I don&#39;t want my package published in the official registry. It&#39;s private.</h2>
-
-<p>Set <code>&quot;private&quot;: true</code> in your package.json to prevent it from being
-published at all, or
-<code>&quot;publishConfig&quot;:{&quot;registry&quot;:&quot;http://my-internal-registry.local&quot;}</code>
-to force it to be published only to your internal registry.</p>
-
-<p>See <code><a href="../doc/json.html">json(1)</a></code> for more info on what goes in the package.json file.</p>
-
-<h2 id="Will-you-replicate-from-my-registry-into-the-public-one">Will you replicate from my registry into the public one?</h2>
-
-<p>No. If you want things to be public, then publish them into the public
-registry using npm. What little security there is would be for nought
-otherwise.</p>
-
-<h2 id="Do-I-have-to-use-couchdb-to-build-a-registry-that-npm-can-talk-to">Do I have to use couchdb to build a registry that npm can talk to?</h2>
-
-<p>No, but it&#39;s way easier.</p>
-
-<h2 id="I-published-something-elsewhere-and-want-to-tell-the-npm-registry-about-it">I published something elsewhere, and want to tell the npm registry about it.</h2>
-
-<p>That is supported, but not using the npm client. You&#39;ll have to get
-your hands dirty and do some HTTP. The request looks something like
-this:</p>
-
-<pre><code>PUT /my-foreign-package
-content-type:application/json
-accept:application/json
-authorization:Basic $base_64_encoded
-
-{ &quot;name&quot;:&quot;my-foreign-package&quot;
-, &quot;maintainers&quot;:[&quot;owner&quot;,&quot;usernames&quot;]
-, &quot;description&quot;:&quot;A package that is hosted elsewhere&quot;
-, &quot;keywords&quot;:[&quot;nih&quot;,&quot;my cheese smells the best&quot;]
-, &quot;url&quot;:&quot;http://my-different-registry.com/blerg/my-local-package&quot;
-}</code></pre>
-
-<p>(Keywords and description are optional, but recommended. Name,
-maintainers, and url are required.)</p>
-
-<p>Then, when a user tries to install &quot;my-foreign-package&quot;, it&#39;ll redirect
-to your registry. If that doesn&#39;t resolve to a valid package entry,
-then it&#39;ll fail, so please make sure that you understand the spec, and
-ask for help on the <a href="mailto:npm-@googlegroups.com">npm-@googlegroups.com</a> mailing list.</p>
-
-<h2 id="Is-there-a-website-or-something-to-see-package-docs-and-such">Is there a website or something to see package docs and such?</h2>
-
-<p>Yes, head over to <a href="https://npmjs.org/">https://npmjs.org/</a></p>
-
-<h2 id="SEE-ALSO">SEE ALSO</h2>
-
-<ul><li><a href="../doc/config.html">config(1)</a></li><li><a href="../doc/developers.html">developers(1)</a></li><li><a href="../doc/disputes.html">disputes(1)</a></li></ul>
-</div>
-<p id="footer">registry &mdash; npm@1.2.30</p>
-<script>
-;(function () {
-var wrapper = document.getElementById("wrapper")
-var els = Array.prototype.slice.call(wrapper.getElementsByTagName("*"), 0)
- .filter(function (el) {
- return el.parentNode === wrapper
- && el.tagName.match(/H[1-6]/)
- && el.id
- })
-var l = 2
- , toc = document.createElement("ul")
-toc.innerHTML = els.map(function (el) {
- var i = el.tagName.charAt(1)
- , out = ""
- while (i > l) {
- out += "<ul>"
- l ++
- }
- while (i < l) {
- out += "</ul>"
- l --
- }
- out += "<li><a href='#" + el.id + "'>" +
- ( el.innerText || el.text || el.innerHTML)
- + "</a>"
- return out
-}).join("\n")
-toc.id = "toc"
-document.body.appendChild(toc)
-})()
-</script>
-</body></html>
diff --git a/deps/npm/html/doc/removing-npm.html b/deps/npm/html/doc/removing-npm.html
deleted file mode 100644
index 74698f24f..000000000
--- a/deps/npm/html/doc/removing-npm.html
+++ /dev/null
@@ -1,93 +0,0 @@
-<!doctype html>
-<html>
- <title>removing-npm</title>
- <meta http-equiv="content-type" value="text/html;utf-8">
- <link rel="stylesheet" type="text/css" href="../static/style.css">
-
- <body>
- <div id="wrapper">
-<h1><a href="../doc/removal.html">removal</a></h1> <p>Cleaning the Slate</p>
-
-<h2 id="SYNOPSIS">SYNOPSIS</h2>
-
-<p>So sad to see you go.</p>
-
-<pre><code>sudo npm uninstall npm -g</code></pre>
-
-<p>Or, if that fails, get the npm source code, and do:</p>
-
-<pre><code>sudo make uninstall</code></pre>
-
-<h2 id="More-Severe-Uninstalling">More Severe Uninstalling</h2>
-
-<p>Usually, the above instructions are sufficient. That will remove
-npm, but leave behind anything you&#39;ve installed.</p>
-
-<p>If that doesn&#39;t work, or if you require more drastic measures,
-continue reading.</p>
-
-<p>Note that this is only necessary for globally-installed packages. Local
-installs are completely contained within a project&#39;s <code>node_modules</code>
-folder. Delete that folder, and everything is gone (unless a package&#39;s
-install script is particularly ill-behaved).</p>
-
-<p>This assumes that you installed node and npm in the default place. If
-you configured node with a different <code>--prefix</code>, or installed npm with a
-different prefix setting, then adjust the paths accordingly, replacing
-<code>/usr/local</code> with your install prefix.</p>
-
-<p>To remove everything npm-related manually:</p>
-
-<pre><code>rm -rf /usr/local/{lib/node{,/.npm,_modules},bin,share/man}/npm*</code></pre>
-
-<p>If you installed things <em>with</em> npm, then your best bet is to uninstall
-them with npm first, and then install them again once you have a
-proper install. This can help find any symlinks that are lying
-around:</p>
-
-<pre><code>ls -laF /usr/local/{lib/node{,/.npm},bin,share/man} | grep npm</code></pre>
-
-<p>Prior to version 0.3, npm used shim files for executables and node
-modules. To track those down, you can do the following:</p>
-
-<pre><code>find /usr/local/{lib/node,bin} -exec grep -l npm \{\} \; ;</code></pre>
-
-<p>(This is also in the <a href="../doc/README.html">README</a> file.)</p>
-
-<h2 id="SEE-ALSO">SEE ALSO</h2>
-
-<ul><li><a href="../doc/README.html">README</a></li><li><a href="../doc/rm.html">rm(1)</a></li><li><a href="../doc/prune.html">prune(1)</a></li></ul>
-</div>
-<p id="footer">removing-npm &mdash; npm@1.2.30</p>
-<script>
-;(function () {
-var wrapper = document.getElementById("wrapper")
-var els = Array.prototype.slice.call(wrapper.getElementsByTagName("*"), 0)
- .filter(function (el) {
- return el.parentNode === wrapper
- && el.tagName.match(/H[1-6]/)
- && el.id
- })
-var l = 2
- , toc = document.createElement("ul")
-toc.innerHTML = els.map(function (el) {
- var i = el.tagName.charAt(1)
- , out = ""
- while (i > l) {
- out += "<ul>"
- l ++
- }
- while (i < l) {
- out += "</ul>"
- l --
- }
- out += "<li><a href='#" + el.id + "'>" +
- ( el.innerText || el.text || el.innerHTML)
- + "</a>"
- return out
-}).join("\n")
-toc.id = "toc"
-document.body.appendChild(toc)
-})()
-</script>
-</body></html>
diff --git a/deps/npm/html/doc/restart.html b/deps/npm/html/doc/restart.html
deleted file mode 100644
index 03dd07dd3..000000000
--- a/deps/npm/html/doc/restart.html
+++ /dev/null
@@ -1,59 +0,0 @@
-<!doctype html>
-<html>
- <title>restart</title>
- <meta http-equiv="content-type" value="text/html;utf-8">
- <link rel="stylesheet" type="text/css" href="../static/style.css">
-
- <body>
- <div id="wrapper">
-<h1><a href="../doc/restart.html">restart</a></h1> <p>Start a package</p>
-
-<h2 id="SYNOPSIS">SYNOPSIS</h2>
-
-<pre><code>npm restart &lt;name&gt;</code></pre>
-
-<h2 id="DESCRIPTION">DESCRIPTION</h2>
-
-<p>This runs a package&#39;s &quot;restart&quot; script, if one was provided.
-Otherwise it runs package&#39;s &quot;stop&quot; script, if one was provided, and then
-the &quot;start&quot; script.</p>
-
-<p>If no version is specified, then it restarts the &quot;active&quot; version.</p>
-
-<h2 id="SEE-ALSO">SEE ALSO</h2>
-
-<ul><li><a href="../doc/run-script.html">run-script(1)</a></li><li><a href="../doc/scripts.html">scripts(1)</a></li><li><a href="../doc/test.html">test(1)</a></li><li><a href="../doc/start.html">start(1)</a></li><li><a href="../doc/stop.html">stop(1)</a></li></ul>
-</div>
-<p id="footer">restart &mdash; npm@1.2.30</p>
-<script>
-;(function () {
-var wrapper = document.getElementById("wrapper")
-var els = Array.prototype.slice.call(wrapper.getElementsByTagName("*"), 0)
- .filter(function (el) {
- return el.parentNode === wrapper
- && el.tagName.match(/H[1-6]/)
- && el.id
- })
-var l = 2
- , toc = document.createElement("ul")
-toc.innerHTML = els.map(function (el) {
- var i = el.tagName.charAt(1)
- , out = ""
- while (i > l) {
- out += "<ul>"
- l ++
- }
- while (i < l) {
- out += "</ul>"
- l --
- }
- out += "<li><a href='#" + el.id + "'>" +
- ( el.innerText || el.text || el.innerHTML)
- + "</a>"
- return out
-}).join("\n")
-toc.id = "toc"
-document.body.appendChild(toc)
-})()
-</script>
-</body></html>
diff --git a/deps/npm/html/doc/rm.html b/deps/npm/html/doc/rm.html
deleted file mode 100644
index 92d679d44..000000000
--- a/deps/npm/html/doc/rm.html
+++ /dev/null
@@ -1,57 +0,0 @@
-<!doctype html>
-<html>
- <title>rm</title>
- <meta http-equiv="content-type" value="text/html;utf-8">
- <link rel="stylesheet" type="text/css" href="../static/style.css">
-
- <body>
- <div id="wrapper">
-<h1><a href="../doc/rm.html">rm</a></h1> <p>Remove a package</p>
-
-<h2 id="SYNOPSIS">SYNOPSIS</h2>
-
-<pre><code>npm rm &lt;name&gt;
-npm uninstall &lt;name&gt;</code></pre>
-
-<h2 id="DESCRIPTION">DESCRIPTION</h2>
-
-<p>This uninstalls a package, completely removing everything npm installed
-on its behalf.</p>
-
-<h2 id="SEE-ALSO">SEE ALSO</h2>
-
-<ul><li><a href="../doc/prune.html">prune(1)</a></li><li><a href="../doc/install.html">install(1)</a></li><li><a href="../doc/folders.html">folders(1)</a></li><li><a href="../doc/config.html">config(1)</a></li></ul>
-</div>
-<p id="footer">rm &mdash; npm@1.2.30</p>
-<script>
-;(function () {
-var wrapper = document.getElementById("wrapper")
-var els = Array.prototype.slice.call(wrapper.getElementsByTagName("*"), 0)
- .filter(function (el) {
- return el.parentNode === wrapper
- && el.tagName.match(/H[1-6]/)
- && el.id
- })
-var l = 2
- , toc = document.createElement("ul")
-toc.innerHTML = els.map(function (el) {
- var i = el.tagName.charAt(1)
- , out = ""
- while (i > l) {
- out += "<ul>"
- l ++
- }
- while (i < l) {
- out += "</ul>"
- l --
- }
- out += "<li><a href='#" + el.id + "'>" +
- ( el.innerText || el.text || el.innerHTML)
- + "</a>"
- return out
-}).join("\n")
-toc.id = "toc"
-document.body.appendChild(toc)
-})()
-</script>
-</body></html>
diff --git a/deps/npm/html/doc/root.html b/deps/npm/html/doc/root.html
deleted file mode 100644
index e48db3368..000000000
--- a/deps/npm/html/doc/root.html
+++ /dev/null
@@ -1,55 +0,0 @@
-<!doctype html>
-<html>
- <title>root</title>
- <meta http-equiv="content-type" value="text/html;utf-8">
- <link rel="stylesheet" type="text/css" href="../static/style.css">
-
- <body>
- <div id="wrapper">
-<h1><a href="../doc/root.html">root</a></h1> <p>Display npm root</p>
-
-<h2 id="SYNOPSIS">SYNOPSIS</h2>
-
-<pre><code>npm root</code></pre>
-
-<h2 id="DESCRIPTION">DESCRIPTION</h2>
-
-<p>Print the effective <code>node_modules</code> folder to standard out.</p>
-
-<h2 id="SEE-ALSO">SEE ALSO</h2>
-
-<ul><li><a href="../doc/prefix.html">prefix(1)</a></li><li><a href="../doc/bin.html">bin(1)</a></li><li><a href="../doc/folders.html">folders(1)</a></li><li><a href="../doc/config.html">config(1)</a></li></ul>
-</div>
-<p id="footer">root &mdash; npm@1.2.30</p>
-<script>
-;(function () {
-var wrapper = document.getElementById("wrapper")
-var els = Array.prototype.slice.call(wrapper.getElementsByTagName("*"), 0)
- .filter(function (el) {
- return el.parentNode === wrapper
- && el.tagName.match(/H[1-6]/)
- && el.id
- })
-var l = 2
- , toc = document.createElement("ul")
-toc.innerHTML = els.map(function (el) {
- var i = el.tagName.charAt(1)
- , out = ""
- while (i > l) {
- out += "<ul>"
- l ++
- }
- while (i < l) {
- out += "</ul>"
- l --
- }
- out += "<li><a href='#" + el.id + "'>" +
- ( el.innerText || el.text || el.innerHTML)
- + "</a>"
- return out
-}).join("\n")
-toc.id = "toc"
-document.body.appendChild(toc)
-})()
-</script>
-</body></html>
diff --git a/deps/npm/html/doc/run-script.html b/deps/npm/html/doc/run-script.html
deleted file mode 100644
index 946c92298..000000000
--- a/deps/npm/html/doc/run-script.html
+++ /dev/null
@@ -1,58 +0,0 @@
-<!doctype html>
-<html>
- <title>run-script</title>
- <meta http-equiv="content-type" value="text/html;utf-8">
- <link rel="stylesheet" type="text/css" href="../static/style.css">
-
- <body>
- <div id="wrapper">
-<h1><a href="../doc/run-script.html">run-script</a></h1> <p>Run arbitrary package scripts</p>
-
-<h2 id="SYNOPSIS">SYNOPSIS</h2>
-
-<pre><code>npm run-script &lt;script&gt; &lt;name&gt;</code></pre>
-
-<h2 id="DESCRIPTION">DESCRIPTION</h2>
-
-<p>This runs an arbitrary command from a package&#39;s &quot;scripts&quot; object.</p>
-
-<p>It is used by the test, start, restart, and stop commands, but can be
-called directly, as well.</p>
-
-<h2 id="SEE-ALSO">SEE ALSO</h2>
-
-<ul><li><a href="../doc/scripts.html">scripts(1)</a></li><li><a href="../doc/test.html">test(1)</a></li><li><a href="../doc/start.html">start(1)</a></li><li><a href="../doc/restart.html">restart(1)</a></li><li><a href="../doc/stop.html">stop(1)</a></li></ul>
-</div>
-<p id="footer">run-script &mdash; npm@1.2.30</p>
-<script>
-;(function () {
-var wrapper = document.getElementById("wrapper")
-var els = Array.prototype.slice.call(wrapper.getElementsByTagName("*"), 0)
- .filter(function (el) {
- return el.parentNode === wrapper
- && el.tagName.match(/H[1-6]/)
- && el.id
- })
-var l = 2
- , toc = document.createElement("ul")
-toc.innerHTML = els.map(function (el) {
- var i = el.tagName.charAt(1)
- , out = ""
- while (i > l) {
- out += "<ul>"
- l ++
- }
- while (i < l) {
- out += "</ul>"
- l --
- }
- out += "<li><a href='#" + el.id + "'>" +
- ( el.innerText || el.text || el.innerHTML)
- + "</a>"
- return out
-}).join("\n")
-toc.id = "toc"
-document.body.appendChild(toc)
-})()
-</script>
-</body></html>
diff --git a/deps/npm/html/doc/scripts.html b/deps/npm/html/doc/scripts.html
deleted file mode 100644
index e16c34dd7..000000000
--- a/deps/npm/html/doc/scripts.html
+++ /dev/null
@@ -1,253 +0,0 @@
-<!doctype html>
-<html>
- <title>scripts</title>
- <meta http-equiv="content-type" value="text/html;utf-8">
- <link rel="stylesheet" type="text/css" href="../static/style.css">
-
- <body>
- <div id="wrapper">
-<h1><a href="../doc/scripts.html">scripts</a></h1> <p>How npm handles the &quot;scripts&quot; field</p>
-
-<h2 id="DESCRIPTION">DESCRIPTION</h2>
-
-<p>npm supports the &quot;scripts&quot; member of the package.json script, for the
-following scripts:</p>
-
-<ul><li>prepublish:
-Run BEFORE the package is published. (Also run on local <code>npm
-install</code> without any arguments.)</li><li>publish, postpublish:
-Run AFTER the package is published.</li><li>preinstall:
-Run BEFORE the package is installed</li><li>install, postinstall:
-Run AFTER the package is installed.</li><li>preuninstall, uninstall:
-Run BEFORE the package is uninstalled.</li><li>postuninstall:
-Run AFTER the package is uninstalled.</li><li>preupdate:
-Run BEFORE the package is updated with the update command.</li><li>update, postupdate:
-Run AFTER the package is updated with the update command.</li><li>pretest, test, posttest:
-Run by the <code>npm test</code> command.</li><li>prestop, stop, poststop:
-Run by the <code>npm stop</code> command.</li><li>prestart, start, poststart:
-Run by the <code>npm start</code> command.</li><li>prerestart, restart, postrestart:
-Run by the <code>npm restart</code> command. Note: <code>npm restart</code> will run the
-stop and start scripts if no <code>restart</code> script is provided.</li></ul>
-
-<p>Additionally, arbitrary scrips can be run by doing
-<code>npm run-script &lt;stage&gt; &lt;pkg&gt;</code>.</p>
-
-<h2 id="NOTE-INSTALL-SCRIPTS-ARE-AN-ANTIPATTERN">NOTE: INSTALL SCRIPTS ARE AN ANTIPATTERN</h2>
-
-<p><strong>tl;dr</strong> Don&#39;t use <code>install</code>. Use a <code>.gyp</code> file for compilation, and
-<code>prepublish</code> for anything else.</p>
-
-<p>You should almost never have to explicitly set a <code>preinstall</code> or
-<code>install</code> script. If you are doing this, please consider if there is
-another option.</p>
-
-<p>The only valid use of <code>install</code> or <code>preinstall</code> scripts is for
-compilation which must be done on the target architecture. In early
-versions of node, this was often done using the <code>node-waf</code> scripts, or
-a standalone <code>Makefile</code>, and early versions of npm required that it be
-explicitly set in package.json. This was not portable, and harder to
-do properly.</p>
-
-<p>In the current version of node, the standard way to do this is using a
-<code>.gyp</code> file. If you have a file with a <code>.gyp</code> extension in the root
-of your package, then npm will run the appropriate <code>node-gyp</code> commands
-automatically at install time. This is the only officially supported
-method for compiling binary addons, and does not require that you add
-anything to your package.json file.</p>
-
-<p>If you have to do other things before your package is used, in a way
-that is not dependent on the operating system or architecture of the
-target system, then use a <code>prepublish</code> script instead. This includes
-tasks such as:</p>
-
-<ul><li>Compile CoffeeScript source code into JavaScript.</li><li>Create minified versions of JavaScript source code.</li><li>Fetching remote resources that your package will use.</li></ul>
-
-<p>The advantage of doing these things at <code>prepublish</code> time instead of
-<code>preinstall</code> or <code>install</code> time is that they can be done once, in a
-single place, and thus greatly reduce complexity and variability.
-Additionally, this means that:</p>
-
-<ul><li>You can depend on <code>coffee-script</code> as a <code>devDependency</code>, and thus
-your users don&#39;t need to have it installed.</li><li>You don&#39;t need to include the minifiers in your package, reducing
-the size for your users.</li><li>You don&#39;t need to rely on your users having <code>curl</code> or <code>wget</code> or
-other system tools on the target machines.</li></ul>
-
-<h2 id="DEFAULT-VALUES">DEFAULT VALUES</h2>
-
-<p>npm will default some script values based on package contents.</p>
-
-<ul><li><p><code>&quot;start&quot;: &quot;node server.js&quot;</code>:</p><p>If there is a <code>server.js</code> file in the root of your package, then npm
-will default the <code>start</code> command to <code>node server.js</code>.</p></li><li><p><code>&quot;preinstall&quot;: &quot;node-waf clean || true; node-waf configure build&quot;</code>:</p><p>If there is a <code>wscript</code> file in the root of your package, npm will
-default the <code>preinstall</code> command to compile using node-waf.</p></li></ul>
-
-<h2 id="USER">USER</h2>
-
-<p>If npm was invoked with root privileges, then it will change the uid to
-the user account or uid specified by the <code>user</code> config, which defaults
-to <code>nobody</code>. Set the <code>unsafe-perm</code> flag to run scripts with root
-privileges.</p>
-
-<h2 id="ENVIRONMENT">ENVIRONMENT</h2>
-
-<p>Package scripts run in an environment where many pieces of information are
-made available regarding the setup of npm and the current state of the
-process.</p>
-
-<h3 id="path">path</h3>
-
-<p>If you depend on modules that define executable scripts, like test suites,
-then those executables will be added to the <code>PATH</code> for executing the scripts.
-So, if your package.json has this:</p>
-
-<pre><code>{ &quot;name&quot; : &quot;foo&quot;
-, &quot;dependencies&quot; : { &quot;bar&quot; : &quot;0.1.x&quot; }
-, &quot;scripts&quot;: { &quot;start&quot; : &quot;bar ./test&quot; } }</code></pre>
-
-<p>then you could run <code>npm start</code> to execute the <code>bar</code> script, which is exported
-into the <code>node_modules/.bin</code> directory on <code>npm install</code>.</p>
-
-<h3 id="package-json-vars">package.json vars</h3>
-
-<p>The package.json fields are tacked onto the <code>npm_package_</code> prefix. So, for
-instance, if you had <code>{&quot;name&quot;:&quot;foo&quot;, &quot;version&quot;:&quot;1.2.5&quot;}</code> in your package.json
-file, then your package scripts would have the <code>npm_package_name</code> environment
-variable set to &quot;foo&quot;, and the <code>npm_package_version</code> set to &quot;1.2.5&quot;</p>
-
-<h3 id="configuration">configuration</h3>
-
-<p>Configuration parameters are put in the environment with the <code>npm_config_</code>
-prefix. For instance, you can view the effective <code>root</code> config by checking the
-<code>npm_config_root</code> environment variable.</p>
-
-<h3 id="Special-package-json-config-hash">Special: package.json &quot;config&quot; hash</h3>
-
-<p>The package.json &quot;config&quot; keys are overwritten in the environment if
-there is a config param of <code>&lt;name&gt;[@&lt;version&gt;]:&lt;key&gt;</code>. For example, if
-the package.json has this:</p>
-
-<pre><code>{ &quot;name&quot; : &quot;foo&quot;
-, &quot;config&quot; : { &quot;port&quot; : &quot;8080&quot; }
-, &quot;scripts&quot; : { &quot;start&quot; : &quot;node server.js&quot; } }</code></pre>
-
-<p>and the server.js is this:</p>
-
-<pre><code>http.createServer(...).listen(process.env.npm_package_config_port)</code></pre>
-
-<p>then the user could change the behavior by doing:</p>
-
-<pre><code>npm config set foo:port 80</code></pre>
-
-<h3 id="current-lifecycle-event">current lifecycle event</h3>
-
-<p>Lastly, the <code>npm_lifecycle_event</code> environment variable is set to whichever
-stage of the cycle is being executed. So, you could have a single script used
-for different parts of the process which switches based on what&#39;s currently
-happening.</p>
-
-<p>Objects are flattened following this format, so if you had
-<code>{&quot;scripts&quot;:{&quot;install&quot;:&quot;foo.js&quot;}}</code> in your package.json, then you&#39;d see this
-in the script:</p>
-
-<pre><code>process.env.npm_package_scripts_install === &quot;foo.js&quot;</code></pre>
-
-<h2 id="EXAMPLES">EXAMPLES</h2>
-
-<p>For example, if your package.json contains this:</p>
-
-<pre><code>{ &quot;scripts&quot; :
- { &quot;install&quot; : &quot;scripts/install.js&quot;
- , &quot;postinstall&quot; : &quot;scripts/install.js&quot;
- , &quot;uninstall&quot; : &quot;scripts/uninstall.js&quot;
- }
-}</code></pre>
-
-<p>then the <code>scripts/install.js</code> will be called for the install, post-install,
-stages of the lifecycle, and the <code>scripts/uninstall.js</code> would be
-called when the package is uninstalled. Since <code>scripts/install.js</code> is running
-for three different phases, it would be wise in this case to look at the
-<code>npm_lifecycle_event</code> environment variable.</p>
-
-<p>If you want to run a make command, you can do so. This works just fine:</p>
-
-<pre><code>{ &quot;scripts&quot; :
- { &quot;preinstall&quot; : &quot;./configure&quot;
- , &quot;install&quot; : &quot;make &amp;&amp; make install&quot;
- , &quot;test&quot; : &quot;make test&quot;
- }
-}</code></pre>
-
-<h2 id="EXITING">EXITING</h2>
-
-<p>Scripts are run by passing the line as a script argument to <code>sh</code>.</p>
-
-<p>If the script exits with a code other than 0, then this will abort the
-process.</p>
-
-<p>Note that these script files don&#39;t have to be nodejs or even javascript
-programs. They just have to be some kind of executable file.</p>
-
-<h2 id="HOOK-SCRIPTS">HOOK SCRIPTS</h2>
-
-<p>If you want to run a specific script at a specific lifecycle event for ALL
-packages, then you can use a hook script.</p>
-
-<p>Place an executable file at <code>node_modules/.hooks/{eventname}</code>, and it&#39;ll get
-run for all packages when they are going through that point in the package
-lifecycle for any packages installed in that root.</p>
-
-<p>Hook scripts are run exactly the same way as package.json scripts. That is,
-they are in a separate child process, with the env described above.</p>
-
-<h2 id="BEST-PRACTICES">BEST PRACTICES</h2>
-
-<ul><li>Don&#39;t exit with a non-zero error code unless you <em>really</em> mean it.
-Except for uninstall scripts, this will cause the npm action
-to fail, and potentially be rolled back. If the failure is minor or
-only will prevent some optional features, then it&#39;s better to just
-print a warning and exit successfully.</li><li>Try not to use scripts to do what npm can do for you. Read through
-<code><a href="../doc/json.html">json(1)</a></code> to see all the things that you can specify and enable
-by simply describing your package appropriately. In general, this will
-lead to a more robust and consistent state.</li><li>Inspect the env to determine where to put things. For instance, if
-the <code>npm_config_binroot</code> environ is set to <code>/home/user/bin</code>, then don&#39;t
-try to install executables into <code>/usr/local/bin</code>. The user probably
-set it up that way for a reason.</li><li>Don&#39;t prefix your script commands with &quot;sudo&quot;. If root permissions are
-required for some reason, then it&#39;ll fail with that error, and the user
-will sudo the npm command in question.</li></ul>
-
-<h2 id="SEE-ALSO">SEE ALSO</h2>
-
-<ul><li><a href="../doc/run-script.html">run-script(1)</a></li><li><a href="../doc/json.html">json(1)</a></li><li><a href="../doc/developers.html">developers(1)</a></li><li><a href="../doc/install.html">install(1)</a></li></ul>
-</div>
-<p id="footer">scripts &mdash; npm@1.2.30</p>
-<script>
-;(function () {
-var wrapper = document.getElementById("wrapper")
-var els = Array.prototype.slice.call(wrapper.getElementsByTagName("*"), 0)
- .filter(function (el) {
- return el.parentNode === wrapper
- && el.tagName.match(/H[1-6]/)
- && el.id
- })
-var l = 2
- , toc = document.createElement("ul")
-toc.innerHTML = els.map(function (el) {
- var i = el.tagName.charAt(1)
- , out = ""
- while (i > l) {
- out += "<ul>"
- l ++
- }
- while (i < l) {
- out += "</ul>"
- l --
- }
- out += "<li><a href='#" + el.id + "'>" +
- ( el.innerText || el.text || el.innerHTML)
- + "</a>"
- return out
-}).join("\n")
-toc.id = "toc"
-document.body.appendChild(toc)
-})()
-</script>
-</body></html>
diff --git a/deps/npm/html/doc/search.html b/deps/npm/html/doc/search.html
deleted file mode 100644
index 39eab1404..000000000
--- a/deps/npm/html/doc/search.html
+++ /dev/null
@@ -1,59 +0,0 @@
-<!doctype html>
-<html>
- <title>search</title>
- <meta http-equiv="content-type" value="text/html;utf-8">
- <link rel="stylesheet" type="text/css" href="../static/style.css">
-
- <body>
- <div id="wrapper">
-<h1><a href="../doc/search.html">search</a></h1> <p>Search for packages</p>
-
-<h2 id="SYNOPSIS">SYNOPSIS</h2>
-
-<pre><code>npm search [search terms ...]</code></pre>
-
-<h2 id="DESCRIPTION">DESCRIPTION</h2>
-
-<p>Search the registry for packages matching the search terms.</p>
-
-<p>If a term starts with <code>/</code>, then it&#39;s interpreted as a regular expression.
-A trailing <code>/</code> will be ignored in this case. (Note that many regular
-expression characters must be escaped or quoted in most shells.)</p>
-
-<h2 id="SEE-ALSO">SEE ALSO</h2>
-
-<ul><li><a href="../doc/registry.html">registry(1)</a></li><li><a href="../doc/config.html">config(1)</a></li><li><a href="../doc/view.html">view(1)</a></li></ul>
-</div>
-<p id="footer">search &mdash; npm@1.2.30</p>
-<script>
-;(function () {
-var wrapper = document.getElementById("wrapper")
-var els = Array.prototype.slice.call(wrapper.getElementsByTagName("*"), 0)
- .filter(function (el) {
- return el.parentNode === wrapper
- && el.tagName.match(/H[1-6]/)
- && el.id
- })
-var l = 2
- , toc = document.createElement("ul")
-toc.innerHTML = els.map(function (el) {
- var i = el.tagName.charAt(1)
- , out = ""
- while (i > l) {
- out += "<ul>"
- l ++
- }
- while (i < l) {
- out += "</ul>"
- l --
- }
- out += "<li><a href='#" + el.id + "'>" +
- ( el.innerText || el.text || el.innerHTML)
- + "</a>"
- return out
-}).join("\n")
-toc.id = "toc"
-document.body.appendChild(toc)
-})()
-</script>
-</body></html>
diff --git a/deps/npm/html/doc/semver.html b/deps/npm/html/doc/semver.html
deleted file mode 100644
index b906a6d2a..000000000
--- a/deps/npm/html/doc/semver.html
+++ /dev/null
@@ -1,139 +0,0 @@
-<!doctype html>
-<html>
- <title>semver</title>
- <meta http-equiv="content-type" value="text/html;utf-8">
- <link rel="stylesheet" type="text/css" href="../static/style.css">
-
- <body>
- <div id="wrapper">
-<h1><a href="../doc/semver.html">semver</a></h1> <p>The semantic versioner for npm</p>
-
-<h2 id="SYNOPSIS">SYNOPSIS</h2>
-
-<p>The npm semantic versioning utility.</p>
-
-<h2 id="DESCRIPTION">DESCRIPTION</h2>
-
-<p>As a node module:</p>
-
-<pre><code>$ npm install semver
-
-semver.valid(&#39;1.2.3&#39;) // &#39;1.2.3&#39;
-semver.valid(&#39;a.b.c&#39;) // null
-semver.clean(&#39; =v1.2.3 &#39;) // &#39;1.2.3&#39;
-semver.satisfies(&#39;1.2.3&#39;, &#39;1.x || &gt;=2.5.0 || 5.0.0 - 7.2.3&#39;) // true
-semver.gt(&#39;1.2.3&#39;, &#39;9.8.7&#39;) // false
-semver.lt(&#39;1.2.3&#39;, &#39;9.8.7&#39;) // true</code></pre>
-
-<p>As a command-line utility:</p>
-
-<pre><code>$ npm install semver -g
-$ semver -h
-
-Usage: semver -v &lt;version&gt; [-r &lt;range&gt;]
-Test if version(s) satisfy the supplied range(s),
-and sort them.
-
-Multiple versions or ranges may be supplied.
-
-Program exits successfully if any valid version satisfies
-all supplied ranges, and prints all satisfying versions.
-
-If no versions are valid, or ranges are not satisfied,
-then exits failure.
-
-Versions are printed in ascending order, so supplying
-multiple versions to the utility will just sort them.</code></pre>
-
-<h2 id="Versions">Versions</h2>
-
-<p>A version is the following things, in this order:</p>
-
-<ul><li>a number (Major)</li><li>a period</li><li>a number (minor)</li><li>a period</li><li>a number (patch)</li><li>OPTIONAL: a hyphen, followed by a number (build)</li><li>OPTIONAL: a collection of pretty much any non-whitespace characters
-(tag)</li></ul>
-
-<p>A leading <code>&quot;=&quot;</code> or <code>&quot;v&quot;</code> character is stripped off and ignored.</p>
-
-<h2 id="Comparisons">Comparisons</h2>
-
-<p>The ordering of versions is done using the following algorithm, given
-two versions and asked to find the greater of the two:</p>
-
-<ul><li>If the majors are numerically different, then take the one
-with a bigger major number. <code>2.3.4 &gt; 1.3.4</code></li><li>If the minors are numerically different, then take the one
-with the bigger minor number. <code>2.3.4 &gt; 2.2.4</code></li><li>If the patches are numerically different, then take the one with the
-bigger patch number. <code>2.3.4 &gt; 2.3.3</code></li><li>If only one of them has a build number, then take the one with the
-build number. <code>2.3.4-0 &gt; 2.3.4</code></li><li>If they both have build numbers, and the build numbers are numerically
-different, then take the one with the bigger build number.
-<code>2.3.4-10 &gt; 2.3.4-9</code></li><li>If only one of them has a tag, then take the one without the tag.
-<code>2.3.4 &gt; 2.3.4-beta</code></li><li>If they both have tags, then take the one with the lexicographically
-larger tag. <code>2.3.4-beta &gt; 2.3.4-alpha</code></li><li>At this point, they&#39;re equal.</li></ul>
-
-<h2 id="Ranges">Ranges</h2>
-
-<p>The following range styles are supported:</p>
-
-<ul><li><code>&gt;1.2.3</code> Greater than a specific version.</li><li><code>&lt;1.2.3</code> Less than</li><li><code>1.2.3 - 2.3.4</code> := <code>&gt;=1.2.3 &lt;=2.3.4</code></li><li><code>~1.2.3</code> := <code>&gt;=1.2.3 &lt;1.3.0</code></li><li><code>~1.2</code> := <code>&gt;=1.2.0 &lt;1.3.0</code></li><li><code>~1</code> := <code>&gt;=1.0.0 &lt;2.0.0</code></li><li><code>1.2.x</code> := <code>&gt;=1.2.0 &lt;1.3.0</code></li><li><code>1.x</code> := <code>&gt;=1.0.0 &lt;2.0.0</code></li></ul>
-
-<p>Ranges can be joined with either a space (which implies &quot;and&quot;) or a
-<code>||</code> (which implies &quot;or&quot;).</p>
-
-<h2 id="Functions">Functions</h2>
-
-<ul><li>valid(v): Return the parsed version, or null if it&#39;s not valid.</li><li>inc(v, release): Return the version incremented by the release type
-(major, minor, patch, or build), or null if it&#39;s not valid.</li></ul>
-
-<h3 id="Comparison">Comparison</h3>
-
-<ul><li>gt(v1, v2): <code>v1 &gt; v2</code></li><li>gte(v1, v2): <code>v1 &gt;= v2</code></li><li>lt(v1, v2): <code>v1 &lt; v2</code></li><li>lte(v1, v2): <code>v1 &lt;= v2</code></li><li>eq(v1, v2): <code>v1 == v2</code> This is true if they&#39;re logically equivalent,
-even if they&#39;re not the exact same string. You already know how to
-compare strings.</li><li>neq(v1, v2): <code>v1 != v2</code> The opposite of eq.</li><li>cmp(v1, comparator, v2): Pass in a comparison string, and it&#39;ll call
-the corresponding function above. <code>&quot;===&quot;</code> and <code>&quot;!==&quot;</code> do simple
-string comparison, but are included for completeness. Throws if an
-invalid comparison string is provided.</li><li>compare(v1, v2): Return 0 if v1 == v2, or 1 if v1 is greater, or -1 if
-v2 is greater. Sorts in ascending order if passed to Array.sort().</li><li>rcompare(v1, v2): The reverse of compare. Sorts an array of versions
-in descending order when passed to Array.sort().</li></ul>
-
-<h3 id="Ranges">Ranges</h3>
-
-<ul><li>validRange(range): Return the valid range or null if it&#39;s not valid</li><li>satisfies(version, range): Return true if the version satisfies the
-range.</li><li>maxSatisfying(versions, range): Return the highest version in the list
-that satisfies the range, or null if none of them do.</li></ul>
-
-<h2 id="SEE-ALSO">SEE ALSO</h2>
-
-<ul><li><a href="../doc/json.html">json(1)</a></li></ul>
-</div>
-<p id="footer">semver &mdash; npm@1.2.30</p>
-<script>
-;(function () {
-var wrapper = document.getElementById("wrapper")
-var els = Array.prototype.slice.call(wrapper.getElementsByTagName("*"), 0)
- .filter(function (el) {
- return el.parentNode === wrapper
- && el.tagName.match(/H[1-6]/)
- && el.id
- })
-var l = 2
- , toc = document.createElement("ul")
-toc.innerHTML = els.map(function (el) {
- var i = el.tagName.charAt(1)
- , out = ""
- while (i > l) {
- out += "<ul>"
- l ++
- }
- while (i < l) {
- out += "</ul>"
- l --
- }
- out += "<li><a href='#" + el.id + "'>" +
- ( el.innerText || el.text || el.innerHTML)
- + "</a>"
- return out
-}).join("\n")
-toc.id = "toc"
-document.body.appendChild(toc)
-})()
-</script>
-</body></html>
diff --git a/deps/npm/html/doc/shrinkwrap.html b/deps/npm/html/doc/shrinkwrap.html
deleted file mode 100644
index 40abed5f9..000000000
--- a/deps/npm/html/doc/shrinkwrap.html
+++ /dev/null
@@ -1,218 +0,0 @@
-<!doctype html>
-<html>
- <title>shrinkwrap</title>
- <meta http-equiv="content-type" value="text/html;utf-8">
- <link rel="stylesheet" type="text/css" href="../static/style.css">
-
- <body>
- <div id="wrapper">
-<h1><a href="../doc/shrinkwrap.html">shrinkwrap</a></h1> <p>Lock down dependency versions</p>
-
-<h2 id="SYNOPSIS">SYNOPSIS</h2>
-
-<pre><code>npm shrinkwrap</code></pre>
-
-<h2 id="DESCRIPTION">DESCRIPTION</h2>
-
-<p>This command locks down the versions of a package&#39;s dependencies so
-that you can control exactly which versions of each dependency will be
-used when your package is installed. The &quot;package.json&quot; file is still
-required if you want to use &quot;npm install&quot;.</p>
-
-<p>By default, &quot;npm install&quot; recursively installs the target&#39;s
-dependencies (as specified in package.json), choosing the latest
-available version that satisfies the dependency&#39;s semver pattern. In
-some situations, particularly when shipping software where each change
-is tightly managed, it&#39;s desirable to fully specify each version of
-each dependency recursively so that subsequent builds and deploys do
-not inadvertently pick up newer versions of a dependency that satisfy
-the semver pattern. Specifying specific semver patterns in each
-dependency&#39;s package.json would facilitate this, but that&#39;s not always
-possible or desirable, as when another author owns the npm package.
-It&#39;s also possible to check dependencies directly into source control,
-but that may be undesirable for other reasons.</p>
-
-<p>As an example, consider package A:</p>
-
-<pre><code>{
- &quot;name&quot;: &quot;A&quot;,
- &quot;version&quot;: &quot;0.1.0&quot;,
- &quot;dependencies&quot;: {
- &quot;B&quot;: &quot;&lt;0.1.0&quot;
- }
-}</code></pre>
-
-<p>package B:</p>
-
-<pre><code>{
- &quot;name&quot;: &quot;B&quot;,
- &quot;version&quot;: &quot;0.0.1&quot;,
- &quot;dependencies&quot;: {
- &quot;C&quot;: &quot;&lt;0.1.0&quot;
- }
-}</code></pre>
-
-<p>and package C:</p>
-
-<pre><code>{
- &quot;name&quot;: &quot;C,
- &quot;version&quot;: &quot;0.0.1&quot;
-}</code></pre>
-
-<p>If these are the only versions of A, B, and C available in the
-registry, then a normal &quot;npm install A&quot; will install:</p>
-
-<pre><code>A@0.1.0
-`-- B@0.0.1
- `-- C@0.0.1</code></pre>
-
-<p>However, if B@0.0.2 is published, then a fresh &quot;npm install A&quot; will
-install:</p>
-
-<pre><code>A@0.1.0
-`-- B@0.0.2
- `-- C@0.0.1</code></pre>
-
-<p>assuming the new version did not modify B&#39;s dependencies. Of course,
-the new version of B could include a new version of C and any number
-of new dependencies. If such changes are undesirable, the author of A
-could specify a dependency on B@0.0.1. However, if A&#39;s author and B&#39;s
-author are not the same person, there&#39;s no way for A&#39;s author to say
-that he or she does not want to pull in newly published versions of C
-when B hasn&#39;t changed at all.</p>
-
-<p>In this case, A&#39;s author can run</p>
-
-<pre><code>npm shrinkwrap</code></pre>
-
-<p>This generates npm-shrinkwrap.json, which will look something like this:</p>
-
-<pre><code>{
- &quot;name&quot;: &quot;A&quot;,
- &quot;version&quot;: &quot;0.1.0&quot;,
- &quot;dependencies&quot;: {
- &quot;B&quot;: {
- &quot;version&quot;: &quot;0.0.1&quot;,
- &quot;dependencies&quot;: {
- &quot;C&quot;: {
- &quot;version&quot;: &quot;0.1.0&quot;
- }
- }
- }
- }
-}</code></pre>
-
-<p>The shrinkwrap command has locked down the dependencies based on
-what&#39;s currently installed in node_modules. When &quot;npm install&quot;
-installs a package with a npm-shrinkwrap.json file in the package
-root, the shrinkwrap file (rather than package.json files) completely
-drives the installation of that package and all of its dependencies
-(recursively). So now the author publishes A@0.1.0, and subsequent
-installs of this package will use B@0.0.1 and C@0.1.0, regardless the
-dependencies and versions listed in A&#39;s, B&#39;s, and C&#39;s package.json
-files.</p>
-
-<h3 id="Using-shrinkwrapped-packages">Using shrinkwrapped packages</h3>
-
-<p>Using a shrinkwrapped package is no different than using any other
-package: you can &quot;npm install&quot; it by hand, or add a dependency to your
-package.json file and &quot;npm install&quot; it.</p>
-
-<h3 id="Building-shrinkwrapped-packages">Building shrinkwrapped packages</h3>
-
-<p>To shrinkwrap an existing package:</p>
-
-<ol><li>Run &quot;npm install&quot; in the package root to install the current
-versions of all dependencies.</li><li>Validate that the package works as expected with these versions.</li><li>Run &quot;npm shrinkwrap&quot;, add npm-shrinkwrap.json to git, and publish
-your package.</li></ol>
-
-<p>To add or update a dependency in a shrinkwrapped package:</p>
-
-<ol><li>Run &quot;npm install&quot; in the package root to install the current
-versions of all dependencies.</li><li>Add or update dependencies. &quot;npm install&quot; each new or updated
-package individually and then update package.json. Note that they
-must be explicitly named in order to be installed: running <code>npm
-install</code> with no arguments will merely reproduce the existing
-shrinkwrap.</li><li>Validate that the package works as expected with the new
-dependencies.</li><li>Run &quot;npm shrinkwrap&quot;, commit the new npm-shrinkwrap.json, and
-publish your package.</li></ol>
-
-<p>You can use <a href="../doc/outdated.html">outdated(1)</a> to view dependencies with newer versions
-available.</p>
-
-<h3 id="Other-Notes">Other Notes</h3>
-
-<p>A shrinkwrap file must be consistent with the package&#39;s package.json
-file. &quot;npm shrinkwrap&quot; will fail if required dependencies are not
-already installed, since that would result in a shrinkwrap that
-wouldn&#39;t actually work. Similarly, the command will fail if there are
-extraneous packages (not referenced by package.json), since that would
-indicate that package.json is not correct.</p>
-
-<p>Since &quot;npm shrinkwrap&quot; is intended to lock down your dependencies for
-production use, <code>devDependencies</code> will not be included unless you
-explicitly set the <code>--dev</code> flag when you run <code>npm shrinkwrap</code>. If
-installed <code>devDependencies</code> are excluded, then npm will print a
-warning. If you want them to be installed with your module by
-default, please consider adding them to <code>dependencies</code> instead.</p>
-
-<p>If shrinkwrapped package A depends on shrinkwrapped package B, B&#39;s
-shrinkwrap will not be used as part of the installation of A. However,
-because A&#39;s shrinkwrap is constructed from a valid installation of B
-and recursively specifies all dependencies, the contents of B&#39;s
-shrinkwrap will implicitly be included in A&#39;s shrinkwrap.</p>
-
-<h3 id="Caveats">Caveats</h3>
-
-<p>Shrinkwrap files only lock down package versions, not actual package
-contents. While discouraged, a package author can republish an
-existing version of a package, causing shrinkwrapped packages using
-that version to pick up different code than they were before. If you
-want to avoid any risk that a byzantine author replaces a package
-you&#39;re using with code that breaks your application, you could modify
-the shrinkwrap file to use git URL references rather than version
-numbers so that npm always fetches all packages from git.</p>
-
-<p>If you wish to lock down the specific bytes included in a package, for
-example to have 100% confidence in being able to reproduce a
-deployment or build, then you ought to check your dependencies into
-source control, or pursue some other mechanism that can verify
-contents rather than versions.</p>
-
-<h2 id="SEE-ALSO">SEE ALSO</h2>
-
-<ul><li><a href="../doc/install.html">install(1)</a></li><li><a href="../doc/json.html">json(1)</a></li><li><a href="../doc/list.html">list(1)</a></li></ul>
-</div>
-<p id="footer">shrinkwrap &mdash; npm@1.2.30</p>
-<script>
-;(function () {
-var wrapper = document.getElementById("wrapper")
-var els = Array.prototype.slice.call(wrapper.getElementsByTagName("*"), 0)
- .filter(function (el) {
- return el.parentNode === wrapper
- && el.tagName.match(/H[1-6]/)
- && el.id
- })
-var l = 2
- , toc = document.createElement("ul")
-toc.innerHTML = els.map(function (el) {
- var i = el.tagName.charAt(1)
- , out = ""
- while (i > l) {
- out += "<ul>"
- l ++
- }
- while (i < l) {
- out += "</ul>"
- l --
- }
- out += "<li><a href='#" + el.id + "'>" +
- ( el.innerText || el.text || el.innerHTML)
- + "</a>"
- return out
-}).join("\n")
-toc.id = "toc"
-document.body.appendChild(toc)
-})()
-</script>
-</body></html>
diff --git a/deps/npm/html/doc/star.html b/deps/npm/html/doc/star.html
deleted file mode 100644
index 99b87fd06..000000000
--- a/deps/npm/html/doc/star.html
+++ /dev/null
@@ -1,61 +0,0 @@
-<!doctype html>
-<html>
- <title>star</title>
- <meta http-equiv="content-type" value="text/html;utf-8">
- <link rel="stylesheet" type="text/css" href="../static/style.css">
-
- <body>
- <div id="wrapper">
-<h1><a href="../doc/star.html">star</a></h1> <p>Mark your favorite packages</p>
-
-<h2 id="SYNOPSIS">SYNOPSIS</h2>
-
-<pre><code>npm star &lt;pkgname&gt; [&lt;pkg&gt;, ...]
-npm unstar &lt;pkgname&gt; [&lt;pkg&gt;, ...]</code></pre>
-
-<h2 id="DESCRIPTION">DESCRIPTION</h2>
-
-<p>&quot;Starring&quot; a package means that you have some interest in it. It&#39;s
-a vaguely positive way to show that you care.</p>
-
-<p>&quot;Unstarring&quot; is the same thing, but in reverse.</p>
-
-<p>It&#39;s a boolean thing. Starring repeatedly has no additional effect.</p>
-
-<h2 id="SEE-ALSO">SEE ALSO</h2>
-
-<ul><li><a href="../doc/view.html">view(1)</a></li><li><a href="../doc/whoami.html">whoami(1)</a></li><li><a href="../doc/adduser.html">adduser(1)</a></li></ul>
-</div>
-<p id="footer">star &mdash; npm@1.2.30</p>
-<script>
-;(function () {
-var wrapper = document.getElementById("wrapper")
-var els = Array.prototype.slice.call(wrapper.getElementsByTagName("*"), 0)
- .filter(function (el) {
- return el.parentNode === wrapper
- && el.tagName.match(/H[1-6]/)
- && el.id
- })
-var l = 2
- , toc = document.createElement("ul")
-toc.innerHTML = els.map(function (el) {
- var i = el.tagName.charAt(1)
- , out = ""
- while (i > l) {
- out += "<ul>"
- l ++
- }
- while (i < l) {
- out += "</ul>"
- l --
- }
- out += "<li><a href='#" + el.id + "'>" +
- ( el.innerText || el.text || el.innerHTML)
- + "</a>"
- return out
-}).join("\n")
-toc.id = "toc"
-document.body.appendChild(toc)
-})()
-</script>
-</body></html>
diff --git a/deps/npm/html/doc/stars.html b/deps/npm/html/doc/stars.html
deleted file mode 100644
index 6c183aa7b..000000000
--- a/deps/npm/html/doc/stars.html
+++ /dev/null
@@ -1,60 +0,0 @@
-<!doctype html>
-<html>
- <title>stars</title>
- <meta http-equiv="content-type" value="text/html;utf-8">
- <link rel="stylesheet" type="text/css" href="../static/style.css">
-
- <body>
- <div id="wrapper">
-<h1><a href="../doc/stars.html">stars</a></h1> <p>View packages marked as favorites</p>
-
-<h2 id="SYNOPSIS">SYNOPSIS</h2>
-
-<pre><code>npm stars
-npm stars [username]</code></pre>
-
-<h2 id="DESCRIPTION">DESCRIPTION</h2>
-
-<p>If you have starred a lot of neat things and want to find them again
-quickly this command lets you do just that.</p>
-
-<p>You may also want to see your friend&#39;s favorite packages, in this case
-you will most certainly enjoy this command.</p>
-
-<h2 id="SEE-ALSO">SEE ALSO</h2>
-
-<ul><li><a href="../doc/star.html">star(1)</a></li><li><a href="../doc/view.html">view(1)</a></li><li><a href="../doc/whoami.html">whoami(1)</a></li><li><a href="../doc/adduser.html">adduser(1)</a></li></ul>
-</div>
-<p id="footer">stars &mdash; npm@1.2.30</p>
-<script>
-;(function () {
-var wrapper = document.getElementById("wrapper")
-var els = Array.prototype.slice.call(wrapper.getElementsByTagName("*"), 0)
- .filter(function (el) {
- return el.parentNode === wrapper
- && el.tagName.match(/H[1-6]/)
- && el.id
- })
-var l = 2
- , toc = document.createElement("ul")
-toc.innerHTML = els.map(function (el) {
- var i = el.tagName.charAt(1)
- , out = ""
- while (i > l) {
- out += "<ul>"
- l ++
- }
- while (i < l) {
- out += "</ul>"
- l --
- }
- out += "<li><a href='#" + el.id + "'>" +
- ( el.innerText || el.text || el.innerHTML)
- + "</a>"
- return out
-}).join("\n")
-toc.id = "toc"
-document.body.appendChild(toc)
-})()
-</script>
-</body></html>
diff --git a/deps/npm/html/doc/start.html b/deps/npm/html/doc/start.html
deleted file mode 100644
index 2616b255f..000000000
--- a/deps/npm/html/doc/start.html
+++ /dev/null
@@ -1,55 +0,0 @@
-<!doctype html>
-<html>
- <title>start</title>
- <meta http-equiv="content-type" value="text/html;utf-8">
- <link rel="stylesheet" type="text/css" href="../static/style.css">
-
- <body>
- <div id="wrapper">
-<h1><a href="../doc/start.html">start</a></h1> <p>Start a package</p>
-
-<h2 id="SYNOPSIS">SYNOPSIS</h2>
-
-<pre><code>npm start &lt;name&gt;</code></pre>
-
-<h2 id="DESCRIPTION">DESCRIPTION</h2>
-
-<p>This runs a package&#39;s &quot;start&quot; script, if one was provided.</p>
-
-<h2 id="SEE-ALSO">SEE ALSO</h2>
-
-<ul><li><a href="../doc/run-script.html">run-script(1)</a></li><li><a href="../doc/scripts.html">scripts(1)</a></li><li><a href="../doc/test.html">test(1)</a></li><li><a href="../doc/restart.html">restart(1)</a></li><li><a href="../doc/stop.html">stop(1)</a></li></ul>
-</div>
-<p id="footer">start &mdash; npm@1.2.30</p>
-<script>
-;(function () {
-var wrapper = document.getElementById("wrapper")
-var els = Array.prototype.slice.call(wrapper.getElementsByTagName("*"), 0)
- .filter(function (el) {
- return el.parentNode === wrapper
- && el.tagName.match(/H[1-6]/)
- && el.id
- })
-var l = 2
- , toc = document.createElement("ul")
-toc.innerHTML = els.map(function (el) {
- var i = el.tagName.charAt(1)
- , out = ""
- while (i > l) {
- out += "<ul>"
- l ++
- }
- while (i < l) {
- out += "</ul>"
- l --
- }
- out += "<li><a href='#" + el.id + "'>" +
- ( el.innerText || el.text || el.innerHTML)
- + "</a>"
- return out
-}).join("\n")
-toc.id = "toc"
-document.body.appendChild(toc)
-})()
-</script>
-</body></html>
diff --git a/deps/npm/html/doc/stop.html b/deps/npm/html/doc/stop.html
deleted file mode 100644
index a06df19e3..000000000
--- a/deps/npm/html/doc/stop.html
+++ /dev/null
@@ -1,55 +0,0 @@
-<!doctype html>
-<html>
- <title>stop</title>
- <meta http-equiv="content-type" value="text/html;utf-8">
- <link rel="stylesheet" type="text/css" href="../static/style.css">
-
- <body>
- <div id="wrapper">
-<h1><a href="../doc/stop.html">stop</a></h1> <p>Stop a package</p>
-
-<h2 id="SYNOPSIS">SYNOPSIS</h2>
-
-<pre><code>npm stop &lt;name&gt;</code></pre>
-
-<h2 id="DESCRIPTION">DESCRIPTION</h2>
-
-<p>This runs a package&#39;s &quot;stop&quot; script, if one was provided.</p>
-
-<h2 id="SEE-ALSO">SEE ALSO</h2>
-
-<ul><li><a href="../doc/run-script.html">run-script(1)</a></li><li><a href="../doc/scripts.html">scripts(1)</a></li><li><a href="../doc/test.html">test(1)</a></li><li><a href="../doc/start.html">start(1)</a></li><li><a href="../doc/restart.html">restart(1)</a></li></ul>
-</div>
-<p id="footer">stop &mdash; npm@1.2.30</p>
-<script>
-;(function () {
-var wrapper = document.getElementById("wrapper")
-var els = Array.prototype.slice.call(wrapper.getElementsByTagName("*"), 0)
- .filter(function (el) {
- return el.parentNode === wrapper
- && el.tagName.match(/H[1-6]/)
- && el.id
- })
-var l = 2
- , toc = document.createElement("ul")
-toc.innerHTML = els.map(function (el) {
- var i = el.tagName.charAt(1)
- , out = ""
- while (i > l) {
- out += "<ul>"
- l ++
- }
- while (i < l) {
- out += "</ul>"
- l --
- }
- out += "<li><a href='#" + el.id + "'>" +
- ( el.innerText || el.text || el.innerHTML)
- + "</a>"
- return out
-}).join("\n")
-toc.id = "toc"
-document.body.appendChild(toc)
-})()
-</script>
-</body></html>
diff --git a/deps/npm/html/doc/submodule.html b/deps/npm/html/doc/submodule.html
deleted file mode 100644
index 98063d1fc..000000000
--- a/deps/npm/html/doc/submodule.html
+++ /dev/null
@@ -1,68 +0,0 @@
-<!doctype html>
-<html>
- <title>submodule</title>
- <meta http-equiv="content-type" value="text/html;utf-8">
- <link rel="stylesheet" type="text/css" href="../static/style.css">
-
- <body>
- <div id="wrapper">
-<h1><a href="../doc/submodule.html">submodule</a></h1> <p>Add a package as a git submodule</p>
-
-<h2 id="SYNOPSIS">SYNOPSIS</h2>
-
-<pre><code>npm submodule &lt;pkg&gt;</code></pre>
-
-<h2 id="DESCRIPTION">DESCRIPTION</h2>
-
-<p>If the specified package has a git repository url in its package.json
-description, then this command will add it as a git submodule at
-<code>node_modules/&lt;pkg name&gt;</code>.</p>
-
-<p>This is a convenience only. From then on, it&#39;s up to you to manage
-updates by using the appropriate git commands. npm will stubbornly
-refuse to update, modify, or remove anything with a <code>.git</code> subfolder
-in it.</p>
-
-<p>This command also does not install missing dependencies, if the package
-does not include them in its git repository. If <code>npm ls</code> reports that
-things are missing, you can either install, link, or submodule them yourself,
-or you can do <code>npm explore &lt;pkgname&gt; -- npm install</code> to install the
-dependencies into the submodule folder.</p>
-
-<h2 id="SEE-ALSO">SEE ALSO</h2>
-
-<ul><li><a href="../doc/json.html">json(1)</a></li><li>git help submodule</li></ul>
-</div>
-<p id="footer">submodule &mdash; npm@1.2.30</p>
-<script>
-;(function () {
-var wrapper = document.getElementById("wrapper")
-var els = Array.prototype.slice.call(wrapper.getElementsByTagName("*"), 0)
- .filter(function (el) {
- return el.parentNode === wrapper
- && el.tagName.match(/H[1-6]/)
- && el.id
- })
-var l = 2
- , toc = document.createElement("ul")
-toc.innerHTML = els.map(function (el) {
- var i = el.tagName.charAt(1)
- , out = ""
- while (i > l) {
- out += "<ul>"
- l ++
- }
- while (i < l) {
- out += "</ul>"
- l --
- }
- out += "<li><a href='#" + el.id + "'>" +
- ( el.innerText || el.text || el.innerHTML)
- + "</a>"
- return out
-}).join("\n")
-toc.id = "toc"
-document.body.appendChild(toc)
-})()
-</script>
-</body></html>
diff --git a/deps/npm/html/doc/tag.html b/deps/npm/html/doc/tag.html
deleted file mode 100644
index d276fe4c3..000000000
--- a/deps/npm/html/doc/tag.html
+++ /dev/null
@@ -1,56 +0,0 @@
-<!doctype html>
-<html>
- <title>tag</title>
- <meta http-equiv="content-type" value="text/html;utf-8">
- <link rel="stylesheet" type="text/css" href="../static/style.css">
-
- <body>
- <div id="wrapper">
-<h1><a href="../doc/tag.html">tag</a></h1> <p>Tag a published version</p>
-
-<h2 id="SYNOPSIS">SYNOPSIS</h2>
-
-<pre><code>npm tag &lt;name&gt;@&lt;version&gt; [&lt;tag&gt;]</code></pre>
-
-<h2 id="DESCRIPTION">DESCRIPTION</h2>
-
-<p>Tags the specified version of the package with the specified tag, or the
-<code>--tag</code> config if not specified.</p>
-
-<h2 id="SEE-ALSO">SEE ALSO</h2>
-
-<ul><li><a href="../doc/publish.html">publish(1)</a></li><li><a href="../doc/registry.html">registry(1)</a></li><li><a href="../doc/config.html">config(1)</a></li></ul>
-</div>
-<p id="footer">tag &mdash; npm@1.2.30</p>
-<script>
-;(function () {
-var wrapper = document.getElementById("wrapper")
-var els = Array.prototype.slice.call(wrapper.getElementsByTagName("*"), 0)
- .filter(function (el) {
- return el.parentNode === wrapper
- && el.tagName.match(/H[1-6]/)
- && el.id
- })
-var l = 2
- , toc = document.createElement("ul")
-toc.innerHTML = els.map(function (el) {
- var i = el.tagName.charAt(1)
- , out = ""
- while (i > l) {
- out += "<ul>"
- l ++
- }
- while (i < l) {
- out += "</ul>"
- l --
- }
- out += "<li><a href='#" + el.id + "'>" +
- ( el.innerText || el.text || el.innerHTML)
- + "</a>"
- return out
-}).join("\n")
-toc.id = "toc"
-document.body.appendChild(toc)
-})()
-</script>
-</body></html>
diff --git a/deps/npm/html/doc/test.html b/deps/npm/html/doc/test.html
deleted file mode 100644
index d589ffaab..000000000
--- a/deps/npm/html/doc/test.html
+++ /dev/null
@@ -1,58 +0,0 @@
-<!doctype html>
-<html>
- <title>test</title>
- <meta http-equiv="content-type" value="text/html;utf-8">
- <link rel="stylesheet" type="text/css" href="../static/style.css">
-
- <body>
- <div id="wrapper">
-<h1><a href="../doc/test.html">test</a></h1> <p>Test a package</p>
-
-<h2 id="SYNOPSIS">SYNOPSIS</h2>
-
-<pre><code> npm test &lt;name&gt;</code></pre>
-
-<h2 id="DESCRIPTION">DESCRIPTION</h2>
-
-<p>This runs a package&#39;s &quot;test&quot; script, if one was provided.</p>
-
-<p>To run tests as a condition of installation, set the <code>npat</code> config to
-true.</p>
-
-<h2 id="SEE-ALSO">SEE ALSO</h2>
-
-<ul><li><a href="../doc/run-script.html">run-script(1)</a></li><li><a href="../doc/scripts.html">scripts(1)</a></li><li><a href="../doc/start.html">start(1)</a></li><li><a href="../doc/restart.html">restart(1)</a></li><li><a href="../doc/stop.html">stop(1)</a></li></ul>
-</div>
-<p id="footer">test &mdash; npm@1.2.30</p>
-<script>
-;(function () {
-var wrapper = document.getElementById("wrapper")
-var els = Array.prototype.slice.call(wrapper.getElementsByTagName("*"), 0)
- .filter(function (el) {
- return el.parentNode === wrapper
- && el.tagName.match(/H[1-6]/)
- && el.id
- })
-var l = 2
- , toc = document.createElement("ul")
-toc.innerHTML = els.map(function (el) {
- var i = el.tagName.charAt(1)
- , out = ""
- while (i > l) {
- out += "<ul>"
- l ++
- }
- while (i < l) {
- out += "</ul>"
- l --
- }
- out += "<li><a href='#" + el.id + "'>" +
- ( el.innerText || el.text || el.innerHTML)
- + "</a>"
- return out
-}).join("\n")
-toc.id = "toc"
-document.body.appendChild(toc)
-})()
-</script>
-</body></html>
diff --git a/deps/npm/html/doc/uninstall.html b/deps/npm/html/doc/uninstall.html
deleted file mode 100644
index eb1717ce6..000000000
--- a/deps/npm/html/doc/uninstall.html
+++ /dev/null
@@ -1,57 +0,0 @@
-<!doctype html>
-<html>
- <title>uninstall</title>
- <meta http-equiv="content-type" value="text/html;utf-8">
- <link rel="stylesheet" type="text/css" href="../static/style.css">
-
- <body>
- <div id="wrapper">
-<h1><a href="../doc/rm.html">rm</a></h1> <p>Remove a package</p>
-
-<h2 id="SYNOPSIS">SYNOPSIS</h2>
-
-<pre><code>npm rm &lt;name&gt;
-npm uninstall &lt;name&gt;</code></pre>
-
-<h2 id="DESCRIPTION">DESCRIPTION</h2>
-
-<p>This uninstalls a package, completely removing everything npm installed
-on its behalf.</p>
-
-<h2 id="SEE-ALSO">SEE ALSO</h2>
-
-<ul><li><a href="../doc/prune.html">prune(1)</a></li><li><a href="../doc/install.html">install(1)</a></li><li><a href="../doc/folders.html">folders(1)</a></li><li><a href="../doc/config.html">config(1)</a></li></ul>
-</div>
-<p id="footer">uninstall &mdash; npm@1.2.30</p>
-<script>
-;(function () {
-var wrapper = document.getElementById("wrapper")
-var els = Array.prototype.slice.call(wrapper.getElementsByTagName("*"), 0)
- .filter(function (el) {
- return el.parentNode === wrapper
- && el.tagName.match(/H[1-6]/)
- && el.id
- })
-var l = 2
- , toc = document.createElement("ul")
-toc.innerHTML = els.map(function (el) {
- var i = el.tagName.charAt(1)
- , out = ""
- while (i > l) {
- out += "<ul>"
- l ++
- }
- while (i < l) {
- out += "</ul>"
- l --
- }
- out += "<li><a href='#" + el.id + "'>" +
- ( el.innerText || el.text || el.innerHTML)
- + "</a>"
- return out
-}).join("\n")
-toc.id = "toc"
-document.body.appendChild(toc)
-})()
-</script>
-</body></html>
diff --git a/deps/npm/html/doc/unpublish.html b/deps/npm/html/doc/unpublish.html
deleted file mode 100644
index 17f4d08ed..000000000
--- a/deps/npm/html/doc/unpublish.html
+++ /dev/null
@@ -1,69 +0,0 @@
-<!doctype html>
-<html>
- <title>unpublish</title>
- <meta http-equiv="content-type" value="text/html;utf-8">
- <link rel="stylesheet" type="text/css" href="../static/style.css">
-
- <body>
- <div id="wrapper">
-<h1><a href="../doc/unpublish.html">unpublish</a></h1> <p>Remove a package from the registry</p>
-
-<h2 id="SYNOPSIS">SYNOPSIS</h2>
-
-<pre><code>npm unpublish &lt;name&gt;[@&lt;version&gt;]</code></pre>
-
-<h2 id="WARNING">WARNING</h2>
-
-<p><strong>It is generally considered bad behavior to remove versions of a library
-that others are depending on!</strong></p>
-
-<p>Consider using the <code>deprecate</code> command
-instead, if your intent is to encourage users to upgrade.</p>
-
-<p>There is plenty of room on the registry.</p>
-
-<h2 id="DESCRIPTION">DESCRIPTION</h2>
-
-<p>This removes a package version from the registry, deleting its
-entry and removing the tarball.</p>
-
-<p>If no version is specified, or if all versions are removed then
-the root package entry is removed from the registry entirely.</p>
-
-<h2 id="SEE-ALSO">SEE ALSO</h2>
-
-<ul><li><a href="../doc/deprecate.html">deprecate(1)</a></li><li><a href="../doc/publish.html">publish(1)</a></li><li><a href="../doc/registry.html">registry(1)</a></li><li><a href="../doc/adduser.html">adduser(1)</a></li><li><a href="../doc/owner.html">owner(1)</a></li></ul>
-</div>
-<p id="footer">unpublish &mdash; npm@1.2.30</p>
-<script>
-;(function () {
-var wrapper = document.getElementById("wrapper")
-var els = Array.prototype.slice.call(wrapper.getElementsByTagName("*"), 0)
- .filter(function (el) {
- return el.parentNode === wrapper
- && el.tagName.match(/H[1-6]/)
- && el.id
- })
-var l = 2
- , toc = document.createElement("ul")
-toc.innerHTML = els.map(function (el) {
- var i = el.tagName.charAt(1)
- , out = ""
- while (i > l) {
- out += "<ul>"
- l ++
- }
- while (i < l) {
- out += "</ul>"
- l --
- }
- out += "<li><a href='#" + el.id + "'>" +
- ( el.innerText || el.text || el.innerHTML)
- + "</a>"
- return out
-}).join("\n")
-toc.id = "toc"
-document.body.appendChild(toc)
-})()
-</script>
-</body></html>
diff --git a/deps/npm/html/doc/update.html b/deps/npm/html/doc/update.html
deleted file mode 100644
index 451bfe818..000000000
--- a/deps/npm/html/doc/update.html
+++ /dev/null
@@ -1,61 +0,0 @@
-<!doctype html>
-<html>
- <title>update</title>
- <meta http-equiv="content-type" value="text/html;utf-8">
- <link rel="stylesheet" type="text/css" href="../static/style.css">
-
- <body>
- <div id="wrapper">
-<h1><a href="../doc/update.html">update</a></h1> <p>Update a package</p>
-
-<h2 id="SYNOPSIS">SYNOPSIS</h2>
-
-<pre><code>npm update [-g] [&lt;name&gt; [&lt;name&gt; ...]]</code></pre>
-
-<h2 id="DESCRIPTION">DESCRIPTION</h2>
-
-<p>This command will update all the packages listed to the latest version
-(specified by the <code>tag</code> config).</p>
-
-<p>It will also install missing packages.</p>
-
-<p>If the <code>-g</code> flag is specified, this command will update globally installed packages.
-If no package name is specified, all packages in the specified location (global or local) will be updated.</p>
-
-<h2 id="SEE-ALSO">SEE ALSO</h2>
-
-<ul><li><a href="../doc/install.html">install(1)</a></li><li><a href="../doc/outdated.html">outdated(1)</a></li><li><a href="../doc/registry.html">registry(1)</a></li><li><a href="../doc/folders.html">folders(1)</a></li><li><a href="../doc/list.html">list(1)</a></li></ul>
-</div>
-<p id="footer">update &mdash; npm@1.2.30</p>
-<script>
-;(function () {
-var wrapper = document.getElementById("wrapper")
-var els = Array.prototype.slice.call(wrapper.getElementsByTagName("*"), 0)
- .filter(function (el) {
- return el.parentNode === wrapper
- && el.tagName.match(/H[1-6]/)
- && el.id
- })
-var l = 2
- , toc = document.createElement("ul")
-toc.innerHTML = els.map(function (el) {
- var i = el.tagName.charAt(1)
- , out = ""
- while (i > l) {
- out += "<ul>"
- l ++
- }
- while (i < l) {
- out += "</ul>"
- l --
- }
- out += "<li><a href='#" + el.id + "'>" +
- ( el.innerText || el.text || el.innerHTML)
- + "</a>"
- return out
-}).join("\n")
-toc.id = "toc"
-document.body.appendChild(toc)
-})()
-</script>
-</body></html>
diff --git a/deps/npm/html/doc/version.html b/deps/npm/html/doc/version.html
deleted file mode 100644
index a00291e98..000000000
--- a/deps/npm/html/doc/version.html
+++ /dev/null
@@ -1,84 +0,0 @@
-<!doctype html>
-<html>
- <title>version</title>
- <meta http-equiv="content-type" value="text/html;utf-8">
- <link rel="stylesheet" type="text/css" href="../static/style.css">
-
- <body>
- <div id="wrapper">
-<h1><a href="../doc/version.html">version</a></h1> <p>Bump a package version</p>
-
-<h2 id="SYNOPSIS">SYNOPSIS</h2>
-
-<pre><code>npm version [&lt;newversion&gt; | major | minor | patch | build]</code></pre>
-
-<h2 id="DESCRIPTION">DESCRIPTION</h2>
-
-<p>Run this in a package directory to bump the version and write the new
-data back to the package.json file.</p>
-
-<p>The <code>newversion</code> argument should be a valid semver string, <em>or</em> a valid
-second argument to semver.inc (one of &quot;build&quot;, &quot;patch&quot;, &quot;minor&quot;, or
-&quot;major&quot;). In the second case, the existing version will be incremented
-by 1 in the specified field.</p>
-
-<p>If run in a git repo, it will also create a version commit and tag, and
-fail if the repo is not clean.</p>
-
-<p>If supplied with <code>--message</code> (shorthand: <code>-m</code>) config option, npm will
-use it as a commit message when creating a version commit. If the
-<code>message</code> config contains <code>%s</code> then that will be replaced with the
-resulting version number. For example:</p>
-
-<pre><code>npm version patch -m &quot;Upgrade to %s for reasons&quot;</code></pre>
-
-<p>If the <code>sign-git-tag</code> config is set, then the tag will be signed using
-the <code>-s</code> flag to git. Note that you must have a default GPG key set up
-in your git config for this to work properly. For example:</p>
-
-<pre><code>$ npm config set sign-git-tag true
-$ npm version patch
-
-You need a passphrase to unlock the secret key for
-user: &quot;isaacs (http://blog.izs.me/) &lt;i@izs.me&gt;&quot;
-2048-bit RSA key, ID 6C481CF6, created 2010-08-31
-
-Enter passphrase:</code></pre>
-
-<h2 id="SEE-ALSO">SEE ALSO</h2>
-
-<ul><li><a href="../doc/init.html">init(1)</a></li><li><a href="../doc/json.html">json(1)</a></li><li><a href="../doc/semver.html">semver(1)</a></li></ul>
-</div>
-<p id="footer">version &mdash; npm@1.2.30</p>
-<script>
-;(function () {
-var wrapper = document.getElementById("wrapper")
-var els = Array.prototype.slice.call(wrapper.getElementsByTagName("*"), 0)
- .filter(function (el) {
- return el.parentNode === wrapper
- && el.tagName.match(/H[1-6]/)
- && el.id
- })
-var l = 2
- , toc = document.createElement("ul")
-toc.innerHTML = els.map(function (el) {
- var i = el.tagName.charAt(1)
- , out = ""
- while (i > l) {
- out += "<ul>"
- l ++
- }
- while (i < l) {
- out += "</ul>"
- l --
- }
- out += "<li><a href='#" + el.id + "'>" +
- ( el.innerText || el.text || el.innerHTML)
- + "</a>"
- return out
-}).join("\n")
-toc.id = "toc"
-document.body.appendChild(toc)
-})()
-</script>
-</body></html>
diff --git a/deps/npm/html/doc/view.html b/deps/npm/html/doc/view.html
deleted file mode 100644
index da6fa00d8..000000000
--- a/deps/npm/html/doc/view.html
+++ /dev/null
@@ -1,125 +0,0 @@
-<!doctype html>
-<html>
- <title>view</title>
- <meta http-equiv="content-type" value="text/html;utf-8">
- <link rel="stylesheet" type="text/css" href="../static/style.css">
-
- <body>
- <div id="wrapper">
-<h1><a href="../doc/view.html">view</a></h1> <p>View registry info</p>
-
-<h2 id="SYNOPSIS">SYNOPSIS</h2>
-
-<pre><code>npm view &lt;name&gt;[@&lt;version&gt;] [&lt;field&gt;[.&lt;subfield&gt;]...]</code></pre>
-
-<h2 id="DESCRIPTION">DESCRIPTION</h2>
-
-<p>This command shows data about a package and prints it to the stream
-referenced by the <code>outfd</code> config, which defaults to stdout.</p>
-
-<p>To show the package registry entry for the <code>connect</code> package, you can do
-this:</p>
-
-<pre><code>npm view connect</code></pre>
-
-<p>The default version is &quot;latest&quot; if unspecified.</p>
-
-<p>Field names can be specified after the package descriptor.
-For example, to show the dependencies of the <code>ronn</code> package at version
-0.3.5, you could do the following:</p>
-
-<pre><code>npm view ronn@0.3.5 dependencies</code></pre>
-
-<p>You can view child field by separating them with a period.
-To view the git repository URL for the latest version of npm, you could
-do this:</p>
-
-<pre><code>npm view npm repository.url</code></pre>
-
-<p>This makes it easy to view information about a dependency with a bit of
-shell scripting. For example, to view all the data about the version of
-opts that ronn depends on, you can do this:</p>
-
-<pre><code>npm view opts@$(npm view ronn dependencies.opts)</code></pre>
-
-<p>For fields that are arrays, requesting a non-numeric field will return
-all of the values from the objects in the list. For example, to get all
-the contributor names for the &quot;express&quot; project, you can do this:</p>
-
-<pre><code>npm view express contributors.email</code></pre>
-
-<p>You may also use numeric indices in square braces to specifically select
-an item in an array field. To just get the email address of the first
-contributor in the list, you can do this:</p>
-
-<pre><code>npm view express contributors[0].email</code></pre>
-
-<p>Multiple fields may be specified, and will be printed one after another.
-For exampls, to get all the contributor names and email addresses, you
-can do this:</p>
-
-<pre><code>npm view express contributors.name contributors.email</code></pre>
-
-<p>&quot;Person&quot; fields are shown as a string if they would be shown as an
-object. So, for example, this will show the list of npm contributors in
-the shortened string format. (See <code><a href="../doc/json.html">json(1)</a></code> for more on this.)</p>
-
-<pre><code>npm view npm contributors</code></pre>
-
-<p>If a version range is provided, then data will be printed for every
-matching version of the package. This will show which version of jsdom
-was required by each matching version of yui3:</p>
-
-<pre><code>npm view yui3@&#39;&gt;0.5.4&#39; dependencies.jsdom</code></pre>
-
-<h2 id="OUTPUT">OUTPUT</h2>
-
-<p>If only a single string field for a single version is output, then it
-will not be colorized or quoted, so as to enable piping the output to
-another command. If the field is an object, it will be output as a JavaScript object literal.</p>
-
-<p>If the --json flag is given, the outputted fields will be JSON.</p>
-
-<p>If the version range matches multiple versions, than each printed value
-will be prefixed with the version it applies to.</p>
-
-<p>If multiple fields are requested, than each of them are prefixed with
-the field name.</p>
-
-<h2 id="SEE-ALSO">SEE ALSO</h2>
-
-<ul><li><a href="../doc/search.html">search(1)</a></li><li><a href="../doc/registry.html">registry(1)</a></li><li><a href="../doc/config.html">config(1)</a></li><li><a href="../doc/docs.html">docs(1)</a></li></ul>
-</div>
-<p id="footer">view &mdash; npm@1.2.30</p>
-<script>
-;(function () {
-var wrapper = document.getElementById("wrapper")
-var els = Array.prototype.slice.call(wrapper.getElementsByTagName("*"), 0)
- .filter(function (el) {
- return el.parentNode === wrapper
- && el.tagName.match(/H[1-6]/)
- && el.id
- })
-var l = 2
- , toc = document.createElement("ul")
-toc.innerHTML = els.map(function (el) {
- var i = el.tagName.charAt(1)
- , out = ""
- while (i > l) {
- out += "<ul>"
- l ++
- }
- while (i < l) {
- out += "</ul>"
- l --
- }
- out += "<li><a href='#" + el.id + "'>" +
- ( el.innerText || el.text || el.innerHTML)
- + "</a>"
- return out
-}).join("\n")
-toc.id = "toc"
-document.body.appendChild(toc)
-})()
-</script>
-</body></html>
diff --git a/deps/npm/html/doc/whoami.html b/deps/npm/html/doc/whoami.html
deleted file mode 100644
index ae2d87b26..000000000
--- a/deps/npm/html/doc/whoami.html
+++ /dev/null
@@ -1,55 +0,0 @@
-<!doctype html>
-<html>
- <title>whoami</title>
- <meta http-equiv="content-type" value="text/html;utf-8">
- <link rel="stylesheet" type="text/css" href="../static/style.css">
-
- <body>
- <div id="wrapper">
-<h1><a href="../doc/whoami.html">whoami</a></h1> <p>Display npm username</p>
-
-<h2 id="SYNOPSIS">SYNOPSIS</h2>
-
-<pre><code>npm whoami</code></pre>
-
-<h2 id="DESCRIPTION">DESCRIPTION</h2>
-
-<p>Print the <code>username</code> config to standard output.</p>
-
-<h2 id="SEE-ALSO">SEE ALSO</h2>
-
-<ul><li><a href="../doc/config.html">config(1)</a></li><li><a href="../doc/adduser.html">adduser(1)</a></li></ul>
-</div>
-<p id="footer">whoami &mdash; npm@1.2.30</p>
-<script>
-;(function () {
-var wrapper = document.getElementById("wrapper")
-var els = Array.prototype.slice.call(wrapper.getElementsByTagName("*"), 0)
- .filter(function (el) {
- return el.parentNode === wrapper
- && el.tagName.match(/H[1-6]/)
- && el.id
- })
-var l = 2
- , toc = document.createElement("ul")
-toc.innerHTML = els.map(function (el) {
- var i = el.tagName.charAt(1)
- , out = ""
- while (i > l) {
- out += "<ul>"
- l ++
- }
- while (i < l) {
- out += "</ul>"
- l --
- }
- out += "<li><a href='#" + el.id + "'>" +
- ( el.innerText || el.text || el.innerHTML)
- + "</a>"
- return out
-}).join("\n")
-toc.id = "toc"
-document.body.appendChild(toc)
-})()
-</script>
-</body></html>
diff --git a/deps/npm/html/docfoot.html b/deps/npm/html/docfoot.html
index 3e35341cc..11a67943b 100644
--- a/deps/npm/html/docfoot.html
+++ b/deps/npm/html/docfoot.html
@@ -1,34 +1,13 @@
</div>
+
+<table border=0 cellspacing=0 cellpadding=0 id=npmlogo>
+<tr><td style="width:180px;height:10px;background:rgb(237,127,127)" colspan=18>&nbsp;</td></tr>
+<tr><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td colspan=6 style="width:60px;height:10px;background:#fff">&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td></tr>
+<tr><td colspan=2 style="width:20px;height:30px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=4 colspan=2>&nbsp;</td><td style="width:10px;height:20px;background:rgb(237,127,127)" rowspan=2>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=3 colspan=2>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff" rowspan=2>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff">&nbsp;</td></tr>
+<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
+<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
+</table>
<p id="footer">@NAME@ &mdash; npm@@VERSION@</p>
-<script>
-;(function () {
-var wrapper = document.getElementById("wrapper")
-var els = Array.prototype.slice.call(wrapper.getElementsByTagName("*"), 0)
- .filter(function (el) {
- return el.parentNode === wrapper
- && el.tagName.match(/H[1-6]/)
- && el.id
- })
-var l = 2
- , toc = document.createElement("ul")
-toc.innerHTML = els.map(function (el) {
- var i = el.tagName.charAt(1)
- , out = ""
- while (i > l) {
- out += "<ul>"
- l ++
- }
- while (i < l) {
- out += "</ul>"
- l --
- }
- out += "<li><a href='#" + el.id + "'>" +
- ( el.innerText || el.text || el.innerHTML)
- + "</a>"
- return out
-}).join("\n")
-toc.id = "toc"
-document.body.appendChild(toc)
-})()
-</script>
-</body></html>
+
diff --git a/deps/npm/html/dochead.html b/deps/npm/html/dochead.html
index 1526e1b7b..e2f0e83d7 100644
--- a/deps/npm/html/dochead.html
+++ b/deps/npm/html/dochead.html
@@ -2,7 +2,10 @@
<html>
<title>@NAME@</title>
<meta http-equiv="content-type" value="text/html;utf-8">
- <link rel="stylesheet" type="text/css" href="../static/style.css">
+ <link rel="stylesheet" type="text/css" href="../../static/style.css">
+ <link rel="canonical" href="https://www.npmjs.org/@URL@">
+ <script async=true src="../../static/toc.js"></script>
<body>
<div id="wrapper">
+
diff --git a/deps/npm/html/index.html b/deps/npm/html/index.html
index b4a22be23..bf0a3f0b6 100644
--- a/deps/npm/html/index.html
+++ b/deps/npm/html/index.html
@@ -69,7 +69,7 @@ code { background:#fff ; outline: 1px solid #ccc; padding:0 2px; }
<h2>Fancy Install</h2>
<ol>
- <li><a href="https://github.com/isaacs/npm">Get the code.</a>
+ <li><a href="https://github.com/npm/npm">Get the code.</a>
<li>Do what <a href="https://npmjs.org/doc/README.html">the README</a>
says to do.
</ol>
@@ -88,7 +88,7 @@ program that you run on your computer!</p>
<li><a href="doc/faq.html">FAQ</a>
<li><a href="https://search.npmjs.org/">Search for Packages</a>
<li><a href="https://groups.google.com/group/npm-">Mailing List</a>
- <li><a href="https://github.com/isaacs/npm/issues">Bugs</a>
+ <li><a href="https://github.com/npm/npm/issues">Bugs</a>
</ul>
</body>
diff --git a/deps/npm/html/static/style.css b/deps/npm/html/static/style.css
index e63b74519..7a7f6ea5d 100644
--- a/deps/npm/html/static/style.css
+++ b/deps/npm/html/static/style.css
@@ -1,24 +1,3 @@
-/*
-
-Webfont: Gubblebum Blocky by Jelloween
-License: http://www.myfonts.com/viewlicense?type=web&buildid=2303021
-Webfonts copyright: Copyright (c) 2007 by Tjarda Koster. All rights reserved.
-
-"Gubblebum Blocky" font
-Copyright (c) 2007 by Tjarda Koster, http://jelloween.deviantart.com
-included for use in the npm website and documentation,
-used with permission.
-
-*/
-
-@font-face {
- font-family: gubblefont;
- src: url('webfonts/23242D_3_0.eot');
- src: url('webfonts/23242D_3_0.eot?#iefix') format('embedded-opentype'),
- url('webfonts/23242D_3_0.woff') format('woff'),
- url('webfonts/23242D_3_0.ttf') format('truetype');
-}
-
/* reset */
* {
margin:0;
@@ -143,7 +122,7 @@ small, .small, .small *, aside {
color:#669;
font-size:18px;
}
-spall a, .small a {
+small a, .small a {
text-decoration:underline;
}
del {
@@ -162,16 +141,16 @@ q q:after, q q q q:after, q q q q q q:after, q q q q q q q q:after { content:"â€
a { color:#00f; text-decoration:none; }
a:visited { color:#636; }
-a:hover, a:active { color:#900!important; text-decoration:underline; }
+a:hover, a:active { color:#c00!important; text-decoration:underline; }
h1 {
font-weight:bold;
background:#fff;
}
h1 a, h1 a:visited {
- font-family:gubblefont, Gubblebum-Blocky, GubbleBum Blocky, GubbleBum, monospace;
+ font-family:monospace;
font-size:60px;
- color:#900;
+ color:#c00;
display:block;
}
h1 a:focus, h1 a:hover, h1 a:active {
@@ -297,11 +276,12 @@ input.submit, input#submit, input.button, button, input[type=submit] {
}
#footer, #footer * {
- text-align:right;
+ text-align:center;
font-size:16px;
color:#ccc;
font-style:italic;
word-spacing:1em;
+ margin-top:0;
}
#toc {
@@ -336,6 +316,12 @@ input.submit, input#submit, input.button, button, input[type=submit] {
display:block;
}
+table#npmlogo {
+ line-height:10px;
+ width:180px;
+ margin:0 auto;
+}
+
@media print {
a[href] {
color:inherit;
diff --git a/deps/npm/html/static/toc.js b/deps/npm/html/static/toc.js
new file mode 100644
index 000000000..2cfebd0aa
--- /dev/null
+++ b/deps/npm/html/static/toc.js
@@ -0,0 +1,29 @@
+;(function () {
+var wrapper = document.getElementById("wrapper")
+var els = Array.prototype.slice.call(wrapper.getElementsByTagName("*"), 0)
+ .filter(function (el) {
+ return el.parentNode === wrapper
+ && el.tagName.match(/H[1-6]/)
+ && el.id
+ })
+var l = 2
+ , toc = document.createElement("ul")
+toc.innerHTML = els.map(function (el) {
+ var i = el.tagName.charAt(1)
+ , out = ""
+ while (i > l) {
+ out += "<ul>"
+ l ++
+ }
+ while (i < l) {
+ out += "</ul>"
+ l --
+ }
+ out += "<li><a href='#" + el.id + "'>" +
+ ( el.innerText || el.text || el.innerHTML)
+ + "</a>"
+ return out
+}).join("\n")
+toc.id = "toc"
+document.body.appendChild(toc)
+})();
diff --git a/deps/npm/html/static/webfonts/23242D_3_0.eot b/deps/npm/html/static/webfonts/23242D_3_0.eot
deleted file mode 100644
index a2ce30852..000000000
--- a/deps/npm/html/static/webfonts/23242D_3_0.eot
+++ /dev/null
Binary files differ
diff --git a/deps/npm/html/static/webfonts/23242D_3_0.ttf b/deps/npm/html/static/webfonts/23242D_3_0.ttf
deleted file mode 100644
index 788b1fcf9..000000000
--- a/deps/npm/html/static/webfonts/23242D_3_0.ttf
+++ /dev/null
Binary files differ
diff --git a/deps/npm/html/static/webfonts/23242D_3_0.woff b/deps/npm/html/static/webfonts/23242D_3_0.woff
deleted file mode 100644
index 46540e82a..000000000
--- a/deps/npm/html/static/webfonts/23242D_3_0.woff
+++ /dev/null
Binary files differ
diff --git a/deps/npm/lib/adduser.js b/deps/npm/lib/adduser.js
index c3ba5fc32..94a119683 100644
--- a/deps/npm/lib/adduser.js
+++ b/deps/npm/lib/adduser.js
@@ -18,9 +18,9 @@ function adduser (args, cb) {
if (!crypto) return cb(new Error(
"You must compile node with ssl support to use the adduser feature"))
- var c = { u : npm.config.get("username")
- , p : npm.config.get("_password")
- , e : npm.config.get("email")
+ var c = { u : npm.config.get("username") || ""
+ , p : npm.config.get("_password") || ""
+ , e : npm.config.get("email") || ""
}
, changed = false
, u = {}
@@ -37,7 +37,7 @@ function adduser (args, cb) {
function readUsername (c, u, cb) {
var v = userValidate.username
- read({prompt: "Username: ", default: c.u}, function (er, un) {
+ read({prompt: "Username: ", default: c.u || ""}, function (er, un) {
if (er) {
return cb(er.message === "cancelled" ? er.message : er)
}
@@ -66,15 +66,24 @@ function readUsername (c, u, cb) {
function readPassword (c, u, cb) {
var v = userValidate.pw
- if (!c.changed) {
- u.p = c.p
- return cb()
+ var prompt
+ if (c.p && !c.changed) {
+ prompt = "Password: (or leave unchanged) "
+ } else {
+ prompt = "Password: "
}
- read({prompt: "Password: ", silent: true}, function (er, pw) {
+
+ read({prompt: prompt, silent: true}, function (er, pw) {
if (er) {
return cb(er.message === "cancelled" ? er.message : er)
}
+ if (!c.changed && pw === "") {
+ // when the username was not changed,
+ // empty response means "use the old value"
+ pw = c.p
+ }
+
if (!pw) {
return readPassword(c, u, cb)
}
@@ -85,6 +94,7 @@ function readPassword (c, u, cb) {
return readPassword(c, u, cb)
}
+ c.changed = c.changed || c.p != pw
u.p = pw
cb(er)
})
@@ -92,8 +102,8 @@ function readPassword (c, u, cb) {
function readEmail (c, u, cb) {
var v = userValidate.email
-
- read({prompt: "Email: ", default: c.e}, function (er, em) {
+ var r = { prompt: "Email: (this IS public) ", default: c.e || "" }
+ read(r, function (er, em) {
if (er) {
return cb(er.message === "cancelled" ? er.message : er)
}
@@ -131,6 +141,7 @@ function save (c, u, cb) {
npm.config.set("username", u.u, "user")
npm.config.set("_password", u.p, "user")
npm.config.set("email", u.e, "user")
+ npm.config.del("_token", "user")
log.info("adduser", "Authorized user %s", u.u)
npm.config.save("user", cb)
})
diff --git a/deps/npm/lib/bugs.js b/deps/npm/lib/bugs.js
index bcbf2bebb..be79ab30e 100644
--- a/deps/npm/lib/bugs.js
+++ b/deps/npm/lib/bugs.js
@@ -7,6 +7,9 @@ var npm = require("./npm.js")
, registry = npm.registry
, log = require("npmlog")
, opener = require("opener")
+ , path = require("path")
+ , readJson = require("read-package-json")
+ , fs = require("fs")
bugs.completion = function (opts, cb) {
if (opts.conf.argv.remain.length > 2) return cb()
@@ -16,28 +19,43 @@ bugs.completion = function (opts, cb) {
}
function bugs (args, cb) {
- if (!args.length) return cb(bugs.usage)
- var n = args[0].split("@").shift()
+ var n = args.length && args[0].split("@").shift() || '.'
+ fs.stat(n, function (er, s) {
+ if (er && er.code === "ENOENT") return callRegistry(n, cb)
+ else if (er) return cb (er)
+ if (!s.isDirectory()) return callRegistry(n, cb)
+ readJson(path.resolve(n, "package.json"), function(er, d) {
+ if (er) return cb(er)
+ getUrlAndOpen(d, cb)
+ })
+ })
+}
+
+function getUrlAndOpen (d, cb) {
+ var bugs = d.bugs
+ , repo = d.repository || d.repositories
+ , url
+ if (bugs) {
+ url = (typeof url === "string") ? bugs : bugs.url
+ } else if (repo) {
+ if (Array.isArray(repo)) repo = repo.shift()
+ if (repo.hasOwnProperty("url")) repo = repo.url
+ log.verbose("repository", repo)
+ if (bugs && bugs.match(/^(https?:\/\/|git(:\/\/|@))github.com/)) {
+ url = bugs.replace(/^git(@|:\/\/)/, "https://")
+ .replace(/^https?:\/\/github.com:/, "https://github.com/")
+ .replace(/\.git$/, '')+"/issues"
+ }
+ }
+ if (!url) {
+ url = "https://npmjs.org/package/" + d.name
+ }
+ opener(url, { command: npm.config.get("browser") }, cb)
+}
+
+function callRegistry (n, cb) {
registry.get(n + "/latest", 3600, function (er, d) {
if (er) return cb(er)
- var bugs = d.bugs
- , repo = d.repository || d.repositories
- , url
- if (bugs) {
- url = (typeof bugs === "string") ? bugs : bugs.url
- } else if (repo) {
- if (Array.isArray(repo)) repo = repo.shift()
- if (repo.hasOwnProperty("url")) repo = repo.url
- log.verbose("repository", repo)
- if (repo && repo.match(/^(https?:\/\/|git(:\/\/|@))github.com/)) {
- url = repo.replace(/^git(@|:\/\/)/, "https://")
- .replace(/^https?:\/\/github.com:/, "https://github.com/")
- .replace(/\.git$/, '')+"/issues"
- }
- }
- if (!url) {
- url = "https://npmjs.org/package/" + d.name
- }
- opener(url, { command: npm.config.get("browser") }, cb)
+ getUrlAndOpen (d, cb)
})
}
diff --git a/deps/npm/lib/build.js b/deps/npm/lib/build.js
index fdbae722c..4b73c1e27 100644
--- a/deps/npm/lib/build.js
+++ b/deps/npm/lib/build.js
@@ -174,10 +174,13 @@ function linkBins (pkg, folder, parent, gtop, cb) {
if (er) return cb(er)
// bins should always be executable.
// XXX skip chmod on windows?
- fs.chmod(path.resolve(folder, pkg.bin[b]), npm.modes.exec, function (er) {
+ var src = path.resolve(folder, pkg.bin[b])
+ fs.chmod(src, npm.modes.exec, function (er) {
+ if (er && er.code === "ENOENT" && npm.config.get("ignore-scripts")) {
+ return cb()
+ }
if (er || !gtop) return cb(er)
var dest = path.resolve(binRoot, b)
- , src = path.resolve(folder, pkg.bin[b])
, out = npm.config.get("parseable")
? dest + "::" + src + ":BINFILE"
: dest + " -> " + src
@@ -200,19 +203,25 @@ function linkMans (pkg, folder, parent, gtop, cb) {
if (!pkg.man || !gtop || process.platform === "win32") return cb()
var manRoot = path.resolve(npm.config.get("prefix"), "share", "man")
+
+ // make sure that the mans are unique.
+ // otherwise, if there are dupes, it'll fail with EEXIST
+ var set = pkg.man.reduce(function (acc, man) {
+ acc[path.basename(man)] = man
+ return acc
+ }, {})
+ pkg.man = pkg.man.filter(function (man) {
+ return set[path.basename(man)] === man
+ })
+
asyncMap(pkg.man, function (man, cb) {
if (typeof man !== "string") return cb()
- var parseMan = man.match(/(.*)\.([0-9]+)(\.gz)?$/)
+ var parseMan = man.match(/(.*\.([0-9]+)(\.gz)?)$/)
, stem = parseMan[1]
, sxn = parseMan[2]
, gz = parseMan[3] || ""
, bn = path.basename(stem)
- , manDest = path.join( manRoot
- , "man"+sxn
- , (bn.indexOf(pkg.name) === 0 ? bn
- : pkg.name + "-" + bn)
- + "." + sxn + gz
- )
+ , manDest = path.join(manRoot, "man" + sxn, bn)
linkIfExists(man, manDest, gtop && folder, cb)
}, cb)
diff --git a/deps/npm/lib/cache.js b/deps/npm/lib/cache.js
index 9f8819e68..32fb9f832 100644
--- a/deps/npm/lib/cache.js
+++ b/deps/npm/lib/cache.js
@@ -21,8 +21,8 @@ cache folders:
1. urls: http!/server.com/path/to/thing
2. c:\path\to\thing: file!/c!/path/to/thing
3. /path/to/thing: file!/path/to/thing
-4. git@ private: git_github.com!isaacs/npm
-5. git://public: git!/github.com/isaacs/npm
+4. git@ private: git_github.com!npm/npm
+5. git://public: git!/github.com/npm/npm
6. git+blah:// git-blah!/server.com/foo/bar
adding a folder:
@@ -64,7 +64,7 @@ var mkdir = require("mkdirp")
, fetch = require("./utils/fetch.js")
, npm = require("./npm.js")
, fs = require("graceful-fs")
- , rm = require("rimraf")
+ , rm = require("./utils/gently-rm.js")
, readJson = require("read-package-json")
, registry = npm.registry
, log = require("npmlog")
@@ -82,6 +82,9 @@ var mkdir = require("mkdirp")
, zlib = require("zlib")
, chmodr = require("chmodr")
, which = require("which")
+ , isGitUrl = require("./utils/is-git-url.js")
+ , pathIsInside = require("path-is-inside")
+ , http = require("http")
cache.usage = "npm cache add <tarball file>"
+ "\nnpm cache add <folder>"
@@ -239,37 +242,83 @@ function add (args, cb) {
log.verbose("cache add", "name=%j spec=%j args=%j", name, spec, args)
-
if (!name && !spec) return cb(usage)
+ cb = afterAdd([name, spec], cb)
+
// see if the spec is a url
// otherwise, treat as name@version
var p = url.parse(spec) || {}
log.verbose("parsed url", p)
- // it could be that we got name@http://blah
+ // If there's a /, and it's a path, then install the path.
+ // If not, and there's a @, it could be that we got name@http://blah
// in that case, we will not have a protocol now, but if we
// split and check, we will.
- if (!name && !p.protocol && spec.indexOf("@") !== -1) {
- spec = spec.split("@")
- name = spec.shift()
- spec = spec.join("@")
- return add([name, spec], cb)
+ if (!name && !p.protocol) {
+ if (spec.indexOf("/") !== -1 ||
+ process.platform === "win32" && spec.indexOf("\\") !== -1) {
+ return maybeFile(spec, p, cb)
+ } else if (spec.indexOf("@") !== -1) {
+ return maybeAt(spec, cb)
+ }
+ }
+
+ add_(name, spec, p, cb)
+}
+
+function afterAdd (arg, cb) { return function (er, data) {
+ if (er || !data || !data.name || !data.version) {
+ return cb(er, data)
}
+ // Save the resolved, shasum, etc. into the data so that the next
+ // time we load from this cached data, we have all the same info.
+ var name = data.name
+ var ver = data.version
+ var pj = path.join(npm.cache, name, ver, "package", "package.json")
+ fs.writeFile(pj, JSON.stringify(data), "utf8", function (er) {
+ cb(er, data)
+ })
+}}
+
+
+
+function maybeFile (spec, p, cb) {
+ fs.stat(spec, function (er, stat) {
+ if (!er) {
+ // definitely a local thing
+ addLocal(spec, cb)
+ } else if (er && spec.indexOf("@") !== -1) {
+ // bar@baz/loofa
+ maybeAt(spec, cb)
+ } else {
+ // Already know it's not a url, so must be local
+ addLocal(spec, cb)
+ }
+ })
+}
+
+function maybeAt (spec, cb) {
+ var tmp = spec.split("@")
+
+ // split name@2.3.4 only if name is a valid package name,
+ // don't split in case of "./test@example.com/" (local path)
+ var name = tmp.shift()
+ spec = tmp.join("@")
+ return add([name, spec], cb)
+}
+
+function add_ (name, spec, p, cb) {
switch (p.protocol) {
case "http:":
case "https:":
return addRemoteTarball(spec, null, name, cb)
- case "git:":
- case "git+http:":
- case "git+https:":
- case "git+rsync:":
- case "git+ftp:":
- case "git+ssh:":
- //p.protocol = p.protocol.replace(/^git([^:])/, "$1")
- return addRemoteGit(spec, p, name, false, cb)
+
default:
+ if (isGitUrl(p))
+ return addRemoteGit(spec, p, name, false, cb)
+
// if we have a name and a spec, then try name@spec
// if not, then try just spec (which may try name@"" if not found)
if (name) {
@@ -286,9 +335,21 @@ function fetchAndShaCheck (u, tmp, shasum, cb) {
log.error("fetch failed", u)
return cb(er, response)
}
- if (!shasum) return cb(null, response)
+
+ if (!shasum) {
+ // Well, we weren't given a shasum, so at least sha what we have
+ // in case we want to compare it to something else later
+ return sha.get(tmp, function (er, shasum) {
+ cb(er, response, shasum)
+ })
+ }
+
// validate that the url we just downloaded matches the expected shasum.
sha.check(tmp, shasum, function (er) {
+ if (er != null && er.message) {
+ // add original filename for better debuggability
+ er.message = er.message + '\n' + 'From: ' + u
+ }
return cb(er, response, shasum)
})
})
@@ -297,7 +358,8 @@ function fetchAndShaCheck (u, tmp, shasum, cb) {
// Only have a single download action at once for a given url
// additional calls stack the callbacks.
var inFlightURLs = {}
-function addRemoteTarball (u, shasum, name, cb_) {
+function addRemoteTarball (u, shasum, name, version, cb_) {
+ if (typeof cb_ !== "function") cb_ = version, version = ""
if (typeof cb_ !== "function") cb_ = name, name = ""
if (typeof cb_ !== "function") cb_ = shasum, shasum = null
@@ -309,6 +371,7 @@ function addRemoteTarball (u, shasum, name, cb_) {
function cb (er, data) {
if (data) {
data._from = u
+ data._shasum = data._shasum || shasum
data._resolved = u
}
unlock(u, function () {
@@ -332,7 +395,7 @@ function addRemoteTarball (u, shasum, name, cb_) {
function done (er, resp, shasum) {
if (er) return cb(er)
- addLocalTarball(tmp, name, shasum, cb)
+ addLocalTarball(tmp, name, version, shasum, cb)
}
}
@@ -376,41 +439,40 @@ function addRemoteGit (u, parsed, name, silent, cb_) {
iF.push(cb_)
if (iF.length > 1) return
+ // git is so tricky!
+ // if the path is like ssh://foo:22/some/path then it works, but
+ // it needs the ssh://
+ // If the path is like ssh://foo:some/path then it works, but
+ // only if you remove the ssh://
+ var origUrl = u
+ u = u.replace(/^git\+/, "")
+ .replace(/#.*$/, "")
+
+ // ssh paths that are scp-style urls don't need the ssh://
+ if (parsed.pathname.match(/^\/?:/)) {
+ u = u.replace(/^ssh:\/\//, "")
+ }
+
function cb (er, data) {
unlock(u, function () {
var c
while (c = iF.shift()) c(er, data)
- delete inFlightURLs[u]
+ delete inFlightURLs[origUrl]
})
}
- var p, co // cachePath, git-ref we want to check out
-
lock(u, function (er) {
if (er) return cb(er)
// figure out what we should check out.
var co = parsed.hash && parsed.hash.substr(1) || "master"
- // git is so tricky!
- // if the path is like ssh://foo:22/some/path then it works, but
- // it needs the ssh://
- // If the path is like ssh://foo:some/path then it works, but
- // only if you remove the ssh://
- var origUrl = u
- u = u.replace(/^git\+/, "")
- .replace(/#.*$/, "")
-
- // ssh paths that are scp-style urls don't need the ssh://
- if (parsed.pathname.match(/^\/?:/)) {
- u = u.replace(/^ssh:\/\//, "")
- }
var v = crypto.createHash("sha1").update(u).digest("hex").slice(0, 8)
v = u.replace(/[^a-zA-Z0-9]+/g, '-') + '-' + v
log.verbose("addRemoteGit", [u, co])
- p = path.join(npm.config.get("cache"), "_git-remotes", v)
+ var p = path.join(npm.config.get("cache"), "_git-remotes", v)
checkGitDir(p, u, co, origUrl, silent, function(er, data) {
chmodr(p, npm.modes.file, function(erChmod) {
@@ -506,9 +568,30 @@ function archiveGitRemote (p, u, co, origUrl, cb) {
}
log.verbose("git fetch -a origin ("+u+")", stdout)
tmp = path.join(npm.tmp, Date.now()+"-"+Math.random(), "tmp.tgz")
- resolveHead()
+ verifyOwnership()
})
+ function verifyOwnership() {
+ if (process.platform === "win32") {
+ log.silly("verifyOwnership", "skipping for windows")
+ resolveHead()
+ } else {
+ getCacheStat(function(er, cs) {
+ if (er) {
+ log.error("Could not get cache stat")
+ return cb(er)
+ }
+ chownr(p, cs.uid, cs.gid, function(er) {
+ if (er) {
+ log.error("Failed to change folder ownership under npm cache for %s", p)
+ return cb(er)
+ }
+ resolveHead()
+ })
+ })
+ }
+ }
+
function resolveHead () {
exec(git, resolve, {cwd: p, env: env}, function (er, stdout, stderr) {
stdout = (stdout + "\n" + stderr).trim()
@@ -521,7 +604,7 @@ function archiveGitRemote (p, u, co, origUrl, cb) {
parsed.hash = stdout
resolved = url.format(parsed)
- // https://github.com/isaacs/npm/issues/3224
+ // https://github.com/npm/npm/issues/3224
// node incorrectly sticks a / at the start of the path
// We know that the host won't change, so split and detect this
var spo = origUrl.split(parsed.host)
@@ -567,7 +650,7 @@ function gitEnv () {
if (gitEnv_) return gitEnv_
gitEnv_ = {}
for (var k in process.env) {
- if (!~['GIT_PROXY_COMMAND','GIT_SSH'].indexOf(k) && k.match(/^GIT/)) continue
+ if (!~['GIT_PROXY_COMMAND','GIT_SSH','GIT_SSL_NO_VERIFY'].indexOf(k) && k.match(/^GIT/)) continue
gitEnv_[k] = process.env[k]
}
return gitEnv_
@@ -600,8 +683,8 @@ function addNamed (name, x, data, cb_) {
lock(k, function (er, fd) {
if (er) return cb(er)
- var fn = ( null !== semver.valid(x) ? addNameVersion
- : null !== semver.validRange(x) ? addNameRange
+ var fn = ( semver.valid(x, true) ? addNameVersion
+ : semver.validRange(x, true) ? addNameRange
: addNameTag
)
fn(name, x, data, cb)
@@ -627,6 +710,9 @@ function addNameTag (name, tag, data, cb_) {
}
registry.get(name, function (er, data, json, response) {
+ if (!er) {
+ er = errorResponse(name, response)
+ }
if (er) return cb(er)
engineFilter(data)
if (data["dist-tags"] && data["dist-tags"][tag]
@@ -655,17 +741,27 @@ function engineFilter (data) {
var eng = data.versions[v].engines
if (!eng) return
if (!strict && !data.versions[v].engineStrict) return
- if (eng.node && !semver.satisfies(nodev, eng.node)
- || eng.npm && !semver.satisfies(npmv, eng.npm)) {
+ if (eng.node && !semver.satisfies(nodev, eng.node, true)
+ || eng.npm && !semver.satisfies(npmv, eng.npm, true)) {
delete data.versions[v]
}
})
}
+function errorResponse (name, response) {
+ if (response.statusCode >= 400) {
+ var er = new Error(http.STATUS_CODES[response.statusCode])
+ er.statusCode = response.statusCode
+ er.code = "E" + er.statusCode
+ er.pkgid = name
+ }
+ return er
+}
+
function addNameRange (name, range, data, cb) {
if (typeof cb !== "function") cb = data, data = null
- range = semver.validRange(range)
+ range = semver.validRange(range, true)
if (range === null) return cb(new Error(
"Invalid version range: "+range))
@@ -673,6 +769,9 @@ function addNameRange (name, range, data, cb) {
if (data) return next()
registry.get(name, function (er, d, json, response) {
+ if (!er) {
+ er = errorResponse(name, response)
+ }
if (er) return cb(er)
data = d
next()
@@ -688,12 +787,15 @@ function addNameRange (name, range, data, cb) {
// if the tagged version satisfies, then use that.
var tagged = data["dist-tags"][npm.config.get("tag")]
- if (tagged && data.versions[tagged] && semver.satisfies(tagged, range)) {
+ if (tagged
+ && data.versions[tagged]
+ && semver.satisfies(tagged, range, true)) {
return addNamed(name, tagged, data.versions[tagged], cb)
}
// find the max satisfying version.
- var ms = semver.maxSatisfying(Object.keys(data.versions || {}), range)
+ var versions = Object.keys(data.versions || {})
+ var ms = semver.maxSatisfying(versions, range, true)
if (!ms) {
return cb(installTargetsError(range, data))
}
@@ -712,19 +814,21 @@ function installTargetsError (requested, data) {
requested = data.name + (requested ? "@'" + requested + "'" : "")
targets = targets.length
- ? "Valid install targets:\n" + JSON.stringify(targets)
+ ? "Valid install targets:\n" + JSON.stringify(targets) + "\n"
: "No valid targets found.\n"
+ "Perhaps not compatible with your version of node?"
- return new Error( "No compatible version found: "
+ var er = new Error( "No compatible version found: "
+ requested + "\n" + targets)
+ er.code = "ETARGET"
+ return er
}
-function addNameVersion (name, ver, data, cb) {
+function addNameVersion (name, v, data, cb) {
if (typeof cb !== "function") cb = data, data = null
- ver = semver.valid(ver)
- if (ver === null) return cb(new Error("Invalid version: "+ver))
+ var ver = semver.valid(v, true)
+ if (!ver) return cb(new Error("Invalid version: "+v))
var response
@@ -732,9 +836,18 @@ function addNameVersion (name, ver, data, cb) {
response = null
return next()
}
- registry.get(name + "/" + ver, function (er, d, json, resp) {
+ registry.get(name, function (er, d, json, resp) {
+ if (!er) {
+ er = errorResponse(name, resp)
+ }
if (er) return cb(er)
- data = d
+ data = d && d.versions[ver]
+ if (!data) {
+ er = new Error('version not found: ' + name + '@' + ver)
+ er.package = name
+ er.statusCode = 404
+ return cb(er)
+ }
response = resp
next()
})
@@ -753,17 +866,24 @@ function addNameVersion (name, ver, data, cb) {
}
// we got cached data, so let's see if we have a tarball.
- fs.stat(path.join(npm.cache, name, ver, "package.tgz"), function (er, s) {
- if (!er) readJson( path.join( npm.cache, name, ver
- , "package", "package.json" )
- , function (er, data) {
+ var pkgroot = path.join(npm.cache, name, ver)
+ var pkgtgz = path.join(pkgroot, "package.tgz")
+ var pkgjson = path.join(pkgroot, "package", "package.json")
+ fs.stat(pkgtgz, function (er, s) {
+ if (!er) {
+ readJson(pkgjson, function (er, data) {
er = needName(er, data)
er = needVersion(er, data)
- if (er && er.code !== "ENOENT" && er.code !== "ENOTDIR") return cb(er)
+ if (er && er.code !== "ENOENT" && er.code !== "ENOTDIR")
+ return cb(er)
if (er) return fetchit()
+ // check the SHA of the package we have, to ensure it wasn't installed
+ // from somewhere other than the registry (eg, a fork)
+ if (data._shasum && dist.shasum && data._shasum !== dist.shasum)
+ return fetchit()
return cb(null, data)
})
- else return fetchit()
+ } else return fetchit()
})
function fetchit () {
@@ -772,11 +892,18 @@ function addNameVersion (name, ver, data, cb) {
}
// use the same protocol as the registry.
- // https registry --> https tarballs.
+ // https registry --> https tarballs, but
+ // only if they're the same hostname, or else
+ // detached tarballs may not work.
var tb = url.parse(dist.tarball)
- tb.protocol = url.parse(npm.config.get("registry")).protocol
- delete tb.href
+ var rp = url.parse(npm.config.get("registry"))
+ if (tb.hostname === rp.hostname
+ && tb.protocol !== rp.protocol) {
+ tb.protocol = url.parse(npm.config.get("registry")).protocol
+ delete tb.href
+ }
tb = url.format(tb)
+
// only add non-shasum'ed packages if --forced.
// only ancient things would lack this for good reasons nowadays.
if (!dist.shasum && !npm.config.get("force")) {
@@ -784,7 +911,8 @@ function addNameVersion (name, ver, data, cb) {
}
return addRemoteTarball( tb
, dist.shasum
- , name+"-"+ver
+ , name
+ , ver
, cb )
}
}
@@ -855,22 +983,35 @@ function maybeGithub (p, name, er, cb) {
}
}
-function addLocalTarball (p, name, shasum, cb_) {
+function addLocalTarball (p, name, version, shasum, cb_) {
if (typeof cb_ !== "function") cb_ = shasum, shasum = null
+ if (typeof cb_ !== "function") cb_ = version, version = ""
if (typeof cb_ !== "function") cb_ = name, name = ""
+
+ // If we don't have a shasum yet, then get the shasum now.
+ if (!shasum) {
+ return sha.get(p, function (er, shasum) {
+ if (er) return cb_(er)
+ addLocalTarball(p, name, version, shasum, cb_)
+ })
+ }
+
// if it's a tar, and not in place,
// then unzip to .tmp, add the tmp folder, and clean up tmp
- if (p.indexOf(npm.tmp) === 0)
- return addTmpTarball(p, name, shasum, cb_)
+ if (pathIsInside(p, npm.tmp))
+ return addTmpTarball(p, name, version, shasum, cb_)
- if (p.indexOf(npm.cache) === 0) {
+ if (pathIsInside(p, npm.cache)) {
if (path.basename(p) !== "package.tgz") return cb_(new Error(
"Not a valid cache tarball name: "+p))
return addPlacedTarball(p, name, shasum, cb_)
}
function cb (er, data) {
- if (data) data._resolved = p
+ if (data) {
+ data._resolved = p
+ data._shasum = data._shasum || shasum
+ }
return cb_(er, data)
}
@@ -893,7 +1034,7 @@ function addLocalTarball (p, name, shasum, cb_) {
log.verbose("chmod", tmp, npm.modes.file.toString(8))
fs.chmod(tmp, npm.modes.file, function (er) {
if (er) return cb(er)
- addTmpTarball(tmp, name, shasum, cb)
+ addTmpTarball(tmp, name, null, shasum, cb)
})
})
from.pipe(to)
@@ -1105,9 +1246,9 @@ function addLocalDirectory (p, name, shasum, cb) {
if (typeof cb !== "function") cb = name, name = ""
// if it's a folder, then read the package.json,
// tar it to the proper place, and add the cache tar
- if (p.indexOf(npm.cache) === 0) return cb(new Error(
+ if (pathIsInside(p, npm.cache)) return cb(new Error(
"Adding a cache directory to the cache will make the world implode."))
- readJson(path.join(p, "package.json"), function (er, data) {
+ readJson(path.join(p, "package.json"), false, function (er, data) {
er = needName(er, data)
er = needVersion(er, data)
if (er) return cb(er)
@@ -1119,12 +1260,17 @@ function addLocalDirectory (p, name, shasum, cb) {
, data.version, "package.tgz" )
, placeDirect = path.basename(p) === "package"
, tgz = placeDirect ? placed : tmptgz
- , doFancyCrap = p.indexOf(npm.tmp) !== 0
- && p.indexOf(npm.cache) !== 0
+ , version = data.version
+
+ name = data.name
+
getCacheStat(function (er, cs) {
mkdir(path.dirname(tgz), function (er, made) {
if (er) return cb(er)
- tar.pack(tgz, p, data, doFancyCrap, function (er) {
+
+ var fancy = !pathIsInside(p, npm.tmp)
+ && !pathIsInside(p, npm.cache)
+ tar.pack(tgz, p, data, fancy, function (er) {
if (er) {
log.error( "addLocalDirectory", "Could not pack %j to %j"
, p, tgz )
@@ -1137,7 +1283,7 @@ function addLocalDirectory (p, name, shasum, cb) {
chownr(made || tgz, cs.uid, cs.gid, function (er) {
if (er) return cb(er)
- addLocalTarball(tgz, name, shasum, cb)
+ addLocalTarball(tgz, name, version, shasum, cb)
})
})
})
@@ -1145,21 +1291,75 @@ function addLocalDirectory (p, name, shasum, cb) {
})
}
-function addTmpTarball (tgz, name, shasum, cb) {
- if (!cb) cb = name, name = ""
+// XXX This is where it should be fixed
+// Right now it's unpacking to a "package" folder, and then
+// adding that local folder, for historical reasons.
+// Instead, unpack to the *cache* folder, and then copy the
+// tgz into place in the cache, so the shasum doesn't change.
+function addTmpTarball (tgz, name, version, shasum, cb) {
+ // Just have a placeholder here so we can move it into place after.
+ var tmp = false
+ if (!version) {
+ tmp = true
+ version = 'tmp_' + crypto.randomBytes(6).toString('hex')
+ }
+ if (!name) {
+ tmp = true
+ name = 'tmp_' + crypto.randomBytes(6).toString('hex')
+ }
+ if (!tmp) {
+ var pdir = path.resolve(npm.cache, name, version, "package")
+ } else {
+ var pdir = path.resolve(npm.cache, name + version + "package")
+ }
+
getCacheStat(function (er, cs) {
if (er) return cb(er)
- var contents = path.dirname(tgz)
- tar.unpack( tgz, path.resolve(contents, "package")
- , null, null
- , cs.uid, cs.gid
- , function (er) {
- if (er) {
- return cb(er)
+ tar.unpack(tgz, pdir, null, null, cs.uid, cs.gid, next)
+ })
+
+ function next (er) {
+ if (er) return cb(er)
+ // it MUST be able to get a version now!
+ var pj = path.resolve(pdir, "package.json")
+ readJson(pj, function (er, data) {
+ if (er) return cb(er)
+ if (version === data.version && name === data.name && !tmp) {
+ addTmpTarball_(tgz, data, name, version, shasum, cb)
+ } else {
+ var old = pdir
+ name = data.name
+ version = data.version
+ pdir = path.resolve(npm.cache, name, version, "package")
+ mkdir(path.dirname(pdir), function(er) {
+ if (er) return cb(er)
+ rm(pdir, function(er) {
+ if (er) return cb(er)
+ fs.rename(old, pdir, function(er) {
+ if (er) return cb(er)
+ rm(old, function(er) {
+ if (er) return cb(er)
+ addTmpTarball_(tgz, data, name, version, shasum, cb)
+ })
+ })
+ })
+ })
}
- addLocalDirectory(path.resolve(contents, "package"), name, shasum, cb)
})
- })
+ }
+}
+
+function addTmpTarball_ (tgz, data, name, version, shasum, cb) {
+ cb = once(cb)
+ var target = path.resolve(npm.cache, name, version, "package.tgz")
+ var read = fs.createReadStream(tgz)
+ var write = fs.createWriteStream(target)
+ read.on("error", cb).pipe(write).on("error", cb).on("close", done)
+
+ function done() {
+ data._shasum = data._shasum || shasum
+ cb(null, data)
+ }
}
function unpack (pkg, ver, unpackTarget, dMode, fMode, uid, gid, cb) {
@@ -1173,7 +1373,7 @@ function unpack (pkg, ver, unpackTarget, dMode, fMode, uid, gid, cb) {
log.error("unpack", "Could not read data for %s", pkg + "@" + ver)
return cb(er)
}
- npm.commands.unbuild([unpackTarget], function (er) {
+ npm.commands.unbuild([unpackTarget], true, function (er) {
if (er) return cb(er)
tar.unpack( path.join(npm.cache, pkg, ver, "package.tgz")
, unpackTarget
@@ -1205,17 +1405,11 @@ function lockFileName (u) {
return path.resolve(npm.config.get("cache"), h + "-" + c + ".lock")
}
-var madeCache = false
var myLocks = {}
function lock (u, cb) {
// the cache dir needs to exist already for this.
- if (madeCache) then()
- else mkdir(npm.config.get("cache"), function (er) {
+ getCacheStat(function (er, cs) {
if (er) return cb(er)
- madeCache = true
- then()
- })
- function then () {
var opts = { stale: npm.config.get("cache-lock-stale")
, retries: npm.config.get("cache-lock-retries")
, wait: npm.config.get("cache-lock-wait") }
@@ -1225,14 +1419,20 @@ function lock (u, cb) {
if (!er) myLocks[lf] = true
cb(er)
})
- }
+ })
}
function unlock (u, cb) {
var lf = lockFileName(u)
- if (!myLocks[lf]) return process.nextTick(cb)
- myLocks[lf] = false
- lockFile.unlock(lockFileName(u), cb)
+ , locked = myLocks[lf]
+ if (locked === false) {
+ return process.nextTick(cb)
+ } else if (locked === true) {
+ myLocks[lf] = false
+ lockFile.unlock(lockFileName(u), cb)
+ } else {
+ throw new Error("Attempt to unlock " + u + ", which hasn't been locked")
+ }
}
function needName(er, data) {
diff --git a/deps/npm/lib/config.js b/deps/npm/lib/config.js
index 12879440e..7d9776379 100644
--- a/deps/npm/lib/config.js
+++ b/deps/npm/lib/config.js
@@ -83,9 +83,17 @@ function edit (cb) {
, ";;;;"
]
)
- .concat(Object.keys(npmconf.defaults).map(function (k) {
- return "; " + k + " = " + npmconf.defaults[k]
- }))
+ .concat(Object.keys(npmconf.defaults).reduce(function (arr, key) {
+ var obj = {};
+ obj[key] = npmconf.defaults[key]
+ if (key === "logstream") return arr
+ return arr.concat(
+ ini.stringify(obj)
+ .replace(/\n$/m, '')
+ .replace(/^/g, '; ')
+ .replace(/\n/g, '\n; ')
+ .split('\n'))
+ }, []))
.concat([""])
.join(os.EOL)
fs.writeFile
diff --git a/deps/npm/lib/dedupe.js b/deps/npm/lib/dedupe.js
index bd0056e99..0c2b18a78 100644
--- a/deps/npm/lib/dedupe.js
+++ b/deps/npm/lib/dedupe.js
@@ -15,10 +15,8 @@ var archy = require("archy")
var util = require("util")
var RegClient = require("npm-registry-client")
var npmconf = require("npmconf")
-var npm = require("npm")
var semver = require("semver")
-var npm = require("npm")
-var rimraf = require("rimraf")
+var rm = require("./utils/gently-rm.js")
var log = require("npmlog")
var npm = require("./npm.js")
@@ -132,15 +130,16 @@ function dedupe_ (dir, filter, unavoidable, dryrun, silent, cb) {
// a=/path/to/node_modules/foo/node_modules/bar
// b=/path/to/node_modules/elk/node_modules/bar
// ==/path/to/node_modules/bar
- a = a.split(/\/node_modules\//)
- b = b.split(/\/node_modules\//)
+ var nmReg = new RegExp("\\" + path.sep + "node_modules\\" + path.sep)
+ a = a.split(nmReg)
+ b = b.split(nmReg)
var name = a.pop()
b.pop()
// find the longest chain that both A and B share.
// then push the name back on it, and join by /node_modules/
var res = []
for (var i = 0, al = a.length, bl = b.length; i < al && i < bl && a[i] === b[i]; i++);
- return a.slice(0, i).concat(name).join("/node_modules/")
+ return a.slice(0, i).concat(name).join(path.sep + "node_modules" + path.sep)
}) : undefined
return [item[0], { item: item
@@ -194,9 +193,10 @@ function installAndRetest (set, filter, dir, unavoidable, silent, cb) {
// where is /path/to/node_modules/foo/node_modules/bar
// for package "bar", but we need it to be just
// /path/to/node_modules/foo
- where = where.split(/\/node_modules\//)
+ var nmReg = new RegExp("\\" + path.sep + "node_modules\\" + path.sep)
+ where = where.split(nmReg)
where.pop()
- where = where.join("/node_modules/")
+ where = where.join(path.sep + "node_modules" + path.sep)
remove.push.apply(remove, others)
return npm.commands.install(where, what, cb)
@@ -208,7 +208,7 @@ function installAndRetest (set, filter, dir, unavoidable, silent, cb) {
}, function (er, installed) {
if (er) return cb(er)
- asyncMap(remove, rimraf, function (er) {
+ asyncMap(remove, rm, function (er) {
if (er) return cb(er)
remove.forEach(function (r) {
log.info("rm", r)
@@ -248,19 +248,30 @@ function findVersions (npm, summary, cb) {
npm.registry.get(name, function (er, data) {
var regVersions = er ? [] : Object.keys(data.versions)
var locMatch = bestMatch(versions, ranges)
- var regMatch = bestMatch(regVersions, ranges)
+ var regMatch;
+ var tag = npm.config.get("tag")
+ var distTag = data["dist-tags"] && data["dist-tags"][tag]
+ if (distTag && data.versions[distTag] && matches(distTag, ranges)) {
+ regMatch = distTag
+ } else {
+ regMatch = bestMatch(regVersions, ranges)
+ }
cb(null, [[name, has, loc, locMatch, regMatch, locs]])
})
}, cb)
}
+function matches (version, ranges) {
+ return !ranges.some(function (r) {
+ return !semver.satisfies(version, r, true)
+ })
+}
+
function bestMatch (versions, ranges) {
return versions.filter(function (v) {
- return !ranges.some(function (r) {
- return !semver.satisfies(v, r)
- })
- }).sort(semver.compare).pop()
+ return matches(v, ranges)
+ }).sort(semver.compareLoose).pop()
}
@@ -343,4 +354,3 @@ function whoDepends_ (pkg, who, test) {
})
return who
}
-
diff --git a/deps/npm/lib/deprecate.js b/deps/npm/lib/deprecate.js
index 1ba4305cd..7d0b41ac7 100644
--- a/deps/npm/lib/deprecate.js
+++ b/deps/npm/lib/deprecate.js
@@ -37,7 +37,7 @@ function deprecate (args, cb) {
if (er) return cb(er)
// filter all the versions that match
Object.keys(data.versions).filter(function (v) {
- return semver.satisfies(v, ver)
+ return semver.satisfies(v, ver, true)
}).forEach(function (v) {
data.versions[v].deprecated = msg
})
diff --git a/deps/npm/lib/docs.js b/deps/npm/lib/docs.js
index ff2e381f8..2abbd62f2 100644
--- a/deps/npm/lib/docs.js
+++ b/deps/npm/lib/docs.js
@@ -1,10 +1,10 @@
-
module.exports = docs
-docs.usage = "npm docs <pkgname>"
+docs.usage = "npm docs <pkgname>"
+docs.usage += "\n"
+docs.usage += "npm docs ."
docs.completion = function (opts, cb) {
- if (opts.conf.argv.remain.length > 2) return cb()
registry.get("/-/short", 60000, function (er, list) {
return cb(null, list || [])
})
@@ -12,18 +12,51 @@ docs.completion = function (opts, cb) {
var npm = require("./npm.js")
, registry = npm.registry
- , log = require("npmlog")
, opener = require("opener")
+ , path = require('path')
+ , log = require('npmlog')
+
+function url (json) {
+ return json.homepage ? json.homepage : "https://npmjs.org/package/" + json.name
+}
function docs (args, cb) {
- if (!args.length) return cb(docs.usage)
- var n = args[0].split("@").shift()
- registry.get(n + "/latest", 3600, function (er, d) {
- if (er) return cb(er)
- var homepage = d.homepage
- , repo = d.repository || d.repositories
- , url = homepage ? homepage
- : "https://npmjs.org/package/" + d.name
- opener(url, { command: npm.config.get("browser") }, cb)
+ args = args || []
+ var pending = args.length
+ if (!pending) return getDoc('.', cb)
+ args.forEach(function(proj) {
+ getDoc(proj, function(err) {
+ if (err) return cb(err)
+ --pending || cb()
+ })
+ })
+}
+
+function getDoc (project, cb) {
+ project = project || '.'
+ var package = path.resolve(process.cwd(), "package.json")
+
+ if (project === '.' || project === './') {
+ try {
+ var json = require(package)
+ if (!json.name) throw new Error('package.json does not have a valid "name" property')
+ project = json.name
+ } catch (e) {
+ log.error(e.message)
+ return cb(docs.usage)
+ }
+
+ return opener(url(json), { command: npm.config.get("browser") }, cb)
+ }
+
+ registry.get(project + "/latest", 3600, function (er, json) {
+ var github = "https://github.com/" + project + "#readme"
+
+ if (er) {
+ if (project.split("/").length !== 2) return cb(er)
+ return opener(github, { command: npm.config.get("browser") }, cb)
+ }
+
+ return opener(url(json), { command: npm.config.get("browser") }, cb)
})
}
diff --git a/deps/npm/lib/help-search.js b/deps/npm/lib/help-search.js
index b0b15baca..027f14c42 100644
--- a/deps/npm/lib/help-search.js
+++ b/deps/npm/lib/help-search.js
@@ -8,6 +8,7 @@ var fs = require("graceful-fs")
, apiDocsPath = path.join(__dirname, "..", "doc", "api")
, log = require("npmlog")
, npm = require("./npm.js")
+ , glob = require("glob")
helpSearch.usage = "npm help-search <text>"
@@ -17,177 +18,201 @@ function helpSearch (args, silent, cb) {
// see if we're actually searching the api docs.
var argv = npm.config.get("argv").cooked
- , docsPath = cliDocsPath
- , cmd = "help"
- if (argv.length && argv[0].indexOf("api") !== -1) {
- docsPath = apiDocsPath
- cmd = "apihelp"
- }
- fs.readdir(docsPath, function(er, files) {
- if (er) {
- log.error("helpSearch", "Could not load documentation")
+ var docPath = path.resolve(__dirname, "..", "doc")
+ return glob(docPath + "/*/*.md", function (er, files) {
+ if (er)
return cb(er)
- }
-
- var search = args.join(" ")
- , results = []
- asyncMap(files, function (file, cb) {
- fs.lstat(path.resolve(docsPath, file), function (er, st) {
- if (er) return cb(er)
- if (!st.isFile()) return cb(null, [])
-
- fs.readFile(path.resolve(docsPath, file), "utf8", function (er, data) {
- if (er) return cb(er)
-
- var match = false
- for (var a = 0, l = args.length; a < l && !match; a ++) {
- match = data.toLowerCase().indexOf(args[a].toLowerCase()) !== -1
- }
- if (!match) return cb(null, [])
-
- var lines = data.split(/\n+/)
- , context = []
-
- // if a line has a search term, then skip it and the next line.
- // if the next line has a search term, then skip all 3
- // otherwise, set the line to null.
- for (var i = 0, l = lines.length; i < l; i ++) {
- var line = lines[i]
- , nextLine = lines[i + 1]
- , match = false
- if (nextLine) {
- for (var a = 0, ll = args.length; a < ll && !match; a ++) {
- match = nextLine.toLowerCase()
- .indexOf(args[a].toLowerCase()) !== -1
- }
- if (match) {
- // skip over the next line, and the line after it.
- i += 2
- continue
- }
- }
-
- match = false
- for (var a = 0, ll = args.length; a < ll && !match; a ++) {
- match = line.toLowerCase().indexOf(args[a].toLowerCase()) !== -1
- }
- if (match) {
- // skip over the next line
- i ++
- continue
- }
-
- lines[i] = null
- }
-
- // now squish any string of nulls into a single null
- lines = lines.reduce(function (l, r) {
- if (!(r === null && l[l.length-1] === null)) l.push(r)
- return l
- }, [])
-
- if (lines[lines.length - 1] === null) lines.pop()
- if (lines[0] === null) lines.shift()
-
- // now see how many args were found at all.
- var found = {}
- , totalHits = 0
- lines.forEach(function (line) {
- args.forEach(function (arg) {
- var hit = (line || "").toLowerCase()
- .split(arg.toLowerCase()).length - 1
- if (hit > 0) {
- found[arg] = (found[arg] || 0) + hit
- totalHits += hit
- }
- })
- })
-
- return cb(null, { file: file, lines: lines, found: Object.keys(found)
- , hits: found, totalHits: totalHits })
- })
+ readFiles(files, function (er, data) {
+ if (er)
+ return cb(er)
+ searchFiles(args, data, function (er, results) {
+ if (er)
+ return cb(er)
+ formatResults(args, results, cb)
})
- }, function (er, results) {
- if (er) return cb(er)
+ })
+ })
+}
- // if only one result, then just show that help section.
- if (results.length === 1) {
- return npm.commands.help([results[0].file.replace(/\.md$/, "")], cb)
+function readFiles (files, cb) {
+ var res = {}
+ asyncMap(files, function (file, cb) {
+ fs.readFile(file, 'utf8', function (er, data) {
+ res[file] = data
+ return cb(er)
+ })
+ }, function (er) {
+ return cb(er, res)
+ })
+}
+
+function searchFiles (args, files, cb) {
+ var results = []
+ Object.keys(files).forEach(function (file) {
+ var data = files[file]
+
+ // skip if no matches at all
+ for (var a = 0, l = args.length; a < l && !match; a++) {
+ var match = data.toLowerCase().indexOf(args[a].toLowerCase()) !== -1
+ }
+ if (!match)
+ return
+
+ var lines = data.split(/\n+/)
+ var context = []
+
+ // if a line has a search term, then skip it and the next line.
+ // if the next line has a search term, then skip all 3
+ // otherwise, set the line to null. then remove the nulls.
+ for (var i = 0, l = lines.length; i < l; i ++) {
+ var line = lines[i]
+ , nextLine = lines[i + 1]
+ , match = false
+ if (nextLine) {
+ for (var a = 0, ll = args.length; a < ll && !match; a ++) {
+ match = nextLine.toLowerCase()
+ .indexOf(args[a].toLowerCase()) !== -1
+ }
+ if (match) {
+ // skip over the next line, and the line after it.
+ i += 2
+ continue
+ }
}
- if (results.length === 0) {
- console.log("No results for " + args.map(JSON.stringify).join(" "))
- return cb()
+ match = false
+ for (var a = 0, ll = args.length; a < ll && !match; a ++) {
+ match = line.toLowerCase().indexOf(args[a].toLowerCase()) !== -1
+ }
+ if (match) {
+ // skip over the next line
+ i ++
+ continue
}
- // sort results by number of results found, then by number of hits
- // then by number of matching lines
- results = results.sort(function (a, b) {
- return a.found.length > b.found.length ? -1
- : a.found.length < b.found.length ? 1
- : a.totalHits > b.totalHits ? -1
- : a.totalHits < b.totalHits ? 1
- : a.lines.length > b.lines.length ? -1
- : a.lines.length < b.lines.length ? 1
- : 0
+ lines[i] = null
+ }
+
+ // now squish any string of nulls into a single null
+ lines = lines.reduce(function (l, r) {
+ if (!(r === null && l[l.length-1] === null)) l.push(r)
+ return l
+ }, [])
+
+ if (lines[lines.length - 1] === null) lines.pop()
+ if (lines[0] === null) lines.shift()
+
+ // now see how many args were found at all.
+ var found = {}
+ , totalHits = 0
+ lines.forEach(function (line) {
+ args.forEach(function (arg) {
+ var hit = (line || "").toLowerCase()
+ .split(arg.toLowerCase()).length - 1
+ if (hit > 0) {
+ found[arg] = (found[arg] || 0) + hit
+ totalHits += hit
+ }
})
+ })
- var out = results.map(function (res, i, results) {
- var out = "npm " + cmd + " "+res.file.replace(/\.md$/, "")
- , r = Object.keys(res.hits).map(function (k) {
- return k + ":" + res.hits[k]
- }).sort(function (a, b) {
- return a > b ? 1 : -1
- }).join(" ")
-
- out += ((new Array(Math.max(1, 81 - out.length - r.length)))
- .join (" ")) + r
-
- if (!npm.config.get("long")) return out
-
- var out = "\n\n" + out
- + "\n" + (new Array(81)).join("—") + "\n"
- + res.lines.map(function (line, i) {
- if (line === null || i > 3) return ""
- for (var out = line, a = 0, l = args.length; a < l; a ++) {
- var finder = out.toLowerCase().split(args[a].toLowerCase())
- , newOut = []
- , p = 0
- finder.forEach(function (f) {
- newOut.push( out.substr(p, f.length)
- , "\1"
- , out.substr(p + f.length, args[a].length)
- , "\2" )
- p += f.length + args[a].length
- })
- out = newOut.join("")
- }
- if (npm.color) {
- var color = "\033[31;40m"
- , reset = "\033[0m"
- } else {
- var color = ""
- , reset = ""
- }
- out = out.split("\1").join(color)
- .split("\2").join(reset)
- return out
- }).join("\n").trim()
- return out
- }).join("\n")
-
- if (results.length && !npm.config.get("long")) {
- out = "Top hits for "+(args.map(JSON.stringify).join(" "))
- + "\n" + (new Array(81)).join("—") + "\n"
- + out
- + "\n" + (new Array(81)).join("—") + "\n"
- + "(run with -l or --long to see more context)"
- }
+ var cmd = "npm help "
+ if (path.basename(path.dirname(file)) === "api") {
+ cmd = "npm apihelp "
+ }
+ cmd += path.basename(file, ".md").replace(/^npm-/, "")
+ results.push({ file: file
+ , cmd: cmd
+ , lines: lines
+ , found: Object.keys(found)
+ , hits: found
+ , totalHits: totalHits
+ })
+ })
- console.log(out.trim())
- cb(null, results)
- })
+ // if only one result, then just show that help section.
+ if (results.length === 1) {
+ return npm.commands.help([results[0].file.replace(/\.md$/, "")], cb)
+ }
+
+ if (results.length === 0) {
+ console.log("No results for " + args.map(JSON.stringify).join(" "))
+ return cb()
+ }
+ // sort results by number of results found, then by number of hits
+ // then by number of matching lines
+ results = results.sort(function (a, b) {
+ return a.found.length > b.found.length ? -1
+ : a.found.length < b.found.length ? 1
+ : a.totalHits > b.totalHits ? -1
+ : a.totalHits < b.totalHits ? 1
+ : a.lines.length > b.lines.length ? -1
+ : a.lines.length < b.lines.length ? 1
+ : 0
})
+
+ cb(null, results)
+}
+
+function formatResults (args, results, cb) {
+ if (!results) return cb(null)
+
+ var cols = Math.min(process.stdout.columns || Infinity, 80) + 1
+
+ var out = results.map(function (res, i, results) {
+ var out = res.cmd
+ , r = Object.keys(res.hits).map(function (k) {
+ return k + ":" + res.hits[k]
+ }).sort(function (a, b) {
+ return a > b ? 1 : -1
+ }).join(" ")
+
+ out += ((new Array(Math.max(1, cols - out.length - r.length)))
+ .join (" ")) + r
+
+ if (!npm.config.get("long")) return out
+
+ var out = "\n\n" + out
+ + "\n" + (new Array(cols)).join("—") + "\n"
+ + res.lines.map(function (line, i) {
+ if (line === null || i > 3) return ""
+ for (var out = line, a = 0, l = args.length; a < l; a ++) {
+ var finder = out.toLowerCase().split(args[a].toLowerCase())
+ , newOut = []
+ , p = 0
+ finder.forEach(function (f) {
+ newOut.push( out.substr(p, f.length)
+ , "\1"
+ , out.substr(p + f.length, args[a].length)
+ , "\2" )
+ p += f.length + args[a].length
+ })
+ out = newOut.join("")
+ }
+ if (npm.color) {
+ var color = "\033[31;40m"
+ , reset = "\033[0m"
+ } else {
+ var color = ""
+ , reset = ""
+ }
+ out = out.split("\1").join(color)
+ .split("\2").join(reset)
+ return out
+ }).join("\n").trim()
+ return out
+ }).join("\n")
+
+ if (results.length && !npm.config.get("long")) {
+ out = "Top hits for "+(args.map(JSON.stringify).join(" "))
+ + "\n" + (new Array(cols)).join("—") + "\n"
+ + out
+ + "\n" + (new Array(cols)).join("—") + "\n"
+ + "(run with -l or --long to see more context)"
+ }
+
+ console.log(out.trim())
+ cb(null, results)
}
diff --git a/deps/npm/lib/help.js b/deps/npm/lib/help.js
index 8faef1c2c..72b4393b6 100644
--- a/deps/npm/lib/help.js
+++ b/deps/npm/lib/help.js
@@ -3,9 +3,7 @@ module.exports = help
help.completion = function (opts, cb) {
if (opts.conf.argv.remain.length > 2) return cb(null, [])
- var num = 1
- if (-1 !== opts.conf.argv.remain[1].indexOf("api")) num = 3
- getSections(num, cb)
+ getSections(cb)
}
var fs = require("graceful-fs")
@@ -14,94 +12,168 @@ var fs = require("graceful-fs")
, npm = require("./npm.js")
, log = require("npmlog")
, opener = require("opener")
+ , glob = require("glob")
function help (args, cb) {
- var num = 1
- , argv = npm.config.get("argv").cooked
- if (argv.length && -1 !== argv[0].indexOf("api")) {
- num = 3
+ var argv = npm.config.get("argv").cooked
+
+ var argnum = 0
+ if (args.length === 2 && ~~args[0]) {
+ argnum = ~~args.shift()
}
+ // npm help foo bar baz: search topics
if (args.length > 1 && args[0]) {
- return npm.commands["help-search"](args, num, cb)
+ return npm.commands["help-search"](args, argnum, cb)
}
var section = npm.deref(args[0]) || args[0]
- if (section) {
- if ( npm.config.get("usage")
- && npm.commands[section]
- && npm.commands[section].usage
- ) {
- npm.config.set("loglevel", "silent")
- log.level = "silent"
- console.log(npm.commands[section].usage)
- return cb()
- }
-
- var sectionPath = path.join( __dirname, "..", "man", "man" + num
- , section + "." + num)
- , htmlPath = path.resolve( __dirname, "..", "html"
- , num === 3 ? "api" : "doc"
- , section+".html" )
- return fs.stat
- ( sectionPath
- , function (e, o) {
- if (e) return npm.commands["help-search"](args, cb)
-
- var manpath = path.join(__dirname, "..", "man")
- , env = {}
- Object.keys(process.env).forEach(function (i) {
- env[i] = process.env[i]
- })
- env.MANPATH = manpath
- var viewer = npm.config.get("viewer")
-
- switch (viewer) {
- case "woman":
- var a = ["-e", "(woman-find-file \"" + sectionPath + "\")"]
- var conf = { env: env, customFds: [ 0, 1, 2] }
- var woman = spawn("emacsclient", a, conf)
- woman.on("close", cb)
- break
-
- case "browser":
- opener(htmlPath, { command: npm.config.get("browser") }, cb)
- break
-
- default:
- var conf = { env: env, customFds: [ 0, 1, 2] }
- var man = spawn("man", [num, section], conf)
- man.on("close", cb)
- }
- }
- )
- } else getSections(function (er, sections) {
- if (er) return cb(er)
+ // npm help <noargs>: show basic usage
+ if (!section) {
+ var valid = argv[0] === 'help' ? 0 : 1
+ return npmUsage(valid, cb)
+ }
+
+
+ // npm <cmd> -h: show command usage
+ if ( npm.config.get("usage")
+ && npm.commands[section]
+ && npm.commands[section].usage
+ ) {
npm.config.set("loglevel", "silent")
log.level = "silent"
- console.log
- ( ["\nUsage: npm <command>"
- , ""
- , "where <command> is one of:"
- , npm.config.get("long") ? usages()
- : " " + wrap(Object.keys(npm.commands))
- , ""
- , "npm <cmd> -h quick help on <cmd>"
- , "npm -l display full usage info"
- , "npm faq commonly asked questions"
- , "npm help <term> search for help on <term>"
- , "npm help npm involved overview"
- , ""
- , "Specify configs in the ini-formatted file:"
- , " " + npm.config.get("userconfig")
- , "or on the command line via: npm <command> --key value"
- , "Config info can be viewed via: npm help config"
- , ""
- , "npm@" + npm.version + " " + path.dirname(__dirname)
- ].join("\n"))
- cb(er)
+ console.log(npm.commands[section].usage)
+ return cb()
+ }
+
+ // npm apihelp <section>: Prefer section 3 over section 1
+ var apihelp = argv.length && -1 !== argv[0].indexOf("api")
+ var pref = apihelp ? [3, 1, 5, 7] : [1, 3, 5, 7]
+ if (argnum)
+ pref = [ argnum ].concat(pref.filter(function (n) {
+ return n !== argnum
+ }))
+
+ // npm help <section>: Try to find the path
+ var manroot = path.resolve(__dirname, "..", "man")
+ var htmlroot = path.resolve(__dirname, "..", "html", "doc")
+
+ // legacy
+ if (section === "global")
+ section = "folders"
+ else if (section === "json")
+ section = "package.json"
+
+ // find either /section.n or /npm-section.n
+ var f = "+(npm-" + section + "|" + section + ").[0-9]"
+ return glob(manroot + "/*/" + f, function (er, mans) {
+ if (er)
+ return cb(er)
+
+ if (!mans.length)
+ return npm.commands["help-search"](args, cb)
+
+ viewMan(pickMan(mans, pref), cb)
+ })
+}
+
+function pickMan (mans, pref_) {
+ var nre = /([0-9]+)$/
+ var pref = {}
+ pref_.forEach(function (sect, i) {
+ pref[sect] = i
+ })
+ mans = mans.sort(function (a, b) {
+ var an = a.match(nre)[1]
+ var bn = b.match(nre)[1]
+ return an === bn ? (a > b ? -1 : 1)
+ : pref[an] < pref[bn] ? -1
+ : 1
+ })
+ return mans[0]
+}
+
+function viewMan (man, cb) {
+ var nre = /([0-9]+)$/
+ var num = man.match(nre)[1]
+ var section = path.basename(man, "." + num)
+
+ // at this point, we know that the specified man page exists
+ var manpath = path.join(__dirname, "..", "man")
+ , env = {}
+ Object.keys(process.env).forEach(function (i) {
+ env[i] = process.env[i]
})
+ env.MANPATH = manpath
+ var viewer = npm.config.get("viewer")
+
+ switch (viewer) {
+ case "woman":
+ var a = ["-e", "(woman-find-file \"" + man + "\")"]
+ var conf = { env: env, customFds: [ 0, 1, 2] }
+ var woman = spawn("emacsclient", a, conf)
+ woman.on("close", cb)
+ break
+
+ case "browser":
+ opener(htmlMan(man), { command: npm.config.get("browser") }, cb)
+ break
+
+ default:
+ var conf = { env: env, customFds: [ 0, 1, 2] }
+ var man = spawn("man", [num, section], conf)
+ man.on("close", cb)
+ break
+ }
+}
+
+function htmlMan (man) {
+ var sect = +man.match(/([0-9]+)$/)[1]
+ var f = path.basename(man).replace(/([0-9]+)$/, "html")
+ switch (sect) {
+ case 1:
+ sect = "cli"
+ break
+ case 3:
+ sect = "api"
+ break
+ case 5:
+ sect = "files"
+ break
+ case 7:
+ sect = "misc"
+ break
+ default:
+ throw new Error("invalid man section: " + sect)
+ }
+ return path.resolve(__dirname, "..", "html", "doc", sect, f)
+}
+
+function npmUsage (valid, cb) {
+ npm.config.set("loglevel", "silent")
+ log.level = "silent"
+ console.log
+ ( ["\nUsage: npm <command>"
+ , ""
+ , "where <command> is one of:"
+ , npm.config.get("long") ? usages()
+ : " " + wrap(Object.keys(npm.commands))
+ , ""
+ , "npm <cmd> -h quick help on <cmd>"
+ , "npm -l display full usage info"
+ , "npm faq commonly asked questions"
+ , "npm help <term> search for help on <term>"
+ , "npm help npm involved overview"
+ , ""
+ , "Specify configs in the ini-formatted file:"
+ , " " + npm.config.get("userconfig")
+ , "or on the command line via: npm <command> --key value"
+ , "Config info can be viewed via: npm help config"
+ , ""
+ , "npm@" + npm.version + " " + path.dirname(__dirname)
+ ].join("\n"))
+ cb(valid)
}
function usages () {
@@ -127,9 +199,17 @@ function usages () {
function wrap (arr) {
var out = ['']
, l = 0
+ , line
+
+ line = process.stdout.columns
+ if (!line)
+ line = 60
+ else
+ line = Math.min(60, Math.max(line - 16, 24))
+
arr.sort(function (a,b) { return a<b?-1:1 })
.forEach(function (c) {
- if (out[l].length + c.length + 2 < 60) {
+ if (out[l].length + c.length + 2 < line) {
out[l] += ', '+c
} else {
out[l++] += ','
@@ -139,16 +219,16 @@ function wrap (arr) {
return out.join("\n ").substr(2)
}
-function getSections (num, cb) {
- if (typeof cb !== "function") cb = num, num = 1
-
- var mp = path.join(__dirname, "../man/man" + num + "/")
- , cleaner = new RegExp("\\." + num + "$")
- fs.readdir(mp, function (er, files) {
- if (er) return cb(er)
- var sectionList = files.concat("help." + num)
- .filter(function (s) { return s.match(cleaner) })
- .map(function (s) { return s.replace(cleaner, "")})
- cb(null, sectionList)
+function getSections (cb) {
+ var g = path.resolve(__dirname, "../man/man[0-9]/*.[0-9]")
+ glob(g, function (er, files) {
+ if (er)
+ return cb(er)
+ cb(null, Object.keys(files.reduce(function (acc, file) {
+ file = path.basename(file).replace(/\.[0-9]+$/, "")
+ file = file.replace(/^npm-/, "")
+ acc[file] = true
+ return acc
+ }, { help: true })))
})
}
diff --git a/deps/npm/lib/install.js b/deps/npm/lib/install.js
index 50ba5ebc5..3e319fa67 100644
--- a/deps/npm/lib/install.js
+++ b/deps/npm/lib/install.js
@@ -72,8 +72,12 @@ var npm = require("./npm.js")
, mkdir = require("mkdirp")
, lifecycle = require("./utils/lifecycle.js")
, archy = require("archy")
+ , isGitUrl = require("./utils/is-git-url.js")
+ , npmInstallChecks = require("npm-install-checks")
+ , sortedObject = require("sorted-object")
function install (args, cb_) {
+ var hasArguments = !!args.length
function cb (er, installed) {
if (er) return cb_(er)
@@ -94,7 +98,7 @@ function install (args, cb_) {
, pretty = prettify(tree, installed).trim()
if (pretty) console.log(pretty)
- save(where, installed, tree, pretty, cb_)
+ save(where, installed, tree, pretty, hasArguments, cb_)
})
}
@@ -134,6 +138,7 @@ function install (args, cb_) {
, ancestors: {}
, explicit: false
, parent: data
+ , root: true
, wrap: null }
if (data.name === path.basename(where) &&
@@ -160,15 +165,20 @@ function install (args, cb_) {
// initial "family" is the name:version of the root, if it's got
// a package.json file.
- readJson(path.resolve(where, "package.json"), function (er, data) {
- if (er && er.code !== "ENOENT" && er.code !== "ENOTDIR") return cb(er)
+ var jsonFile = path.resolve(where, "package.json")
+ readJson(jsonFile, log.warn, function (er, data) {
+ if (er
+ && er.code !== "ENOENT"
+ && er.code !== "ENOTDIR") return cb(er)
if (er) data = null
var context = { family: {}
, ancestors: {}
, explicit: true
, parent: data
+ , root: true
, wrap: null }
- if (data) {
+ if (data && data.name === path.basename(where) &&
+ path.basename(path.dirname(where)) === "node_modules") {
context.family[data.name] = context.ancestors[data.name] = data.version
}
var fn = npm.config.get("global") ? installMany : installManyTop
@@ -178,7 +188,7 @@ function install (args, cb_) {
}
function findPeerInvalid (where, cb) {
- readInstalled(where, function (er, data) {
+ readInstalled(where, { log: log.warn, dev: true }, function (er, data) {
if (er) return cb(er)
cb(null, findPeerInvalid_(data.dependencies, []))
@@ -234,7 +244,9 @@ function readDependencies (context, where, opts, cb) {
var wrap = context ? context.wrap : null
readJson( path.resolve(where, "package.json")
+ , log.warn
, function (er, data) {
+ if (er && er.code === "ENOENT") er.code = "ENOPACKAGEJSON"
if (er) return cb(er)
if (opts && opts.dev) {
@@ -315,8 +327,9 @@ function readWrap (w) {
// if the -S|--save option is specified, then write installed packages
// as dependencies to a package.json file.
// This is experimental.
-function save (where, installed, tree, pretty, cb) {
- if (!npm.config.get("save") &&
+function save (where, installed, tree, pretty, hasArguments, cb) {
+ if (!hasArguments ||
+ !npm.config.get("save") &&
!npm.config.get("save-dev") &&
!npm.config.get("save-optional") ||
npm.config.get("global")) {
@@ -324,6 +337,7 @@ function save (where, installed, tree, pretty, cb) {
}
var saveBundle = npm.config.get('save-bundle')
+ var savePrefix = npm.config.get('save-prefix') || "^";
// each item in the tree is a top-level thing that should be saved
// to the package.json file.
@@ -337,9 +351,10 @@ function save (where, installed, tree, pretty, cb) {
if (u && u.protocol) w[1] = t.from
return w
}).reduce(function (set, k) {
- var rangeDescriptor = semver.valid(k[1]) &&
- semver.gte(k[1], "0.1.0")
- ? "~" : ""
+ var rangeDescriptor = semver.valid(k[1], true) &&
+ semver.gte(k[1], "0.1.0", true) &&
+ !npm.config.get("save-exact")
+ ? savePrefix : ""
set[k[0]] = rangeDescriptor + k[1]
return set
}, {})
@@ -366,7 +381,7 @@ function save (where, installed, tree, pretty, cb) {
var bundle = data.bundleDependencies || data.bundledDependencies
delete data.bundledDependencies
if (!Array.isArray(bundle)) bundle = []
- data.bundleDependencies = bundle
+ data.bundleDependencies = bundle.sort()
}
log.verbose('saving', things)
@@ -379,6 +394,8 @@ function save (where, installed, tree, pretty, cb) {
}
})
+ data[deps] = sortedObject(data[deps])
+
data = JSON.stringify(data, null, 2) + "\n"
fs.writeFile(saveTarget, data, function (er) {
cb(er, installed, tree, pretty)
@@ -431,7 +448,7 @@ function prettify (tree, installed) {
if (g) g = " (" + g + ")"
return c.what + g
})
- })
+ }, "", { unicode: npm.config.get("unicode") })
}).join("\n")
}
@@ -494,7 +511,7 @@ function installManyTop (what, where, context, cb_) {
if (context.explicit) return next()
- readJson(path.join(where, "package.json"), function (er, data) {
+ readJson(path.join(where, "package.json"), log.warn, function (er, data) {
if (er) return next(er)
lifecycle(data, "preinstall", where, next)
})
@@ -519,7 +536,7 @@ function installManyTop_ (what, where, context, cb) {
asyncMap(pkgs.map(function (p) {
return path.resolve(nm, p, "package.json")
}), function (jsonfile, cb) {
- readJson(jsonfile, function (er, data) {
+ readJson(jsonfile, log.warn, function (er, data) {
if (er && er.code !== "ENOENT" && er.code !== "ENOTDIR") return cb(er)
if (er) return cb(null, [])
return cb(null, [[data.name, data.version]])
@@ -570,7 +587,9 @@ function installMany (what, where, context, cb) {
var newPrev = Object.create(context.family)
, newAnc = Object.create(context.ancestors)
- newAnc[data.name] = data.version
+ if (!context.root) {
+ newAnc[data.name] = data.version
+ }
targets.forEach(function (t) {
newPrev[t.name] = t.version
})
@@ -610,7 +629,7 @@ function targetResolver (where, context, deps) {
})
asyncMap(inst, function (pkg, cb) {
- readJson(path.resolve(nm, pkg, "package.json"), function (er, d) {
+ readJson(path.resolve(nm, pkg, "package.json"), log.warn, function (er, d) {
if (er && er.code !== "ENOENT" && er.code !== "ENOTDIR") return cb(er)
// error means it's not a package, most likely.
if (er) return cb(null, [])
@@ -619,12 +638,21 @@ function targetResolver (where, context, deps) {
// otherwise, make sure that it's a semver match with what we want.
var bd = parent.bundleDependencies
if (bd && bd.indexOf(d.name) !== -1 ||
- semver.satisfies(d.version, deps[d.name] || "*")) {
+ semver.satisfies(d.version, deps[d.name] || "*", true) ||
+ deps[d.name] === d._resolved) {
return cb(null, d.name)
}
- // something is there, but it's not satisfactory. Clobber it.
- return cb(null, [])
+ // see if the package had been previously linked
+ fs.lstat(path.resolve(nm, pkg), function(err, s) {
+ if (err) return cb(null, [])
+ if (s.isSymbolicLink()) {
+ return cb(null, d.name)
+ }
+
+ // something is there, but it's not satisfactory. Clobber it.
+ return cb(null, [])
+ })
})
}, function (er, inst) {
// this is the list of things that are valid and should be ignored.
@@ -675,6 +703,12 @@ function targetResolver (where, context, deps) {
what = what + "@" + deps[what]
}
+ // This is where we actually fetch the package, if it's not already
+ // in the cache.
+ // If it's a git repo, then we want to install it, even if the parent
+ // already has a matching copy.
+ // If it's not a git repo, and the parent already has that pkg, then
+ // we can skip installing it again.
cache.add(what, function (er, data) {
if (er && parent && parent.optionalDependencies &&
parent.optionalDependencies.hasOwnProperty(what.split("@")[0])) {
@@ -683,17 +717,24 @@ function targetResolver (where, context, deps) {
return cb(null, [])
}
+ var isGit = false
+ , maybeGit = what.split("@").slice(1).join()
+
+ if (maybeGit)
+ isGit = isGitUrl(url.parse(maybeGit))
+
if (!er &&
data &&
!context.explicit &&
context.family[data.name] === data.version &&
- !npm.config.get("force")) {
+ !npm.config.get("force") &&
+ !isGit) {
log.info("already installed", data.name + "@" + data.version)
return cb(null, [])
}
if (data && !data._from) data._from = what
-
+ if (er && parent && parent.name) er.parent = parent.name
return cb(er, data || [])
})
}
@@ -729,7 +770,7 @@ function localLink (target, where, context, cb) {
, "package.json" )
, parent = context.parent
- readJson(jsonFile, function (er, data) {
+ readJson(jsonFile, log.warn, function (er, data) {
if (er && er.code !== "ENOENT" && er.code !== "ENOTDIR") return cb(er)
if (er || data._id === target._id) {
if (er) {
@@ -807,12 +848,16 @@ function installOne_ (target, where, context, cb) {
}
installOnesInProgress[target.name].push(where)
var indexOfIOIP = installOnesInProgress[target.name].length - 1
+ , force = npm.config.get("force")
+ , nodeVersion = npm.config.get("node-version")
+ , strict = npm.config.get("engine-strict")
+ , c = npmInstallChecks
chain
- ( [ [checkEngine, target]
- , [checkPlatform, target]
- , [checkCycle, target, context.ancestors]
- , [checkGit, targetFolder]
+ ( [ [c.checkEngine, target, npm.version, nodeVersion, force, strict]
+ , [c.checkPlatform, target, force]
+ , [c.checkCycle, target, context.ancestors]
+ , [c.checkGit, targetFolder]
, [write, target, targetFolder, context] ]
, function (er, d) {
installOnesInProgress[target.name].splice(indexOfIOIP, 1)
@@ -825,146 +870,6 @@ function installOne_ (target, where, context, cb) {
)
}
-function checkEngine (target, cb) {
- var npmv = npm.version
- , force = npm.config.get("force")
- , nodev = force ? null : npm.config.get("node-version")
- , strict = npm.config.get("engine-strict") || target.engineStrict
- , eng = target.engines
- if (!eng) return cb()
- if (nodev && eng.node && !semver.satisfies(nodev, eng.node)
- || eng.npm && !semver.satisfies(npmv, eng.npm)) {
- if (strict) {
- var er = new Error("Unsupported")
- er.code = "ENOTSUP"
- er.required = eng
- er.pkgid = target._id
- return cb(er)
- } else {
- log.warn( "engine", "%s: wanted: %j (current: %j)"
- , target._id, eng, {node: nodev, npm: npm.version} )
- }
- }
- return cb()
-}
-
-function checkPlatform (target, cb) {
- var platform = process.platform
- , arch = process.arch
- , osOk = true
- , cpuOk = true
- , force = npm.config.get("force")
-
- if (force) {
- return cb()
- }
-
- if (target.os) {
- osOk = checkList(platform, target.os)
- }
- if (target.cpu) {
- cpuOk = checkList(arch, target.cpu)
- }
- if (!osOk || !cpuOk) {
- var er = new Error("Unsupported")
- er.code = "EBADPLATFORM"
- er.os = target.os || ['any']
- er.cpu = target.cpu || ['any']
- er.pkgid = target._id
- return cb(er)
- }
- return cb()
-}
-
-function checkList (value, list) {
- var tmp
- , match = false
- , blc = 0
- if (typeof list === "string") {
- list = [list]
- }
- if (list.length === 1 && list[0] === "any") {
- return true
- }
- for (var i = 0; i < list.length; ++i) {
- tmp = list[i]
- if (tmp[0] === '!') {
- tmp = tmp.slice(1)
- if (tmp === value) {
- return false
- }
- ++blc
- } else {
- match = match || tmp === value
- }
- }
- return match || blc === list.length
-}
-
-function checkCycle (target, ancestors, cb) {
- // there are some very rare and pathological edge-cases where
- // a cycle can cause npm to try to install a never-ending tree
- // of stuff.
- // Simplest:
- //
- // A -> B -> A' -> B' -> A -> B -> A' -> B' -> A -> ...
- //
- // Solution: Simply flat-out refuse to install any name@version
- // that is already in the prototype tree of the ancestors object.
- // A more correct, but more complex, solution would be to symlink
- // the deeper thing into the new location.
- // Will do that if anyone whines about this irl.
- //
- // Note: `npm install foo` inside of the `foo` package will abort
- // earlier if `--force` is not set. However, if it IS set, then
- // we need to still fail here, but just skip the first level. Of
- // course, it'll still fail eventually if it's a true cycle, and
- // leave things in an undefined state, but that's what is to be
- // expected when `--force` is used. That is why getPrototypeOf
- // is used *twice* here: to skip the first level of repetition.
-
- var p = Object.getPrototypeOf(Object.getPrototypeOf(ancestors))
- , name = target.name
- , version = target.version
- while (p && p !== Object.prototype && p[name] !== version) {
- p = Object.getPrototypeOf(p)
- }
- if (p[name] !== version) return cb()
-
- var er = new Error("Unresolvable cycle detected")
- var tree = [target._id, JSON.parse(JSON.stringify(ancestors))]
- , t = Object.getPrototypeOf(ancestors)
- while (t && t !== Object.prototype) {
- if (t === p) t.THIS_IS_P = true
- tree.push(JSON.parse(JSON.stringify(t)))
- t = Object.getPrototypeOf(t)
- }
- log.verbose("unresolvable dependency tree", tree)
- er.pkgid = target._id
- er.code = "ECYCLE"
- return cb(er)
-}
-
-function checkGit (folder, cb) {
- // if it's a git repo then don't touch it!
- fs.lstat(folder, function (er, s) {
- if (er || !s.isDirectory()) return cb()
- else checkGit_(folder, cb)
- })
-}
-
-function checkGit_ (folder, cb) {
- fs.stat(path.resolve(folder, ".git"), function (er, s) {
- if (!er && s.isDirectory()) {
- var e = new Error("Appears to be a git repo or submodule.")
- e.path = folder
- e.code = "EISGIT"
- return cb(e)
- }
- cb()
- })
-}
-
function write (target, targetFolder, context, cb_) {
var up = npm.config.get("unsafe-perm")
, user = up ? null : npm.config.get("user")
@@ -977,7 +882,7 @@ function write (target, targetFolder, context, cb_) {
if (!er) return cb_(er, data)
if (false === npm.config.get("rollback")) return cb_(er)
- npm.commands.unbuild([targetFolder], function (er2) {
+ npm.commands.unbuild([targetFolder], true, function (er2) {
if (er2) log.error("error rolling back", target._id, er2)
return cb_(er, data)
})
@@ -1016,10 +921,10 @@ function write (target, targetFolder, context, cb_) {
family)
var depsTargetFolder = targetFolder
var depsContext = { family: family
- , ancestors: context.ancestors
- , parent: target
- , explicit: false
- , wrap: wrap }
+ , ancestors: context.ancestors
+ , parent: target
+ , explicit: false
+ , wrap: wrap }
var peerDeps = prepareForInstallMany(data, "peerDependencies", bundled,
wrap, family)
@@ -1066,7 +971,10 @@ function prepareForInstallMany (packageData, depsKey, bundled, wrap, family) {
// prefer to not install things that are satisfied by
// something in the "family" list, unless we're installing
// from a shrinkwrap.
- return wrap || !semver.satisfies(family[d], packageData[depsKey][d])
+ if (wrap) return wrap
+ if (semver.validRange(family[d], true))
+ return !semver.satisfies(family[d], packageData[depsKey][d], true)
+ return true
}).map(function (d) {
var t = packageData[depsKey][d]
, parsed = url.parse(t.replace(/^git\+/, "git"))
diff --git a/deps/npm/lib/link.js b/deps/npm/lib/link.js
index 4ecd64ac3..562846550 100644
--- a/deps/npm/lib/link.js
+++ b/deps/npm/lib/link.js
@@ -8,7 +8,7 @@ var npm = require("./npm.js")
, asyncMap = require("slide").asyncMap
, chain = require("slide").chain
, path = require("path")
- , rm = require("rimraf")
+ , rm = require("./utils/gently-rm.js")
, build = require("./build.js")
module.exports = link
@@ -121,6 +121,10 @@ function linkPkg (folder, cb_) {
return cb_(er, [[d && d._id, target, null, null]])
}
if (er) return cb(er)
+ if (!d.name) {
+ er = new Error("Package must have a name field to be linked")
+ return cb(er)
+ }
var target = path.resolve(npm.globalDir, d.name)
rm(target, function (er) {
if (er) return cb(er)
diff --git a/deps/npm/lib/ls.js b/deps/npm/lib/ls.js
index c1d222090..efe503b62 100644
--- a/deps/npm/lib/ls.js
+++ b/deps/npm/lib/ls.js
@@ -13,6 +13,8 @@ var npm = require("./npm.js")
, path = require("path")
, archy = require("archy")
, semver = require("semver")
+ , url = require("url")
+ , isGitUrl = require("./utils/is-git-url.js")
ls.usage = "npm ls"
@@ -33,7 +35,9 @@ function ls (args, silent, cb) {
return [ name, ver ]
})
- readInstalled(dir, npm.config.get("depth"), function (er, data) {
+ var depth = npm.config.get("depth")
+ var opt = { depth: depth, log: log.warn, dev: true }
+ readInstalled(dir, opt, function (er, data) {
var bfs = bfsify(data, args)
, lite = getLite(bfs)
@@ -60,6 +64,8 @@ function ls (args, silent, cb) {
}
console.log(out)
+ if (args.length && !data._found) process.exitCode = 1
+
// if any errors were found, then complain and exit status 1
if (lite.problems && lite.problems.length) {
er = lite.problems.join('\n')
@@ -83,7 +89,6 @@ function alphasort (a, b) {
function getLite (data, noname) {
var lite = {}
, maxDepth = npm.config.get("depth")
- , url = require("url")
if (!noname && data.name) lite.name = data.name
if (data.version) lite.version = data.version
@@ -196,7 +201,7 @@ function filterFound (root, args) {
var found = false
for (var i = 0; !found && i < args.length; i ++) {
if (d === args[i][0]) {
- found = semver.satisfies(dep.version, args[i][1])
+ found = semver.satisfies(dep.version, args[i][1], true)
}
}
// included explicitly
@@ -261,6 +266,13 @@ function makeArchy_ (data, long, dir, depth, parent, d) {
+ (color ? "\033[0m" : "")
}
+ // add giturl to name@version
+ if (data._resolved) {
+ var p = url.parse(data._resolved)
+ if (isGitUrl(p))
+ out.label += " (" + data._resolved + ")"
+ }
+
if (long) {
if (dir === data.path) out.label += "\n" + dir
out.label += "\n" + getExtras(data, dir)
@@ -284,7 +296,6 @@ function makeArchy_ (data, long, dir, depth, parent, d) {
function getExtras (data, dir) {
var extras = []
- , url = require("url")
if (data.description) extras.push(data.description)
if (data.repository) extras.push(data.repository.url)
@@ -324,7 +335,7 @@ function makeParseable_ (data, long, dir, depth, parent, d) {
+ ":"+d+"@"+JSON.stringify(data)+":INVALID:MISSING"
: ""
} else {
- data = path.resolve(data.path, "node_modules", d)
+ data = path.resolve(data.path || "", "node_modules", d || "")
+ (npm.config.get("long")
? ":" + d + "@" + JSON.stringify(data)
+ ":" // no realpath resolved
diff --git a/deps/npm/lib/npm.js b/deps/npm/lib/npm.js
index 9a6a69c2f..613bf0095 100644
--- a/deps/npm/lib/npm.js
+++ b/deps/npm/lib/npm.js
@@ -31,7 +31,15 @@ var EventEmitter = require("events").EventEmitter
, chain = slide.chain
, RegClient = require("npm-registry-client")
-npm.config = {loaded: false}
+npm.config = {
+ loaded: false,
+ get: function() {
+ throw new Error('npm.load() required')
+ },
+ set: function() {
+ throw new Error('npm.load() required')
+ }
+}
// /usr/local is often a read-only fs, which is not
// well handled by node or mkdirp. Just double-check
@@ -53,15 +61,16 @@ function mkdir (p, cb) {
npm.commands = {}
try {
+ var pv = process.version.replace(/^v/, '')
// startup, ok to do this synchronously
var j = JSON.parse(fs.readFileSync(
path.join(__dirname, "../package.json"))+"")
npm.version = j.version
npm.nodeVersionRequired = j.engines.node
- if (!semver.satisfies(process.version, j.engines.node)) {
+ if (!semver.satisfies(pv, j.engines.node)) {
log.warn("unsupported version", [""
,"npm requires node version: "+j.engines.node
- ,"And you have: "+process.version
+ ,"And you have: "+pv
,"which is not satisfactory."
,""
,"Bad things will likely happen. You have been warned."
@@ -103,8 +112,10 @@ var commandCache = {}
, "login": "adduser"
, "add-user": "adduser"
, "tst": "test"
+ , "t": "test"
, "find-dupes": "dedupe"
, "ddp": "dedupe"
+ , "v": "view"
}
, aliasNames = Object.keys(aliases)
@@ -145,6 +156,7 @@ var commandCache = {}
, "edit"
, "explore"
, "docs"
+ , "repo"
, "bugs"
, "faq"
, "root"
@@ -163,6 +175,7 @@ var commandCache = {}
, "unbuild"
, "xmas"
, "substack"
+ , "visnup"
]
, fullList = npm.fullList = cmdList.concat(aliasNames).filter(function (c) {
return plumbing.indexOf(c) === -1
@@ -172,26 +185,46 @@ var commandCache = {}
Object.keys(abbrevs).concat(plumbing).forEach(function addCommand (c) {
Object.defineProperty(npm.commands, c, { get : function () {
if (!loaded) throw new Error(
- "Call npm.load(conf, cb) before using this command.\n"+
+ "Call npm.load(config, cb) before using this command.\n"+
"See the README.md or cli.js for example usage.")
var a = npm.deref(c)
if (c === "la" || c === "ll") {
npm.config.set("long", true)
}
+
npm.command = c
if (commandCache[a]) return commandCache[a]
+
var cmd = require(__dirname+"/"+a+".js")
+
commandCache[a] = function () {
var args = Array.prototype.slice.call(arguments, 0)
if (typeof args[args.length - 1] !== "function") {
args.push(defaultCb)
}
if (args.length === 1) args.unshift([])
+
+ if (!npm.registry.refer) {
+ npm.registry.refer = [a].concat(args[0]).map(function (arg) {
+ // exclude anything that might be a URL, path, or private module
+ // Those things will always have a slash in them somewhere
+ if (arg && arg.match && arg.match(/\/|\\/)) {
+ return "[REDACTED]"
+ } else {
+ return arg
+ }
+ }).filter(function (arg) {
+ return arg && arg.match
+ }).join(" ")
+ }
+
cmd.apply(npm, args)
}
+
Object.keys(cmd).forEach(function (k) {
commandCache[a][k] = cmd[k]
})
+
return commandCache[a]
}, enumerable: fullList.indexOf(c) !== -1 })
@@ -272,16 +305,24 @@ function load (npm, cli, cb) {
//console.error("about to look up configs")
var builtin = path.resolve(__dirname, "..", "npmrc")
- npmconf.load(cli, builtin, function (er, conf) {
- if (er === conf) er = null
+ npmconf.load(cli, builtin, function (er, config) {
+ if (er === config) er = null
+
+ // Include npm-version and node-version in user-agent
+ var ua = config.get("user-agent") || ""
+ ua = ua.replace(/\{node-version\}/gi, process.version)
+ ua = ua.replace(/\{npm-version\}/gi, npm.version)
+ ua = ua.replace(/\{platform\}/gi, process.platform)
+ ua = ua.replace(/\{arch\}/gi, process.arch)
+ config.set("user-agent", ua)
- npm.config = conf
+ npm.config = config
- var color = conf.get("color")
+ var color = config.get("color")
- log.level = conf.get("loglevel")
- log.heading = "npm"
- log.stream = conf.get("logstream")
+ log.level = config.get("loglevel")
+ log.heading = config.get("heading") || "npm"
+ log.stream = config.get("logstream")
switch (color) {
case "always": log.enableColor(); break
case false: log.disableColor(); break
@@ -309,12 +350,12 @@ function load (npm, cli, cb) {
// at this point the configs are all set.
// go ahead and spin up the registry client.
- var token = conf.get("_token")
+ var token = config.get("_token")
if (typeof token === "string") {
try {
token = JSON.parse(token)
- conf.set("_token", token, "user")
- conf.save("user")
+ config.set("_token", token, "user")
+ config.save("user")
} catch (e) { token = null }
}
@@ -335,18 +376,18 @@ function load (npm, cli, cb) {
, umask: umask }
chain([ [ loadPrefix, npm, cli ]
- , [ setUser, conf, conf.root ]
+ , [ setUser, config, config.root ]
, [ loadUid, npm ]
], cb)
})
})
}
-function loadPrefix (npm, conf, cb) {
+function loadPrefix (npm, config, cb) {
// try to guess at a good node_modules location.
var p
, gp
- if (!Object.prototype.hasOwnProperty.call(conf, "prefix")) {
+ if (!Object.prototype.hasOwnProperty.call(config, "prefix")) {
p = process.cwd()
} else {
p = npm.config.get("prefix")
@@ -475,9 +516,14 @@ Object.defineProperty(npm, "cache",
})
var tmpFolder
+var crypto = require("crypto")
+var rand = crypto.randomBytes(6)
+ .toString("base64")
+ .replace(/\//g, '_')
+ .replace(/\+/, '-')
Object.defineProperty(npm, "tmp",
{ get : function () {
- if (!tmpFolder) tmpFolder = "npm-" + process.pid
+ if (!tmpFolder) tmpFolder = "npm-" + process.pid + "-" + rand
return path.resolve(npm.config.get("tmp"), tmpFolder)
}
, enumerable : true
diff --git a/deps/npm/lib/outdated.js b/deps/npm/lib/outdated.js
index e3ef5b1e4..6ca348726 100644
--- a/deps/npm/lib/outdated.js
+++ b/deps/npm/lib/outdated.js
@@ -9,6 +9,9 @@ Does the following:
If no packages are specified, then run for all installed
packages.
+--parseable creates output like this:
+<fullpath>:<name@wanted>:<name@installed>:<name@latest>
+
*/
module.exports = outdated
@@ -24,48 +27,121 @@ var path = require("path")
, cache = require("./cache.js")
, asyncMap = require("slide").asyncMap
, npm = require("./npm.js")
+ , url = require("url")
+ , isGitUrl = require("./utils/is-git-url.js")
+ , color = require("ansicolors")
+ , styles = require("ansistyles")
+ , table = require("text-table")
, semver = require("semver")
+ , os = require("os")
function outdated (args, silent, cb) {
if (typeof cb !== "function") cb = silent, silent = false
var dir = path.resolve(npm.dir, "..")
- outdated_(args, dir, {}, function (er, list) {
+ outdated_(args, dir, {}, 0, function (er, list) {
if (er || silent) return cb(er, list)
- var outList = list.map(makePretty)
- console.log(outList.join("\n"))
+ if (npm.config.get("json")) {
+ console.log(makeJSON(list))
+ } else if (npm.config.get("parseable")) {
+ console.log(makeParseable(list));
+ } else {
+ var outList = list.map(makePretty)
+ var outTable = [[ "Package"
+ , "Current"
+ , "Wanted"
+ , "Latest"
+ , "Location"
+ ]].concat(outList)
+
+ if (npm.color) {
+ outTable[0] = outTable[0].map(function(heading) {
+ return styles.underline(heading)
+ })
+ }
+
+ var tableOpts = { align: ["l", "r", "r", "r", "l"]
+ , stringLength: function(s) { return ansiTrim(s).length }
+ }
+ console.log(table(outTable, tableOpts))
+ }
cb(null, list)
})
}
-// [[ dir, dep, has, want ]]
+// [[ dir, dep, has, want, latest ]]
function makePretty (p) {
var parseable = npm.config.get("parseable")
- , long = npm.config.get("long")
, dep = p[1]
, dir = path.resolve(p[0], "node_modules", dep)
, has = p[2]
, want = p[3]
-
- // XXX add --json support
- // Should match (more or less) the output of ls --json
-
- if (parseable) {
- var str = dir
- if (npm.config.get("long")) {
- str += ":" + dep + "@" + want
- + ":" + (has ? (dep + "@" + has) : "MISSING")
- }
- return str
- }
+ , latest = p[4]
if (!npm.config.get("global")) {
dir = path.relative(process.cwd(), dir)
}
- return dep + "@" + want + " " + dir
- + " current=" + (has || "MISSING")
+
+ var columns = [ dep
+ , has || "MISSING"
+ , want
+ , latest
+ , dirToPrettyLocation(dir)
+ ]
+
+ if (npm.color) {
+ columns[0] = color[has === want ? "yellow" : "red"](columns[0]) // dep
+ columns[2] = color.green(columns[2]) // want
+ columns[3] = color.magenta(columns[3]) // latest
+ columns[4] = color.brightBlack(columns[4]) // dir
+ }
+
+ return columns
+}
+
+function ansiTrim (str) {
+ var r = new RegExp("\x1b(?:\\[(?:\\d+[ABCDEFGJKSTm]|\\d+;\\d+[Hfm]|" +
+ "\\d+;\\d+;\\d+m|6n|s|u|\\?25[lh])|\\w)", "g");
+ return str.replace(r, "")
+}
+
+function dirToPrettyLocation (dir) {
+ return dir.replace(/^node_modules[/\\]/, "")
+ .replace(/[[/\\]node_modules[/\\]/g, " > ")
+}
+
+function makeParseable (list) {
+ return list.map(function (p) {
+ var dep = p[1]
+ , dir = path.resolve(p[0], "node_modules", dep)
+ , has = p[2]
+ , want = p[3]
+ , latest = p[4];
+
+ return [ dir
+ , dep + "@" + want
+ , (has ? (dep + "@" + has) : "MISSING")
+ , dep + "@" + latest
+ ].join(":")
+ }).join(os.EOL)
}
-function outdated_ (args, dir, parentHas, cb) {
+function makeJSON (list) {
+ var out = {}
+ list.forEach(function (p) {
+ var dir = path.resolve(p[0], "node_modules", p[1])
+ if (!npm.config.get("global")) {
+ dir = path.relative(process.cwd(), dir)
+ }
+ out[p[1]] = { current: p[2]
+ , wanted: p[3]
+ , latest: p[4]
+ , location: dir
+ }
+ })
+ return JSON.stringify(out, null, 2)
+}
+
+function outdated_ (args, dir, parentHas, depth, cb) {
// get the deps from package.json, or {<dir/node_modules/*>:"*"}
// asyncMap over deps:
// shouldHave = cache.add(dep, req).version
@@ -74,10 +150,24 @@ function outdated_ (args, dir, parentHas, cb) {
// else if dep in args or args is empty
// return [dir, dep, has, shouldHave]
+ if (depth > npm.config.get("depth")) {
+ return cb(null, [])
+ }
var deps = null
readJson(path.resolve(dir, "package.json"), function (er, d) {
if (er && er.code !== "ENOENT" && er.code !== "ENOTDIR") return cb(er)
deps = (er) ? true : (d.dependencies || {})
+ var doUpdate = npm.config.get("dev") ||
+ (!npm.config.get("production") &&
+ !Object.keys(parentHas).length &&
+ !npm.config.get("global"))
+ if (!er && d && doUpdate) {
+ Object.keys(d.devDependencies || {}).forEach(function (k) {
+ if (!(k in parentHas)) {
+ deps[k] = d.devDependencies[k]
+ }
+ })
+ }
return next()
})
@@ -94,13 +184,16 @@ function outdated_ (args, dir, parentHas, cb) {
var jsonFile = path.resolve(dir, "node_modules", pkg, "package.json")
readJson(jsonFile, function (er, d) {
if (er && er.code !== "ENOENT" && er.code !== "ENOTDIR") return cb(er)
- cb(null, er ? [] : [[d.name, d.version]])
+ cb(null, er ? [] : [[d.name, d.version, d._from]])
})
}, function (er, pvs) {
if (er) return cb(er)
has = Object.create(parentHas)
pvs.forEach(function (pv) {
- has[pv[0]] = pv[1]
+ has[pv[0]] = {
+ version: pv[1],
+ from: pv[2]
+ }
})
next()
@@ -120,35 +213,91 @@ function outdated_ (args, dir, parentHas, cb) {
// if has[dep] !== shouldHave[dep], then cb with the data
// otherwise dive into the folder
asyncMap(Object.keys(deps), function (dep, cb) {
- shouldUpdate(args, dir, dep, has, deps[dep], cb)
+ shouldUpdate(args, dir, dep, has, deps[dep], depth, cb)
}, cb)
}
}
-function shouldUpdate (args, dir, dep, has, req, cb) {
+function shouldUpdate (args, dir, dep, has, req, depth, cb) {
// look up the most recent version.
// if that's what we already have, or if it's not on the args list,
// then dive into it. Otherwise, cb() with the data.
- function skip () {
+ // { version: , from: }
+ var curr = has[dep]
+
+ function skip (er) {
+ // show user that no viable version can be found
+ if (er) return cb(er)
outdated_( args
, path.resolve(dir, "node_modules", dep)
, has
+ , depth + 1
, cb )
}
- function doIt (shouldHave) {
- cb(null, [[ dir, dep, has[dep], shouldHave ]])
+ function doIt (wanted, latest) {
+ cb(null, [[ dir, dep, curr && curr.version, wanted, latest, req ]])
}
if (args.length && args.indexOf(dep) === -1) {
return skip()
}
- // so, we can conceivably update this. find out if we need to.
- cache.add(dep, req, function (er, d) {
- // if this fails, then it means we can't update this thing.
- // it's probably a thing that isn't published.
- return (er || d.version === has[dep]) ? skip() : doIt(d.version)
+ if (isGitUrl(url.parse(req)))
+ return doIt("git", "git")
+
+ var registry = npm.registry
+ // search for the latest package
+ registry.get(dep, function (er, d) {
+ if (er) return cb()
+ if (!d || !d['dist-tags'] || !d.versions) return cb()
+ var l = d.versions[d['dist-tags'].latest]
+ if (!l) return cb()
+
+ // set to true if found in doc
+ var found = false
+
+ var r = req
+ if (d['dist-tags'][req])
+ r = d['dist-tags'][req]
+
+ if (semver.validRange(r, true)) {
+ // some kind of semver range.
+ // see if it's in the doc.
+ var vers = Object.keys(d.versions)
+ var v = semver.maxSatisfying(vers, r, true)
+ if (v) {
+ return onCacheAdd(null, d.versions[v])
+ }
+ }
+
+ // We didn't find the version in the doc. See if cache can find it.
+ cache.add(dep, req, onCacheAdd)
+
+ function onCacheAdd(er, d) {
+ // if this fails, then it means we can't update this thing.
+ // it's probably a thing that isn't published.
+ if (er) {
+ if (er.code && er.code === 'ETARGET') {
+ // no viable version found
+ return skip(er)
+ }
+ return skip()
+ }
+
+ // check that the url origin hasn't changed (#1727) and that
+ // there is no newer version available
+ var dFromUrl = d._from && url.parse(d._from).protocol
+ var cFromUrl = curr && curr.from && url.parse(curr.from).protocol
+
+ if (!curr || dFromUrl && cFromUrl && d._from !== curr.from
+ || d.version !== curr.version
+ || d.version !== l.version)
+ doIt(d.version, l.version)
+ else
+ skip()
+ }
+
})
}
diff --git a/deps/npm/lib/prune.js b/deps/npm/lib/prune.js
index 2afb2b998..eb58c7f64 100644
--- a/deps/npm/lib/prune.js
+++ b/deps/npm/lib/prune.js
@@ -6,14 +6,30 @@ prune.usage = "npm prune"
var readInstalled = require("read-installed")
, npm = require("./npm.js")
+ , path = require("path")
+ , readJson = require("read-package-json")
+ , log = require("npmlog")
prune.completion = require("./utils/completion/installed-deep.js")
function prune (args, cb) {
- readInstalled(npm.prefix, npm.config.get("depth"), function (er, data) {
+ //check if is a valid package.json file
+ var jsonFile = path.resolve(npm.dir, "..", "package.json" )
+ readJson(jsonFile, log.warn, function (er, data) {
if (er) return cb(er)
- prune_(args, data, cb)
+ next()
})
+
+ function next() {
+ var opt = {
+ depth: npm.config.get("depth"),
+ dev: !npm.config.get("production") || npm.config.get("dev")
+ }
+ readInstalled(npm.prefix, opt, function (er, data) {
+ if (er) return cb(er)
+ prune_(args, data, cb)
+ })
+ }
}
function prune_ (args, data, cb) {
diff --git a/deps/npm/lib/publish.js b/deps/npm/lib/publish.js
index 62d7fb9bb..cede9ff0a 100644
--- a/deps/npm/lib/publish.js
+++ b/deps/npm/lib/publish.js
@@ -72,6 +72,7 @@ function publish_ (arg, data, isRetry, cachedir, cb) {
var registry = npm.registry
if (data.publishConfig) {
var pubConf = new Conf(npm.config)
+ pubConf.save = npm.config.save.bind(npm.config)
// don't modify the actual publishConfig object, in case we have
// to set a login token or some other data.
@@ -98,9 +99,12 @@ function publish_ (arg, data, isRetry, cachedir, cb) {
log.warn("publish", "Forced publish over "+data._id)
return npm.commands.unpublish([data._id], function (er) {
// ignore errors. Use the force. Reach out with your feelings.
- publish([arg], true, cb)
+ // but if it fails again, then report the first error.
+ publish([arg], er || true, cb)
})
}
+ // report the unpublish error if this was a retry and unpublish failed
+ if (er && isRetry && isRetry !== true) return cb(isRetry)
if (er) return cb(er)
console.log("+ " + data._id)
cb()
diff --git a/deps/npm/lib/rebuild.js b/deps/npm/lib/rebuild.js
index 35bb454d7..bd0d33b65 100644
--- a/deps/npm/lib/rebuild.js
+++ b/deps/npm/lib/rebuild.js
@@ -14,7 +14,8 @@ rebuild.usage = "npm rebuild [<name>[@<version>] [name[@<version>] ...]]"
rebuild.completion = require("./utils/completion/installed-deep.js")
function rebuild (args, cb) {
- readInstalled(npm.prefix, npm.config.get("depth"), function (er, data) {
+ var opt = { depth: npm.config.get("depth"), dev: true }
+ readInstalled(npm.prefix, opt, function (er, data) {
log.info("readInstalled", typeof data)
if (er) return cb(er)
var set = filter(data, args)
@@ -52,7 +53,7 @@ function filter (data, args, set, seen) {
, n = nv.shift()
, v = nv.join("@")
if (n !== data.name) continue
- if (!semver.satisfies(data.version, v)) continue
+ if (!semver.satisfies(data.version, v, true)) continue
pass = true
break
}
diff --git a/deps/npm/lib/repo.js b/deps/npm/lib/repo.js
new file mode 100644
index 000000000..b95bd7562
--- /dev/null
+++ b/deps/npm/lib/repo.js
@@ -0,0 +1,54 @@
+
+module.exports = repo
+
+repo.usage = "npm repo <pkgname>"
+
+repo.completion = function (opts, cb) {
+ if (opts.conf.argv.remain.length > 2) return cb()
+ registry.get("/-/short", 60000, function (er, list) {
+ return cb(null, list || [])
+ })
+}
+
+var npm = require("./npm.js")
+ , registry = npm.registry
+ , log = require("npmlog")
+ , opener = require("opener")
+ , github = require('github-url-from-git')
+ , githubUserRepo = require("github-url-from-username-repo")
+ , path = require("path")
+ , readJson = require("read-package-json")
+ , fs = require("fs")
+
+function repo (args, cb) {
+ var n = args.length && args[0].split("@").shift() || '.'
+ fs.stat(n, function (er, s) {
+ if (er && er.code === "ENOENT") return callRegistry(n, cb)
+ else if (er) return cb(er)
+ if (!s.isDirectory()) return callRegistry(n, cb)
+ readJson(path.resolve(n, "package.json"), function (er, d) {
+ if (er) return cb(er)
+ getUrlAndOpen(d, cb)
+ })
+ })
+}
+
+function getUrlAndOpen (d, cb) {
+ var r = d.repository;
+ if (!r) return cb(new Error('no repository'));
+ // XXX remove this when npm@v1.3.10 from node 0.10 is deprecated
+ // from https://github.com/npm/npm-www/issues/418
+ if (githubUserRepo(r.url))
+ r.url = githubUserRepo(r.url)
+ var url = github(r.url)
+ if (!url)
+ return cb(new Error('no repository: could not get url'))
+ opener(url, { command: npm.config.get("browser") }, cb)
+}
+
+function callRegistry (n, cb) {
+ registry.get(n + "/latest", 3600, function (er, d) {
+ if (er) return cb(er)
+ getUrlAndOpen(d, cb)
+ })
+}
diff --git a/deps/npm/lib/run-script.js b/deps/npm/lib/run-script.js
index 0808f2edd..8797ccd9d 100644
--- a/deps/npm/lib/run-script.js
+++ b/deps/npm/lib/run-script.js
@@ -70,7 +70,7 @@ runScript.completion = function (opts, cb) {
}
function runScript (args, cb) {
- if (!args.length) return cb(runScript.usage)
+ if (!args.length) return list(cb)
var pkgdir = args.length === 1 ? process.cwd()
: path.resolve(npm.dir, args[0])
, cmd = args.pop()
@@ -81,6 +81,36 @@ function runScript (args, cb) {
})
}
+function list(cb) {
+ var json = path.join(npm.prefix, 'package.json')
+ return readJson(json, function(er, d) {
+ if (er && er.code !== 'ENOENT' && er.code !== 'ENOTDIR') return cb(er)
+ if (er) d = {}
+ var scripts = Object.keys(d.scripts || {})
+
+ if (log.level === "silent") {
+ return cb(null, scripts)
+ }
+
+ if (npm.config.get("json")) {
+ console.log(JSON.stringify(d.scripts || {}, null, 2))
+ return cb(null, scripts)
+ }
+
+ var s = ":"
+ var prefix = ""
+ if (!npm.config.get("parseable")) {
+ s = "\n "
+ prefix = " "
+ console.log("Available scripts in the %s package:", d.name)
+ }
+ scripts.forEach(function(script) {
+ console.log(prefix + script + s + d.scripts[script])
+ })
+ return cb(null, scripts)
+ })
+}
+
function run (pkg, wd, cmd, cb) {
var cmds = []
if (!pkg.scripts) pkg.scripts = {}
diff --git a/deps/npm/lib/search.js b/deps/npm/lib/search.js
index edbdc70b1..21b6ab279 100644
--- a/deps/npm/lib/search.js
+++ b/deps/npm/lib/search.js
@@ -3,7 +3,7 @@ module.exports = exports = search
var npm = require("./npm.js")
, registry = npm.registry
- , semver = require("semver")
+ , columnify = require('columnify')
search.usage = "npm search [some search terms ...]"
@@ -86,13 +86,14 @@ function stripData (data) {
})
, url: !Object.keys(data.versions || {}).length ? data.url : null
, keywords: data.keywords || []
- , version: Object.keys(data.versions)[0] || []
+ , version: Object.keys(data.versions || {})[0] || []
, time: data.time
&& data.time.modified
&& (new Date(data.time.modified).toISOString()
.split("T").join(" ")
.replace(/:[0-9]{2}\.[0-9]{3}Z$/, ""))
- || "(prehistoric)"
+ .slice(0, -5) // remove time
+ || "prehistoric"
}
}
@@ -130,103 +131,77 @@ function match (words, arg) {
}
function prettify (data, args) {
- try {
- var tty = require("tty")
- , stdout = process.stdout
- , cols = !tty.isatty(stdout.fd) ? Infinity
- : stdout._handle ? stdout._handle.getWindowSize()[0]
- : process.stdout.getWindowSize()[0]
- cols = (cols == 0) ? Infinity : cols
- } catch (ex) { cols = Infinity }
-
- // name, desc, author, keywords
- var longest = []
- , spaces
- , maxLen = npm.config.get("description")
- ? [20, 60, 20, 20, 10, Infinity]
- : [20, 20, 20, 10, Infinity]
- , headings = npm.config.get("description")
- ? ["NAME", "DESCRIPTION", "AUTHOR", "DATE", "VERSION", "KEYWORDS"]
- : ["NAME", "AUTHOR", "DATE", "VERSION", "KEYWORDS"]
- , lines
- , searchsort = (npm.config.get("searchsort") || "NAME").toLowerCase()
- , sortFields = { name: 0
- , description: 1
- , author: 2
- , date: 3
- , version: 4
- , keywords: 5 }
+ var searchsort = (npm.config.get("searchsort") || "NAME").toLowerCase()
+ , sortField = searchsort.replace(/^\-+/, "")
, searchRev = searchsort.charAt(0) === "-"
- , sortField = sortFields[searchsort.replace(/^\-+/, "")]
+ , truncate = !npm.config.get("long")
+
+ if (Object.keys(data).length === 0) {
+ return "No match found for "+(args.map(JSON.stringify).join(" "))
+ }
- lines = Object.keys(data).map(function (d) {
+ var lines = Object.keys(data).map(function (d) {
+ // strip keyname
return data[d]
- }).map(function (data) {
- // turn a pkg data into a string
- // [name,who,desc,targets,keywords] tuple
- // also set longest to the longest name
- if (typeof data.keywords === "string") {
- data.keywords = data.keywords.split(/[,\s]+/)
+ }).map(function(dat) {
+ dat.author = dat.maintainers
+ delete dat.maintainers
+ dat.date = dat.time
+ delete dat.time
+ return dat
+ }).map(function(dat) {
+ // split keywords on whitespace or ,
+ if (typeof dat.keywords === "string") {
+ dat.keywords = dat.keywords.split(/[,\s]+/)
}
- if (!Array.isArray(data.keywords)) data.keywords = []
- var l = [ data.name
- , data.description || ""
- , data.maintainers.join(" ")
- , data.time
- , data.version || ""
- , (data.keywords || []).join(" ")
- ]
- l.forEach(function (s, i) {
- var len = s.length
- longest[i] = Math.min(maxLen[i] || Infinity
- ,Math.max(longest[i] || 0, len))
- if (len > longest[i]) {
- l._undent = l._undent || []
- l._undent[i] = len - longest[i]
- }
- l[i] = ('' + l[i]).replace(/\s+/g, " ")
- })
- return l
- }).sort(function (a, b) {
- // a and b are "line" objects of [name, desc, maint, time, kw]
+ if (Array.isArray(dat.keywords)) {
+ dat.keywords = dat.keywords.join(' ')
+ }
+
+ // split author on whitespace or ,
+ if (typeof dat.author === "string") {
+ dat.author = dat.author.split(/[,\s]+/)
+ }
+ if (Array.isArray(dat.author)) {
+ dat.author = dat.author.join(' ')
+ }
+ return dat
+ })
+
+ lines.sort(function(a, b) {
var aa = a[sortField].toLowerCase()
, bb = b[sortField].toLowerCase()
return aa === bb ? 0
- : aa < bb ? (searchRev ? 1 : -1)
- : (searchRev ? -1 : 1)
- }).map(function (line) {
- return line.map(function (s, i) {
- spaces = spaces || longest.map(function (n) {
- return new Array(n + 2).join(" ")
- })
- var len = s.length
- if (line._undent && line._undent[i - 1]) {
- len += line._undent[i - 1] - 1
- }
- return s + spaces[i].substr(len)
- }).join(" ").substr(0, cols).trim()
- }).map(function (line) {
- // colorize!
- args.forEach(function (arg, i) {
- line = addColorMarker(line, arg, i)
- })
- return colorize(line).trim()
+ : aa < bb ? -1 : 1
})
- if (lines.length === 0) {
- return "No match found for "+(args.map(JSON.stringify).join(" "))
- }
+ if (searchRev) lines.reverse()
- // build the heading padded to the longest in each field
- return headings.map(function (h, i) {
- var space = Math.max(2, 3 + (longest[i] || 0) - h.length)
- return h + (new Array(space).join(" "))
- }).join("").substr(0, cols).trim() + "\n" + lines.join("\n")
+ var columns = npm.config.get("description")
+ ? ["name", "description", "author", "date", "version", "keywords"]
+ : ["name", "author", "date", "version", "keywords"]
+
+ var output = columnify(lines, {
+ include: columns
+ , truncate: truncate
+ , config: {
+ name: { maxWidth: 40, truncate: false, truncateMarker: '' }
+ , description: { maxWidth: 60 }
+ , author: { maxWidth: 20 }
+ , date: { maxWidth: 11 }
+ , version: { maxWidth: 11 }
+ , keywords: { maxWidth: Infinity }
+ }
+ })
+ output = trimToMaxWidth(output)
+ output = highlightSearchTerms(output, args)
+ return output
}
var colors = [31, 33, 32, 36, 34, 35 ]
, cl = colors.length
+
function addColorMarker (str, arg, i) {
var m = i % cl + 1
, markStart = String.fromCharCode(m)
@@ -262,3 +237,29 @@ function colorize (line) {
var uncolor = npm.color ? "\033[0m" : ""
return line.split("\u0000").join(uncolor)
}
+
+function getMaxWidth() {
+ try {
+ var tty = require("tty")
+ , stdout = process.stdout
+ , cols = !tty.isatty(stdout.fd) ? Infinity
+ : process.stdout.getWindowSize()[0]
+ cols = (cols == 0) ? Infinity : cols
+ } catch (ex) { cols = Infinity }
+ return cols
+}
+
+function trimToMaxWidth(str) {
+ var maxWidth = getMaxWidth()
+ return str.split('\n').map(function(line) {
+ return line.slice(0, maxWidth)
+ }).join('\n')
+}
+
+function highlightSearchTerms(str, terms) {
+ terms.forEach(function (arg, i) {
+ str = addColorMarker(str, arg, i)
+ })
+
+ return colorize(str).trim()
+}
diff --git a/deps/npm/lib/shrinkwrap.js b/deps/npm/lib/shrinkwrap.js
index 14711df26..ef5732590 100644
--- a/deps/npm/lib/shrinkwrap.js
+++ b/deps/npm/lib/shrinkwrap.js
@@ -8,6 +8,7 @@ var npm = require("./npm.js")
, fs = require("fs")
, path = require("path")
, readJson = require("read-package-json")
+ , sortedObject = require("sorted-object")
shrinkwrap.usage = "npm shrinkwrap"
@@ -38,6 +39,11 @@ function shrinkwrap_ (pkginfo, silent, dev, cb) {
return cb(er)
if (data.devDependencies) {
Object.keys(data.devDependencies).forEach(function (dep) {
+ if (data.dependencies && data.dependencies[dep]) {
+ // do not exclude the dev dependency if it's also listed as a dependency
+ return
+ }
+
log.warn("shrinkwrap", "Excluding devDependency: %s", dep)
delete pkginfo.dependencies[dep]
})
@@ -51,6 +57,9 @@ function shrinkwrap_ (pkginfo, silent, dev, cb) {
function save (pkginfo, silent, cb) {
+ // copy the keys over in a well defined order
+ // because javascript objects serialize arbitrarily
+ pkginfo.dependencies = sortedObject(pkginfo.dependencies || {})
try {
var swdata = JSON.stringify(pkginfo, null, 2) + "\n"
} catch (er) {
diff --git a/deps/npm/lib/submodule.js b/deps/npm/lib/submodule.js
index ccb9d5833..72a224814 100644
--- a/deps/npm/lib/submodule.js
+++ b/deps/npm/lib/submodule.js
@@ -91,7 +91,7 @@ function addSubmodule (name, url, cb) {
var getSubmodules = function getSubmodules (cb) {
var git = npm.config.get("git")
- var arg = [ "submodule", "status" ]
+ var args = [ "submodule", "status" ]
// check for git
which(git, function (err) {
diff --git a/deps/npm/lib/unbuild.js b/deps/npm/lib/unbuild.js
index c89a538f2..0384a733e 100644
--- a/deps/npm/lib/unbuild.js
+++ b/deps/npm/lib/unbuild.js
@@ -2,7 +2,7 @@ module.exports = unbuild
unbuild.usage = "npm unbuild <folder>\n(this is plumbing)"
var readJson = require("read-package-json")
- , rm = require("rimraf")
+ , rm = require("./utils/gently-rm.js")
, gentlyRm = require("./utils/gently-rm.js")
, npm = require("./npm.js")
, path = require("path")
@@ -15,9 +15,15 @@ var readJson = require("read-package-json")
// args is a list of folders.
// remove any bins/etc, and then delete the folder.
-function unbuild (args, cb) { asyncMap(args, unbuild_, cb) }
+function unbuild (args, silent, cb) {
+ if (typeof silent === 'function') cb = silent, silent = false
+ asyncMap(args, unbuild_(silent), cb)
+}
-function unbuild_ (folder, cb) {
+function unbuild_ (silent) { return function (folder, cb_) {
+ function cb (er) {
+ cb_(er, path.relative(npm.root, folder))
+ }
folder = path.resolve(folder)
delete build._didBuild[folder]
log.info(folder, "unbuild")
@@ -28,12 +34,16 @@ function unbuild_ (folder, cb) {
chain
( [ [lifecycle, pkg, "preuninstall", folder, false, true]
, [lifecycle, pkg, "uninstall", folder, false, true]
+ , !silent && function(cb) {
+ console.log("unbuild " + pkg._id)
+ cb()
+ }
, [rmStuff, pkg, folder]
, [lifecycle, pkg, "postuninstall", folder, false, true]
, [rm, folder] ]
, cb )
})
-}
+}}
function rmStuff (pkg, folder, cb) {
// if it's global, and folder is in {prefix}/node_modules,
@@ -45,7 +55,7 @@ function rmStuff (pkg, folder, cb) {
readJson.cache.del(path.resolve(folder, "package.json"))
- log.verbose([top, gnm, parent], "unbuild "+pkg._id)
+ log.verbose([top, gnm, parent], "unbuild " + pkg._id)
asyncMap([rmBins, rmMans], function (fn, cb) {
fn(pkg, folder, parent, top, cb)
}, cb)
diff --git a/deps/npm/lib/uninstall.js b/deps/npm/lib/uninstall.js
index bebc2300b..072d46bcf 100644
--- a/deps/npm/lib/uninstall.js
+++ b/deps/npm/lib/uninstall.js
@@ -13,7 +13,6 @@ var fs = require("graceful-fs")
, readJson = require("read-package-json")
, path = require("path")
, npm = require("./npm.js")
- , semver = require("semver")
, asyncMap = require("slide").asyncMap
function uninstall (args, cb) {
diff --git a/deps/npm/lib/update.js b/deps/npm/lib/update.js
index 46d32678e..9ae50dc41 100644
--- a/deps/npm/lib/update.js
+++ b/deps/npm/lib/update.js
@@ -27,12 +27,16 @@ function update (args, cb) {
if (er) return cb(er)
asyncMap(outdated, function (ww, cb) {
- // [[ dir, dep, has, want ]]
+ // [[ dir, dep, has, want, req ]]
var where = ww[0]
, dep = ww[1]
, want = ww[3]
, what = dep + "@" + want
+ , req = ww[5]
+ , url = require('url')
+ // use the initial installation method (repo, tar, git) for updating
+ if (url.parse(req).protocol) what = req
npm.commands.install(where, what, cb)
}, cb)
})
diff --git a/deps/npm/lib/utils/completion/installed-deep.js b/deps/npm/lib/utils/completion/installed-deep.js
index b49d7bb77..5fb67d263 100644
--- a/deps/npm/lib/utils/completion/installed-deep.js
+++ b/deps/npm/lib/utils/completion/installed-deep.js
@@ -6,12 +6,16 @@ var npm = require("../../npm.js")
function installedDeep (opts, cb) {
var local
, global
+ , depth = npm.config.get("depth")
+ , opt = { depth: depth, dev: true }
+
if (npm.config.get("global")) local = [], next()
- else readInstalled(npm.prefix, npm.config.get("depth"), function (er, data) {
+ else readInstalled(npm.prefix, opt, function (er, data) {
local = getNames(data || {})
next()
})
- readInstalled(npm.config.get("prefix"), npm.config.get("depth"), function (er, data) {
+
+ readInstalled(npm.config.get("prefix"), opt, function (er, data) {
global = getNames(data || {})
next()
})
diff --git a/deps/npm/lib/utils/error-handler.js b/deps/npm/lib/utils/error-handler.js
index 32b050643..b025fdd37 100644
--- a/deps/npm/lib/utils/error-handler.js
+++ b/deps/npm/lib/utils/error-handler.js
@@ -44,7 +44,7 @@ process.on("exit", function (code) {
})
function exit (code, noLog) {
- exitCode = exitCode || code
+ exitCode = exitCode || process.exitCode || code
var doExit = npm.config.get("_exit")
log.verbose("exit", [code, doExit])
@@ -146,9 +146,13 @@ function errorHandler (er) {
case "E404":
er.code = "E404"
+ var msg = [er.message]
if (er.pkgid && er.pkgid !== "-") {
- var msg = ["'"+er.pkgid+"' is not in the npm registry."
- ,"You should bug the author to publish it"]
+ msg.push("", "'"+er.pkgid+"' is not in the npm registry."
+ ,"You should bug the author to publish it")
+ if (er.parent) {
+ msg.push("It was specified as a dependency of '"+er.parent+"'")
+ }
if (er.pkgid.match(/^node[\.\-]|[\.\-]js$/)) {
var s = er.pkgid.replace(/^node[\.\-]|[\.\-]js$/g, "")
if (s !== er.pkgid) {
@@ -158,8 +162,8 @@ function errorHandler (er) {
}
msg.push("\nNote that you can also install from a"
,"tarball, folder, or http url, or git url.")
- log.error("404", msg.join("\n"))
}
+ log.error("404", msg.join("\n"))
break
case "EPUBLISHCONFLICT":
@@ -224,7 +228,9 @@ function errorHandler (er) {
log.error("peerinvalid", [er.message].concat(peerErrors).join("\n"))
break
+ case "ECONNRESET":
case "ENOTFOUND":
+ case "ETIMEDOUT":
log.error("network", [er.message
,"This is most likely not a problem with npm itself"
,"and is related to network connectivity."
@@ -234,6 +240,21 @@ function errorHandler (er) {
].join("\n"))
break
+ case "ENOPACKAGEJSON":
+ log.error("package.json", [er.message
+ ,"This is most likely not a problem with npm itself."
+ ,"npm can't find a package.json file in your current directory."
+ ].join("\n"))
+ break
+
+ case "ETARGET":
+ log.error("notarget", [er.message
+ ,"This is most likely not a problem with npm itself."
+ ,"In most cases you or one of your dependencies are requesting"
+ ,"a package version that doesn't exist."
+ ].join("\n"))
+ break
+
case "ENOTSUP":
if (er.required) {
log.error("notsup", [er.message
@@ -248,10 +269,9 @@ function errorHandler (er) {
default:
log.error("", er.stack || er.message || er)
- log.error("", ["If you need help, you may report this log at:"
- ," <http://github.com/isaacs/npm/issues>"
- ,"or email it to:"
- ," <npm-@googlegroups.com>"
+ log.error("", ["If you need help, you may report this *entire* log,"
+ ,"including the npm and node versions, at:"
+ ," <http://github.com/npm/npm/issues>"
].join("\n"))
printStack = false
break
@@ -259,7 +279,7 @@ function errorHandler (er) {
var os = require("os")
// just a line break
- console.error("")
+ if (log.levels[log.level] <= log.levels.error) console.error("")
log.error("System", os.type() + " " + os.release())
log.error("command", process.argv
.map(JSON.stringify).join(" "))
diff --git a/deps/npm/lib/utils/fetch.js b/deps/npm/lib/utils/fetch.js
index e92b68d14..f6e5166ff 100644
--- a/deps/npm/lib/utils/fetch.js
+++ b/deps/npm/lib/utils/fetch.js
@@ -12,6 +12,7 @@ var request = require("request")
, chownr = require("chownr")
, regHost
, once = require("once")
+ , crypto = require("crypto")
module.exports = fetch
@@ -78,12 +79,24 @@ function makeRequest (remote, fstr, headers) {
proxy = npm.config.get("proxy")
}
+ var sessionToken = npm.registry.sessionToken
+ if (!sessionToken) {
+ sessionToken = crypto.randomBytes(8).toString("hex")
+ npm.registry.sessionToken = sessionToken
+ }
+
+ var ca = remote.host === regHost ? npm.config.get("ca") : undefined
var opts = { url: remote
, proxy: proxy
, strictSSL: npm.config.get("strict-ssl")
, rejectUnauthorized: npm.config.get("strict-ssl")
- , ca: remote.host === regHost ? npm.config.get("ca") : undefined
- , headers: { "user-agent": npm.config.get("user-agent") }}
+ , ca: ca
+ , headers:
+ { "user-agent": npm.config.get("user-agent")
+ , "npm-session": sessionToken
+ , referer: npm.registry.refer
+ }
+ }
var req = request(opts)
req.on("error", function (er) {
fstr.emit("error", er)
diff --git a/deps/npm/lib/utils/gently-rm.js b/deps/npm/lib/utils/gently-rm.js
index f24309a08..241740fed 100644
--- a/deps/npm/lib/utils/gently-rm.js
+++ b/deps/npm/lib/utils/gently-rm.js
@@ -9,6 +9,22 @@ var rimraf = require("rimraf")
, path = require("path")
function gentlyRm (p, gently, cb) {
+ if (!cb) cb = gently, gently = null
+
+ // never rm the root, prefix, or bin dirs.
+ // just a safety precaution.
+ p = path.resolve(p)
+ if (p === npm.dir ||
+ p === npm.root ||
+ p === npm.bin ||
+ p === npm.prefix ||
+ p === npm.globalDir ||
+ p === npm.globalRoot ||
+ p === npm.globalBin ||
+ p === npm.globalPrefix) {
+ return cb(new Error("May not delete: " + p))
+ }
+
if (npm.config.get("force") || !gently) {
return rimraf(p, cb)
}
diff --git a/deps/npm/lib/utils/is-git-url.js b/deps/npm/lib/utils/is-git-url.js
new file mode 100644
index 000000000..7ded4b602
--- /dev/null
+++ b/deps/npm/lib/utils/is-git-url.js
@@ -0,0 +1,13 @@
+module.exports = isGitUrl
+
+function isGitUrl (url) {
+ switch (url.protocol) {
+ case "git:":
+ case "git+http:":
+ case "git+https:":
+ case "git+rsync:":
+ case "git+ftp:":
+ case "git+ssh:":
+ return true
+ }
+}
diff --git a/deps/npm/lib/utils/lifecycle.js b/deps/npm/lib/utils/lifecycle.js
index 1f9da4671..1af5bddca 100644
--- a/deps/npm/lib/utils/lifecycle.js
+++ b/deps/npm/lib/utils/lifecycle.js
@@ -1,6 +1,6 @@
-
exports = module.exports = lifecycle
exports.cmd = cmd
+exports.makeEnv = makeEnv
var log = require("npmlog")
, spawn = require("child_process").spawn
@@ -8,9 +8,9 @@ var log = require("npmlog")
, path = require("path")
, fs = require("graceful-fs")
, chain = require("slide").chain
- , constants = require("constants")
, Stream = require("stream").Stream
, PATH = "PATH"
+ , uidNumber = require("uid-number")
// windows calls it's path "Path" usually, but this is not guaranteed.
if (process.platform === "win32") {
@@ -31,7 +31,7 @@ function lifecycle (pkg, stage, wd, unsafe, failOk, cb) {
if (!pkg) return cb(new Error("Invalid package data"))
log.info(stage, pkg._id)
- if (!pkg.scripts) pkg.scripts = {}
+ if (!pkg.scripts || npm.config.get('ignore-scripts')) pkg.scripts = {}
validWd(wd || path.resolve(npm.dir, pkg.name), function (er, wd) {
if (er) return cb(er)
@@ -132,38 +132,98 @@ function validWd (d, cb) {
function runPackageLifecycle (pkg, env, wd, unsafe, cb) {
// run package lifecycle scripts in the package root, or the nearest parent.
var stage = env.npm_lifecycle_event
- , user = unsafe ? null : npm.config.get("user")
- , group = unsafe ? null : npm.config.get("group")
, cmd = env.npm_lifecycle_script
- , sh = "sh"
- , shFlag = "-c"
- if (process.platform === "win32") {
- sh = "cmd"
- shFlag = "/c"
+ var note = "\n> " + pkg._id + " " + stage + " " + wd
+ + "\n> " + cmd + "\n"
+ runCmd(note, cmd, pkg, env, stage, wd, unsafe, cb)
+}
+
+
+var running = false
+var queue = []
+function dequeue() {
+ running = false
+ if (queue.length) {
+ var r = queue.shift()
+ runCmd.apply(null, r)
}
+}
+
+function runCmd (note, cmd, pkg, env, stage, wd, unsafe, cb) {
+ if (running) {
+ queue.push([note, cmd, pkg, env, stage, wd, unsafe, cb])
+ return
+ }
+
+ running = true
+ log.pause()
+ var user = unsafe ? null : npm.config.get("user")
+ , group = unsafe ? null : npm.config.get("group")
+ if (log.level !== 'silent') {
+ console.log(note)
+ }
log.verbose("unsafe-perm in lifecycle", unsafe)
- var note = "\n> " + pkg._id + " " + stage + " " + wd
- + "\n> " + cmd + "\n"
+ if (process.platform === "win32") {
+ unsafe = true
+ }
- console.log(note)
+ if (unsafe) {
+ runCmd_(cmd, pkg, env, wd, stage, unsafe, 0, 0, cb)
+ } else {
+ uidNumber(user, group, function (er, uid, gid) {
+ runCmd_(cmd, pkg, env, wd, stage, unsafe, uid, gid, cb)
+ })
+ }
+}
+
+function runCmd_ (cmd, pkg, env, wd, stage, unsafe, uid, gid, cb_) {
+
+ function cb (er) {
+ cb_.apply(null, arguments)
+ log.resume()
+ process.nextTick(dequeue)
+ }
+
+ var conf = { cwd: wd
+ , env: env
+ , stdio: [ 0, 1, 2 ]
+ }
+
+ if (!unsafe) {
+ conf.uid = uid ^ 0
+ conf.gid = gid ^ 0
+ }
+
+ var sh = "sh"
+ var shFlag = "-c"
+
+ if (process.platform === "win32") {
+ sh = "cmd"
+ shFlag = "/c"
+ conf.windowsVerbatimArguments = true
+ }
- var conf = { cwd: wd, env: env, customFds: [ 0, 1, 2] }
var proc = spawn(sh, [shFlag, cmd], conf)
- proc.on("close", function (er, stdout, stderr) {
+ proc.on("close", function (code, signal) {
+ if (signal) {
+ process.kill(process.pid, signal);
+ } else if (code) {
+ var er = new Error("Exit status " + code)
+ }
if (er && !npm.ROLLBACK) {
log.info(pkg._id, "Failed to exec "+stage+" script")
er.message = pkg._id + " "
- + stage + ": `" + env.npm_lifecycle_script+"`\n"
+ + stage + ": `" + cmd +"`\n"
+ er.message
if (er.code !== "EPERM") {
er.code = "ELIFECYCLE"
}
er.pkgid = pkg._id
er.stage = stage
- er.script = env.npm_lifecycle_script
+ er.script = cmd
er.pkgname = pkg.name
return cb(er)
} else if (er) {
@@ -175,6 +235,7 @@ function runPackageLifecycle (pkg, env, wd, unsafe, cb) {
})
}
+
function runHookLifecycle (pkg, env, wd, unsafe, cb) {
// check for a hook script, run if present.
var stage = env.npm_lifecycle_event
@@ -185,17 +246,9 @@ function runHookLifecycle (pkg, env, wd, unsafe, cb) {
fs.stat(hook, function (er) {
if (er) return cb()
-
- var conf = { cwd: wd, env: env, customFds: [ 0, 1, 2] }
- var proc = spawn("sh", ["-c", cmd], conf)
- proc.on("close", function (er) {
- if (er) {
- er.message += "\nFailed to exec "+stage+" hook script"
- log.info(pkg._id, er)
- }
- if (npm.ROLLBACK) return cb()
- cb(er)
- })
+ var note = "\n> " + pkg._id + " " + stage + " " + wd
+ + "\n> " + cmd
+ runCmd(note, hook, pkg, env, stage, wd, unsafe, cb)
})
}
@@ -262,6 +315,7 @@ function makeEnv (data, prefix, env) {
var value = npm.config.get(i)
if (value instanceof Stream || Array.isArray(value)) return
if (!value) value = ""
+ else if (typeof value === "number") value = "" + value
else if (typeof value !== "string") value = JSON.stringify(value)
value = -1 !== value.indexOf("\n")
diff --git a/deps/npm/lib/utils/tar.js b/deps/npm/lib/utils/tar.js
index 378415eb1..b73c134e4 100644
--- a/deps/npm/lib/utils/tar.js
+++ b/deps/npm/lib/utils/tar.js
@@ -6,7 +6,7 @@ var npm = require("../npm.js")
, path = require("path")
, log = require("npmlog")
, uidNumber = require("uid-number")
- , rm = require("rimraf")
+ , rm = require("./gently-rm.js")
, readJson = require("read-package-json")
, cache = require("../cache.js")
, myUid = process.getuid && process.getuid()
diff --git a/deps/npm/lib/version.js b/deps/npm/lib/version.js
index 73cd163f4..4e155da96 100644
--- a/deps/npm/lib/version.js
+++ b/deps/npm/lib/version.js
@@ -11,7 +11,7 @@ var exec = require("child_process").execFile
, which = require("which")
, npm = require("./npm.js")
-version.usage = "npm version [<newversion> | major | minor | patch | build]\n"
+version.usage = "npm version [<newversion> | major | minor | patch]\n"
+ "\n(run in package dir)\n"
+ "'npm -v' or 'npm --version' to print npm version "
+ "("+npm.version+")\n"
@@ -65,7 +65,8 @@ function version (args, silent, cb_) {
cb_(er)
}
- var doGit = !er && s.isDirectory()
+ var tags = npm.config.get('git-tag-version')
+ var doGit = !er && s.isDirectory() && tags
if (!doGit) return write(data, cb)
else checkGit(data, cb)
})
diff --git a/deps/npm/lib/view.js b/deps/npm/lib/view.js
index b88f98a09..18484b2bd 100644
--- a/deps/npm/lib/view.js
+++ b/deps/npm/lib/view.js
@@ -13,7 +13,7 @@ view.completion = function (opts, cb) {
if (er) return cb(er)
var dv = d.versions[d["dist-tags"][tag]]
, fields = []
- d.versions = Object.keys(d.versions).sort(semver.compare)
+ d.versions = Object.keys(d.versions).sort(semver.compareLoose)
fields = getFields(d).concat(getFields(dv))
cb(null, fields)
})
@@ -56,15 +56,26 @@ function view (args, silent, cb) {
if (name === ".") return cb(view.usage)
// get the data about this package
- registry.get(name, 600, function (er, data) {
+ registry.get(name, function (er, data) {
if (er) return cb(er)
- if (data["dist-tags"].hasOwnProperty(version)) {
+ if (data["dist-tags"] && data["dist-tags"].hasOwnProperty(version)) {
version = data["dist-tags"][version]
}
+
+ if (data.time && data.time.unpublished) {
+ var u = data.time.unpublished
+ var er = new Error("Unpublished by " + u.name + " on " + u.time)
+ er.statusCode = 404
+ er.code = "E404"
+ er.pkgid = data._id
+ return cb(er, data)
+ }
+
+
var results = []
, error = null
- , versions = data.versions
- data.versions = Object.keys(data.versions).sort(semver.compare)
+ , versions = data.versions || {}
+ data.versions = Object.keys(versions).sort(semver.compareLoose)
if (!args.length) args = [""]
// remove readme unless we asked for it
@@ -73,7 +84,7 @@ function view (args, silent, cb) {
}
Object.keys(versions).forEach(function (v) {
- if (semver.satisfies(v, version)) args.forEach(function (args) {
+ if (semver.satisfies(v, version, true)) args.forEach(function (args) {
// remove readme unless we asked for it
if (-1 === args.indexOf("readme")) {
delete versions[v].readme
diff --git a/deps/npm/lib/visnup.js b/deps/npm/lib/visnup.js
new file mode 100644
index 000000000..8d710c20b
--- /dev/null
+++ b/deps/npm/lib/visnup.js
@@ -0,0 +1,42 @@
+module.exports = visnup
+var npm = require("./npm.js")
+
+var handsomeFace = [
+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 232, 237, 236, 236, 232, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
+ ,[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 235, 236, 235, 233, 237, 235, 233, 232, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
+ ,[0, 0, 0, 0, 0, 0, 0, 0, 0, 232, 235, 233, 232, 235, 235, 234, 233, 236, 232, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
+ ,[0, 0, 0, 0, 0, 0, 0, 0, 237, 235, 232, 232, 234, 233, 233, 232, 232, 233, 232, 232, 235, 232, 233, 234, 234, 0, 0, 0, 0, 0, 0, 0, 0, 0]
+ ,[0, 0, 0, 0, 0, 0, 0, 232, 232, 232, 239, 238, 235, 233, 232, 232, 232, 232, 232, 232, 232, 233, 235, 232, 233, 233, 232, 0, 0, 0, 0, 0, 0, 0]
+ ,[0, 0, 0, 0, 234, 234, 232, 233, 234, 233, 234, 235, 233, 235, 60, 238, 238, 234, 234, 233, 234, 233, 238, 251, 246, 233, 233, 232, 0, 0, 0, 0, 0, 0]
+ ,[0, 0, 233, 233, 233, 232, 232, 239, 249, 251, 252, 231, 231, 188, 250, 254, 59, 60, 255, 231, 231, 231, 252, 235, 239, 235, 232, 233, 0, 0, 0, 0, 0, 0]
+ ,[0, 0, 232, 233, 232, 232, 232, 248, 231, 231, 231, 231, 231, 231, 231, 254, 238, 254, 231, 231, 231, 231, 231, 252, 233, 235, 237, 233, 234, 0, 0, 0, 0, 0]
+ ,[0, 0, 233, 232, 232, 232, 248, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 251, 233, 233, 233, 236, 233, 0, 0, 0, 0]
+ ,[232, 233, 233, 232, 232, 246, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 249, 233, 234, 234, 0, 0, 0, 0]
+ ,[232, 232, 232, 232, 233, 249, 231, 255, 255, 255, 255, 254, 109, 60, 239, 237, 238, 237, 235, 235, 235, 235, 236, 235, 235, 235, 234, 232, 232, 232, 232, 232, 233, 0]
+ ,[0, 232, 232, 233, 233, 233, 233, 233, 233, 233, 233, 233, 235, 236, 238, 238, 235, 188, 254, 254, 145, 236, 252, 254, 254, 254, 254, 249, 236, 235, 232, 232, 233, 0]
+ ,[0, 0, 233, 237, 249, 239, 233, 252, 231, 231, 231, 231, 231, 231, 254, 235, 235, 254, 231, 231, 251, 235, 237, 231, 231, 231, 231, 7, 237, 235, 232, 233, 233, 0]
+ ,[0, 0, 0, 0, 233, 248, 239, 233, 231, 231, 231, 231, 254, 233, 233, 235, 254, 255, 231, 254, 237, 236, 254, 239, 235, 235, 233, 233, 232, 232, 233, 232, 0, 0]
+ ,[0, 0, 0, 232, 233, 246, 255, 255, 236, 236, 236, 236, 236, 255, 231, 231, 231, 231, 231, 231, 252, 234, 248, 231, 231, 231, 231, 248, 232, 232, 232, 0, 0, 0]
+ ,[0, 0, 0, 0, 235, 237, 7, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 255, 238, 235, 7, 231, 231, 231, 246, 232, 0, 0, 0, 0, 0]
+ ,[0, 0, 0, 0, 0, 235, 103, 188, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 252, 232, 238, 231, 231, 255, 244, 232, 0, 0, 0, 0, 0]
+ ,[0, 0, 0, 0, 0, 235, 236, 103, 146, 253, 255, 231, 231, 231, 231, 231, 253, 251, 250, 250, 250, 246, 232, 235, 152, 255, 146, 66, 233, 0, 0, 0, 0, 0]
+ ,[0, 0, 0, 0, 0, 0, 233, 103, 146, 146, 146, 146, 254, 231, 231, 231, 109, 103, 146, 255, 188, 239, 240, 103, 255, 253, 103, 238, 234, 0, 0, 0, 0, 0]
+ ,[0, 0, 0, 0, 0, 0, 232, 235, 109, 146, 146, 146, 146, 146, 252, 152, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 103, 235, 233, 0, 0, 0, 0, 0]
+ ,[0, 0, 0, 0, 0, 0, 0, 235, 235, 103, 146, 146, 146, 146, 146, 146, 188, 188, 188, 188, 188, 188, 152, 146, 146, 146, 66, 235, 0, 0, 0, 0, 0, 0]
+ ,[0, 0, 0, 0, 0, 0, 0, 0, 233, 235, 66, 146, 146, 146, 146, 152, 255, 146, 240, 239, 241, 109, 146, 146, 146, 103, 233, 0, 0, 0, 0, 0, 0, 0]
+ ,[0, 0, 0, 0, 0, 0, 0, 0, 0, 234, 237, 109, 146, 146, 146, 146, 146, 254, 231, 231, 188, 146, 146, 146, 103, 233, 0, 0, 0, 0, 0, 0, 0, 0]
+ ,[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 233, 237, 60, 103, 146, 146, 146, 146, 146, 103, 66, 60, 235, 232, 0, 0, 0, 0, 0, 0, 0, 0, 0]
+ ,[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 232, 233, 233, 236, 235, 237, 235, 237, 237, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]]
+
+
+function visnup (args, cb) {
+ handsomeFace.forEach(function (line) {
+ console.log(line.map(function (ch) {
+ return "\033[" + (ch ? "48;5;" + ch : ch) + "m"
+ }).join(' '))
+ })
+
+ var c = args.shift()
+ if (c) npm.commands[c](args, cb)
+ else cb()
+}
diff --git a/deps/npm/make.bat b/deps/npm/make.bat
new file mode 100644
index 000000000..7d71f0f92
--- /dev/null
+++ b/deps/npm/make.bat
@@ -0,0 +1,3 @@
+:: The tests run "make doc" in the prepublish script,
+:: so this file gives windows something that'll exit
+:: successfully, without having to install make.
diff --git a/deps/npm/man/man1/README.1 b/deps/npm/man/man1/README.1
deleted file mode 100644
index f377b725b..000000000
--- a/deps/npm/man/man1/README.1
+++ /dev/null
@@ -1,325 +0,0 @@
-.\" Generated with Ronnjs 0.3.8
-.\" http://github.com/kapouer/ronnjs/
-.
-.TH "NPM" "1" "June 2013" "" ""
-.
-.SH "NAME"
-\fBnpm\fR \-\- node package manager
-.
-.SH "SYNOPSIS"
-This is just enough info to get you up and running\.
-.
-.P
-Much more info available via \fBnpm help\fR once it\'s installed\.
-.
-.SH "IMPORTANT"
-\fBYou need node v0\.8 or higher to run this program\.\fR
-.
-.P
-To install an old \fBand unsupported\fR version of npm that works on node 0\.3
-and prior, clone the git repo and dig through the old tags and branches\.
-.
-.SH "Super Easy Install"
-npm comes with node now\.
-.
-.SS "Windows Computers"
-Get the MSI\. npm is in it\.
-.
-.SS "Apple Macintosh Computers"
-Get the pkg\. npm is in it\.
-.
-.SS "Other Sorts of Unices"
-Run \fBmake install\fR\|\. npm will be installed with node\.
-.
-.P
-If you want a more fancy pants install (a different version, customized
-paths, etc\.) then read on\.
-.
-.SH "Fancy Install (Unix)"
-There\'s a pretty robust install script at \fIhttps://npmjs\.org/install\.sh\fR\|\. You can download that and run it\.
-.
-.SS "Slightly Fancier"
-You can set any npm configuration params with that script:
-.
-.IP "" 4
-.
-.nf
-npm_config_prefix=/some/path sh install\.sh
-.
-.fi
-.
-.IP "" 0
-.
-.P
-Or, you can run it in uber\-debuggery mode:
-.
-.IP "" 4
-.
-.nf
-npm_debug=1 sh install\.sh
-.
-.fi
-.
-.IP "" 0
-.
-.SS "Even Fancier"
-Get the code with git\. Use \fBmake\fR to build the docs and do other stuff\.
-If you plan on hacking on npm, \fBmake link\fR is your friend\.
-.
-.P
-If you\'ve got the npm source code, you can also semi\-permanently set
-arbitrary config keys using the \fB\|\./configure \-\-key=val \.\.\.\fR, and then
-run npm commands by doing \fBnode cli\.js <cmd> <args>\fR\|\. (This is helpful
-for testing, or running stuff without actually installing npm itself\.)
-.
-.SH "Fancy Windows Install"
-You can download a zip file from \fIhttps://npmjs\.org/dist/\fR, and unpack it
-in the same folder where node\.exe lives\.
-.
-.P
-If that\'s not fancy enough for you, then you can fetch the code with
-git, and mess with it directly\.
-.
-.SH "Installing on Cygwin"
-No\.
-.
-.SH "Permissions when Using npm to Install Other Stuff"
-\fBtl;dr\fR
-.
-.IP "\(bu" 4
-Use \fBsudo\fR for greater safety\. Or don\'t, if you prefer not to\.
-.
-.IP "\(bu" 4
-npm will downgrade permissions if it\'s root before running any build
-scripts that package authors specified\.
-.
-.IP "" 0
-.
-.SS "More details\.\.\."
-As of version 0\.3, it is recommended to run npm as root\.
-This allows npm to change the user identifier to the \fBnobody\fR user prior
-to running any package build or test commands\.
-.
-.P
-If you are not the root user, or if you are on a platform that does not
-support uid switching, then npm will not attempt to change the userid\.
-.
-.P
-If you would like to ensure that npm \fBalways\fR runs scripts as the
-"nobody" user, and have it fail if it cannot downgrade permissions, then
-set the following configuration param:
-.
-.IP "" 4
-.
-.nf
-npm config set unsafe\-perm false
-.
-.fi
-.
-.IP "" 0
-.
-.P
-This will prevent running in unsafe mode, even as non\-root users\.
-.
-.SH "Uninstalling"
-So sad to see you go\.
-.
-.IP "" 4
-.
-.nf
-sudo npm uninstall npm \-g
-.
-.fi
-.
-.IP "" 0
-.
-.P
-Or, if that fails,
-.
-.IP "" 4
-.
-.nf
-sudo make uninstall
-.
-.fi
-.
-.IP "" 0
-.
-.SH "More Severe Uninstalling"
-Usually, the above instructions are sufficient\. That will remove
-npm, but leave behind anything you\'ve installed\.
-.
-.P
-If you would like to remove all the packages that you have installed,
-then you can use the \fBnpm ls\fR command to find them, and then \fBnpm rm\fR to
-remove them\.
-.
-.P
-To remove cruft left behind by npm 0\.x, you can use the included \fBclean\-old\.sh\fR script file\. You can run it conveniently like this:
-.
-.IP "" 4
-.
-.nf
-npm explore npm \-g \-\- sh scripts/clean\-old\.sh
-.
-.fi
-.
-.IP "" 0
-.
-.P
-npm uses two configuration files, one for per\-user configs, and another
-for global (every\-user) configs\. You can view them by doing:
-.
-.IP "" 4
-.
-.nf
-npm config get userconfig # defaults to ~/\.npmrc
-npm config get globalconfig # defaults to /usr/local/etc/npmrc
-.
-.fi
-.
-.IP "" 0
-.
-.P
-Uninstalling npm does not remove configuration files by default\. You
-must remove them yourself manually if you want them gone\. Note that
-this means that future npm installs will not remember the settings that
-you have chosen\.
-.
-.SH "Using npm Programmatically"
-If you would like to use npm programmatically, you can do that\.
-It\'s not very well documented, but it \fIis\fR rather simple\.
-.
-.P
-Most of the time, unless you actually want to do all the things that
-npm does, you should try using one of npm\'s dependencies rather than
-using npm itself, if possible\.
-.
-.P
-Eventually, npm will be just a thin cli wrapper around the modules
-that it depends on, but for now, there are some things that you must
-use npm itself to do\.
-.
-.IP "" 4
-.
-.nf
-var npm = require("npm")
-npm\.load(myConfigObject, function (er) {
- if (er) return handlError(er)
- npm\.commands\.install(["some", "args"], function (er, data) {
- if (er) return commandFailed(er)
- // command succeeded, and data might have some info
- })
- npm\.on("log", function (message) { \.\.\.\. })
-})
-.
-.fi
-.
-.IP "" 0
-.
-.P
-The \fBload\fR function takes an object hash of the command\-line configs\.
-The various \fBnpm\.commands\.<cmd>\fR functions take an \fBarray\fR of
-positional argument \fBstrings\fR\|\. The last argument to any \fBnpm\.commands\.<cmd>\fR function is a callback\. Some commands take other
-optional arguments\. Read the source\.
-.
-.P
-You cannot set configs individually for any single npm function at this
-time\. Since \fBnpm\fR is a singleton, any call to \fBnpm\.config\.set\fR will
-change the value for \fIall\fR npm commands in that process\.
-.
-.P
-See \fB\|\./bin/npm\-cli\.js\fR for an example of pulling config values off of the
-command line arguments using nopt\. You may also want to check out \fBnpm
-help config\fR to learn about all the options you can set there\.
-.
-.SH "More Docs"
-Check out the docs \fIhttps://npmjs\.org/doc/\fR,
-especially the faq \fIhttps://npmjs\.org/doc/faq\.html\fR\|\.
-.
-.P
-You can use the \fBnpm help\fR command to read any of them\.
-.
-.P
-If you\'re a developer, and you want to use npm to publish your program,
-you should read this \fIhttps://npmjs\.org/doc/developers\.html\fR
-.
-.SH "Legal Stuff"
-"npm" and "the npm registry" are owned by Isaac Z\. Schlueter\. All
-rights not explicitly granted in the MIT license are reserved\. See the
-included LICENSE file for more details\.
-.
-.P
-"Node\.js" and "node" are trademarks owned by Joyent, Inc\. npm is not
-officially part of the Node\.js project, and is neither owned by nor
-officially affiliated with Joyent, Inc\.
-.
-.P
-The packages in the npm registry are not part of npm itself, and are the
-sole property of their respective maintainers\. While every effort is
-made to ensure accountability, there is absolutely no guarantee,
-warrantee, or assertion made as to the quality, fitness for a specific
-purpose, or lack of malice in any given npm package\. Modules
-published on the npm registry are not affiliated with or endorsed by
-Joyent, Inc\., Isaac Z\. Schlueter, Ryan Dahl, or the Node\.js project\.
-.
-.P
-If you have a complaint about a package in the npm registry, and cannot
-resolve it with the package owner, please express your concerns to
-Isaac Z\. Schlueter at \fIi@izs\.me\fR\|\.
-.
-.SS "In plain english"
-This is mine; not my employer\'s, not Node\'s, not Joyent\'s, not Ryan
-Dahl\'s\.
-.
-.P
-If you publish something, it\'s yours, and you are solely accountable
-for it\. Not me, not Node, not Joyent, not Ryan Dahl\.
-.
-.P
-If other people publish something, it\'s theirs\. Not mine, not Node\'s,
-not Joyent\'s, not Ryan Dahl\'s\.
-.
-.P
-Yes, you can publish something evil\. It will be removed promptly if
-reported, and we\'ll lose respect for you\. But there is no vetting
-process for published modules\.
-.
-.P
-If this concerns you, inspect the source before using packages\.
-.
-.SH "BUGS"
-When you find issues, please report them:
-.
-.IP "\(bu" 4
-web: \fIhttps://github\.com/isaacs/npm/issues\fR
-.
-.IP "\(bu" 4
-email: \fInpm\-@googlegroups\.com\fR
-.
-.IP "" 0
-.
-.P
-Be sure to include \fIall\fR of the output from the npm command that didn\'t work
-as expected\. The \fBnpm\-debug\.log\fR file is also helpful to provide\.
-.
-.P
-You can also look for isaacs in #node\.js on irc://irc\.freenode\.net\. He
-will no doubt tell you to put the output in a gist or email\.
-.
-.SH "SEE ALSO"
-.
-.IP "\(bu" 4
-npm help npm
-.
-.IP "\(bu" 4
-npm help faq
-.
-.IP "\(bu" 4
-npm help help
-.
-.IP "\(bu" 4
-npm help index
-.
-.IP "" 0
-
diff --git a/deps/npm/man/man1/adduser.1 b/deps/npm/man/man1/adduser.1
deleted file mode 100644
index 4e948a8ff..000000000
--- a/deps/npm/man/man1/adduser.1
+++ /dev/null
@@ -1,57 +0,0 @@
-.\" Generated with Ronnjs 0.3.8
-.\" http://github.com/kapouer/ronnjs/
-.
-.TH "NPM\-ADDUSER" "1" "June 2013" "" ""
-.
-.SH "NAME"
-\fBnpm-adduser\fR \-\- Add a registry user account
-.
-.SH "SYNOPSIS"
-.
-.nf
-npm adduser
-.
-.fi
-.
-.SH "DESCRIPTION"
-Create or verify a user named \fB<username>\fR in the npm registry, and
-save the credentials to the \fB\|\.npmrc\fR file\.
-.
-.P
-The username, password, and email are read in from prompts\.
-.
-.P
-You may use this command to change your email address, but not username
-or password\.
-.
-.P
-To reset your password, go to \fIhttp://admin\.npmjs\.org/\fR
-.
-.P
-You may use this command multiple times with the same user account to
-authorize on a new machine\.
-.
-.SH "CONFIGURATION"
-.
-.SS "registry"
-Default: http://registry\.npmjs\.org/
-.
-.P
-The base URL of the npm package registry\.
-.
-.SH "SEE ALSO"
-.
-.IP "\(bu" 4
-npm help registry
-.
-.IP "\(bu" 4
-npm help config
-.
-.IP "\(bu" 4
-npm help owner
-.
-.IP "\(bu" 4
-npm help whoami
-.
-.IP "" 0
-
diff --git a/deps/npm/man/man1/author.1 b/deps/npm/man/man1/author.1
deleted file mode 100644
index 6373c3ee4..000000000
--- a/deps/npm/man/man1/author.1
+++ /dev/null
@@ -1,55 +0,0 @@
-.\" Generated with Ronnjs/v0.1
-.\" http://github.com/kapouer/ronnjs/
-.
-.TH "NPM\-OWNER" "1" "November 2011" "" ""
-.
-.SH "NAME"
-\fBnpm-owner\fR \-\- Manage package owners
-.
-.SH "SYNOPSIS"
-.
-.nf
-npm owner ls <package name>
-npm owner add <user> <package name>
-npm owner rm <user> <package name>
-.
-.fi
-.
-.SH "DESCRIPTION"
-Manage ownership of published packages\.
-.
-.IP "\(bu" 4
-ls:
-List all the users who have access to modify a package and push new versions\.
-Handy when you need to know who to bug for help\.
-.
-.IP "\(bu" 4
-add:
-Add a new user as a maintainer of a package\. This user is enabled to modify
-metadata, publish new versions, and add other owners\.
-.
-.IP "\(bu" 4
-rm:
-Remove a user from the package owner list\. This immediately revokes their
-privileges\.
-.
-.IP "" 0
-.
-.P
-Note that there is only one level of access\. Either you can modify a package,
-or you can\'t\. Future versions may contain more fine\-grained access levels, but
-that is not implemented at this time\.
-.
-.SH "SEE ALSO"
-.
-.IP "\(bu" 4
-npm help publish
-.
-.IP "\(bu" 4
-npm help registry
-.
-.IP "\(bu" 4
-npm help adduser
-.
-.IP "" 0
-
diff --git a/deps/npm/man/man1/bin.1 b/deps/npm/man/man1/bin.1
deleted file mode 100644
index 39b903405..000000000
--- a/deps/npm/man/man1/bin.1
+++ /dev/null
@@ -1,34 +0,0 @@
-.\" Generated with Ronnjs 0.3.8
-.\" http://github.com/kapouer/ronnjs/
-.
-.TH "NPM\-BIN" "1" "June 2013" "" ""
-.
-.SH "NAME"
-\fBnpm-bin\fR \-\- Display npm bin folder
-.
-.SH "SYNOPSIS"
-.
-.nf
-npm bin
-.
-.fi
-.
-.SH "DESCRIPTION"
-Print the folder where npm will install executables\.
-.
-.SH "SEE ALSO"
-.
-.IP "\(bu" 4
-npm help prefix
-.
-.IP "\(bu" 4
-npm help root
-.
-.IP "\(bu" 4
-npm help folders
-.
-.IP "\(bu" 4
-npm help config
-.
-.IP "" 0
-
diff --git a/deps/npm/man/man1/bugs.1 b/deps/npm/man/man1/bugs.1
deleted file mode 100644
index 062130e96..000000000
--- a/deps/npm/man/man1/bugs.1
+++ /dev/null
@@ -1,70 +0,0 @@
-.\" Generated with Ronnjs 0.3.8
-.\" http://github.com/kapouer/ronnjs/
-.
-.TH "NPM\-BUGS" "1" "June 2013" "" ""
-.
-.SH "NAME"
-\fBnpm-bugs\fR \-\- Bugs for a package in a web browser maybe
-.
-.SH "SYNOPSIS"
-.
-.nf
-npm bugs <pkgname>
-.
-.fi
-.
-.SH "DESCRIPTION"
-This command tries to guess at the likely location of a package\'s
-bug tracker URL, and then tries to open it using the \fB\-\-browser\fR
-config param\.
-.
-.SH "CONFIGURATION"
-.
-.SS "browser"
-.
-.IP "\(bu" 4
-Default: OS X: \fB"open"\fR, Windows: \fB"start"\fR, Others: \fB"xdg\-open"\fR
-.
-.IP "\(bu" 4
-Type: String
-.
-.IP "" 0
-.
-.P
-The browser that is called by the \fBnpm bugs\fR command to open websites\.
-.
-.SS "registry"
-.
-.IP "\(bu" 4
-Default: https://registry\.npmjs\.org/
-.
-.IP "\(bu" 4
-Type: url
-.
-.IP "" 0
-.
-.P
-The base URL of the npm package registry\.
-.
-.SH "SEE ALSO"
-.
-.IP "\(bu" 4
-npm help docs
-.
-.IP "\(bu" 4
-npm help view
-.
-.IP "\(bu" 4
-npm help publish
-.
-.IP "\(bu" 4
-npm help registry
-.
-.IP "\(bu" 4
-npm help config
-.
-.IP "\(bu" 4
-npm help json
-.
-.IP "" 0
-
diff --git a/deps/npm/man/man1/build.1 b/deps/npm/man/man1/build.1
deleted file mode 100644
index 9b06a852e..000000000
--- a/deps/npm/man/man1/build.1
+++ /dev/null
@@ -1,43 +0,0 @@
-.\" Generated with Ronnjs 0.3.8
-.\" http://github.com/kapouer/ronnjs/
-.
-.TH "NPM\-BUILD" "1" "June 2013" "" ""
-.
-.SH "NAME"
-\fBnpm-build\fR \-\- Build a package
-.
-.SH "SYNOPSIS"
-.
-.nf
-npm build <package\-folder>
-.
-.fi
-.
-.IP "\(bu" 4
-\fB<package\-folder>\fR:
-A folder containing a \fBpackage\.json\fR file in its root\.
-.
-.IP "" 0
-.
-.SH "DESCRIPTION"
-This is the plumbing command called by \fBnpm link\fR and \fBnpm install\fR\|\.
-.
-.P
-It should generally not be called directly\.
-.
-.SH "SEE ALSO"
-.
-.IP "\(bu" 4
-npm help install
-.
-.IP "\(bu" 4
-npm help link
-.
-.IP "\(bu" 4
-npm help scripts
-.
-.IP "\(bu" 4
-npm help json
-.
-.IP "" 0
-
diff --git a/deps/npm/man/man1/bundle.1 b/deps/npm/man/man1/bundle.1
deleted file mode 100644
index e134b1c8e..000000000
--- a/deps/npm/man/man1/bundle.1
+++ /dev/null
@@ -1,23 +0,0 @@
-.\" Generated with Ronnjs 0.3.8
-.\" http://github.com/kapouer/ronnjs/
-.
-.TH "NPM\-BUNDLE" "1" "June 2013" "" ""
-.
-.SH "NAME"
-\fBnpm-bundle\fR \-\- REMOVED
-.
-.SH "DESCRIPTION"
-The \fBnpm bundle\fR command has been removed in 1\.0, for the simple reason
-that it is no longer necessary, as the default behavior is now to
-install packages into the local space\.
-.
-.P
-Just use \fBnpm install\fR now to do what \fBnpm bundle\fR used to do\.
-.
-.SH "SEE ALSO"
-.
-.IP "\(bu" 4
-npm help install
-.
-.IP "" 0
-
diff --git a/deps/npm/man/man1/cache.1 b/deps/npm/man/man1/cache.1
deleted file mode 100644
index d3b7c6207..000000000
--- a/deps/npm/man/man1/cache.1
+++ /dev/null
@@ -1,97 +0,0 @@
-.\" Generated with Ronnjs 0.3.8
-.\" http://github.com/kapouer/ronnjs/
-.
-.TH "NPM\-CACHE" "1" "June 2013" "" ""
-.
-.SH "NAME"
-\fBnpm-cache\fR \-\- Manipulates packages cache
-.
-.SH "SYNOPSIS"
-.
-.nf
-npm cache add <tarball file>
-npm cache add <folder>
-npm cache add <tarball url>
-npm cache add <name>@<version>
-npm cache ls [<path>]
-npm cache clean [<path>]
-.
-.fi
-.
-.SH "DESCRIPTION"
-Used to add, list, or clear the npm cache folder\.
-.
-.IP "\(bu" 4
-add:
-Add the specified package to the local cache\. This command is primarily
-intended to be used internally by npm, but it can provide a way to
-add data to the local installation cache explicitly\.
-.
-.IP "\(bu" 4
-ls:
-Show the data in the cache\. Argument is a path to show in the cache
-folder\. Works a bit like the \fBfind\fR program, but limited by the \fBdepth\fR config\.
-.
-.IP "\(bu" 4
-clean:
-Delete data out of the cache folder\. If an argument is provided, then
-it specifies a subpath to delete\. If no argument is provided, then
-the entire cache is cleared\.
-.
-.IP "" 0
-.
-.SH "DETAILS"
-npm stores cache data in \fB$HOME/\.npm\fR\|\. For each package that is added
-to the cache, three pieces of information are stored in \fB{cache}/{name}/{version}\fR:
-.
-.IP "\(bu" 4
-\|\.\.\./package/:
-A folder containing the package contents as they appear in the tarball\.
-.
-.IP "\(bu" 4
-\|\.\.\./package\.json:
-The package\.json file, as npm sees it, with overlays applied and a _id attribute\.
-.
-.IP "\(bu" 4
-\|\.\.\./package\.tgz:
-The tarball for that version\.
-.
-.IP "" 0
-.
-.P
-Additionally, whenever a registry request is made, a \fB\|\.cache\.json\fR file
-is placed at the corresponding URI, to store the ETag and the requested
-data\.
-.
-.P
-Commands that make non\-essential registry requests (such as \fBsearch\fR and \fBview\fR, or the completion scripts) generally specify a minimum timeout\.
-If the \fB\|\.cache\.json\fR file is younger than the specified timeout, then
-they do not make an HTTP request to the registry\.
-.
-.SH "CONFIGURATION"
-.
-.SS "cache"
-Default: \fB$HOME/\.npm\fR on Posix, or \fB$HOME/npm\-cache\fR on Windows\.
-.
-.P
-The root cache folder\.
-.
-.SH "SEE ALSO"
-.
-.IP "\(bu" 4
-npm help folders
-.
-.IP "\(bu" 4
-npm help config
-.
-.IP "\(bu" 4
-npm help install
-.
-.IP "\(bu" 4
-npm help publish
-.
-.IP "\(bu" 4
-npm help pack
-.
-.IP "" 0
-
diff --git a/deps/npm/man/man1/changelog.1 b/deps/npm/man/man1/changelog.1
deleted file mode 100644
index 80e08dd1a..000000000
--- a/deps/npm/man/man1/changelog.1
+++ /dev/null
@@ -1,173 +0,0 @@
-.\" Generated with Ronnjs 0.3.8
-.\" http://github.com/kapouer/ronnjs/
-.
-.TH "NPM\-CHANGELOG" "1" "June 2013" "" ""
-.
-.SH "NAME"
-\fBnpm-changelog\fR \-\- Changes
-.
-.SH "HISTORY"
-.
-.SS "1\.1\.3, 1\.1\.4"
-.
-.IP "\(bu" 4
-Update request to support HTTPS\-over\-HTTP proxy tunneling
-.
-.IP "\(bu" 4
-Throw on undefined envs in config settings
-.
-.IP "\(bu" 4
-Update which to 1\.0\.5
-.
-.IP "\(bu" 4
-Fix windows UNC busyloop in findPrefix
-.
-.IP "\(bu" 4
-Bundle nested bundleDependencies properly
-.
-.IP "\(bu" 4
-Alias adduser to add\-user
-.
-.IP "\(bu" 4
-Doc updates (Christian Howe, Henrik Hodne, Andrew Lunny)
-.
-.IP "\(bu" 4
-ignore logfd/outfd streams in makeEnv() (Rod Vagg)
-.
-.IP "\(bu" 4
-shrinkwrap: Behave properly with url\-installed deps
-.
-.IP "\(bu" 4
-install: Support \-\-save with url install targets
-.
-.IP "\(bu" 4
-Support installing naked tars or single\-file modules from urls etc\.
-.
-.IP "\(bu" 4
-init: Don\'t add engines section
-.
-.IP "\(bu" 4
-Don\'t run make clean on rebuild
-.
-.IP "\(bu" 4
-Added missing unicode replacement (atomizer)
-.
-.IP "" 0
-.
-.SS "1\.1\.2"
-Dave Pacheco (2):
- add "npm shrinkwrap"
-.
-.P
-Martin Cooper (1):
- Fix #1753 Make a copy of the cached objects we\'ll modify\.
-.
-.P
-Tim Oxley (1):
- correctly remove readme from default npm view command\.
-.
-.P
-Tyler Green (1):
- fix #2187 set terminal columns to Infinity if 0
-.
-.P
-isaacs (19):
- update minimatch
- update request
- Experimental: single\-file modules
- Fix #2172 Don\'t remove global mans uninstalling local pkgs
- Add \-\-versions flag to show the version of node as well
- Support \-\-json flag for ls output
- update request to 2\.9\.151
-.
-.SS "1\.1"
-.
-.IP "\(bu" 4
-Replace system tar dependency with a JS tar
-.
-.IP "\(bu" 4
-Continue to refine
-.
-.IP "" 0
-.
-.SS "1\.0"
-.
-.IP "\(bu" 4
-Greatly simplified folder structure
-.
-.IP "\(bu" 4
-Install locally (bundle by default)
-.
-.IP "\(bu" 4
-Drastic rearchitecture
-.
-.IP "" 0
-.
-.SS "0\.3"
-.
-.IP "\(bu" 4
-More correct permission/uid handling when running as root
-.
-.IP "\(bu" 4
-Require node 0\.4\.0
-.
-.IP "\(bu" 4
-Reduce featureset
-.
-.IP "\(bu" 4
-Packages without "main" modules don\'t export modules
-.
-.IP "\(bu" 4
-Remove support for invalid JSON (since node doesn\'t support it)
-.
-.IP "" 0
-.
-.SS "0\.2"
-.
-.IP "\(bu" 4
-First allegedly "stable" release
-.
-.IP "\(bu" 4
-Most functionality implemented
-.
-.IP "\(bu" 4
-Used shim files and \fBname@version\fR symlinks
-.
-.IP "\(bu" 4
-Feature explosion
-.
-.IP "\(bu" 4
-Kind of a mess
-.
-.IP "" 0
-.
-.SS "0\.1"
-.
-.IP "\(bu" 4
-push to beta, and announce
-.
-.IP "\(bu" 4
-Solaris and Cygwin support
-.
-.IP "" 0
-.
-.SS "0\.0"
-.
-.IP "\(bu" 4
-Lots of sketches and false starts; abandoned a few times
-.
-.IP "\(bu" 4
-Core functionality established
-.
-.IP "" 0
-.
-.SH "SEE ALSO"
-.
-.IP "\(bu" 4
-npm help npm
-.
-.IP "\(bu" 4
-npm help faq
-.
-.IP "" 0
-
diff --git a/deps/npm/man/man1/coding-style.1 b/deps/npm/man/man1/coding-style.1
deleted file mode 100644
index 25147bfb0..000000000
--- a/deps/npm/man/man1/coding-style.1
+++ /dev/null
@@ -1,254 +0,0 @@
-.\" Generated with Ronnjs 0.3.8
-.\" http://github.com/kapouer/ronnjs/
-.
-.TH "NPM\-CODING\-STYLE" "1" "June 2013" "" ""
-.
-.SH "NAME"
-\fBnpm-coding-style\fR \-\- npm\'s "funny" coding style
-.
-.SH "DESCRIPTION"
-npm\'s coding style is a bit unconventional\. It is not different for
-difference\'s sake, but rather a carefully crafted style that is
-designed to reduce visual clutter and make bugs more apparent\.
-.
-.P
-If you want to contribute to npm (which is very encouraged), you should
-make your code conform to npm\'s style\.
-.
-.P
-Note: this concerns npm\'s code not the specific packages at npmjs\.org
-.
-.SH "Line Length"
-Keep lines shorter than 80 characters\. It\'s better for lines to be
-too short than to be too long\. Break up long lists, objects, and other
-statements onto multiple lines\.
-.
-.SH "Indentation"
-Two\-spaces\. Tabs are better, but they look like hell in web browsers
-(and on github), and node uses 2 spaces, so that\'s that\.
-.
-.P
-Configure your editor appropriately\.
-.
-.SH "Curly braces"
-Curly braces belong on the same line as the thing that necessitates them\.
-.
-.P
-Bad:
-.
-.IP "" 4
-.
-.nf
-function ()
-{
-.
-.fi
-.
-.IP "" 0
-.
-.P
-Good:
-.
-.IP "" 4
-.
-.nf
-function () {
-.
-.fi
-.
-.IP "" 0
-.
-.P
-If a block needs to wrap to the next line, use a curly brace\. Don\'t
-use it if it doesn\'t\.
-.
-.P
-Bad:
-.
-.IP "" 4
-.
-.nf
-if (foo) { bar() }
-while (foo)
- bar()
-.
-.fi
-.
-.IP "" 0
-.
-.P
-Good:
-.
-.IP "" 4
-.
-.nf
-if (foo) bar()
-while (foo) {
- bar()
-}
-.
-.fi
-.
-.IP "" 0
-.
-.SH "Semicolons"
-Don\'t use them except in four situations:
-.
-.IP "\(bu" 4
-\fBfor (;;)\fR loops\. They\'re actually required\.
-.
-.IP "\(bu" 4
-null loops like: \fBwhile (something) ;\fR (But you\'d better have a good
-reason for doing that\.)
-.
-.IP "\(bu" 4
-\fBcase "foo": doSomething(); break\fR
-.
-.IP "\(bu" 4
-In front of a leading \fB(\fR or \fB[\fR at the start of the line\.
-This prevents the expression from being interpreted
-as a function call or property access, respectively\.
-.
-.IP "" 0
-.
-.P
-Some examples of good semicolon usage:
-.
-.IP "" 4
-.
-.nf
-;(x || y)\.doSomething()
-;[a, b, c]\.forEach(doSomething)
-for (var i = 0; i < 10; i ++) {
- switch (state) {
- case "begin": start(); continue
- case "end": finish(); break
- default: throw new Error("unknown state")
- }
- end()
-}
-.
-.fi
-.
-.IP "" 0
-.
-.P
-Note that starting lines with \fB\-\fR and \fB+\fR also should be prefixed
-with a semicolon, but this is much less common\.
-.
-.SH "Comma First"
-If there is a list of things separated by commas, and it wraps
-across multiple lines, put the comma at the start of the next
-line, directly below the token that starts the list\. Put the
-final token in the list on a line by itself\. For example:
-.
-.IP "" 4
-.
-.nf
-var magicWords = [ "abracadabra"
- , "gesundheit"
- , "ventrilo"
- ]
- , spells = { "fireball" : function () { setOnFire() }
- , "water" : function () { putOut() }
- }
- , a = 1
- , b = "abc"
- , etc
- , somethingElse
-.
-.fi
-.
-.IP "" 0
-.
-.SH "Whitespace"
-Put a single space in front of ( for anything other than a function call\.
-Also use a single space wherever it makes things more readable\.
-.
-.P
-Don\'t leave trailing whitespace at the end of lines\. Don\'t indent empty
-lines\. Don\'t use more spaces than are helpful\.
-.
-.SH "Functions"
-Use named functions\. They make stack traces a lot easier to read\.
-.
-.SH "Callbacks, Sync/async Style"
-Use the asynchronous/non\-blocking versions of things as much as possible\.
-It might make more sense for npm to use the synchronous fs APIs, but this
-way, the fs and http and child process stuff all uses the same callback\-passing
-methodology\.
-.
-.P
-The callback should always be the last argument in the list\. Its first
-argument is the Error or null\.
-.
-.P
-Be very careful never to ever ever throw anything\. It\'s worse than useless\.
-Just send the error message back as the first argument to the callback\.
-.
-.SH "Errors"
-Always create a new Error object with your message\. Don\'t just return a
-string message to the callback\. Stack traces are handy\.
-.
-.SH "Logging"
-Logging is done using the npmlog \fIhttps://github\.com/isaacs/npmlog\fR
-utility\.
-.
-.P
-Please clean up logs when they are no longer helpful\. In particular,
-logging the same object over and over again is not helpful\. Logs should
-report what\'s happening so that it\'s easier to track down where a fault
-occurs\.
-.
-.P
-Use appropriate log levels\. See \fBnpm help config\fR and search for
-"loglevel"\.
-.
-.SH "Case, naming, etc\."
-Use \fBlowerCamelCase\fR for multiword identifiers when they refer to objects,
-functions, methods, members, or anything not specified in this section\.
-.
-.P
-Use \fBUpperCamelCase\fR for class names (things that you\'d pass to "new")\.
-.
-.P
-Use \fBall\-lower\-hyphen\-css\-case\fR for multiword filenames and config keys\.
-.
-.P
-Use named functions\. They make stack traces easier to follow\.
-.
-.P
-Use \fBCAPS_SNAKE_CASE\fR for constants, things that should never change
-and are rarely used\.
-.
-.P
-Use a single uppercase letter for function names where the function
-would normally be anonymous, but needs to call itself recursively\. It
-makes it clear that it\'s a "throwaway" function\.
-.
-.SH "null, undefined, false, 0"
-Boolean variables and functions should always be either \fBtrue\fR or \fBfalse\fR\|\. Don\'t set it to 0 unless it\'s supposed to be a number\.
-.
-.P
-When something is intentionally missing or removed, set it to \fBnull\fR\|\.
-.
-.P
-Don\'t set things to \fBundefined\fR\|\. Reserve that value to mean "not yet
-set to anything\."
-.
-.P
-Boolean objects are verboten\.
-.
-.SH "SEE ALSO"
-.
-.IP "\(bu" 4
-npm help developers
-.
-.IP "\(bu" 4
-npm help faq
-.
-.IP "\(bu" 4
-npm help npm
-.
-.IP "" 0
-
diff --git a/deps/npm/man/man1/completion.1 b/deps/npm/man/man1/completion.1
deleted file mode 100644
index 2d698a1eb..000000000
--- a/deps/npm/man/man1/completion.1
+++ /dev/null
@@ -1,47 +0,0 @@
-.\" Generated with Ronnjs 0.3.8
-.\" http://github.com/kapouer/ronnjs/
-.
-.TH "NPM\-COMPLETION" "1" "June 2013" "" ""
-.
-.SH "NAME"
-\fBnpm-completion\fR \-\- Tab Completion for npm
-.
-.SH "SYNOPSIS"
-.
-.nf
-\|\. <(npm completion)
-.
-.fi
-.
-.SH "DESCRIPTION"
-Enables tab\-completion in all npm commands\.
-.
-.P
-The synopsis above
-loads the completions into your current shell\. Adding it to
-your ~/\.bashrc or ~/\.zshrc will make the completions available
-everywhere\.
-.
-.P
-You may of course also pipe the output of npm completion to a file
-such as \fB/usr/local/etc/bash_completion\.d/npm\fR if you have a system
-that will read that file for you\.
-.
-.P
-When \fBCOMP_CWORD\fR, \fBCOMP_LINE\fR, and \fBCOMP_POINT\fR are defined in the
-environment, \fBnpm completion\fR acts in "plumbing mode", and outputs
-completions based on the arguments\.
-.
-.SH "SEE ALSO"
-.
-.IP "\(bu" 4
-npm help developers
-.
-.IP "\(bu" 4
-npm help faq
-.
-.IP "\(bu" 4
-npm help npm
-.
-.IP "" 0
-
diff --git a/deps/npm/man/man1/config.1 b/deps/npm/man/man1/config.1
deleted file mode 100644
index 52c19d827..000000000
--- a/deps/npm/man/man1/config.1
+++ /dev/null
@@ -1,1523 +0,0 @@
-.\" Generated with Ronnjs 0.3.8
-.\" http://github.com/kapouer/ronnjs/
-.
-.TH "NPM\-CONFIG" "1" "June 2013" "" ""
-.
-.SH "NAME"
-\fBnpm-config\fR \-\- Manage the npm configuration file
-.
-.SH "SYNOPSIS"
-.
-.nf
-npm config set <key> <value> [\-\-global]
-npm config get <key>
-npm config delete <key>
-npm config list
-npm config edit
-npm get <key>
-npm set <key> <value> [\-\-global]
-.
-.fi
-.
-.SH "DESCRIPTION"
-npm gets its configuration values from 6 sources, in this priority:
-.
-.SS "Command Line Flags"
-Putting \fB\-\-foo bar\fR on the command line sets the \fBfoo\fR configuration parameter to \fB"bar"\fR\|\. A \fB\-\-\fR argument tells the cli
-parser to stop reading flags\. A \fB\-\-flag\fR parameter that is at the \fIend\fR of
-the command will be given the value of \fBtrue\fR\|\.
-.
-.SS "Environment Variables"
-Any environment variables that start with \fBnpm_config_\fR will be interpreted
-as a configuration parameter\. For example, putting \fBnpm_config_foo=bar\fR in
-your environment will set the \fBfoo\fR configuration parameter to \fBbar\fR\|\. Any
-environment configurations that are not given a value will be given the value
-of \fBtrue\fR\|\. Config values are case\-insensitive, so \fBNPM_CONFIG_FOO=bar\fR will
-work the same\.
-.
-.SS "Per\-user config file"
-\fB$HOME/\.npmrc\fR (or the \fBuserconfig\fR param, if set above)
-.
-.P
-This file is an ini\-file formatted list of \fBkey = value\fR parameters\.
-Environment variables can be replaced using \fB${VARIABLE_NAME}\fR\|\. For example:
-.
-.IP "" 4
-.
-.nf
-prefix = ${HOME}/\.npm\-packages
-.
-.fi
-.
-.IP "" 0
-.
-.SS "Global config file"
-\fB$PREFIX/etc/npmrc\fR (or the \fBglobalconfig\fR param, if set above):
-This file is an ini\-file formatted list of \fBkey = value\fR parameters\.
-Environment variables can be replaced as above\.
-.
-.SS "Built\-in config file"
-\fBpath/to/npm/itself/npmrc\fR
-.
-.P
-This is an unchangeable "builtin"
-configuration file that npm keeps consistent across updates\. Set
-fields in here using the \fB\|\./configure\fR script that comes with npm\.
-This is primarily for distribution maintainers to override default
-configs in a standard and consistent manner\.
-.
-.SS "Default Configs"
-A set of configuration parameters that are internal to npm, and are
-defaults if nothing else is specified\.
-.
-.SH "Sub\-commands"
-Config supports the following sub\-commands:
-.
-.SS "set"
-.
-.nf
-npm config set key value
-.
-.fi
-.
-.P
-Sets the config key to the value\.
-.
-.P
-If value is omitted, then it sets it to "true"\.
-.
-.SS "get"
-.
-.nf
-npm config get key
-.
-.fi
-.
-.P
-Echo the config value to stdout\.
-.
-.SS "list"
-.
-.nf
-npm config list
-.
-.fi
-.
-.P
-Show all the config settings\.
-.
-.SS "delete"
-.
-.nf
-npm config delete key
-.
-.fi
-.
-.P
-Deletes the key from all configuration files\.
-.
-.SS "edit"
-.
-.nf
-npm config edit
-.
-.fi
-.
-.P
-Opens the config file in an editor\. Use the \fB\-\-global\fR flag to edit the
-global config\.
-.
-.SH "Shorthands and Other CLI Niceties"
-The following shorthands are parsed on the command\-line:
-.
-.IP "\(bu" 4
-\fB\-v\fR: \fB\-\-version\fR
-.
-.IP "\(bu" 4
-\fB\-h\fR, \fB\-?\fR, \fB\-\-help\fR, \fB\-H\fR: \fB\-\-usage\fR
-.
-.IP "\(bu" 4
-\fB\-s\fR, \fB\-\-silent\fR: \fB\-\-loglevel silent\fR
-.
-.IP "\(bu" 4
-\fB\-q\fR, \fB\-\-quiet\fR: \fB\-\-loglevel warn\fR
-.
-.IP "\(bu" 4
-\fB\-d\fR: \fB\-\-loglevel info\fR
-.
-.IP "\(bu" 4
-\fB\-dd\fR, \fB\-\-verbose\fR: \fB\-\-loglevel verbose\fR
-.
-.IP "\(bu" 4
-\fB\-ddd\fR: \fB\-\-loglevel silly\fR
-.
-.IP "\(bu" 4
-\fB\-g\fR: \fB\-\-global\fR
-.
-.IP "\(bu" 4
-\fB\-l\fR: \fB\-\-long\fR
-.
-.IP "\(bu" 4
-\fB\-m\fR: \fB\-\-message\fR
-.
-.IP "\(bu" 4
-\fB\-p\fR, \fB\-\-porcelain\fR: \fB\-\-parseable\fR
-.
-.IP "\(bu" 4
-\fB\-reg\fR: \fB\-\-registry\fR
-.
-.IP "\(bu" 4
-\fB\-v\fR: \fB\-\-version\fR
-.
-.IP "\(bu" 4
-\fB\-f\fR: \fB\-\-force\fR
-.
-.IP "\(bu" 4
-\fB\-desc\fR: \fB\-\-description\fR
-.
-.IP "\(bu" 4
-\fB\-S\fR: \fB\-\-save\fR
-.
-.IP "\(bu" 4
-\fB\-D\fR: \fB\-\-save\-dev\fR
-.
-.IP "\(bu" 4
-\fB\-O\fR: \fB\-\-save\-optional\fR
-.
-.IP "\(bu" 4
-\fB\-B\fR: \fB\-\-save\-bundle\fR
-.
-.IP "\(bu" 4
-\fB\-y\fR: \fB\-\-yes\fR
-.
-.IP "\(bu" 4
-\fB\-n\fR: \fB\-\-yes false\fR
-.
-.IP "\(bu" 4
-\fBll\fR and \fBla\fR commands: \fBls \-\-long\fR
-.
-.IP "" 0
-.
-.P
-If the specified configuration param resolves unambiguously to a known
-configuration parameter, then it is expanded to that configuration
-parameter\. For example:
-.
-.IP "" 4
-.
-.nf
-npm ls \-\-par
-# same as:
-npm ls \-\-parseable
-.
-.fi
-.
-.IP "" 0
-.
-.P
-If multiple single\-character shorthands are strung together, and the
-resulting combination is unambiguously not some other configuration
-param, then it is expanded to its various component pieces\. For
-example:
-.
-.IP "" 4
-.
-.nf
-npm ls \-gpld
-# same as:
-npm ls \-\-global \-\-parseable \-\-long \-\-loglevel info
-.
-.fi
-.
-.IP "" 0
-.
-.SH "Per\-Package Config Settings"
-When running scripts (see \fBnpm help scripts\fR)
-the package\.json "config" keys are overwritten in the environment if
-there is a config param of \fB<name>[@<version>]:<key>\fR\|\. For example, if
-the package\.json has this:
-.
-.IP "" 4
-.
-.nf
-{ "name" : "foo"
-, "config" : { "port" : "8080" }
-, "scripts" : { "start" : "node server\.js" } }
-.
-.fi
-.
-.IP "" 0
-.
-.P
-and the server\.js is this:
-.
-.IP "" 4
-.
-.nf
-http\.createServer(\.\.\.)\.listen(process\.env\.npm_package_config_port)
-.
-.fi
-.
-.IP "" 0
-.
-.P
-then the user could change the behavior by doing:
-.
-.IP "" 4
-.
-.nf
-npm config set foo:port 80
-.
-.fi
-.
-.IP "" 0
-.
-.SH "Config Settings"
-.
-.SS "always\-auth"
-.
-.IP "\(bu" 4
-Default: false
-.
-.IP "\(bu" 4
-Type: Boolean
-.
-.IP "" 0
-.
-.P
-Force npm to always require authentication when accessing the registry,
-even for \fBGET\fR requests\.
-.
-.SS "bin\-links"
-.
-.IP "\(bu" 4
-Default: \fBtrue\fR
-.
-.IP "\(bu" 4
-Type: Boolean
-.
-.IP "" 0
-.
-.P
-Tells npm to create symlinks (or \fB\|\.cmd\fR shims on Windows) for package
-executables\.
-.
-.P
-Set to false to have it not do this\. This can be used to work around
-the fact that some file systems don\'t support symlinks, even on
-ostensibly Unix systems\.
-.
-.SS "browser"
-.
-.IP "\(bu" 4
-Default: OS X: \fB"open"\fR, Windows: \fB"start"\fR, Others: \fB"xdg\-open"\fR
-.
-.IP "\(bu" 4
-Type: String
-.
-.IP "" 0
-.
-.P
-The browser that is called by the \fBnpm docs\fR command to open websites\.
-.
-.SS "ca"
-.
-.IP "\(bu" 4
-Default: The npm CA certificate
-.
-.IP "\(bu" 4
-Type: String or null
-.
-.IP "" 0
-.
-.P
-The Certificate Authority signing certificate that is trusted for SSL
-connections to the registry\.
-.
-.P
-Set to \fBnull\fR to only allow "known" registrars, or to a specific CA cert
-to trust only that specific signing authority\.
-.
-.P
-See also the \fBstrict\-ssl\fR config\.
-.
-.SS "cache"
-.
-.IP "\(bu" 4
-Default: Windows: \fB%APPDATA%\\npm\-cache\fR, Posix: \fB~/\.npm\fR
-.
-.IP "\(bu" 4
-Type: path
-.
-.IP "" 0
-.
-.P
-The location of npm\'s cache directory\. See \fBnpm help cache\fR
-.
-.SS "cache\-lock\-stale"
-.
-.IP "\(bu" 4
-Default: 60000 (1 minute)
-.
-.IP "\(bu" 4
-Type: Number
-.
-.IP "" 0
-.
-.P
-The number of ms before cache folder lockfiles are considered stale\.
-.
-.SS "cache\-lock\-retries"
-.
-.IP "\(bu" 4
-Default: 10
-.
-.IP "\(bu" 4
-Type: Number
-.
-.IP "" 0
-.
-.P
-Number of times to retry to acquire a lock on cache folder lockfiles\.
-.
-.SS "cache\-lock\-wait"
-.
-.IP "\(bu" 4
-Default: 10000 (10 seconds)
-.
-.IP "\(bu" 4
-Type: Number
-.
-.IP "" 0
-.
-.P
-Number of ms to wait for cache lock files to expire\.
-.
-.SS "cache\-max"
-.
-.IP "\(bu" 4
-Default: Infinity
-.
-.IP "\(bu" 4
-Type: Number
-.
-.IP "" 0
-.
-.P
-The maximum time (in seconds) to keep items in the registry cache before
-re\-checking against the registry\.
-.
-.P
-Note that no purging is done unless the \fBnpm cache clean\fR command is
-explicitly used, and that only GET requests use the cache\.
-.
-.SS "cache\-min"
-.
-.IP "\(bu" 4
-Default: 10
-.
-.IP "\(bu" 4
-Type: Number
-.
-.IP "" 0
-.
-.P
-The minimum time (in seconds) to keep items in the registry cache before
-re\-checking against the registry\.
-.
-.P
-Note that no purging is done unless the \fBnpm cache clean\fR command is
-explicitly used, and that only GET requests use the cache\.
-.
-.SS "color"
-.
-.IP "\(bu" 4
-Default: true on Posix, false on Windows
-.
-.IP "\(bu" 4
-Type: Boolean or \fB"always"\fR
-.
-.IP "" 0
-.
-.P
-If false, never shows colors\. If \fB"always"\fR then always shows colors\.
-If true, then only prints color codes for tty file descriptors\.
-.
-.SS "coverage"
-.
-.IP "\(bu" 4
-Default: false
-.
-.IP "\(bu" 4
-Type: Boolean
-.
-.IP "" 0
-.
-.P
-A flag to tell test\-harness to run with their coverage options enabled,
-if they respond to the \fBnpm_config_coverage\fR environment variable\.
-.
-.SS "depth"
-.
-.IP "\(bu" 4
-Default: Infinity
-.
-.IP "\(bu" 4
-Type: Number
-.
-.IP "" 0
-.
-.P
-The depth to go when recursing directories for \fBnpm ls\fR and \fBnpm cache ls\fR\|\.
-.
-.SS "description"
-.
-.IP "\(bu" 4
-Default: true
-.
-.IP "\(bu" 4
-Type: Boolean
-.
-.IP "" 0
-.
-.P
-Show the description in \fBnpm search\fR
-.
-.SS "dev"
-.
-.IP "\(bu" 4
-Default: false
-.
-.IP "\(bu" 4
-Type: Boolean
-.
-.IP "" 0
-.
-.P
-Install \fBdev\-dependencies\fR along with packages\.
-.
-.P
-Note that \fBdev\-dependencies\fR are also installed if the \fBnpat\fR flag is
-set\.
-.
-.SS "editor"
-.
-.IP "\(bu" 4
-Default: \fBEDITOR\fR environment variable if set, or \fB"vi"\fR on Posix,
-or \fB"notepad"\fR on Windows\.
-.
-.IP "\(bu" 4
-Type: path
-.
-.IP "" 0
-.
-.P
-The command to run for \fBnpm edit\fR or \fBnpm config edit\fR\|\.
-.
-.SS "engine\-strict"
-.
-.IP "\(bu" 4
-Default: false
-.
-.IP "\(bu" 4
-Type: Boolean
-.
-.IP "" 0
-.
-.P
-If set to true, then npm will stubbornly refuse to install (or even
-consider installing) any package that claims to not be compatible with
-the current Node\.js version\.
-.
-.SS "force"
-.
-.IP "\(bu" 4
-Default: false
-.
-.IP "\(bu" 4
-Type: Boolean
-.
-.IP "" 0
-.
-.P
-Makes various commands more forceful\.
-.
-.IP "\(bu" 4
-lifecycle script failure does not block progress\.
-.
-.IP "\(bu" 4
-publishing clobbers previously published versions\.
-.
-.IP "\(bu" 4
-skips cache when requesting from the registry\.
-.
-.IP "\(bu" 4
-prevents checks against clobbering non\-npm files\.
-.
-.IP "" 0
-.
-.SS "fetch\-retries"
-.
-.IP "\(bu" 4
-Default: 2
-.
-.IP "\(bu" 4
-Type: Number
-.
-.IP "" 0
-.
-.P
-The "retries" config for the \fBretry\fR module to use when fetching
-packages from the registry\.
-.
-.SS "fetch\-retry\-factor"
-.
-.IP "\(bu" 4
-Default: 10
-.
-.IP "\(bu" 4
-Type: Number
-.
-.IP "" 0
-.
-.P
-The "factor" config for the \fBretry\fR module to use when fetching
-packages\.
-.
-.SS "fetch\-retry\-mintimeout"
-.
-.IP "\(bu" 4
-Default: 10000 (10 seconds)
-.
-.IP "\(bu" 4
-Type: Number
-.
-.IP "" 0
-.
-.P
-The "minTimeout" config for the \fBretry\fR module to use when fetching
-packages\.
-.
-.SS "fetch\-retry\-maxtimeout"
-.
-.IP "\(bu" 4
-Default: 60000 (1 minute)
-.
-.IP "\(bu" 4
-Type: Number
-.
-.IP "" 0
-.
-.P
-The "maxTimeout" config for the \fBretry\fR module to use when fetching
-packages\.
-.
-.SS "git"
-.
-.IP "\(bu" 4
-Default: \fB"git"\fR
-.
-.IP "\(bu" 4
-Type: String
-.
-.IP "" 0
-.
-.P
-The command to use for git commands\. If git is installed on the
-computer, but is not in the \fBPATH\fR, then set this to the full path to
-the git binary\.
-.
-.SS "global"
-.
-.IP "\(bu" 4
-Default: false
-.
-.IP "\(bu" 4
-Type: Boolean
-.
-.IP "" 0
-.
-.P
-Operates in "global" mode, so that packages are installed into the \fBprefix\fR folder instead of the current working directory\. See \fBnpm help folders\fR for more on the differences in behavior\.
-.
-.IP "\(bu" 4
-packages are installed into the \fB{prefix}/lib/node_modules\fR folder, instead of the
-current working directory\.
-.
-.IP "\(bu" 4
-bin files are linked to \fB{prefix}/bin\fR
-.
-.IP "\(bu" 4
-man pages are linked to \fB{prefix}/share/man\fR
-.
-.IP "" 0
-.
-.SS "globalconfig"
-.
-.IP "\(bu" 4
-Default: {prefix}/etc/npmrc
-.
-.IP "\(bu" 4
-Type: path
-.
-.IP "" 0
-.
-.P
-The config file to read for global config options\.
-.
-.SS "globalignorefile"
-.
-.IP "\(bu" 4
-Default: {prefix}/etc/npmignore
-.
-.IP "\(bu" 4
-Type: path
-.
-.IP "" 0
-.
-.P
-The config file to read for global ignore patterns to apply to all users
-and all projects\.
-.
-.P
-If not found, but there is a "gitignore" file in the
-same directory, then that will be used instead\.
-.
-.SS "group"
-.
-.IP "\(bu" 4
-Default: GID of the current process
-.
-.IP "\(bu" 4
-Type: String or Number
-.
-.IP "" 0
-.
-.P
-The group to use when running package scripts in global mode as the root
-user\.
-.
-.SS "https\-proxy"
-.
-.IP "\(bu" 4
-Default: the \fBHTTPS_PROXY\fR or \fBhttps_proxy\fR or \fBHTTP_PROXY\fR or \fBhttp_proxy\fR environment variables\.
-.
-.IP "\(bu" 4
-Type: url
-.
-.IP "" 0
-.
-.P
-A proxy to use for outgoing https requests\.
-.
-.SS "user\-agent"
-.
-.IP "\(bu" 4
-Default: node/{process\.version} {process\.platform} {process\.arch}
-.
-.IP "\(bu" 4
-Type: String
-.
-.IP "" 0
-.
-.P
-Sets a User\-Agent to the request header
-.
-.SS "ignore"
-.
-.IP "\(bu" 4
-Default: ""
-.
-.IP "\(bu" 4
-Type: string
-.
-.IP "" 0
-.
-.P
-A white\-space separated list of glob patterns of files to always exclude
-from packages when building tarballs\.
-.
-.SS "init\-module"
-.
-.IP "\(bu" 4
-Default: ~/\.npm\-init\.js
-.
-.IP "\(bu" 4
-Type: path
-.
-.IP "" 0
-.
-.P
-A module that will be loaded by the \fBnpm init\fR command\. See the
-documentation for the init\-package\-json \fIhttps://github\.com/isaacs/init\-package\-json\fR module
-for more information, or npm help init\.
-.
-.SS "init\.version"
-.
-.IP "\(bu" 4
-Default: "0\.0\.0"
-.
-.IP "\(bu" 4
-Type: semver
-.
-.IP "" 0
-.
-.P
-The value \fBnpm init\fR should use by default for the package version\.
-.
-.SS "init\.author\.name"
-.
-.IP "\(bu" 4
-Default: ""
-.
-.IP "\(bu" 4
-Type: String
-.
-.IP "" 0
-.
-.P
-The value \fBnpm init\fR should use by default for the package author\'s name\.
-.
-.SS "init\.author\.email"
-.
-.IP "\(bu" 4
-Default: ""
-.
-.IP "\(bu" 4
-Type: String
-.
-.IP "" 0
-.
-.P
-The value \fBnpm init\fR should use by default for the package author\'s email\.
-.
-.SS "init\.author\.url"
-.
-.IP "\(bu" 4
-Default: ""
-.
-.IP "\(bu" 4
-Type: String
-.
-.IP "" 0
-.
-.P
-The value \fBnpm init\fR should use by default for the package author\'s homepage\.
-.
-.SS "json"
-.
-.IP "\(bu" 4
-Default: false
-.
-.IP "\(bu" 4
-Type: Boolean
-.
-.IP "" 0
-.
-.P
-Whether or not to output JSON data, rather than the normal output\.
-.
-.P
-This feature is currently experimental, and the output data structures
-for many commands is either not implemented in JSON yet, or subject to
-change\. Only the output from \fBnpm ls \-\-json\fR is currently valid\.
-.
-.SS "link"
-.
-.IP "\(bu" 4
-Default: false
-.
-.IP "\(bu" 4
-Type: Boolean
-.
-.IP "" 0
-.
-.P
-If true, then local installs will link if there is a suitable globally
-installed package\.
-.
-.P
-Note that this means that local installs can cause things to be
-installed into the global space at the same time\. The link is only done
-if one of the two conditions are met:
-.
-.IP "\(bu" 4
-The package is not already installed globally, or
-.
-.IP "\(bu" 4
-the globally installed version is identical to the version that is
-being installed locally\.
-.
-.IP "" 0
-.
-.SS "loglevel"
-.
-.IP "\(bu" 4
-Default: "http"
-.
-.IP "\(bu" 4
-Type: String
-.
-.IP "\(bu" 4
-Values: "silent", "win", "error", "warn", "http", "info", "verbose", "silly"
-.
-.IP "" 0
-.
-.P
-What level of logs to report\. On failure, \fIall\fR logs are written to \fBnpm\-debug\.log\fR in the current working directory\.
-.
-.P
-Any logs of a higher level than the setting are shown\.
-The default is "http", which shows http, warn, and error output\.
-.
-.SS "logstream"
-.
-.IP "\(bu" 4
-Default: process\.stderr
-.
-.IP "\(bu" 4
-Type: Stream
-.
-.IP "" 0
-.
-.P
-This is the stream that is passed to the npmlog \fIhttps://github\.com/isaacs/npmlog\fR module at run time\.
-.
-.P
-It cannot be set from the command line, but if you are using npm
-programmatically, you may wish to send logs to somewhere other than
-stderr\.
-.
-.P
-If the \fBcolor\fR config is set to true, then this stream will receive
-colored output if it is a TTY\.
-.
-.SS "long"
-.
-.IP "\(bu" 4
-Default: false
-.
-.IP "\(bu" 4
-Type: Boolean
-.
-.IP "" 0
-.
-.P
-Show extended information in \fBnpm ls\fR
-.
-.SS "message"
-.
-.IP "\(bu" 4
-Default: "%s"
-.
-.IP "\(bu" 4
-Type: String
-.
-.IP "" 0
-.
-.P
-Commit message which is used by \fBnpm version\fR when creating version commit\.
-.
-.P
-Any "%s" in the message will be replaced with the version number\.
-.
-.SS "node\-version"
-.
-.IP "\(bu" 4
-Default: process\.version
-.
-.IP "\(bu" 4
-Type: semver or false
-.
-.IP "" 0
-.
-.P
-The node version to use when checking package\'s "engines" hash\.
-.
-.SS "npat"
-.
-.IP "\(bu" 4
-Default: false
-.
-.IP "\(bu" 4
-Type: Boolean
-.
-.IP "" 0
-.
-.P
-Run tests on installation and report results to the \fBnpaturl\fR\|\.
-.
-.SS "npaturl"
-.
-.IP "\(bu" 4
-Default: Not yet implemented
-.
-.IP "\(bu" 4
-Type: url
-.
-.IP "" 0
-.
-.P
-The url to report npat test results\.
-.
-.SS "onload\-script"
-.
-.IP "\(bu" 4
-Default: false
-.
-.IP "\(bu" 4
-Type: path
-.
-.IP "" 0
-.
-.P
-A node module to \fBrequire()\fR when npm loads\. Useful for programmatic
-usage\.
-.
-.SS "optional"
-.
-.IP "\(bu" 4
-Default: true
-.
-.IP "\(bu" 4
-Type: Boolean
-.
-.IP "" 0
-.
-.P
-Attempt to install packages in the \fBoptionalDependencies\fR hash\. Note
-that if these packages fail to install, the overall installation
-process is not aborted\.
-.
-.SS "parseable"
-.
-.IP "\(bu" 4
-Default: false
-.
-.IP "\(bu" 4
-Type: Boolean
-.
-.IP "" 0
-.
-.P
-Output parseable results from commands that write to
-standard output\.
-.
-.SS "prefix"
-.
-.IP "\(bu" 4
-Default: see npm help folders
-.
-.IP "\(bu" 4
-Type: path
-.
-.IP "" 0
-.
-.P
-The location to install global items\. If set on the command line, then
-it forces non\-global commands to run in the specified folder\.
-.
-.SS "production"
-.
-.IP "\(bu" 4
-Default: false
-.
-.IP "\(bu" 4
-Type: Boolean
-.
-.IP "" 0
-.
-.P
-Set to true to run in "production" mode\.
-.
-.IP "1" 4
-devDependencies are not installed at the topmost level when running
-local \fBnpm install\fR without any arguments\.
-.
-.IP "2" 4
-Set the NODE_ENV="production" for lifecycle scripts\.
-.
-.IP "" 0
-.
-.SS "proprietary\-attribs"
-.
-.IP "\(bu" 4
-Default: true
-.
-.IP "\(bu" 4
-Type: Boolean
-.
-.IP "" 0
-.
-.P
-Whether or not to include proprietary extended attributes in the
-tarballs created by npm\.
-.
-.P
-Unless you are expecting to unpack package tarballs with something other
-than npm \-\- particularly a very outdated tar implementation \-\- leave
-this as true\.
-.
-.SS "proxy"
-.
-.IP "\(bu" 4
-Default: \fBHTTP_PROXY\fR or \fBhttp_proxy\fR environment variable, or null
-.
-.IP "\(bu" 4
-Type: url
-.
-.IP "" 0
-.
-.P
-A proxy to use for outgoing http requests\.
-.
-.SS "rebuild\-bundle"
-.
-.IP "\(bu" 4
-Default: true
-.
-.IP "\(bu" 4
-Type: Boolean
-.
-.IP "" 0
-.
-.P
-Rebuild bundled dependencies after installation\.
-.
-.SS "registry"
-.
-.IP "\(bu" 4
-Default: https://registry\.npmjs\.org/
-.
-.IP "\(bu" 4
-Type: url
-.
-.IP "" 0
-.
-.P
-The base URL of the npm package registry\.
-.
-.SS "rollback"
-.
-.IP "\(bu" 4
-Default: true
-.
-.IP "\(bu" 4
-Type: Boolean
-.
-.IP "" 0
-.
-.P
-Remove failed installs\.
-.
-.SS "save"
-.
-.IP "\(bu" 4
-Default: false
-.
-.IP "\(bu" 4
-Type: Boolean
-.
-.IP "" 0
-.
-.P
-Save installed packages to a package\.json file as dependencies\.
-.
-.P
-When used with the \fBnpm rm\fR command, it removes it from the dependencies
-hash\.
-.
-.P
-Only works if there is already a package\.json file present\.
-.
-.SS "save\-bundle"
-.
-.IP "\(bu" 4
-Default: false
-.
-.IP "\(bu" 4
-Type: Boolean
-.
-.IP "" 0
-.
-.P
-If a package would be saved at install time by the use of \fB\-\-save\fR, \fB\-\-save\-dev\fR, or \fB\-\-save\-optional\fR, then also put it in the \fBbundleDependencies\fR list\.
-.
-.P
-When used with the \fBnpm rm\fR command, it removes it from the
-bundledDependencies list\.
-.
-.SS "save\-dev"
-.
-.IP "\(bu" 4
-Default: false
-.
-.IP "\(bu" 4
-Type: Boolean
-.
-.IP "" 0
-.
-.P
-Save installed packages to a package\.json file as devDependencies\.
-.
-.P
-When used with the \fBnpm rm\fR command, it removes it from the devDependencies
-hash\.
-.
-.P
-Only works if there is already a package\.json file present\.
-.
-.SS "save\-optional"
-.
-.IP "\(bu" 4
-Default: false
-.
-.IP "\(bu" 4
-Type: Boolean
-.
-.IP "" 0
-.
-.P
-Save installed packages to a package\.json file as optionalDependencies\.
-.
-.P
-When used with the \fBnpm rm\fR command, it removes it from the devDependencies
-hash\.
-.
-.P
-Only works if there is already a package\.json file present\.
-.
-.SS "searchopts"
-.
-.IP "\(bu" 4
-Default: ""
-.
-.IP "\(bu" 4
-Type: String
-.
-.IP "" 0
-.
-.P
-Space\-separated options that are always passed to search\.
-.
-.SS "searchexclude"
-.
-.IP "\(bu" 4
-Default: ""
-.
-.IP "\(bu" 4
-Type: String
-.
-.IP "" 0
-.
-.P
-Space\-separated options that limit the results from search\.
-.
-.SS "searchsort"
-.
-.IP "\(bu" 4
-Default: "name"
-.
-.IP "\(bu" 4
-Type: String
-.
-.IP "\(bu" 4
-Values: "name", "\-name", "date", "\-date", "description",
-"\-description", "keywords", "\-keywords"
-.
-.IP "" 0
-.
-.P
-Indication of which field to sort search results by\. Prefix with a \fB\-\fR
-character to indicate reverse sort\.
-.
-.SS "shell"
-.
-.IP "\(bu" 4
-Default: SHELL environment variable, or "bash" on Posix, or "cmd" on
-Windows
-.
-.IP "\(bu" 4
-Type: path
-.
-.IP "" 0
-.
-.P
-The shell to run for the \fBnpm explore\fR command\.
-.
-.SS "shrinkwrap"
-.
-.IP "\(bu" 4
-Default: true
-.
-.IP "\(bu" 4
-Type: Boolean
-.
-.IP "" 0
-.
-.P
-If set to false, then ignore \fBnpm\-shrinkwrap\.json\fR files when
-installing\.
-.
-.SS "sign\-git\-tag"
-.
-.IP "\(bu" 4
-Default: false
-.
-.IP "\(bu" 4
-Type: Boolean
-.
-.IP "" 0
-.
-.P
-If set to true, then the \fBnpm version\fR command will tag the version
-using \fB\-s\fR to add a signature\.
-.
-.P
-Note that git requires you to have set up GPG keys in your git configs
-for this to work properly\.
-.
-.SS "strict\-ssl"
-.
-.IP "\(bu" 4
-Default: true
-.
-.IP "\(bu" 4
-Type: Boolean
-.
-.IP "" 0
-.
-.P
-Whether or not to do SSL key validation when making requests to the
-registry via https\.
-.
-.P
-See also the \fBca\fR config\.
-.
-.SS "tag"
-.
-.IP "\(bu" 4
-Default: latest
-.
-.IP "\(bu" 4
-Type: String
-.
-.IP "" 0
-.
-.P
-If you ask npm to install a package and don\'t tell it a specific version, then
-it will install the specified tag\.
-.
-.P
-Also the tag that is added to the package@version specified by the \fBnpm
-tag\fR command, if no explicit tag is given\.
-.
-.SS "tmp"
-.
-.IP "\(bu" 4
-Default: TMPDIR environment variable, or "/tmp"
-.
-.IP "\(bu" 4
-Type: path
-.
-.IP "" 0
-.
-.P
-Where to store temporary files and folders\. All temp files are deleted
-on success, but left behind on failure for forensic purposes\.
-.
-.SS "unicode"
-.
-.IP "\(bu" 4
-Default: true
-.
-.IP "\(bu" 4
-Type: Boolean
-.
-.IP "" 0
-.
-.P
-When set to true, npm uses unicode characters in the tree output\. When
-false, it uses ascii characters to draw trees\.
-.
-.SS "unsafe\-perm"
-.
-.IP "\(bu" 4
-Default: false if running as root, true otherwise
-.
-.IP "\(bu" 4
-Type: Boolean
-.
-.IP "" 0
-.
-.P
-Set to true to suppress the UID/GID switching when running package
-scripts\. If set explicitly to false, then installing as a non\-root user
-will fail\.
-.
-.SS "usage"
-.
-.IP "\(bu" 4
-Default: false
-.
-.IP "\(bu" 4
-Type: Boolean
-.
-.IP "" 0
-.
-.P
-Set to show short usage output (like the \-H output)
-instead of complete help when doing \fBnpm help help\fR\|\.
-.
-.SS "user"
-.
-.IP "\(bu" 4
-Default: "nobody"
-.
-.IP "\(bu" 4
-Type: String or Number
-.
-.IP "" 0
-.
-.P
-The UID to set to when running package scripts as root\.
-.
-.SS "username"
-.
-.IP "\(bu" 4
-Default: null
-.
-.IP "\(bu" 4
-Type: String
-.
-.IP "" 0
-.
-.P
-The username on the npm registry\. Set with \fBnpm adduser\fR
-.
-.SS "userconfig"
-.
-.IP "\(bu" 4
-Default: ~/\.npmrc
-.
-.IP "\(bu" 4
-Type: path
-.
-.IP "" 0
-.
-.P
-The location of user\-level configuration settings\.
-.
-.SS "userignorefile"
-.
-.IP "\(bu" 4
-Default: ~/\.npmignore
-.
-.IP "\(bu" 4
-Type: path
-.
-.IP "" 0
-.
-.P
-The location of a user\-level ignore file to apply to all packages\.
-.
-.P
-If not found, but there is a \.gitignore file in the same directory, then
-that will be used instead\.
-.
-.SS "umask"
-.
-.IP "\(bu" 4
-Default: 022
-.
-.IP "\(bu" 4
-Type: Octal numeric string
-.
-.IP "" 0
-.
-.P
-The "umask" value to use when setting the file creation mode on files
-and folders\.
-.
-.P
-Folders and executables are given a mode which is \fB0777\fR masked against
-this value\. Other files are given a mode which is \fB0666\fR masked against
-this value\. Thus, the defaults are \fB0755\fR and \fB0644\fR respectively\.
-.
-.SS "version"
-.
-.IP "\(bu" 4
-Default: false
-.
-.IP "\(bu" 4
-Type: boolean
-.
-.IP "" 0
-.
-.P
-If true, output the npm version and exit successfully\.
-.
-.P
-Only relevant when specified explicitly on the command line\.
-.
-.SS "versions"
-.
-.IP "\(bu" 4
-Default: false
-.
-.IP "\(bu" 4
-Type: boolean
-.
-.IP "" 0
-.
-.P
-If true, output the npm version as well as node\'s \fBprocess\.versions\fR
-hash, and exit successfully\.
-.
-.P
-Only relevant when specified explicitly on the command line\.
-.
-.SS "viewer"
-.
-.IP "\(bu" 4
-Default: "man" on Posix, "browser" on Windows
-.
-.IP "\(bu" 4
-Type: path
-.
-.IP "" 0
-.
-.P
-The program to use to view help content\.
-.
-.P
-Set to \fB"browser"\fR to view html help content in the default web browser\.
-.
-.SS "yes"
-.
-.IP "\(bu" 4
-Default: null
-.
-.IP "\(bu" 4
-Type: Boolean or null
-.
-.IP "" 0
-.
-.P
-If set to \fBnull\fR, then prompt the user for responses in some
-circumstances\.
-.
-.P
-If set to \fBtrue\fR, then answer "yes" to any prompt\. If set to \fBfalse\fR
-then answer "no" to any prompt\.
-.
-.SH "SEE ALSO"
-.
-.IP "\(bu" 4
-npm help folders
-.
-.IP "\(bu" 4
-npm help npm
-.
-.IP "" 0
-
diff --git a/deps/npm/man/man1/dedupe.1 b/deps/npm/man/man1/dedupe.1
deleted file mode 100644
index b3ac26b80..000000000
--- a/deps/npm/man/man1/dedupe.1
+++ /dev/null
@@ -1,90 +0,0 @@
-.\" Generated with Ronnjs 0.3.8
-.\" http://github.com/kapouer/ronnjs/
-.
-.TH "NPM\-DEDUPE" "1" "June 2013" "" ""
-.
-.SH "NAME"
-\fBnpm-dedupe\fR \-\- Reduce duplication
-.
-.SH "SYNOPSIS"
-.
-.nf
-npm dedupe [package names\.\.\.]
-.
-.fi
-.
-.SH "DESCRIPTION"
-Searches the local package tree and attempts to simplify the overall
-structure by moving dependencies further up the tree, where they can
-be more effectively shared by multiple dependent packages\.
-.
-.P
-For example, consider this dependency graph:
-.
-.IP "" 4
-.
-.nf
-a
-+\-\- b <\-\- depends on c@1\.0\.x
-| `\-\- c@1\.0\.3
-`\-\- d <\-\- depends on c@~1\.0\.9
- `\-\- c@1\.0\.10
-.
-.fi
-.
-.IP "" 0
-.
-.P
-In this case, \fBnpm help dedupe\fR will transform the tree to:
-.
-.IP "" 4
-.
-.nf
-a
-+\-\- b
-+\-\- d
-`\-\- c@1\.0\.10
-.
-.fi
-.
-.IP "" 0
-.
-.P
-Because of the hierarchical nature of node\'s module lookup, b and d
-will both get their dependency met by the single c package at the root
-level of the tree\.
-.
-.P
-If a suitable version exists at the target location in the tree
-already, then it will be left untouched, but the other duplicates will
-be deleted\.
-.
-.P
-If no suitable version can be found, then a warning is printed, and
-nothing is done\.
-.
-.P
-If any arguments are supplied, then they are filters, and only the
-named packages will be touched\.
-.
-.P
-Note that this operation transforms the dependency tree, and may
-result in packages getting updated versions, perhaps from the npm
-registry\.
-.
-.P
-This feature is experimental, and may change in future versions\.
-.
-.SH "SEE ALSO"
-.
-.IP "\(bu" 4
-npm help ls
-.
-.IP "\(bu" 4
-npm help update
-.
-.IP "\(bu" 4
-npm help install
-.
-.IP "" 0
-
diff --git a/deps/npm/man/man1/deprecate.1 b/deps/npm/man/man1/deprecate.1
deleted file mode 100644
index e41c1ca3e..000000000
--- a/deps/npm/man/man1/deprecate.1
+++ /dev/null
@@ -1,48 +0,0 @@
-.\" Generated with Ronnjs 0.3.8
-.\" http://github.com/kapouer/ronnjs/
-.
-.TH "NPM\-DEPRECATE" "1" "June 2013" "" ""
-.
-.SH "NAME"
-\fBnpm-deprecate\fR \-\- Deprecate a version of a package
-.
-.SH "SYNOPSIS"
-.
-.nf
-npm deprecate <name>[@<version>] <message>
-.
-.fi
-.
-.SH "DESCRIPTION"
-This command will update the npm registry entry for a package, providing
-a deprecation warning to all who attempt to install it\.
-.
-.P
-It works on version ranges as well as specific versions, so you can do
-something like this:
-.
-.IP "" 4
-.
-.nf
-npm deprecate my\-thing@"< 0\.2\.3" "critical bug fixed in v0\.2\.3"
-.
-.fi
-.
-.IP "" 0
-.
-.P
-Note that you must be the package owner to deprecate something\. See the \fBowner\fR and \fBadduser\fR help topics\.
-.
-.P
-To un\-deprecate a package, specify an empty string (\fB""\fR) for the \fBmessage\fR argument\.
-.
-.SH "SEE ALSO"
-.
-.IP "\(bu" 4
-npm help publish
-.
-.IP "\(bu" 4
-npm help registry
-.
-.IP "" 0
-
diff --git a/deps/npm/man/man1/developers.1 b/deps/npm/man/man1/developers.1
deleted file mode 100644
index 9e007ed9e..000000000
--- a/deps/npm/man/man1/developers.1
+++ /dev/null
@@ -1,335 +0,0 @@
-.\" Generated with Ronnjs 0.3.8
-.\" http://github.com/kapouer/ronnjs/
-.
-.TH "NPM\-DEVELOPERS" "1" "June 2013" "" ""
-.
-.SH "NAME"
-\fBnpm-developers\fR \-\- Developer Guide
-.
-.SH "DESCRIPTION"
-So, you\'ve decided to use npm to develop (and maybe publish/deploy)
-your project\.
-.
-.P
-Fantastic!
-.
-.P
-There are a few things that you need to do above the simple steps
-that your users will do to install your program\.
-.
-.SH "About These Documents"
-These are man pages\. If you install npm, you should be able to
-then do \fBman npm\-thing\fR to get the documentation on a particular
-topic, or \fBnpm help thing\fR to see the same information\.
-.
-.SH "What is a "
-A package is:
-.
-.IP "\(bu" 4
-a) a folder containing a program described by a package\.json file
-.
-.IP "\(bu" 4
-b) a gzipped tarball containing (a)
-.
-.IP "\(bu" 4
-c) a url that resolves to (b)
-.
-.IP "\(bu" 4
-d) a \fB<name>@<version>\fR that is published on the registry with (c)
-.
-.IP "\(bu" 4
-e) a \fB<name>@<tag>\fR that points to (d)
-.
-.IP "\(bu" 4
-f) a \fB<name>\fR that has a "latest" tag satisfying (e)
-.
-.IP "\(bu" 4
-g) a \fBgit\fR url that, when cloned, results in (a)\.
-.
-.IP "" 0
-.
-.P
-Even if you never publish your package, you can still get a lot of
-benefits of using npm if you just want to write a node program (a), and
-perhaps if you also want to be able to easily install it elsewhere
-after packing it up into a tarball (b)\.
-.
-.P
-Git urls can be of the form:
-.
-.IP "" 4
-.
-.nf
-git://github\.com/user/project\.git#commit\-ish
-git+ssh://user@hostname:project\.git#commit\-ish
-git+http://user@hostname/project/blah\.git#commit\-ish
-git+https://user@hostname/project/blah\.git#commit\-ish
-.
-.fi
-.
-.IP "" 0
-.
-.P
-The \fBcommit\-ish\fR can be any tag, sha, or branch which can be supplied as
-an argument to \fBgit checkout\fR\|\. The default is \fBmaster\fR\|\.
-.
-.SH "The package\.json File"
-You need to have a \fBpackage\.json\fR file in the root of your project to do
-much of anything with npm\. That is basically the whole interface\.
-.
-.P
-See \fBnpm help json\fR for details about what goes in that file\. At the very
-least, you need:
-.
-.IP "\(bu" 4
-name:
-This should be a string that identifies your project\. Please do not
-use the name to specify that it runs on node, or is in JavaScript\.
-You can use the "engines" field to explicitly state the versions of
-node (or whatever else) that your program requires, and it\'s pretty
-well assumed that it\'s javascript\.
-.
-.IP
-It does not necessarily need to match your github repository name\.
-.
-.IP
-So, \fBnode\-foo\fR and \fBbar\-js\fR are bad names\. \fBfoo\fR or \fBbar\fR are better\.
-.
-.IP "\(bu" 4
-version:
-A semver\-compatible version\.
-.
-.IP "\(bu" 4
-engines:
-Specify the versions of node (or whatever else) that your program
-runs on\. The node API changes a lot, and there may be bugs or new
-functionality that you depend on\. Be explicit\.
-.
-.IP "\(bu" 4
-author:
-Take some credit\.
-.
-.IP "\(bu" 4
-scripts:
-If you have a special compilation or installation script, then you
-should put it in the \fBscripts\fR hash\. You should definitely have at
-least a basic smoke\-test command as the "scripts\.test" field\.
-See npm help scripts\.
-.
-.IP "\(bu" 4
-main:
-If you have a single module that serves as the entry point to your
-program (like what the "foo" package gives you at require("foo")),
-then you need to specify that in the "main" field\.
-.
-.IP "\(bu" 4
-directories:
-This is a hash of folders\. The best ones to include are "lib" and
-"doc", but if you specify a folder full of man pages in "man", then
-they\'ll get installed just like these ones\.
-.
-.IP "" 0
-.
-.P
-You can use \fBnpm init\fR in the root of your package in order to get you
-started with a pretty basic package\.json file\. See \fBnpm help init\fR for
-more info\.
-.
-.SH "Keeping files "
-Use a \fB\|\.npmignore\fR file to keep stuff out of your package\. If there\'s
-no \fB\|\.npmignore\fR file, but there \fIis\fR a \fB\|\.gitignore\fR file, then npm will
-ignore the stuff matched by the \fB\|\.gitignore\fR file\. If you \fIwant\fR to
-include something that is excluded by your \fB\|\.gitignore\fR file, you can
-create an empty \fB\|\.npmignore\fR file to override it\.
-.
-.P
-By default, the following paths and files are ignored, so there\'s no
-need to add them to \fB\|\.npmignore\fR explicitly:
-.
-.IP "\(bu" 4
-\fB\|\.*\.swp\fR
-.
-.IP "\(bu" 4
-\fB\|\._*\fR
-.
-.IP "\(bu" 4
-\fB\|\.DS_Store\fR
-.
-.IP "\(bu" 4
-\fB\|\.git\fR
-.
-.IP "\(bu" 4
-\fB\|\.hg\fR
-.
-.IP "\(bu" 4
-\fB\|\.lock\-wscript\fR
-.
-.IP "\(bu" 4
-\fB\|\.svn\fR
-.
-.IP "\(bu" 4
-\fB\|\.wafpickle\-*\fR
-.
-.IP "\(bu" 4
-\fBCVS\fR
-.
-.IP "\(bu" 4
-\fBnpm\-debug\.log\fR
-.
-.IP "" 0
-.
-.P
-Additionally, everything in \fBnode_modules\fR is ignored, except for
-bundled dependencies\. npm automatically handles this for you, so don\'t
-bother adding \fBnode_modules\fR to \fB\|\.npmignore\fR\|\.
-.
-.P
-The following paths and files are never ignored, so adding them to \fB\|\.npmignore\fR is pointless:
-.
-.IP "\(bu" 4
-\fBpackage\.json\fR
-.
-.IP "\(bu" 4
-\fBREADME\.*\fR
-.
-.IP "" 0
-.
-.SH "Link Packages"
-\fBnpm link\fR is designed to install a development package and see the
-changes in real time without having to keep re\-installing it\. (You do
-need to either re\-link or \fBnpm rebuild \-g\fR to update compiled packages,
-of course\.)
-.
-.P
-More info at \fBnpm help link\fR\|\.
-.
-.SH "Before Publishing: Make Sure Your Package Installs and Works"
-\fBThis is important\.\fR
-.
-.P
-If you can not install it locally, you\'ll have
-problems trying to publish it\. Or, worse yet, you\'ll be able to
-publish it, but you\'ll be publishing a broken or pointless package\.
-So don\'t do that\.
-.
-.P
-In the root of your package, do this:
-.
-.IP "" 4
-.
-.nf
-npm install \. \-g
-.
-.fi
-.
-.IP "" 0
-.
-.P
-That\'ll show you that it\'s working\. If you\'d rather just create a symlink
-package that points to your working directory, then do this:
-.
-.IP "" 4
-.
-.nf
-npm link
-.
-.fi
-.
-.IP "" 0
-.
-.P
-Use \fBnpm ls \-g\fR to see if it\'s there\.
-.
-.P
-To test a local install, go into some other folder, and then do:
-.
-.IP "" 4
-.
-.nf
-cd \.\./some\-other\-folder
-npm install \.\./my\-package
-.
-.fi
-.
-.IP "" 0
-.
-.P
-to install it locally into the node_modules folder in that other place\.
-.
-.P
-Then go into the node\-repl, and try using require("my\-thing") to
-bring in your module\'s main module\.
-.
-.SH "Create a User Account"
-Create a user with the adduser command\. It works like this:
-.
-.IP "" 4
-.
-.nf
-npm adduser
-.
-.fi
-.
-.IP "" 0
-.
-.P
-and then follow the prompts\.
-.
-.P
-This is documented better in npm help adduser\.
-.
-.SH "Publish your package"
-This part\'s easy\. IN the root of your folder, do this:
-.
-.IP "" 4
-.
-.nf
-npm publish
-.
-.fi
-.
-.IP "" 0
-.
-.P
-You can give publish a url to a tarball, or a filename of a tarball,
-or a path to a folder\.
-.
-.P
-Note that pretty much \fBeverything in that folder will be exposed\fR
-by default\. So, if you have secret stuff in there, use a \fB\|\.npmignore\fR file to list out the globs to ignore, or publish
-from a fresh checkout\.
-.
-.SH "Brag about it"
-Send emails, write blogs, blab in IRC\.
-.
-.P
-Tell the world how easy it is to install your program!
-.
-.SH "SEE ALSO"
-.
-.IP "\(bu" 4
-npm help faq
-.
-.IP "\(bu" 4
-npm help npm
-.
-.IP "\(bu" 4
-npm help init
-.
-.IP "\(bu" 4
-npm help json
-.
-.IP "\(bu" 4
-npm help scripts
-.
-.IP "\(bu" 4
-npm help publish
-.
-.IP "\(bu" 4
-npm help adduser
-.
-.IP "\(bu" 4
-npm help registry
-.
-.IP "" 0
-
diff --git a/deps/npm/man/man1/disputes.1 b/deps/npm/man/man1/disputes.1
deleted file mode 100644
index 7a7db0034..000000000
--- a/deps/npm/man/man1/disputes.1
+++ /dev/null
@@ -1,145 +0,0 @@
-.\" Generated with Ronnjs 0.3.8
-.\" http://github.com/kapouer/ronnjs/
-.
-.TH "NPM\-DISPUTES" "1" "June 2013" "" ""
-.
-.SH "NAME"
-\fBnpm-disputes\fR \-\- Handling Module Name Disputes
-.
-.SH "SYNOPSIS"
-.
-.IP "1" 4
-Get the author email with \fBnpm owner ls <pkgname>\fR
-.
-.IP "2" 4
-Email the author, CC \fIi@izs\.me\fR\|\.
-.
-.IP "3" 4
-After a few weeks, if there\'s no resolution, we\'ll sort it out\.
-.
-.IP "" 0
-.
-.P
-Don\'t squat on package names\. Publish code or move out of the way\.
-.
-.SH "DESCRIPTION"
-There sometimes arise cases where a user publishes a module, and then
-later, some other user wants to use that name\. Here are some common
-ways that happens (each of these is based on actual events\.)
-.
-.IP "1" 4
-Joe writes a JavaScript module \fBfoo\fR, which is not node\-specific\.
-Joe doesn\'t use node at all\. Bob wants to use \fBfoo\fR in node, so he
-wraps it in an npm module\. Some time later, Joe starts using node,
-and wants to take over management of his program\.
-.
-.IP "2" 4
-Bob writes an npm module \fBfoo\fR, and publishes it\. Perhaps much
-later, Joe finds a bug in \fBfoo\fR, and fixes it\. He sends a pull
-request to Bob, but Bob doesn\'t have the time to deal with it,
-because he has a new job and a new baby and is focused on his new
-erlang project, and kind of not involved with node any more\. Joe
-would like to publish a new \fBfoo\fR, but can\'t, because the name is
-taken\.
-.
-.IP "3" 4
-Bob writes a 10\-line flow\-control library, and calls it \fBfoo\fR, and
-publishes it to the npm registry\. Being a simple little thing, it
-never really has to be updated\. Joe works for Foo Inc, the makers
-of the critically acclaimed and widely\-marketed \fBfoo\fR JavaScript
-toolkit framework\. They publish it to npm as \fBfoojs\fR, but people are
-routinely confused when \fBnpm install foo\fR is some different thing\.
-.
-.IP "4" 4
-Bob writes a parser for the widely\-known \fBfoo\fR file format, because
-he needs it for work\. Then, he gets a new job, and never updates the
-prototype\. Later on, Joe writes a much more complete \fBfoo\fR parser,
-but can\'t publish, because Bob\'s \fBfoo\fR is in the way\.
-.
-.IP "" 0
-.
-.P
-The validity of Joe\'s claim in each situation can be debated\. However,
-Joe\'s appropriate course of action in each case is the same\.
-.
-.IP "1" 4
-\fBnpm owner ls foo\fR\|\. This will tell Joe the email address of the
-owner (Bob)\.
-.
-.IP "2" 4
-Joe emails Bob, explaining the situation \fBas respectfully as possible\fR,
-and what he would like to do with the module name\. He adds
-isaacs \fIi@izs\.me\fR to the CC list of the email\. Mention in the email
-that Bob can run \fBnpm owner add joe foo\fR to add Joe as an owner of
-the \fBfoo\fR package\.
-.
-.IP "3" 4
-After a reasonable amount of time, if Bob has not responded, or if
-Bob and Joe can\'t come to any sort of resolution, email isaacs \fIi@izs\.me\fR and we\'ll sort it out\. ("Reasonable" is usually about 4
-weeks, but extra time is allowed around common holidays\.)
-.
-.IP "" 0
-.
-.SH "REASONING"
-In almost every case so far, the parties involved have been able to reach
-an amicable resolution without any major intervention\. Most people
-really do want to be reasonable, and are probably not even aware that
-they\'re in your way\.
-.
-.P
-Module ecosystems are most vibrant and powerful when they are as
-self\-directed as possible\. If an admin one day deletes something you
-had worked on, then that is going to make most people quite upset,
-regardless of the justification\. When humans solve their problems by
-talking to other humans with respect, everyone has the chance to end up
-feeling good about the interaction\.
-.
-.SH "EXCEPTIONS"
-Some things are not allowed, and will be removed without discussion if
-they are brought to the attention of the npm registry admins, including
-but not limited to:
-.
-.IP "1" 4
-Malware (that is, a package designed to exploit or harm the machine on
-which it is installed)\.
-.
-.IP "2" 4
-Violations of copyright or licenses (for example, cloning an
-MIT\-licensed program, and then removing or changing the copyright and
-license statement)\.
-.
-.IP "3" 4
-Illegal content\.
-.
-.IP "4" 4
-"Squatting" on a package name that you \fIplan\fR to use, but aren\'t
-actually using\. Sorry, I don\'t care how great the name is, or how
-perfect a fit it is for the thing that someday might happen\. If
-someone wants to use it today, and you\'re just taking up space with
-an empty tarball, you\'re going to be evicted\.
-.
-.IP "5" 4
-Putting empty packages in the registry\. Packages must have SOME
-functionality\. It can be silly, but it can\'t be \fInothing\fR\|\. (See
-also: squatting\.)
-.
-.IP "6" 4
-Doing weird things with the registry, like using it as your own
-personal application database or otherwise putting non\-packagey
-things into it\.
-.
-.IP "" 0
-.
-.P
-If you see bad behavior like this, please report it right away\.
-.
-.SH "SEE ALSO"
-.
-.IP "\(bu" 4
-npm help registry
-.
-.IP "\(bu" 4
-npm help owner
-.
-.IP "" 0
-
diff --git a/deps/npm/man/man1/docs.1 b/deps/npm/man/man1/docs.1
deleted file mode 100644
index 3a576fa53..000000000
--- a/deps/npm/man/man1/docs.1
+++ /dev/null
@@ -1,68 +0,0 @@
-.\" Generated with Ronnjs 0.3.8
-.\" http://github.com/kapouer/ronnjs/
-.
-.TH "NPM\-DOCS" "1" "June 2013" "" ""
-.
-.SH "NAME"
-\fBnpm-docs\fR \-\- Docs for a package in a web browser maybe
-.
-.SH "SYNOPSIS"
-.
-.nf
-npm docs <pkgname>
-npm home <pkgname>
-.
-.fi
-.
-.SH "DESCRIPTION"
-This command tries to guess at the likely location of a package\'s
-documentation URL, and then tries to open it using the \fB\-\-browser\fR
-config param\.
-.
-.SH "CONFIGURATION"
-.
-.SS "browser"
-.
-.IP "\(bu" 4
-Default: OS X: \fB"open"\fR, Windows: \fB"start"\fR, Others: \fB"xdg\-open"\fR
-.
-.IP "\(bu" 4
-Type: String
-.
-.IP "" 0
-.
-.P
-The browser that is called by the \fBnpm docs\fR command to open websites\.
-.
-.SS "registry"
-.
-.IP "\(bu" 4
-Default: https://registry\.npmjs\.org/
-.
-.IP "\(bu" 4
-Type: url
-.
-.IP "" 0
-.
-.P
-The base URL of the npm package registry\.
-.
-.SH "SEE ALSO"
-.
-.IP "\(bu" 4
-npm help view
-.
-.IP "\(bu" 4
-npm help publish
-.
-.IP "\(bu" 4
-npm help registry
-.
-.IP "\(bu" 4
-npm help config
-.
-.IP "\(bu" 4
-npm help json
-.
-.IP "" 0
-
diff --git a/deps/npm/man/man1/edit.1 b/deps/npm/man/man1/edit.1
deleted file mode 100644
index dcb4f4caf..000000000
--- a/deps/npm/man/man1/edit.1
+++ /dev/null
@@ -1,60 +0,0 @@
-.\" Generated with Ronnjs 0.3.8
-.\" http://github.com/kapouer/ronnjs/
-.
-.TH "NPM\-EDIT" "1" "June 2013" "" ""
-.
-.SH "NAME"
-\fBnpm-edit\fR \-\- Edit an installed package
-.
-.SH "SYNOPSIS"
-.
-.nf
-npm edit <name>[@<version>]
-.
-.fi
-.
-.SH "DESCRIPTION"
-Opens the package folder in the default editor (or whatever you\'ve
-configured as the npm \fBeditor\fR config \-\- see \fBnpm help config\fR\|\.)
-.
-.P
-After it has been edited, the package is rebuilt so as to pick up any
-changes in compiled packages\.
-.
-.P
-For instance, you can do \fBnpm install connect\fR to install connect
-into your package, and then \fBnpm edit connect\fR to make a few
-changes to your locally installed copy\.
-.
-.SH "CONFIGURATION"
-.
-.SS "editor"
-.
-.IP "\(bu" 4
-Default: \fBEDITOR\fR environment variable if set, or \fB"vi"\fR on Posix,
-or \fB"notepad"\fR on Windows\.
-.
-.IP "\(bu" 4
-Type: path
-.
-.IP "" 0
-.
-.P
-The command to run for \fBnpm edit\fR or \fBnpm config edit\fR\|\.
-.
-.SH "SEE ALSO"
-.
-.IP "\(bu" 4
-npm help folders
-.
-.IP "\(bu" 4
-npm help explore
-.
-.IP "\(bu" 4
-npm help install
-.
-.IP "\(bu" 4
-npm help config
-.
-.IP "" 0
-
diff --git a/deps/npm/man/man1/explore.1 b/deps/npm/man/man1/explore.1
deleted file mode 100644
index 02870ef4b..000000000
--- a/deps/npm/man/man1/explore.1
+++ /dev/null
@@ -1,76 +0,0 @@
-.\" Generated with Ronnjs 0.3.8
-.\" http://github.com/kapouer/ronnjs/
-.
-.TH "NPM\-EXPLORE" "1" "June 2013" "" ""
-.
-.SH "NAME"
-\fBnpm-explore\fR \-\- Browse an installed package
-.
-.SH "SYNOPSIS"
-.
-.nf
-npm explore <name>[@<version>] [ \-\- <cmd>]
-.
-.fi
-.
-.SH "DESCRIPTION"
-Spawn a subshell in the directory of the installed package specified\.
-.
-.P
-If a command is specified, then it is run in the subshell, which then
-immediately terminates\.
-.
-.P
-This is particularly handy in the case of git submodules in the \fBnode_modules\fR folder:
-.
-.IP "" 4
-.
-.nf
-npm explore some\-dependency \-\- git pull origin master
-.
-.fi
-.
-.IP "" 0
-.
-.P
-Note that the package is \fInot\fR automatically rebuilt afterwards, so be
-sure to use \fBnpm rebuild <pkg>\fR if you make any changes\.
-.
-.SH "CONFIGURATION"
-.
-.SS "shell"
-.
-.IP "\(bu" 4
-Default: SHELL environment variable, or "bash" on Posix, or "cmd" on
-Windows
-.
-.IP "\(bu" 4
-Type: path
-.
-.IP "" 0
-.
-.P
-The shell to run for the \fBnpm explore\fR command\.
-.
-.SH "SEE ALSO"
-.
-.IP "\(bu" 4
-npm help submodule
-.
-.IP "\(bu" 4
-npm help folders
-.
-.IP "\(bu" 4
-npm help edit
-.
-.IP "\(bu" 4
-npm help rebuild
-.
-.IP "\(bu" 4
-npm help build
-.
-.IP "\(bu" 4
-npm help install
-.
-.IP "" 0
-
diff --git a/deps/npm/man/man1/faq.1 b/deps/npm/man/man1/faq.1
deleted file mode 100644
index 68353e594..000000000
--- a/deps/npm/man/man1/faq.1
+++ /dev/null
@@ -1,405 +0,0 @@
-.\" Generated with Ronnjs 0.3.8
-.\" http://github.com/kapouer/ronnjs/
-.
-.TH "NPM\-FAQ" "1" "June 2013" "" ""
-.
-.SH "NAME"
-\fBnpm-faq\fR \-\- Frequently Asked Questions
-.
-.SH "Where can I find these docs in HTML?"
-\fIhttps://npmjs\.org/doc/\fR, or run:
-.
-.IP "" 4
-.
-.nf
-npm config set viewer browser
-.
-.fi
-.
-.IP "" 0
-.
-.P
-to open these documents in your default web browser rather than \fBman\fR\|\.
-.
-.SH "It didn&#39;t work\."
-That\'s not really a question\.
-.
-.SH "Why didn&#39;t it work?"
-I don\'t know yet\.
-.
-.P
-Read the error output, and if you can\'t figure out what it means,
-do what it says and post a bug with all the information it asks for\.
-.
-.SH "Where does npm put stuff?"
-See \fBnpm help folders\fR
-.
-.P
-tl;dr:
-.
-.IP "\(bu" 4
-Use the \fBnpm root\fR command to see where modules go, and the \fBnpm bin\fR
-command to see where executables go
-.
-.IP "\(bu" 4
-Global installs are different from local installs\. If you install
-something with the \fB\-g\fR flag, then its executables go in \fBnpm bin \-g\fR
-and its modules go in \fBnpm root \-g\fR\|\.
-.
-.IP "" 0
-.
-.SH "How do I install something on my computer in a central location?"
-Install it globally by tacking \fB\-g\fR or \fB\-\-global\fR to the command\. (This
-is especially important for command line utilities that need to add
-their bins to the global system \fBPATH\fR\|\.)
-.
-.SH "I installed something globally, but I can&#39;t "
-Install it locally\.
-.
-.P
-The global install location is a place for command\-line utilities
-to put their bins in the system \fBPATH\fR\|\. It\'s not for use with \fBrequire()\fR\|\.
-.
-.P
-If you \fBrequire()\fR a module in your code, then that means it\'s a
-dependency, and a part of your program\. You need to install it locally
-in your program\.
-.
-.SH "Why can&#39;t npm just put everything in one place, like other package managers?"
-Not every change is an improvement, but every improvement is a change\.
-This would be like asking git to do network IO for every commit\. It\'s
-not going to happen, because it\'s a terrible idea that causes more
-problems than it solves\.
-.
-.P
-It is much harder to avoid dependency conflicts without nesting
-dependencies\. This is fundamental to the way that npm works, and has
-proven to be an extremely successful approach\. See \fBnpm help folders\fR for
-more details\.
-.
-.P
-If you want a package to be installed in one place, and have all your
-programs reference the same copy of it, then use the \fBnpm link\fR command\.
-That\'s what it\'s for\. Install it globally, then link it into each
-program that uses it\.
-.
-.SH "Whatever, I really want the old style &#39;everything global&#39; style\."
-Write your own package manager, then\. It\'s not that hard\.
-.
-.P
-npm will not help you do something that is known to be a bad idea\.
-.
-.SH "<code>&quot;node_modules&quot;</code>"
-No\. This will never happen\. This question comes up sometimes,
-because it seems silly from the outside that npm couldn\'t just be
-configured to put stuff somewhere else, and then npm could load them
-from there\. It\'s an arbitrary spelling choice, right? What\'s the big
-deal?
-.
-.P
-At the time of this writing, the string \fB\'node_modules\'\fR appears 151
-times in 53 separate files in npm and node core (excluding tests and
-documentation)\.
-.
-.P
-Some of these references are in node\'s built\-in module loader\. Since
-npm is not involved \fBat all\fR at run\-time, node itself would have to
-be configured to know where you\'ve decided to stick stuff\. Complexity
-hurdle #1\. Since the Node module system is locked, this cannot be
-changed, and is enough to kill this request\. But I\'ll continue, in
-deference to your deity\'s delicate feelings regarding spelling\.
-.
-.P
-Many of the others are in dependencies that npm uses, which are not
-necessarily tightly coupled to npm (in the sense that they do not read
-npm\'s configuration files, etc\.) Each of these would have to be
-configured to take the name of the \fBnode_modules\fR folder as a
-parameter\. Complexity hurdle #2\.
-.
-.P
-Furthermore, npm has the ability to "bundle" dependencies by adding
-the dep names to the \fB"bundledDependencies"\fR list in package\.json,
-which causes the folder to be included in the package tarball\. What
-if the author of a module bundles its dependencies, and they use a
-different spelling for \fBnode_modules\fR? npm would have to rename the
-folder at publish time, and then be smart enough to unpack it using
-your locally configured name\. Complexity hurdle #3\.
-.
-.P
-Furthermore, what happens when you \fIchange\fR this name? Fine, it\'s
-easy enough the first time, just rename the \fBnode_modules\fR folders to \fB\|\./blergyblerp/\fR or whatever name you choose\. But what about when you
-change it again? npm doesn\'t currently track any state about past
-configuration settings, so this would be rather difficult to do
-properly\. It would have to track every previous value for this
-config, and always accept any of them, or else yesterday\'s install may
-be broken tomorrow\. Complexity hurdle #5\.
-.
-.P
-Never going to happen\. The folder is named \fBnode_modules\fR\|\. It is
-written indelibly in the Node Way, handed down from the ancient times
-of Node 0\.3\.
-.
-.SH "Should I check my "
-Mikeal Rogers answered this question very well:
-.
-.P
-\fIhttp://www\.mikealrogers\.com/posts/nodemodules\-in\-git\.html\fR
-.
-.P
-tl;dr
-.
-.IP "\(bu" 4
-Check \fBnode_modules\fR into git for things you \fBdeploy\fR, such as
-websites and apps\.
-.
-.IP "\(bu" 4
-Do not check \fBnode_modules\fR into git for libraries and modules
-intended to be reused\.
-.
-.IP "\(bu" 4
-Use npm to manage dependencies in your dev environment, but not in
-your deployment scripts\.
-.
-.IP "" 0
-.
-.SH "Is it &#39;npm&#39; or &#39;NPM&#39; or &#39;Npm&#39;?"
-npm should never be capitalized unless it is being displayed in a
-location that is customarily all\-caps (such as the title of man pages\.)
-.
-.SH "If &#39;npm&#39; is an acronym, why is it never capitalized?"
-Contrary to the belief of many, "npm" is not in fact an abbreviation for
-"Node Package Manager"\. It is a recursive bacronymic abbreviation for
-"npm is not an acronym"\. (If it was "ninaa", then it would be an
-acronym, and thus incorrectly named\.)
-.
-.P
-"NPM", however, \fIis\fR an acronym (more precisely, a capitonym) for the
-National Association of Pastoral Musicians\. You can learn more
-about them at \fIhttp://npm\.org/\fR\|\.
-.
-.P
-In software, "NPM" is a Non\-Parametric Mapping utility written by
-Chris Rorden\. You can analyze pictures of brains with it\. Learn more
-about the (capitalized) NPM program at \fIhttp://www\.cabiatl\.com/mricro/npm/\fR\|\.
-.
-.P
-The first seed that eventually grew into this flower was a bash utility
-named "pm", which was a shortened descendent of "pkgmakeinst", a
-bash function that was used to install various different things on different
-platforms, most often using Yahoo\'s \fByinst\fR\|\. If \fBnpm\fR was ever an
-acronym for anything, it was \fBnode pm\fR or maybe \fBnew pm\fR\|\.
-.
-.P
-So, in all seriousness, the "npm" project is named after its command\-line
-utility, which was organically selected to be easily typed by a right\-handed
-programmer using a US QWERTY keyboard layout, ending with the
-right\-ring\-finger in a postition to type the \fB\-\fR key for flags and
-other command\-line arguments\. That command\-line utility is always
-lower\-case, though it starts most sentences it is a part of\.
-.
-.SH "How do I list installed packages?"
-\fBnpm ls\fR
-.
-.SH "How do I search for packages?"
-\fBnpm search\fR
-.
-.P
-Arguments are greps\. \fBnpm search jsdom\fR shows jsdom packages\.
-.
-.SH "How do I update npm?"
-.
-.nf
-npm update npm \-g
-.
-.fi
-.
-.P
-You can also update all outdated local packages by doing \fBnpm update\fR without
-any arguments, or global packages by doing \fBnpm update \-g\fR\|\.
-.
-.P
-Occasionally, the version of npm will progress such that the current
-version cannot be properly installed with the version that you have
-installed already\. (Consider, if there is ever a bug in the \fBupdate\fR
-command\.)
-.
-.P
-In those cases, you can do this:
-.
-.IP "" 4
-.
-.nf
-curl https://npmjs\.org/install\.sh | sh
-.
-.fi
-.
-.IP "" 0
-.
-.SH "What is a "
-A package is:
-.
-.IP "\(bu" 4
-a) a folder containing a program described by a package\.json file
-.
-.IP "\(bu" 4
-b) a gzipped tarball containing (a)
-.
-.IP "\(bu" 4
-c) a url that resolves to (b)
-.
-.IP "\(bu" 4
-d) a \fB<name>@<version>\fR that is published on the registry with (c)
-.
-.IP "\(bu" 4
-e) a \fB<name>@<tag>\fR that points to (d)
-.
-.IP "\(bu" 4
-f) a \fB<name>\fR that has a "latest" tag satisfying (e)
-.
-.IP "\(bu" 4
-g) a \fBgit\fR url that, when cloned, results in (a)\.
-.
-.IP "" 0
-.
-.P
-Even if you never publish your package, you can still get a lot of
-benefits of using npm if you just want to write a node program (a), and
-perhaps if you also want to be able to easily install it elsewhere
-after packing it up into a tarball (b)\.
-.
-.P
-Git urls can be of the form:
-.
-.IP "" 4
-.
-.nf
-git://github\.com/user/project\.git#commit\-ish
-git+ssh://user@hostname:project\.git#commit\-ish
-git+http://user@hostname/project/blah\.git#commit\-ish
-git+https://user@hostname/project/blah\.git#commit\-ish
-.
-.fi
-.
-.IP "" 0
-.
-.P
-The \fBcommit\-ish\fR can be any tag, sha, or branch which can be supplied as
-an argument to \fBgit checkout\fR\|\. The default is \fBmaster\fR\|\.
-.
-.SH "How do I install node with npm?"
-You don\'t\. Try one of these node version managers:
-.
-.P
-Unix:
-.
-.IP "\(bu" 4
-\fIhttp://github\.com/isaacs/nave\fR
-.
-.IP "\(bu" 4
-\fIhttp://github\.com/visionmedia/n\fR
-.
-.IP "\(bu" 4
-\fIhttp://github\.com/creationix/nvm\fR
-.
-.IP "" 0
-.
-.P
-Windows:
-.
-.IP "\(bu" 4
-\fIhttp://github\.com/marcelklehr/nodist\fR
-.
-.IP "\(bu" 4
-\fIhttps://github\.com/hakobera/nvmw\fR
-.
-.IP "" 0
-.
-.SH "How can I use npm for development?"
-See \fBnpm help developers\fR and \fBnpm help json\fR\|\.
-.
-.P
-You\'ll most likely want to \fBnpm link\fR your development folder\. That\'s
-awesomely handy\.
-.
-.P
-To set up your own private registry, check out \fBnpm help registry\fR\|\.
-.
-.SH "Can I list a url as a dependency?"
-Yes\. It should be a url to a gzipped tarball containing a single folder
-that has a package\.json in its root, or a git url\.
-(See "what is a package?" above\.)
-.
-.SH "How do I symlink to a dev folder so I don&#39;t have to keep re\-installing?"
-See \fBnpm help link\fR
-.
-.SH "The package registry website\. What is that exactly?"
-See \fBnpm help registry\fR\|\.
-.
-.SH "What&#39;s up with the insecure channel warnings?"
-Until node 0\.4\.10, there were problems sending big files over HTTPS\. That
-means that publishes go over HTTP by default in those versions of node\.
-.
-.SH "I forgot my password, and can&#39;t publish\. How do I reset it?"
-Go to \fIhttps://npmjs\.org/forgot\fR\|\.
-.
-.SH "I get ECONNREFUSED a lot\. What&#39;s up?"
-Either the registry is down, or node\'s DNS isn\'t able to reach out\.
-.
-.P
-To check if the registry is down, open up \fIhttp://registry\.npmjs\.org/\fR
-in a web browser\. This will also tell you if you are just unable to
-access the internet for some reason\.
-.
-.P
-If the registry IS down, let me know by emailing or posting an issue\.
-We\'ll have someone kick it or something\.
-.
-.SH "Why no namespaces?"
-Please see this discussion: \fIhttps://github\.com/isaacs/npm/issues/798\fR
-.
-.P
-tl;dr \- It doesn\'t actually make things better, and can make them worse\.
-.
-.P
-If you want to namespace your own packages, you may: simply use the \fB\-\fR character to separate the names\. npm is a mostly anarchic system\.
-There is not sufficient need to impose namespace rules on everyone\.
-.
-.SH "Who does npm?"
-\fBnpm view npm author\fR
-.
-.P
-\fBnpm view npm contributors\fR
-.
-.SH "I have a question or request not addressed here\. Where should I put it?"
-Discuss it on the mailing list, or post an issue\.
-.
-.IP "\(bu" 4
-\fInpm\-@googlegroups\.com\fR
-.
-.IP "\(bu" 4
-\fIhttps://github\.com/isaacs/npm/issues\fR
-.
-.IP "" 0
-.
-.SH "Why does npm hate me?"
-npm is not capable of hatred\. It loves everyone, especially you\.
-.
-.SH "SEE ALSO"
-.
-.IP "\(bu" 4
-npm help npm
-.
-.IP "\(bu" 4
-npm help developers
-.
-.IP "\(bu" 4
-npm help json
-.
-.IP "\(bu" 4
-npm help config
-.
-.IP "\(bu" 4
-npm help folders
-.
-.IP "" 0
-
diff --git a/deps/npm/man/man1/find.1 b/deps/npm/man/man1/find.1
deleted file mode 100644
index 653597ffa..000000000
--- a/deps/npm/man/man1/find.1
+++ /dev/null
@@ -1,72 +0,0 @@
-.\" Generated with Ronnjs/v0.1
-.\" http://github.com/kapouer/ronnjs/
-.
-.TH "NPM\-SEARCH" "1" "November 2011" "" ""
-.
-.SH "NAME"
-\fBnpm-search\fR \-\- Search for packages
-.
-.SH "SYNOPSIS"
-.
-.nf
-npm search [search terms \.\.\.]
-.
-.fi
-.
-.SH "DESCRIPTION"
-Search the registry for packages matching the search terms\.
-.
-.SH "CONFIGURATION"
-.
-.SS "description"
-.
-.IP "\(bu" 4
-Default: true
-.
-.IP "\(bu" 4
-Type: Boolean
-.
-.IP "" 0
-.
-.P
-Show the description in \fBnpm search\fR
-.
-.SS "searchopts"
-.
-.IP "\(bu" 4
-Default: ""
-.
-.IP "\(bu" 4
-Type: String
-.
-.IP "" 0
-.
-.P
-Space\-separated options that are always passed to search\.
-.
-.SS "searchexclude"
-.
-.IP "\(bu" 4
-Default: ""
-.
-.IP "\(bu" 4
-Type: String
-.
-.IP "" 0
-.
-.P
-Space\-separated options that limit the results from search\.
-.
-.SH "SEE ALSO"
-.
-.IP "\(bu" 4
-npm help registry
-.
-.IP "\(bu" 4
-npm help config
-.
-.IP "\(bu" 4
-npm help view
-.
-.IP "" 0
-
diff --git a/deps/npm/man/man1/folders.1 b/deps/npm/man/man1/folders.1
deleted file mode 100644
index 3d9d4900f..000000000
--- a/deps/npm/man/man1/folders.1
+++ /dev/null
@@ -1,258 +0,0 @@
-.\" Generated with Ronnjs 0.3.8
-.\" http://github.com/kapouer/ronnjs/
-.
-.TH "NPM\-FOLDERS" "1" "June 2013" "" ""
-.
-.SH "NAME"
-\fBnpm-folders\fR \-\- Folder Structures Used by npm
-.
-.SH "DESCRIPTION"
-npm puts various things on your computer\. That\'s its job\.
-.
-.P
-This document will tell you what it puts where\.
-.
-.SS "tl;dr"
-.
-.IP "\(bu" 4
-Local install (default): puts stuff in \fB\|\./node_modules\fR of the current
-package root\.
-.
-.IP "\(bu" 4
-Global install (with \fB\-g\fR): puts stuff in /usr/local or wherever node
-is installed\.
-.
-.IP "\(bu" 4
-Install it \fBlocally\fR if you\'re going to \fBrequire()\fR it\.
-.
-.IP "\(bu" 4
-Install it \fBglobally\fR if you\'re going to run it on the command line\.
-.
-.IP "\(bu" 4
-If you need both, then install it in both places, or use \fBnpm link\fR\|\.
-.
-.IP "" 0
-.
-.SS "prefix Configuration"
-The \fBprefix\fR config defaults to the location where node is installed\.
-On most systems, this is \fB/usr/local\fR, and most of the time is the same
-as node\'s \fBprocess\.installPrefix\fR\|\.
-.
-.P
-On windows, this is the exact location of the node\.exe binary\. On Unix
-systems, it\'s one level up, since node is typically installed at \fB{prefix}/bin/node\fR rather than \fB{prefix}/node\.exe\fR\|\.
-.
-.P
-When the \fBglobal\fR flag is set, npm installs things into this prefix\.
-When it is not set, it uses the root of the current package, or the
-current working directory if not in a package already\.
-.
-.SS "Node Modules"
-Packages are dropped into the \fBnode_modules\fR folder under the \fBprefix\fR\|\.
-When installing locally, this means that you can \fBrequire("packagename")\fR to load its main module, or \fBrequire("packagename/lib/path/to/sub/module")\fR to load other modules\.
-.
-.P
-Global installs on Unix systems go to \fB{prefix}/lib/node_modules\fR\|\.
-Global installs on Windows go to \fB{prefix}/node_modules\fR (that is, no \fBlib\fR folder\.)
-.
-.P
-If you wish to \fBrequire()\fR a package, then install it locally\.
-.
-.SS "Executables"
-When in global mode, executables are linked into \fB{prefix}/bin\fR on Unix,
-or directly into \fB{prefix}\fR on Windows\.
-.
-.P
-When in local mode, executables are linked into \fB\|\./node_modules/\.bin\fR so that they can be made available to scripts run
-through npm\. (For example, so that a test runner will be in the path
-when you run \fBnpm test\fR\|\.)
-.
-.SS "Man Pages"
-When in global mode, man pages are linked into \fB{prefix}/share/man\fR\|\.
-.
-.P
-When in local mode, man pages are not installed\.
-.
-.P
-Man pages are not installed on Windows systems\.
-.
-.SS "Cache"
-See \fBnpm help cache\fR\|\. Cache files are stored in \fB~/\.npm\fR on Posix, or \fB~/npm\-cache\fR on Windows\.
-.
-.P
-This is controlled by the \fBcache\fR configuration param\.
-.
-.SS "Temp Files"
-Temporary files are stored by default in the folder specified by the \fBtmp\fR config, which defaults to the TMPDIR, TMP, or TEMP environment
-variables, or \fB/tmp\fR on Unix and \fBc:\\windows\\temp\fR on Windows\.
-.
-.P
-Temp files are given a unique folder under this root for each run of the
-program, and are deleted upon successful exit\.
-.
-.SH "More Information"
-When installing locally, npm first tries to find an appropriate \fBprefix\fR folder\. This is so that \fBnpm install foo@1\.2\.3\fR will install
-to the sensible root of your package, even if you happen to have \fBcd\fRed
-into some other folder\.
-.
-.P
-Starting at the $PWD, npm will walk up the folder tree checking for a
-folder that contains either a \fBpackage\.json\fR file, or a \fBnode_modules\fR
-folder\. If such a thing is found, then that is treated as the effective
-"current directory" for the purpose of running npm commands\. (This
-behavior is inspired by and similar to git\'s \.git\-folder seeking
-logic when running git commands in a working dir\.)
-.
-.P
-If no package root is found, then the current folder is used\.
-.
-.P
-When you run \fBnpm install foo@1\.2\.3\fR, then the package is loaded into
-the cache, and then unpacked into \fB\|\./node_modules/foo\fR\|\. Then, any of
-foo\'s dependencies are similarly unpacked into \fB\|\./node_modules/foo/node_modules/\.\.\.\fR\|\.
-.
-.P
-Any bin files are symlinked to \fB\|\./node_modules/\.bin/\fR, so that they may
-be found by npm scripts when necessary\.
-.
-.SS "Global Installation"
-If the \fBglobal\fR configuration is set to true, then npm will
-install packages "globally"\.
-.
-.P
-For global installation, packages are installed roughly the same way,
-but using the folders described above\.
-.
-.SS "Cycles, Conflicts, and Folder Parsimony"
-Cycles are handled using the property of node\'s module system that it
-walks up the directories looking for \fBnode_modules\fR folders\. So, at every
-stage, if a package is already installed in an ancestor \fBnode_modules\fR
-folder, then it is not installed at the current location\.
-.
-.P
-Consider the case above, where \fBfoo \-> bar \-> baz\fR\|\. Imagine if, in
-addition to that, baz depended on bar, so you\'d have: \fBfoo \-> bar \-> baz \-> bar \-> baz \.\.\.\fR\|\. However, since the folder
-structure is: \fBfoo/node_modules/bar/node_modules/baz\fR, there\'s no need to
-put another copy of bar into \fB\|\.\.\./baz/node_modules\fR, since when it calls
-require("bar"), it will get the copy that is installed in \fBfoo/node_modules/bar\fR\|\.
-.
-.P
-This shortcut is only used if the exact same
-version would be installed in multiple nested \fBnode_modules\fR folders\. It
-is still possible to have \fBa/node_modules/b/node_modules/a\fR if the two
-"a" packages are different versions\. However, without repeating the
-exact same package multiple times, an infinite regress will always be
-prevented\.
-.
-.P
-Another optimization can be made by installing dependencies at the
-highest level possible, below the localized "target" folder\.
-.
-.SS "\fIExample\fR"
-Consider this dependency graph:
-.
-.IP "" 4
-.
-.nf
-foo
-+\-\- blerg@1\.2\.5
-+\-\- bar@1\.2\.3
-| +\-\- blerg@1\.x (latest=1\.3\.7)
-| +\-\- baz@2\.x
-| | `\-\- quux@3\.x
-| | `\-\- bar@1\.2\.3 (cycle)
-| `\-\- asdf@*
-`\-\- baz@1\.2\.3
- `\-\- quux@3\.x
- `\-\- bar
-.
-.fi
-.
-.IP "" 0
-.
-.P
-In this case, we might expect a folder structure like this:
-.
-.IP "" 4
-.
-.nf
-foo
-+\-\- node_modules
- +\-\- blerg (1\.2\.5) <\-\-\-[A]
- +\-\- bar (1\.2\.3) <\-\-\-[B]
- | `\-\- node_modules
- | +\-\- baz (2\.0\.2) <\-\-\-[C]
- | | `\-\- node_modules
- | | `\-\- quux (3\.2\.0)
- | `\-\- asdf (2\.3\.4)
- `\-\- baz (1\.2\.3) <\-\-\-[D]
- `\-\- node_modules
- `\-\- quux (3\.2\.0) <\-\-\-[E]
-.
-.fi
-.
-.IP "" 0
-.
-.P
-Since foo depends directly on \fBbar@1\.2\.3\fR and \fBbaz@1\.2\.3\fR, those are
-installed in foo\'s \fBnode_modules\fR folder\.
-.
-.P
-Even though the latest copy of blerg is 1\.3\.7, foo has a specific
-dependency on version 1\.2\.5\. So, that gets installed at [A]\. Since the
-parent installation of blerg satisfies bar\'s dependency on \fBblerg@1\.x\fR,
-it does not install another copy under [B]\.
-.
-.P
-Bar [B] also has dependencies on baz and asdf, so those are installed in
-bar\'s \fBnode_modules\fR folder\. Because it depends on \fBbaz@2\.x\fR, it cannot
-re\-use the \fBbaz@1\.2\.3\fR installed in the parent \fBnode_modules\fR folder [D],
-and must install its own copy [C]\.
-.
-.P
-Underneath bar, the \fBbaz \-> quux \-> bar\fR dependency creates a cycle\.
-However, because bar is already in quux\'s ancestry [B], it does not
-unpack another copy of bar into that folder\.
-.
-.P
-Underneath \fBfoo \-> baz\fR [D], quux\'s [E] folder tree is empty, because its
-dependency on bar is satisfied by the parent folder copy installed at [B]\.
-.
-.P
-For a graphical breakdown of what is installed where, use \fBnpm ls\fR\|\.
-.
-.SS "Publishing"
-Upon publishing, npm will look in the \fBnode_modules\fR folder\. If any of
-the items there are not in the \fBbundledDependencies\fR array, then they will
-not be included in the package tarball\.
-.
-.P
-This allows a package maintainer to install all of their dependencies
-(and dev dependencies) locally, but only re\-publish those items that
-cannot be found elsewhere\. See \fBnpm help json\fR for more information\.
-.
-.SH "SEE ALSO"
-.
-.IP "\(bu" 4
-npm help faq
-.
-.IP "\(bu" 4
-npm help json
-.
-.IP "\(bu" 4
-npm help install
-.
-.IP "\(bu" 4
-npm help pack
-.
-.IP "\(bu" 4
-npm help cache
-.
-.IP "\(bu" 4
-npm help config
-.
-.IP "\(bu" 4
-npm help publish
-.
-.IP "" 0
-
diff --git a/deps/npm/man/man1/get.1 b/deps/npm/man/man1/get.1
deleted file mode 100644
index 5075c9f0c..000000000
--- a/deps/npm/man/man1/get.1
+++ /dev/null
@@ -1,1154 +0,0 @@
-.\" Generated with Ronnjs/v0.1
-.\" http://github.com/kapouer/ronnjs/
-.
-.TH "NPM\-CONFIG" "1" "November 2011" "" ""
-.
-.SH "NAME"
-\fBnpm-config\fR \-\- Manage the npm configuration file
-.
-.SH "SYNOPSIS"
-.
-.nf
-npm config set <key> <value> [\-\-global]
-npm config get <key>
-npm config delete <key>
-npm config list
-npm config edit
-npm get <key>
-npm set <key> <value> [\-\-global]
-.
-.fi
-.
-.SH "DESCRIPTION"
-npm gets its configuration values from 6 sources, in this priority:
-.
-.SS "Command Line Flags"
-Putting \fB\-\-foo bar\fR on the command line sets the \fBfoo\fR configuration parameter to \fB"bar"\fR\|\. A \fB\-\-\fR argument tells the cli
-parser to stop reading flags\. A \fB\-\-flag\fR parameter that is at the \fIend\fR of
-the command will be given the value of \fBtrue\fR\|\.
-.
-.SS "Environment Variables"
-Any environment variables that start with \fBnpm_config_\fR will be interpreted
-as a configuration parameter\. For example, putting \fBnpm_config_foo=bar\fR in
-your environment will set the \fBfoo\fR configuration parameter to \fBbar\fR\|\. Any
-environment configurations that are not given a value will be given the value
-of \fBtrue\fR\|\. Config values are case\-insensitive, so \fBNPM_CONFIG_FOO=bar\fR will
-work the same\.
-.
-.SS "Per\-user config file"
-\fB$HOME/\.npmrc\fR (or the \fBuserconfig\fR param, if set above)
-.
-.P
-This file is an ini\-file formatted list of \fBkey = value\fR parameters\.
-.
-.SS "Global config file"
-\fB$PREFIX/etc/npmrc\fR (or the \fBglobalconfig\fR param, if set above):
-This file is an ini\-file formatted list of \fBkey = value\fR parameters
-.
-.SS "Built\-in config file"
-\fBpath/to/npm/itself/npmrc\fR
-.
-.P
-This is an unchangeable "builtin"
-configuration file that npm keeps consistent across updates\. Set
-fields in here using the \fB\|\./configure\fR script that comes with npm\.
-This is primarily for distribution maintainers to override default
-configs in a standard and consistent manner\.
-.
-.SS "Default Configs"
-A set of configuration parameters that are internal to npm, and are
-defaults if nothing else is specified\.
-.
-.SH "Sub\-commands"
-Config supports the following sub\-commands:
-.
-.SS "set"
-.
-.nf
-npm config set key value
-.
-.fi
-.
-.P
-Sets the config key to the value\.
-.
-.P
-If value is omitted, then it sets it to "true"\.
-.
-.SS "get"
-.
-.nf
-npm config get key
-.
-.fi
-.
-.P
-Echo the config value to stdout\.
-.
-.SS "list"
-.
-.nf
-npm config list
-.
-.fi
-.
-.P
-Show all the config settings\.
-.
-.SS "delete"
-.
-.nf
-npm config delete key
-.
-.fi
-.
-.P
-Deletes the key from all configuration files\.
-.
-.SS "edit"
-.
-.nf
-npm config edit
-.
-.fi
-.
-.P
-Opens the config file in an editor\. Use the \fB\-\-global\fR flag to edit the
-global config\.
-.
-.SH "Shorthands and Other CLI Niceties"
-The following shorthands are parsed on the command\-line:
-.
-.IP "\(bu" 4
-\fB\-v\fR: \fB\-\-version\fR
-.
-.IP "\(bu" 4
-\fB\-h\fR, \fB\-?\fR, \fB\-\-help\fR, \fB\-H\fR: \fB\-\-usage\fR
-.
-.IP "\(bu" 4
-\fB\-s\fR, \fB\-\-silent\fR: \fB\-\-loglevel silent\fR
-.
-.IP "\(bu" 4
-\fB\-d\fR: \fB\-\-loglevel info\fR
-.
-.IP "\(bu" 4
-\fB\-dd\fR, \fB\-\-verbose\fR: \fB\-\-loglevel verbose\fR
-.
-.IP "\(bu" 4
-\fB\-ddd\fR: \fB\-\-loglevel silly\fR
-.
-.IP "\(bu" 4
-\fB\-g\fR: \fB\-\-global\fR
-.
-.IP "\(bu" 4
-\fB\-l\fR: \fB\-\-long\fR
-.
-.IP "\(bu" 4
-\fB\-m\fR: \fB\-\-message\fR
-.
-.IP "\(bu" 4
-\fB\-p\fR, \fB\-\-porcelain\fR: \fB\-\-parseable\fR
-.
-.IP "\(bu" 4
-\fB\-reg\fR: \fB\-\-registry\fR
-.
-.IP "\(bu" 4
-\fB\-v\fR: \fB\-\-version\fR
-.
-.IP "\(bu" 4
-\fB\-f\fR: \fB\-\-force\fR
-.
-.IP "\(bu" 4
-\fB\-l\fR: \fB\-\-long\fR
-.
-.IP "\(bu" 4
-\fB\-desc\fR: \fB\-\-description\fR
-.
-.IP "\(bu" 4
-\fB\-S\fR: \fB\-\-save\fR
-.
-.IP "\(bu" 4
-\fB\-y\fR: \fB\-\-yes\fR
-.
-.IP "\(bu" 4
-\fB\-n\fR: \fB\-\-yes false\fR
-.
-.IP "\(bu" 4
-\fBll\fR and \fBla\fR commands: \fBls \-\-long\fR
-.
-.IP "" 0
-.
-.P
-If the specified configuration param resolves unambiguously to a known
-configuration parameter, then it is expanded to that configuration
-parameter\. For example:
-.
-.IP "" 4
-.
-.nf
-npm ls \-\-par
-# same as:
-npm ls \-\-parseable
-.
-.fi
-.
-.IP "" 0
-.
-.P
-If multiple single\-character shorthands are strung together, and the
-resulting combination is unambiguously not some other configuration
-param, then it is expanded to its various component pieces\. For
-example:
-.
-.IP "" 4
-.
-.nf
-npm ls \-gpld
-# same as:
-npm ls \-\-global \-\-parseable \-\-long \-\-loglevel info
-.
-.fi
-.
-.IP "" 0
-.
-.SH "Per\-Package Config Settings"
-When running scripts (see \fBnpm help scripts\fR)
-the package\.json "config" keys are overwritten in the environment if
-there is a config param of \fB<name>[@<version>]:<key>\fR\|\. For example, if
-the package\.json has this:
-.
-.IP "" 4
-.
-.nf
-{ "name" : "foo"
-, "config" : { "port" : "8080" }
-, "scripts" : { "start" : "node server\.js" } }
-.
-.fi
-.
-.IP "" 0
-.
-.P
-and the server\.js is this:
-.
-.IP "" 4
-.
-.nf
-http\.createServer(\.\.\.)\.listen(process\.env\.npm_package_config_port)
-.
-.fi
-.
-.IP "" 0
-.
-.P
-then the user could change the behavior by doing:
-.
-.IP "" 4
-.
-.nf
-npm config set foo:port 80
-.
-.fi
-.
-.IP "" 0
-.
-.SH "Config Settings"
-.
-.SS "always\-auth"
-.
-.IP "\(bu" 4
-Default: false
-.
-.IP "\(bu" 4
-Type: Boolean
-.
-.IP "" 0
-.
-.P
-Force npm to always require authentication when accessing the registry,
-even for \fBGET\fR requests\.
-.
-.SS "bin\-publish"
-.
-.IP "\(bu" 4
-Default: false
-.
-.IP "\(bu" 4
-Type: Boolean
-.
-.IP "" 0
-.
-.P
-If set to true, then binary packages will be created on publish\.
-.
-.P
-This is the way to opt into the "bindist" behavior described below\.
-.
-.SS "bindist"
-.
-.IP "\(bu" 4
-Default: Unstable node versions, \fBnull\fR, otherwise \fB"<node version>\-<platform>\-<os release>"\fR
-.
-.IP "\(bu" 4
-Type: String or \fBnull\fR
-.
-.IP "" 0
-.
-.P
-Experimental: on stable versions of node, binary distributions will be
-created with this tag\. If a user then installs that package, and their \fBbindist\fR tag is found in the list of binary distributions, they will
-get that prebuilt version\.
-.
-.P
-Pre\-build node packages have their preinstall, install, and postinstall
-scripts stripped (since they are run prior to publishing), and do not
-have their \fBbuild\fR directories automatically ignored\.
-.
-.P
-It\'s yet to be seen if this is a good idea\.
-.
-.SS "browser"
-.
-.IP "\(bu" 4
-Default: OS X: \fB"open"\fR, others: \fB"google\-chrome"\fR
-.
-.IP "\(bu" 4
-Type: String
-.
-.IP "" 0
-.
-.P
-The browser that is called by the \fBnpm docs\fR command to open websites\.
-.
-.SS "ca"
-.
-.IP "\(bu" 4
-Default: The npm CA certificate
-.
-.IP "\(bu" 4
-Type: String or null
-.
-.IP "" 0
-.
-.P
-The Certificate Authority signing certificate that is trusted for SSL
-connections to the registry\.
-.
-.P
-Set to \fBnull\fR to only allow "known" registrars, or to a specific CA cert
-to trust only that specific signing authority\.
-.
-.P
-See also the \fBstrict\-ssl\fR config\.
-.
-.SS "cache"
-.
-.IP "\(bu" 4
-Default: Windows: \fB~/npm\-cache\fR, Posix: \fB~/\.npm\fR
-.
-.IP "\(bu" 4
-Type: path
-.
-.IP "" 0
-.
-.P
-The location of npm\'s cache directory\. See \fBnpm help cache\fR
-.
-.SS "color"
-.
-.IP "\(bu" 4
-Default: true on Posix, false on Windows
-.
-.IP "\(bu" 4
-Type: Boolean or \fB"always"\fR
-.
-.IP "" 0
-.
-.P
-If false, never shows colors\. If \fB"always"\fR then always shows colors\.
-If true, then only prints color codes for tty file descriptors\.
-.
-.SS "depth"
-.
-.IP "\(bu" 4
-Default: Infinity
-.
-.IP "\(bu" 4
-Type: Number
-.
-.IP "" 0
-.
-.P
-The depth to go when recursing directories for \fBnpm ls\fR and \fBnpm cache ls\fR\|\.
-.
-.SS "description"
-.
-.IP "\(bu" 4
-Default: true
-.
-.IP "\(bu" 4
-Type: Boolean
-.
-.IP "" 0
-.
-.P
-Show the description in \fBnpm search\fR
-.
-.SS "dev"
-.
-.IP "\(bu" 4
-Default: false
-.
-.IP "\(bu" 4
-Type: Boolean
-.
-.IP "" 0
-.
-.P
-Install \fBdev\-dependencies\fR along with packages\.
-.
-.P
-Note that \fBdev\-dependencies\fR are also installed if the \fBnpat\fR flag is
-set\.
-.
-.SS "editor"
-.
-.IP "\(bu" 4
-Default: \fBEDITOR\fR environment variable if set, or \fB"vi"\fR on Posix,
-or \fB"notepad"\fR on Windows\.
-.
-.IP "\(bu" 4
-Type: path
-.
-.IP "" 0
-.
-.P
-The command to run for \fBnpm edit\fR or \fBnpm config edit\fR\|\.
-.
-.SS "force"
-.
-.IP "\(bu" 4
-Default: false
-.
-.IP "\(bu" 4
-Type: Boolean
-.
-.IP "" 0
-.
-.P
-Makes various commands more forceful\.
-.
-.IP "\(bu" 4
-lifecycle script failure does not block progress\.
-.
-.IP "\(bu" 4
-publishing clobbers previously published versions\.
-.
-.IP "\(bu" 4
-skips cache when requesting from the registry\.
-.
-.IP "\(bu" 4
-prevents checks against clobbering non\-npm files\.
-.
-.IP "" 0
-.
-.SS "global"
-.
-.IP "\(bu" 4
-Default: false
-.
-.IP "\(bu" 4
-Type: Boolean
-.
-.IP "" 0
-.
-.P
-Operates in "global" mode, so that packages are installed into the \fBprefix\fR folder instead of the current working directory\. See \fBnpm help folders\fR for more on the differences in behavior\.
-.
-.IP "\(bu" 4
-packages are installed into the \fBprefix/node_modules\fR folder, instead of the
-current working directory\.
-.
-.IP "\(bu" 4
-bin files are linked to \fBprefix/bin\fR
-.
-.IP "\(bu" 4
-man pages are linked to \fBprefix/share/man\fR
-.
-.IP "" 0
-.
-.SS "globalconfig"
-.
-.IP "\(bu" 4
-Default: {prefix}/etc/npmrc
-.
-.IP "\(bu" 4
-Type: path
-.
-.IP "" 0
-.
-.P
-The config file to read for global config options\.
-.
-.SS "globalignorefile"
-.
-.IP "\(bu" 4
-Default: {prefix}/etc/npmignore
-.
-.IP "\(bu" 4
-Type: path
-.
-.IP "" 0
-.
-.P
-The config file to read for global ignore patterns to apply to all users
-and all projects\.
-.
-.P
-If not found, but there is a "gitignore" file in the
-same directory, then that will be used instead\.
-.
-.SS "group"
-.
-.IP "\(bu" 4
-Default: GID of the current process
-.
-.IP "\(bu" 4
-Type: String or Number
-.
-.IP "" 0
-.
-.P
-The group to use when running package scripts in global mode as the root
-user\.
-.
-.SS "https\-proxy"
-.
-.IP "\(bu" 4
-Default: the \fBHTTPS_PROXY\fR or \fBhttps_proxy\fR or \fBHTTP_PROXY\fR or \fBhttp_proxy\fR environment variables\.
-.
-.IP "\(bu" 4
-Type: url
-.
-.IP "" 0
-.
-.P
-A proxy to use for outgoing https requests\.
-.
-.SS "ignore"
-.
-.IP "\(bu" 4
-Default: ""
-.
-.IP "\(bu" 4
-Type: string
-.
-.IP "" 0
-.
-.P
-A white\-space separated list of glob patterns of files to always exclude
-from packages when building tarballs\.
-.
-.SS "init\.version"
-.
-.IP "\(bu" 4
-Default: "0\.0\.0"
-.
-.IP "\(bu" 4
-Type: semver
-.
-.IP "" 0
-.
-.P
-The value \fBnpm init\fR should use by default for the package version\.
-.
-.SS "init\.author\.name"
-.
-.IP "\(bu" 4
-Default: "0\.0\.0"
-.
-.IP "\(bu" 4
-Type: String
-.
-.IP "" 0
-.
-.P
-The value \fBnpm init\fR should use by default for the package author\'s name\.
-.
-.SS "init\.author\.email"
-.
-.IP "\(bu" 4
-Default: ""
-.
-.IP "\(bu" 4
-Type: String
-.
-.IP "" 0
-.
-.P
-The value \fBnpm init\fR should use by default for the package author\'s email\.
-.
-.SS "init\.author\.url"
-.
-.IP "\(bu" 4
-Default: ""
-.
-.IP "\(bu" 4
-Type: String
-.
-.IP "" 0
-.
-.P
-The value \fBnpm init\fR should use by default for the package author\'s homepage\.
-.
-.SS "link"
-.
-.IP "\(bu" 4
-Default: false
-.
-.IP "\(bu" 4
-Type: Boolean
-.
-.IP "" 0
-.
-.P
-If true, then local installs will link if there is a suitable globally
-installed package\.
-.
-.P
-Note that this means that local installs can cause things to be
-installed into the global space at the same time\. The link is only done
-if one of the two conditions are met:
-.
-.IP "\(bu" 4
-The package is not already installed globally, or
-.
-.IP "\(bu" 4
-the globally installed version is identical to the version that is
-being installed locally\.
-.
-.IP "" 0
-.
-.SS "logfd"
-.
-.IP "\(bu" 4
-Default: stderr file descriptor
-.
-.IP "\(bu" 4
-Type: Number or Stream
-.
-.IP "" 0
-.
-.P
-The location to write log output\.
-.
-.SS "loglevel"
-.
-.IP "\(bu" 4
-Default: "warn"
-.
-.IP "\(bu" 4
-Type: String
-.
-.IP "\(bu" 4
-Values: "silent", "win", "error", "warn", "info", "verbose", "silly"
-.
-.IP "" 0
-.
-.P
-What level of logs to report\. On failure, \fIall\fR logs are written to \fBnpm\-debug\.log\fR in the current working directory\.
-.
-.SS "logprefix"
-.
-.IP "\(bu" 4
-Default: true on Posix, false on Windows
-.
-.IP "\(bu" 4
-Type: Boolean
-.
-.IP "" 0
-.
-.P
-Whether or not to prefix log messages with "npm" and the log level\. See
-also "color" and "loglevel"\.
-.
-.SS "long"
-.
-.IP "\(bu" 4
-Default: false
-.
-.IP "\(bu" 4
-Type: Boolean
-.
-.IP "" 0
-.
-.P
-Show extended information in \fBnpm ls\fR
-.
-.SS "message"
-.
-.IP "\(bu" 4
-Default: "%s"
-.
-.IP "\(bu" 4
-Type: String
-.
-.IP "" 0
-.
-.P
-Commit message which is used by \fBnpm version\fR when creating version commit\.
-.
-.P
-Any "%s" in the message will be replaced with the version number\.
-.
-.SS "node\-version"
-.
-.IP "\(bu" 4
-Default: process\.version
-.
-.IP "\(bu" 4
-Type: semver or false
-.
-.IP "" 0
-.
-.P
-The node version to use when checking package\'s "engines" hash\.
-.
-.SS "npat"
-.
-.IP "\(bu" 4
-Default: false
-.
-.IP "\(bu" 4
-Type: Boolean
-.
-.IP "" 0
-.
-.P
-Run tests on installation and report results to the \fBnpaturl\fR\|\.
-.
-.SS "npaturl"
-.
-.IP "\(bu" 4
-Default: Not yet implemented
-.
-.IP "\(bu" 4
-Type: url
-.
-.IP "" 0
-.
-.P
-The url to report npat test results\.
-.
-.SS "onload\-script"
-.
-.IP "\(bu" 4
-Default: false
-.
-.IP "\(bu" 4
-Type: path
-.
-.IP "" 0
-.
-.P
-A node module to \fBrequire()\fR when npm loads\. Useful for programmatic
-usage\.
-.
-.SS "outfd"
-.
-.IP "\(bu" 4
-Default: standard output file descriptor
-.
-.IP "\(bu" 4
-Type: Number or Stream
-.
-.IP "" 0
-.
-.P
-Where to write "normal" output\. This has no effect on log output\.
-.
-.SS "parseable"
-.
-.IP "\(bu" 4
-Default: false
-.
-.IP "\(bu" 4
-Type: Boolean
-.
-.IP "" 0
-.
-.P
-Output parseable results from commands that write to
-standard output\.
-.
-.SS "prefix"
-.
-.IP "\(bu" 4
-Default: node\'s process\.installPrefix
-.
-.IP "\(bu" 4
-Type: path
-.
-.IP "" 0
-.
-.P
-The location to install global items\. If set on the command line, then
-it forces non\-global commands to run in the specified folder\.
-.
-.SS "production"
-.
-.IP "\(bu" 4
-Default: false
-.
-.IP "\(bu" 4
-Type: Boolean
-.
-.IP "" 0
-.
-.P
-Set to true to run in "production" mode\.
-.
-.IP "1" 4
-devDependencies are not installed at the topmost level when running
-local \fBnpm install\fR without any arguments\.
-.
-.IP "2" 4
-Set the NODE_ENV="production" for lifecycle scripts\.
-.
-.IP "" 0
-.
-.SS "proxy"
-.
-.IP "\(bu" 4
-Default: \fBHTTP_PROXY\fR or \fBhttp_proxy\fR environment variable, or null
-.
-.IP "\(bu" 4
-Type: url
-.
-.IP "" 0
-.
-.P
-A proxy to use for outgoing http requests\.
-.
-.SS "rebuild\-bundle"
-.
-.IP "\(bu" 4
-Default: true
-.
-.IP "\(bu" 4
-Type: Boolean
-.
-.IP "" 0
-.
-.P
-Rebuild bundled dependencies after installation\.
-.
-.SS "registry"
-.
-.IP "\(bu" 4
-Default: https://registry\.npmjs\.org/
-.
-.IP "\(bu" 4
-Type: url
-.
-.IP "" 0
-.
-.P
-The base URL of the npm package registry\.
-.
-.SS "rollback"
-.
-.IP "\(bu" 4
-Default: true
-.
-.IP "\(bu" 4
-Type: Boolean
-.
-.IP "" 0
-.
-.P
-Remove failed installs\.
-.
-.SS "save"
-.
-.IP "\(bu" 4
-Default: false
-.
-.IP "\(bu" 4
-Type: Boolean
-.
-.IP "" 0
-.
-.P
-Save installed packages to a package\.json file as dependencies\.
-.
-.P
-Only works if there is already a package\.json file present\.
-.
-.SS "searchopts"
-.
-.IP "\(bu" 4
-Default: ""
-.
-.IP "\(bu" 4
-Type: String
-.
-.IP "" 0
-.
-.P
-Space\-separated options that are always passed to search\.
-.
-.SS "searchexclude"
-.
-.IP "\(bu" 4
-Default: ""
-.
-.IP "\(bu" 4
-Type: String
-.
-.IP "" 0
-.
-.P
-Space\-separated options that limit the results from search\.
-.
-.SS "shell"
-.
-.IP "\(bu" 4
-Default: SHELL environment variable, or "bash" on Posix, or "cmd" on
-Windows
-.
-.IP "\(bu" 4
-Type: path
-.
-.IP "" 0
-.
-.P
-The shell to run for the \fBnpm explore\fR command\.
-.
-.SS "strict\-ssl"
-.
-.IP "\(bu" 4
-Default: true
-.
-.IP "\(bu" 4
-Type: Boolean
-.
-.IP "" 0
-.
-.P
-Whether or not to do SSL key validation when making requests to the
-registry via https\.
-.
-.P
-See also the \fBca\fR config\.
-.
-.SS "tag"
-.
-.IP "\(bu" 4
-Default: latest
-.
-.IP "\(bu" 4
-Type: String
-.
-.IP "" 0
-.
-.P
-If you ask npm to install a package and don\'t tell it a specific version, then
-it will install the specified tag\.
-.
-.P
-Also the tag that is added to the package@version specified by the \fBnpm
-tag\fR command, if no explicit tag is given\.
-.
-.SS "tmp"
-.
-.IP "\(bu" 4
-Default: TMPDIR environment variable, or "/tmp"
-.
-.IP "\(bu" 4
-Type: path
-.
-.IP "" 0
-.
-.P
-Where to store temporary files and folders\. All temp files are deleted
-on success, but left behind on failure for forensic purposes\.
-.
-.SS "unicode"
-.
-.IP "\(bu" 4
-Default: true
-.
-.IP "\(bu" 4
-Type: Boolean
-.
-.IP "" 0
-.
-.P
-When set to true, npm uses unicode characters in the tree output\. When
-false, it uses ascii characters to draw trees\.
-.
-.SS "unsafe\-perm"
-.
-.IP "\(bu" 4
-Default: false if running as root, true otherwise
-.
-.IP "\(bu" 4
-Type: Boolean
-.
-.IP "" 0
-.
-.P
-Set to true to suppress the UID/GID switching when running package
-scripts\. If set explicitly to false, then installing as a non\-root user
-will fail\.
-.
-.SS "usage"
-.
-.IP "\(bu" 4
-Default: false
-.
-.IP "\(bu" 4
-Type: Boolean
-.
-.IP "" 0
-.
-.P
-Set to show short usage output (like the \-H output)
-instead of complete help when doing \fBnpm help help\fR\|\.
-.
-.SS "user"
-.
-.IP "\(bu" 4
-Default: "nobody"
-.
-.IP "\(bu" 4
-Type: String or Number
-.
-.IP "" 0
-.
-.P
-The UID to set to when running package scripts as root\.
-.
-.SS "username"
-.
-.IP "\(bu" 4
-Default: null
-.
-.IP "\(bu" 4
-Type: String
-.
-.IP "" 0
-.
-.P
-The username on the npm registry\. Set with \fBnpm adduser\fR
-.
-.SS "userconfig"
-.
-.IP "\(bu" 4
-Default: ~/\.npmrc
-.
-.IP "\(bu" 4
-Type: path
-.
-.IP "" 0
-.
-.P
-The location of user\-level configuration settings\.
-.
-.SS "userignorefile"
-.
-.IP "\(bu" 4
-Default: ~/\.npmignore
-.
-.IP "\(bu" 4
-Type: path
-.
-.IP "" 0
-.
-.P
-The location of a user\-level ignore file to apply to all packages\.
-.
-.P
-If not found, but there is a \.gitignore file in the same directory, then
-that will be used instead\.
-.
-.SS "umask"
-.
-.IP "\(bu" 4
-Default: 022
-.
-.IP "\(bu" 4
-Type: Octal numeric string
-.
-.IP "" 0
-.
-.P
-The "umask" value to use when setting the file creation mode on files
-and folders\.
-.
-.P
-Folders and executables are given a mode which is \fB0777\fR masked against
-this value\. Other files are given a mode which is \fB0666\fR masked against
-this value\. Thus, the defaults are \fB0755\fR and \fB0644\fR respectively\.
-.
-.SS "version"
-.
-.IP "\(bu" 4
-Default: false
-.
-.IP "\(bu" 4
-Type: boolean
-.
-.IP "" 0
-.
-.P
-If true, output the npm version and exit successfully\.
-.
-.P
-Only relevant when specified explicitly on the command line\.
-.
-.SS "viewer"
-.
-.IP "\(bu" 4
-Default: "man" on Posix, "browser" on Windows
-.
-.IP "\(bu" 4
-Type: path
-.
-.IP "" 0
-.
-.P
-The program to use to view help content\.
-.
-.P
-Set to \fB"browser"\fR to view html help content in the default web browser\.
-.
-.SS "yes"
-.
-.IP "\(bu" 4
-Default: null
-.
-.IP "\(bu" 4
-Type: Boolean or null
-.
-.IP "" 0
-.
-.P
-If set to \fBnull\fR, then prompt the user for responses in some
-circumstances\.
-.
-.P
-If set to \fBtrue\fR, then answer "yes" to any prompt\. If set to \fBfalse\fR
-then answer "no" to any prompt\.
-.
-.SH "SEE ALSO"
-.
-.IP "\(bu" 4
-npm help folders
-.
-.IP "\(bu" 4
-npm help npm
-.
-.IP "" 0
-
diff --git a/deps/npm/man/man1/global.1 b/deps/npm/man/man1/global.1
deleted file mode 100644
index 36ebf1777..000000000
--- a/deps/npm/man/man1/global.1
+++ /dev/null
@@ -1,258 +0,0 @@
-.\" Generated with Ronnjs 0.3.8
-.\" http://github.com/kapouer/ronnjs/
-.
-.TH "NPM\-FOLDERS" "1" "June 2013" "" ""
-.
-.SH "NAME"
-\fBnpm-folders\fR \-\- Folder Structures Used by npm
-.
-.SH "DESCRIPTION"
-npm puts various things on your computer\. That\'s its job\.
-.
-.P
-This document will tell you what it puts where\.
-.
-.SS "tl;dr"
-.
-.IP "\(bu" 4
-Local install (default): puts stuff in \fB\|\./node_modules\fR of the current
-package root\.
-.
-.IP "\(bu" 4
-Global install (with \fB\-g\fR): puts stuff in /usr/local or wherever node
-is installed\.
-.
-.IP "\(bu" 4
-Install it \fBlocally\fR if you\'re going to \fBrequire()\fR it\.
-.
-.IP "\(bu" 4
-Install it \fBglobally\fR if you\'re going to run it on the command line\.
-.
-.IP "\(bu" 4
-If you need both, then install it in both places, or use \fBnpm link\fR\|\.
-.
-.IP "" 0
-.
-.SS "prefix Configuration"
-The \fBprefix\fR config defaults to the location where node is installed\.
-On most systems, this is \fB/usr/local\fR, and most of the time is the same
-as node\'s \fBprocess\.installPrefix\fR\|\.
-.
-.P
-On windows, this is the exact location of the node\.exe binary\. On Unix
-systems, it\'s one level up, since node is typically installed at \fB{prefix}/bin/node\fR rather than \fB{prefix}/node\.exe\fR\|\.
-.
-.P
-When the \fBglobal\fR flag is set, npm installs things into this prefix\.
-When it is not set, it uses the root of the current package, or the
-current working directory if not in a package already\.
-.
-.SS "Node Modules"
-Packages are dropped into the \fBnode_modules\fR folder under the \fBprefix\fR\|\.
-When installing locally, this means that you can \fBrequire("packagename")\fR to load its main module, or \fBrequire("packagename/lib/path/to/sub/module")\fR to load other modules\.
-.
-.P
-Global installs on Unix systems go to \fB{prefix}/lib/node_modules\fR\|\.
-Global installs on Windows go to \fB{prefix}/node_modules\fR (that is, no \fBlib\fR folder\.)
-.
-.P
-If you wish to \fBrequire()\fR a package, then install it locally\.
-.
-.SS "Executables"
-When in global mode, executables are linked into \fB{prefix}/bin\fR on Unix,
-or directly into \fB{prefix}\fR on Windows\.
-.
-.P
-When in local mode, executables are linked into \fB\|\./node_modules/\.bin\fR so that they can be made available to scripts run
-through npm\. (For example, so that a test runner will be in the path
-when you run \fBnpm test\fR\|\.)
-.
-.SS "Man Pages"
-When in global mode, man pages are linked into \fB{prefix}/share/man\fR\|\.
-.
-.P
-When in local mode, man pages are not installed\.
-.
-.P
-Man pages are not installed on Windows systems\.
-.
-.SS "Cache"
-See \fBnpm help cache\fR\|\. Cache files are stored in \fB~/\.npm\fR on Posix, or \fB~/npm\-cache\fR on Windows\.
-.
-.P
-This is controlled by the \fBcache\fR configuration param\.
-.
-.SS "Temp Files"
-Temporary files are stored by default in the folder specified by the \fBtmp\fR config, which defaults to the TMPDIR, TMP, or TEMP environment
-variables, or \fB/tmp\fR on Unix and \fBc:\\windows\\temp\fR on Windows\.
-.
-.P
-Temp files are given a unique folder under this root for each run of the
-program, and are deleted upon successful exit\.
-.
-.SH "More Information"
-When installing locally, npm first tries to find an appropriate \fBprefix\fR folder\. This is so that \fBnpm install foo@1\.2\.3\fR will install
-to the sensible root of your package, even if you happen to have \fBcd\fRed
-into some other folder\.
-.
-.P
-Starting at the $PWD, npm will walk up the folder tree checking for a
-folder that contains either a \fBpackage\.json\fR file, or a \fBnode_modules\fR
-folder\. If such a thing is found, then that is treated as the effective
-"current directory" for the purpose of running npm commands\. (This
-behavior is inspired by and similar to git\'s \.git\-folder seeking
-logic when running git commands in a working dir\.)
-.
-.P
-If no package root is found, then the current folder is used\.
-.
-.P
-When you run \fBnpm install foo@1\.2\.3\fR, then the package is loaded into
-the cache, and then unpacked into \fB\|\./node_modules/foo\fR\|\. Then, any of
-foo\'s dependencies are similarly unpacked into \fB\|\./node_modules/foo/node_modules/\.\.\.\fR\|\.
-.
-.P
-Any bin files are symlinked to \fB\|\./node_modules/\.bin/\fR, so that they may
-be found by npm scripts when necessary\.
-.
-.SS "Global Installation"
-If the \fBglobal\fR configuration is set to true, then npm will
-install packages "globally"\.
-.
-.P
-For global installation, packages are installed roughly the same way,
-but using the folders described above\.
-.
-.SS "Cycles, Conflicts, and Folder Parsimony"
-Cycles are handled using the property of node\'s module system that it
-walks up the directories looking for \fBnode_modules\fR folders\. So, at every
-stage, if a package is already installed in an ancestor \fBnode_modules\fR
-folder, then it is not installed at the current location\.
-.
-.P
-Consider the case above, where \fBfoo \-> bar \-> baz\fR\|\. Imagine if, in
-addition to that, baz depended on bar, so you\'d have: \fBfoo \-> bar \-> baz \-> bar \-> baz \.\.\.\fR\|\. However, since the folder
-structure is: \fBfoo/node_modules/bar/node_modules/baz\fR, there\'s no need to
-put another copy of bar into \fB\|\.\.\./baz/node_modules\fR, since when it calls
-require("bar"), it will get the copy that is installed in \fBfoo/node_modules/bar\fR\|\.
-.
-.P
-This shortcut is only used if the exact same
-version would be installed in multiple nested \fBnode_modules\fR folders\. It
-is still possible to have \fBa/node_modules/b/node_modules/a\fR if the two
-"a" packages are different versions\. However, without repeating the
-exact same package multiple times, an infinite regress will always be
-prevented\.
-.
-.P
-Another optimization can be made by installing dependencies at the
-highest level possible, below the localized "target" folder\.
-.
-.SS "\fIExample\fR"
-Consider this dependency graph:
-.
-.IP "" 4
-.
-.nf
-foo
-+\-\- blerg@1\.2\.5
-+\-\- bar@1\.2\.3
-| +\-\- blerg@1\.x (latest=1\.3\.7)
-| +\-\- baz@2\.x
-| | `\-\- quux@3\.x
-| | `\-\- bar@1\.2\.3 (cycle)
-| `\-\- asdf@*
-`\-\- baz@1\.2\.3
- `\-\- quux@3\.x
- `\-\- bar
-.
-.fi
-.
-.IP "" 0
-.
-.P
-In this case, we might expect a folder structure like this:
-.
-.IP "" 4
-.
-.nf
-foo
-+\-\- node_modules
- +\-\- blerg (1\.2\.5) <\-\-\-[A]
- +\-\- bar (1\.2\.3) <\-\-\-[B]
- | +\-\- node_modules
- | | `\-\- baz (2\.0\.2) <\-\-\-[C]
- | | `\-\- node_modules
- | | `\-\- quux (3\.2\.0)
- | `\-\- asdf (2\.3\.4)
- `\-\- baz (1\.2\.3) <\-\-\-[D]
- `\-\- node_modules
- `\-\- quux (3\.2\.0) <\-\-\-[E]
-.
-.fi
-.
-.IP "" 0
-.
-.P
-Since foo depends directly on bar@1\.2\.3 and baz@1\.2\.3, those are
-installed in foo\'s \fBnode_modules\fR folder\.
-.
-.P
-Even though the latest copy of blerg is 1\.3\.7, foo has a specific
-dependency on version 1\.2\.5\. So, that gets installed at [A]\. Since the
-parent installation of blerg satisfie\'s bar\'s dependency on blerg@1\.x,
-it does not install another copy under [B]\.
-.
-.P
-Bar [B] also has dependencies on baz and asdf, so those are installed in
-bar\'s \fBnode_modules\fR folder\. Because it depends on \fBbaz@2\.x\fR, it cannot
-re\-use the \fBbaz@1\.2\.3\fR installed in the parent \fBnode_modules\fR folder [D],
-and must install its own copy [C]\.
-.
-.P
-Underneath bar, the \fBbaz\->quux\->bar\fR dependency creates a cycle\.
-However, because \fBbar\fR is already in \fBquux\fR\'s ancestry [B], it does not
-unpack another copy of bar into that folder\.
-.
-.P
-Underneath \fBfoo\->baz\fR [D], quux\'s [E] folder tree is empty, because its
-dependency on bar is satisfied by the parent folder copy installed at [B]\.
-.
-.P
-For a graphical breakdown of what is installed where, use \fBnpm ls\fR\|\.
-.
-.SS "Publishing"
-Upon publishing, npm will look in the \fBnode_modules\fR folder\. If any of
-the items there are not in the \fBbundledDependencies\fR array, then they will
-not be included in the package tarball\.
-.
-.P
-This allows a package maintainer to install all of their dependencies
-(and dev dependencies) locally, but only re\-publish those items that
-cannot be found elsewhere\. See \fBnpm help json\fR for more information\.
-.
-.SH "SEE ALSO"
-.
-.IP "\(bu" 4
-npm help faq
-.
-.IP "\(bu" 4
-npm help json
-.
-.IP "\(bu" 4
-npm help install
-.
-.IP "\(bu" 4
-npm help pack
-.
-.IP "\(bu" 4
-npm help cache
-.
-.IP "\(bu" 4
-npm help config
-.
-.IP "\(bu" 4
-npm help publish
-.
-.IP "" 0
-
diff --git a/deps/npm/man/man1/help-search.1 b/deps/npm/man/man1/help-search.1
deleted file mode 100644
index 8f1a6f0ee..000000000
--- a/deps/npm/man/man1/help-search.1
+++ /dev/null
@@ -1,59 +0,0 @@
-.\" Generated with Ronnjs 0.3.8
-.\" http://github.com/kapouer/ronnjs/
-.
-.TH "NPM\-HELP\-SEARCH" "1" "June 2013" "" ""
-.
-.SH "NAME"
-\fBnpm-help-search\fR \-\- Search npm help documentation
-.
-.SH "SYNOPSIS"
-.
-.nf
-npm help\-search some search terms
-.
-.fi
-.
-.SH "DESCRIPTION"
-This command will search the npm markdown documentation files for the
-terms provided, and then list the results, sorted by relevance\.
-.
-.P
-If only one result is found, then it will show that help topic\.
-.
-.P
-If the argument to \fBnpm help\fR is not a known help topic, then it will
-call \fBhelp\-search\fR\|\. It is rarely if ever necessary to call this
-command directly\.
-.
-.SH "CONFIGURATION"
-.
-.SS "long"
-.
-.IP "\(bu" 4
-Type: Boolean
-.
-.IP "\(bu" 4
-Default false
-.
-.IP "" 0
-.
-.P
-If true, the "long" flag will cause help\-search to output context around
-where the terms were found in the documentation\.
-.
-.P
-If false, then help\-search will just list out the help topics found\.
-.
-.SH "SEE ALSO"
-.
-.IP "\(bu" 4
-npm help npm
-.
-.IP "\(bu" 4
-npm help faq
-.
-.IP "\(bu" 4
-npm help help
-.
-.IP "" 0
-
diff --git a/deps/npm/man/man1/help.1 b/deps/npm/man/man1/help.1
deleted file mode 100644
index bdf4d1aa5..000000000
--- a/deps/npm/man/man1/help.1
+++ /dev/null
@@ -1,71 +0,0 @@
-.\" Generated with Ronnjs 0.3.8
-.\" http://github.com/kapouer/ronnjs/
-.
-.TH "NPM\-HELP" "1" "June 2013" "" ""
-.
-.SH "NAME"
-\fBnpm-help\fR \-\- Get help on npm
-.
-.SH "SYNOPSIS"
-.
-.nf
-npm help <topic>
-npm help some search terms
-.
-.fi
-.
-.SH "DESCRIPTION"
-If supplied a topic, then show the appropriate documentation page\.
-.
-.P
-If the topic does not exist, or if multiple terms are provided, then run
-the \fBhelp\-search\fR command to find a match\. Note that, if \fBhelp\-search\fR
-finds a single subject, then it will run \fBhelp\fR on that topic, so unique
-matches are equivalent to specifying a topic name\.
-.
-.SH "CONFIGURATION"
-.
-.SS "viewer"
-.
-.IP "\(bu" 4
-Default: "man" on Posix, "browser" on Windows
-.
-.IP "\(bu" 4
-Type: path
-.
-.IP "" 0
-.
-.P
-The program to use to view help content\.
-.
-.P
-Set to \fB"browser"\fR to view html help content in the default web browser\.
-.
-.SH "SEE ALSO"
-.
-.IP "\(bu" 4
-npm help npm
-.
-.IP "\(bu" 4
-README
-.
-.IP "\(bu" 4
-npm help faq
-.
-.IP "\(bu" 4
-npm help folders
-.
-.IP "\(bu" 4
-npm help config
-.
-.IP "\(bu" 4
-npm help json
-.
-.IP "\(bu" 4
-npm help help\-search
-.
-.IP "\(bu" 4
-npm help index
-.
-.IP "" 0
-
diff --git a/deps/npm/man/man1/home.1 b/deps/npm/man/man1/home.1
deleted file mode 100644
index c63dd3cd9..000000000
--- a/deps/npm/man/man1/home.1
+++ /dev/null
@@ -1,68 +0,0 @@
-.\" Generated with Ronnjs/v0.1
-.\" http://github.com/kapouer/ronnjs/
-.
-.TH "NPM\-DOCS" "1" "November 2011" "" ""
-.
-.SH "NAME"
-\fBnpm-docs\fR \-\- Docs for a package in a web browser maybe
-.
-.SH "SYNOPSIS"
-.
-.nf
-npm docs <pkgname>
-npm home <pkgname>
-.
-.fi
-.
-.SH "DESCRIPTION"
-This command tries to guess at the likely location of a package\'s
-documentation URL, and then tries to open it using the \fB\-\-browser\fR
-config param\.
-.
-.SH "CONFIGURATION"
-.
-.SS "browser"
-.
-.IP "\(bu" 4
-Default: OS X: \fB"open"\fR, others: \fB"google\-chrome"\fR
-.
-.IP "\(bu" 4
-Type: String
-.
-.IP "" 0
-.
-.P
-The browser that is called by the \fBnpm docs\fR command to open websites\.
-.
-.SS "registry"
-.
-.IP "\(bu" 4
-Default: https://registry\.npmjs\.org/
-.
-.IP "\(bu" 4
-Type: url
-.
-.IP "" 0
-.
-.P
-The base URL of the npm package registry\.
-.
-.SH "SEE ALSO"
-.
-.IP "\(bu" 4
-npm help view
-.
-.IP "\(bu" 4
-npm help publish
-.
-.IP "\(bu" 4
-npm help registry
-.
-.IP "\(bu" 4
-npm help config
-.
-.IP "\(bu" 4
-npm help json
-.
-.IP "" 0
-
diff --git a/deps/npm/man/man1/index.1 b/deps/npm/man/man1/index.1
deleted file mode 100644
index 39b7c2e05..000000000
--- a/deps/npm/man/man1/index.1
+++ /dev/null
@@ -1,298 +0,0 @@
-.\" Generated with Ronnjs 0.3.8
-.\" http://github.com/kapouer/ronnjs/
-.
-.TH "NPM\-INDEX" "1" "June 2013" "" ""
-.
-.SH "NAME"
-\fBnpm-index\fR \-\- Index of all npm documentation
-.
-.SH "npm help README"
- node package manager
-.
-.SH "npm help adduser"
- Add a registry user account
-.
-.SH "npm help bin"
- Display npm bin folder
-.
-.SH "npm help bugs"
- Bugs for a package in a web browser maybe
-.
-.SH "npm help build"
- Build a package
-.
-.SH "npm help bundle"
- REMOVED
-.
-.SH "npm help cache"
- Manipulates packages cache
-.
-.SH "npm help changelog"
- Changes
-.
-.SH "npm help coding\-style"
- npm\'s "funny" coding style
-.
-.SH "npm help completion"
- Tab Completion for npm
-.
-.SH "npm help config"
- Manage the npm configuration file
-.
-.SH "npm help dedupe"
- Reduce duplication
-.
-.SH "npm help deprecate"
- Deprecate a version of a package
-.
-.SH "npm help developers"
- Developer Guide
-.
-.SH "npm help disputes"
- Handling Module Name Disputes
-.
-.SH "npm help docs"
- Docs for a package in a web browser maybe
-.
-.SH "npm help edit"
- Edit an installed package
-.
-.SH "npm help explore"
- Browse an installed package
-.
-.SH "npm help faq"
- Frequently Asked Questions
-.
-.SH "npm help folders"
- Folder Structures Used by npm
-.
-.SH "npm help global"
- Folder Structures Used by npm
-.
-.SH "npm help help\-search"
- Search npm help documentation
-.
-.SH "npm help help"
- Get help on npm
-.
-.SH "npm help init"
- Interactively create a package\.json file
-.
-.SH "npm help install"
- Install a package
-.
-.SH "npm help json"
- Specifics of npm\'s package\.json handling
-.
-.SH "npm help link"
- Symlink a package folder
-.
-.SH "npm help ls"
- List installed packages
-.
-.SH "npm help npm"
- node package manager
-.
-.SH "npm help outdated"
- Check for outdated packages
-.
-.SH "npm help owner"
- Manage package owners
-.
-.SH "npm help pack"
- Create a tarball from a package
-.
-.SH "npm help prefix"
- Display prefix
-.
-.SH "npm help prune"
- Remove extraneous packages
-.
-.SH "npm help publish"
- Publish a package
-.
-.SH "npm help rebuild"
- Rebuild a package
-.
-.SH "npm help registry"
- The JavaScript Package Registry
-.
-.SH "npm help removing\-npm"
- Cleaning the Slate
-.
-.SH "npm help restart"
- Start a package
-.
-.SH "npm help rm"
- Remove a package
-.
-.SH "npm help root"
- Display npm root
-.
-.SH "npm help run\-script"
- Run arbitrary package scripts
-.
-.SH "npm help scripts"
- How npm handles the "scripts" field
-.
-.SH "npm help search"
- Search for packages
-.
-.SH "npm help semver"
- The semantic versioner for npm
-.
-.SH "npm help shrinkwrap"
- Lock down dependency versions
-.
-.SH "npm help star"
- Mark your favorite packages
-.
-.SH "npm help stars"
- View packages marked as favorites
-.
-.SH "npm help start"
- Start a package
-.
-.SH "npm help stop"
- Stop a package
-.
-.SH "npm help submodule"
- Add a package as a git submodule
-.
-.SH "npm help tag"
- Tag a published version
-.
-.SH "npm help test"
- Test a package
-.
-.SH "npm help uninstall"
- Remove a package
-.
-.SH "npm help unpublish"
- Remove a package from the registry
-.
-.SH "npm help update"
- Update a package
-.
-.SH "npm help version"
- Bump a package version
-.
-.SH "npm help view"
- View registry info
-.
-.SH "npm help whoami"
- Display npm username
-.
-.SH "npm apihelp bin"
- Display npm bin folder
-.
-.SH "npm apihelp bugs"
- Bugs for a package in a web browser maybe
-.
-.SH "npm apihelp commands"
- npm commands
-.
-.SH "npm apihelp config"
- Manage the npm configuration files
-.
-.SH "npm apihelp deprecate"
- Deprecate a version of a package
-.
-.SH "npm apihelp docs"
- Docs for a package in a web browser maybe
-.
-.SH "npm apihelp edit"
- Edit an installed package
-.
-.SH "npm apihelp explore"
- Browse an installed package
-.
-.SH "npm apihelp help\-search"
- Search the help pages
-.
-.SH "npm apihelp init"
- Interactively create a package\.json file
-.
-.SH "npm apihelp install"
- install a package programmatically
-.
-.SH "npm apihelp link"
- Symlink a package folder
-.
-.SH "npm apihelp load"
- Load config settings
-.
-.SH "npm apihelp ls"
- List installed packages
-.
-.SH "npm apihelp npm"
- node package manager
-.
-.SH "npm apihelp outdated"
- Check for outdated packages
-.
-.SH "npm apihelp owner"
- Manage package owners
-.
-.SH "npm apihelp pack"
- Create a tarball from a package
-.
-.SH "npm apihelp prefix"
- Display prefix
-.
-.SH "npm apihelp prune"
- Remove extraneous packages
-.
-.SH "npm apihelp publish"
- Publish a package
-.
-.SH "npm apihelp rebuild"
- Rebuild a package
-.
-.SH "npm apihelp restart"
- Start a package
-.
-.SH "npm apihelp root"
- Display npm root
-.
-.SH "npm apihelp run\-script"
- Run arbitrary package scripts
-.
-.SH "npm apihelp search"
- Search for packages
-.
-.SH "npm apihelp shrinkwrap"
- programmatically generate package shrinkwrap file
-.
-.SH "npm apihelp start"
- Start a package
-.
-.SH "npm apihelp stop"
- Stop a package
-.
-.SH "npm apihelp submodule"
- Add a package as a git submodule
-.
-.SH "npm apihelp tag"
- Tag a published version
-.
-.SH "npm apihelp test"
- Test a package
-.
-.SH "npm apihelp uninstall"
- uninstall a package programmatically
-.
-.SH "npm apihelp unpublish"
- Remove a package from the registry
-.
-.SH "npm apihelp update"
- Update a package
-.
-.SH "npm apihelp version"
- Bump a package version
-.
-.SH "npm apihelp view"
- View registry info
-.
-.SH "npm apihelp whoami"
- Display npm username
diff --git a/deps/npm/man/man1/init.1 b/deps/npm/man/man1/init.1
deleted file mode 100644
index 2e40a7aa8..000000000
--- a/deps/npm/man/man1/init.1
+++ /dev/null
@@ -1,43 +0,0 @@
-.\" Generated with Ronnjs 0.3.8
-.\" http://github.com/kapouer/ronnjs/
-.
-.TH "NPM\-INIT" "1" "June 2013" "" ""
-.
-.SH "NAME"
-\fBnpm-init\fR \-\- Interactively create a package\.json file
-.
-.SH "SYNOPSIS"
-.
-.nf
-npm init
-.
-.fi
-.
-.SH "DESCRIPTION"
-This will ask you a bunch of questions, and then write a package\.json for you\.
-.
-.P
-It attempts to make reasonable guesses about what you want things to be set to,
-and then writes a package\.json file with the options you\'ve selected\.
-.
-.P
-If you already have a package\.json file, it\'ll read that first, and default to
-the options in there\.
-.
-.P
-It is strictly additive, so it does not delete options from your package\.json
-without a really good reason to do so\.
-.
-.SH "SEE ALSO"
-.
-.IP "\(bu" 4
-\fIhttps://github\.com/isaacs/init\-package\-json\fR
-.
-.IP "\(bu" 4
-npm help json
-.
-.IP "\(bu" 4
-npm help version
-.
-.IP "" 0
-
diff --git a/deps/npm/man/man1/install.1 b/deps/npm/man/man1/install.1
deleted file mode 100644
index 18bc5060a..000000000
--- a/deps/npm/man/man1/install.1
+++ /dev/null
@@ -1,417 +0,0 @@
-.\" Generated with Ronnjs 0.3.8
-.\" http://github.com/kapouer/ronnjs/
-.
-.TH "NPM\-INSTALL" "1" "June 2013" "" ""
-.
-.SH "NAME"
-\fBnpm-install\fR \-\- Install a package
-.
-.SH "SYNOPSIS"
-.
-.nf
-npm install (with no args in a package dir)
-npm install <tarball file>
-npm install <tarball url>
-npm install <folder>
-npm install <name> [\-\-save|\-\-save\-dev|\-\-save\-optional]
-npm install <name>@<tag>
-npm install <name>@<version>
-npm install <name>@<version range>
-npm install <name>@<version range>
-.
-.fi
-.
-.SH "DESCRIPTION"
-This command installs a package, and any packages that it depends on\. If the
-package has a shrinkwrap file, the installation of dependencies will be driven
-by that\. See npm help shrinkwrap\.
-.
-.P
-A \fBpackage\fR is:
-.
-.IP "\(bu" 4
-a) a folder containing a program described by a package\.json file
-.
-.IP "\(bu" 4
-b) a gzipped tarball containing (a)
-.
-.IP "\(bu" 4
-c) a url that resolves to (b)
-.
-.IP "\(bu" 4
-d) a \fB<name>@<version>\fR that is published on the registry with (c)
-.
-.IP "\(bu" 4
-e) a \fB<name>@<tag>\fR that points to (d)
-.
-.IP "\(bu" 4
-f) a \fB<name>\fR that has a "latest" tag satisfying (e)
-.
-.IP "\(bu" 4
-g) a \fB<git remote url>\fR that resolves to (b)
-.
-.IP "" 0
-.
-.P
-Even if you never publish your package, you can still get a lot of
-benefits of using npm if you just want to write a node program (a), and
-perhaps if you also want to be able to easily install it elsewhere
-after packing it up into a tarball (b)\.
-.
-.IP "\(bu" 4
-\fBnpm install\fR (in package directory, no arguments):
-.
-.IP
-Install the dependencies in the local node_modules folder\.
-.
-.IP
-In global mode (ie, with \fB\-g\fR or \fB\-\-global\fR appended to the command),
-it installs the current package context (ie, the current working
-directory) as a global package\.
-.
-.IP "\(bu" 4
-\fBnpm install <folder>\fR:
-.
-.IP
-Install a package that is sitting in a folder on the filesystem\.
-.
-.IP "\(bu" 4
-\fBnpm install <tarball file>\fR:
-.
-.IP
-Install a package that is sitting on the filesystem\. Note: if you just want
-to link a dev directory into your npm root, you can do this more easily by
-using \fBnpm link\fR\|\.
-.
-.IP
-Example:
-.
-.IP "" 4
-.
-.nf
- npm install \./package\.tgz
-.
-.fi
-.
-.IP "" 0
-
-.
-.IP "\(bu" 4
-\fBnpm install <tarball url>\fR:
-.
-.IP
-Fetch the tarball url, and then install it\. In order to distinguish between
-this and other options, the argument must start with "http://" or "https://"
-.
-.IP
-Example:
-.
-.IP "" 4
-.
-.nf
- npm install https://github\.com/indexzero/forever/tarball/v0\.5\.6
-.
-.fi
-.
-.IP "" 0
-
-.
-.IP "\(bu" 4
-\fBnpm install <name> [\-\-save|\-\-save\-dev|\-\-save\-optional]\fR:
-.
-.IP
-Do a \fB<name>@<tag>\fR install, where \fB<tag>\fR is the "tag" config\. (See \fBnpm help config\fR\|\.)
-.
-.IP
-In most cases, this will install the latest version
-of the module published on npm\.
-.
-.IP
-Example:
-.
-.IP
- npm install sax
-.
-.IP
-\fBnpm install\fR takes 3 exclusive, optional flags which save or update
-the package version in your main package\.json:
-.
-.IP "\(bu" 4
-\fB\-\-save\fR: Package will appear in your \fBdependencies\fR\|\.
-.
-.IP "\(bu" 4
-\fB\-\-save\-dev\fR: Package will appear in your \fBdevDependencies\fR\|\.
-.
-.IP "\(bu" 4
-\fB\-\-save\-optional\fR: Package will appear in your \fBoptionalDependencies\fR\|\.
-.
-.IP
-Examples:
-.
-.IP
- npm install sax \-\-save
- npm install node\-tap \-\-save\-dev
- npm install dtrace\-provider \-\-save\-optional
-.
-.IP
-\fBNote\fR: If there is a file or folder named \fB<name>\fR in the current
-working directory, then it will try to install that, and only try to
-fetch the package by name if it is not valid\.
-.
-.IP "" 0
-
-.
-.IP "\(bu" 4
-\fBnpm install <name>@<tag>\fR:
-.
-.IP
-Install the version of the package that is referenced by the specified tag\.
-If the tag does not exist in the registry data for that package, then this
-will fail\.
-.
-.IP
-Example:
-.
-.IP "" 4
-.
-.nf
- npm install sax@latest
-.
-.fi
-.
-.IP "" 0
-
-.
-.IP "\(bu" 4
-\fBnpm install <name>@<version>\fR:
-.
-.IP
-Install the specified version of the package\. This will fail if the version
-has not been published to the registry\.
-.
-.IP
-Example:
-.
-.IP "" 4
-.
-.nf
- npm install sax@0\.1\.1
-.
-.fi
-.
-.IP "" 0
-
-.
-.IP "\(bu" 4
-\fBnpm install <name>@<version range>\fR:
-.
-.IP
-Install a version of the package matching the specified version range\. This
-will follow the same rules for resolving dependencies described in \fBnpm help json\fR\|\.
-.
-.IP
-Note that most version ranges must be put in quotes so that your shell will
-treat it as a single argument\.
-.
-.IP
-Example:
-.
-.IP
- npm install sax@">=0\.1\.0 <0\.2\.0"
-.
-.IP "\(bu" 4
-\fBnpm install <git remote url>\fR:
-.
-.IP
-Install a package by cloning a git remote url\. The format of the git
-url is:
-.
-.IP
- <protocol>://[<user>@]<hostname><separator><path>[#<commit\-ish>]
-.
-.IP
-\fB<protocol>\fR is one of \fBgit\fR, \fBgit+ssh\fR, \fBgit+http\fR, or \fBgit+https\fR\|\. If no \fB<commit\-ish>\fR is specified, then \fBmaster\fR is
-used\.
-.
-.IP
-Examples:
-.
-.IP "" 4
-.
-.nf
- git+ssh://git@github\.com:isaacs/npm\.git#v1\.0\.27
- git+https://isaacs@github\.com/isaacs/npm\.git
- git://github\.com/isaacs/npm\.git#v1\.0\.27
-.
-.fi
-.
-.IP "" 0
-
-.
-.IP "" 0
-.
-.P
-You may combine multiple arguments, and even multiple types of arguments\.
-For example:
-.
-.IP "" 4
-.
-.nf
-npm install sax@">=0\.1\.0 <0\.2\.0" bench supervisor
-.
-.fi
-.
-.IP "" 0
-.
-.P
-The \fB\-\-tag\fR argument will apply to all of the specified install targets\.
-.
-.P
-The \fB\-\-force\fR argument will force npm to fetch remote resources even if a
-local copy exists on disk\.
-.
-.IP "" 4
-.
-.nf
-npm install sax \-\-force
-.
-.fi
-.
-.IP "" 0
-.
-.P
-The \fB\-\-global\fR argument will cause npm to install the package globally
-rather than locally\. See \fBnpm help folders\fR\|\.
-.
-.P
-The \fB\-\-link\fR argument will cause npm to link global installs into the
-local space in some cases\.
-.
-.P
-The \fB\-\-no\-bin\-links\fR argument will prevent npm from creating symlinks for
-any binaries the package might contain\.
-.
-.P
-The \fB\-\-no\-shrinkwrap\fR argument, which will ignore an available
-shrinkwrap file and use the package\.json instead\.
-.
-.P
-The \fB\-\-nodedir=/path/to/node/source\fR argument will allow npm to find the
-node source code so that npm can compile native modules\.
-.
-.P
-See \fBnpm help config\fR\|\. Many of the configuration params have some
-effect on installation, since that\'s most of what npm does\.
-.
-.SH "ALGORITHM"
-To install a package, npm uses the following algorithm:
-.
-.IP "" 4
-.
-.nf
-install(where, what, family, ancestors)
-fetch what, unpack to <where>/node_modules/<what>
-for each dep in what\.dependencies
- resolve dep to precise version
-for each dep@version in what\.dependencies
- not in <where>/node_modules/<what>/node_modules/*
- and not in <family>
- add precise version deps to <family>
- install(<where>/node_modules/<what>, dep, family)
-.
-.fi
-.
-.IP "" 0
-.
-.P
-For this \fBpackage{dep}\fR structure: \fBA{B,C}, B{C}, C{D}\fR,
-this algorithm produces:
-.
-.IP "" 4
-.
-.nf
-A
-+\-\- B
-`\-\- C
- `\-\- D
-.
-.fi
-.
-.IP "" 0
-.
-.P
-That is, the dependency from B to C is satisfied by the fact that A
-already caused C to be installed at a higher level\.
-.
-.P
-See npm help folders for a more detailed description of the specific
-folder structures that npm creates\.
-.
-.SS "Limitations of npm&#39;s Install Algorithm"
-There are some very rare and pathological edge\-cases where a cycle can
-cause npm to try to install a never\-ending tree of packages\. Here is
-the simplest case:
-.
-.IP "" 4
-.
-.nf
-A \-> B \-> A\' \-> B\' \-> A \-> B \-> A\' \-> B\' \-> A \-> \.\.\.
-.
-.fi
-.
-.IP "" 0
-.
-.P
-where \fBA\fR is some version of a package, and \fBA\'\fR is a different version
-of the same package\. Because \fBB\fR depends on a different version of \fBA\fR
-than the one that is already in the tree, it must install a separate
-copy\. The same is true of \fBA\'\fR, which must install \fBB\'\fR\|\. Because \fBB\'\fR
-depends on the original version of \fBA\fR, which has been overridden, the
-cycle falls into infinite regress\.
-.
-.P
-To avoid this situation, npm flat\-out refuses to install any \fBname@version\fR that is already present anywhere in the tree of package
-folder ancestors\. A more correct, but more complex, solution would be
-to symlink the existing version into the new location\. If this ever
-affects a real use\-case, it will be investigated\.
-.
-.SH "SEE ALSO"
-.
-.IP "\(bu" 4
-npm help folders
-.
-.IP "\(bu" 4
-npm help update
-.
-.IP "\(bu" 4
-npm help link
-.
-.IP "\(bu" 4
-npm help rebuild
-.
-.IP "\(bu" 4
-npm help scripts
-.
-.IP "\(bu" 4
-npm help build
-.
-.IP "\(bu" 4
-npm help config
-.
-.IP "\(bu" 4
-npm help registry
-.
-.IP "\(bu" 4
-npm help folders
-.
-.IP "\(bu" 4
-npm help tag
-.
-.IP "\(bu" 4
-npm help rm
-.
-.IP "\(bu" 4
-npm help shrinkwrap
-.
-.IP "" 0
-
diff --git a/deps/npm/man/man1/json.1 b/deps/npm/man/man1/json.1
deleted file mode 100644
index 6c29bfe9a..000000000
--- a/deps/npm/man/man1/json.1
+++ /dev/null
@@ -1,853 +0,0 @@
-.\" Generated with Ronnjs 0.3.8
-.\" http://github.com/kapouer/ronnjs/
-.
-.TH "NPM\-JSON" "1" "June 2013" "" ""
-.
-.SH "NAME"
-\fBnpm-json\fR \-\- Specifics of npm\'s package\.json handling
-.
-.SH "DESCRIPTION"
-This document is all you need to know about what\'s required in your package\.json
-file\. It must be actual JSON, not just a JavaScript object literal\.
-.
-.P
-A lot of the behavior described in this document is affected by the config
-settings described in \fBnpm help config\fR\|\.
-.
-.SH "DEFAULT VALUES"
-npm will default some values based on package contents\.
-.
-.IP "\(bu" 4
-\fB"scripts": {"start": "node server\.js"}\fR
-.
-.IP
-If there is a \fBserver\.js\fR file in the root of your package, then npm
-will default the \fBstart\fR command to \fBnode server\.js\fR\|\.
-.
-.IP "\(bu" 4
-\fB"scripts":{"preinstall": "node\-waf clean || true; node\-waf configure build"}\fR
-.
-.IP
-If there is a \fBwscript\fR file in the root of your package, npm will
-default the \fBpreinstall\fR command to compile using node\-waf\.
-.
-.IP "\(bu" 4
-\fB"scripts":{"preinstall": "node\-gyp rebuild"}\fR
-.
-.IP
-If there is a \fBbinding\.gyp\fR file in the root of your package, npm will
-default the \fBpreinstall\fR command to compile using node\-gyp\.
-.
-.IP "\(bu" 4
-\fB"contributors": [\.\.\.]\fR
-.
-.IP
-If there is an \fBAUTHORS\fR file in the root of your package, npm will
-treat each line as a \fBName <email> (url)\fR format, where email and url
-are optional\. Lines which start with a \fB#\fR or are blank, will be
-ignored\.
-.
-.IP "" 0
-.
-.SH "name"
-The \fImost\fR important things in your package\.json are the name and version fields\.
-Those are actually required, and your package won\'t install without
-them\. The name and version together form an identifier that is assumed
-to be completely unique\. Changes to the package should come along with
-changes to the version\.
-.
-.P
-The name is what your thing is called\. Some tips:
-.
-.IP "\(bu" 4
-Don\'t put "js" or "node" in the name\. It\'s assumed that it\'s js, since you\'re
-writing a package\.json file, and you can specify the engine using the "engines"
-field\. (See below\.)
-.
-.IP "\(bu" 4
-The name ends up being part of a URL, an argument on the command line, and a
-folder name\. Any name with non\-url\-safe characters will be rejected\.
-Also, it can\'t start with a dot or an underscore\.
-.
-.IP "\(bu" 4
-The name will probably be passed as an argument to require(), so it should
-be something short, but also reasonably descriptive\.
-.
-.IP "\(bu" 4
-You may want to check the npm registry to see if there\'s something by that name
-already, before you get too attached to it\. http://registry\.npmjs\.org/
-.
-.IP "" 0
-.
-.SH "version"
-The \fImost\fR important things in your package\.json are the name and version fields\.
-Those are actually required, and your package won\'t install without
-them\. The name and version together form an identifier that is assumed
-to be completely unique\. Changes to the package should come along with
-changes to the version\.
-.
-.P
-Version must be parseable by node\-semver \fIhttps://github\.com/isaacs/node\-semver\fR, which is bundled
-with npm as a dependency\. (\fBnpm install semver\fR to use it yourself\.)
-.
-.P
-Here\'s how npm\'s semver implementation deviates from what\'s on semver\.org:
-.
-.IP "\(bu" 4
-Versions can start with "v"
-.
-.IP "\(bu" 4
-A numeric item separated from the main three\-number version by a hyphen
-will be interpreted as a "build" number, and will \fIincrease\fR the version\.
-But, if the tag is not a number separated by a hyphen, then it\'s treated
-as a pre\-release tag, and is \fIless than\fR the version without a tag\.
-So, \fB0\.1\.2\-7 > 0\.1\.2\-7\-beta > 0\.1\.2\-6 > 0\.1\.2 > 0\.1\.2beta\fR
-.
-.IP "" 0
-.
-.P
-This is a little bit confusing to explain, but matches what you see in practice
-when people create tags in git like "v1\.2\.3" and then do "git describe" to generate
-a patch version\.
-.
-.SH "description"
-Put a description in it\. It\'s a string\. This helps people discover your
-package, as it\'s listed in \fBnpm search\fR\|\.
-.
-.SH "keywords"
-Put keywords in it\. It\'s an array of strings\. This helps people
-discover your package as it\'s listed in \fBnpm search\fR\|\.
-.
-.SH "homepage"
-The url to the project homepage\.
-.
-.P
-\fBNOTE\fR: This is \fInot\fR the same as "url"\. If you put a "url" field,
-then the registry will think it\'s a redirection to your package that has
-been published somewhere else, and spit at you\.
-.
-.P
-Literally\. Spit\. I\'m so not kidding\.
-.
-.SH "bugs"
-The url to your project\'s issue tracker and / or the email address to which
-issues should be reported\. These are helpful for people who encounter issues
-with your package\.
-.
-.P
-It should look like this:
-.
-.IP "" 4
-.
-.nf
-{ "url" : "http://github\.com/owner/project/issues"
-, "email" : "project@hostname\.com"
-}
-.
-.fi
-.
-.IP "" 0
-.
-.P
-You can specify either one or both values\. If you want to provide only a url,
-you can specify the value for "bugs" as a simple string instead of an object\.
-.
-.P
-If a url is provided, it will be used by the \fBnpm bugs\fR command\.
-.
-.SH "license"
-You should specify a license for your package so that people know how they are
-permitted to use it, and any restrictions you\'re placing on it\.
-.
-.P
-The simplest way, assuming you\'re using a common license such as BSD or MIT, is
-to just specify the name of the license you\'re using, like this:
-.
-.IP "" 4
-.
-.nf
-{ "license" : "BSD" }
-.
-.fi
-.
-.IP "" 0
-.
-.P
-If you have more complex licensing terms, or you want to provide more detail
-in your package\.json file, you can use the more verbose plural form, like this:
-.
-.IP "" 4
-.
-.nf
-"licenses" : [
- { "type" : "MyLicense"
- , "url" : "http://github\.com/owner/project/path/to/license"
- }
-]
-.
-.fi
-.
-.IP "" 0
-.
-.P
-It\'s also a good idea to include a license file at the top level in your package\.
-.
-.SH "people fields: author, contributors"
-The "author" is one person\. "contributors" is an array of people\. A "person"
-is an object with a "name" field and optionally "url" and "email", like this:
-.
-.IP "" 4
-.
-.nf
-{ "name" : "Barney Rubble"
-, "email" : "b@rubble\.com"
-, "url" : "http://barnyrubble\.tumblr\.com/"
-}
-.
-.fi
-.
-.IP "" 0
-.
-.P
-Or you can shorten that all into a single string, and npm will parse it for you:
-.
-.IP "" 4
-.
-.nf
-"Barney Rubble <b@rubble\.com> (http://barnyrubble\.tumblr\.com/)
-.
-.fi
-.
-.IP "" 0
-.
-.P
-Both email and url are optional either way\.
-.
-.P
-npm also sets a top\-level "maintainers" field with your npm user info\.
-.
-.SH "files"
-The "files" field is an array of files to include in your project\. If
-you name a folder in the array, then it will also include the files
-inside that folder\. (Unless they would be ignored by another rule\.)
-.
-.P
-You can also provide a "\.npmignore" file in the root of your package,
-which will keep files from being included, even if they would be picked
-up by the files array\. The "\.npmignore" file works just like a
-"\.gitignore"\.
-.
-.SH "main"
-The main field is a module ID that is the primary entry point to your program\.
-That is, if your package is named \fBfoo\fR, and a user installs it, and then does \fBrequire("foo")\fR, then your main module\'s exports object will be returned\.
-.
-.P
-This should be a module ID relative to the root of your package folder\.
-.
-.P
-For most modules, it makes the most sense to have a main script and often not
-much else\.
-.
-.SH "bin"
-A lot of packages have one or more executable files that they\'d like to
-install into the PATH\. npm makes this pretty easy (in fact, it uses this
-feature to install the "npm" executable\.)
-.
-.P
-To use this, supply a \fBbin\fR field in your package\.json which is a map of
-command name to local file name\. On install, npm will symlink that file into \fBprefix/bin\fR for global installs, or \fB\|\./node_modules/\.bin/\fR for local
-installs\.
-.
-.P
-For example, npm has this:
-.
-.IP "" 4
-.
-.nf
-{ "bin" : { "npm" : "\./cli\.js" } }
-.
-.fi
-.
-.IP "" 0
-.
-.P
-So, when you install npm, it\'ll create a symlink from the \fBcli\.js\fR script to \fB/usr/local/bin/npm\fR\|\.
-.
-.P
-If you have a single executable, and its name should be the name
-of the package, then you can just supply it as a string\. For example:
-.
-.IP "" 4
-.
-.nf
-{ "name": "my\-program"
-, "version": "1\.2\.5"
-, "bin": "\./path/to/program" }
-.
-.fi
-.
-.IP "" 0
-.
-.P
-would be the same as this:
-.
-.IP "" 4
-.
-.nf
-{ "name": "my\-program"
-, "version": "1\.2\.5"
-, "bin" : { "my\-program" : "\./path/to/program" } }
-.
-.fi
-.
-.IP "" 0
-.
-.SH "man"
-Specify either a single file or an array of filenames to put in place for the \fBman\fR program to find\.
-.
-.P
-If only a single file is provided, then it\'s installed such that it is the
-result from \fBman <pkgname>\fR, regardless of its actual filename\. For example:
-.
-.IP "" 4
-.
-.nf
-{ "name" : "foo"
-, "version" : "1\.2\.3"
-, "description" : "A packaged foo fooer for fooing foos"
-, "main" : "foo\.js"
-, "man" : "\./man/doc\.1"
-}
-.
-.fi
-.
-.IP "" 0
-.
-.P
-would link the \fB\|\./man/doc\.1\fR file in such that it is the target for \fBman foo\fR
-.
-.P
-If the filename doesn\'t start with the package name, then it\'s prefixed\.
-So, this:
-.
-.IP "" 4
-.
-.nf
-{ "name" : "foo"
-, "version" : "1\.2\.3"
-, "description" : "A packaged foo fooer for fooing foos"
-, "main" : "foo\.js"
-, "man" : [ "\./man/foo\.1", "\./man/bar\.1" ]
-}
-.
-.fi
-.
-.IP "" 0
-.
-.P
-will create files to do \fBman foo\fR and \fBman foo\-bar\fR\|\.
-.
-.P
-Man files must end with a number, and optionally a \fB\|\.gz\fR suffix if they are
-compressed\. The number dictates which man section the file is installed into\.
-.
-.IP "" 4
-.
-.nf
-{ "name" : "foo"
-, "version" : "1\.2\.3"
-, "description" : "A packaged foo fooer for fooing foos"
-, "main" : "foo\.js"
-, "man" : [ "\./man/foo\.1", "\./man/foo\.2" ]
-}
-.
-.fi
-.
-.IP "" 0
-.
-.P
-will create entries for \fBman foo\fR and \fBman 2 foo\fR
-.
-.SH "directories"
-The CommonJS Packages \fIhttp://wiki\.commonjs\.org/wiki/Packages/1\.0\fR spec details a
-few ways that you can indicate the structure of your package using a \fBdirectories\fR
-hash\. If you look at npm\'s package\.json \fIhttp://registry\.npmjs\.org/npm/latest\fR,
-you\'ll see that it has directories for doc, lib, and man\.
-.
-.P
-In the future, this information may be used in other creative ways\.
-.
-.SS "directories\.lib"
-Tell people where the bulk of your library is\. Nothing special is done
-with the lib folder in any way, but it\'s useful meta info\.
-.
-.SS "directories\.bin"
-If you specify a "bin" directory, then all the files in that folder will
-be used as the "bin" hash\.
-.
-.P
-If you have a "bin" hash already, then this has no effect\.
-.
-.SS "directories\.man"
-A folder that is full of man pages\. Sugar to generate a "man" array by
-walking the folder\.
-.
-.SS "directories\.doc"
-Put markdown files in here\. Eventually, these will be displayed nicely,
-maybe, someday\.
-.
-.SS "directories\.example"
-Put example scripts in here\. Someday, it might be exposed in some clever way\.
-.
-.SH "repository"
-Specify the place where your code lives\. This is helpful for people who
-want to contribute\. If the git repo is on github, then the \fBnpm docs\fR
-command will be able to find you\.
-.
-.P
-Do it like this:
-.
-.IP "" 4
-.
-.nf
-"repository" :
- { "type" : "git"
- , "url" : "http://github\.com/isaacs/npm\.git"
- }
-"repository" :
- { "type" : "svn"
- , "url" : "http://v8\.googlecode\.com/svn/trunk/"
- }
-.
-.fi
-.
-.IP "" 0
-.
-.P
-The URL should be a publicly available (perhaps read\-only) url that can be handed
-directly to a VCS program without any modification\. It should not be a url to an
-html project page that you put in your browser\. It\'s for computers\.
-.
-.SH "scripts"
-The "scripts" member is an object hash of script commands that are run
-at various times in the lifecycle of your package\. The key is the lifecycle
-event, and the value is the command to run at that point\.
-.
-.P
-See \fBnpm help scripts\fR to find out more about writing package scripts\.
-.
-.SH "config"
-A "config" hash can be used to set configuration
-parameters used in package scripts that persist across upgrades\. For
-instance, if a package had the following:
-.
-.IP "" 4
-.
-.nf
-{ "name" : "foo"
-, "config" : { "port" : "8080" } }
-.
-.fi
-.
-.IP "" 0
-.
-.P
-and then had a "start" command that then referenced the \fBnpm_package_config_port\fR environment variable, then the user could
-override that by doing \fBnpm config set foo:port 8001\fR\|\.
-.
-.P
-See \fBnpm help config\fR and \fBnpm help scripts\fR for more on package
-configs\.
-.
-.SH "dependencies"
-Dependencies are specified with a simple hash of package name to version
-range\. The version range is EITHER a string which has one or more
-space\-separated descriptors, OR a range like "fromVersion \- toVersion"
-.
-.P
-\fBPlease do not put test harnesses in your \fBdependencies\fR hash\.\fR See \fBdevDependencies\fR, below\.
-.
-.P
-Version range descriptors may be any of the following styles, where "version"
-is a semver compatible version identifier\.
-.
-.IP "\(bu" 4
-\fBversion\fR Must match \fBversion\fR exactly
-.
-.IP "\(bu" 4
-\fB=version\fR Same as just \fBversion\fR
-.
-.IP "\(bu" 4
-\fB>version\fR Must be greater than \fBversion\fR
-.
-.IP "\(bu" 4
-\fB>=version\fR etc
-.
-.IP "\(bu" 4
-\fB<version\fR
-.
-.IP "\(bu" 4
-\fB<=version\fR
-.
-.IP "\(bu" 4
-\fB~version\fR See \'Tilde Version Ranges\' below
-.
-.IP "\(bu" 4
-\fB1\.2\.x\fR See \'X Version Ranges\' below
-.
-.IP "\(bu" 4
-\fBhttp://\.\.\.\fR See \'URLs as Dependencies\' below
-.
-.IP "\(bu" 4
-\fB*\fR Matches any version
-.
-.IP "\(bu" 4
-\fB""\fR (just an empty string) Same as \fB*\fR
-.
-.IP "\(bu" 4
-\fBversion1 \- version2\fR Same as \fB>=version1 <=version2\fR\|\.
-.
-.IP "\(bu" 4
-\fBrange1 || range2\fR Passes if either range1 or range2 are satisfied\.
-.
-.IP "\(bu" 4
-\fBgit\.\.\.\fR See \'Git URLs as Dependencies\' below
-.
-.IP "" 0
-.
-.P
-For example, these are all valid:
-.
-.IP "" 4
-.
-.nf
-{ "dependencies" :
- { "foo" : "1\.0\.0 \- 2\.9999\.9999"
- , "bar" : ">=1\.0\.2 <2\.1\.2"
- , "baz" : ">1\.0\.2 <=2\.3\.4"
- , "boo" : "2\.0\.1"
- , "qux" : "<1\.0\.0 || >=2\.3\.1 <2\.4\.5 || >=2\.5\.2 <3\.0\.0"
- , "asd" : "http://asdf\.com/asdf\.tar\.gz"
- , "til" : "~1\.2"
- , "elf" : "~1\.2\.3"
- , "two" : "2\.x"
- , "thr" : "3\.3\.x"
- }
-}
-.
-.fi
-.
-.IP "" 0
-.
-.SS "Tilde Version Ranges"
-A range specifier starting with a tilde \fB~\fR character is matched against
-a version in the following fashion\.
-.
-.IP "\(bu" 4
-The version must be at least as high as the range\.
-.
-.IP "\(bu" 4
-The version must be less than the next major revision above the range\.
-.
-.IP "" 0
-.
-.P
-For example, the following are equivalent:
-.
-.IP "\(bu" 4
-\fB"~1\.2\.3" = ">=1\.2\.3 <1\.3\.0"\fR
-.
-.IP "\(bu" 4
-\fB"~1\.2" = ">=1\.2\.0 <1\.3\.0"\fR
-.
-.IP "\(bu" 4
-\fB"~1" = ">=1\.0\.0 <1\.1\.0"\fR
-.
-.IP "" 0
-.
-.SS "X Version Ranges"
-An "x" in a version range specifies that the version number must start
-with the supplied digits, but any digit may be used in place of the x\.
-.
-.P
-The following are equivalent:
-.
-.IP "\(bu" 4
-\fB"1\.2\.x" = ">=1\.2\.0 <1\.3\.0"\fR
-.
-.IP "\(bu" 4
-\fB"1\.x\.x" = ">=1\.0\.0 <2\.0\.0"\fR
-.
-.IP "\(bu" 4
-\fB"1\.2" = "1\.2\.x"\fR
-.
-.IP "\(bu" 4
-\fB"1\.x" = "1\.x\.x"\fR
-.
-.IP "\(bu" 4
-\fB"1" = "1\.x\.x"\fR
-.
-.IP "" 0
-.
-.P
-You may not supply a comparator with a version containing an x\. Any
-digits after the first "x" are ignored\.
-.
-.SS "URLs as Dependencies"
-Starting with npm version 0\.2\.14, you may specify a tarball URL in place
-of a version range\.
-.
-.P
-This tarball will be downloaded and installed locally to your package at
-install time\.
-.
-.SS "Git URLs as Dependencies"
-Git urls can be of the form:
-.
-.IP "" 4
-.
-.nf
-git://github\.com/user/project\.git#commit\-ish
-git+ssh://user@hostname:project\.git#commit\-ish
-git+ssh://user@hostname/project\.git#commit\-ish
-git+http://user@hostname/project/blah\.git#commit\-ish
-git+https://user@hostname/project/blah\.git#commit\-ish
-.
-.fi
-.
-.IP "" 0
-.
-.P
-The \fBcommit\-ish\fR can be any tag, sha, or branch which can be supplied as
-an argument to \fBgit checkout\fR\|\. The default is \fBmaster\fR\|\.
-.
-.SH "devDependencies"
-If someone is planning on downloading and using your module in their
-program, then they probably don\'t want or need to download and build
-the external test or documentation framework that you use\.
-.
-.P
-In this case, it\'s best to list these additional items in a \fBdevDependencies\fR hash\.
-.
-.P
-These things will be installed whenever the \fB\-\-dev\fR configuration flag
-is set\. This flag is set automatically when doing \fBnpm link\fR or when doing \fBnpm install\fR from the root of a package, and can be managed like any other npm
-configuration param\. See \fBnpm help config\fR for more on the topic\.
-.
-.SH "bundledDependencies"
-Array of package names that will be bundled when publishing the package\.
-.
-.P
-If this is spelled \fB"bundleDependencies"\fR, then that is also honorable\.
-.
-.SH "optionalDependencies"
-If a dependency can be used, but you would like npm to proceed if it
-cannot be found or fails to install, then you may put it in the \fBoptionalDependencies\fR hash\. This is a map of package name to version
-or url, just like the \fBdependencies\fR hash\. The difference is that
-failure is tolerated\.
-.
-.P
-It is still your program\'s responsibility to handle the lack of the
-dependency\. For example, something like this:
-.
-.IP "" 4
-.
-.nf
-try {
- var foo = require(\'foo\')
- var fooVersion = require(\'foo/package\.json\')\.version
-} catch (er) {
- foo = null
-}
-if ( notGoodFooVersion(fooVersion) ) {
- foo = null
-}
-// \.\. then later in your program \.\.
-if (foo) {
- foo\.doFooThings()
-}
-.
-.fi
-.
-.IP "" 0
-.
-.P
-Entries in \fBoptionalDependencies\fR will override entries of the same name in \fBdependencies\fR, so it\'s usually best to only put in one place\.
-.
-.SH "engines"
-You can specify the version of node that your stuff works on:
-.
-.IP "" 4
-.
-.nf
-{ "engines" : { "node" : ">=0\.1\.27 <0\.1\.30" } }
-.
-.fi
-.
-.IP "" 0
-.
-.P
-And, like with dependencies, if you don\'t specify the version (or if you
-specify "*" as the version), then any version of node will do\.
-.
-.P
-If you specify an "engines" field, then npm will require that "node" be
-somewhere on that list\. If "engines" is omitted, then npm will just assume
-that it works on node\.
-.
-.P
-You can also use the "engines" field to specify which versions of npm
-are capable of properly installing your program\. For example:
-.
-.IP "" 4
-.
-.nf
-{ "engines" : { "npm" : "~1\.0\.20" } }
-.
-.fi
-.
-.IP "" 0
-.
-.P
-Note that, unless the user has set the \fBengine\-strict\fR config flag, this
-field is advisory only\.
-.
-.SH "engineStrict"
-If you are sure that your module will \fIdefinitely not\fR run properly on
-versions of Node/npm other than those specified in the \fBengines\fR hash,
-then you can set \fB"engineStrict": true\fR in your package\.json file\.
-This will override the user\'s \fBengine\-strict\fR config setting\.
-.
-.P
-Please do not do this unless you are really very very sure\. If your
-engines hash is something overly restrictive, you can quite easily and
-inadvertently lock yourself into obscurity and prevent your users from
-updating to new versions of Node\. Consider this choice carefully\. If
-people abuse it, it will be removed in a future version of npm\.
-.
-.SH "os"
-You can specify which operating systems your
-module will run on:
-.
-.IP "" 4
-.
-.nf
-"os" : [ "darwin", "linux" ]
-.
-.fi
-.
-.IP "" 0
-.
-.P
-You can also blacklist instead of whitelist operating systems,
-just prepend the blacklisted os with a \'!\':
-.
-.IP "" 4
-.
-.nf
-"os" : [ "!win32" ]
-.
-.fi
-.
-.IP "" 0
-.
-.P
-The host operating system is determined by \fBprocess\.platform\fR
-.
-.P
-It is allowed to both blacklist, and whitelist, although there isn\'t any
-good reason to do this\.
-.
-.SH "cpu"
-If your code only runs on certain cpu architectures,
-you can specify which ones\.
-.
-.IP "" 4
-.
-.nf
-"cpu" : [ "x64", "ia32" ]
-.
-.fi
-.
-.IP "" 0
-.
-.P
-Like the \fBos\fR option, you can also blacklist architectures:
-.
-.IP "" 4
-.
-.nf
-"cpu" : [ "!arm", "!mips" ]
-.
-.fi
-.
-.IP "" 0
-.
-.P
-The host architecture is determined by \fBprocess\.arch\fR
-.
-.SH "preferGlobal"
-If your package is primarily a command\-line application that should be
-installed globally, then set this value to \fBtrue\fR to provide a warning
-if it is installed locally\.
-.
-.P
-It doesn\'t actually prevent users from installing it locally, but it
-does help prevent some confusion if it doesn\'t work as expected\.
-.
-.SH "private"
-If you set \fB"private": true\fR in your package\.json, then npm will refuse
-to publish it\.
-.
-.P
-This is a way to prevent accidental publication of private repositories\.
-If you would like to ensure that a given package is only ever published
-to a specific registry (for example, an internal registry),
-then use the \fBpublishConfig\fR hash described below
-to override the \fBregistry\fR config param at publish\-time\.
-.
-.SH "publishConfig"
-This is a set of config values that will be used at publish\-time\. It\'s
-especially handy if you want to set the tag or registry, so that you can
-ensure that a given package is not tagged with "latest" or published to
-the global public registry by default\.
-.
-.P
-Any config values can be overridden, but of course only "tag" and
-"registry" probably matter for the purposes of publishing\.
-.
-.P
-See \fBnpm help config\fR to see the list of config options that can be
-overridden\.
-.
-.SH "SEE ALSO"
-.
-.IP "\(bu" 4
-npm help semver
-.
-.IP "\(bu" 4
-npm help init
-.
-.IP "\(bu" 4
-npm help version
-.
-.IP "\(bu" 4
-npm help config
-.
-.IP "\(bu" 4
-npm help help
-.
-.IP "\(bu" 4
-npm help faq
-.
-.IP "\(bu" 4
-npm help install
-.
-.IP "\(bu" 4
-npm help publish
-.
-.IP "\(bu" 4
-npm help rm
-.
-.IP "" 0
-
diff --git a/deps/npm/man/man1/link.1 b/deps/npm/man/man1/link.1
deleted file mode 100644
index 1e1c87a30..000000000
--- a/deps/npm/man/man1/link.1
+++ /dev/null
@@ -1,112 +0,0 @@
-.\" Generated with Ronnjs 0.3.8
-.\" http://github.com/kapouer/ronnjs/
-.
-.TH "NPM\-LINK" "1" "June 2013" "" ""
-.
-.SH "NAME"
-\fBnpm-link\fR \-\- Symlink a package folder
-.
-.SH "SYNOPSIS"
-.
-.nf
-npm link (in package folder)
-npm link <pkgname>
-.
-.fi
-.
-.SH "DESCRIPTION"
-Package linking is a two\-step process\.
-.
-.P
-First, \fBnpm link\fR in a package folder will create a globally\-installed
-symbolic link from \fBprefix/package\-name\fR to the current folder\.
-.
-.P
-Next, in some other location, \fBnpm link package\-name\fR will create a
-symlink from the local \fBnode_modules\fR folder to the global symlink\.
-.
-.P
-Note that \fBpackage\-name\fR is taken from \fBpackage\.json\fR ,
-not from directory name\.
-.
-.P
-When creating tarballs for \fBnpm publish\fR, the linked packages are
-"snapshotted" to their current state by resolving the symbolic links\.
-.
-.P
-This is
-handy for installing your own stuff, so that you can work on it and test it
-iteratively without having to continually rebuild\.
-.
-.P
-For example:
-.
-.IP "" 4
-.
-.nf
-cd ~/projects/node\-redis # go into the package directory
-npm link # creates global link
-cd ~/projects/node\-bloggy # go into some other package directory\.
-npm link redis # link\-install the package
-.
-.fi
-.
-.IP "" 0
-.
-.P
-Now, any changes to ~/projects/node\-redis will be reflected in
-~/projects/node\-bloggy/node_modules/redis/
-.
-.P
-You may also shortcut the two steps in one\. For example, to do the
-above use\-case in a shorter way:
-.
-.IP "" 4
-.
-.nf
-cd ~/projects/node\-bloggy # go into the dir of your main project
-npm link \.\./node\-redis # link the dir of your dependency
-.
-.fi
-.
-.IP "" 0
-.
-.P
-The second line is the equivalent of doing:
-.
-.IP "" 4
-.
-.nf
-(cd \.\./node\-redis; npm link)
-npm link redis
-.
-.fi
-.
-.IP "" 0
-.
-.P
-That is, it first creates a global link, and then links the global
-installation target into your project\'s \fBnode_modules\fR folder\.
-.
-.SH "SEE ALSO"
-.
-.IP "\(bu" 4
-npm help developers
-.
-.IP "\(bu" 4
-npm help faq
-.
-.IP "\(bu" 4
-npm help json
-.
-.IP "\(bu" 4
-npm help install
-.
-.IP "\(bu" 4
-npm help folders
-.
-.IP "\(bu" 4
-npm help config
-.
-.IP "" 0
-
diff --git a/deps/npm/man/man1/list.1 b/deps/npm/man/man1/list.1
deleted file mode 100644
index 00a743ae1..000000000
--- a/deps/npm/man/man1/list.1
+++ /dev/null
@@ -1,125 +0,0 @@
-.\" Generated with Ronnjs 0.3.8
-.\" http://github.com/kapouer/ronnjs/
-.
-.TH "NPM\-LS" "1" "August 2012" "" ""
-.
-.SH "NAME"
-\fBnpm-ls\fR \-\- List installed packages
-.
-.SH "SYNOPSIS"
-.
-.nf
-npm list [<pkg> \.\.\.]
-npm ls [<pkg> \.\.\.]
-npm la [<pkg> \.\.\.]
-npm ll [<pkg> \.\.\.]
-.
-.fi
-.
-.SH "DESCRIPTION"
-This command will print to stdout all the versions of packages that are
-installed, as well as their dependencies, in a tree\-structure\.
-.
-.P
-Positional arguments are \fBname@version\-range\fR identifiers, which will
-limit the results to only the paths to the packages named\. Note that
-nested packages will \fIalso\fR show the paths to the specified packages\.
-For example, running \fBnpm ls promzard\fR in npm\'s source tree will show:
-.
-.IP "" 4
-.
-.nf
-npm@1.1.59 /path/to/npm
-└─┬ init\-package\-json@0\.0\.4
- └── promzard@0\.1\.5
-.
-.fi
-.
-.IP "" 0
-.
-.P
-It will show print out extraneous, missing, and invalid packages\.
-.
-.P
-When run as \fBll\fR or \fBla\fR, it shows extended information by default\.
-.
-.SH "CONFIGURATION"
-.
-.SS "json"
-.
-.IP "\(bu" 4
-Default: false
-.
-.IP "\(bu" 4
-Type: Boolean
-.
-.IP "" 0
-.
-.P
-Show information in JSON format\.
-.
-.SS "long"
-.
-.IP "\(bu" 4
-Default: false
-.
-.IP "\(bu" 4
-Type: Boolean
-.
-.IP "" 0
-.
-.P
-Show extended information\.
-.
-.SS "parseable"
-.
-.IP "\(bu" 4
-Default: false
-.
-.IP "\(bu" 4
-Type: Boolean
-.
-.IP "" 0
-.
-.P
-Show parseable output instead of tree view\.
-.
-.SS "global"
-.
-.IP "\(bu" 4
-Default: false
-.
-.IP "\(bu" 4
-Type: Boolean
-.
-.IP "" 0
-.
-.P
-List packages in the global install prefix instead of in the current
-project\.
-.
-.SH "SEE ALSO"
-.
-.IP "\(bu" 4
-npm help config
-.
-.IP "\(bu" 4
-npm help folders
-.
-.IP "\(bu" 4
-npm help install
-.
-.IP "\(bu" 4
-npm help link
-.
-.IP "\(bu" 4
-npm help prune
-.
-.IP "\(bu" 4
-npm help outdated
-.
-.IP "\(bu" 4
-npm help update
-.
-.IP "" 0
-
diff --git a/deps/npm/man/man1/ln.1 b/deps/npm/man/man1/ln.1
deleted file mode 100644
index 74bf729b5..000000000
--- a/deps/npm/man/man1/ln.1
+++ /dev/null
@@ -1,108 +0,0 @@
-.\" Generated with Ronnjs/v0.1
-.\" http://github.com/kapouer/ronnjs/
-.
-.TH "NPM\-LINK" "1" "November 2011" "" ""
-.
-.SH "NAME"
-\fBnpm-link\fR \-\- Symlink a package folder
-.
-.SH "SYNOPSIS"
-.
-.nf
-npm link (in package folder)
-npm link <pkgname>
-.
-.fi
-.
-.SH "DESCRIPTION"
-Package linking is a two\-step process\.
-.
-.P
-First, \fBnpm link\fR in a package folder will create a globally\-installed
-symbolic link from \fBprefix/package\-name\fR to the current folder\.
-.
-.P
-Next, in some other location, \fBnpm link package\-name\fR will create a
-symlink from the local \fBnode_modules\fR folder to the global symlink\.
-.
-.P
-When creating tarballs for \fBnpm publish\fR, the linked packages are
-"snapshotted" to their current state by resolving the symbolic links\.
-.
-.P
-This is
-handy for installing your own stuff, so that you can work on it and test it
-iteratively without having to continually rebuild\.
-.
-.P
-For example:
-.
-.IP "" 4
-.
-.nf
-cd ~/projects/node\-redis # go into the package directory
-npm link # creates global link
-cd ~/projects/node\-bloggy # go into some other package directory\.
-npm link redis # link\-install the package
-.
-.fi
-.
-.IP "" 0
-.
-.P
-Now, any changes to ~/projects/node\-redis will be reflected in
-~/projects/node\-bloggy/node_modules/redis/
-.
-.P
-You may also shortcut the two steps in one\. For example, to do the
-above use\-case in a shorter way:
-.
-.IP "" 4
-.
-.nf
-cd ~/projects/node\-bloggy # go into the dir of your main project
-npm link \.\./node\-redis # link the dir of your dependency
-.
-.fi
-.
-.IP "" 0
-.
-.P
-The second line is the equivalent of doing:
-.
-.IP "" 4
-.
-.nf
-(cd \.\./node\-redis; npm link)
-npm link redis
-.
-.fi
-.
-.IP "" 0
-.
-.P
-That is, it first creates a global link, and then links the global
-installation target into your project\'s \fBnode_modules\fR folder\.
-.
-.SH "SEE ALSO"
-.
-.IP "\(bu" 4
-npm help developers
-.
-.IP "\(bu" 4
-npm help faq
-.
-.IP "\(bu" 4
-npm help json
-.
-.IP "\(bu" 4
-npm help install
-.
-.IP "\(bu" 4
-npm help folders
-.
-.IP "\(bu" 4
-npm help config
-.
-.IP "" 0
-
diff --git a/deps/npm/man/man1/ls.1 b/deps/npm/man/man1/ls.1
deleted file mode 100644
index 54eedd407..000000000
--- a/deps/npm/man/man1/ls.1
+++ /dev/null
@@ -1,125 +0,0 @@
-.\" Generated with Ronnjs 0.3.8
-.\" http://github.com/kapouer/ronnjs/
-.
-.TH "NPM\-LS" "1" "June 2013" "" ""
-.
-.SH "NAME"
-\fBnpm-ls\fR \-\- List installed packages
-.
-.SH "SYNOPSIS"
-.
-.nf
-npm list [<pkg> \.\.\.]
-npm ls [<pkg> \.\.\.]
-npm la [<pkg> \.\.\.]
-npm ll [<pkg> \.\.\.]
-.
-.fi
-.
-.SH "DESCRIPTION"
-This command will print to stdout all the versions of packages that are
-installed, as well as their dependencies, in a tree\-structure\.
-.
-.P
-Positional arguments are \fBname@version\-range\fR identifiers, which will
-limit the results to only the paths to the packages named\. Note that
-nested packages will \fIalso\fR show the paths to the specified packages\.
-For example, running \fBnpm ls promzard\fR in npm\'s source tree will show:
-.
-.IP "" 4
-.
-.nf
-npm@1.2.30 /path/to/npm
-└─┬ init\-package\-json@0\.0\.4
- └── promzard@0\.1\.5
-.
-.fi
-.
-.IP "" 0
-.
-.P
-It will show print out extraneous, missing, and invalid packages\.
-.
-.P
-When run as \fBll\fR or \fBla\fR, it shows extended information by default\.
-.
-.SH "CONFIGURATION"
-.
-.SS "json"
-.
-.IP "\(bu" 4
-Default: false
-.
-.IP "\(bu" 4
-Type: Boolean
-.
-.IP "" 0
-.
-.P
-Show information in JSON format\.
-.
-.SS "long"
-.
-.IP "\(bu" 4
-Default: false
-.
-.IP "\(bu" 4
-Type: Boolean
-.
-.IP "" 0
-.
-.P
-Show extended information\.
-.
-.SS "parseable"
-.
-.IP "\(bu" 4
-Default: false
-.
-.IP "\(bu" 4
-Type: Boolean
-.
-.IP "" 0
-.
-.P
-Show parseable output instead of tree view\.
-.
-.SS "global"
-.
-.IP "\(bu" 4
-Default: false
-.
-.IP "\(bu" 4
-Type: Boolean
-.
-.IP "" 0
-.
-.P
-List packages in the global install prefix instead of in the current
-project\.
-.
-.SH "SEE ALSO"
-.
-.IP "\(bu" 4
-npm help config
-.
-.IP "\(bu" 4
-npm help folders
-.
-.IP "\(bu" 4
-npm help install
-.
-.IP "\(bu" 4
-npm help link
-.
-.IP "\(bu" 4
-npm help prune
-.
-.IP "\(bu" 4
-npm help outdated
-.
-.IP "\(bu" 4
-npm help update
-.
-.IP "" 0
-
diff --git a/deps/npm/man/man1/npm-README.1 b/deps/npm/man/man1/npm-README.1
new file mode 100644
index 000000000..0f8bef3d7
--- /dev/null
+++ b/deps/npm/man/man1/npm-README.1
@@ -0,0 +1,341 @@
+.\" Generated with Ronnjs 0.3.8
+.\" http://github.com/kapouer/ronnjs/
+.
+.TH "NPM" "1" "May 2014" "" ""
+.
+.SH "NAME"
+\fBnpm\fR \-\- node package manager![Build Status \fIhttps://img\.shields\.io/travis/npm/npm/master\.svg)](https://travis\-ci\.org/npm/npm\fR
+## SYNOPSIS
+.
+.P
+This is just enough info to get you up and running\.
+.
+.P
+Much more info available via \fBnpm help\fR once it\'s installed\.
+.
+.SH "IMPORTANT"
+\fBYou need node v0\.8 or higher to run this program\.\fR
+.
+.P
+To install an old \fBand unsupported\fR version of npm that works on node 0\.3
+and prior, clone the git repo and dig through the old tags and branches\.
+.
+.SH "Super Easy Install"
+npm comes with node now\.
+.
+.SS "Windows Computers"
+Get the MSI\. npm is in it\.
+.
+.SS "Apple Macintosh Computers"
+Get the pkg\. npm is in it\.
+.
+.SS "Other Sorts of Unices"
+Run \fBmake install\fR\|\. npm will be installed with node\.
+.
+.P
+If you want a more fancy pants install (a different version, customized
+paths, etc\.) then read on\.
+.
+.SH "Fancy Install (Unix)"
+There\'s a pretty robust install script at \fIhttps://www\.npmjs\.org/install\.sh\fR\|\. You can download that and run it\.
+.
+.P
+Here\'s an example using curl:
+.
+.IP "" 4
+.
+.nf
+curl \-L https://npmjs\.org/install\.sh | sh
+.
+.fi
+.
+.IP "" 0
+.
+.SS "Slightly Fancier"
+You can set any npm configuration params with that script:
+.
+.IP "" 4
+.
+.nf
+npm_config_prefix=/some/path sh install\.sh
+.
+.fi
+.
+.IP "" 0
+.
+.P
+Or, you can run it in uber\-debuggery mode:
+.
+.IP "" 4
+.
+.nf
+npm_debug=1 sh install\.sh
+.
+.fi
+.
+.IP "" 0
+.
+.SS "Even Fancier"
+Get the code with git\. Use \fBmake\fR to build the docs and do other stuff\.
+If you plan on hacking on npm, \fBmake link\fR is your friend\.
+.
+.P
+If you\'ve got the npm source code, you can also semi\-permanently set
+arbitrary config keys using the \fB\|\./configure \-\-key=val \.\.\.\fR, and then
+run npm commands by doing \fBnode cli\.js <cmd> <args>\fR\|\. (This is helpful
+for testing, or running stuff without actually installing npm itself\.)
+.
+.SH "Fancy Windows Install"
+You can download a zip file from \fIhttps://npmjs\.org/dist/\fR, and unpack it
+in the same folder where node\.exe lives\.
+.
+.P
+If that\'s not fancy enough for you, then you can fetch the code with
+git, and mess with it directly\.
+.
+.SH "Installing on Cygwin"
+No\.
+.
+.SH "Permissions when Using npm to Install Other Stuff"
+\fBtl;dr\fR
+.
+.IP "\(bu" 4
+Use \fBsudo\fR for greater safety\. Or don\'t, if you prefer not to\.
+.
+.IP "\(bu" 4
+npm will downgrade permissions if it\'s root before running any build
+scripts that package authors specified\.
+.
+.IP "" 0
+.
+.SS "More details\.\.\."
+As of version 0\.3, it is recommended to run npm as root\.
+This allows npm to change the user identifier to the \fBnobody\fR user prior
+to running any package build or test commands\.
+.
+.P
+If you are not the root user, or if you are on a platform that does not
+support uid switching, then npm will not attempt to change the userid\.
+.
+.P
+If you would like to ensure that npm \fBalways\fR runs scripts as the
+"nobody" user, and have it fail if it cannot downgrade permissions, then
+set the following configuration param:
+.
+.IP "" 4
+.
+.nf
+npm config set unsafe\-perm false
+.
+.fi
+.
+.IP "" 0
+.
+.P
+This will prevent running in unsafe mode, even as non\-root users\.
+.
+.SH "Uninstalling"
+So sad to see you go\.
+.
+.IP "" 4
+.
+.nf
+sudo npm uninstall npm \-g
+.
+.fi
+.
+.IP "" 0
+.
+.P
+Or, if that fails,
+.
+.IP "" 4
+.
+.nf
+sudo make uninstall
+.
+.fi
+.
+.IP "" 0
+.
+.SH "More Severe Uninstalling"
+Usually, the above instructions are sufficient\. That will remove
+npm, but leave behind anything you\'ve installed\.
+.
+.P
+If you would like to remove all the packages that you have installed,
+then you can use the \fBnpm ls\fR command to find them, and then \fBnpm rm\fR to
+remove them\.
+.
+.P
+To remove cruft left behind by npm 0\.x, you can use the included \fBclean\-old\.sh\fR script file\. You can run it conveniently like this:
+.
+.IP "" 4
+.
+.nf
+npm explore npm \-g \-\- sh scripts/clean\-old\.sh
+.
+.fi
+.
+.IP "" 0
+.
+.P
+npm uses two configuration files, one for per\-user configs, and another
+for global (every\-user) configs\. You can view them by doing:
+.
+.IP "" 4
+.
+.nf
+npm config get userconfig # defaults to ~/\.npmrc
+npm config get globalconfig # defaults to /usr/local/etc/npmrc
+.
+.fi
+.
+.IP "" 0
+.
+.P
+Uninstalling npm does not remove configuration files by default\. You
+must remove them yourself manually if you want them gone\. Note that
+this means that future npm installs will not remember the settings that
+you have chosen\.
+.
+.SH "Using npm Programmatically"
+If you would like to use npm programmatically, you can do that\.
+It\'s not very well documented, but it \fIis\fR rather simple\.
+.
+.P
+Most of the time, unless you actually want to do all the things that
+npm does, you should try using one of npm\'s dependencies rather than
+using npm itself, if possible\.
+.
+.P
+Eventually, npm will be just a thin cli wrapper around the modules
+that it depends on, but for now, there are some things that you must
+use npm itself to do\.
+.
+.IP "" 4
+.
+.nf
+var npm = require("npm")
+npm\.load(myConfigObject, function (er) {
+ if (er) return handlError(er)
+ npm\.commands\.install(["some", "args"], function (er, data) {
+ if (er) return commandFailed(er)
+ // command succeeded, and data might have some info
+ })
+ npm\.on("log", function (message) { \.\.\.\. })
+})
+.
+.fi
+.
+.IP "" 0
+.
+.P
+The \fBload\fR function takes an object hash of the command\-line configs\.
+The various \fBnpm\.commands\.<cmd>\fR functions take an \fBarray\fR of
+positional argument \fBstrings\fR\|\. The last argument to any \fBnpm\.commands\.<cmd>\fR function is a callback\. Some commands take other
+optional arguments\. Read the source\.
+.
+.P
+You cannot set configs individually for any single npm function at this
+time\. Since \fBnpm\fR is a singleton, any call to \fBnpm\.config\.set\fR will
+change the value for \fIall\fR npm commands in that process\.
+.
+.P
+See \fB\|\./bin/npm\-cli\.js\fR for an example of pulling config values off of the
+command line arguments using nopt\. You may also want to check out \fBnpm
+help config\fR to learn about all the options you can set there\.
+.
+.SH "More Docs"
+Check out the docs \fIhttps://www\.npmjs\.org/doc/\fR,
+especially the faq \fIhttps://www\.npmjs\.org/doc/faq\.html\fR\|\.
+.
+.P
+You can use the \fBnpm help\fR command to read any of them\.
+.
+.P
+If you\'re a developer, and you want to use npm to publish your program,
+you should read this \fIhttps://www\.npmjs\.org/doc/developers\.html\fR
+.
+.SH "Legal Stuff"
+"npm" and "The npm Registry" are owned by npm, Inc\.
+All rights reserved\. See the included LICENSE file for more details\.
+.
+.P
+"Node\.js" and "node" are trademarks owned by Joyent, Inc\.
+.
+.P
+Modules published on the npm registry are not officially endorsed by
+npm, Inc\. or the Node\.js project\.
+.
+.P
+Data published to the npm registry is not part of npm itself, and is
+the sole property of the publisher\. While every effort is made to
+ensure accountability, there is absolutely no guarantee, warrantee, or
+assertion expressed or implied as to the quality, fitness for a
+specific purpose, or lack of malice in any given npm package\.
+.
+.P
+If you have a complaint about a package in the public npm registry,
+and cannot resolve it with the package
+owner \fIhttps://www\.npmjs\.org/doc/misc/npm\-disputes\.html\fR, please email \fIsupport@npmjs\.com\fR and explain the situation\.
+.
+.P
+Any data published to The npm Registry (including user account
+information) may be removed or modified at the sole discretion of the
+npm server administrators\.
+.
+.SS "In plainer english"
+npm is the property of npm, Inc\.
+.
+.P
+If you publish something, it\'s yours, and you are solely accountable
+for it\.
+.
+.P
+If other people publish something, it\'s theirs\.
+.
+.P
+Users can publish Bad Stuff\. It will be removed promptly if reported\.
+But there is no vetting process for published modules, and you use
+them at your own risk\. Please inspect the source\.
+.
+.P
+If you publish Bad Stuff, we may delete it from the registry, or even
+ban your account in extreme cases\. So don\'t do that\.
+.
+.SH "BUGS"
+When you find issues, please report them:
+.
+.IP "\(bu" 4
+web: \fIhttps://github\.com/npm/npm/issues\fR
+.
+.IP "\(bu" 4
+email: \fInpm\-@googlegroups\.com\fR
+.
+.IP "" 0
+.
+.P
+Be sure to include \fIall\fR of the output from the npm command that didn\'t work
+as expected\. The \fBnpm\-debug\.log\fR file is also helpful to provide\.
+.
+.P
+You can also look for isaacs in #node\.js on irc://irc\.freenode\.net\. He
+will no doubt tell you to put the output in a gist or email\.
+.
+.SH "SEE ALSO"
+.
+.IP "\(bu" 4
+npm help npm
+.
+.IP "\(bu" 4
+npm help faq
+.
+.IP "\(bu" 4
+npm help help
+.
+.IP "\(bu" 4
+npm help index
+.
+.IP "" 0
+
diff --git a/deps/npm/man/man1/npm-adduser.1 b/deps/npm/man/man1/npm-adduser.1
new file mode 100644
index 000000000..594330a41
--- /dev/null
+++ b/deps/npm/man/man1/npm-adduser.1
@@ -0,0 +1,63 @@
+.\" Generated with Ronnjs 0.3.8
+.\" http://github.com/kapouer/ronnjs/
+.
+.TH "NPM\-ADDUSER" "1" "May 2014" "" ""
+.
+.SH "NAME"
+\fBnpm-adduser\fR \-\- Add a registry user account
+.
+.SH "SYNOPSIS"
+.
+.nf
+npm adduser
+.
+.fi
+.
+.SH "DESCRIPTION"
+Create or verify a user named \fB<username>\fR in the npm registry, and
+save the credentials to the \fB\|\.npmrc\fR file\.
+.
+.P
+The username, password, and email are read in from prompts\.
+.
+.P
+You may use this command to change your email address, but not username
+or password\.
+.
+.P
+To reset your password, go to \fIhttps://npmjs\.org/forgot\fR
+.
+.P
+You may use this command multiple times with the same user account to
+authorize on a new machine\.
+.
+.SH "CONFIGURATION"
+.
+.SS "registry"
+Default: http://registry\.npmjs\.org/
+.
+.P
+The base URL of the npm package registry\.
+.
+.SH "SEE ALSO"
+.
+.IP "\(bu" 4
+npm help registry
+.
+.IP "\(bu" 4
+npm help config
+.
+.IP "\(bu" 4
+npm help config
+.
+.IP "\(bu" 4
+npm help npmrc
+.
+.IP "\(bu" 4
+npm help owner
+.
+.IP "\(bu" 4
+npm help whoami
+.
+.IP "" 0
+
diff --git a/deps/npm/man/man1/npm-bin.1 b/deps/npm/man/man1/npm-bin.1
new file mode 100644
index 000000000..af5468b59
--- /dev/null
+++ b/deps/npm/man/man1/npm-bin.1
@@ -0,0 +1,40 @@
+.\" Generated with Ronnjs 0.3.8
+.\" http://github.com/kapouer/ronnjs/
+.
+.TH "NPM\-BIN" "1" "May 2014" "" ""
+.
+.SH "NAME"
+\fBnpm-bin\fR \-\- Display npm bin folder
+.
+.SH "SYNOPSIS"
+.
+.nf
+npm bin
+.
+.fi
+.
+.SH "DESCRIPTION"
+Print the folder where npm will install executables\.
+.
+.SH "SEE ALSO"
+.
+.IP "\(bu" 4
+npm help prefix
+.
+.IP "\(bu" 4
+npm help root
+.
+.IP "\(bu" 4
+npm help folders
+.
+.IP "\(bu" 4
+npm help config
+.
+.IP "\(bu" 4
+npm help config
+.
+.IP "\(bu" 4
+npm help npmrc
+.
+.IP "" 0
+
diff --git a/deps/npm/man/man1/npm-bugs.1 b/deps/npm/man/man1/npm-bugs.1
new file mode 100644
index 000000000..b3a953bfe
--- /dev/null
+++ b/deps/npm/man/man1/npm-bugs.1
@@ -0,0 +1,78 @@
+.\" Generated with Ronnjs 0.3.8
+.\" http://github.com/kapouer/ronnjs/
+.
+.TH "NPM\-BUGS" "1" "May 2014" "" ""
+.
+.SH "NAME"
+\fBnpm-bugs\fR \-\- Bugs for a package in a web browser maybe
+.
+.SH "SYNOPSIS"
+.
+.nf
+npm bugs <pkgname>
+npm bugs (with no args in a package dir)
+.
+.fi
+.
+.SH "DESCRIPTION"
+This command tries to guess at the likely location of a package\'s
+bug tracker URL, and then tries to open it using the \fB\-\-browser\fR
+config param\. If no package name is provided, it will search for
+a \fBpackage\.json\fR in the current folder and use the \fBname\fR property\.
+.
+.SH "CONFIGURATION"
+.
+.SS "browser"
+.
+.IP "\(bu" 4
+Default: OS X: \fB"open"\fR, Windows: \fB"start"\fR, Others: \fB"xdg\-open"\fR
+.
+.IP "\(bu" 4
+Type: String
+.
+.IP "" 0
+.
+.P
+The browser that is called by the \fBnpm bugs\fR command to open websites\.
+.
+.SS "registry"
+.
+.IP "\(bu" 4
+Default: https://registry\.npmjs\.org/
+.
+.IP "\(bu" 4
+Type: url
+.
+.IP "" 0
+.
+.P
+The base URL of the npm package registry\.
+.
+.SH "SEE ALSO"
+.
+.IP "\(bu" 4
+npm help docs
+.
+.IP "\(bu" 4
+npm help view
+.
+.IP "\(bu" 4
+npm help publish
+.
+.IP "\(bu" 4
+npm help registry
+.
+.IP "\(bu" 4
+npm help config
+.
+.IP "\(bu" 4
+npm help config
+.
+.IP "\(bu" 4
+npm help npmrc
+.
+.IP "\(bu" 4
+npm help package\.json
+.
+.IP "" 0
+
diff --git a/deps/npm/man/man1/npm-build.1 b/deps/npm/man/man1/npm-build.1
new file mode 100644
index 000000000..152caf79c
--- /dev/null
+++ b/deps/npm/man/man1/npm-build.1
@@ -0,0 +1,43 @@
+.\" Generated with Ronnjs 0.3.8
+.\" http://github.com/kapouer/ronnjs/
+.
+.TH "NPM\-BUILD" "1" "May 2014" "" ""
+.
+.SH "NAME"
+\fBnpm-build\fR \-\- Build a package
+.
+.SH "SYNOPSIS"
+.
+.nf
+npm build <package\-folder>
+.
+.fi
+.
+.IP "\(bu" 4
+\fB<package\-folder>\fR:
+A folder containing a \fBpackage\.json\fR file in its root\.
+.
+.IP "" 0
+.
+.SH "DESCRIPTION"
+This is the plumbing command called by \fBnpm link\fR and \fBnpm install\fR\|\.
+.
+.P
+It should generally not be called directly\.
+.
+.SH "SEE ALSO"
+.
+.IP "\(bu" 4
+npm help install
+.
+.IP "\(bu" 4
+npm help link
+.
+.IP "\(bu" 4
+npm help scripts
+.
+.IP "\(bu" 4
+npm help package\.json
+.
+.IP "" 0
+
diff --git a/deps/npm/man/man1/npm-bundle.1 b/deps/npm/man/man1/npm-bundle.1
new file mode 100644
index 000000000..5f2f85a3f
--- /dev/null
+++ b/deps/npm/man/man1/npm-bundle.1
@@ -0,0 +1,23 @@
+.\" Generated with Ronnjs 0.3.8
+.\" http://github.com/kapouer/ronnjs/
+.
+.TH "NPM\-BUNDLE" "1" "May 2014" "" ""
+.
+.SH "NAME"
+\fBnpm-bundle\fR \-\- REMOVED
+.
+.SH "DESCRIPTION"
+The \fBnpm bundle\fR command has been removed in 1\.0, for the simple reason
+that it is no longer necessary, as the default behavior is now to
+install packages into the local space\.
+.
+.P
+Just use \fBnpm install\fR now to do what \fBnpm bundle\fR used to do\.
+.
+.SH "SEE ALSO"
+.
+.IP "\(bu" 4
+npm help install
+.
+.IP "" 0
+
diff --git a/deps/npm/man/man1/npm-cache.1 b/deps/npm/man/man1/npm-cache.1
new file mode 100644
index 000000000..0e5b949c2
--- /dev/null
+++ b/deps/npm/man/man1/npm-cache.1
@@ -0,0 +1,104 @@
+.\" Generated with Ronnjs 0.3.8
+.\" http://github.com/kapouer/ronnjs/
+.
+.TH "NPM\-CACHE" "1" "May 2014" "" ""
+.
+.SH "NAME"
+\fBnpm-cache\fR \-\- Manipulates packages cache
+.
+.SH "SYNOPSIS"
+.
+.nf
+npm cache add <tarball file>
+npm cache add <folder>
+npm cache add <tarball url>
+npm cache add <name>@<version>
+npm cache ls [<path>]
+npm cache clean [<path>]
+.
+.fi
+.
+.SH "DESCRIPTION"
+Used to add, list, or clear the npm cache folder\.
+.
+.IP "\(bu" 4
+add:
+Add the specified package to the local cache\. This command is primarily
+intended to be used internally by npm, but it can provide a way to
+add data to the local installation cache explicitly\.
+.
+.IP "\(bu" 4
+ls:
+Show the data in the cache\. Argument is a path to show in the cache
+folder\. Works a bit like the \fBfind\fR program, but limited by the \fBdepth\fR config\.
+.
+.IP "\(bu" 4
+clean:
+Delete data out of the cache folder\. If an argument is provided, then
+it specifies a subpath to delete\. If no argument is provided, then
+the entire cache is cleared\.
+.
+.IP "" 0
+.
+.SH "DETAILS"
+npm stores cache data in the directory specified in \fBnpm config get cache\fR\|\.
+For each package that is added to the cache, three pieces of information are
+stored in \fB{cache}/{name}/{version}\fR:
+.
+.IP "\(bu" 4
+\|\.\.\./package/:
+A folder containing the package contents as they appear in the tarball\.
+.
+.IP "\(bu" 4
+\|\.\.\./package\.json:
+The package\.json file, as npm sees it, with overlays applied and a _id attribute\.
+.
+.IP "\(bu" 4
+\|\.\.\./package\.tgz:
+The tarball for that version\.
+.
+.IP "" 0
+.
+.P
+Additionally, whenever a registry request is made, a \fB\|\.cache\.json\fR file
+is placed at the corresponding URI, to store the ETag and the requested
+data\.
+.
+.P
+Commands that make non\-essential registry requests (such as \fBsearch\fR and \fBview\fR, or the completion scripts) generally specify a minimum timeout\.
+If the \fB\|\.cache\.json\fR file is younger than the specified timeout, then
+they do not make an HTTP request to the registry\.
+.
+.SH "CONFIGURATION"
+.
+.SS "cache"
+Default: \fB~/\.npm\fR on Posix, or \fB%AppData%/npm\-cache\fR on Windows\.
+.
+.P
+The root cache folder\.
+.
+.SH "SEE ALSO"
+.
+.IP "\(bu" 4
+npm help folders
+.
+.IP "\(bu" 4
+npm help config
+.
+.IP "\(bu" 4
+npm help config
+.
+.IP "\(bu" 4
+npm help npmrc
+.
+.IP "\(bu" 4
+npm help install
+.
+.IP "\(bu" 4
+npm help publish
+.
+.IP "\(bu" 4
+npm help pack
+.
+.IP "" 0
+
diff --git a/deps/npm/man/man1/npm-completion.1 b/deps/npm/man/man1/npm-completion.1
new file mode 100644
index 000000000..6d1ec8d97
--- /dev/null
+++ b/deps/npm/man/man1/npm-completion.1
@@ -0,0 +1,47 @@
+.\" Generated with Ronnjs 0.3.8
+.\" http://github.com/kapouer/ronnjs/
+.
+.TH "NPM\-COMPLETION" "1" "May 2014" "" ""
+.
+.SH "NAME"
+\fBnpm-completion\fR \-\- Tab Completion for npm
+.
+.SH "SYNOPSIS"
+.
+.nf
+\|\. <(npm completion)
+.
+.fi
+.
+.SH "DESCRIPTION"
+Enables tab\-completion in all npm commands\.
+.
+.P
+The synopsis above
+loads the completions into your current shell\. Adding it to
+your ~/\.bashrc or ~/\.zshrc will make the completions available
+everywhere\.
+.
+.P
+You may of course also pipe the output of npm completion to a file
+such as \fB/usr/local/etc/bash_completion\.d/npm\fR if you have a system
+that will read that file for you\.
+.
+.P
+When \fBCOMP_CWORD\fR, \fBCOMP_LINE\fR, and \fBCOMP_POINT\fR are defined in the
+environment, \fBnpm completion\fR acts in "plumbing mode", and outputs
+completions based on the arguments\.
+.
+.SH "SEE ALSO"
+.
+.IP "\(bu" 4
+npm help developers
+.
+.IP "\(bu" 4
+npm help faq
+.
+.IP "\(bu" 4
+npm help npm
+.
+.IP "" 0
+
diff --git a/deps/npm/man/man1/npm-config.1 b/deps/npm/man/man1/npm-config.1
new file mode 100644
index 000000000..38490724d
--- /dev/null
+++ b/deps/npm/man/man1/npm-config.1
@@ -0,0 +1,113 @@
+.\" Generated with Ronnjs 0.3.8
+.\" http://github.com/kapouer/ronnjs/
+.
+.TH "NPM\-CONFIG" "1" "May 2014" "" ""
+.
+.SH "NAME"
+\fBnpm-config\fR \-\- Manage the npm configuration files
+.
+.SH "SYNOPSIS"
+.
+.nf
+npm config set <key> <value> [\-\-global]
+npm config get <key>
+npm config delete <key>
+npm config list
+npm config edit
+npm c [set|get|delete|list]
+npm get <key>
+npm set <key> <value> [\-\-global]
+.
+.fi
+.
+.SH "DESCRIPTION"
+npm gets its config settings from the command line, environment
+variables, \fBnpmrc\fR files, and in some cases, the \fBpackage\.json\fR file\.
+.
+.P
+npm help See npmrc for more information about the npmrc files\.
+.
+.P
+npm help See \fBnpm\-config\fR for a more thorough discussion of the mechanisms
+involved\.
+.
+.P
+The \fBnpm config\fR command can be used to update and edit the contents
+of the user and global npmrc files\.
+.
+.SH "Sub\-commands"
+Config supports the following sub\-commands:
+.
+.SS "set"
+.
+.nf
+npm config set key value
+.
+.fi
+.
+.P
+Sets the config key to the value\.
+.
+.P
+If value is omitted, then it sets it to "true"\.
+.
+.SS "get"
+.
+.nf
+npm config get key
+.
+.fi
+.
+.P
+Echo the config value to stdout\.
+.
+.SS "list"
+.
+.nf
+npm config list
+.
+.fi
+.
+.P
+Show all the config settings\.
+.
+.SS "delete"
+.
+.nf
+npm config delete key
+.
+.fi
+.
+.P
+Deletes the key from all configuration files\.
+.
+.SS "edit"
+.
+.nf
+npm config edit
+.
+.fi
+.
+.P
+Opens the config file in an editor\. Use the \fB\-\-global\fR flag to edit the
+global config\.
+.
+.SH "SEE ALSO"
+.
+.IP "\(bu" 4
+npm help folders
+.
+.IP "\(bu" 4
+npm help config
+.
+.IP "\(bu" 4
+npm help package\.json
+.
+.IP "\(bu" 4
+npm help npmrc
+.
+.IP "\(bu" 4
+npm help npm
+.
+.IP "" 0
+
diff --git a/deps/npm/man/man1/npm-dedupe.1 b/deps/npm/man/man1/npm-dedupe.1
new file mode 100644
index 000000000..e60192178
--- /dev/null
+++ b/deps/npm/man/man1/npm-dedupe.1
@@ -0,0 +1,96 @@
+.\" Generated with Ronnjs 0.3.8
+.\" http://github.com/kapouer/ronnjs/
+.
+.TH "NPM\-DEDUPE" "1" "May 2014" "" ""
+.
+.SH "NAME"
+\fBnpm-dedupe\fR \-\- Reduce duplication
+.
+.SH "SYNOPSIS"
+.
+.nf
+npm dedupe [package names\.\.\.]
+npm ddp [package names\.\.\.]
+.
+.fi
+.
+.SH "DESCRIPTION"
+Searches the local package tree and attempts to simplify the overall
+structure by moving dependencies further up the tree, where they can
+be more effectively shared by multiple dependent packages\.
+.
+.P
+For example, consider this dependency graph:
+.
+.IP "" 4
+.
+.nf
+a
++\-\- b <\-\- depends on c@1\.0\.x
+| `\-\- c@1\.0\.3
+`\-\- d <\-\- depends on c@~1\.0\.9
+ `\-\- c@1\.0\.10
+.
+.fi
+.
+.IP "" 0
+.
+.P
+npm help In this case, \fBnpm\-dedupe\fR will transform the tree to:
+.
+.IP "" 4
+.
+.nf
+a
++\-\- b
++\-\- d
+`\-\- c@1\.0\.10
+.
+.fi
+.
+.IP "" 0
+.
+.P
+Because of the hierarchical nature of node\'s module lookup, b and d
+will both get their dependency met by the single c package at the root
+level of the tree\.
+.
+.P
+If a suitable version exists at the target location in the tree
+already, then it will be left untouched, but the other duplicates will
+be deleted\.
+.
+.P
+If no suitable version can be found, then a warning is printed, and
+nothing is done\.
+.
+.P
+If any arguments are supplied, then they are filters, and only the
+named packages will be touched\.
+.
+.P
+Note that this operation transforms the dependency tree, and may
+result in packages getting updated versions, perhaps from the npm
+registry\.
+.
+.P
+This feature is experimental, and may change in future versions\.
+.
+.P
+The \fB\-\-tag\fR argument will apply to all of the affected dependencies\. If a
+tag with the given name exists, the tagged version is preferred over newer
+versions\.
+.
+.SH "SEE ALSO"
+.
+.IP "\(bu" 4
+npm help ls
+.
+.IP "\(bu" 4
+npm help update
+.
+.IP "\(bu" 4
+npm help install
+.
+.IP "" 0
+
diff --git a/deps/npm/man/man1/npm-deprecate.1 b/deps/npm/man/man1/npm-deprecate.1
new file mode 100644
index 000000000..e4a19b23b
--- /dev/null
+++ b/deps/npm/man/man1/npm-deprecate.1
@@ -0,0 +1,48 @@
+.\" Generated with Ronnjs 0.3.8
+.\" http://github.com/kapouer/ronnjs/
+.
+.TH "NPM\-DEPRECATE" "1" "May 2014" "" ""
+.
+.SH "NAME"
+\fBnpm-deprecate\fR \-\- Deprecate a version of a package
+.
+.SH "SYNOPSIS"
+.
+.nf
+npm deprecate <name>[@<version>] <message>
+.
+.fi
+.
+.SH "DESCRIPTION"
+This command will update the npm registry entry for a package, providing
+a deprecation warning to all who attempt to install it\.
+.
+.P
+It works on version ranges as well as specific versions, so you can do
+something like this:
+.
+.IP "" 4
+.
+.nf
+npm deprecate my\-thing@"< 0\.2\.3" "critical bug fixed in v0\.2\.3"
+.
+.fi
+.
+.IP "" 0
+.
+.P
+Note that you must be the package owner to deprecate something\. See the \fBowner\fR and \fBadduser\fR help topics\.
+.
+.P
+To un\-deprecate a package, specify an empty string (\fB""\fR) for the \fBmessage\fR argument\.
+.
+.SH "SEE ALSO"
+.
+.IP "\(bu" 4
+npm help publish
+.
+.IP "\(bu" 4
+npm help registry
+.
+.IP "" 0
+
diff --git a/deps/npm/man/man1/npm-docs.1 b/deps/npm/man/man1/npm-docs.1
new file mode 100644
index 000000000..27cbb05c8
--- /dev/null
+++ b/deps/npm/man/man1/npm-docs.1
@@ -0,0 +1,78 @@
+.\" Generated with Ronnjs 0.3.8
+.\" http://github.com/kapouer/ronnjs/
+.
+.TH "NPM\-DOCS" "1" "May 2014" "" ""
+.
+.SH "NAME"
+\fBnpm-docs\fR \-\- Docs for a package in a web browser maybe
+.
+.SH "SYNOPSIS"
+.
+.nf
+npm docs [<pkgname> [<pkgname> \.\.\.]]
+npm docs (with no args in a package dir)
+npm home [<pkgname> [<pkgname> \.\.\.]]
+npm home (with no args in a package dir)
+.
+.fi
+.
+.SH "DESCRIPTION"
+This command tries to guess at the likely location of a package\'s
+documentation URL, and then tries to open it using the \fB\-\-browser\fR
+config param\. You can pass multiple package names at once\. If no
+package name is provided, it will search for a \fBpackage\.json\fR in
+the current folder and use the \fBname\fR property\.
+.
+.SH "CONFIGURATION"
+.
+.SS "browser"
+.
+.IP "\(bu" 4
+Default: OS X: \fB"open"\fR, Windows: \fB"start"\fR, Others: \fB"xdg\-open"\fR
+.
+.IP "\(bu" 4
+Type: String
+.
+.IP "" 0
+.
+.P
+The browser that is called by the \fBnpm docs\fR command to open websites\.
+.
+.SS "registry"
+.
+.IP "\(bu" 4
+Default: https://registry\.npmjs\.org/
+.
+.IP "\(bu" 4
+Type: url
+.
+.IP "" 0
+.
+.P
+The base URL of the npm package registry\.
+.
+.SH "SEE ALSO"
+.
+.IP "\(bu" 4
+npm help view
+.
+.IP "\(bu" 4
+npm help publish
+.
+.IP "\(bu" 4
+npm help registry
+.
+.IP "\(bu" 4
+npm help config
+.
+.IP "\(bu" 4
+npm help config
+.
+.IP "\(bu" 4
+npm help npmrc
+.
+.IP "\(bu" 4
+npm help package\.json
+.
+.IP "" 0
+
diff --git a/deps/npm/man/man1/npm-edit.1 b/deps/npm/man/man1/npm-edit.1
new file mode 100644
index 000000000..678c9128b
--- /dev/null
+++ b/deps/npm/man/man1/npm-edit.1
@@ -0,0 +1,66 @@
+.\" Generated with Ronnjs 0.3.8
+.\" http://github.com/kapouer/ronnjs/
+.
+.TH "NPM\-EDIT" "1" "May 2014" "" ""
+.
+.SH "NAME"
+\fBnpm-edit\fR \-\- Edit an installed package
+.
+.SH "SYNOPSIS"
+.
+.nf
+npm edit <name>[@<version>]
+.
+.fi
+.
+.SH "DESCRIPTION"
+Opens the package folder in the default editor (or whatever you\'ve
+npm help configured as the npm \fBeditor\fR config \-\- see \fBnpm\-config\fR\|\.)
+.
+.P
+After it has been edited, the package is rebuilt so as to pick up any
+changes in compiled packages\.
+.
+.P
+For instance, you can do \fBnpm install connect\fR to install connect
+into your package, and then \fBnpm edit connect\fR to make a few
+changes to your locally installed copy\.
+.
+.SH "CONFIGURATION"
+.
+.SS "editor"
+.
+.IP "\(bu" 4
+Default: \fBEDITOR\fR environment variable if set, or \fB"vi"\fR on Posix,
+or \fB"notepad"\fR on Windows\.
+.
+.IP "\(bu" 4
+Type: path
+.
+.IP "" 0
+.
+.P
+The command to run for \fBnpm edit\fR or \fBnpm config edit\fR\|\.
+.
+.SH "SEE ALSO"
+.
+.IP "\(bu" 4
+npm help folders
+.
+.IP "\(bu" 4
+npm help explore
+.
+.IP "\(bu" 4
+npm help install
+.
+.IP "\(bu" 4
+npm help config
+.
+.IP "\(bu" 4
+npm help config
+.
+.IP "\(bu" 4
+npm help npmrc
+.
+.IP "" 0
+
diff --git a/deps/npm/man/man1/npm-explore.1 b/deps/npm/man/man1/npm-explore.1
new file mode 100644
index 000000000..2baac8f2f
--- /dev/null
+++ b/deps/npm/man/man1/npm-explore.1
@@ -0,0 +1,76 @@
+.\" Generated with Ronnjs 0.3.8
+.\" http://github.com/kapouer/ronnjs/
+.
+.TH "NPM\-EXPLORE" "1" "May 2014" "" ""
+.
+.SH "NAME"
+\fBnpm-explore\fR \-\- Browse an installed package
+.
+.SH "SYNOPSIS"
+.
+.nf
+npm explore <name>[@<version>] [ \-\- <cmd>]
+.
+.fi
+.
+.SH "DESCRIPTION"
+Spawn a subshell in the directory of the installed package specified\.
+.
+.P
+If a command is specified, then it is run in the subshell, which then
+immediately terminates\.
+.
+.P
+This is particularly handy in the case of git submodules in the \fBnode_modules\fR folder:
+.
+.IP "" 4
+.
+.nf
+npm explore some\-dependency \-\- git pull origin master
+.
+.fi
+.
+.IP "" 0
+.
+.P
+Note that the package is \fInot\fR automatically rebuilt afterwards, so be
+sure to use \fBnpm rebuild <pkg>\fR if you make any changes\.
+.
+.SH "CONFIGURATION"
+.
+.SS "shell"
+.
+.IP "\(bu" 4
+Default: SHELL environment variable, or "bash" on Posix, or "cmd" on
+Windows
+.
+.IP "\(bu" 4
+Type: path
+.
+.IP "" 0
+.
+.P
+The shell to run for the \fBnpm explore\fR command\.
+.
+.SH "SEE ALSO"
+.
+.IP "\(bu" 4
+npm help submodule
+.
+.IP "\(bu" 4
+npm help folders
+.
+.IP "\(bu" 4
+npm help edit
+.
+.IP "\(bu" 4
+npm help rebuild
+.
+.IP "\(bu" 4
+npm help build
+.
+.IP "\(bu" 4
+npm help install
+.
+.IP "" 0
+
diff --git a/deps/npm/man/man1/npm-help-search.1 b/deps/npm/man/man1/npm-help-search.1
new file mode 100644
index 000000000..cf723d2f4
--- /dev/null
+++ b/deps/npm/man/man1/npm-help-search.1
@@ -0,0 +1,59 @@
+.\" Generated with Ronnjs 0.3.8
+.\" http://github.com/kapouer/ronnjs/
+.
+.TH "NPM\-HELP\-SEARCH" "1" "May 2014" "" ""
+.
+.SH "NAME"
+\fBnpm-help-search\fR \-\- Search npm help documentation
+.
+.SH "SYNOPSIS"
+.
+.nf
+npm help\-search some search terms
+.
+.fi
+.
+.SH "DESCRIPTION"
+This command will search the npm markdown documentation files for the
+terms provided, and then list the results, sorted by relevance\.
+.
+.P
+If only one result is found, then it will show that help topic\.
+.
+.P
+If the argument to \fBnpm help\fR is not a known help topic, then it will
+call \fBhelp\-search\fR\|\. It is rarely if ever necessary to call this
+command directly\.
+.
+.SH "CONFIGURATION"
+.
+.SS "long"
+.
+.IP "\(bu" 4
+Type: Boolean
+.
+.IP "\(bu" 4
+Default false
+.
+.IP "" 0
+.
+.P
+If true, the "long" flag will cause help\-search to output context around
+where the terms were found in the documentation\.
+.
+.P
+If false, then help\-search will just list out the help topics found\.
+.
+.SH "SEE ALSO"
+.
+.IP "\(bu" 4
+npm help npm
+.
+.IP "\(bu" 4
+npm help faq
+.
+.IP "\(bu" 4
+npm help help
+.
+.IP "" 0
+
diff --git a/deps/npm/man/man1/npm-help.1 b/deps/npm/man/man1/npm-help.1
new file mode 100644
index 000000000..9e6c240fd
--- /dev/null
+++ b/deps/npm/man/man1/npm-help.1
@@ -0,0 +1,77 @@
+.\" Generated with Ronnjs 0.3.8
+.\" http://github.com/kapouer/ronnjs/
+.
+.TH "NPM\-HELP" "1" "May 2014" "" ""
+.
+.SH "NAME"
+\fBnpm-help\fR \-\- Get help on npm
+.
+.SH "SYNOPSIS"
+.
+.nf
+npm help <topic>
+npm help some search terms
+.
+.fi
+.
+.SH "DESCRIPTION"
+If supplied a topic, then show the appropriate documentation page\.
+.
+.P
+If the topic does not exist, or if multiple terms are provided, then run
+the \fBhelp\-search\fR command to find a match\. Note that, if \fBhelp\-search\fR
+finds a single subject, then it will run \fBhelp\fR on that topic, so unique
+matches are equivalent to specifying a topic name\.
+.
+.SH "CONFIGURATION"
+.
+.SS "viewer"
+.
+.IP "\(bu" 4
+Default: "man" on Posix, "browser" on Windows
+.
+.IP "\(bu" 4
+Type: path
+.
+.IP "" 0
+.
+.P
+The program to use to view help content\.
+.
+.P
+Set to \fB"browser"\fR to view html help content in the default web browser\.
+.
+.SH "SEE ALSO"
+.
+.IP "\(bu" 4
+npm help npm
+.
+.IP "\(bu" 4
+README
+.
+.IP "\(bu" 4
+npm help faq
+.
+.IP "\(bu" 4
+npm help folders
+.
+.IP "\(bu" 4
+npm help config
+.
+.IP "\(bu" 4
+npm help config
+.
+.IP "\(bu" 4
+npm help npmrc
+.
+.IP "\(bu" 4
+npm help package\.json
+.
+.IP "\(bu" 4
+npm help help\-search
+.
+.IP "\(bu" 4
+npm help index
+.
+.IP "" 0
+
diff --git a/deps/npm/man/man1/npm-init.1 b/deps/npm/man/man1/npm-init.1
new file mode 100644
index 000000000..795a8db9b
--- /dev/null
+++ b/deps/npm/man/man1/npm-init.1
@@ -0,0 +1,43 @@
+.\" Generated with Ronnjs 0.3.8
+.\" http://github.com/kapouer/ronnjs/
+.
+.TH "NPM\-INIT" "1" "May 2014" "" ""
+.
+.SH "NAME"
+\fBnpm-init\fR \-\- Interactively create a package\.json file
+.
+.SH "SYNOPSIS"
+.
+.nf
+npm init
+.
+.fi
+.
+.SH "DESCRIPTION"
+This will ask you a bunch of questions, and then write a package\.json for you\.
+.
+.P
+It attempts to make reasonable guesses about what you want things to be set to,
+and then writes a package\.json file with the options you\'ve selected\.
+.
+.P
+If you already have a package\.json file, it\'ll read that first, and default to
+the options in there\.
+.
+.P
+It is strictly additive, so it does not delete options from your package\.json
+without a really good reason to do so\.
+.
+.SH "SEE ALSO"
+.
+.IP "\(bu" 4
+\fIhttps://github\.com/isaacs/init\-package\-json\fR
+.
+.IP "\(bu" 4
+npm help package\.json
+.
+.IP "\(bu" 4
+npm help version
+.
+.IP "" 0
+
diff --git a/deps/npm/man/man1/npm-install.1 b/deps/npm/man/man1/npm-install.1
new file mode 100644
index 000000000..d98b55b12
--- /dev/null
+++ b/deps/npm/man/man1/npm-install.1
@@ -0,0 +1,441 @@
+.\" Generated with Ronnjs 0.3.8
+.\" http://github.com/kapouer/ronnjs/
+.
+.TH "NPM\-INSTALL" "1" "May 2014" "" ""
+.
+.SH "NAME"
+\fBnpm-install\fR \-\- Install a package
+.
+.SH "SYNOPSIS"
+.
+.nf
+npm install (with no args in a package dir)
+npm install <tarball file>
+npm install <tarball url>
+npm install <folder>
+npm install <name> [\-\-save|\-\-save\-dev|\-\-save\-optional] [\-\-save\-exact]
+npm install <name>@<tag>
+npm install <name>@<version>
+npm install <name>@<version range>
+npm i (with any of the previous argument usage)
+.
+.fi
+.
+.SH "DESCRIPTION"
+This command installs a package, and any packages that it depends on\. If the
+package has a shrinkwrap file, the installation of dependencies will be driven
+npm help by that\. See npm\-shrinkwrap\.
+.
+.P
+A \fBpackage\fR is:
+.
+.IP "\(bu" 4
+a) a folder containing a program described by a package\.json file
+.
+.IP "\(bu" 4
+b) a gzipped tarball containing (a)
+.
+.IP "\(bu" 4
+c) a url that resolves to (b)
+.
+.IP "\(bu" 4
+d) a \fB<name>@<version>\fR that is published on the registry (npm help see \fBnpm\-registry\fR) with (c)
+.
+.IP "\(bu" 4
+e) a \fB<name>@<tag>\fR that points to (d)
+.
+.IP "\(bu" 4
+f) a \fB<name>\fR that has a "latest" tag satisfying (e)
+.
+.IP "\(bu" 4
+g) a \fB<git remote url>\fR that resolves to (b)
+.
+.IP "" 0
+.
+.P
+Even if you never publish your package, you can still get a lot of
+benefits of using npm if you just want to write a node program (a), and
+perhaps if you also want to be able to easily install it elsewhere
+after packing it up into a tarball (b)\.
+.
+.IP "\(bu" 4
+\fBnpm install\fR (in package directory, no arguments):
+.
+.IP
+Install the dependencies in the local node_modules folder\.
+.
+.IP
+In global mode (ie, with \fB\-g\fR or \fB\-\-global\fR appended to the command),
+it installs the current package context (ie, the current working
+directory) as a global package\.
+.
+.IP
+By default, \fBnpm install\fR will install all modules listed as
+dependencies\. With the \fB\-\-production\fR flag,
+npm will not install modules listed in \fBdevDependencies\fR\|\.
+.
+.IP "\(bu" 4
+\fBnpm install <folder>\fR:
+.
+.IP
+Install a package that is sitting in a folder on the filesystem\.
+.
+.IP "\(bu" 4
+\fBnpm install <tarball file>\fR:
+.
+.IP
+Install a package that is sitting on the filesystem\. Note: if you just want
+to link a dev directory into your npm root, you can do this more easily by
+using \fBnpm link\fR\|\.
+.
+.IP
+Example:
+.
+.IP "" 4
+.
+.nf
+ npm install \./package\.tgz
+.
+.fi
+.
+.IP "" 0
+
+.
+.IP "\(bu" 4
+\fBnpm install <tarball url>\fR:
+.
+.IP
+Fetch the tarball url, and then install it\. In order to distinguish between
+this and other options, the argument must start with "http://" or "https://"
+.
+.IP
+Example:
+.
+.IP "" 4
+.
+.nf
+ npm install https://github\.com/indexzero/forever/tarball/v0\.5\.6
+.
+.fi
+.
+.IP "" 0
+
+.
+.IP "\(bu" 4
+\fBnpm install <name> [\-\-save|\-\-save\-dev|\-\-save\-optional]\fR:
+.
+.IP
+Do a \fB<name>@<tag>\fR install, where \fB<tag>\fR is the "tag" config\. (npm help See \fBnpm\-config\fR\|\.)
+.
+.IP
+In most cases, this will install the latest version
+of the module published on npm\.
+.
+.IP
+Example:
+.
+.IP
+ npm install sax
+.
+.IP
+\fBnpm install\fR takes 3 exclusive, optional flags which save or update
+the package version in your main package\.json:
+.
+.IP "\(bu" 4
+\fB\-\-save\fR: Package will appear in your \fBdependencies\fR\|\.
+.
+.IP "\(bu" 4
+\fB\-\-save\-dev\fR: Package will appear in your \fBdevDependencies\fR\|\.
+.
+.IP "\(bu" 4
+\fB\-\-save\-optional\fR: Package will appear in your \fBoptionalDependencies\fR\|\.
+.
+.IP
+When using any of the above options to save dependencies to your
+package\.json, there is an additional, optional flag:
+.
+.IP "\(bu" 4
+\fB\-\-save\-exact\fR: Saved dependencies will be configured with an
+exact version rather than using npm\'s default semver range
+operator\.
+.
+.IP
+Examples:
+.
+.IP
+ npm install sax \-\-save
+ npm install node\-tap \-\-save\-dev
+ npm install dtrace\-provider \-\-save\-optional
+ npm install readable\-stream \-\-save \-\-save\-exact
+.
+.IP
+\fBNote\fR: If there is a file or folder named \fB<name>\fR in the current
+working directory, then it will try to install that, and only try to
+fetch the package by name if it is not valid\.
+.
+.IP "" 0
+
+.
+.IP "\(bu" 4
+\fBnpm install <name>@<tag>\fR:
+.
+.IP
+Install the version of the package that is referenced by the specified tag\.
+If the tag does not exist in the registry data for that package, then this
+will fail\.
+.
+.IP
+Example:
+.
+.IP "" 4
+.
+.nf
+ npm install sax@latest
+.
+.fi
+.
+.IP "" 0
+
+.
+.IP "\(bu" 4
+\fBnpm install <name>@<version>\fR:
+.
+.IP
+Install the specified version of the package\. This will fail if the version
+has not been published to the registry\.
+.
+.IP
+Example:
+.
+.IP "" 4
+.
+.nf
+ npm install sax@0\.1\.1
+.
+.fi
+.
+.IP "" 0
+
+.
+.IP "\(bu" 4
+\fBnpm install <name>@<version range>\fR:
+.
+.IP
+Install a version of the package matching the specified version range\. This
+npm help will follow the same rules for resolving dependencies described in \fBpackage\.json\fR\|\.
+.
+.IP
+Note that most version ranges must be put in quotes so that your shell will
+treat it as a single argument\.
+.
+.IP
+Example:
+.
+.IP
+ npm install sax@">=0\.1\.0 <0\.2\.0"
+.
+.IP "\(bu" 4
+\fBnpm install <git remote url>\fR:
+.
+.IP
+Install a package by cloning a git remote url\. The format of the git
+url is:
+.
+.IP
+ <protocol>://[<user>@]<hostname><separator><path>[#<commit\-ish>]
+.
+.IP
+\fB<protocol>\fR is one of \fBgit\fR, \fBgit+ssh\fR, \fBgit+http\fR, or \fBgit+https\fR\|\. If no \fB<commit\-ish>\fR is specified, then \fBmaster\fR is
+used\.
+.
+.IP
+Examples:
+.
+.IP "" 4
+.
+.nf
+ git+ssh://git@github\.com:npm/npm\.git#v1\.0\.27
+ git+https://isaacs@github\.com/npm/npm\.git
+ git://github\.com/npm/npm\.git#v1\.0\.27
+.
+.fi
+.
+.IP "" 0
+
+.
+.IP "" 0
+.
+.P
+You may combine multiple arguments, and even multiple types of arguments\.
+For example:
+.
+.IP "" 4
+.
+.nf
+npm install sax@">=0\.1\.0 <0\.2\.0" bench supervisor
+.
+.fi
+.
+.IP "" 0
+.
+.P
+The \fB\-\-tag\fR argument will apply to all of the specified install targets\. If a
+tag with the given name exists, the tagged version is preferred over newer
+versions\.
+.
+.P
+The \fB\-\-force\fR argument will force npm to fetch remote resources even if a
+local copy exists on disk\.
+.
+.IP "" 4
+.
+.nf
+npm install sax \-\-force
+.
+.fi
+.
+.IP "" 0
+.
+.P
+The \fB\-\-global\fR argument will cause npm to install the package globally
+npm help rather than locally\. See \fBnpm\-folders\fR\|\.
+.
+.P
+The \fB\-\-link\fR argument will cause npm to link global installs into the
+local space in some cases\.
+.
+.P
+The \fB\-\-no\-bin\-links\fR argument will prevent npm from creating symlinks for
+any binaries the package might contain\.
+.
+.P
+The \fB\-\-no\-optional\fR argument will prevent optional dependencies from
+being installed\.
+.
+.P
+The \fB\-\-no\-shrinkwrap\fR argument, which will ignore an available
+shrinkwrap file and use the package\.json instead\.
+.
+.P
+The \fB\-\-nodedir=/path/to/node/source\fR argument will allow npm to find the
+node source code so that npm can compile native modules\.
+.
+.P
+npm help See \fBnpm\-config\fR\|\. Many of the configuration params have some
+effect on installation, since that\'s most of what npm does\.
+.
+.SH "ALGORITHM"
+To install a package, npm uses the following algorithm:
+.
+.IP "" 4
+.
+.nf
+install(where, what, family, ancestors)
+fetch what, unpack to <where>/node_modules/<what>
+for each dep in what\.dependencies
+ resolve dep to precise version
+for each dep@version in what\.dependencies
+ not in <where>/node_modules/<what>/node_modules/*
+ and not in <family>
+ add precise version deps to <family>
+ install(<where>/node_modules/<what>, dep, family)
+.
+.fi
+.
+.IP "" 0
+.
+.P
+For this \fBpackage{dep}\fR structure: \fBA{B,C}, B{C}, C{D}\fR,
+this algorithm produces:
+.
+.IP "" 4
+.
+.nf
+A
++\-\- B
+`\-\- C
+ `\-\- D
+.
+.fi
+.
+.IP "" 0
+.
+.P
+That is, the dependency from B to C is satisfied by the fact that A
+already caused C to be installed at a higher level\.
+.
+.P
+npm help See npm\-folders for a more detailed description of the specific
+folder structures that npm creates\.
+.
+.SS "Limitations of npm&#39;s Install Algorithm"
+There are some very rare and pathological edge\-cases where a cycle can
+cause npm to try to install a never\-ending tree of packages\. Here is
+the simplest case:
+.
+.IP "" 4
+.
+.nf
+A \-> B \-> A\' \-> B\' \-> A \-> B \-> A\' \-> B\' \-> A \-> \.\.\.
+.
+.fi
+.
+.IP "" 0
+.
+.P
+where \fBA\fR is some version of a package, and \fBA\'\fR is a different version
+of the same package\. Because \fBB\fR depends on a different version of \fBA\fR
+than the one that is already in the tree, it must install a separate
+copy\. The same is true of \fBA\'\fR, which must install \fBB\'\fR\|\. Because \fBB\'\fR
+depends on the original version of \fBA\fR, which has been overridden, the
+cycle falls into infinite regress\.
+.
+.P
+To avoid this situation, npm flat\-out refuses to install any \fBname@version\fR that is already present anywhere in the tree of package
+folder ancestors\. A more correct, but more complex, solution would be
+to symlink the existing version into the new location\. If this ever
+affects a real use\-case, it will be investigated\.
+.
+.SH "SEE ALSO"
+.
+.IP "\(bu" 4
+npm help folders
+.
+.IP "\(bu" 4
+npm help update
+.
+.IP "\(bu" 4
+npm help link
+.
+.IP "\(bu" 4
+npm help rebuild
+.
+.IP "\(bu" 4
+npm help scripts
+.
+.IP "\(bu" 4
+npm help build
+.
+.IP "\(bu" 4
+npm help config
+.
+.IP "\(bu" 4
+npm help config
+.
+.IP "\(bu" 4
+npm help npmrc
+.
+.IP "\(bu" 4
+npm help registry
+.
+.IP "\(bu" 4
+npm help tag
+.
+.IP "\(bu" 4
+npm help rm
+.
+.IP "\(bu" 4
+npm help shrinkwrap
+.
+.IP "" 0
+
diff --git a/deps/npm/man/man1/npm-link.1 b/deps/npm/man/man1/npm-link.1
new file mode 100644
index 000000000..389dd82d5
--- /dev/null
+++ b/deps/npm/man/man1/npm-link.1
@@ -0,0 +1,119 @@
+.\" Generated with Ronnjs 0.3.8
+.\" http://github.com/kapouer/ronnjs/
+.
+.TH "NPM\-LINK" "1" "May 2014" "" ""
+.
+.SH "NAME"
+\fBnpm-link\fR \-\- Symlink a package folder
+.
+.SH "SYNOPSIS"
+.
+.nf
+npm link (in package folder)
+npm link <pkgname>
+npm ln (with any of the previous argument usage)
+.
+.fi
+.
+.SH "DESCRIPTION"
+Package linking is a two\-step process\.
+.
+.P
+First, \fBnpm link\fR in a package folder will create a globally\-installed
+symbolic link from \fBprefix/package\-name\fR to the current folder\.
+.
+.P
+Next, in some other location, \fBnpm link package\-name\fR will create a
+symlink from the local \fBnode_modules\fR folder to the global symlink\.
+.
+.P
+Note that \fBpackage\-name\fR is taken from \fBpackage\.json\fR,
+not from directory name\.
+.
+.P
+When creating tarballs for \fBnpm publish\fR, the linked packages are
+"snapshotted" to their current state by resolving the symbolic links\.
+.
+.P
+This is
+handy for installing your own stuff, so that you can work on it and test it
+iteratively without having to continually rebuild\.
+.
+.P
+For example:
+.
+.IP "" 4
+.
+.nf
+cd ~/projects/node\-redis # go into the package directory
+npm link # creates global link
+cd ~/projects/node\-bloggy # go into some other package directory\.
+npm link redis # link\-install the package
+.
+.fi
+.
+.IP "" 0
+.
+.P
+Now, any changes to ~/projects/node\-redis will be reflected in
+~/projects/node\-bloggy/node_modules/redis/
+.
+.P
+You may also shortcut the two steps in one\. For example, to do the
+above use\-case in a shorter way:
+.
+.IP "" 4
+.
+.nf
+cd ~/projects/node\-bloggy # go into the dir of your main project
+npm link \.\./node\-redis # link the dir of your dependency
+.
+.fi
+.
+.IP "" 0
+.
+.P
+The second line is the equivalent of doing:
+.
+.IP "" 4
+.
+.nf
+(cd \.\./node\-redis; npm link)
+npm link redis
+.
+.fi
+.
+.IP "" 0
+.
+.P
+That is, it first creates a global link, and then links the global
+installation target into your project\'s \fBnode_modules\fR folder\.
+.
+.SH "SEE ALSO"
+.
+.IP "\(bu" 4
+npm help developers
+.
+.IP "\(bu" 4
+npm help faq
+.
+.IP "\(bu" 4
+npm help package\.json
+.
+.IP "\(bu" 4
+npm help install
+.
+.IP "\(bu" 4
+npm help folders
+.
+.IP "\(bu" 4
+npm help config
+.
+.IP "\(bu" 4
+npm help config
+.
+.IP "\(bu" 4
+npm help npmrc
+.
+.IP "" 0
+
diff --git a/deps/npm/man/man1/npm-ls.1 b/deps/npm/man/man1/npm-ls.1
new file mode 100644
index 000000000..f0662f64c
--- /dev/null
+++ b/deps/npm/man/man1/npm-ls.1
@@ -0,0 +1,146 @@
+.\" Generated with Ronnjs 0.3.8
+.\" http://github.com/kapouer/ronnjs/
+.
+.TH "NPM\-LS" "1" "May 2014" "" ""
+.
+.SH "NAME"
+\fBnpm-ls\fR \-\- List installed packages
+.
+.SH "SYNOPSIS"
+.
+.nf
+npm list [<pkg> \.\.\.]
+npm ls [<pkg> \.\.\.]
+npm la [<pkg> \.\.\.]
+npm ll [<pkg> \.\.\.]
+.
+.fi
+.
+.SH "DESCRIPTION"
+This command will print to stdout all the versions of packages that are
+installed, as well as their dependencies, in a tree\-structure\.
+.
+.P
+Positional arguments are \fBname@version\-range\fR identifiers, which will
+limit the results to only the paths to the packages named\. Note that
+nested packages will \fIalso\fR show the paths to the specified packages\.
+For example, running \fBnpm ls promzard\fR in npm\'s source tree will show:
+.
+.IP "" 4
+.
+.nf
+npm@1.4.10 /path/to/npm
+└─┬ init\-package\-json@0\.0\.4
+ └── promzard@0\.1\.5
+.
+.fi
+.
+.IP "" 0
+.
+.P
+It will print out extraneous, missing, and invalid packages\.
+.
+.P
+If a project specifies git urls for dependencies these are shown
+in parentheses after the name@version to make it easier for users to
+recognize potential forks of a project\.
+.
+.P
+When run as \fBll\fR or \fBla\fR, it shows extended information by default\.
+.
+.SH "CONFIGURATION"
+.
+.SS "json"
+.
+.IP "\(bu" 4
+Default: false
+.
+.IP "\(bu" 4
+Type: Boolean
+.
+.IP "" 0
+.
+.P
+Show information in JSON format\.
+.
+.SS "long"
+.
+.IP "\(bu" 4
+Default: false
+.
+.IP "\(bu" 4
+Type: Boolean
+.
+.IP "" 0
+.
+.P
+Show extended information\.
+.
+.SS "parseable"
+.
+.IP "\(bu" 4
+Default: false
+.
+.IP "\(bu" 4
+Type: Boolean
+.
+.IP "" 0
+.
+.P
+Show parseable output instead of tree view\.
+.
+.SS "global"
+.
+.IP "\(bu" 4
+Default: false
+.
+.IP "\(bu" 4
+Type: Boolean
+.
+.IP "" 0
+.
+.P
+List packages in the global install prefix instead of in the current
+project\.
+.
+.SS "depth"
+.
+.IP "\(bu" 4
+Type: Int
+.
+.IP "" 0
+.
+.P
+Max display depth of the dependency tree\.
+.
+.SH "SEE ALSO"
+.
+.IP "\(bu" 4
+npm help config
+.
+.IP "\(bu" 4
+npm help config
+.
+.IP "\(bu" 4
+npm help npmrc
+.
+.IP "\(bu" 4
+npm help folders
+.
+.IP "\(bu" 4
+npm help install
+.
+.IP "\(bu" 4
+npm help link
+.
+.IP "\(bu" 4
+npm help prune
+.
+.IP "\(bu" 4
+npm help outdated
+.
+.IP "\(bu" 4
+npm help update
+.
+.IP "" 0
+
diff --git a/deps/npm/man/man1/npm-outdated.1 b/deps/npm/man/man1/npm-outdated.1
new file mode 100644
index 000000000..f0e7ce6d9
--- /dev/null
+++ b/deps/npm/man/man1/npm-outdated.1
@@ -0,0 +1,102 @@
+.\" Generated with Ronnjs 0.3.8
+.\" http://github.com/kapouer/ronnjs/
+.
+.TH "NPM\-OUTDATED" "1" "May 2014" "" ""
+.
+.SH "NAME"
+\fBnpm-outdated\fR \-\- Check for outdated packages
+.
+.SH "SYNOPSIS"
+.
+.nf
+npm outdated [<name> [<name> \.\.\.]]
+.
+.fi
+.
+.SH "DESCRIPTION"
+This command will check the registry to see if any (or, specific) installed
+packages are currently outdated\.
+.
+.P
+The resulting field \'wanted\' shows the latest version according to the
+version specified in the package\.json, the field \'latest\' the very latest
+version of the package\.
+.
+.SH "CONFIGURATION"
+.
+.SS "json"
+.
+.IP "\(bu" 4
+Default: false
+.
+.IP "\(bu" 4
+Type: Boolean
+.
+.IP "" 0
+.
+.P
+Show information in JSON format\.
+.
+.SS "long"
+.
+.IP "\(bu" 4
+Default: false
+.
+.IP "\(bu" 4
+Type: Boolean
+.
+.IP "" 0
+.
+.P
+Show extended information\.
+.
+.SS "parseable"
+.
+.IP "\(bu" 4
+Default: false
+.
+.IP "\(bu" 4
+Type: Boolean
+.
+.IP "" 0
+.
+.P
+Show parseable output instead of tree view\.
+.
+.SS "global"
+.
+.IP "\(bu" 4
+Default: false
+.
+.IP "\(bu" 4
+Type: Boolean
+.
+.IP "" 0
+.
+.P
+Check packages in the global install prefix instead of in the current
+project\.
+.
+.SS "depth"
+.
+.IP "\(bu" 4
+Type: Int
+.
+.IP "" 0
+.
+.P
+Max depth for checking dependency tree\.
+.
+.SH "SEE ALSO"
+.
+.IP "\(bu" 4
+npm help update
+.
+.IP "\(bu" 4
+npm help registry
+.
+.IP "\(bu" 4
+npm help folders
+.
+.IP "" 0
+
diff --git a/deps/npm/man/man1/npm-owner.1 b/deps/npm/man/man1/npm-owner.1
new file mode 100644
index 000000000..dbb41b7b8
--- /dev/null
+++ b/deps/npm/man/man1/npm-owner.1
@@ -0,0 +1,58 @@
+.\" Generated with Ronnjs 0.3.8
+.\" http://github.com/kapouer/ronnjs/
+.
+.TH "NPM\-OWNER" "1" "May 2014" "" ""
+.
+.SH "NAME"
+\fBnpm-owner\fR \-\- Manage package owners
+.
+.SH "SYNOPSIS"
+.
+.nf
+npm owner ls <package name>
+npm owner add <user> <package name>
+npm owner rm <user> <package name>
+.
+.fi
+.
+.SH "DESCRIPTION"
+Manage ownership of published packages\.
+.
+.IP "\(bu" 4
+ls:
+List all the users who have access to modify a package and push new versions\.
+Handy when you need to know who to bug for help\.
+.
+.IP "\(bu" 4
+add:
+Add a new user as a maintainer of a package\. This user is enabled to modify
+metadata, publish new versions, and add other owners\.
+.
+.IP "\(bu" 4
+rm:
+Remove a user from the package owner list\. This immediately revokes their
+privileges\.
+.
+.IP "" 0
+.
+.P
+Note that there is only one level of access\. Either you can modify a package,
+or you can\'t\. Future versions may contain more fine\-grained access levels, but
+that is not implemented at this time\.
+.
+.SH "SEE ALSO"
+.
+.IP "\(bu" 4
+npm help publish
+.
+.IP "\(bu" 4
+npm help registry
+.
+.IP "\(bu" 4
+npm help adduser
+.
+.IP "\(bu" 4
+npm help disputes
+.
+.IP "" 0
+
diff --git a/deps/npm/man/man1/npm-pack.1 b/deps/npm/man/man1/npm-pack.1
new file mode 100644
index 000000000..c23b617e0
--- /dev/null
+++ b/deps/npm/man/man1/npm-pack.1
@@ -0,0 +1,48 @@
+.\" Generated with Ronnjs 0.3.8
+.\" http://github.com/kapouer/ronnjs/
+.
+.TH "NPM\-PACK" "1" "May 2014" "" ""
+.
+.SH "NAME"
+\fBnpm-pack\fR \-\- Create a tarball from a package
+.
+.SH "SYNOPSIS"
+.
+.nf
+npm pack [<pkg> [<pkg> \.\.\.]]
+.
+.fi
+.
+.SH "DESCRIPTION"
+For anything that\'s installable (that is, a package folder, tarball,
+tarball url, name@tag, name@version, or name), this command will fetch
+it to the cache, and then copy the tarball to the current working
+directory as \fB<name>\-<version>\.tgz\fR, and then write the filenames out to
+stdout\.
+.
+.P
+If the same package is specified multiple times, then the file will be
+overwritten the second time\.
+.
+.P
+If no arguments are supplied, then npm packs the current package folder\.
+.
+.SH "SEE ALSO"
+.
+.IP "\(bu" 4
+npm help cache
+.
+.IP "\(bu" 4
+npm help publish
+.
+.IP "\(bu" 4
+npm help config
+.
+.IP "\(bu" 4
+npm help config
+.
+.IP "\(bu" 4
+npm help npmrc
+.
+.IP "" 0
+
diff --git a/deps/npm/man/man1/npm-prefix.1 b/deps/npm/man/man1/npm-prefix.1
new file mode 100644
index 000000000..66849742b
--- /dev/null
+++ b/deps/npm/man/man1/npm-prefix.1
@@ -0,0 +1,40 @@
+.\" Generated with Ronnjs 0.3.8
+.\" http://github.com/kapouer/ronnjs/
+.
+.TH "NPM\-PREFIX" "1" "May 2014" "" ""
+.
+.SH "NAME"
+\fBnpm-prefix\fR \-\- Display prefix
+.
+.SH "SYNOPSIS"
+.
+.nf
+npm prefix
+.
+.fi
+.
+.SH "DESCRIPTION"
+Print the prefix to standard out\.
+.
+.SH "SEE ALSO"
+.
+.IP "\(bu" 4
+npm help root
+.
+.IP "\(bu" 4
+npm help bin
+.
+.IP "\(bu" 4
+npm help folders
+.
+.IP "\(bu" 4
+npm help config
+.
+.IP "\(bu" 4
+npm help config
+.
+.IP "\(bu" 4
+npm help npmrc
+.
+.IP "" 0
+
diff --git a/deps/npm/man/man1/npm-prune.1 b/deps/npm/man/man1/npm-prune.1
new file mode 100644
index 000000000..710438d10
--- /dev/null
+++ b/deps/npm/man/man1/npm-prune.1
@@ -0,0 +1,42 @@
+.\" Generated with Ronnjs 0.3.8
+.\" http://github.com/kapouer/ronnjs/
+.
+.TH "NPM\-PRUNE" "1" "May 2014" "" ""
+.
+.SH "NAME"
+\fBnpm-prune\fR \-\- Remove extraneous packages
+.
+.SH "SYNOPSIS"
+.
+.nf
+npm prune [<name> [<name \.\.\.]]
+npm prune [<name> [<name \.\.\.]] [\-\-production]
+.
+.fi
+.
+.SH "DESCRIPTION"
+This command removes "extraneous" packages\. If a package name is
+provided, then only packages matching one of the supplied names are
+removed\.
+.
+.P
+Extraneous packages are packages that are not listed on the parent
+package\'s dependencies list\.
+.
+.P
+If the \fB\-\-production\fR flag is specified, this command will remove the
+packages specified in your \fBdevDependencies\fR\|\.
+.
+.SH "SEE ALSO"
+.
+.IP "\(bu" 4
+npm help rm
+.
+.IP "\(bu" 4
+npm help folders
+.
+.IP "\(bu" 4
+npm help ls
+.
+.IP "" 0
+
diff --git a/deps/npm/man/man1/npm-publish.1 b/deps/npm/man/man1/npm-publish.1
new file mode 100644
index 000000000..19271c82a
--- /dev/null
+++ b/deps/npm/man/man1/npm-publish.1
@@ -0,0 +1,64 @@
+.\" Generated with Ronnjs 0.3.8
+.\" http://github.com/kapouer/ronnjs/
+.
+.TH "NPM\-PUBLISH" "1" "May 2014" "" ""
+.
+.SH "NAME"
+\fBnpm-publish\fR \-\- Publish a package
+.
+.SH "SYNOPSIS"
+.
+.nf
+npm publish <tarball> [\-\-tag <tag>]
+npm publish <folder> [\-\-tag <tag>]
+.
+.fi
+.
+.SH "DESCRIPTION"
+Publishes a package to the registry so that it can be installed by name\.
+.
+.IP "\(bu" 4
+\fB<folder>\fR:
+A folder containing a package\.json file
+.
+.IP "\(bu" 4
+\fB<tarball>\fR:
+A url or file path to a gzipped tar archive containing a single folder
+with a package\.json file inside\.
+.
+.IP "\(bu" 4
+\fB[\-\-tag <tag>]\fR
+Registers the published package with the given tag, such that \fBnpm install
+<name>@<tag>\fR will install this version\. By default, \fBnpm publish\fR updates
+and \fBnpm install\fR installs the \fBlatest\fR tag\.
+.
+.IP "" 0
+.
+.P
+Fails if the package name and version combination already exists in
+the registry\.
+.
+.P
+Once a package is published with a given name and version, that
+specific name and version combination can never be used again, even if
+npm help it is removed with npm\-unpublish\.
+.
+.SH "SEE ALSO"
+.
+.IP "\(bu" 4
+npm help registry
+.
+.IP "\(bu" 4
+npm help adduser
+.
+.IP "\(bu" 4
+npm help owner
+.
+.IP "\(bu" 4
+npm help deprecate
+.
+.IP "\(bu" 4
+npm help tag
+.
+.IP "" 0
+
diff --git a/deps/npm/man/man1/npm-rebuild.1 b/deps/npm/man/man1/npm-rebuild.1
new file mode 100644
index 000000000..7dda41232
--- /dev/null
+++ b/deps/npm/man/man1/npm-rebuild.1
@@ -0,0 +1,37 @@
+.\" Generated with Ronnjs 0.3.8
+.\" http://github.com/kapouer/ronnjs/
+.
+.TH "NPM\-REBUILD" "1" "May 2014" "" ""
+.
+.SH "NAME"
+\fBnpm-rebuild\fR \-\- Rebuild a package
+.
+.SH "SYNOPSIS"
+.
+.nf
+npm rebuild [<name> [<name> \.\.\.]]
+npm rb [<name> [<name> \.\.\.]]
+.
+.fi
+.
+.IP "\(bu" 4
+\fB<name>\fR:
+The package to rebuild
+.
+.IP "" 0
+.
+.SH "DESCRIPTION"
+This command runs the \fBnpm build\fR command on the matched folders\. This is useful
+when you install a new version of node, and must recompile all your C++ addons with
+the new binary\.
+.
+.SH "SEE ALSO"
+.
+.IP "\(bu" 4
+npm help build
+.
+.IP "\(bu" 4
+npm help install
+.
+.IP "" 0
+
diff --git a/deps/npm/man/man1/npm-repo.1 b/deps/npm/man/man1/npm-repo.1
new file mode 100644
index 000000000..e79f8826a
--- /dev/null
+++ b/deps/npm/man/man1/npm-repo.1
@@ -0,0 +1,47 @@
+.\" Generated with Ronnjs 0.3.8
+.\" http://github.com/kapouer/ronnjs/
+.
+.TH "NPM\-REPO" "1" "May 2014" "" ""
+.
+.SH "NAME"
+\fBnpm-repo\fR \-\- Open package repository page in the browser
+.
+.SH "SYNOPSIS"
+.
+.nf
+npm repo <pkgname>
+npm repo (with no args in a package dir)
+.
+.fi
+.
+.SH "DESCRIPTION"
+This command tries to guess at the likely location of a package\'s
+repository URL, and then tries to open it using the \fB\-\-browser\fR
+config param\. If no package name is provided, it will search for
+a \fBpackage\.json\fR in the current folder and use the \fBname\fR property\.
+.
+.SH "CONFIGURATION"
+.
+.SS "browser"
+.
+.IP "\(bu" 4
+Default: OS X: \fB"open"\fR, Windows: \fB"start"\fR, Others: \fB"xdg\-open"\fR
+.
+.IP "\(bu" 4
+Type: String
+.
+.IP "" 0
+.
+.P
+The browser that is called by the \fBnpm repo\fR command to open websites\.
+.
+.SH "SEE ALSO"
+.
+.IP "\(bu" 4
+npm help docs
+.
+.IP "\(bu" 4
+npm help config
+.
+.IP "" 0
+
diff --git a/deps/npm/man/man1/npm-restart.1 b/deps/npm/man/man1/npm-restart.1
new file mode 100644
index 000000000..d7ebaf7c0
--- /dev/null
+++ b/deps/npm/man/man1/npm-restart.1
@@ -0,0 +1,42 @@
+.\" Generated with Ronnjs 0.3.8
+.\" http://github.com/kapouer/ronnjs/
+.
+.TH "NPM\-RESTART" "1" "May 2014" "" ""
+.
+.SH "NAME"
+\fBnpm-restart\fR \-\- Start a package
+.
+.SH "SYNOPSIS"
+.
+.nf
+npm restart <name>
+.
+.fi
+.
+.SH "DESCRIPTION"
+This runs a package\'s "restart" script, if one was provided\.
+Otherwise it runs package\'s "stop" script, if one was provided, and then
+the "start" script\.
+.
+.P
+If no version is specified, then it restarts the "active" version\.
+.
+.SH "SEE ALSO"
+.
+.IP "\(bu" 4
+npm help run\-script
+.
+.IP "\(bu" 4
+npm help scripts
+.
+.IP "\(bu" 4
+npm help test
+.
+.IP "\(bu" 4
+npm help start
+.
+.IP "\(bu" 4
+npm help stop
+.
+.IP "" 0
+
diff --git a/deps/npm/man/man1/npm-rm.1 b/deps/npm/man/man1/npm-rm.1
new file mode 100644
index 000000000..a41689777
--- /dev/null
+++ b/deps/npm/man/man1/npm-rm.1
@@ -0,0 +1,44 @@
+.\" Generated with Ronnjs 0.3.8
+.\" http://github.com/kapouer/ronnjs/
+.
+.TH "NPM\-RM" "1" "May 2014" "" ""
+.
+.SH "NAME"
+\fBnpm-rm\fR \-\- Remove a package
+.
+.SH "SYNOPSIS"
+.
+.nf
+npm rm <name>
+npm r <name>
+npm uninstall <name>
+npm un <name>
+.
+.fi
+.
+.SH "DESCRIPTION"
+This uninstalls a package, completely removing everything npm installed
+on its behalf\.
+.
+.SH "SEE ALSO"
+.
+.IP "\(bu" 4
+npm help prune
+.
+.IP "\(bu" 4
+npm help install
+.
+.IP "\(bu" 4
+npm help folders
+.
+.IP "\(bu" 4
+npm help config
+.
+.IP "\(bu" 4
+npm help config
+.
+.IP "\(bu" 4
+npm help npmrc
+.
+.IP "" 0
+
diff --git a/deps/npm/man/man1/npm-root.1 b/deps/npm/man/man1/npm-root.1
new file mode 100644
index 000000000..ec6a2391b
--- /dev/null
+++ b/deps/npm/man/man1/npm-root.1
@@ -0,0 +1,40 @@
+.\" Generated with Ronnjs 0.3.8
+.\" http://github.com/kapouer/ronnjs/
+.
+.TH "NPM\-ROOT" "1" "May 2014" "" ""
+.
+.SH "NAME"
+\fBnpm-root\fR \-\- Display npm root
+.
+.SH "SYNOPSIS"
+.
+.nf
+npm root
+.
+.fi
+.
+.SH "DESCRIPTION"
+Print the effective \fBnode_modules\fR folder to standard out\.
+.
+.SH "SEE ALSO"
+.
+.IP "\(bu" 4
+npm help prefix
+.
+.IP "\(bu" 4
+npm help bin
+.
+.IP "\(bu" 4
+npm help folders
+.
+.IP "\(bu" 4
+npm help config
+.
+.IP "\(bu" 4
+npm help config
+.
+.IP "\(bu" 4
+npm help npmrc
+.
+.IP "" 0
+
diff --git a/deps/npm/man/man1/npm-run-script.1 b/deps/npm/man/man1/npm-run-script.1
new file mode 100644
index 000000000..c350d9f19
--- /dev/null
+++ b/deps/npm/man/man1/npm-run-script.1
@@ -0,0 +1,44 @@
+.\" Generated with Ronnjs 0.3.8
+.\" http://github.com/kapouer/ronnjs/
+.
+.TH "NPM\-RUN\-SCRIPT" "1" "May 2014" "" ""
+.
+.SH "NAME"
+\fBnpm-run-script\fR \-\- Run arbitrary package scripts
+.
+.SH "SYNOPSIS"
+.
+.nf
+npm run\-script [<pkg>] [command]
+.
+.fi
+.
+.SH "DESCRIPTION"
+This runs an arbitrary command from a package\'s \fB"scripts"\fR object\.
+If no package name is provided, it will search for a \fBpackage\.json\fR
+in the current folder and use its \fB"scripts"\fR object\. If no \fB"command"\fR
+is provided, it will list the available top level scripts\.
+.
+.P
+It is used by the test, start, restart, and stop commands, but can be
+called directly, as well\.
+.
+.SH "SEE ALSO"
+.
+.IP "\(bu" 4
+npm help scripts
+.
+.IP "\(bu" 4
+npm help test
+.
+.IP "\(bu" 4
+npm help start
+.
+.IP "\(bu" 4
+npm help restart
+.
+.IP "\(bu" 4
+npm help stop
+.
+.IP "" 0
+
diff --git a/deps/npm/man/man1/npm-search.1 b/deps/npm/man/man1/npm-search.1
new file mode 100644
index 000000000..1680fc327
--- /dev/null
+++ b/deps/npm/man/man1/npm-search.1
@@ -0,0 +1,62 @@
+.\" Generated with Ronnjs 0.3.8
+.\" http://github.com/kapouer/ronnjs/
+.
+.TH "NPM\-SEARCH" "1" "May 2014" "" ""
+.
+.SH "NAME"
+\fBnpm-search\fR \-\- Search for packages
+.
+.SH "SYNOPSIS"
+.
+.nf
+npm search [\-\-long] [search terms \.\.\.]
+npm s [search terms \.\.\.]
+npm se [search terms \.\.\.]
+.
+.fi
+.
+.SH "DESCRIPTION"
+Search the registry for packages matching the search terms\.
+.
+.P
+If a term starts with \fB/\fR, then it\'s interpreted as a regular expression\.
+A trailing \fB/\fR will be ignored in this case\. (Note that many regular
+expression characters must be escaped or quoted in most shells\.)
+.
+.SH "CONFIGURATION"
+.
+.SS "long"
+.
+.IP "\(bu" 4
+Default: false
+.
+.IP "\(bu" 4
+Type: Boolean
+.
+.IP "" 0
+.
+.P
+Display full package descriptions and other long text across multiple
+lines\. When disabled (default) search results are truncated to fit
+neatly on a single line\. Modules with extremely long names will
+fall on multiple lines\.
+.
+.SH "SEE ALSO"
+.
+.IP "\(bu" 4
+npm help registry
+.
+.IP "\(bu" 4
+npm help config
+.
+.IP "\(bu" 4
+npm help config
+.
+.IP "\(bu" 4
+npm help npmrc
+.
+.IP "\(bu" 4
+npm help view
+.
+.IP "" 0
+
diff --git a/deps/npm/man/man1/npm-shrinkwrap.1 b/deps/npm/man/man1/npm-shrinkwrap.1
new file mode 100644
index 000000000..1c646b4d6
--- /dev/null
+++ b/deps/npm/man/man1/npm-shrinkwrap.1
@@ -0,0 +1,275 @@
+.\" Generated with Ronnjs 0.3.8
+.\" http://github.com/kapouer/ronnjs/
+.
+.TH "NPM\-SHRINKWRAP" "1" "May 2014" "" ""
+.
+.SH "NAME"
+\fBnpm-shrinkwrap\fR \-\- Lock down dependency versions
+.
+.SH "SYNOPSIS"
+.
+.nf
+npm shrinkwrap
+.
+.fi
+.
+.SH "DESCRIPTION"
+This command locks down the versions of a package\'s dependencies so
+that you can control exactly which versions of each dependency will be
+used when your package is installed\. The "package\.json" file is still
+required if you want to use "npm install"\.
+.
+.P
+By default, "npm install" recursively installs the target\'s
+dependencies (as specified in package\.json), choosing the latest
+available version that satisfies the dependency\'s semver pattern\. In
+some situations, particularly when shipping software where each change
+is tightly managed, it\'s desirable to fully specify each version of
+each dependency recursively so that subsequent builds and deploys do
+not inadvertently pick up newer versions of a dependency that satisfy
+the semver pattern\. Specifying specific semver patterns in each
+dependency\'s package\.json would facilitate this, but that\'s not always
+possible or desirable, as when another author owns the npm package\.
+It\'s also possible to check dependencies directly into source control,
+but that may be undesirable for other reasons\.
+.
+.P
+As an example, consider package A:
+.
+.IP "" 4
+.
+.nf
+{
+ "name": "A",
+ "version": "0\.1\.0",
+ "dependencies": {
+ "B": "<0\.1\.0"
+ }
+}
+.
+.fi
+.
+.IP "" 0
+.
+.P
+package B:
+.
+.IP "" 4
+.
+.nf
+{
+ "name": "B",
+ "version": "0\.0\.1",
+ "dependencies": {
+ "C": "<0\.1\.0"
+ }
+}
+.
+.fi
+.
+.IP "" 0
+.
+.P
+and package C:
+.
+.IP "" 4
+.
+.nf
+{
+ "name": "C,
+ "version": "0\.0\.1"
+}
+.
+.fi
+.
+.IP "" 0
+.
+.P
+If these are the only versions of A, B, and C available in the
+registry, then a normal "npm install A" will install:
+.
+.IP "" 4
+.
+.nf
+A@0\.1\.0
+`\-\- B@0\.0\.1
+ `\-\- C@0\.0\.1
+.
+.fi
+.
+.IP "" 0
+.
+.P
+However, if B@0\.0\.2 is published, then a fresh "npm install A" will
+install:
+.
+.IP "" 4
+.
+.nf
+A@0\.1\.0
+`\-\- B@0\.0\.2
+ `\-\- C@0\.0\.1
+.
+.fi
+.
+.IP "" 0
+.
+.P
+assuming the new version did not modify B\'s dependencies\. Of course,
+the new version of B could include a new version of C and any number
+of new dependencies\. If such changes are undesirable, the author of A
+could specify a dependency on B@0\.0\.1\. However, if A\'s author and B\'s
+author are not the same person, there\'s no way for A\'s author to say
+that he or she does not want to pull in newly published versions of C
+when B hasn\'t changed at all\.
+.
+.P
+In this case, A\'s author can run
+.
+.IP "" 4
+.
+.nf
+npm shrinkwrap
+.
+.fi
+.
+.IP "" 0
+.
+.P
+This generates npm\-shrinkwrap\.json, which will look something like this:
+.
+.IP "" 4
+.
+.nf
+{
+ "name": "A",
+ "version": "0\.1\.0",
+ "dependencies": {
+ "B": {
+ "version": "0\.0\.1",
+ "dependencies": {
+ "C": {
+ "version": "0\.1\.0"
+ }
+ }
+ }
+ }
+}
+.
+.fi
+.
+.IP "" 0
+.
+.P
+The shrinkwrap command has locked down the dependencies based on
+what\'s currently installed in node_modules\. When "npm install"
+installs a package with a npm\-shrinkwrap\.json file in the package
+root, the shrinkwrap file (rather than package\.json files) completely
+drives the installation of that package and all of its dependencies
+(recursively)\. So now the author publishes A@0\.1\.0, and subsequent
+installs of this package will use B@0\.0\.1 and C@0\.1\.0, regardless the
+dependencies and versions listed in A\'s, B\'s, and C\'s package\.json
+files\.
+.
+.SS "Using shrinkwrapped packages"
+Using a shrinkwrapped package is no different than using any other
+package: you can "npm install" it by hand, or add a dependency to your
+package\.json file and "npm install" it\.
+.
+.SS "Building shrinkwrapped packages"
+To shrinkwrap an existing package:
+.
+.IP "1" 4
+Run "npm install" in the package root to install the current
+versions of all dependencies\.
+.
+.IP "2" 4
+Validate that the package works as expected with these versions\.
+.
+.IP "3" 4
+Run "npm shrinkwrap", add npm\-shrinkwrap\.json to git, and publish
+your package\.
+.
+.IP "" 0
+.
+.P
+To add or update a dependency in a shrinkwrapped package:
+.
+.IP "1" 4
+Run "npm install" in the package root to install the current
+versions of all dependencies\.
+.
+.IP "2" 4
+Add or update dependencies\. "npm install" each new or updated
+package individually and then update package\.json\. Note that they
+must be explicitly named in order to be installed: running \fBnpm
+install\fR with no arguments will merely reproduce the existing
+shrinkwrap\.
+.
+.IP "3" 4
+Validate that the package works as expected with the new
+dependencies\.
+.
+.IP "4" 4
+Run "npm shrinkwrap", commit the new npm\-shrinkwrap\.json, and
+publish your package\.
+.
+.IP "" 0
+.
+.P
+npm help You can use npm\-outdated to view dependencies with newer versions
+available\.
+.
+.SS "Other Notes"
+A shrinkwrap file must be consistent with the package\'s package\.json
+file\. "npm shrinkwrap" will fail if required dependencies are not
+already installed, since that would result in a shrinkwrap that
+wouldn\'t actually work\. Similarly, the command will fail if there are
+extraneous packages (not referenced by package\.json), since that would
+indicate that package\.json is not correct\.
+.
+.P
+Since "npm shrinkwrap" is intended to lock down your dependencies for
+production use, \fBdevDependencies\fR will not be included unless you
+explicitly set the \fB\-\-dev\fR flag when you run \fBnpm shrinkwrap\fR\|\. If
+installed \fBdevDependencies\fR are excluded, then npm will print a
+warning\. If you want them to be installed with your module by
+default, please consider adding them to \fBdependencies\fR instead\.
+.
+.P
+If shrinkwrapped package A depends on shrinkwrapped package B, B\'s
+shrinkwrap will not be used as part of the installation of A\. However,
+because A\'s shrinkwrap is constructed from a valid installation of B
+and recursively specifies all dependencies, the contents of B\'s
+shrinkwrap will implicitly be included in A\'s shrinkwrap\.
+.
+.SS "Caveats"
+Shrinkwrap files only lock down package versions, not actual package
+contents\. While discouraged, a package author can republish an
+existing version of a package, causing shrinkwrapped packages using
+that version to pick up different code than they were before\. If you
+want to avoid any risk that a byzantine author replaces a package
+you\'re using with code that breaks your application, you could modify
+the shrinkwrap file to use git URL references rather than version
+numbers so that npm always fetches all packages from git\.
+.
+.P
+If you wish to lock down the specific bytes included in a package, for
+example to have 100% confidence in being able to reproduce a
+deployment or build, then you ought to check your dependencies into
+source control, or pursue some other mechanism that can verify
+contents rather than versions\.
+.
+.SH "SEE ALSO"
+.
+.IP "\(bu" 4
+npm help install
+.
+.IP "\(bu" 4
+npm help package\.json
+.
+.IP "\(bu" 4
+npm help ls
+.
+.IP "" 0
+
diff --git a/deps/npm/man/man1/npm-star.1 b/deps/npm/man/man1/npm-star.1
new file mode 100644
index 000000000..caa723e74
--- /dev/null
+++ b/deps/npm/man/man1/npm-star.1
@@ -0,0 +1,39 @@
+.\" Generated with Ronnjs 0.3.8
+.\" http://github.com/kapouer/ronnjs/
+.
+.TH "NPM\-STAR" "1" "May 2014" "" ""
+.
+.SH "NAME"
+\fBnpm-star\fR \-\- Mark your favorite packages
+.
+.SH "SYNOPSIS"
+.
+.nf
+npm star <pkgname> [<pkg>, \.\.\.]
+npm unstar <pkgname> [<pkg>, \.\.\.]
+.
+.fi
+.
+.SH "DESCRIPTION"
+"Starring" a package means that you have some interest in it\. It\'s
+a vaguely positive way to show that you care\.
+.
+.P
+"Unstarring" is the same thing, but in reverse\.
+.
+.P
+It\'s a boolean thing\. Starring repeatedly has no additional effect\.
+.
+.SH "SEE ALSO"
+.
+.IP "\(bu" 4
+npm help view
+.
+.IP "\(bu" 4
+npm help whoami
+.
+.IP "\(bu" 4
+npm help adduser
+.
+.IP "" 0
+
diff --git a/deps/npm/man/man1/npm-stars.1 b/deps/npm/man/man1/npm-stars.1
new file mode 100644
index 000000000..2daacdf6c
--- /dev/null
+++ b/deps/npm/man/man1/npm-stars.1
@@ -0,0 +1,40 @@
+.\" Generated with Ronnjs 0.3.8
+.\" http://github.com/kapouer/ronnjs/
+.
+.TH "NPM\-STARS" "1" "May 2014" "" ""
+.
+.SH "NAME"
+\fBnpm-stars\fR \-\- View packages marked as favorites
+.
+.SH "SYNOPSIS"
+.
+.nf
+npm stars
+npm stars [username]
+.
+.fi
+.
+.SH "DESCRIPTION"
+If you have starred a lot of neat things and want to find them again
+quickly this command lets you do just that\.
+.
+.P
+You may also want to see your friend\'s favorite packages, in this case
+you will most certainly enjoy this command\.
+.
+.SH "SEE ALSO"
+.
+.IP "\(bu" 4
+npm help star
+.
+.IP "\(bu" 4
+npm help view
+.
+.IP "\(bu" 4
+npm help whoami
+.
+.IP "\(bu" 4
+npm help adduser
+.
+.IP "" 0
+
diff --git a/deps/npm/man/man1/npm-start.1 b/deps/npm/man/man1/npm-start.1
new file mode 100644
index 000000000..d8c525d5b
--- /dev/null
+++ b/deps/npm/man/man1/npm-start.1
@@ -0,0 +1,37 @@
+.\" Generated with Ronnjs 0.3.8
+.\" http://github.com/kapouer/ronnjs/
+.
+.TH "NPM\-START" "1" "May 2014" "" ""
+.
+.SH "NAME"
+\fBnpm-start\fR \-\- Start a package
+.
+.SH "SYNOPSIS"
+.
+.nf
+npm start <name>
+.
+.fi
+.
+.SH "DESCRIPTION"
+This runs a package\'s "start" script, if one was provided\.
+.
+.SH "SEE ALSO"
+.
+.IP "\(bu" 4
+npm help run\-script
+.
+.IP "\(bu" 4
+npm help scripts
+.
+.IP "\(bu" 4
+npm help test
+.
+.IP "\(bu" 4
+npm help restart
+.
+.IP "\(bu" 4
+npm help stop
+.
+.IP "" 0
+
diff --git a/deps/npm/man/man1/npm-stop.1 b/deps/npm/man/man1/npm-stop.1
new file mode 100644
index 000000000..0f0a28d53
--- /dev/null
+++ b/deps/npm/man/man1/npm-stop.1
@@ -0,0 +1,37 @@
+.\" Generated with Ronnjs 0.3.8
+.\" http://github.com/kapouer/ronnjs/
+.
+.TH "NPM\-STOP" "1" "May 2014" "" ""
+.
+.SH "NAME"
+\fBnpm-stop\fR \-\- Stop a package
+.
+.SH "SYNOPSIS"
+.
+.nf
+npm stop <name>
+.
+.fi
+.
+.SH "DESCRIPTION"
+This runs a package\'s "stop" script, if one was provided\.
+.
+.SH "SEE ALSO"
+.
+.IP "\(bu" 4
+npm help run\-script
+.
+.IP "\(bu" 4
+npm help scripts
+.
+.IP "\(bu" 4
+npm help test
+.
+.IP "\(bu" 4
+npm help start
+.
+.IP "\(bu" 4
+npm help restart
+.
+.IP "" 0
+
diff --git a/deps/npm/man/man1/npm-submodule.1 b/deps/npm/man/man1/npm-submodule.1
new file mode 100644
index 000000000..f3385e1d5
--- /dev/null
+++ b/deps/npm/man/man1/npm-submodule.1
@@ -0,0 +1,42 @@
+.\" Generated with Ronnjs 0.3.8
+.\" http://github.com/kapouer/ronnjs/
+.
+.TH "NPM\-SUBMODULE" "1" "May 2014" "" ""
+.
+.SH "NAME"
+\fBnpm-submodule\fR \-\- Add a package as a git submodule
+.
+.SH "SYNOPSIS"
+.
+.nf
+npm submodule <pkg>
+.
+.fi
+.
+.SH "DESCRIPTION"
+If the specified package has a git repository url in its package\.json
+description, then this command will add it as a git submodule at \fBnode_modules/<pkg name>\fR\|\.
+.
+.P
+This is a convenience only\. From then on, it\'s up to you to manage
+updates by using the appropriate git commands\. npm will stubbornly
+refuse to update, modify, or remove anything with a \fB\|\.git\fR subfolder
+in it\.
+.
+.P
+This command also does not install missing dependencies, if the package
+does not include them in its git repository\. If \fBnpm ls\fR reports that
+things are missing, you can either install, link, or submodule them yourself,
+or you can do \fBnpm explore <pkgname> \-\- npm install\fR to install the
+dependencies into the submodule folder\.
+.
+.SH "SEE ALSO"
+.
+.IP "\(bu" 4
+npm help package\.json
+.
+.IP "\(bu" 4
+git help submodule
+.
+.IP "" 0
+
diff --git a/deps/npm/man/man1/npm-tag.1 b/deps/npm/man/man1/npm-tag.1
new file mode 100644
index 000000000..d58047064
--- /dev/null
+++ b/deps/npm/man/man1/npm-tag.1
@@ -0,0 +1,74 @@
+.\" Generated with Ronnjs 0.3.8
+.\" http://github.com/kapouer/ronnjs/
+.
+.TH "NPM\-TAG" "1" "May 2014" "" ""
+.
+.SH "NAME"
+\fBnpm-tag\fR \-\- Tag a published version
+.
+.SH "SYNOPSIS"
+.
+.nf
+npm tag <name>@<version> [<tag>]
+.
+.fi
+.
+.SH "DESCRIPTION"
+Tags the specified version of the package with the specified tag, or the \fB\-\-tag\fR config if not specified\.
+.
+.P
+A tag can be used when installing packages as a reference to a version instead
+of using a specific version number:
+.
+.IP "" 4
+.
+.nf
+npm install <name>@<tag>
+.
+.fi
+.
+.IP "" 0
+.
+.P
+When installing dependencies, a preferred tagged version may be specified:
+.
+.IP "" 4
+.
+.nf
+npm install \-\-tag <tag>
+.
+.fi
+.
+.IP "" 0
+.
+.P
+This also applies to \fBnpm dedupe\fR\|\.
+.
+.P
+Publishing a package always sets the "latest" tag to the published version\.
+.
+.SH "SEE ALSO"
+.
+.IP "\(bu" 4
+npm help publish
+.
+.IP "\(bu" 4
+npm help install
+.
+.IP "\(bu" 4
+npm help dedupe
+.
+.IP "\(bu" 4
+npm help registry
+.
+.IP "\(bu" 4
+npm help config
+.
+.IP "\(bu" 4
+npm help config
+.
+.IP "\(bu" 4
+npm help npmrc
+.
+.IP "" 0
+
diff --git a/deps/npm/man/man1/npm-test.1 b/deps/npm/man/man1/npm-test.1
new file mode 100644
index 000000000..85d7d3681
--- /dev/null
+++ b/deps/npm/man/man1/npm-test.1
@@ -0,0 +1,42 @@
+.\" Generated with Ronnjs 0.3.8
+.\" http://github.com/kapouer/ronnjs/
+.
+.TH "NPM\-TEST" "1" "May 2014" "" ""
+.
+.SH "NAME"
+\fBnpm-test\fR \-\- Test a package
+.
+.SH "SYNOPSIS"
+.
+.nf
+ npm test <name>
+ npm tst <name>
+.
+.fi
+.
+.SH "DESCRIPTION"
+This runs a package\'s "test" script, if one was provided\.
+.
+.P
+To run tests as a condition of installation, set the \fBnpat\fR config to
+true\.
+.
+.SH "SEE ALSO"
+.
+.IP "\(bu" 4
+npm help run\-script
+.
+.IP "\(bu" 4
+npm help scripts
+.
+.IP "\(bu" 4
+npm help start
+.
+.IP "\(bu" 4
+npm help restart
+.
+.IP "\(bu" 4
+npm help stop
+.
+.IP "" 0
+
diff --git a/deps/npm/man/man1/npm-uninstall.1 b/deps/npm/man/man1/npm-uninstall.1
new file mode 100644
index 000000000..3fbee0242
--- /dev/null
+++ b/deps/npm/man/man1/npm-uninstall.1
@@ -0,0 +1,87 @@
+.\" Generated with Ronnjs 0.3.8
+.\" http://github.com/kapouer/ronnjs/
+.
+.TH "NPM\-RM" "1" "May 2014" "" ""
+.
+.SH "NAME"
+\fBnpm-rm\fR \-\- Remove a package
+.
+.SH "SYNOPSIS"
+.
+.nf
+npm uninstall <name> [\-\-save|\-\-save\-dev|\-\-save\-optional]
+npm rm (with any of the previous argument usage)
+.
+.fi
+.
+.SH "DESCRIPTION"
+This uninstalls a package, completely removing everything npm installed
+on its behalf\.
+.
+.P
+Example:
+.
+.IP "" 4
+.
+.nf
+npm uninstall sax
+.
+.fi
+.
+.IP "" 0
+.
+.P
+In global mode (ie, with \fB\-g\fR or \fB\-\-global\fR appended to the command),
+it uninstalls the current package context as a global package\.
+.
+.P
+\fBnpm uninstall\fR takes 3 exclusive, optional flags which save or update
+the package version in your main package\.json:
+.
+.IP "\(bu" 4
+\fB\-\-save\fR: Package will be removed from your \fBdependencies\fR\|\.
+.
+.IP "\(bu" 4
+\fB\-\-save\-dev\fR: Package will be removed from your \fBdevDependencies\fR\|\.
+.
+.IP "\(bu" 4
+\fB\-\-save\-optional\fR: Package will be removed from your \fBoptionalDependencies\fR\|\.
+.
+.IP "" 0
+.
+.P
+Examples:
+.
+.IP "" 4
+.
+.nf
+npm uninstall sax \-\-save
+npm uninstall node\-tap \-\-save\-dev
+npm uninstall dtrace\-provider \-\-save\-optional
+.
+.fi
+.
+.IP "" 0
+.
+.SH "SEE ALSO"
+.
+.IP "\(bu" 4
+npm help prune
+.
+.IP "\(bu" 4
+npm help install
+.
+.IP "\(bu" 4
+npm help folders
+.
+.IP "\(bu" 4
+npm help config
+.
+.IP "\(bu" 4
+npm help config
+.
+.IP "\(bu" 4
+npm help npmrc
+.
+.IP "" 0
+
diff --git a/deps/npm/man/man1/npm-unpublish.1 b/deps/npm/man/man1/npm-unpublish.1
new file mode 100644
index 000000000..1d98b1be7
--- /dev/null
+++ b/deps/npm/man/man1/npm-unpublish.1
@@ -0,0 +1,58 @@
+.\" Generated with Ronnjs 0.3.8
+.\" http://github.com/kapouer/ronnjs/
+.
+.TH "NPM\-UNPUBLISH" "1" "May 2014" "" ""
+.
+.SH "NAME"
+\fBnpm-unpublish\fR \-\- Remove a package from the registry
+.
+.SH "SYNOPSIS"
+.
+.nf
+npm unpublish <name>[@<version>]
+.
+.fi
+.
+.SH "WARNING"
+\fBIt is generally considered bad behavior to remove versions of a library
+that others are depending on!\fR
+.
+.P
+Consider using the \fBdeprecate\fR command
+instead, if your intent is to encourage users to upgrade\.
+.
+.P
+There is plenty of room on the registry\.
+.
+.SH "DESCRIPTION"
+This removes a package version from the registry, deleting its
+entry and removing the tarball\.
+.
+.P
+If no version is specified, or if all versions are removed then
+the root package entry is removed from the registry entirely\.
+.
+.P
+Even if a package version is unpublished, that specific name and
+version combination can never be reused\. In order to publish the
+package again, a new version number must be used\.
+.
+.SH "SEE ALSO"
+.
+.IP "\(bu" 4
+npm help deprecate
+.
+.IP "\(bu" 4
+npm help publish
+.
+.IP "\(bu" 4
+npm help registry
+.
+.IP "\(bu" 4
+npm help adduser
+.
+.IP "\(bu" 4
+npm help owner
+.
+.IP "" 0
+
diff --git a/deps/npm/man/man1/npm-update.1 b/deps/npm/man/man1/npm-update.1
new file mode 100644
index 000000000..949bae254
--- /dev/null
+++ b/deps/npm/man/man1/npm-update.1
@@ -0,0 +1,45 @@
+.\" Generated with Ronnjs 0.3.8
+.\" http://github.com/kapouer/ronnjs/
+.
+.TH "NPM\-UPDATE" "1" "May 2014" "" ""
+.
+.SH "NAME"
+\fBnpm-update\fR \-\- Update a package
+.
+.SH "SYNOPSIS"
+.
+.nf
+npm update [\-g] [<name> [<name> \.\.\.]]
+.
+.fi
+.
+.SH "DESCRIPTION"
+This command will update all the packages listed to the latest version
+(specified by the \fBtag\fR config)\.
+.
+.P
+It will also install missing packages\.
+.
+.P
+If the \fB\-g\fR flag is specified, this command will update globally installed packages\.
+If no package name is specified, all packages in the specified location (global or local) will be updated\.
+.
+.SH "SEE ALSO"
+.
+.IP "\(bu" 4
+npm help install
+.
+.IP "\(bu" 4
+npm help outdated
+.
+.IP "\(bu" 4
+npm help registry
+.
+.IP "\(bu" 4
+npm help folders
+.
+.IP "\(bu" 4
+npm help ls
+.
+.IP "" 0
+
diff --git a/deps/npm/man/man1/npm-version.1 b/deps/npm/man/man1/npm-version.1
new file mode 100644
index 000000000..d2ae8a0ff
--- /dev/null
+++ b/deps/npm/man/man1/npm-version.1
@@ -0,0 +1,75 @@
+.\" Generated with Ronnjs 0.3.8
+.\" http://github.com/kapouer/ronnjs/
+.
+.TH "NPM\-VERSION" "1" "May 2014" "" ""
+.
+.SH "NAME"
+\fBnpm-version\fR \-\- Bump a package version
+.
+.SH "SYNOPSIS"
+.
+.nf
+npm version [<newversion> | major | minor | patch]
+.
+.fi
+.
+.SH "DESCRIPTION"
+Run this in a package directory to bump the version and write the new
+data back to the package\.json file\.
+.
+.P
+The \fBnewversion\fR argument should be a valid semver string, \fIor\fR a valid
+second argument to semver\.inc (one of "patch", "minor", or
+"major")\. In the second case, the existing version will be incremented
+by 1 in the specified field\.
+.
+.P
+If run in a git repo, it will also create a version commit and tag, and
+fail if the repo is not clean\.
+.
+.P
+If supplied with \fB\-\-message\fR (shorthand: \fB\-m\fR) config option, npm will
+use it as a commit message when creating a version commit\. If the \fBmessage\fR config contains \fB%s\fR then that will be replaced with the
+resulting version number\. For example:
+.
+.IP "" 4
+.
+.nf
+npm version patch \-m "Upgrade to %s for reasons"
+.
+.fi
+.
+.IP "" 0
+.
+.P
+If the \fBsign\-git\-tag\fR config is set, then the tag will be signed using
+the \fB\-s\fR flag to git\. Note that you must have a default GPG key set up
+in your git config for this to work properly\. For example:
+.
+.IP "" 4
+.
+.nf
+$ npm config set sign\-git\-tag true
+$ npm version patch
+You need a passphrase to unlock the secret key for
+user: "isaacs (http://blog\.izs\.me/) <i@izs\.me>"
+2048\-bit RSA key, ID 6C481CF6, created 2010\-08\-31
+Enter passphrase:
+.
+.fi
+.
+.IP "" 0
+.
+.SH "SEE ALSO"
+.
+.IP "\(bu" 4
+npm help init
+.
+.IP "\(bu" 4
+npm help package\.json
+.
+.IP "\(bu" 4
+npm help semver
+.
+.IP "" 0
+
diff --git a/deps/npm/man/man1/npm-view.1 b/deps/npm/man/man1/npm-view.1
new file mode 100644
index 000000000..8083dda68
--- /dev/null
+++ b/deps/npm/man/man1/npm-view.1
@@ -0,0 +1,186 @@
+.\" Generated with Ronnjs 0.3.8
+.\" http://github.com/kapouer/ronnjs/
+.
+.TH "NPM\-VIEW" "1" "May 2014" "" ""
+.
+.SH "NAME"
+\fBnpm-view\fR \-\- View registry info
+.
+.SH "SYNOPSIS"
+.
+.nf
+npm view <name>[@<version>] [<field>[\.<subfield>]\.\.\.]
+npm v <name>[@<version>] [<field>[\.<subfield>]\.\.\.]
+.
+.fi
+.
+.SH "DESCRIPTION"
+This command shows data about a package and prints it to the stream
+referenced by the \fBoutfd\fR config, which defaults to stdout\.
+.
+.P
+To show the package registry entry for the \fBconnect\fR package, you can do
+this:
+.
+.IP "" 4
+.
+.nf
+npm view connect
+.
+.fi
+.
+.IP "" 0
+.
+.P
+The default version is "latest" if unspecified\.
+.
+.P
+Field names can be specified after the package descriptor\.
+For example, to show the dependencies of the \fBronn\fR package at version
+0\.3\.5, you could do the following:
+.
+.IP "" 4
+.
+.nf
+npm view ronn@0\.3\.5 dependencies
+.
+.fi
+.
+.IP "" 0
+.
+.P
+You can view child field by separating them with a period\.
+To view the git repository URL for the latest version of npm, you could
+do this:
+.
+.IP "" 4
+.
+.nf
+npm view npm repository\.url
+.
+.fi
+.
+.IP "" 0
+.
+.P
+This makes it easy to view information about a dependency with a bit of
+shell scripting\. For example, to view all the data about the version of
+opts that ronn depends on, you can do this:
+.
+.IP "" 4
+.
+.nf
+npm view opts@$(npm view ronn dependencies\.opts)
+.
+.fi
+.
+.IP "" 0
+.
+.P
+For fields that are arrays, requesting a non\-numeric field will return
+all of the values from the objects in the list\. For example, to get all
+the contributor names for the "express" project, you can do this:
+.
+.IP "" 4
+.
+.nf
+npm view express contributors\.email
+.
+.fi
+.
+.IP "" 0
+.
+.P
+You may also use numeric indices in square braces to specifically select
+an item in an array field\. To just get the email address of the first
+contributor in the list, you can do this:
+.
+.IP "" 4
+.
+.nf
+npm view express contributors[0]\.email
+.
+.fi
+.
+.IP "" 0
+.
+.P
+Multiple fields may be specified, and will be printed one after another\.
+For exampls, to get all the contributor names and email addresses, you
+can do this:
+.
+.IP "" 4
+.
+.nf
+npm view express contributors\.name contributors\.email
+.
+.fi
+.
+.IP "" 0
+.
+.P
+"Person" fields are shown as a string if they would be shown as an
+object\. So, for example, this will show the list of npm contributors in
+the shortened string format\. (npm help See \fBpackage\.json\fR for more on this\.)
+.
+.IP "" 4
+.
+.nf
+npm view npm contributors
+.
+.fi
+.
+.IP "" 0
+.
+.P
+If a version range is provided, then data will be printed for every
+matching version of the package\. This will show which version of jsdom
+was required by each matching version of yui3:
+.
+.IP "" 4
+.
+.nf
+npm view yui3@\'>0\.5\.4\' dependencies\.jsdom
+.
+.fi
+.
+.IP "" 0
+.
+.SH "OUTPUT"
+If only a single string field for a single version is output, then it
+will not be colorized or quoted, so as to enable piping the output to
+another command\. If the field is an object, it will be output as a JavaScript object literal\.
+.
+.P
+If the \-\-json flag is given, the outputted fields will be JSON\.
+.
+.P
+If the version range matches multiple versions, than each printed value
+will be prefixed with the version it applies to\.
+.
+.P
+If multiple fields are requested, than each of them are prefixed with
+the field name\.
+.
+.SH "SEE ALSO"
+.
+.IP "\(bu" 4
+npm help search
+.
+.IP "\(bu" 4
+npm help registry
+.
+.IP "\(bu" 4
+npm help config
+.
+.IP "\(bu" 4
+npm help config
+.
+.IP "\(bu" 4
+npm help npmrc
+.
+.IP "\(bu" 4
+npm help docs
+.
+.IP "" 0
+
diff --git a/deps/npm/man/man1/npm-whoami.1 b/deps/npm/man/man1/npm-whoami.1
new file mode 100644
index 000000000..f3f82701b
--- /dev/null
+++ b/deps/npm/man/man1/npm-whoami.1
@@ -0,0 +1,34 @@
+.\" Generated with Ronnjs 0.3.8
+.\" http://github.com/kapouer/ronnjs/
+.
+.TH "NPM\-WHOAMI" "1" "May 2014" "" ""
+.
+.SH "NAME"
+\fBnpm-whoami\fR \-\- Display npm username
+.
+.SH "SYNOPSIS"
+.
+.nf
+npm whoami
+.
+.fi
+.
+.SH "DESCRIPTION"
+Print the \fBusername\fR config to standard output\.
+.
+.SH "SEE ALSO"
+.
+.IP "\(bu" 4
+npm help config
+.
+.IP "\(bu" 4
+npm help config
+.
+.IP "\(bu" 4
+npm help npmrc
+.
+.IP "\(bu" 4
+npm help adduser
+.
+.IP "" 0
+
diff --git a/deps/npm/man/man1/npm.1 b/deps/npm/man/man1/npm.1
index 6ba3a39b6..dd60a59ae 100644
--- a/deps/npm/man/man1/npm.1
+++ b/deps/npm/man/man1/npm.1
@@ -1,7 +1,7 @@
.\" Generated with Ronnjs 0.3.8
.\" http://github.com/kapouer/ronnjs/
.
-.TH "NPM" "1" "June 2013" "" ""
+.TH "NPM" "1" "May 2014" "" ""
.
.SH "NAME"
\fBnpm\fR \-\- node package manager
@@ -14,7 +14,7 @@ npm <command> [args]
.fi
.
.SH "VERSION"
-1.2.30
+1.4.10
.
.SH "DESCRIPTION"
npm is the package manager for the Node JavaScript platform\. It puts
@@ -33,14 +33,14 @@ Run \fBnpm help\fR to get a list of available commands\.
You probably got npm because you want to install stuff\.
.
.P
-Use \fBnpm install blerg\fR to install the latest version of "blerg"\. Check out \fBnpm help install\fR for more info\. It can do a lot of stuff\.
+npm help Use \fBnpm install blerg\fR to install the latest version of "blerg"\. Check out \fBnpm\-install\fR for more info\. It can do a lot of stuff\.
.
.P
Use the \fBnpm search\fR command to show everything that\'s available\.
Use \fBnpm ls\fR to show everything you\'ve installed\.
.
.SH "DIRECTORIES"
-See \fBnpm help folders\fR to learn about where npm puts stuff\.
+npm help See \fBnpm\-folders\fR to learn about where npm puts stuff\.
.
.P
In particular, npm has two modes of operation:
@@ -70,7 +70,7 @@ following help topics:
.
.IP "\(bu" 4
json:
-Make a package\.json file\. See \fBnpm help json\fR\|\.
+npm help Make a package\.json file\. See \fBpackage\.json\fR\|\.
.
.IP "\(bu" 4
link:
@@ -139,14 +139,14 @@ lib/utils/config\-defs\.js\. These must not be changed\.
.IP "" 0
.
.P
-See \fBnpm help config\fR for much much more information\.
+npm help See \fBnpm\-config\fR for much much more information\.
.
.SH "CONTRIBUTIONS"
Patches welcome!
.
.IP "\(bu" 4
code:
-Read through \fBnpm help coding\-style\fR if you plan to submit code\.
+npm help Read through \fBnpm\-coding\-style\fR if you plan to submit code\.
You don\'t have to agree with it, but you do have to follow it\.
.
.IP "\(bu" 4
@@ -165,7 +165,7 @@ If you would like to contribute, but don\'t know what to work on, check
the issues list or ask on the mailing list\.
.
.IP "\(bu" 4
-\fIhttp://github\.com/isaacs/npm/issues\fR
+\fIhttp://github\.com/npm/npm/issues\fR
.
.IP "\(bu" 4
\fInpm\-@googlegroups\.com\fR
@@ -176,7 +176,7 @@ the issues list or ask on the mailing list\.
When you find issues, please report them:
.
.IP "\(bu" 4
-web: \fIhttp://github\.com/isaacs/npm/issues\fR
+web: \fIhttp://github\.com/npm/npm/issues\fR
.
.IP "\(bu" 4
email: \fInpm\-@googlegroups\.com\fR
@@ -191,9 +191,6 @@ as expected\. The \fBnpm\-debug\.log\fR file is also helpful to provide\.
You can also look for isaacs in #node\.js on irc://irc\.freenode\.net\. He
will no doubt tell you to put the output in a gist or email\.
.
-.SH "HISTORY"
-See npm help changelog
-.
.SH "AUTHOR"
Isaac Z\. Schlueter \fIhttp://blog\.izs\.me/\fR :: isaacs \fIhttps://github\.com/isaacs/\fR :: @izs \fIhttp://twitter\.com/izs\fR :: \fIi@izs\.me\fR
.
@@ -203,13 +200,13 @@ Isaac Z\. Schlueter \fIhttp://blog\.izs\.me/\fR :: isaacs \fIhttps://github\.com
npm help help
.
.IP "\(bu" 4
-npm help faq
+npm help faq
.
.IP "\(bu" 4
README
.
.IP "\(bu" 4
-npm help json
+npm help package\.json
.
.IP "\(bu" 4
npm help install
@@ -218,7 +215,13 @@ npm help install
npm help config
.
.IP "\(bu" 4
-npm help index
+npm help config
+.
+.IP "\(bu" 4
+npm help npmrc
+.
+.IP "\(bu" 4
+npm help index
.
.IP "\(bu" 4
npm apihelp npm
diff --git a/deps/npm/man/man1/outdated.1 b/deps/npm/man/man1/outdated.1
deleted file mode 100644
index 4a116d157..000000000
--- a/deps/npm/man/man1/outdated.1
+++ /dev/null
@@ -1,32 +0,0 @@
-.\" Generated with Ronnjs 0.3.8
-.\" http://github.com/kapouer/ronnjs/
-.
-.TH "NPM\-OUTDATED" "1" "June 2013" "" ""
-.
-.SH "NAME"
-\fBnpm-outdated\fR \-\- Check for outdated packages
-.
-.SH "SYNOPSIS"
-.
-.nf
-npm outdated [<name> [<name> \.\.\.]]
-.
-.fi
-.
-.SH "DESCRIPTION"
-This command will check the registry to see if any (or, specific) installed
-packages are currently outdated\.
-.
-.SH "SEE ALSO"
-.
-.IP "\(bu" 4
-npm help update
-.
-.IP "\(bu" 4
-npm help registry
-.
-.IP "\(bu" 4
-npm help folders
-.
-.IP "" 0
-
diff --git a/deps/npm/man/man1/owner.1 b/deps/npm/man/man1/owner.1
deleted file mode 100644
index ffa62bc11..000000000
--- a/deps/npm/man/man1/owner.1
+++ /dev/null
@@ -1,58 +0,0 @@
-.\" Generated with Ronnjs 0.3.8
-.\" http://github.com/kapouer/ronnjs/
-.
-.TH "NPM\-OWNER" "1" "June 2013" "" ""
-.
-.SH "NAME"
-\fBnpm-owner\fR \-\- Manage package owners
-.
-.SH "SYNOPSIS"
-.
-.nf
-npm owner ls <package name>
-npm owner add <user> <package name>
-npm owner rm <user> <package name>
-.
-.fi
-.
-.SH "DESCRIPTION"
-Manage ownership of published packages\.
-.
-.IP "\(bu" 4
-ls:
-List all the users who have access to modify a package and push new versions\.
-Handy when you need to know who to bug for help\.
-.
-.IP "\(bu" 4
-add:
-Add a new user as a maintainer of a package\. This user is enabled to modify
-metadata, publish new versions, and add other owners\.
-.
-.IP "\(bu" 4
-rm:
-Remove a user from the package owner list\. This immediately revokes their
-privileges\.
-.
-.IP "" 0
-.
-.P
-Note that there is only one level of access\. Either you can modify a package,
-or you can\'t\. Future versions may contain more fine\-grained access levels, but
-that is not implemented at this time\.
-.
-.SH "SEE ALSO"
-.
-.IP "\(bu" 4
-npm help publish
-.
-.IP "\(bu" 4
-npm help registry
-.
-.IP "\(bu" 4
-npm help adduser
-.
-.IP "\(bu" 4
-npm help disputes
-.
-.IP "" 0
-
diff --git a/deps/npm/man/man1/pack.1 b/deps/npm/man/man1/pack.1
deleted file mode 100644
index be6889cf1..000000000
--- a/deps/npm/man/man1/pack.1
+++ /dev/null
@@ -1,42 +0,0 @@
-.\" Generated with Ronnjs 0.3.8
-.\" http://github.com/kapouer/ronnjs/
-.
-.TH "NPM\-PACK" "1" "June 2013" "" ""
-.
-.SH "NAME"
-\fBnpm-pack\fR \-\- Create a tarball from a package
-.
-.SH "SYNOPSIS"
-.
-.nf
-npm pack [<pkg> [<pkg> \.\.\.]]
-.
-.fi
-.
-.SH "DESCRIPTION"
-For anything that\'s installable (that is, a package folder, tarball,
-tarball url, name@tag, name@version, or name), this command will fetch
-it to the cache, and then copy the tarball to the current working
-directory as \fB<name>\-<version>\.tgz\fR, and then write the filenames out to
-stdout\.
-.
-.P
-If the same package is specified multiple times, then the file will be
-overwritten the second time\.
-.
-.P
-If no arguments are supplied, then npm packs the current package folder\.
-.
-.SH "SEE ALSO"
-.
-.IP "\(bu" 4
-npm help cache
-.
-.IP "\(bu" 4
-npm help publish
-.
-.IP "\(bu" 4
-npm help config
-.
-.IP "" 0
-
diff --git a/deps/npm/man/man1/prefix.1 b/deps/npm/man/man1/prefix.1
deleted file mode 100644
index c8c1db508..000000000
--- a/deps/npm/man/man1/prefix.1
+++ /dev/null
@@ -1,34 +0,0 @@
-.\" Generated with Ronnjs 0.3.8
-.\" http://github.com/kapouer/ronnjs/
-.
-.TH "NPM\-PREFIX" "1" "June 2013" "" ""
-.
-.SH "NAME"
-\fBnpm-prefix\fR \-\- Display prefix
-.
-.SH "SYNOPSIS"
-.
-.nf
-npm prefix
-.
-.fi
-.
-.SH "DESCRIPTION"
-Print the prefix to standard out\.
-.
-.SH "SEE ALSO"
-.
-.IP "\(bu" 4
-npm help root
-.
-.IP "\(bu" 4
-npm help bin
-.
-.IP "\(bu" 4
-npm help folders
-.
-.IP "\(bu" 4
-npm help config
-.
-.IP "" 0
-
diff --git a/deps/npm/man/man1/prune.1 b/deps/npm/man/man1/prune.1
deleted file mode 100644
index dfac9af38..000000000
--- a/deps/npm/man/man1/prune.1
+++ /dev/null
@@ -1,37 +0,0 @@
-.\" Generated with Ronnjs 0.3.8
-.\" http://github.com/kapouer/ronnjs/
-.
-.TH "NPM\-PRUNE" "1" "June 2013" "" ""
-.
-.SH "NAME"
-\fBnpm-prune\fR \-\- Remove extraneous packages
-.
-.SH "SYNOPSIS"
-.
-.nf
-npm prune [<name> [<name \.\.\.]]
-.
-.fi
-.
-.SH "DESCRIPTION"
-This command removes "extraneous" packages\. If a package name is
-provided, then only packages matching one of the supplied names are
-removed\.
-.
-.P
-Extraneous packages are packages that are not listed on the parent
-package\'s dependencies list\.
-.
-.SH "SEE ALSO"
-.
-.IP "\(bu" 4
-npm help rm
-.
-.IP "\(bu" 4
-npm help folders
-.
-.IP "\(bu" 4
-npm help list
-.
-.IP "" 0
-
diff --git a/deps/npm/man/man1/publish.1 b/deps/npm/man/man1/publish.1
deleted file mode 100644
index 2ca0d9e01..000000000
--- a/deps/npm/man/man1/publish.1
+++ /dev/null
@@ -1,53 +0,0 @@
-.\" Generated with Ronnjs 0.3.8
-.\" http://github.com/kapouer/ronnjs/
-.
-.TH "NPM\-PUBLISH" "1" "June 2013" "" ""
-.
-.SH "NAME"
-\fBnpm-publish\fR \-\- Publish a package
-.
-.SH "SYNOPSIS"
-.
-.nf
-npm publish <tarball>
-npm publish <folder>
-.
-.fi
-.
-.SH "DESCRIPTION"
-Publishes a package to the registry so that it can be installed by name\.
-.
-.IP "\(bu" 4
-\fB<folder>\fR:
-A folder containing a package\.json file
-.
-.IP "\(bu" 4
-\fB<tarball>\fR:
-A url or file path to a gzipped tar archive containing a single folder
-with a package\.json file inside\.
-.
-.IP "" 0
-.
-.P
-Fails if the package name and version combination already exists in
-the registry\. Overwrites when the "\-\-force" flag is set\.
-.
-.SH "SEE ALSO"
-.
-.IP "\(bu" 4
-npm help registry
-.
-.IP "\(bu" 4
-npm help adduser
-.
-.IP "\(bu" 4
-npm help owner
-.
-.IP "\(bu" 4
-npm help deprecate
-.
-.IP "\(bu" 4
-npm help tag
-.
-.IP "" 0
-
diff --git a/deps/npm/man/man1/rebuild.1 b/deps/npm/man/man1/rebuild.1
deleted file mode 100644
index 94e69ea84..000000000
--- a/deps/npm/man/man1/rebuild.1
+++ /dev/null
@@ -1,36 +0,0 @@
-.\" Generated with Ronnjs 0.3.8
-.\" http://github.com/kapouer/ronnjs/
-.
-.TH "NPM\-REBUILD" "1" "June 2013" "" ""
-.
-.SH "NAME"
-\fBnpm-rebuild\fR \-\- Rebuild a package
-.
-.SH "SYNOPSIS"
-.
-.nf
-npm rebuild [<name> [<name> \.\.\.]]
-.
-.fi
-.
-.IP "\(bu" 4
-\fB<name>\fR:
-The package to rebuild
-.
-.IP "" 0
-.
-.SH "DESCRIPTION"
-This command runs the \fBnpm build\fR command on the matched folders\. This is useful
-when you install a new version of node, and must recompile all your C++ addons with
-the new binary\.
-.
-.SH "SEE ALSO"
-.
-.IP "\(bu" 4
-npm help build
-.
-.IP "\(bu" 4
-npm help install
-.
-.IP "" 0
-
diff --git a/deps/npm/man/man1/registry.1 b/deps/npm/man/man1/registry.1
deleted file mode 100644
index 0ab89ebc3..000000000
--- a/deps/npm/man/man1/registry.1
+++ /dev/null
@@ -1,107 +0,0 @@
-.\" Generated with Ronnjs 0.3.8
-.\" http://github.com/kapouer/ronnjs/
-.
-.TH "NPM\-REGISTRY" "1" "June 2013" "" ""
-.
-.SH "NAME"
-\fBnpm-registry\fR \-\- The JavaScript Package Registry
-.
-.SH "DESCRIPTION"
-To resolve packages by name and version, npm talks to a registry website
-that implements the CommonJS Package Registry specification for reading
-package info\.
-.
-.P
-Additionally, npm\'s package registry implementation supports several
-write APIs as well, to allow for publishing packages and managing user
-account information\.
-.
-.P
-The official public npm registry is at \fIhttp://registry\.npmjs\.org/\fR\|\. It
-is powered by a CouchDB database at \fIhttp://isaacs\.iriscouch\.com/registry\fR\|\. The code for the couchapp is
-available at \fIhttp://github\.com/isaacs/npmjs\.org\fR\|\. npm user accounts
-are CouchDB users, stored in the \fIhttp://isaacs\.iriscouch\.com/_users\fR
-database\.
-.
-.P
-The registry URL is supplied by the \fBregistry\fR config parameter\. See \fBnpm help config\fR for more on managing npm\'s configuration\.
-.
-.SH "Can I run my own private registry?"
-Yes!
-.
-.P
-The easiest way is to replicate the couch database, and use the same (or
-similar) design doc to implement the APIs\.
-.
-.P
-If you set up continuous replication from the official CouchDB, and then
-set your internal CouchDB as the registry config, then you\'ll be able
-to read any published packages, in addition to your private ones, and by
-default will only publish internally\. If you then want to publish a
-package for the whole world to see, you can simply override the \fB\-\-registry\fR config for that command\.
-.
-.SH "I don&#39;t want my package published in the official registry\. It&#39;s private\."
-Set \fB"private": true\fR in your package\.json to prevent it from being
-published at all, or \fB"publishConfig":{"registry":"http://my\-internal\-registry\.local"}\fR
-to force it to be published only to your internal registry\.
-.
-.P
-See \fBnpm help json\fR for more info on what goes in the package\.json file\.
-.
-.SH "Will you replicate from my registry into the public one?"
-No\. If you want things to be public, then publish them into the public
-registry using npm\. What little security there is would be for nought
-otherwise\.
-.
-.SH "Do I have to use couchdb to build a registry that npm can talk to?"
-No, but it\'s way easier\.
-.
-.SH "I published something elsewhere, and want to tell the npm registry about it\."
-That is supported, but not using the npm client\. You\'ll have to get
-your hands dirty and do some HTTP\. The request looks something like
-this:
-.
-.IP "" 4
-.
-.nf
-PUT /my\-foreign\-package
-content\-type:application/json
-accept:application/json
-authorization:Basic $base_64_encoded
-{ "name":"my\-foreign\-package"
-, "maintainers":["owner","usernames"]
-, "description":"A package that is hosted elsewhere"
-, "keywords":["nih","my cheese smells the best"]
-, "url":"http://my\-different\-registry\.com/blerg/my\-local\-package"
-}
-.
-.fi
-.
-.IP "" 0
-.
-.P
-(Keywords and description are optional, but recommended\. Name,
-maintainers, and url are required\.)
-.
-.P
-Then, when a user tries to install "my\-foreign\-package", it\'ll redirect
-to your registry\. If that doesn\'t resolve to a valid package entry,
-then it\'ll fail, so please make sure that you understand the spec, and
-ask for help on the \fInpm\-@googlegroups\.com\fR mailing list\.
-.
-.SH "Is there a website or something to see package docs and such?"
-Yes, head over to \fIhttps://npmjs\.org/\fR
-.
-.SH "SEE ALSO"
-.
-.IP "\(bu" 4
-npm help config
-.
-.IP "\(bu" 4
-npm help developers
-.
-.IP "\(bu" 4
-npm help disputes
-.
-.IP "" 0
-
diff --git a/deps/npm/man/man1/removing-npm.1 b/deps/npm/man/man1/removing-npm.1
deleted file mode 100644
index 5b62b69de..000000000
--- a/deps/npm/man/man1/removing-npm.1
+++ /dev/null
@@ -1,107 +0,0 @@
-.\" Generated with Ronnjs 0.3.8
-.\" http://github.com/kapouer/ronnjs/
-.
-.TH "NPM\-REMOVAL" "1" "June 2013" "" ""
-.
-.SH "NAME"
-\fBnpm-removal\fR \-\- Cleaning the Slate
-.
-.SH "SYNOPSIS"
-So sad to see you go\.
-.
-.IP "" 4
-.
-.nf
-sudo npm uninstall npm \-g
-.
-.fi
-.
-.IP "" 0
-.
-.P
-Or, if that fails, get the npm source code, and do:
-.
-.IP "" 4
-.
-.nf
-sudo make uninstall
-.
-.fi
-.
-.IP "" 0
-.
-.SH "More Severe Uninstalling"
-Usually, the above instructions are sufficient\. That will remove
-npm, but leave behind anything you\'ve installed\.
-.
-.P
-If that doesn\'t work, or if you require more drastic measures,
-continue reading\.
-.
-.P
-Note that this is only necessary for globally\-installed packages\. Local
-installs are completely contained within a project\'s \fBnode_modules\fR
-folder\. Delete that folder, and everything is gone (unless a package\'s
-install script is particularly ill\-behaved)\.
-.
-.P
-This assumes that you installed node and npm in the default place\. If
-you configured node with a different \fB\-\-prefix\fR, or installed npm with a
-different prefix setting, then adjust the paths accordingly, replacing \fB/usr/local\fR with your install prefix\.
-.
-.P
-To remove everything npm\-related manually:
-.
-.IP "" 4
-.
-.nf
-rm \-rf /usr/local/{lib/node{,/\.npm,_modules},bin,share/man}/npm*
-.
-.fi
-.
-.IP "" 0
-.
-.P
-If you installed things \fIwith\fR npm, then your best bet is to uninstall
-them with npm first, and then install them again once you have a
-proper install\. This can help find any symlinks that are lying
-around:
-.
-.IP "" 4
-.
-.nf
-ls \-laF /usr/local/{lib/node{,/\.npm},bin,share/man} | grep npm
-.
-.fi
-.
-.IP "" 0
-.
-.P
-Prior to version 0\.3, npm used shim files for executables and node
-modules\. To track those down, you can do the following:
-.
-.IP "" 4
-.
-.nf
-find /usr/local/{lib/node,bin} \-exec grep \-l npm \\{\\} \\; ;
-.
-.fi
-.
-.IP "" 0
-.
-.P
-(This is also in the README file\.)
-.
-.SH "SEE ALSO"
-.
-.IP "\(bu" 4
-README
-.
-.IP "\(bu" 4
-npm help rm
-.
-.IP "\(bu" 4
-npm help prune
-.
-.IP "" 0
-
diff --git a/deps/npm/man/man1/restart.1 b/deps/npm/man/man1/restart.1
deleted file mode 100644
index 20dd844c8..000000000
--- a/deps/npm/man/man1/restart.1
+++ /dev/null
@@ -1,42 +0,0 @@
-.\" Generated with Ronnjs 0.3.8
-.\" http://github.com/kapouer/ronnjs/
-.
-.TH "NPM\-RESTART" "1" "June 2013" "" ""
-.
-.SH "NAME"
-\fBnpm-restart\fR \-\- Start a package
-.
-.SH "SYNOPSIS"
-.
-.nf
-npm restart <name>
-.
-.fi
-.
-.SH "DESCRIPTION"
-This runs a package\'s "restart" script, if one was provided\.
-Otherwise it runs package\'s "stop" script, if one was provided, and then
-the "start" script\.
-.
-.P
-If no version is specified, then it restarts the "active" version\.
-.
-.SH "SEE ALSO"
-.
-.IP "\(bu" 4
-npm help run\-script
-.
-.IP "\(bu" 4
-npm help scripts
-.
-.IP "\(bu" 4
-npm help test
-.
-.IP "\(bu" 4
-npm help start
-.
-.IP "\(bu" 4
-npm help stop
-.
-.IP "" 0
-
diff --git a/deps/npm/man/man1/rm.1 b/deps/npm/man/man1/rm.1
deleted file mode 100644
index b32e0aeec..000000000
--- a/deps/npm/man/man1/rm.1
+++ /dev/null
@@ -1,36 +0,0 @@
-.\" Generated with Ronnjs 0.3.8
-.\" http://github.com/kapouer/ronnjs/
-.
-.TH "NPM\-RM" "1" "June 2013" "" ""
-.
-.SH "NAME"
-\fBnpm-rm\fR \-\- Remove a package
-.
-.SH "SYNOPSIS"
-.
-.nf
-npm rm <name>
-npm uninstall <name>
-.
-.fi
-.
-.SH "DESCRIPTION"
-This uninstalls a package, completely removing everything npm installed
-on its behalf\.
-.
-.SH "SEE ALSO"
-.
-.IP "\(bu" 4
-npm help prune
-.
-.IP "\(bu" 4
-npm help install
-.
-.IP "\(bu" 4
-npm help folders
-.
-.IP "\(bu" 4
-npm help config
-.
-.IP "" 0
-
diff --git a/deps/npm/man/man1/root.1 b/deps/npm/man/man1/root.1
deleted file mode 100644
index c57297347..000000000
--- a/deps/npm/man/man1/root.1
+++ /dev/null
@@ -1,34 +0,0 @@
-.\" Generated with Ronnjs 0.3.8
-.\" http://github.com/kapouer/ronnjs/
-.
-.TH "NPM\-ROOT" "1" "June 2013" "" ""
-.
-.SH "NAME"
-\fBnpm-root\fR \-\- Display npm root
-.
-.SH "SYNOPSIS"
-.
-.nf
-npm root
-.
-.fi
-.
-.SH "DESCRIPTION"
-Print the effective \fBnode_modules\fR folder to standard out\.
-.
-.SH "SEE ALSO"
-.
-.IP "\(bu" 4
-npm help prefix
-.
-.IP "\(bu" 4
-npm help bin
-.
-.IP "\(bu" 4
-npm help folders
-.
-.IP "\(bu" 4
-npm help config
-.
-.IP "" 0
-
diff --git a/deps/npm/man/man1/run-script.1 b/deps/npm/man/man1/run-script.1
deleted file mode 100644
index 2508a7777..000000000
--- a/deps/npm/man/man1/run-script.1
+++ /dev/null
@@ -1,41 +0,0 @@
-.\" Generated with Ronnjs 0.3.8
-.\" http://github.com/kapouer/ronnjs/
-.
-.TH "NPM\-RUN\-SCRIPT" "1" "June 2013" "" ""
-.
-.SH "NAME"
-\fBnpm-run-script\fR \-\- Run arbitrary package scripts
-.
-.SH "SYNOPSIS"
-.
-.nf
-npm run\-script <script> <name>
-.
-.fi
-.
-.SH "DESCRIPTION"
-This runs an arbitrary command from a package\'s "scripts" object\.
-.
-.P
-It is used by the test, start, restart, and stop commands, but can be
-called directly, as well\.
-.
-.SH "SEE ALSO"
-.
-.IP "\(bu" 4
-npm help scripts
-.
-.IP "\(bu" 4
-npm help test
-.
-.IP "\(bu" 4
-npm help start
-.
-.IP "\(bu" 4
-npm help restart
-.
-.IP "\(bu" 4
-npm help stop
-.
-.IP "" 0
-
diff --git a/deps/npm/man/man1/scripts.1 b/deps/npm/man/man1/scripts.1
deleted file mode 100644
index f24c04f95..000000000
--- a/deps/npm/man/man1/scripts.1
+++ /dev/null
@@ -1,351 +0,0 @@
-.\" Generated with Ronnjs 0.3.8
-.\" http://github.com/kapouer/ronnjs/
-.
-.TH "NPM\-SCRIPTS" "1" "June 2013" "" ""
-.
-.SH "NAME"
-\fBnpm-scripts\fR \-\- How npm handles the "scripts" field
-.
-.SH "DESCRIPTION"
-npm supports the "scripts" member of the package\.json script, for the
-following scripts:
-.
-.IP "\(bu" 4
-prepublish:
-Run BEFORE the package is published\. (Also run on local \fBnpm
-install\fR without any arguments\.)
-.
-.IP "\(bu" 4
-publish, postpublish:
-Run AFTER the package is published\.
-.
-.IP "\(bu" 4
-preinstall:
-Run BEFORE the package is installed
-.
-.IP "\(bu" 4
-install, postinstall:
-Run AFTER the package is installed\.
-.
-.IP "\(bu" 4
-preuninstall, uninstall:
-Run BEFORE the package is uninstalled\.
-.
-.IP "\(bu" 4
-postuninstall:
-Run AFTER the package is uninstalled\.
-.
-.IP "\(bu" 4
-preupdate:
-Run BEFORE the package is updated with the update command\.
-.
-.IP "\(bu" 4
-update, postupdate:
-Run AFTER the package is updated with the update command\.
-.
-.IP "\(bu" 4
-pretest, test, posttest:
-Run by the \fBnpm test\fR command\.
-.
-.IP "\(bu" 4
-prestop, stop, poststop:
-Run by the \fBnpm stop\fR command\.
-.
-.IP "\(bu" 4
-prestart, start, poststart:
-Run by the \fBnpm start\fR command\.
-.
-.IP "\(bu" 4
-prerestart, restart, postrestart:
-Run by the \fBnpm restart\fR command\. Note: \fBnpm restart\fR will run the
-stop and start scripts if no \fBrestart\fR script is provided\.
-.
-.IP "" 0
-.
-.P
-Additionally, arbitrary scrips can be run by doing \fBnpm run\-script <stage> <pkg>\fR\|\.
-.
-.SH "NOTE: INSTALL SCRIPTS ARE AN ANTIPATTERN"
-\fBtl;dr\fR Don\'t use \fBinstall\fR\|\. Use a \fB\|\.gyp\fR file for compilation, and \fBprepublish\fR for anything else\.
-.
-.P
-You should almost never have to explicitly set a \fBpreinstall\fR or \fBinstall\fR script\. If you are doing this, please consider if there is
-another option\.
-.
-.P
-The only valid use of \fBinstall\fR or \fBpreinstall\fR scripts is for
-compilation which must be done on the target architecture\. In early
-versions of node, this was often done using the \fBnode\-waf\fR scripts, or
-a standalone \fBMakefile\fR, and early versions of npm required that it be
-explicitly set in package\.json\. This was not portable, and harder to
-do properly\.
-.
-.P
-In the current version of node, the standard way to do this is using a \fB\|\.gyp\fR file\. If you have a file with a \fB\|\.gyp\fR extension in the root
-of your package, then npm will run the appropriate \fBnode\-gyp\fR commands
-automatically at install time\. This is the only officially supported
-method for compiling binary addons, and does not require that you add
-anything to your package\.json file\.
-.
-.P
-If you have to do other things before your package is used, in a way
-that is not dependent on the operating system or architecture of the
-target system, then use a \fBprepublish\fR script instead\. This includes
-tasks such as:
-.
-.IP "\(bu" 4
-Compile CoffeeScript source code into JavaScript\.
-.
-.IP "\(bu" 4
-Create minified versions of JavaScript source code\.
-.
-.IP "\(bu" 4
-Fetching remote resources that your package will use\.
-.
-.IP "" 0
-.
-.P
-The advantage of doing these things at \fBprepublish\fR time instead of \fBpreinstall\fR or \fBinstall\fR time is that they can be done once, in a
-single place, and thus greatly reduce complexity and variability\.
-Additionally, this means that:
-.
-.IP "\(bu" 4
-You can depend on \fBcoffee\-script\fR as a \fBdevDependency\fR, and thus
-your users don\'t need to have it installed\.
-.
-.IP "\(bu" 4
-You don\'t need to include the minifiers in your package, reducing
-the size for your users\.
-.
-.IP "\(bu" 4
-You don\'t need to rely on your users having \fBcurl\fR or \fBwget\fR or
-other system tools on the target machines\.
-.
-.IP "" 0
-.
-.SH "DEFAULT VALUES"
-npm will default some script values based on package contents\.
-.
-.IP "\(bu" 4
-\fB"start": "node server\.js"\fR:
-.
-.IP
-If there is a \fBserver\.js\fR file in the root of your package, then npm
-will default the \fBstart\fR command to \fBnode server\.js\fR\|\.
-.
-.IP "\(bu" 4
-\fB"preinstall": "node\-waf clean || true; node\-waf configure build"\fR:
-.
-.IP
-If there is a \fBwscript\fR file in the root of your package, npm will
-default the \fBpreinstall\fR command to compile using node\-waf\.
-.
-.IP "" 0
-.
-.SH "USER"
-If npm was invoked with root privileges, then it will change the uid to
-the user account or uid specified by the \fBuser\fR config, which defaults
-to \fBnobody\fR\|\. Set the \fBunsafe\-perm\fR flag to run scripts with root
-privileges\.
-.
-.SH "ENVIRONMENT"
-Package scripts run in an environment where many pieces of information are
-made available regarding the setup of npm and the current state of the
-process\.
-.
-.SS "path"
-If you depend on modules that define executable scripts, like test suites,
-then those executables will be added to the \fBPATH\fR for executing the scripts\.
-So, if your package\.json has this:
-.
-.IP "" 4
-.
-.nf
-{ "name" : "foo"
-, "dependencies" : { "bar" : "0\.1\.x" }
-, "scripts": { "start" : "bar \./test" } }
-.
-.fi
-.
-.IP "" 0
-.
-.P
-then you could run \fBnpm start\fR to execute the \fBbar\fR script, which is exported
-into the \fBnode_modules/\.bin\fR directory on \fBnpm install\fR\|\.
-.
-.SS "package\.json vars"
-The package\.json fields are tacked onto the \fBnpm_package_\fR prefix\. So, for
-instance, if you had \fB{"name":"foo", "version":"1\.2\.5"}\fR in your package\.json
-file, then your package scripts would have the \fBnpm_package_name\fR environment
-variable set to "foo", and the \fBnpm_package_version\fR set to "1\.2\.5"
-.
-.SS "configuration"
-Configuration parameters are put in the environment with the \fBnpm_config_\fR
-prefix\. For instance, you can view the effective \fBroot\fR config by checking the \fBnpm_config_root\fR environment variable\.
-.
-.SS "Special: package\.json &quot;config&quot; hash"
-The package\.json "config" keys are overwritten in the environment if
-there is a config param of \fB<name>[@<version>]:<key>\fR\|\. For example, if
-the package\.json has this:
-.
-.IP "" 4
-.
-.nf
-{ "name" : "foo"
-, "config" : { "port" : "8080" }
-, "scripts" : { "start" : "node server\.js" } }
-.
-.fi
-.
-.IP "" 0
-.
-.P
-and the server\.js is this:
-.
-.IP "" 4
-.
-.nf
-http\.createServer(\.\.\.)\.listen(process\.env\.npm_package_config_port)
-.
-.fi
-.
-.IP "" 0
-.
-.P
-then the user could change the behavior by doing:
-.
-.IP "" 4
-.
-.nf
-npm config set foo:port 80
-.
-.fi
-.
-.IP "" 0
-.
-.SS "current lifecycle event"
-Lastly, the \fBnpm_lifecycle_event\fR environment variable is set to whichever
-stage of the cycle is being executed\. So, you could have a single script used
-for different parts of the process which switches based on what\'s currently
-happening\.
-.
-.P
-Objects are flattened following this format, so if you had \fB{"scripts":{"install":"foo\.js"}}\fR in your package\.json, then you\'d see this
-in the script:
-.
-.IP "" 4
-.
-.nf
-process\.env\.npm_package_scripts_install === "foo\.js"
-.
-.fi
-.
-.IP "" 0
-.
-.SH "EXAMPLES"
-For example, if your package\.json contains this:
-.
-.IP "" 4
-.
-.nf
-{ "scripts" :
- { "install" : "scripts/install\.js"
- , "postinstall" : "scripts/install\.js"
- , "uninstall" : "scripts/uninstall\.js"
- }
-}
-.
-.fi
-.
-.IP "" 0
-.
-.P
-then the \fBscripts/install\.js\fR will be called for the install, post\-install,
-stages of the lifecycle, and the \fBscripts/uninstall\.js\fR would be
-called when the package is uninstalled\. Since \fBscripts/install\.js\fR is running
-for three different phases, it would be wise in this case to look at the \fBnpm_lifecycle_event\fR environment variable\.
-.
-.P
-If you want to run a make command, you can do so\. This works just fine:
-.
-.IP "" 4
-.
-.nf
-{ "scripts" :
- { "preinstall" : "\./configure"
- , "install" : "make && make install"
- , "test" : "make test"
- }
-}
-.
-.fi
-.
-.IP "" 0
-.
-.SH "EXITING"
-Scripts are run by passing the line as a script argument to \fBsh\fR\|\.
-.
-.P
-If the script exits with a code other than 0, then this will abort the
-process\.
-.
-.P
-Note that these script files don\'t have to be nodejs or even javascript
-programs\. They just have to be some kind of executable file\.
-.
-.SH "HOOK SCRIPTS"
-If you want to run a specific script at a specific lifecycle event for ALL
-packages, then you can use a hook script\.
-.
-.P
-Place an executable file at \fBnode_modules/\.hooks/{eventname}\fR, and it\'ll get
-run for all packages when they are going through that point in the package
-lifecycle for any packages installed in that root\.
-.
-.P
-Hook scripts are run exactly the same way as package\.json scripts\. That is,
-they are in a separate child process, with the env described above\.
-.
-.SH "BEST PRACTICES"
-.
-.IP "\(bu" 4
-Don\'t exit with a non\-zero error code unless you \fIreally\fR mean it\.
-Except for uninstall scripts, this will cause the npm action
-to fail, and potentially be rolled back\. If the failure is minor or
-only will prevent some optional features, then it\'s better to just
-print a warning and exit successfully\.
-.
-.IP "\(bu" 4
-Try not to use scripts to do what npm can do for you\. Read through \fBnpm help json\fR to see all the things that you can specify and enable
-by simply describing your package appropriately\. In general, this will
-lead to a more robust and consistent state\.
-.
-.IP "\(bu" 4
-Inspect the env to determine where to put things\. For instance, if
-the \fBnpm_config_binroot\fR environ is set to \fB/home/user/bin\fR, then don\'t
-try to install executables into \fB/usr/local/bin\fR\|\. The user probably
-set it up that way for a reason\.
-.
-.IP "\(bu" 4
-Don\'t prefix your script commands with "sudo"\. If root permissions are
-required for some reason, then it\'ll fail with that error, and the user
-will sudo the npm command in question\.
-.
-.IP "" 0
-.
-.SH "SEE ALSO"
-.
-.IP "\(bu" 4
-npm help run\-script
-.
-.IP "\(bu" 4
-npm help json
-.
-.IP "\(bu" 4
-npm help developers
-.
-.IP "\(bu" 4
-npm help install
-.
-.IP "" 0
-
diff --git a/deps/npm/man/man1/search.1 b/deps/npm/man/man1/search.1
deleted file mode 100644
index d196590d1..000000000
--- a/deps/npm/man/man1/search.1
+++ /dev/null
@@ -1,36 +0,0 @@
-.\" Generated with Ronnjs 0.3.8
-.\" http://github.com/kapouer/ronnjs/
-.
-.TH "NPM\-SEARCH" "1" "June 2013" "" ""
-.
-.SH "NAME"
-\fBnpm-search\fR \-\- Search for packages
-.
-.SH "SYNOPSIS"
-.
-.nf
-npm search [search terms \.\.\.]
-.
-.fi
-.
-.SH "DESCRIPTION"
-Search the registry for packages matching the search terms\.
-.
-.P
-If a term starts with \fB/\fR, then it\'s interpreted as a regular expression\.
-A trailing \fB/\fR will be ignored in this case\. (Note that many regular
-expression characters must be escaped or quoted in most shells\.)
-.
-.SH "SEE ALSO"
-.
-.IP "\(bu" 4
-npm help registry
-.
-.IP "\(bu" 4
-npm help config
-.
-.IP "\(bu" 4
-npm help view
-.
-.IP "" 0
-
diff --git a/deps/npm/man/man1/semver.1 b/deps/npm/man/man1/semver.1
deleted file mode 100644
index ec9cd73fc..000000000
--- a/deps/npm/man/man1/semver.1
+++ /dev/null
@@ -1,221 +0,0 @@
-.\" Generated with Ronnjs 0.3.8
-.\" http://github.com/kapouer/ronnjs/
-.
-.TH "NPM\-SEMVER" "1" "June 2013" "" ""
-.
-.SH "NAME"
-\fBnpm-semver\fR \-\- The semantic versioner for npm
-.
-.SH "SYNOPSIS"
-The npm semantic versioning utility\.
-.
-.SH "DESCRIPTION"
-As a node module:
-.
-.IP "" 4
-.
-.nf
-$ npm install semver
-semver\.valid(\'1\.2\.3\') // \'1\.2\.3\'
-semver\.valid(\'a\.b\.c\') // null
-semver\.clean(\' =v1\.2\.3 \') // \'1\.2\.3\'
-semver\.satisfies(\'1\.2\.3\', \'1\.x || >=2\.5\.0 || 5\.0\.0 \- 7\.2\.3\') // true
-semver\.gt(\'1\.2\.3\', \'9\.8\.7\') // false
-semver\.lt(\'1\.2\.3\', \'9\.8\.7\') // true
-.
-.fi
-.
-.IP "" 0
-.
-.P
-As a command\-line utility:
-.
-.IP "" 4
-.
-.nf
-$ npm install semver \-g
-$ semver \-h
-Usage: semver \-v <version> [\-r <range>]
-Test if version(s) satisfy the supplied range(s),
-and sort them\.
-Multiple versions or ranges may be supplied\.
-Program exits successfully if any valid version satisfies
-all supplied ranges, and prints all satisfying versions\.
-If no versions are valid, or ranges are not satisfied,
-then exits failure\.
-Versions are printed in ascending order, so supplying
-multiple versions to the utility will just sort them\.
-.
-.fi
-.
-.IP "" 0
-.
-.SH "Versions"
-A version is the following things, in this order:
-.
-.IP "\(bu" 4
-a number (Major)
-.
-.IP "\(bu" 4
-a period
-.
-.IP "\(bu" 4
-a number (minor)
-.
-.IP "\(bu" 4
-a period
-.
-.IP "\(bu" 4
-a number (patch)
-.
-.IP "\(bu" 4
-OPTIONAL: a hyphen, followed by a number (build)
-.
-.IP "\(bu" 4
-OPTIONAL: a collection of pretty much any non\-whitespace characters
-(tag)
-.
-.IP "" 0
-.
-.P
-A leading \fB"="\fR or \fB"v"\fR character is stripped off and ignored\.
-.
-.SH "Comparisons"
-The ordering of versions is done using the following algorithm, given
-two versions and asked to find the greater of the two:
-.
-.IP "\(bu" 4
-If the majors are numerically different, then take the one
-with a bigger major number\. \fB2\.3\.4 > 1\.3\.4\fR
-.
-.IP "\(bu" 4
-If the minors are numerically different, then take the one
-with the bigger minor number\. \fB2\.3\.4 > 2\.2\.4\fR
-.
-.IP "\(bu" 4
-If the patches are numerically different, then take the one with the
-bigger patch number\. \fB2\.3\.4 > 2\.3\.3\fR
-.
-.IP "\(bu" 4
-If only one of them has a build number, then take the one with the
-build number\. \fB2\.3\.4\-0 > 2\.3\.4\fR
-.
-.IP "\(bu" 4
-If they both have build numbers, and the build numbers are numerically
-different, then take the one with the bigger build number\. \fB2\.3\.4\-10 > 2\.3\.4\-9\fR
-.
-.IP "\(bu" 4
-If only one of them has a tag, then take the one without the tag\. \fB2\.3\.4 > 2\.3\.4\-beta\fR
-.
-.IP "\(bu" 4
-If they both have tags, then take the one with the lexicographically
-larger tag\. \fB2\.3\.4\-beta > 2\.3\.4\-alpha\fR
-.
-.IP "\(bu" 4
-At this point, they\'re equal\.
-.
-.IP "" 0
-.
-.SH "Ranges"
-The following range styles are supported:
-.
-.IP "\(bu" 4
-\fB>1\.2\.3\fR Greater than a specific version\.
-.
-.IP "\(bu" 4
-\fB<1\.2\.3\fR Less than
-.
-.IP "\(bu" 4
-\fB1\.2\.3 \- 2\.3\.4\fR := \fB>=1\.2\.3 <=2\.3\.4\fR
-.
-.IP "\(bu" 4
-\fB~1\.2\.3\fR := \fB>=1\.2\.3 <1\.3\.0\fR
-.
-.IP "\(bu" 4
-\fB~1\.2\fR := \fB>=1\.2\.0 <1\.3\.0\fR
-.
-.IP "\(bu" 4
-\fB~1\fR := \fB>=1\.0\.0 <2\.0\.0\fR
-.
-.IP "\(bu" 4
-\fB1\.2\.x\fR := \fB>=1\.2\.0 <1\.3\.0\fR
-.
-.IP "\(bu" 4
-\fB1\.x\fR := \fB>=1\.0\.0 <2\.0\.0\fR
-.
-.IP "" 0
-.
-.P
-Ranges can be joined with either a space (which implies "and") or a \fB||\fR (which implies "or")\.
-.
-.SH "Functions"
-.
-.IP "\(bu" 4
-valid(v): Return the parsed version, or null if it\'s not valid\.
-.
-.IP "\(bu" 4
-inc(v, release): Return the version incremented by the release type
-(major, minor, patch, or build), or null if it\'s not valid\.
-.
-.IP "" 0
-.
-.SS "Comparison"
-.
-.IP "\(bu" 4
-gt(v1, v2): \fBv1 > v2\fR
-.
-.IP "\(bu" 4
-gte(v1, v2): \fBv1 >= v2\fR
-.
-.IP "\(bu" 4
-lt(v1, v2): \fBv1 < v2\fR
-.
-.IP "\(bu" 4
-lte(v1, v2): \fBv1 <= v2\fR
-.
-.IP "\(bu" 4
-eq(v1, v2): \fBv1 == v2\fR This is true if they\'re logically equivalent,
-even if they\'re not the exact same string\. You already know how to
-compare strings\.
-.
-.IP "\(bu" 4
-neq(v1, v2): \fBv1 != v2\fR The opposite of eq\.
-.
-.IP "\(bu" 4
-cmp(v1, comparator, v2): Pass in a comparison string, and it\'ll call
-the corresponding function above\. \fB"==="\fR and \fB"!=="\fR do simple
-string comparison, but are included for completeness\. Throws if an
-invalid comparison string is provided\.
-.
-.IP "\(bu" 4
-compare(v1, v2): Return 0 if v1 == v2, or 1 if v1 is greater, or \-1 if
-v2 is greater\. Sorts in ascending order if passed to Array\.sort()\.
-.
-.IP "\(bu" 4
-rcompare(v1, v2): The reverse of compare\. Sorts an array of versions
-in descending order when passed to Array\.sort()\.
-.
-.IP "" 0
-.
-.SS "Ranges"
-.
-.IP "\(bu" 4
-validRange(range): Return the valid range or null if it\'s not valid
-.
-.IP "\(bu" 4
-satisfies(version, range): Return true if the version satisfies the
-range\.
-.
-.IP "\(bu" 4
-maxSatisfying(versions, range): Return the highest version in the list
-that satisfies the range, or null if none of them do\.
-.
-.IP "" 0
-.
-.SH "SEE ALSO"
-.
-.IP "\(bu" 4
-npm help json
-.
-.IP "" 0
-
diff --git a/deps/npm/man/man1/set.1 b/deps/npm/man/man1/set.1
deleted file mode 100644
index 5075c9f0c..000000000
--- a/deps/npm/man/man1/set.1
+++ /dev/null
@@ -1,1154 +0,0 @@
-.\" Generated with Ronnjs/v0.1
-.\" http://github.com/kapouer/ronnjs/
-.
-.TH "NPM\-CONFIG" "1" "November 2011" "" ""
-.
-.SH "NAME"
-\fBnpm-config\fR \-\- Manage the npm configuration file
-.
-.SH "SYNOPSIS"
-.
-.nf
-npm config set <key> <value> [\-\-global]
-npm config get <key>
-npm config delete <key>
-npm config list
-npm config edit
-npm get <key>
-npm set <key> <value> [\-\-global]
-.
-.fi
-.
-.SH "DESCRIPTION"
-npm gets its configuration values from 6 sources, in this priority:
-.
-.SS "Command Line Flags"
-Putting \fB\-\-foo bar\fR on the command line sets the \fBfoo\fR configuration parameter to \fB"bar"\fR\|\. A \fB\-\-\fR argument tells the cli
-parser to stop reading flags\. A \fB\-\-flag\fR parameter that is at the \fIend\fR of
-the command will be given the value of \fBtrue\fR\|\.
-.
-.SS "Environment Variables"
-Any environment variables that start with \fBnpm_config_\fR will be interpreted
-as a configuration parameter\. For example, putting \fBnpm_config_foo=bar\fR in
-your environment will set the \fBfoo\fR configuration parameter to \fBbar\fR\|\. Any
-environment configurations that are not given a value will be given the value
-of \fBtrue\fR\|\. Config values are case\-insensitive, so \fBNPM_CONFIG_FOO=bar\fR will
-work the same\.
-.
-.SS "Per\-user config file"
-\fB$HOME/\.npmrc\fR (or the \fBuserconfig\fR param, if set above)
-.
-.P
-This file is an ini\-file formatted list of \fBkey = value\fR parameters\.
-.
-.SS "Global config file"
-\fB$PREFIX/etc/npmrc\fR (or the \fBglobalconfig\fR param, if set above):
-This file is an ini\-file formatted list of \fBkey = value\fR parameters
-.
-.SS "Built\-in config file"
-\fBpath/to/npm/itself/npmrc\fR
-.
-.P
-This is an unchangeable "builtin"
-configuration file that npm keeps consistent across updates\. Set
-fields in here using the \fB\|\./configure\fR script that comes with npm\.
-This is primarily for distribution maintainers to override default
-configs in a standard and consistent manner\.
-.
-.SS "Default Configs"
-A set of configuration parameters that are internal to npm, and are
-defaults if nothing else is specified\.
-.
-.SH "Sub\-commands"
-Config supports the following sub\-commands:
-.
-.SS "set"
-.
-.nf
-npm config set key value
-.
-.fi
-.
-.P
-Sets the config key to the value\.
-.
-.P
-If value is omitted, then it sets it to "true"\.
-.
-.SS "get"
-.
-.nf
-npm config get key
-.
-.fi
-.
-.P
-Echo the config value to stdout\.
-.
-.SS "list"
-.
-.nf
-npm config list
-.
-.fi
-.
-.P
-Show all the config settings\.
-.
-.SS "delete"
-.
-.nf
-npm config delete key
-.
-.fi
-.
-.P
-Deletes the key from all configuration files\.
-.
-.SS "edit"
-.
-.nf
-npm config edit
-.
-.fi
-.
-.P
-Opens the config file in an editor\. Use the \fB\-\-global\fR flag to edit the
-global config\.
-.
-.SH "Shorthands and Other CLI Niceties"
-The following shorthands are parsed on the command\-line:
-.
-.IP "\(bu" 4
-\fB\-v\fR: \fB\-\-version\fR
-.
-.IP "\(bu" 4
-\fB\-h\fR, \fB\-?\fR, \fB\-\-help\fR, \fB\-H\fR: \fB\-\-usage\fR
-.
-.IP "\(bu" 4
-\fB\-s\fR, \fB\-\-silent\fR: \fB\-\-loglevel silent\fR
-.
-.IP "\(bu" 4
-\fB\-d\fR: \fB\-\-loglevel info\fR
-.
-.IP "\(bu" 4
-\fB\-dd\fR, \fB\-\-verbose\fR: \fB\-\-loglevel verbose\fR
-.
-.IP "\(bu" 4
-\fB\-ddd\fR: \fB\-\-loglevel silly\fR
-.
-.IP "\(bu" 4
-\fB\-g\fR: \fB\-\-global\fR
-.
-.IP "\(bu" 4
-\fB\-l\fR: \fB\-\-long\fR
-.
-.IP "\(bu" 4
-\fB\-m\fR: \fB\-\-message\fR
-.
-.IP "\(bu" 4
-\fB\-p\fR, \fB\-\-porcelain\fR: \fB\-\-parseable\fR
-.
-.IP "\(bu" 4
-\fB\-reg\fR: \fB\-\-registry\fR
-.
-.IP "\(bu" 4
-\fB\-v\fR: \fB\-\-version\fR
-.
-.IP "\(bu" 4
-\fB\-f\fR: \fB\-\-force\fR
-.
-.IP "\(bu" 4
-\fB\-l\fR: \fB\-\-long\fR
-.
-.IP "\(bu" 4
-\fB\-desc\fR: \fB\-\-description\fR
-.
-.IP "\(bu" 4
-\fB\-S\fR: \fB\-\-save\fR
-.
-.IP "\(bu" 4
-\fB\-y\fR: \fB\-\-yes\fR
-.
-.IP "\(bu" 4
-\fB\-n\fR: \fB\-\-yes false\fR
-.
-.IP "\(bu" 4
-\fBll\fR and \fBla\fR commands: \fBls \-\-long\fR
-.
-.IP "" 0
-.
-.P
-If the specified configuration param resolves unambiguously to a known
-configuration parameter, then it is expanded to that configuration
-parameter\. For example:
-.
-.IP "" 4
-.
-.nf
-npm ls \-\-par
-# same as:
-npm ls \-\-parseable
-.
-.fi
-.
-.IP "" 0
-.
-.P
-If multiple single\-character shorthands are strung together, and the
-resulting combination is unambiguously not some other configuration
-param, then it is expanded to its various component pieces\. For
-example:
-.
-.IP "" 4
-.
-.nf
-npm ls \-gpld
-# same as:
-npm ls \-\-global \-\-parseable \-\-long \-\-loglevel info
-.
-.fi
-.
-.IP "" 0
-.
-.SH "Per\-Package Config Settings"
-When running scripts (see \fBnpm help scripts\fR)
-the package\.json "config" keys are overwritten in the environment if
-there is a config param of \fB<name>[@<version>]:<key>\fR\|\. For example, if
-the package\.json has this:
-.
-.IP "" 4
-.
-.nf
-{ "name" : "foo"
-, "config" : { "port" : "8080" }
-, "scripts" : { "start" : "node server\.js" } }
-.
-.fi
-.
-.IP "" 0
-.
-.P
-and the server\.js is this:
-.
-.IP "" 4
-.
-.nf
-http\.createServer(\.\.\.)\.listen(process\.env\.npm_package_config_port)
-.
-.fi
-.
-.IP "" 0
-.
-.P
-then the user could change the behavior by doing:
-.
-.IP "" 4
-.
-.nf
-npm config set foo:port 80
-.
-.fi
-.
-.IP "" 0
-.
-.SH "Config Settings"
-.
-.SS "always\-auth"
-.
-.IP "\(bu" 4
-Default: false
-.
-.IP "\(bu" 4
-Type: Boolean
-.
-.IP "" 0
-.
-.P
-Force npm to always require authentication when accessing the registry,
-even for \fBGET\fR requests\.
-.
-.SS "bin\-publish"
-.
-.IP "\(bu" 4
-Default: false
-.
-.IP "\(bu" 4
-Type: Boolean
-.
-.IP "" 0
-.
-.P
-If set to true, then binary packages will be created on publish\.
-.
-.P
-This is the way to opt into the "bindist" behavior described below\.
-.
-.SS "bindist"
-.
-.IP "\(bu" 4
-Default: Unstable node versions, \fBnull\fR, otherwise \fB"<node version>\-<platform>\-<os release>"\fR
-.
-.IP "\(bu" 4
-Type: String or \fBnull\fR
-.
-.IP "" 0
-.
-.P
-Experimental: on stable versions of node, binary distributions will be
-created with this tag\. If a user then installs that package, and their \fBbindist\fR tag is found in the list of binary distributions, they will
-get that prebuilt version\.
-.
-.P
-Pre\-build node packages have their preinstall, install, and postinstall
-scripts stripped (since they are run prior to publishing), and do not
-have their \fBbuild\fR directories automatically ignored\.
-.
-.P
-It\'s yet to be seen if this is a good idea\.
-.
-.SS "browser"
-.
-.IP "\(bu" 4
-Default: OS X: \fB"open"\fR, others: \fB"google\-chrome"\fR
-.
-.IP "\(bu" 4
-Type: String
-.
-.IP "" 0
-.
-.P
-The browser that is called by the \fBnpm docs\fR command to open websites\.
-.
-.SS "ca"
-.
-.IP "\(bu" 4
-Default: The npm CA certificate
-.
-.IP "\(bu" 4
-Type: String or null
-.
-.IP "" 0
-.
-.P
-The Certificate Authority signing certificate that is trusted for SSL
-connections to the registry\.
-.
-.P
-Set to \fBnull\fR to only allow "known" registrars, or to a specific CA cert
-to trust only that specific signing authority\.
-.
-.P
-See also the \fBstrict\-ssl\fR config\.
-.
-.SS "cache"
-.
-.IP "\(bu" 4
-Default: Windows: \fB~/npm\-cache\fR, Posix: \fB~/\.npm\fR
-.
-.IP "\(bu" 4
-Type: path
-.
-.IP "" 0
-.
-.P
-The location of npm\'s cache directory\. See \fBnpm help cache\fR
-.
-.SS "color"
-.
-.IP "\(bu" 4
-Default: true on Posix, false on Windows
-.
-.IP "\(bu" 4
-Type: Boolean or \fB"always"\fR
-.
-.IP "" 0
-.
-.P
-If false, never shows colors\. If \fB"always"\fR then always shows colors\.
-If true, then only prints color codes for tty file descriptors\.
-.
-.SS "depth"
-.
-.IP "\(bu" 4
-Default: Infinity
-.
-.IP "\(bu" 4
-Type: Number
-.
-.IP "" 0
-.
-.P
-The depth to go when recursing directories for \fBnpm ls\fR and \fBnpm cache ls\fR\|\.
-.
-.SS "description"
-.
-.IP "\(bu" 4
-Default: true
-.
-.IP "\(bu" 4
-Type: Boolean
-.
-.IP "" 0
-.
-.P
-Show the description in \fBnpm search\fR
-.
-.SS "dev"
-.
-.IP "\(bu" 4
-Default: false
-.
-.IP "\(bu" 4
-Type: Boolean
-.
-.IP "" 0
-.
-.P
-Install \fBdev\-dependencies\fR along with packages\.
-.
-.P
-Note that \fBdev\-dependencies\fR are also installed if the \fBnpat\fR flag is
-set\.
-.
-.SS "editor"
-.
-.IP "\(bu" 4
-Default: \fBEDITOR\fR environment variable if set, or \fB"vi"\fR on Posix,
-or \fB"notepad"\fR on Windows\.
-.
-.IP "\(bu" 4
-Type: path
-.
-.IP "" 0
-.
-.P
-The command to run for \fBnpm edit\fR or \fBnpm config edit\fR\|\.
-.
-.SS "force"
-.
-.IP "\(bu" 4
-Default: false
-.
-.IP "\(bu" 4
-Type: Boolean
-.
-.IP "" 0
-.
-.P
-Makes various commands more forceful\.
-.
-.IP "\(bu" 4
-lifecycle script failure does not block progress\.
-.
-.IP "\(bu" 4
-publishing clobbers previously published versions\.
-.
-.IP "\(bu" 4
-skips cache when requesting from the registry\.
-.
-.IP "\(bu" 4
-prevents checks against clobbering non\-npm files\.
-.
-.IP "" 0
-.
-.SS "global"
-.
-.IP "\(bu" 4
-Default: false
-.
-.IP "\(bu" 4
-Type: Boolean
-.
-.IP "" 0
-.
-.P
-Operates in "global" mode, so that packages are installed into the \fBprefix\fR folder instead of the current working directory\. See \fBnpm help folders\fR for more on the differences in behavior\.
-.
-.IP "\(bu" 4
-packages are installed into the \fBprefix/node_modules\fR folder, instead of the
-current working directory\.
-.
-.IP "\(bu" 4
-bin files are linked to \fBprefix/bin\fR
-.
-.IP "\(bu" 4
-man pages are linked to \fBprefix/share/man\fR
-.
-.IP "" 0
-.
-.SS "globalconfig"
-.
-.IP "\(bu" 4
-Default: {prefix}/etc/npmrc
-.
-.IP "\(bu" 4
-Type: path
-.
-.IP "" 0
-.
-.P
-The config file to read for global config options\.
-.
-.SS "globalignorefile"
-.
-.IP "\(bu" 4
-Default: {prefix}/etc/npmignore
-.
-.IP "\(bu" 4
-Type: path
-.
-.IP "" 0
-.
-.P
-The config file to read for global ignore patterns to apply to all users
-and all projects\.
-.
-.P
-If not found, but there is a "gitignore" file in the
-same directory, then that will be used instead\.
-.
-.SS "group"
-.
-.IP "\(bu" 4
-Default: GID of the current process
-.
-.IP "\(bu" 4
-Type: String or Number
-.
-.IP "" 0
-.
-.P
-The group to use when running package scripts in global mode as the root
-user\.
-.
-.SS "https\-proxy"
-.
-.IP "\(bu" 4
-Default: the \fBHTTPS_PROXY\fR or \fBhttps_proxy\fR or \fBHTTP_PROXY\fR or \fBhttp_proxy\fR environment variables\.
-.
-.IP "\(bu" 4
-Type: url
-.
-.IP "" 0
-.
-.P
-A proxy to use for outgoing https requests\.
-.
-.SS "ignore"
-.
-.IP "\(bu" 4
-Default: ""
-.
-.IP "\(bu" 4
-Type: string
-.
-.IP "" 0
-.
-.P
-A white\-space separated list of glob patterns of files to always exclude
-from packages when building tarballs\.
-.
-.SS "init\.version"
-.
-.IP "\(bu" 4
-Default: "0\.0\.0"
-.
-.IP "\(bu" 4
-Type: semver
-.
-.IP "" 0
-.
-.P
-The value \fBnpm init\fR should use by default for the package version\.
-.
-.SS "init\.author\.name"
-.
-.IP "\(bu" 4
-Default: "0\.0\.0"
-.
-.IP "\(bu" 4
-Type: String
-.
-.IP "" 0
-.
-.P
-The value \fBnpm init\fR should use by default for the package author\'s name\.
-.
-.SS "init\.author\.email"
-.
-.IP "\(bu" 4
-Default: ""
-.
-.IP "\(bu" 4
-Type: String
-.
-.IP "" 0
-.
-.P
-The value \fBnpm init\fR should use by default for the package author\'s email\.
-.
-.SS "init\.author\.url"
-.
-.IP "\(bu" 4
-Default: ""
-.
-.IP "\(bu" 4
-Type: String
-.
-.IP "" 0
-.
-.P
-The value \fBnpm init\fR should use by default for the package author\'s homepage\.
-.
-.SS "link"
-.
-.IP "\(bu" 4
-Default: false
-.
-.IP "\(bu" 4
-Type: Boolean
-.
-.IP "" 0
-.
-.P
-If true, then local installs will link if there is a suitable globally
-installed package\.
-.
-.P
-Note that this means that local installs can cause things to be
-installed into the global space at the same time\. The link is only done
-if one of the two conditions are met:
-.
-.IP "\(bu" 4
-The package is not already installed globally, or
-.
-.IP "\(bu" 4
-the globally installed version is identical to the version that is
-being installed locally\.
-.
-.IP "" 0
-.
-.SS "logfd"
-.
-.IP "\(bu" 4
-Default: stderr file descriptor
-.
-.IP "\(bu" 4
-Type: Number or Stream
-.
-.IP "" 0
-.
-.P
-The location to write log output\.
-.
-.SS "loglevel"
-.
-.IP "\(bu" 4
-Default: "warn"
-.
-.IP "\(bu" 4
-Type: String
-.
-.IP "\(bu" 4
-Values: "silent", "win", "error", "warn", "info", "verbose", "silly"
-.
-.IP "" 0
-.
-.P
-What level of logs to report\. On failure, \fIall\fR logs are written to \fBnpm\-debug\.log\fR in the current working directory\.
-.
-.SS "logprefix"
-.
-.IP "\(bu" 4
-Default: true on Posix, false on Windows
-.
-.IP "\(bu" 4
-Type: Boolean
-.
-.IP "" 0
-.
-.P
-Whether or not to prefix log messages with "npm" and the log level\. See
-also "color" and "loglevel"\.
-.
-.SS "long"
-.
-.IP "\(bu" 4
-Default: false
-.
-.IP "\(bu" 4
-Type: Boolean
-.
-.IP "" 0
-.
-.P
-Show extended information in \fBnpm ls\fR
-.
-.SS "message"
-.
-.IP "\(bu" 4
-Default: "%s"
-.
-.IP "\(bu" 4
-Type: String
-.
-.IP "" 0
-.
-.P
-Commit message which is used by \fBnpm version\fR when creating version commit\.
-.
-.P
-Any "%s" in the message will be replaced with the version number\.
-.
-.SS "node\-version"
-.
-.IP "\(bu" 4
-Default: process\.version
-.
-.IP "\(bu" 4
-Type: semver or false
-.
-.IP "" 0
-.
-.P
-The node version to use when checking package\'s "engines" hash\.
-.
-.SS "npat"
-.
-.IP "\(bu" 4
-Default: false
-.
-.IP "\(bu" 4
-Type: Boolean
-.
-.IP "" 0
-.
-.P
-Run tests on installation and report results to the \fBnpaturl\fR\|\.
-.
-.SS "npaturl"
-.
-.IP "\(bu" 4
-Default: Not yet implemented
-.
-.IP "\(bu" 4
-Type: url
-.
-.IP "" 0
-.
-.P
-The url to report npat test results\.
-.
-.SS "onload\-script"
-.
-.IP "\(bu" 4
-Default: false
-.
-.IP "\(bu" 4
-Type: path
-.
-.IP "" 0
-.
-.P
-A node module to \fBrequire()\fR when npm loads\. Useful for programmatic
-usage\.
-.
-.SS "outfd"
-.
-.IP "\(bu" 4
-Default: standard output file descriptor
-.
-.IP "\(bu" 4
-Type: Number or Stream
-.
-.IP "" 0
-.
-.P
-Where to write "normal" output\. This has no effect on log output\.
-.
-.SS "parseable"
-.
-.IP "\(bu" 4
-Default: false
-.
-.IP "\(bu" 4
-Type: Boolean
-.
-.IP "" 0
-.
-.P
-Output parseable results from commands that write to
-standard output\.
-.
-.SS "prefix"
-.
-.IP "\(bu" 4
-Default: node\'s process\.installPrefix
-.
-.IP "\(bu" 4
-Type: path
-.
-.IP "" 0
-.
-.P
-The location to install global items\. If set on the command line, then
-it forces non\-global commands to run in the specified folder\.
-.
-.SS "production"
-.
-.IP "\(bu" 4
-Default: false
-.
-.IP "\(bu" 4
-Type: Boolean
-.
-.IP "" 0
-.
-.P
-Set to true to run in "production" mode\.
-.
-.IP "1" 4
-devDependencies are not installed at the topmost level when running
-local \fBnpm install\fR without any arguments\.
-.
-.IP "2" 4
-Set the NODE_ENV="production" for lifecycle scripts\.
-.
-.IP "" 0
-.
-.SS "proxy"
-.
-.IP "\(bu" 4
-Default: \fBHTTP_PROXY\fR or \fBhttp_proxy\fR environment variable, or null
-.
-.IP "\(bu" 4
-Type: url
-.
-.IP "" 0
-.
-.P
-A proxy to use for outgoing http requests\.
-.
-.SS "rebuild\-bundle"
-.
-.IP "\(bu" 4
-Default: true
-.
-.IP "\(bu" 4
-Type: Boolean
-.
-.IP "" 0
-.
-.P
-Rebuild bundled dependencies after installation\.
-.
-.SS "registry"
-.
-.IP "\(bu" 4
-Default: https://registry\.npmjs\.org/
-.
-.IP "\(bu" 4
-Type: url
-.
-.IP "" 0
-.
-.P
-The base URL of the npm package registry\.
-.
-.SS "rollback"
-.
-.IP "\(bu" 4
-Default: true
-.
-.IP "\(bu" 4
-Type: Boolean
-.
-.IP "" 0
-.
-.P
-Remove failed installs\.
-.
-.SS "save"
-.
-.IP "\(bu" 4
-Default: false
-.
-.IP "\(bu" 4
-Type: Boolean
-.
-.IP "" 0
-.
-.P
-Save installed packages to a package\.json file as dependencies\.
-.
-.P
-Only works if there is already a package\.json file present\.
-.
-.SS "searchopts"
-.
-.IP "\(bu" 4
-Default: ""
-.
-.IP "\(bu" 4
-Type: String
-.
-.IP "" 0
-.
-.P
-Space\-separated options that are always passed to search\.
-.
-.SS "searchexclude"
-.
-.IP "\(bu" 4
-Default: ""
-.
-.IP "\(bu" 4
-Type: String
-.
-.IP "" 0
-.
-.P
-Space\-separated options that limit the results from search\.
-.
-.SS "shell"
-.
-.IP "\(bu" 4
-Default: SHELL environment variable, or "bash" on Posix, or "cmd" on
-Windows
-.
-.IP "\(bu" 4
-Type: path
-.
-.IP "" 0
-.
-.P
-The shell to run for the \fBnpm explore\fR command\.
-.
-.SS "strict\-ssl"
-.
-.IP "\(bu" 4
-Default: true
-.
-.IP "\(bu" 4
-Type: Boolean
-.
-.IP "" 0
-.
-.P
-Whether or not to do SSL key validation when making requests to the
-registry via https\.
-.
-.P
-See also the \fBca\fR config\.
-.
-.SS "tag"
-.
-.IP "\(bu" 4
-Default: latest
-.
-.IP "\(bu" 4
-Type: String
-.
-.IP "" 0
-.
-.P
-If you ask npm to install a package and don\'t tell it a specific version, then
-it will install the specified tag\.
-.
-.P
-Also the tag that is added to the package@version specified by the \fBnpm
-tag\fR command, if no explicit tag is given\.
-.
-.SS "tmp"
-.
-.IP "\(bu" 4
-Default: TMPDIR environment variable, or "/tmp"
-.
-.IP "\(bu" 4
-Type: path
-.
-.IP "" 0
-.
-.P
-Where to store temporary files and folders\. All temp files are deleted
-on success, but left behind on failure for forensic purposes\.
-.
-.SS "unicode"
-.
-.IP "\(bu" 4
-Default: true
-.
-.IP "\(bu" 4
-Type: Boolean
-.
-.IP "" 0
-.
-.P
-When set to true, npm uses unicode characters in the tree output\. When
-false, it uses ascii characters to draw trees\.
-.
-.SS "unsafe\-perm"
-.
-.IP "\(bu" 4
-Default: false if running as root, true otherwise
-.
-.IP "\(bu" 4
-Type: Boolean
-.
-.IP "" 0
-.
-.P
-Set to true to suppress the UID/GID switching when running package
-scripts\. If set explicitly to false, then installing as a non\-root user
-will fail\.
-.
-.SS "usage"
-.
-.IP "\(bu" 4
-Default: false
-.
-.IP "\(bu" 4
-Type: Boolean
-.
-.IP "" 0
-.
-.P
-Set to show short usage output (like the \-H output)
-instead of complete help when doing \fBnpm help help\fR\|\.
-.
-.SS "user"
-.
-.IP "\(bu" 4
-Default: "nobody"
-.
-.IP "\(bu" 4
-Type: String or Number
-.
-.IP "" 0
-.
-.P
-The UID to set to when running package scripts as root\.
-.
-.SS "username"
-.
-.IP "\(bu" 4
-Default: null
-.
-.IP "\(bu" 4
-Type: String
-.
-.IP "" 0
-.
-.P
-The username on the npm registry\. Set with \fBnpm adduser\fR
-.
-.SS "userconfig"
-.
-.IP "\(bu" 4
-Default: ~/\.npmrc
-.
-.IP "\(bu" 4
-Type: path
-.
-.IP "" 0
-.
-.P
-The location of user\-level configuration settings\.
-.
-.SS "userignorefile"
-.
-.IP "\(bu" 4
-Default: ~/\.npmignore
-.
-.IP "\(bu" 4
-Type: path
-.
-.IP "" 0
-.
-.P
-The location of a user\-level ignore file to apply to all packages\.
-.
-.P
-If not found, but there is a \.gitignore file in the same directory, then
-that will be used instead\.
-.
-.SS "umask"
-.
-.IP "\(bu" 4
-Default: 022
-.
-.IP "\(bu" 4
-Type: Octal numeric string
-.
-.IP "" 0
-.
-.P
-The "umask" value to use when setting the file creation mode on files
-and folders\.
-.
-.P
-Folders and executables are given a mode which is \fB0777\fR masked against
-this value\. Other files are given a mode which is \fB0666\fR masked against
-this value\. Thus, the defaults are \fB0755\fR and \fB0644\fR respectively\.
-.
-.SS "version"
-.
-.IP "\(bu" 4
-Default: false
-.
-.IP "\(bu" 4
-Type: boolean
-.
-.IP "" 0
-.
-.P
-If true, output the npm version and exit successfully\.
-.
-.P
-Only relevant when specified explicitly on the command line\.
-.
-.SS "viewer"
-.
-.IP "\(bu" 4
-Default: "man" on Posix, "browser" on Windows
-.
-.IP "\(bu" 4
-Type: path
-.
-.IP "" 0
-.
-.P
-The program to use to view help content\.
-.
-.P
-Set to \fB"browser"\fR to view html help content in the default web browser\.
-.
-.SS "yes"
-.
-.IP "\(bu" 4
-Default: null
-.
-.IP "\(bu" 4
-Type: Boolean or null
-.
-.IP "" 0
-.
-.P
-If set to \fBnull\fR, then prompt the user for responses in some
-circumstances\.
-.
-.P
-If set to \fBtrue\fR, then answer "yes" to any prompt\. If set to \fBfalse\fR
-then answer "no" to any prompt\.
-.
-.SH "SEE ALSO"
-.
-.IP "\(bu" 4
-npm help folders
-.
-.IP "\(bu" 4
-npm help npm
-.
-.IP "" 0
-
diff --git a/deps/npm/man/man1/shrinkwrap.1 b/deps/npm/man/man1/shrinkwrap.1
deleted file mode 100644
index 3b4b93db5..000000000
--- a/deps/npm/man/man1/shrinkwrap.1
+++ /dev/null
@@ -1,275 +0,0 @@
-.\" Generated with Ronnjs 0.3.8
-.\" http://github.com/kapouer/ronnjs/
-.
-.TH "NPM\-SHRINKWRAP" "1" "June 2013" "" ""
-.
-.SH "NAME"
-\fBnpm-shrinkwrap\fR \-\- Lock down dependency versions
-.
-.SH "SYNOPSIS"
-.
-.nf
-npm shrinkwrap
-.
-.fi
-.
-.SH "DESCRIPTION"
-This command locks down the versions of a package\'s dependencies so
-that you can control exactly which versions of each dependency will be
-used when your package is installed\. The "package\.json" file is still
-required if you want to use "npm install"\.
-.
-.P
-By default, "npm install" recursively installs the target\'s
-dependencies (as specified in package\.json), choosing the latest
-available version that satisfies the dependency\'s semver pattern\. In
-some situations, particularly when shipping software where each change
-is tightly managed, it\'s desirable to fully specify each version of
-each dependency recursively so that subsequent builds and deploys do
-not inadvertently pick up newer versions of a dependency that satisfy
-the semver pattern\. Specifying specific semver patterns in each
-dependency\'s package\.json would facilitate this, but that\'s not always
-possible or desirable, as when another author owns the npm package\.
-It\'s also possible to check dependencies directly into source control,
-but that may be undesirable for other reasons\.
-.
-.P
-As an example, consider package A:
-.
-.IP "" 4
-.
-.nf
-{
- "name": "A",
- "version": "0\.1\.0",
- "dependencies": {
- "B": "<0\.1\.0"
- }
-}
-.
-.fi
-.
-.IP "" 0
-.
-.P
-package B:
-.
-.IP "" 4
-.
-.nf
-{
- "name": "B",
- "version": "0\.0\.1",
- "dependencies": {
- "C": "<0\.1\.0"
- }
-}
-.
-.fi
-.
-.IP "" 0
-.
-.P
-and package C:
-.
-.IP "" 4
-.
-.nf
-{
- "name": "C,
- "version": "0\.0\.1"
-}
-.
-.fi
-.
-.IP "" 0
-.
-.P
-If these are the only versions of A, B, and C available in the
-registry, then a normal "npm install A" will install:
-.
-.IP "" 4
-.
-.nf
-A@0\.1\.0
-`\-\- B@0\.0\.1
- `\-\- C@0\.0\.1
-.
-.fi
-.
-.IP "" 0
-.
-.P
-However, if B@0\.0\.2 is published, then a fresh "npm install A" will
-install:
-.
-.IP "" 4
-.
-.nf
-A@0\.1\.0
-`\-\- B@0\.0\.2
- `\-\- C@0\.0\.1
-.
-.fi
-.
-.IP "" 0
-.
-.P
-assuming the new version did not modify B\'s dependencies\. Of course,
-the new version of B could include a new version of C and any number
-of new dependencies\. If such changes are undesirable, the author of A
-could specify a dependency on B@0\.0\.1\. However, if A\'s author and B\'s
-author are not the same person, there\'s no way for A\'s author to say
-that he or she does not want to pull in newly published versions of C
-when B hasn\'t changed at all\.
-.
-.P
-In this case, A\'s author can run
-.
-.IP "" 4
-.
-.nf
-npm shrinkwrap
-.
-.fi
-.
-.IP "" 0
-.
-.P
-This generates npm\-shrinkwrap\.json, which will look something like this:
-.
-.IP "" 4
-.
-.nf
-{
- "name": "A",
- "version": "0\.1\.0",
- "dependencies": {
- "B": {
- "version": "0\.0\.1",
- "dependencies": {
- "C": {
- "version": "0\.1\.0"
- }
- }
- }
- }
-}
-.
-.fi
-.
-.IP "" 0
-.
-.P
-The shrinkwrap command has locked down the dependencies based on
-what\'s currently installed in node_modules\. When "npm install"
-installs a package with a npm\-shrinkwrap\.json file in the package
-root, the shrinkwrap file (rather than package\.json files) completely
-drives the installation of that package and all of its dependencies
-(recursively)\. So now the author publishes A@0\.1\.0, and subsequent
-installs of this package will use B@0\.0\.1 and C@0\.1\.0, regardless the
-dependencies and versions listed in A\'s, B\'s, and C\'s package\.json
-files\.
-.
-.SS "Using shrinkwrapped packages"
-Using a shrinkwrapped package is no different than using any other
-package: you can "npm install" it by hand, or add a dependency to your
-package\.json file and "npm install" it\.
-.
-.SS "Building shrinkwrapped packages"
-To shrinkwrap an existing package:
-.
-.IP "1" 4
-Run "npm install" in the package root to install the current
-versions of all dependencies\.
-.
-.IP "2" 4
-Validate that the package works as expected with these versions\.
-.
-.IP "3" 4
-Run "npm shrinkwrap", add npm\-shrinkwrap\.json to git, and publish
-your package\.
-.
-.IP "" 0
-.
-.P
-To add or update a dependency in a shrinkwrapped package:
-.
-.IP "1" 4
-Run "npm install" in the package root to install the current
-versions of all dependencies\.
-.
-.IP "2" 4
-Add or update dependencies\. "npm install" each new or updated
-package individually and then update package\.json\. Note that they
-must be explicitly named in order to be installed: running \fBnpm
-install\fR with no arguments will merely reproduce the existing
-shrinkwrap\.
-.
-.IP "3" 4
-Validate that the package works as expected with the new
-dependencies\.
-.
-.IP "4" 4
-Run "npm shrinkwrap", commit the new npm\-shrinkwrap\.json, and
-publish your package\.
-.
-.IP "" 0
-.
-.P
-You can use npm help outdated to view dependencies with newer versions
-available\.
-.
-.SS "Other Notes"
-A shrinkwrap file must be consistent with the package\'s package\.json
-file\. "npm shrinkwrap" will fail if required dependencies are not
-already installed, since that would result in a shrinkwrap that
-wouldn\'t actually work\. Similarly, the command will fail if there are
-extraneous packages (not referenced by package\.json), since that would
-indicate that package\.json is not correct\.
-.
-.P
-Since "npm shrinkwrap" is intended to lock down your dependencies for
-production use, \fBdevDependencies\fR will not be included unless you
-explicitly set the \fB\-\-dev\fR flag when you run \fBnpm shrinkwrap\fR\|\. If
-installed \fBdevDependencies\fR are excluded, then npm will print a
-warning\. If you want them to be installed with your module by
-default, please consider adding them to \fBdependencies\fR instead\.
-.
-.P
-If shrinkwrapped package A depends on shrinkwrapped package B, B\'s
-shrinkwrap will not be used as part of the installation of A\. However,
-because A\'s shrinkwrap is constructed from a valid installation of B
-and recursively specifies all dependencies, the contents of B\'s
-shrinkwrap will implicitly be included in A\'s shrinkwrap\.
-.
-.SS "Caveats"
-Shrinkwrap files only lock down package versions, not actual package
-contents\. While discouraged, a package author can republish an
-existing version of a package, causing shrinkwrapped packages using
-that version to pick up different code than they were before\. If you
-want to avoid any risk that a byzantine author replaces a package
-you\'re using with code that breaks your application, you could modify
-the shrinkwrap file to use git URL references rather than version
-numbers so that npm always fetches all packages from git\.
-.
-.P
-If you wish to lock down the specific bytes included in a package, for
-example to have 100% confidence in being able to reproduce a
-deployment or build, then you ought to check your dependencies into
-source control, or pursue some other mechanism that can verify
-contents rather than versions\.
-.
-.SH "SEE ALSO"
-.
-.IP "\(bu" 4
-npm help install
-.
-.IP "\(bu" 4
-npm help json
-.
-.IP "\(bu" 4
-npm help list
-.
-.IP "" 0
-
diff --git a/deps/npm/man/man1/star.1 b/deps/npm/man/man1/star.1
deleted file mode 100644
index 975a349ef..000000000
--- a/deps/npm/man/man1/star.1
+++ /dev/null
@@ -1,39 +0,0 @@
-.\" Generated with Ronnjs 0.3.8
-.\" http://github.com/kapouer/ronnjs/
-.
-.TH "NPM\-STAR" "1" "June 2013" "" ""
-.
-.SH "NAME"
-\fBnpm-star\fR \-\- Mark your favorite packages
-.
-.SH "SYNOPSIS"
-.
-.nf
-npm star <pkgname> [<pkg>, \.\.\.]
-npm unstar <pkgname> [<pkg>, \.\.\.]
-.
-.fi
-.
-.SH "DESCRIPTION"
-"Starring" a package means that you have some interest in it\. It\'s
-a vaguely positive way to show that you care\.
-.
-.P
-"Unstarring" is the same thing, but in reverse\.
-.
-.P
-It\'s a boolean thing\. Starring repeatedly has no additional effect\.
-.
-.SH "SEE ALSO"
-.
-.IP "\(bu" 4
-npm help view
-.
-.IP "\(bu" 4
-npm help whoami
-.
-.IP "\(bu" 4
-npm help adduser
-.
-.IP "" 0
-
diff --git a/deps/npm/man/man1/stars.1 b/deps/npm/man/man1/stars.1
deleted file mode 100644
index ab36719e8..000000000
--- a/deps/npm/man/man1/stars.1
+++ /dev/null
@@ -1,40 +0,0 @@
-.\" Generated with Ronnjs 0.3.8
-.\" http://github.com/kapouer/ronnjs/
-.
-.TH "NPM\-STARS" "1" "June 2013" "" ""
-.
-.SH "NAME"
-\fBnpm-stars\fR \-\- View packages marked as favorites
-.
-.SH "SYNOPSIS"
-.
-.nf
-npm stars
-npm stars [username]
-.
-.fi
-.
-.SH "DESCRIPTION"
-If you have starred a lot of neat things and want to find them again
-quickly this command lets you do just that\.
-.
-.P
-You may also want to see your friend\'s favorite packages, in this case
-you will most certainly enjoy this command\.
-.
-.SH "SEE ALSO"
-.
-.IP "\(bu" 4
-npm help star
-.
-.IP "\(bu" 4
-npm help view
-.
-.IP "\(bu" 4
-npm help whoami
-.
-.IP "\(bu" 4
-npm help adduser
-.
-.IP "" 0
-
diff --git a/deps/npm/man/man1/start.1 b/deps/npm/man/man1/start.1
deleted file mode 100644
index 3af46688c..000000000
--- a/deps/npm/man/man1/start.1
+++ /dev/null
@@ -1,37 +0,0 @@
-.\" Generated with Ronnjs 0.3.8
-.\" http://github.com/kapouer/ronnjs/
-.
-.TH "NPM\-START" "1" "June 2013" "" ""
-.
-.SH "NAME"
-\fBnpm-start\fR \-\- Start a package
-.
-.SH "SYNOPSIS"
-.
-.nf
-npm start <name>
-.
-.fi
-.
-.SH "DESCRIPTION"
-This runs a package\'s "start" script, if one was provided\.
-.
-.SH "SEE ALSO"
-.
-.IP "\(bu" 4
-npm help run\-script
-.
-.IP "\(bu" 4
-npm help scripts
-.
-.IP "\(bu" 4
-npm help test
-.
-.IP "\(bu" 4
-npm help restart
-.
-.IP "\(bu" 4
-npm help stop
-.
-.IP "" 0
-
diff --git a/deps/npm/man/man1/stop.1 b/deps/npm/man/man1/stop.1
deleted file mode 100644
index 917965021..000000000
--- a/deps/npm/man/man1/stop.1
+++ /dev/null
@@ -1,37 +0,0 @@
-.\" Generated with Ronnjs 0.3.8
-.\" http://github.com/kapouer/ronnjs/
-.
-.TH "NPM\-STOP" "1" "June 2013" "" ""
-.
-.SH "NAME"
-\fBnpm-stop\fR \-\- Stop a package
-.
-.SH "SYNOPSIS"
-.
-.nf
-npm stop <name>
-.
-.fi
-.
-.SH "DESCRIPTION"
-This runs a package\'s "stop" script, if one was provided\.
-.
-.SH "SEE ALSO"
-.
-.IP "\(bu" 4
-npm help run\-script
-.
-.IP "\(bu" 4
-npm help scripts
-.
-.IP "\(bu" 4
-npm help test
-.
-.IP "\(bu" 4
-npm help start
-.
-.IP "\(bu" 4
-npm help restart
-.
-.IP "" 0
-
diff --git a/deps/npm/man/man1/submodule.1 b/deps/npm/man/man1/submodule.1
deleted file mode 100644
index 552acc3db..000000000
--- a/deps/npm/man/man1/submodule.1
+++ /dev/null
@@ -1,42 +0,0 @@
-.\" Generated with Ronnjs 0.3.8
-.\" http://github.com/kapouer/ronnjs/
-.
-.TH "NPM\-SUBMODULE" "1" "June 2013" "" ""
-.
-.SH "NAME"
-\fBnpm-submodule\fR \-\- Add a package as a git submodule
-.
-.SH "SYNOPSIS"
-.
-.nf
-npm submodule <pkg>
-.
-.fi
-.
-.SH "DESCRIPTION"
-If the specified package has a git repository url in its package\.json
-description, then this command will add it as a git submodule at \fBnode_modules/<pkg name>\fR\|\.
-.
-.P
-This is a convenience only\. From then on, it\'s up to you to manage
-updates by using the appropriate git commands\. npm will stubbornly
-refuse to update, modify, or remove anything with a \fB\|\.git\fR subfolder
-in it\.
-.
-.P
-This command also does not install missing dependencies, if the package
-does not include them in its git repository\. If \fBnpm ls\fR reports that
-things are missing, you can either install, link, or submodule them yourself,
-or you can do \fBnpm explore <pkgname> \-\- npm install\fR to install the
-dependencies into the submodule folder\.
-.
-.SH "SEE ALSO"
-.
-.IP "\(bu" 4
-npm help json
-.
-.IP "\(bu" 4
-git help submodule
-.
-.IP "" 0
-
diff --git a/deps/npm/man/man1/tag.1 b/deps/npm/man/man1/tag.1
deleted file mode 100644
index e359f4450..000000000
--- a/deps/npm/man/man1/tag.1
+++ /dev/null
@@ -1,31 +0,0 @@
-.\" Generated with Ronnjs 0.3.8
-.\" http://github.com/kapouer/ronnjs/
-.
-.TH "NPM\-TAG" "1" "June 2013" "" ""
-.
-.SH "NAME"
-\fBnpm-tag\fR \-\- Tag a published version
-.
-.SH "SYNOPSIS"
-.
-.nf
-npm tag <name>@<version> [<tag>]
-.
-.fi
-.
-.SH "DESCRIPTION"
-Tags the specified version of the package with the specified tag, or the \fB\-\-tag\fR config if not specified\.
-.
-.SH "SEE ALSO"
-.
-.IP "\(bu" 4
-npm help publish
-.
-.IP "\(bu" 4
-npm help registry
-.
-.IP "\(bu" 4
-npm help config
-.
-.IP "" 0
-
diff --git a/deps/npm/man/man1/test.1 b/deps/npm/man/man1/test.1
deleted file mode 100644
index 3b396b473..000000000
--- a/deps/npm/man/man1/test.1
+++ /dev/null
@@ -1,41 +0,0 @@
-.\" Generated with Ronnjs 0.3.8
-.\" http://github.com/kapouer/ronnjs/
-.
-.TH "NPM\-TEST" "1" "June 2013" "" ""
-.
-.SH "NAME"
-\fBnpm-test\fR \-\- Test a package
-.
-.SH "SYNOPSIS"
-.
-.nf
- npm test <name>
-.
-.fi
-.
-.SH "DESCRIPTION"
-This runs a package\'s "test" script, if one was provided\.
-.
-.P
-To run tests as a condition of installation, set the \fBnpat\fR config to
-true\.
-.
-.SH "SEE ALSO"
-.
-.IP "\(bu" 4
-npm help run\-script
-.
-.IP "\(bu" 4
-npm help scripts
-.
-.IP "\(bu" 4
-npm help start
-.
-.IP "\(bu" 4
-npm help restart
-.
-.IP "\(bu" 4
-npm help stop
-.
-.IP "" 0
-
diff --git a/deps/npm/man/man1/uninstall.1 b/deps/npm/man/man1/uninstall.1
deleted file mode 100644
index b32e0aeec..000000000
--- a/deps/npm/man/man1/uninstall.1
+++ /dev/null
@@ -1,36 +0,0 @@
-.\" Generated with Ronnjs 0.3.8
-.\" http://github.com/kapouer/ronnjs/
-.
-.TH "NPM\-RM" "1" "June 2013" "" ""
-.
-.SH "NAME"
-\fBnpm-rm\fR \-\- Remove a package
-.
-.SH "SYNOPSIS"
-.
-.nf
-npm rm <name>
-npm uninstall <name>
-.
-.fi
-.
-.SH "DESCRIPTION"
-This uninstalls a package, completely removing everything npm installed
-on its behalf\.
-.
-.SH "SEE ALSO"
-.
-.IP "\(bu" 4
-npm help prune
-.
-.IP "\(bu" 4
-npm help install
-.
-.IP "\(bu" 4
-npm help folders
-.
-.IP "\(bu" 4
-npm help config
-.
-.IP "" 0
-
diff --git a/deps/npm/man/man1/unpublish.1 b/deps/npm/man/man1/unpublish.1
deleted file mode 100644
index 399ed525b..000000000
--- a/deps/npm/man/man1/unpublish.1
+++ /dev/null
@@ -1,53 +0,0 @@
-.\" Generated with Ronnjs 0.3.8
-.\" http://github.com/kapouer/ronnjs/
-.
-.TH "NPM\-UNPUBLISH" "1" "June 2013" "" ""
-.
-.SH "NAME"
-\fBnpm-unpublish\fR \-\- Remove a package from the registry
-.
-.SH "SYNOPSIS"
-.
-.nf
-npm unpublish <name>[@<version>]
-.
-.fi
-.
-.SH "WARNING"
-\fBIt is generally considered bad behavior to remove versions of a library
-that others are depending on!\fR
-.
-.P
-Consider using the \fBdeprecate\fR command
-instead, if your intent is to encourage users to upgrade\.
-.
-.P
-There is plenty of room on the registry\.
-.
-.SH "DESCRIPTION"
-This removes a package version from the registry, deleting its
-entry and removing the tarball\.
-.
-.P
-If no version is specified, or if all versions are removed then
-the root package entry is removed from the registry entirely\.
-.
-.SH "SEE ALSO"
-.
-.IP "\(bu" 4
-npm help deprecate
-.
-.IP "\(bu" 4
-npm help publish
-.
-.IP "\(bu" 4
-npm help registry
-.
-.IP "\(bu" 4
-npm help adduser
-.
-.IP "\(bu" 4
-npm help owner
-.
-.IP "" 0
-
diff --git a/deps/npm/man/man1/update.1 b/deps/npm/man/man1/update.1
deleted file mode 100644
index b19c2fd22..000000000
--- a/deps/npm/man/man1/update.1
+++ /dev/null
@@ -1,45 +0,0 @@
-.\" Generated with Ronnjs 0.3.8
-.\" http://github.com/kapouer/ronnjs/
-.
-.TH "NPM\-UPDATE" "1" "June 2013" "" ""
-.
-.SH "NAME"
-\fBnpm-update\fR \-\- Update a package
-.
-.SH "SYNOPSIS"
-.
-.nf
-npm update [\-g] [<name> [<name> \.\.\.]]
-.
-.fi
-.
-.SH "DESCRIPTION"
-This command will update all the packages listed to the latest version
-(specified by the \fBtag\fR config)\.
-.
-.P
-It will also install missing packages\.
-.
-.P
-If the \fB\-g\fR flag is specified, this command will update globally installed packages\.
-If no package name is specified, all packages in the specified location (global or local) will be updated\.
-.
-.SH "SEE ALSO"
-.
-.IP "\(bu" 4
-npm help install
-.
-.IP "\(bu" 4
-npm help outdated
-.
-.IP "\(bu" 4
-npm help registry
-.
-.IP "\(bu" 4
-npm help folders
-.
-.IP "\(bu" 4
-npm help list
-.
-.IP "" 0
-
diff --git a/deps/npm/man/man1/version.1 b/deps/npm/man/man1/version.1
deleted file mode 100644
index 20d90316d..000000000
--- a/deps/npm/man/man1/version.1
+++ /dev/null
@@ -1,75 +0,0 @@
-.\" Generated with Ronnjs 0.3.8
-.\" http://github.com/kapouer/ronnjs/
-.
-.TH "NPM\-VERSION" "1" "June 2013" "" ""
-.
-.SH "NAME"
-\fBnpm-version\fR \-\- Bump a package version
-.
-.SH "SYNOPSIS"
-.
-.nf
-npm version [<newversion> | major | minor | patch | build]
-.
-.fi
-.
-.SH "DESCRIPTION"
-Run this in a package directory to bump the version and write the new
-data back to the package\.json file\.
-.
-.P
-The \fBnewversion\fR argument should be a valid semver string, \fIor\fR a valid
-second argument to semver\.inc (one of "build", "patch", "minor", or
-"major")\. In the second case, the existing version will be incremented
-by 1 in the specified field\.
-.
-.P
-If run in a git repo, it will also create a version commit and tag, and
-fail if the repo is not clean\.
-.
-.P
-If supplied with \fB\-\-message\fR (shorthand: \fB\-m\fR) config option, npm will
-use it as a commit message when creating a version commit\. If the \fBmessage\fR config contains \fB%s\fR then that will be replaced with the
-resulting version number\. For example:
-.
-.IP "" 4
-.
-.nf
-npm version patch \-m "Upgrade to %s for reasons"
-.
-.fi
-.
-.IP "" 0
-.
-.P
-If the \fBsign\-git\-tag\fR config is set, then the tag will be signed using
-the \fB\-s\fR flag to git\. Note that you must have a default GPG key set up
-in your git config for this to work properly\. For example:
-.
-.IP "" 4
-.
-.nf
-$ npm config set sign\-git\-tag true
-$ npm version patch
-You need a passphrase to unlock the secret key for
-user: "isaacs (http://blog\.izs\.me/) <i@izs\.me>"
-2048\-bit RSA key, ID 6C481CF6, created 2010\-08\-31
-Enter passphrase:
-.
-.fi
-.
-.IP "" 0
-.
-.SH "SEE ALSO"
-.
-.IP "\(bu" 4
-npm help init
-.
-.IP "\(bu" 4
-npm help json
-.
-.IP "\(bu" 4
-npm help semver
-.
-.IP "" 0
-
diff --git a/deps/npm/man/man1/view.1 b/deps/npm/man/man1/view.1
deleted file mode 100644
index d443f9240..000000000
--- a/deps/npm/man/man1/view.1
+++ /dev/null
@@ -1,179 +0,0 @@
-.\" Generated with Ronnjs 0.3.8
-.\" http://github.com/kapouer/ronnjs/
-.
-.TH "NPM\-VIEW" "1" "June 2013" "" ""
-.
-.SH "NAME"
-\fBnpm-view\fR \-\- View registry info
-.
-.SH "SYNOPSIS"
-.
-.nf
-npm view <name>[@<version>] [<field>[\.<subfield>]\.\.\.]
-.
-.fi
-.
-.SH "DESCRIPTION"
-This command shows data about a package and prints it to the stream
-referenced by the \fBoutfd\fR config, which defaults to stdout\.
-.
-.P
-To show the package registry entry for the \fBconnect\fR package, you can do
-this:
-.
-.IP "" 4
-.
-.nf
-npm view connect
-.
-.fi
-.
-.IP "" 0
-.
-.P
-The default version is "latest" if unspecified\.
-.
-.P
-Field names can be specified after the package descriptor\.
-For example, to show the dependencies of the \fBronn\fR package at version
-0\.3\.5, you could do the following:
-.
-.IP "" 4
-.
-.nf
-npm view ronn@0\.3\.5 dependencies
-.
-.fi
-.
-.IP "" 0
-.
-.P
-You can view child field by separating them with a period\.
-To view the git repository URL for the latest version of npm, you could
-do this:
-.
-.IP "" 4
-.
-.nf
-npm view npm repository\.url
-.
-.fi
-.
-.IP "" 0
-.
-.P
-This makes it easy to view information about a dependency with a bit of
-shell scripting\. For example, to view all the data about the version of
-opts that ronn depends on, you can do this:
-.
-.IP "" 4
-.
-.nf
-npm view opts@$(npm view ronn dependencies\.opts)
-.
-.fi
-.
-.IP "" 0
-.
-.P
-For fields that are arrays, requesting a non\-numeric field will return
-all of the values from the objects in the list\. For example, to get all
-the contributor names for the "express" project, you can do this:
-.
-.IP "" 4
-.
-.nf
-npm view express contributors\.email
-.
-.fi
-.
-.IP "" 0
-.
-.P
-You may also use numeric indices in square braces to specifically select
-an item in an array field\. To just get the email address of the first
-contributor in the list, you can do this:
-.
-.IP "" 4
-.
-.nf
-npm view express contributors[0]\.email
-.
-.fi
-.
-.IP "" 0
-.
-.P
-Multiple fields may be specified, and will be printed one after another\.
-For exampls, to get all the contributor names and email addresses, you
-can do this:
-.
-.IP "" 4
-.
-.nf
-npm view express contributors\.name contributors\.email
-.
-.fi
-.
-.IP "" 0
-.
-.P
-"Person" fields are shown as a string if they would be shown as an
-object\. So, for example, this will show the list of npm contributors in
-the shortened string format\. (See \fBnpm help json\fR for more on this\.)
-.
-.IP "" 4
-.
-.nf
-npm view npm contributors
-.
-.fi
-.
-.IP "" 0
-.
-.P
-If a version range is provided, then data will be printed for every
-matching version of the package\. This will show which version of jsdom
-was required by each matching version of yui3:
-.
-.IP "" 4
-.
-.nf
-npm view yui3@\'>0\.5\.4\' dependencies\.jsdom
-.
-.fi
-.
-.IP "" 0
-.
-.SH "OUTPUT"
-If only a single string field for a single version is output, then it
-will not be colorized or quoted, so as to enable piping the output to
-another command\. If the field is an object, it will be output as a JavaScript object literal\.
-.
-.P
-If the \-\-json flag is given, the outputted fields will be JSON\.
-.
-.P
-If the version range matches multiple versions, than each printed value
-will be prefixed with the version it applies to\.
-.
-.P
-If multiple fields are requested, than each of them are prefixed with
-the field name\.
-.
-.SH "SEE ALSO"
-.
-.IP "\(bu" 4
-npm help search
-.
-.IP "\(bu" 4
-npm help registry
-.
-.IP "\(bu" 4
-npm help config
-.
-.IP "\(bu" 4
-npm help docs
-.
-.IP "" 0
-
diff --git a/deps/npm/man/man1/whoami.1 b/deps/npm/man/man1/whoami.1
deleted file mode 100644
index 1bcbb8a7f..000000000
--- a/deps/npm/man/man1/whoami.1
+++ /dev/null
@@ -1,28 +0,0 @@
-.\" Generated with Ronnjs 0.3.8
-.\" http://github.com/kapouer/ronnjs/
-.
-.TH "NPM\-WHOAMI" "1" "June 2013" "" ""
-.
-.SH "NAME"
-\fBnpm-whoami\fR \-\- Display npm username
-.
-.SH "SYNOPSIS"
-.
-.nf
-npm whoami
-.
-.fi
-.
-.SH "DESCRIPTION"
-Print the \fBusername\fR config to standard output\.
-.
-.SH "SEE ALSO"
-.
-.IP "\(bu" 4
-npm help config
-.
-.IP "\(bu" 4
-npm help adduser
-.
-.IP "" 0
-
diff --git a/deps/npm/man/man3/author.3 b/deps/npm/man/man3/author.3
deleted file mode 100644
index 0f5d2c8c2..000000000
--- a/deps/npm/man/man3/author.3
+++ /dev/null
@@ -1,52 +0,0 @@
-.\" Generated with Ronnjs/v0.1
-.\" http://github.com/kapouer/ronnjs/
-.
-.TH "NPM\-OWNER" "3" "November 2011" "" ""
-.
-.SH "NAME"
-\fBnpm-owner\fR \-\- Manage package owners
-.
-.SH "SYNOPSIS"
-.
-.nf
-npm\.commands\.owner(args, callback)
-.
-.fi
-.
-.SH "DESCRIPTION"
-The first element of the \'args\' parameter defines what to do, and the subsequent
-elements depend on the action\. Possible values for the action are (order of
-parameters are given in parenthesis):
-.
-.IP "\(bu" 4
-ls (package):
-List all the users who have access to modify a package and push new versions\.
-Handy when you need to know who to bug for help\.
-.
-.IP "\(bu" 4
-add (user, package):
-Add a new user as a maintainer of a package\. This user is enabled to modify
-metadata, publish new versions, and add other owners\.
-.
-.IP "\(bu" 4
-rm (user, package):
-Remove a user from the package owner list\. This immediately revokes their
-privileges\.
-.
-.IP "" 0
-.
-.P
-Note that there is only one level of access\. Either you can modify a package,
-or you can\'t\. Future versions may contain more fine\-grained access levels, but
-that is not implemented at this time\.
-.
-.SH "SEE ALSO"
-.
-.IP "\(bu" 4
-npm apihelp publish
-.
-.IP "\(bu" 4
-npm help registry
-.
-.IP "" 0
-
diff --git a/deps/npm/man/man3/bin.3 b/deps/npm/man/man3/bin.3
deleted file mode 100644
index 2537e87f0..000000000
--- a/deps/npm/man/man3/bin.3
+++ /dev/null
@@ -1,21 +0,0 @@
-.\" Generated with Ronnjs 0.3.8
-.\" http://github.com/kapouer/ronnjs/
-.
-.TH "NPM\-BIN" "3" "June 2013" "" ""
-.
-.SH "NAME"
-\fBnpm-bin\fR \-\- Display npm bin folder
-.
-.SH "SYNOPSIS"
-.
-.nf
-npm\.commands\.bin(args, cb)
-.
-.fi
-.
-.SH "DESCRIPTION"
-Print the folder where npm will install executables\.
-.
-.P
-This function should not be used programmatically\. Instead, just refer
-to the \fBnpm\.bin\fR member\.
diff --git a/deps/npm/man/man3/bugs.3 b/deps/npm/man/man3/bugs.3
deleted file mode 100644
index de76f2d40..000000000
--- a/deps/npm/man/man3/bugs.3
+++ /dev/null
@@ -1,28 +0,0 @@
-.\" Generated with Ronnjs 0.3.8
-.\" http://github.com/kapouer/ronnjs/
-.
-.TH "NPM\-BUGS" "3" "June 2013" "" ""
-.
-.SH "NAME"
-\fBnpm-bugs\fR \-\- Bugs for a package in a web browser maybe
-.
-.SH "SYNOPSIS"
-.
-.nf
-npm\.commands\.bugs(package, callback)
-.
-.fi
-.
-.SH "DESCRIPTION"
-This command tries to guess at the likely location of a package\'s
-bug tracker URL, and then tries to open it using the \fB\-\-browser\fR
-config param\.
-.
-.P
-Like other commands, the first parameter is an array\. This command only
-uses the first element, which is expected to be a package name with an
-optional version number\.
-.
-.P
-This command will launch a browser, so this command may not be the most
-friendly for programmatic use\.
diff --git a/deps/npm/man/man3/commands.3 b/deps/npm/man/man3/commands.3
deleted file mode 100644
index 31c3d0141..000000000
--- a/deps/npm/man/man3/commands.3
+++ /dev/null
@@ -1,35 +0,0 @@
-.\" Generated with Ronnjs 0.3.8
-.\" http://github.com/kapouer/ronnjs/
-.
-.TH "NPM\-COMMANDS" "3" "June 2013" "" ""
-.
-.SH "NAME"
-\fBnpm-commands\fR \-\- npm commands
-.
-.SH "SYNOPSIS"
-.
-.nf
-npm\.commands[<command>](args, callback)
-.
-.fi
-.
-.SH "DESCRIPTION"
-npm comes with a full set of commands, and each of the commands takes a
-similar set of arguments\.
-.
-.P
-In general, all commands on the command object take an \fBarray\fR of positional
-argument \fBstrings\fR\|\. The last argument to any function is a callback\. Some
-commands are special and take other optional arguments\.
-.
-.P
-All commands have their own man page\. See \fBman npm\-<command>\fR for command\-line
-usage, or \fBman 3 npm\-<command>\fR for programmatic usage\.
-.
-.SH "SEE ALSO"
-.
-.IP "\(bu" 4
-npm help index
-.
-.IP "" 0
-
diff --git a/deps/npm/man/man3/config.3 b/deps/npm/man/man3/config.3
deleted file mode 100644
index 5a9726cec..000000000
--- a/deps/npm/man/man3/config.3
+++ /dev/null
@@ -1,69 +0,0 @@
-.\" Generated with Ronnjs 0.3.8
-.\" http://github.com/kapouer/ronnjs/
-.
-.TH "NPM\-CONFIG" "3" "June 2013" "" ""
-.
-.SH "NAME"
-\fBnpm-config\fR \-\- Manage the npm configuration files
-.
-.SH "SYNOPSIS"
-.
-.nf
-npm\.commands\.config(args, callback)
-var val = npm\.config\.get(key)
-npm\.config\.set(key, val)
-.
-.fi
-.
-.SH "DESCRIPTION"
-This function acts much the same way as the command\-line version\. The first
-element in the array tells config what to do\. Possible values are:
-.
-.IP "\(bu" 4
-\fBset\fR
-.
-.IP
-Sets a config parameter\. The second element in \fBargs\fR is interpreted as the
-key, and the third element is interpreted as the value\.
-.
-.IP "\(bu" 4
-\fBget\fR
-.
-.IP
-Gets the value of a config parameter\. The second element in \fBargs\fR is the
-key to get the value of\.
-.
-.IP "\(bu" 4
-\fBdelete\fR (\fBrm\fR or \fBdel\fR)
-.
-.IP
-Deletes a parameter from the config\. The second element in \fBargs\fR is the
-key to delete\.
-.
-.IP "\(bu" 4
-\fBlist\fR (\fBls\fR)
-.
-.IP
-Show all configs that aren\'t secret\. No parameters necessary\.
-.
-.IP "\(bu" 4
-\fBedit\fR:
-.
-.IP
-Opens the config file in the default editor\. This command isn\'t very useful
-programmatically, but it is made available\.
-.
-.IP "" 0
-.
-.P
-To programmatically access npm configuration settings, or set them for
-the duration of a program, use the \fBnpm\.config\.set\fR and \fBnpm\.config\.get\fR
-functions instead\.
-.
-.SH "SEE ALSO"
-.
-.IP "\(bu" 4
-npm apihelp npm
-.
-.IP "" 0
-
diff --git a/deps/npm/man/man3/deprecate.3 b/deps/npm/man/man3/deprecate.3
deleted file mode 100644
index a9cf8660f..000000000
--- a/deps/npm/man/man3/deprecate.3
+++ /dev/null
@@ -1,57 +0,0 @@
-.\" Generated with Ronnjs 0.3.8
-.\" http://github.com/kapouer/ronnjs/
-.
-.TH "NPM\-DEPRECATE" "3" "June 2013" "" ""
-.
-.SH "NAME"
-\fBnpm-deprecate\fR \-\- Deprecate a version of a package
-.
-.SH "SYNOPSIS"
-.
-.nf
-npm\.commands\.deprecate(args, callback)
-.
-.fi
-.
-.SH "DESCRIPTION"
-This command will update the npm registry entry for a package, providing
-a deprecation warning to all who attempt to install it\.
-.
-.P
-The \'args\' parameter must have exactly two elements:
-.
-.IP "\(bu" 4
-\fBpackage[@version]\fR
-.
-.IP
-The \fBversion\fR portion is optional, and may be either a range, or a
-specific version, or a tag\.
-.
-.IP "\(bu" 4
-\fBmessage\fR
-.
-.IP
-The warning message that will be printed whenever a user attempts to
-install the package\.
-.
-.IP "" 0
-.
-.P
-Note that you must be the package owner to deprecate something\. See the \fBowner\fR and \fBadduser\fR help topics\.
-.
-.P
-To un\-deprecate a package, specify an empty string (\fB""\fR) for the \fBmessage\fR argument\.
-.
-.SH "SEE ALSO"
-.
-.IP "\(bu" 4
-npm apihelp publish
-.
-.IP "\(bu" 4
-npm apihelp unpublish
-.
-.IP "\(bu" 4
-npm help registry
-.
-.IP "" 0
-
diff --git a/deps/npm/man/man3/docs.3 b/deps/npm/man/man3/docs.3
deleted file mode 100644
index 04973307c..000000000
--- a/deps/npm/man/man3/docs.3
+++ /dev/null
@@ -1,28 +0,0 @@
-.\" Generated with Ronnjs 0.3.8
-.\" http://github.com/kapouer/ronnjs/
-.
-.TH "NPM\-DOCS" "3" "June 2013" "" ""
-.
-.SH "NAME"
-\fBnpm-docs\fR \-\- Docs for a package in a web browser maybe
-.
-.SH "SYNOPSIS"
-.
-.nf
-npm\.commands\.docs(package, callback)
-.
-.fi
-.
-.SH "DESCRIPTION"
-This command tries to guess at the likely location of a package\'s
-documentation URL, and then tries to open it using the \fB\-\-browser\fR
-config param\.
-.
-.P
-Like other commands, the first parameter is an array\. This command only
-uses the first element, which is expected to be a package name with an
-optional version number\.
-.
-.P
-This command will launch a browser, so this command may not be the most
-friendly for programmatic use\.
diff --git a/deps/npm/man/man3/edit.3 b/deps/npm/man/man3/edit.3
deleted file mode 100644
index 3212032a8..000000000
--- a/deps/npm/man/man3/edit.3
+++ /dev/null
@@ -1,35 +0,0 @@
-.\" Generated with Ronnjs 0.3.8
-.\" http://github.com/kapouer/ronnjs/
-.
-.TH "NPM\-EDIT" "3" "June 2013" "" ""
-.
-.SH "NAME"
-\fBnpm-edit\fR \-\- Edit an installed package
-.
-.SH "SYNOPSIS"
-.
-.nf
-npm\.commands\.edit(package, callback)
-.
-.fi
-.
-.SH "DESCRIPTION"
-Opens the package folder in the default editor (or whatever you\'ve
-configured as the npm \fBeditor\fR config \-\- see \fBnpm help config\fR\|\.)
-.
-.P
-After it has been edited, the package is rebuilt so as to pick up any
-changes in compiled packages\.
-.
-.P
-For instance, you can do \fBnpm install connect\fR to install connect
-into your package, and then \fBnpm\.commands\.edit(["connect"], callback)\fR
-to make a few changes to your locally installed copy\.
-.
-.P
-The first parameter is a string array with a single element, the package
-to open\. The package can optionally have a version number attached\.
-.
-.P
-Since this command opens an editor in a new process, be careful about where
-and how this is used\.
diff --git a/deps/npm/man/man3/explore.3 b/deps/npm/man/man3/explore.3
deleted file mode 100644
index 82a85bd3f..000000000
--- a/deps/npm/man/man3/explore.3
+++ /dev/null
@@ -1,28 +0,0 @@
-.\" Generated with Ronnjs 0.3.8
-.\" http://github.com/kapouer/ronnjs/
-.
-.TH "NPM\-EXPLORE" "3" "June 2013" "" ""
-.
-.SH "NAME"
-\fBnpm-explore\fR \-\- Browse an installed package
-.
-.SH "SYNOPSIS"
-.
-.nf
-npm\.commands\.explore(args, callback)
-.
-.fi
-.
-.SH "DESCRIPTION"
-Spawn a subshell in the directory of the installed package specified\.
-.
-.P
-If a command is specified, then it is run in the subshell, which then
-immediately terminates\.
-.
-.P
-Note that the package is \fInot\fR automatically rebuilt afterwards, so be
-sure to use \fBnpm rebuild <pkg>\fR if you make any changes\.
-.
-.P
-The first element in the \'args\' parameter must be a package name\. After that is the optional command, which can be any number of strings\. All of the strings will be combined into one, space\-delimited command\.
diff --git a/deps/npm/man/man3/find.3 b/deps/npm/man/man3/find.3
deleted file mode 100644
index 3c733c9de..000000000
--- a/deps/npm/man/man3/find.3
+++ /dev/null
@@ -1,79 +0,0 @@
-.\" Generated with Ronnjs/v0.1
-.\" http://github.com/kapouer/ronnjs/
-.
-.TH "NPM\-LS" "3" "November 2011" "" ""
-.
-.SH "NAME"
-\fBnpm-ls\fR \-\- List installed packages
-.
-.SH "SYNOPSIS"
-.
-.nf
-npm\.commands\.ls(args, [silent,] callback)
-.
-.fi
-.
-.SH "DESCRIPTION"
-This command will print to stdout all the versions of packages that are
-installed, as well as their dependencies, in a tree\-structure\. It will also
-return that data using the callback\.
-.
-.P
-This command does not take any arguments, but args must be defined\.
-Beyond that, if any arguments are passed in, npm will politely warn that it
-does not take positional arguments, though you may set config flags
-like with any other command, such as \fBglobal\fR to list global packages\.
-.
-.P
-It will print out extraneous, missing, and invalid packages\.
-.
-.P
-If the silent parameter is set to true, nothing will be output to the screen,
-but the data will still be returned\.
-.
-.SH "CONFIGURATION"
-.
-.SS "long"
-.
-.IP "\(bu" 4
-Default: false
-.
-.IP "\(bu" 4
-Type: Boolean
-.
-.IP "" 0
-.
-.P
-Show extended information\.
-.
-.SS "parseable"
-.
-.IP "\(bu" 4
-Default: false
-.
-.IP "\(bu" 4
-Type: Boolean
-.
-.IP "" 0
-.
-.P
-Show parseable output instead of tree view\.
-.
-.SS "global"
-.
-.IP "\(bu" 4
-Default: false
-.
-.IP "\(bu" 4
-Type: Boolean
-.
-.IP "" 0
-.
-.P
-List packages in the global install prefix instead of in the current
-project\.
-.
-.P
-Note, if parseable is set or long isn\'t set, then duplicates will be trimmed\.
-This means that if a submodule a same dependency as a parent module, then the
-dependency will only be output once\.
diff --git a/deps/npm/man/man3/get.3 b/deps/npm/man/man3/get.3
deleted file mode 100644
index 548f4bb9c..000000000
--- a/deps/npm/man/man3/get.3
+++ /dev/null
@@ -1,69 +0,0 @@
-.\" Generated with Ronnjs/v0.1
-.\" http://github.com/kapouer/ronnjs/
-.
-.TH "NPM\-CONFIG" "3" "November 2011" "" ""
-.
-.SH "NAME"
-\fBnpm-config\fR \-\- Manage the npm configuration files
-.
-.SH "SYNOPSIS"
-.
-.nf
-npm\.commands\.config(args, callback)
-var val = npm\.config\.get(key)
-npm\.config\.set(key, val)
-.
-.fi
-.
-.SH "DESCRIPTION"
-This function acts much the same way as the command\-line version\. The first
-element in the array tells config what to do\. Possible values are:
-.
-.IP "\(bu" 4
-\fBset\fR
-.
-.IP
-Sets a config parameter\. The second element in \fBargs\fR is interpreted as the
-key, and the third element is interpreted as the value\.
-.
-.IP "\(bu" 4
-\fBget\fR
-.
-.IP
-Gets the value of a config parameter\. The second element in \fBargs\fR is the
-key to get the value of\.
-.
-.IP "\(bu" 4
-\fBdelete\fR (\fBrm\fR or \fBdel\fR)
-.
-.IP
-Deletes a parameter from the config\. The second element in \fBargs\fR is the
-key to delete\.
-.
-.IP "\(bu" 4
-\fBlist\fR (\fBls\fR)
-.
-.IP
-Show all configs that aren\'t secret\. No parameters necessary\.
-.
-.IP "\(bu" 4
-\fBedit\fR:
-.
-.IP
-Opens the config file in the default editor\. This command isn\'t very useful
-programmatically, but it is made available\.
-.
-.IP "" 0
-.
-.P
-To programmatically access npm configuration settings, or set them for
-the duration of a program, use the \fBnpm\.config\.set\fR and \fBnpm\.config\.get\fR
-functions instead\.
-.
-.SH "SEE ALSO"
-.
-.IP "\(bu" 4
-npm apihelp npm
-.
-.IP "" 0
-
diff --git a/deps/npm/man/man3/help-search.3 b/deps/npm/man/man3/help-search.3
deleted file mode 100644
index 48e60a625..000000000
--- a/deps/npm/man/man3/help-search.3
+++ /dev/null
@@ -1,51 +0,0 @@
-.\" Generated with Ronnjs 0.3.8
-.\" http://github.com/kapouer/ronnjs/
-.
-.TH "NPM\-HELP\-SEARCH" "3" "June 2013" "" ""
-.
-.SH "NAME"
-\fBnpm-help-search\fR \-\- Search the help pages
-.
-.SH "SYNOPSIS"
-.
-.nf
-npm\.commands\.helpSearch(args, [silent,] callback)
-.
-.fi
-.
-.SH "DESCRIPTION"
-This command is rarely useful, but it exists in the rare case that it is\.
-.
-.P
-This command takes an array of search terms and returns the help pages that
-match in order of best match\.
-.
-.P
-If there is only one match, then npm displays that help section\. If there
-are multiple results, the results are printed to the screen formatted and the
-array of results is returned\. Each result is an object with these properties:
-.
-.IP "\(bu" 4
-hits:
-A map of args to number of hits on that arg\. For example, {"npm": 3}
-.
-.IP "\(bu" 4
-found:
-Total number of unique args that matched\.
-.
-.IP "\(bu" 4
-totalHits:
-Total number of hits\.
-.
-.IP "\(bu" 4
-lines:
-An array of all matching lines (and some adjacent lines)\.
-.
-.IP "\(bu" 4
-file:
-Name of the file that matched
-.
-.IP "" 0
-.
-.P
-The silent parameter is not neccessary not used, but it may in the future\.
diff --git a/deps/npm/man/man3/home.3 b/deps/npm/man/man3/home.3
deleted file mode 100644
index 3db059e0f..000000000
--- a/deps/npm/man/man3/home.3
+++ /dev/null
@@ -1,28 +0,0 @@
-.\" Generated with Ronnjs/v0.1
-.\" http://github.com/kapouer/ronnjs/
-.
-.TH "NPM\-DOCS" "3" "November 2011" "" ""
-.
-.SH "NAME"
-\fBnpm-docs\fR \-\- Docs for a package in a web browser maybe
-.
-.SH "SYNOPSIS"
-.
-.nf
-npm\.commands\.docs(package, callback)
-.
-.fi
-.
-.SH "DESCRIPTION"
-This command tries to guess at the likely location of a package\'s
-documentation URL, and then tries to open it using the \fB\-\-browser\fR
-config param\.
-.
-.P
-Like other commands, the first parameter is an array\. This command only
-uses the first element, which is expected to be a package name with an
-optional version number\.
-.
-.P
-This command will launch a browser, so this command may not be the most
-friendly for programmatic use\.
diff --git a/deps/npm/man/man3/init.3 b/deps/npm/man/man3/init.3
deleted file mode 100644
index 142f7e920..000000000
--- a/deps/npm/man/man3/init.3
+++ /dev/null
@@ -1,39 +0,0 @@
-.\" Generated with Ronnjs 0.3.8
-.\" http://github.com/kapouer/ronnjs/
-.
-.TH "INIT" "3" "June 2013" "" ""
-.
-.SH "NAME"
-\fBinit\fR \-\- Interactively create a package\.json file
-.
-.SH "SYNOPSIS"
-.
-.nf
-npm\.commands\.init(args, callback)
-.
-.fi
-.
-.SH "DESCRIPTION"
-This will ask you a bunch of questions, and then write a package\.json for you\.
-.
-.P
-It attempts to make reasonable guesses about what you want things to be set to,
-and then writes a package\.json file with the options you\'ve selected\.
-.
-.P
-If you already have a package\.json file, it\'ll read that first, and default to
-the options in there\.
-.
-.P
-It is strictly additive, so it does not delete options from your package\.json
-without a really good reason to do so\.
-.
-.P
-Since this function expects to be run on the command\-line, it doesn\'t work very
-well as a programmatically\. The best option is to roll your own, and since
-JavaScript makes it stupid simple to output formatted JSON, that is the
-preferred method\. If you\'re sure you want to handle command\-line prompting,
-then go ahead and use this programmatically\.
-.
-.SH "SEE ALSO"
-npm help json
diff --git a/deps/npm/man/man3/install.3 b/deps/npm/man/man3/install.3
deleted file mode 100644
index ec0a3436e..000000000
--- a/deps/npm/man/man3/install.3
+++ /dev/null
@@ -1,29 +0,0 @@
-.\" Generated with Ronnjs 0.3.8
-.\" http://github.com/kapouer/ronnjs/
-.
-.TH "NPM\-INSTALL" "3" "June 2013" "" ""
-.
-.SH "NAME"
-\fBnpm-install\fR \-\- install a package programmatically
-.
-.SH "SYNOPSIS"
-.
-.nf
-npm\.commands\.install([where,] packages, callback)
-.
-.fi
-.
-.SH "DESCRIPTION"
-This acts much the same ways as installing on the command\-line\.
-.
-.P
-The \'where\' parameter is optional and only used internally, and it specifies
-where the packages should be installed to\.
-.
-.P
-The \'packages\' parameter is an array of strings\. Each element in the array is
-the name of a package to be installed\.
-.
-.P
-Finally, \'callback\' is a function that will be called when all packages have been
-installed or when an error has been encountered\.
diff --git a/deps/npm/man/man3/link.3 b/deps/npm/man/man3/link.3
deleted file mode 100644
index b6e8ea803..000000000
--- a/deps/npm/man/man3/link.3
+++ /dev/null
@@ -1,53 +0,0 @@
-.\" Generated with Ronnjs 0.3.8
-.\" http://github.com/kapouer/ronnjs/
-.
-.TH "NPM\-LINK" "3" "June 2013" "" ""
-.
-.SH "NAME"
-\fBnpm-link\fR \-\- Symlink a package folder
-.
-.SH "SYNOPSIS"
-.
-.nf
-npm\.command\.link(callback)
-npm\.command\.link(packages, callback)
-.
-.fi
-.
-.SH "DESCRIPTION"
-Package linking is a two\-step process\.
-.
-.P
-Without parameters, link will create a globally\-installed
-symbolic link from \fBprefix/package\-name\fR to the current folder\.
-.
-.P
-With a parameters, link will create a symlink from the local \fBnode_modules\fR
-folder to the global symlink\.
-.
-.P
-When creating tarballs for \fBnpm publish\fR, the linked packages are
-"snapshotted" to their current state by resolving the symbolic links\.
-.
-.P
-This is
-handy for installing your own stuff, so that you can work on it and test it
-iteratively without having to continually rebuild\.
-.
-.P
-For example:
-.
-.IP "" 4
-.
-.nf
-npm\.commands\.link(cb) # creates global link from the cwd
- # (say redis package)
-npm\.commands\.link(\'redis\', cb) # link\-install the package
-.
-.fi
-.
-.IP "" 0
-.
-.P
-Now, any changes to the redis package will be reflected in
-the package in the current working directory
diff --git a/deps/npm/man/man3/list.3 b/deps/npm/man/man3/list.3
deleted file mode 100644
index 3c733c9de..000000000
--- a/deps/npm/man/man3/list.3
+++ /dev/null
@@ -1,79 +0,0 @@
-.\" Generated with Ronnjs/v0.1
-.\" http://github.com/kapouer/ronnjs/
-.
-.TH "NPM\-LS" "3" "November 2011" "" ""
-.
-.SH "NAME"
-\fBnpm-ls\fR \-\- List installed packages
-.
-.SH "SYNOPSIS"
-.
-.nf
-npm\.commands\.ls(args, [silent,] callback)
-.
-.fi
-.
-.SH "DESCRIPTION"
-This command will print to stdout all the versions of packages that are
-installed, as well as their dependencies, in a tree\-structure\. It will also
-return that data using the callback\.
-.
-.P
-This command does not take any arguments, but args must be defined\.
-Beyond that, if any arguments are passed in, npm will politely warn that it
-does not take positional arguments, though you may set config flags
-like with any other command, such as \fBglobal\fR to list global packages\.
-.
-.P
-It will print out extraneous, missing, and invalid packages\.
-.
-.P
-If the silent parameter is set to true, nothing will be output to the screen,
-but the data will still be returned\.
-.
-.SH "CONFIGURATION"
-.
-.SS "long"
-.
-.IP "\(bu" 4
-Default: false
-.
-.IP "\(bu" 4
-Type: Boolean
-.
-.IP "" 0
-.
-.P
-Show extended information\.
-.
-.SS "parseable"
-.
-.IP "\(bu" 4
-Default: false
-.
-.IP "\(bu" 4
-Type: Boolean
-.
-.IP "" 0
-.
-.P
-Show parseable output instead of tree view\.
-.
-.SS "global"
-.
-.IP "\(bu" 4
-Default: false
-.
-.IP "\(bu" 4
-Type: Boolean
-.
-.IP "" 0
-.
-.P
-List packages in the global install prefix instead of in the current
-project\.
-.
-.P
-Note, if parseable is set or long isn\'t set, then duplicates will be trimmed\.
-This means that if a submodule a same dependency as a parent module, then the
-dependency will only be output once\.
diff --git a/deps/npm/man/man3/ln.3 b/deps/npm/man/man3/ln.3
deleted file mode 100644
index bbb7ff092..000000000
--- a/deps/npm/man/man3/ln.3
+++ /dev/null
@@ -1,53 +0,0 @@
-.\" Generated with Ronnjs/v0.1
-.\" http://github.com/kapouer/ronnjs/
-.
-.TH "NPM\-LINK" "3" "November 2011" "" ""
-.
-.SH "NAME"
-\fBnpm-link\fR \-\- Symlink a package folder
-.
-.SH "SYNOPSIS"
-.
-.nf
-npm\.command\.link(callback)
-npm\.command\.link(packages, callback)
-.
-.fi
-.
-.SH "DESCRIPTION"
-Package linking is a two\-step process\.
-.
-.P
-Without parameters, link will create a globally\-installed
-symbolic link from \fBprefix/package\-name\fR to the current folder\.
-.
-.P
-With a parameters, link will create a symlink from the local \fBnode_modules\fR
-folder to the global symlink\.
-.
-.P
-When creating tarballs for \fBnpm publish\fR, the linked packages are
-"snapshotted" to their current state by resolving the symbolic links\.
-.
-.P
-This is
-handy for installing your own stuff, so that you can work on it and test it
-iteratively without having to continually rebuild\.
-.
-.P
-For example:
-.
-.IP "" 4
-.
-.nf
-npm\.commands\.link(cb) # creates global link from the cwd
- # (say redis package)
-npm\.commands\.link(\'redis\', cb) # link\-install the package
-.
-.fi
-.
-.IP "" 0
-.
-.P
-Now, any changes to the redis package will be reflected in
-the package in the current working directory
diff --git a/deps/npm/man/man3/load.3 b/deps/npm/man/man3/load.3
deleted file mode 100644
index 7f41ac388..000000000
--- a/deps/npm/man/man3/load.3
+++ /dev/null
@@ -1,44 +0,0 @@
-.\" Generated with Ronnjs 0.3.8
-.\" http://github.com/kapouer/ronnjs/
-.
-.TH "NPM\-LOAD" "3" "June 2013" "" ""
-.
-.SH "NAME"
-\fBnpm-load\fR \-\- Load config settings
-.
-.SH "SYNOPSIS"
-.
-.nf
-npm\.load(conf, cb)
-.
-.fi
-.
-.SH "DESCRIPTION"
-npm\.load() must be called before any other function call\. Both parameters are
-optional, but the second is recommended\.
-.
-.P
-The first parameter is an object hash of command\-line config params, and the
-second parameter is a callback that will be called when npm is loaded and
-ready to serve\.
-.
-.P
-The first parameter should follow a similar structure as the package\.json
-config object\.
-.
-.P
-For example, to emulate the \-\-dev flag, pass an object that looks like this:
-.
-.IP "" 4
-.
-.nf
-{
- "dev": true
-}
-.
-.fi
-.
-.IP "" 0
-.
-.P
-For a list of all the available command\-line configs, see \fBnpm help config\fR
diff --git a/deps/npm/man/man3/ls.3 b/deps/npm/man/man3/ls.3
deleted file mode 100644
index f6975f1d3..000000000
--- a/deps/npm/man/man3/ls.3
+++ /dev/null
@@ -1,86 +0,0 @@
-.\" Generated with Ronnjs 0.3.8
-.\" http://github.com/kapouer/ronnjs/
-.
-.TH "NPM\-LS" "3" "June 2013" "" ""
-.
-.SH "NAME"
-\fBnpm-ls\fR \-\- List installed packages
-.
-.SH "SYNOPSIS"
-.
-.nf
-npm\.commands\.ls(args, [silent,] callback)
-.
-.fi
-.
-.SH "DESCRIPTION"
-This command will print to stdout all the versions of packages that are
-installed, as well as their dependencies, in a tree\-structure\. It will also
-return that data using the callback\.
-.
-.P
-This command does not take any arguments, but args must be defined\.
-Beyond that, if any arguments are passed in, npm will politely warn that it
-does not take positional arguments, though you may set config flags
-like with any other command, such as \fBglobal\fR to list global packages\.
-.
-.P
-It will print out extraneous, missing, and invalid packages\.
-.
-.P
-If the silent parameter is set to true, nothing will be output to the screen,
-but the data will still be returned\.
-.
-.P
-Callback is provided an error if one occurred, the full data about which
-packages are installed and which dependencies they will receive, and a
-"lite" data object which just shows which versions are installed where\.
-Note that the full data object is a circular structure, so care must be
-taken if it is serialized to JSON\.
-.
-.SH "CONFIGURATION"
-.
-.SS "long"
-.
-.IP "\(bu" 4
-Default: false
-.
-.IP "\(bu" 4
-Type: Boolean
-.
-.IP "" 0
-.
-.P
-Show extended information\.
-.
-.SS "parseable"
-.
-.IP "\(bu" 4
-Default: false
-.
-.IP "\(bu" 4
-Type: Boolean
-.
-.IP "" 0
-.
-.P
-Show parseable output instead of tree view\.
-.
-.SS "global"
-.
-.IP "\(bu" 4
-Default: false
-.
-.IP "\(bu" 4
-Type: Boolean
-.
-.IP "" 0
-.
-.P
-List packages in the global install prefix instead of in the current
-project\.
-.
-.P
-Note, if parseable is set or long isn\'t set, then duplicates will be trimmed\.
-This means that if a submodule a same dependency as a parent module, then the
-dependency will only be output once\.
diff --git a/deps/npm/man/man3/npm-bin.3 b/deps/npm/man/man3/npm-bin.3
new file mode 100644
index 000000000..7a15705f2
--- /dev/null
+++ b/deps/npm/man/man3/npm-bin.3
@@ -0,0 +1,21 @@
+.\" Generated with Ronnjs 0.3.8
+.\" http://github.com/kapouer/ronnjs/
+.
+.TH "NPM\-BIN" "3" "May 2014" "" ""
+.
+.SH "NAME"
+\fBnpm-bin\fR \-\- Display npm bin folder
+.
+.SH "SYNOPSIS"
+.
+.nf
+npm\.commands\.bin(args, cb)
+.
+.fi
+.
+.SH "DESCRIPTION"
+Print the folder where npm will install executables\.
+.
+.P
+This function should not be used programmatically\. Instead, just refer
+to the \fBnpm\.bin\fR member\.
diff --git a/deps/npm/man/man3/npm-bugs.3 b/deps/npm/man/man3/npm-bugs.3
new file mode 100644
index 000000000..97b1440f3
--- /dev/null
+++ b/deps/npm/man/man3/npm-bugs.3
@@ -0,0 +1,28 @@
+.\" Generated with Ronnjs 0.3.8
+.\" http://github.com/kapouer/ronnjs/
+.
+.TH "NPM\-BUGS" "3" "May 2014" "" ""
+.
+.SH "NAME"
+\fBnpm-bugs\fR \-\- Bugs for a package in a web browser maybe
+.
+.SH "SYNOPSIS"
+.
+.nf
+npm\.commands\.bugs(package, callback)
+.
+.fi
+.
+.SH "DESCRIPTION"
+This command tries to guess at the likely location of a package\'s
+bug tracker URL, and then tries to open it using the \fB\-\-browser\fR
+config param\.
+.
+.P
+Like other commands, the first parameter is an array\. This command only
+uses the first element, which is expected to be a package name with an
+optional version number\.
+.
+.P
+This command will launch a browser, so this command may not be the most
+friendly for programmatic use\.
diff --git a/deps/npm/man/man3/npm-commands.3 b/deps/npm/man/man3/npm-commands.3
new file mode 100644
index 000000000..0f3fa8668
--- /dev/null
+++ b/deps/npm/man/man3/npm-commands.3
@@ -0,0 +1,35 @@
+.\" Generated with Ronnjs 0.3.8
+.\" http://github.com/kapouer/ronnjs/
+.
+.TH "NPM\-COMMANDS" "3" "May 2014" "" ""
+.
+.SH "NAME"
+\fBnpm-commands\fR \-\- npm commands
+.
+.SH "SYNOPSIS"
+.
+.nf
+npm\.commands[<command>](args, callback)
+.
+.fi
+.
+.SH "DESCRIPTION"
+npm comes with a full set of commands, and each of the commands takes a
+similar set of arguments\.
+.
+.P
+In general, all commands on the command object take an \fBarray\fR of positional
+argument \fBstrings\fR\|\. The last argument to any function is a callback\. Some
+commands are special and take other optional arguments\.
+.
+.P
+All commands have their own man page\. See \fBman npm\-<command>\fR for command\-line
+usage, or \fBman 3 npm\-<command>\fR for programmatic usage\.
+.
+.SH "SEE ALSO"
+.
+.IP "\(bu" 4
+npm help index
+.
+.IP "" 0
+
diff --git a/deps/npm/man/man3/npm-config.3 b/deps/npm/man/man3/npm-config.3
new file mode 100644
index 000000000..818a6e4bd
--- /dev/null
+++ b/deps/npm/man/man3/npm-config.3
@@ -0,0 +1,69 @@
+.\" Generated with Ronnjs 0.3.8
+.\" http://github.com/kapouer/ronnjs/
+.
+.TH "NPM\-CONFIG" "3" "May 2014" "" ""
+.
+.SH "NAME"
+\fBnpm-config\fR \-\- Manage the npm configuration files
+.
+.SH "SYNOPSIS"
+.
+.nf
+npm\.commands\.config(args, callback)
+var val = npm\.config\.get(key)
+npm\.config\.set(key, val)
+.
+.fi
+.
+.SH "DESCRIPTION"
+This function acts much the same way as the command\-line version\. The first
+element in the array tells config what to do\. Possible values are:
+.
+.IP "\(bu" 4
+\fBset\fR
+.
+.IP
+Sets a config parameter\. The second element in \fBargs\fR is interpreted as the
+key, and the third element is interpreted as the value\.
+.
+.IP "\(bu" 4
+\fBget\fR
+.
+.IP
+Gets the value of a config parameter\. The second element in \fBargs\fR is the
+key to get the value of\.
+.
+.IP "\(bu" 4
+\fBdelete\fR (\fBrm\fR or \fBdel\fR)
+.
+.IP
+Deletes a parameter from the config\. The second element in \fBargs\fR is the
+key to delete\.
+.
+.IP "\(bu" 4
+\fBlist\fR (\fBls\fR)
+.
+.IP
+Show all configs that aren\'t secret\. No parameters necessary\.
+.
+.IP "\(bu" 4
+\fBedit\fR:
+.
+.IP
+Opens the config file in the default editor\. This command isn\'t very useful
+programmatically, but it is made available\.
+.
+.IP "" 0
+.
+.P
+To programmatically access npm configuration settings, or set them for
+the duration of a program, use the \fBnpm\.config\.set\fR and \fBnpm\.config\.get\fR
+functions instead\.
+.
+.SH "SEE ALSO"
+.
+.IP "\(bu" 4
+npm apihelp npm
+.
+.IP "" 0
+
diff --git a/deps/npm/man/man3/npm-deprecate.3 b/deps/npm/man/man3/npm-deprecate.3
new file mode 100644
index 000000000..72dd86c46
--- /dev/null
+++ b/deps/npm/man/man3/npm-deprecate.3
@@ -0,0 +1,57 @@
+.\" Generated with Ronnjs 0.3.8
+.\" http://github.com/kapouer/ronnjs/
+.
+.TH "NPM\-DEPRECATE" "3" "May 2014" "" ""
+.
+.SH "NAME"
+\fBnpm-deprecate\fR \-\- Deprecate a version of a package
+.
+.SH "SYNOPSIS"
+.
+.nf
+npm\.commands\.deprecate(args, callback)
+.
+.fi
+.
+.SH "DESCRIPTION"
+This command will update the npm registry entry for a package, providing
+a deprecation warning to all who attempt to install it\.
+.
+.P
+The \'args\' parameter must have exactly two elements:
+.
+.IP "\(bu" 4
+\fBpackage[@version]\fR
+.
+.IP
+The \fBversion\fR portion is optional, and may be either a range, or a
+specific version, or a tag\.
+.
+.IP "\(bu" 4
+\fBmessage\fR
+.
+.IP
+The warning message that will be printed whenever a user attempts to
+install the package\.
+.
+.IP "" 0
+.
+.P
+Note that you must be the package owner to deprecate something\. See the \fBowner\fR and \fBadduser\fR help topics\.
+.
+.P
+To un\-deprecate a package, specify an empty string (\fB""\fR) for the \fBmessage\fR argument\.
+.
+.SH "SEE ALSO"
+.
+.IP "\(bu" 4
+npm apihelp publish
+.
+.IP "\(bu" 4
+npm apihelp unpublish
+.
+.IP "\(bu" 4
+npm help registry
+.
+.IP "" 0
+
diff --git a/deps/npm/man/man3/npm-docs.3 b/deps/npm/man/man3/npm-docs.3
new file mode 100644
index 000000000..f476f754c
--- /dev/null
+++ b/deps/npm/man/man3/npm-docs.3
@@ -0,0 +1,28 @@
+.\" Generated with Ronnjs 0.3.8
+.\" http://github.com/kapouer/ronnjs/
+.
+.TH "NPM\-DOCS" "3" "May 2014" "" ""
+.
+.SH "NAME"
+\fBnpm-docs\fR \-\- Docs for a package in a web browser maybe
+.
+.SH "SYNOPSIS"
+.
+.nf
+npm\.commands\.docs(package, callback)
+.
+.fi
+.
+.SH "DESCRIPTION"
+This command tries to guess at the likely location of a package\'s
+documentation URL, and then tries to open it using the \fB\-\-browser\fR
+config param\.
+.
+.P
+Like other commands, the first parameter is an array\. This command only
+uses the first element, which is expected to be a package name with an
+optional version number\.
+.
+.P
+This command will launch a browser, so this command may not be the most
+friendly for programmatic use\.
diff --git a/deps/npm/man/man3/npm-edit.3 b/deps/npm/man/man3/npm-edit.3
new file mode 100644
index 000000000..646676109
--- /dev/null
+++ b/deps/npm/man/man3/npm-edit.3
@@ -0,0 +1,35 @@
+.\" Generated with Ronnjs 0.3.8
+.\" http://github.com/kapouer/ronnjs/
+.
+.TH "NPM\-EDIT" "3" "May 2014" "" ""
+.
+.SH "NAME"
+\fBnpm-edit\fR \-\- Edit an installed package
+.
+.SH "SYNOPSIS"
+.
+.nf
+npm\.commands\.edit(package, callback)
+.
+.fi
+.
+.SH "DESCRIPTION"
+Opens the package folder in the default editor (or whatever you\'ve
+configured as the npm \fBeditor\fR config \-\- see \fBnpm help config\fR\|\.)
+.
+.P
+After it has been edited, the package is rebuilt so as to pick up any
+changes in compiled packages\.
+.
+.P
+For instance, you can do \fBnpm install connect\fR to install connect
+into your package, and then \fBnpm\.commands\.edit(["connect"], callback)\fR
+to make a few changes to your locally installed copy\.
+.
+.P
+The first parameter is a string array with a single element, the package
+to open\. The package can optionally have a version number attached\.
+.
+.P
+Since this command opens an editor in a new process, be careful about where
+and how this is used\.
diff --git a/deps/npm/man/man3/npm-explore.3 b/deps/npm/man/man3/npm-explore.3
new file mode 100644
index 000000000..61441abea
--- /dev/null
+++ b/deps/npm/man/man3/npm-explore.3
@@ -0,0 +1,28 @@
+.\" Generated with Ronnjs 0.3.8
+.\" http://github.com/kapouer/ronnjs/
+.
+.TH "NPM\-EXPLORE" "3" "May 2014" "" ""
+.
+.SH "NAME"
+\fBnpm-explore\fR \-\- Browse an installed package
+.
+.SH "SYNOPSIS"
+.
+.nf
+npm\.commands\.explore(args, callback)
+.
+.fi
+.
+.SH "DESCRIPTION"
+Spawn a subshell in the directory of the installed package specified\.
+.
+.P
+If a command is specified, then it is run in the subshell, which then
+immediately terminates\.
+.
+.P
+Note that the package is \fInot\fR automatically rebuilt afterwards, so be
+sure to use \fBnpm rebuild <pkg>\fR if you make any changes\.
+.
+.P
+The first element in the \'args\' parameter must be a package name\. After that is the optional command, which can be any number of strings\. All of the strings will be combined into one, space\-delimited command\.
diff --git a/deps/npm/man/man3/npm-help-search.3 b/deps/npm/man/man3/npm-help-search.3
new file mode 100644
index 000000000..ef5893b85
--- /dev/null
+++ b/deps/npm/man/man3/npm-help-search.3
@@ -0,0 +1,51 @@
+.\" Generated with Ronnjs 0.3.8
+.\" http://github.com/kapouer/ronnjs/
+.
+.TH "NPM\-HELP\-SEARCH" "3" "May 2014" "" ""
+.
+.SH "NAME"
+\fBnpm-help-search\fR \-\- Search the help pages
+.
+.SH "SYNOPSIS"
+.
+.nf
+npm\.commands\.helpSearch(args, [silent,] callback)
+.
+.fi
+.
+.SH "DESCRIPTION"
+This command is rarely useful, but it exists in the rare case that it is\.
+.
+.P
+This command takes an array of search terms and returns the help pages that
+match in order of best match\.
+.
+.P
+If there is only one match, then npm displays that help section\. If there
+are multiple results, the results are printed to the screen formatted and the
+array of results is returned\. Each result is an object with these properties:
+.
+.IP "\(bu" 4
+hits:
+A map of args to number of hits on that arg\. For example, {"npm": 3}
+.
+.IP "\(bu" 4
+found:
+Total number of unique args that matched\.
+.
+.IP "\(bu" 4
+totalHits:
+Total number of hits\.
+.
+.IP "\(bu" 4
+lines:
+An array of all matching lines (and some adjacent lines)\.
+.
+.IP "\(bu" 4
+file:
+Name of the file that matched
+.
+.IP "" 0
+.
+.P
+The silent parameter is not neccessary not used, but it may in the future\.
diff --git a/deps/npm/man/man3/npm-init.3 b/deps/npm/man/man3/npm-init.3
new file mode 100644
index 000000000..528002af1
--- /dev/null
+++ b/deps/npm/man/man3/npm-init.3
@@ -0,0 +1,39 @@
+.\" Generated with Ronnjs 0.3.8
+.\" http://github.com/kapouer/ronnjs/
+.
+.TH "INIT" "3" "May 2014" "" ""
+.
+.SH "NAME"
+\fBinit\fR \-\- Interactively create a package\.json file
+.
+.SH "SYNOPSIS"
+.
+.nf
+npm\.commands\.init(args, callback)
+.
+.fi
+.
+.SH "DESCRIPTION"
+This will ask you a bunch of questions, and then write a package\.json for you\.
+.
+.P
+It attempts to make reasonable guesses about what you want things to be set to,
+and then writes a package\.json file with the options you\'ve selected\.
+.
+.P
+If you already have a package\.json file, it\'ll read that first, and default to
+the options in there\.
+.
+.P
+It is strictly additive, so it does not delete options from your package\.json
+without a really good reason to do so\.
+.
+.P
+Since this function expects to be run on the command\-line, it doesn\'t work very
+well as a programmatically\. The best option is to roll your own, and since
+JavaScript makes it stupid simple to output formatted JSON, that is the
+preferred method\. If you\'re sure you want to handle command\-line prompting,
+then go ahead and use this programmatically\.
+.
+.SH "SEE ALSO"
+npm help package\.json
diff --git a/deps/npm/man/man3/npm-install.3 b/deps/npm/man/man3/npm-install.3
new file mode 100644
index 000000000..90b708902
--- /dev/null
+++ b/deps/npm/man/man3/npm-install.3
@@ -0,0 +1,29 @@
+.\" Generated with Ronnjs 0.3.8
+.\" http://github.com/kapouer/ronnjs/
+.
+.TH "NPM\-INSTALL" "3" "May 2014" "" ""
+.
+.SH "NAME"
+\fBnpm-install\fR \-\- install a package programmatically
+.
+.SH "SYNOPSIS"
+.
+.nf
+npm\.commands\.install([where,] packages, callback)
+.
+.fi
+.
+.SH "DESCRIPTION"
+This acts much the same ways as installing on the command\-line\.
+.
+.P
+The \'where\' parameter is optional and only used internally, and it specifies
+where the packages should be installed to\.
+.
+.P
+The \'packages\' parameter is an array of strings\. Each element in the array is
+the name of a package to be installed\.
+.
+.P
+Finally, \'callback\' is a function that will be called when all packages have been
+installed or when an error has been encountered\.
diff --git a/deps/npm/man/man3/npm-link.3 b/deps/npm/man/man3/npm-link.3
new file mode 100644
index 000000000..28d418cc1
--- /dev/null
+++ b/deps/npm/man/man3/npm-link.3
@@ -0,0 +1,53 @@
+.\" Generated with Ronnjs 0.3.8
+.\" http://github.com/kapouer/ronnjs/
+.
+.TH "NPM\-LINK" "3" "May 2014" "" ""
+.
+.SH "NAME"
+\fBnpm-link\fR \-\- Symlink a package folder
+.
+.SH "SYNOPSIS"
+.
+.nf
+npm\.command\.link(callback)
+npm\.command\.link(packages, callback)
+.
+.fi
+.
+.SH "DESCRIPTION"
+Package linking is a two\-step process\.
+.
+.P
+Without parameters, link will create a globally\-installed
+symbolic link from \fBprefix/package\-name\fR to the current folder\.
+.
+.P
+With a parameters, link will create a symlink from the local \fBnode_modules\fR
+folder to the global symlink\.
+.
+.P
+When creating tarballs for \fBnpm publish\fR, the linked packages are
+"snapshotted" to their current state by resolving the symbolic links\.
+.
+.P
+This is
+handy for installing your own stuff, so that you can work on it and test it
+iteratively without having to continually rebuild\.
+.
+.P
+For example:
+.
+.IP "" 4
+.
+.nf
+npm\.commands\.link(cb) # creates global link from the cwd
+ # (say redis package)
+npm\.commands\.link(\'redis\', cb) # link\-install the package
+.
+.fi
+.
+.IP "" 0
+.
+.P
+Now, any changes to the redis package will be reflected in
+the package in the current working directory
diff --git a/deps/npm/man/man3/npm-load.3 b/deps/npm/man/man3/npm-load.3
new file mode 100644
index 000000000..5de64de6a
--- /dev/null
+++ b/deps/npm/man/man3/npm-load.3
@@ -0,0 +1,44 @@
+.\" Generated with Ronnjs 0.3.8
+.\" http://github.com/kapouer/ronnjs/
+.
+.TH "NPM\-LOAD" "3" "May 2014" "" ""
+.
+.SH "NAME"
+\fBnpm-load\fR \-\- Load config settings
+.
+.SH "SYNOPSIS"
+.
+.nf
+npm\.load(conf, cb)
+.
+.fi
+.
+.SH "DESCRIPTION"
+npm\.load() must be called before any other function call\. Both parameters are
+optional, but the second is recommended\.
+.
+.P
+The first parameter is an object hash of command\-line config params, and the
+second parameter is a callback that will be called when npm is loaded and
+ready to serve\.
+.
+.P
+The first parameter should follow a similar structure as the package\.json
+config object\.
+.
+.P
+For example, to emulate the \-\-dev flag, pass an object that looks like this:
+.
+.IP "" 4
+.
+.nf
+{
+ "dev": true
+}
+.
+.fi
+.
+.IP "" 0
+.
+.P
+For a list of all the available command\-line configs, see \fBnpm help config\fR
diff --git a/deps/npm/man/man3/npm-ls.3 b/deps/npm/man/man3/npm-ls.3
new file mode 100644
index 000000000..30d8f0a78
--- /dev/null
+++ b/deps/npm/man/man3/npm-ls.3
@@ -0,0 +1,86 @@
+.\" Generated with Ronnjs 0.3.8
+.\" http://github.com/kapouer/ronnjs/
+.
+.TH "NPM\-LS" "3" "May 2014" "" ""
+.
+.SH "NAME"
+\fBnpm-ls\fR \-\- List installed packages
+.
+.SH "SYNOPSIS"
+.
+.nf
+npm\.commands\.ls(args, [silent,] callback)
+.
+.fi
+.
+.SH "DESCRIPTION"
+This command will print to stdout all the versions of packages that are
+installed, as well as their dependencies, in a tree\-structure\. It will also
+return that data using the callback\.
+.
+.P
+This command does not take any arguments, but args must be defined\.
+Beyond that, if any arguments are passed in, npm will politely warn that it
+does not take positional arguments, though you may set config flags
+like with any other command, such as \fBglobal\fR to list global packages\.
+.
+.P
+It will print out extraneous, missing, and invalid packages\.
+.
+.P
+If the silent parameter is set to true, nothing will be output to the screen,
+but the data will still be returned\.
+.
+.P
+Callback is provided an error if one occurred, the full data about which
+packages are installed and which dependencies they will receive, and a
+"lite" data object which just shows which versions are installed where\.
+Note that the full data object is a circular structure, so care must be
+taken if it is serialized to JSON\.
+.
+.SH "CONFIGURATION"
+.
+.SS "long"
+.
+.IP "\(bu" 4
+Default: false
+.
+.IP "\(bu" 4
+Type: Boolean
+.
+.IP "" 0
+.
+.P
+Show extended information\.
+.
+.SS "parseable"
+.
+.IP "\(bu" 4
+Default: false
+.
+.IP "\(bu" 4
+Type: Boolean
+.
+.IP "" 0
+.
+.P
+Show parseable output instead of tree view\.
+.
+.SS "global"
+.
+.IP "\(bu" 4
+Default: false
+.
+.IP "\(bu" 4
+Type: Boolean
+.
+.IP "" 0
+.
+.P
+List packages in the global install prefix instead of in the current
+project\.
+.
+.P
+Note, if parseable is set or long isn\'t set, then duplicates will be trimmed\.
+This means that if a submodule a same dependency as a parent module, then the
+dependency will only be output once\.
diff --git a/deps/npm/man/man3/npm-outdated.3 b/deps/npm/man/man3/npm-outdated.3
new file mode 100644
index 000000000..59c0a2491
--- /dev/null
+++ b/deps/npm/man/man3/npm-outdated.3
@@ -0,0 +1,21 @@
+.\" Generated with Ronnjs 0.3.8
+.\" http://github.com/kapouer/ronnjs/
+.
+.TH "NPM\-OUTDATED" "3" "May 2014" "" ""
+.
+.SH "NAME"
+\fBnpm-outdated\fR \-\- Check for outdated packages
+.
+.SH "SYNOPSIS"
+.
+.nf
+npm\.commands\.outdated([packages,] callback)
+.
+.fi
+.
+.SH "DESCRIPTION"
+This command will check the registry to see if the specified packages are
+currently outdated\.
+.
+.P
+If the \'packages\' parameter is left out, npm will check all packages\.
diff --git a/deps/npm/man/man3/npm-owner.3 b/deps/npm/man/man3/npm-owner.3
new file mode 100644
index 000000000..fb7c622c4
--- /dev/null
+++ b/deps/npm/man/man3/npm-owner.3
@@ -0,0 +1,52 @@
+.\" Generated with Ronnjs 0.3.8
+.\" http://github.com/kapouer/ronnjs/
+.
+.TH "NPM\-OWNER" "3" "May 2014" "" ""
+.
+.SH "NAME"
+\fBnpm-owner\fR \-\- Manage package owners
+.
+.SH "SYNOPSIS"
+.
+.nf
+npm\.commands\.owner(args, callback)
+.
+.fi
+.
+.SH "DESCRIPTION"
+The first element of the \'args\' parameter defines what to do, and the subsequent
+elements depend on the action\. Possible values for the action are (order of
+parameters are given in parenthesis):
+.
+.IP "\(bu" 4
+ls (package):
+List all the users who have access to modify a package and push new versions\.
+Handy when you need to know who to bug for help\.
+.
+.IP "\(bu" 4
+add (user, package):
+Add a new user as a maintainer of a package\. This user is enabled to modify
+metadata, publish new versions, and add other owners\.
+.
+.IP "\(bu" 4
+rm (user, package):
+Remove a user from the package owner list\. This immediately revokes their
+privileges\.
+.
+.IP "" 0
+.
+.P
+Note that there is only one level of access\. Either you can modify a package,
+or you can\'t\. Future versions may contain more fine\-grained access levels, but
+that is not implemented at this time\.
+.
+.SH "SEE ALSO"
+.
+.IP "\(bu" 4
+npm apihelp publish
+.
+.IP "\(bu" 4
+npm help registry
+.
+.IP "" 0
+
diff --git a/deps/npm/man/man3/npm-pack.3 b/deps/npm/man/man3/npm-pack.3
new file mode 100644
index 000000000..3ab49a2bf
--- /dev/null
+++ b/deps/npm/man/man3/npm-pack.3
@@ -0,0 +1,28 @@
+.\" Generated with Ronnjs 0.3.8
+.\" http://github.com/kapouer/ronnjs/
+.
+.TH "NPM\-PACK" "3" "May 2014" "" ""
+.
+.SH "NAME"
+\fBnpm-pack\fR \-\- Create a tarball from a package
+.
+.SH "SYNOPSIS"
+.
+.nf
+npm\.commands\.pack([packages,] callback)
+.
+.fi
+.
+.SH "DESCRIPTION"
+For anything that\'s installable (that is, a package folder, tarball,
+tarball url, name@tag, name@version, or name), this command will fetch
+it to the cache, and then copy the tarball to the current working
+directory as \fB<name>\-<version>\.tgz\fR, and then write the filenames out to
+stdout\.
+.
+.P
+If the same package is specified multiple times, then the file will be
+overwritten the second time\.
+.
+.P
+If no arguments are supplied, then npm packs the current package folder\.
diff --git a/deps/npm/man/man3/npm-prefix.3 b/deps/npm/man/man3/npm-prefix.3
new file mode 100644
index 000000000..72676148c
--- /dev/null
+++ b/deps/npm/man/man3/npm-prefix.3
@@ -0,0 +1,24 @@
+.\" Generated with Ronnjs 0.3.8
+.\" http://github.com/kapouer/ronnjs/
+.
+.TH "NPM\-PREFIX" "3" "May 2014" "" ""
+.
+.SH "NAME"
+\fBnpm-prefix\fR \-\- Display prefix
+.
+.SH "SYNOPSIS"
+.
+.nf
+npm\.commands\.prefix(args, callback)
+.
+.fi
+.
+.SH "DESCRIPTION"
+Print the prefix to standard out\.
+.
+.P
+\'args\' is never used and callback is never called with data\.
+\'args\' must be present or things will break\.
+.
+.P
+This function is not useful programmatically
diff --git a/deps/npm/man/man3/npm-prune.3 b/deps/npm/man/man3/npm-prune.3
new file mode 100644
index 000000000..948b4d2b3
--- /dev/null
+++ b/deps/npm/man/man3/npm-prune.3
@@ -0,0 +1,27 @@
+.\" Generated with Ronnjs 0.3.8
+.\" http://github.com/kapouer/ronnjs/
+.
+.TH "NPM\-PRUNE" "3" "May 2014" "" ""
+.
+.SH "NAME"
+\fBnpm-prune\fR \-\- Remove extraneous packages
+.
+.SH "SYNOPSIS"
+.
+.nf
+npm\.commands\.prune([packages,] callback)
+.
+.fi
+.
+.SH "DESCRIPTION"
+This command removes "extraneous" packages\.
+.
+.P
+The first parameter is optional, and it specifies packages to be removed\.
+.
+.P
+No packages are specified, then all packages will be checked\.
+.
+.P
+Extraneous packages are packages that are not listed on the parent
+package\'s dependencies list\.
diff --git a/deps/npm/man/man3/npm-publish.3 b/deps/npm/man/man3/npm-publish.3
new file mode 100644
index 000000000..01c2d1b43
--- /dev/null
+++ b/deps/npm/man/man3/npm-publish.3
@@ -0,0 +1,51 @@
+.\" Generated with Ronnjs 0.3.8
+.\" http://github.com/kapouer/ronnjs/
+.
+.TH "NPM\-PUBLISH" "3" "May 2014" "" ""
+.
+.SH "NAME"
+\fBnpm-publish\fR \-\- Publish a package
+.
+.SH "SYNOPSIS"
+.
+.nf
+npm\.commands\.publish([packages,] callback)
+.
+.fi
+.
+.SH "DESCRIPTION"
+Publishes a package to the registry so that it can be installed by name\.
+Possible values in the \'packages\' array are:
+.
+.IP "\(bu" 4
+\fB<folder>\fR:
+A folder containing a package\.json file
+.
+.IP "\(bu" 4
+\fB<tarball>\fR:
+A url or file path to a gzipped tar archive containing a single folder
+with a package\.json file inside\.
+.
+.IP "" 0
+.
+.P
+If the package array is empty, npm will try to publish something in the
+current working directory\.
+.
+.P
+This command could fails if one of the packages specified already exists in
+the registry\. Overwrites when the "force" environment variable is set\.
+.
+.SH "SEE ALSO"
+.
+.IP "\(bu" 4
+npm help registry
+.
+.IP "\(bu" 4
+npm help adduser
+.
+.IP "\(bu" 4
+npm apihelp owner
+.
+.IP "" 0
+
diff --git a/deps/npm/man/man3/npm-rebuild.3 b/deps/npm/man/man3/npm-rebuild.3
new file mode 100644
index 000000000..86fcca546
--- /dev/null
+++ b/deps/npm/man/man3/npm-rebuild.3
@@ -0,0 +1,22 @@
+.\" Generated with Ronnjs 0.3.8
+.\" http://github.com/kapouer/ronnjs/
+.
+.TH "NPM\-REBUILD" "3" "May 2014" "" ""
+.
+.SH "NAME"
+\fBnpm-rebuild\fR \-\- Rebuild a package
+.
+.SH "SYNOPSIS"
+.
+.nf
+npm\.commands\.rebuild([packages,] callback)
+.
+.fi
+.
+.SH "DESCRIPTION"
+This command runs the \fBnpm build\fR command on each of the matched packages\. This is useful
+when you install a new version of node, and must recompile all your C++ addons with
+the new binary\. If no \'packages\' parameter is specify, every package will be rebuilt\.
+.
+.SH "CONFIGURATION"
+See \fBnpm help build\fR
diff --git a/deps/npm/man/man3/npm-repo.3 b/deps/npm/man/man3/npm-repo.3
new file mode 100644
index 000000000..161b213a2
--- /dev/null
+++ b/deps/npm/man/man3/npm-repo.3
@@ -0,0 +1,28 @@
+.\" Generated with Ronnjs 0.3.8
+.\" http://github.com/kapouer/ronnjs/
+.
+.TH "NPM\-REPO" "3" "May 2014" "" ""
+.
+.SH "NAME"
+\fBnpm-repo\fR \-\- Open package repository page in the browser
+.
+.SH "SYNOPSIS"
+.
+.nf
+npm\.commands\.repo(package, callback)
+.
+.fi
+.
+.SH "DESCRIPTION"
+This command tries to guess at the likely location of a package\'s
+repository URL, and then tries to open it using the \fB\-\-browser\fR
+config param\.
+.
+.P
+Like other commands, the first parameter is an array\. This command only
+uses the first element, which is expected to be a package name with an
+optional version number\.
+.
+.P
+This command will launch a browser, so this command may not be the most
+friendly for programmatic use\.
diff --git a/deps/npm/man/man3/npm-restart.3 b/deps/npm/man/man3/npm-restart.3
new file mode 100644
index 000000000..d51ee54ad
--- /dev/null
+++ b/deps/npm/man/man3/npm-restart.3
@@ -0,0 +1,37 @@
+.\" Generated with Ronnjs 0.3.8
+.\" http://github.com/kapouer/ronnjs/
+.
+.TH "NPM\-RESTART" "3" "May 2014" "" ""
+.
+.SH "NAME"
+\fBnpm-restart\fR \-\- Start a package
+.
+.SH "SYNOPSIS"
+.
+.nf
+npm\.commands\.restart(packages, callback)
+.
+.fi
+.
+.SH "DESCRIPTION"
+This runs a package\'s "restart" script, if one was provided\.
+Otherwise it runs package\'s "stop" script, if one was provided, and then
+the "start" script\.
+.
+.P
+If no version is specified, then it restarts the "active" version\.
+.
+.P
+npm can run tests on multiple packages\. Just specify multiple packages
+in the \fBpackages\fR parameter\.
+.
+.SH "SEE ALSO"
+.
+.IP "\(bu" 4
+npm apihelp start
+.
+.IP "\(bu" 4
+npm apihelp stop
+.
+.IP "" 0
+
diff --git a/deps/npm/man/man3/npm-root.3 b/deps/npm/man/man3/npm-root.3
new file mode 100644
index 000000000..a7ae76d7d
--- /dev/null
+++ b/deps/npm/man/man3/npm-root.3
@@ -0,0 +1,24 @@
+.\" Generated with Ronnjs 0.3.8
+.\" http://github.com/kapouer/ronnjs/
+.
+.TH "NPM\-ROOT" "3" "May 2014" "" ""
+.
+.SH "NAME"
+\fBnpm-root\fR \-\- Display npm root
+.
+.SH "SYNOPSIS"
+.
+.nf
+npm\.commands\.root(args, callback)
+.
+.fi
+.
+.SH "DESCRIPTION"
+Print the effective \fBnode_modules\fR folder to standard out\.
+.
+.P
+\'args\' is never used and callback is never called with data\.
+\'args\' must be present or things will break\.
+.
+.P
+This function is not useful programmatically\.
diff --git a/deps/npm/man/man3/npm-run-script.3 b/deps/npm/man/man3/npm-run-script.3
new file mode 100644
index 000000000..24aec93ef
--- /dev/null
+++ b/deps/npm/man/man3/npm-run-script.3
@@ -0,0 +1,48 @@
+.\" Generated with Ronnjs 0.3.8
+.\" http://github.com/kapouer/ronnjs/
+.
+.TH "NPM\-RUN\-SCRIPT" "3" "May 2014" "" ""
+.
+.SH "NAME"
+\fBnpm-run-script\fR \-\- Run arbitrary package scripts
+.
+.SH "SYNOPSIS"
+.
+.nf
+npm\.commands\.run\-script(args, callback)
+.
+.fi
+.
+.SH "DESCRIPTION"
+This runs an arbitrary command from a package\'s "scripts" object\.
+.
+.P
+It is used by the test, start, restart, and stop commands, but can be
+called directly, as well\.
+.
+.P
+The \'args\' parameter is an array of strings\. Behavior depends on the number
+of elements\. If there is only one element, npm assumes that the element
+represents a command to be run on the local repository\. If there is more than
+one element, then the first is assumed to be the package and the second is
+assumed to be the command to run\. All other elements are ignored\.
+.
+.SH "SEE ALSO"
+.
+.IP "\(bu" 4
+npm help scripts
+.
+.IP "\(bu" 4
+npm apihelp test
+.
+.IP "\(bu" 4
+npm apihelp start
+.
+.IP "\(bu" 4
+npm apihelp restart
+.
+.IP "\(bu" 4
+npm apihelp stop
+.
+.IP "" 0
+
diff --git a/deps/npm/man/man3/npm-search.3 b/deps/npm/man/man3/npm-search.3
new file mode 100644
index 000000000..90b57e189
--- /dev/null
+++ b/deps/npm/man/man3/npm-search.3
@@ -0,0 +1,64 @@
+.\" Generated with Ronnjs 0.3.8
+.\" http://github.com/kapouer/ronnjs/
+.
+.TH "NPM\-SEARCH" "3" "May 2014" "" ""
+.
+.SH "NAME"
+\fBnpm-search\fR \-\- Search for packages
+.
+.SH "SYNOPSIS"
+.
+.nf
+npm\.commands\.search(searchTerms, [silent,] [staleness,] callback)
+.
+.fi
+.
+.SH "DESCRIPTION"
+Search the registry for packages matching the search terms\. The available parameters are:
+.
+.IP "\(bu" 4
+searchTerms:
+Array of search terms\. These terms are case\-insensitive\.
+.
+.IP "\(bu" 4
+silent:
+If true, npm will not log anything to the console\.
+.
+.IP "\(bu" 4
+staleness:
+This is the threshold for stale packages\. "Fresh" packages are not refreshed
+from the registry\. This value is measured in seconds\.
+.
+.IP "\(bu" 4
+callback:
+Returns an object where each key is the name of a package, and the value
+is information about that package along with a \'words\' property, which is
+a space\-delimited string of all of the interesting words in that package\.
+The only properties included are those that are searched, which generally include:
+.
+.IP "\(bu" 4
+name
+.
+.IP "\(bu" 4
+description
+.
+.IP "\(bu" 4
+maintainers
+.
+.IP "\(bu" 4
+url
+.
+.IP "\(bu" 4
+keywords
+.
+.IP "" 0
+
+.
+.IP "" 0
+.
+.P
+A search on the registry excludes any result that does not match all of the
+search terms\. It also removes any items from the results that contain an
+excluded term (the "searchexclude" config)\. The search is case insensitive
+and doesn\'t try to read your mind (it doesn\'t do any verb tense matching or the
+like)\.
diff --git a/deps/npm/man/man3/npm-shrinkwrap.3 b/deps/npm/man/man3/npm-shrinkwrap.3
new file mode 100644
index 000000000..d82fa004c
--- /dev/null
+++ b/deps/npm/man/man3/npm-shrinkwrap.3
@@ -0,0 +1,30 @@
+.\" Generated with Ronnjs 0.3.8
+.\" http://github.com/kapouer/ronnjs/
+.
+.TH "NPM\-SHRINKWRAP" "3" "May 2014" "" ""
+.
+.SH "NAME"
+\fBnpm-shrinkwrap\fR \-\- programmatically generate package shrinkwrap file
+.
+.SH "SYNOPSIS"
+.
+.nf
+npm\.commands\.shrinkwrap(args, [silent,] callback)
+.
+.fi
+.
+.SH "DESCRIPTION"
+This acts much the same ways as shrinkwrapping on the command\-line\.
+.
+.P
+This command does not take any arguments, but \'args\' must be defined\.
+Beyond that, if any arguments are passed in, npm will politely warn that it
+does not take positional arguments\.
+.
+.P
+If the \'silent\' parameter is set to true, nothing will be output to the screen,
+but the shrinkwrap file will still be written\.
+.
+.P
+Finally, \'callback\' is a function that will be called when the shrinkwrap has
+been saved\.
diff --git a/deps/npm/man/man3/npm-start.3 b/deps/npm/man/man3/npm-start.3
new file mode 100644
index 000000000..cddc6836a
--- /dev/null
+++ b/deps/npm/man/man3/npm-start.3
@@ -0,0 +1,21 @@
+.\" Generated with Ronnjs 0.3.8
+.\" http://github.com/kapouer/ronnjs/
+.
+.TH "NPM\-START" "3" "May 2014" "" ""
+.
+.SH "NAME"
+\fBnpm-start\fR \-\- Start a package
+.
+.SH "SYNOPSIS"
+.
+.nf
+npm\.commands\.start(packages, callback)
+.
+.fi
+.
+.SH "DESCRIPTION"
+This runs a package\'s "start" script, if one was provided\.
+.
+.P
+npm can run tests on multiple packages\. Just specify multiple packages
+in the \fBpackages\fR parameter\.
diff --git a/deps/npm/man/man3/npm-stop.3 b/deps/npm/man/man3/npm-stop.3
new file mode 100644
index 000000000..ff52fb917
--- /dev/null
+++ b/deps/npm/man/man3/npm-stop.3
@@ -0,0 +1,21 @@
+.\" Generated with Ronnjs 0.3.8
+.\" http://github.com/kapouer/ronnjs/
+.
+.TH "NPM\-STOP" "3" "May 2014" "" ""
+.
+.SH "NAME"
+\fBnpm-stop\fR \-\- Stop a package
+.
+.SH "SYNOPSIS"
+.
+.nf
+npm\.commands\.stop(packages, callback)
+.
+.fi
+.
+.SH "DESCRIPTION"
+This runs a package\'s "stop" script, if one was provided\.
+.
+.P
+npm can run stop on multiple packages\. Just specify multiple packages
+in the \fBpackages\fR parameter\.
diff --git a/deps/npm/man/man3/npm-submodule.3 b/deps/npm/man/man3/npm-submodule.3
new file mode 100644
index 000000000..b28915bdb
--- /dev/null
+++ b/deps/npm/man/man3/npm-submodule.3
@@ -0,0 +1,42 @@
+.\" Generated with Ronnjs 0.3.8
+.\" http://github.com/kapouer/ronnjs/
+.
+.TH "NPM\-SUBMODULE" "3" "May 2014" "" ""
+.
+.SH "NAME"
+\fBnpm-submodule\fR \-\- Add a package as a git submodule
+.
+.SH "SYNOPSIS"
+.
+.nf
+npm\.commands\.submodule(packages, callback)
+.
+.fi
+.
+.SH "DESCRIPTION"
+For each package specified, npm will check if it has a git repository url
+in its package\.json description then add it as a git submodule at \fBnode_modules/<pkg name>\fR\|\.
+.
+.P
+This is a convenience only\. From then on, it\'s up to you to manage
+updates by using the appropriate git commands\. npm will stubbornly
+refuse to update, modify, or remove anything with a \fB\|\.git\fR subfolder
+in it\.
+.
+.P
+This command also does not install missing dependencies, if the package
+does not include them in its git repository\. If \fBnpm ls\fR reports that
+things are missing, you can either install, link, or submodule them yourself,
+or you can do \fBnpm explore <pkgname> \-\- npm install\fR to install the
+dependencies into the submodule folder\.
+.
+.SH "SEE ALSO"
+.
+.IP "\(bu" 4
+npm help json
+.
+.IP "\(bu" 4
+git help submodule
+.
+.IP "" 0
+
diff --git a/deps/npm/man/man3/npm-tag.3 b/deps/npm/man/man3/npm-tag.3
new file mode 100644
index 000000000..0f56e71be
--- /dev/null
+++ b/deps/npm/man/man3/npm-tag.3
@@ -0,0 +1,31 @@
+.\" Generated with Ronnjs 0.3.8
+.\" http://github.com/kapouer/ronnjs/
+.
+.TH "NPM\-TAG" "3" "May 2014" "" ""
+.
+.SH "NAME"
+\fBnpm-tag\fR \-\- Tag a published version
+.
+.SH "SYNOPSIS"
+.
+.nf
+npm\.commands\.tag(package@version, tag, callback)
+.
+.fi
+.
+.SH "DESCRIPTION"
+Tags the specified version of the package with the specified tag, or the \fB\-\-tag\fR config if not specified\.
+.
+.P
+The \'package@version\' is an array of strings, but only the first two elements are
+currently used\.
+.
+.P
+The first element must be in the form package@version, where package
+is the package name and version is the version number (much like installing a
+specific version)\.
+.
+.P
+The second element is the name of the tag to tag this version with\. If this
+parameter is missing or falsey (empty), the default froom the config will be
+used\. For more information about how to set this config, check \fBman 3 npm\-config\fR for programmatic usage or \fBman npm\-config\fR for cli usage\.
diff --git a/deps/npm/man/man3/npm-test.3 b/deps/npm/man/man3/npm-test.3
new file mode 100644
index 000000000..826582ecf
--- /dev/null
+++ b/deps/npm/man/man3/npm-test.3
@@ -0,0 +1,25 @@
+.\" Generated with Ronnjs 0.3.8
+.\" http://github.com/kapouer/ronnjs/
+.
+.TH "NPM\-TEST" "3" "May 2014" "" ""
+.
+.SH "NAME"
+\fBnpm-test\fR \-\- Test a package
+.
+.SH "SYNOPSIS"
+.
+.nf
+ npm\.commands\.test(packages, callback)
+.
+.fi
+.
+.SH "DESCRIPTION"
+This runs a package\'s "test" script, if one was provided\.
+.
+.P
+To run tests as a condition of installation, set the \fBnpat\fR config to
+true\.
+.
+.P
+npm can run tests on multiple packages\. Just specify multiple packages
+in the \fBpackages\fR parameter\.
diff --git a/deps/npm/man/man3/npm-uninstall.3 b/deps/npm/man/man3/npm-uninstall.3
new file mode 100644
index 000000000..964791ab0
--- /dev/null
+++ b/deps/npm/man/man3/npm-uninstall.3
@@ -0,0 +1,25 @@
+.\" Generated with Ronnjs 0.3.8
+.\" http://github.com/kapouer/ronnjs/
+.
+.TH "NPM\-UNINSTALL" "3" "May 2014" "" ""
+.
+.SH "NAME"
+\fBnpm-uninstall\fR \-\- uninstall a package programmatically
+.
+.SH "SYNOPSIS"
+.
+.nf
+npm\.commands\.uninstall(packages, callback)
+.
+.fi
+.
+.SH "DESCRIPTION"
+This acts much the same ways as uninstalling on the command\-line\.
+.
+.P
+The \'packages\' parameter is an array of strings\. Each element in the array is
+the name of a package to be uninstalled\.
+.
+.P
+Finally, \'callback\' is a function that will be called when all packages have been
+uninstalled or when an error has been encountered\.
diff --git a/deps/npm/man/man3/npm-unpublish.3 b/deps/npm/man/man3/npm-unpublish.3
new file mode 100644
index 000000000..00711d492
--- /dev/null
+++ b/deps/npm/man/man3/npm-unpublish.3
@@ -0,0 +1,30 @@
+.\" Generated with Ronnjs 0.3.8
+.\" http://github.com/kapouer/ronnjs/
+.
+.TH "NPM\-UNPUBLISH" "3" "May 2014" "" ""
+.
+.SH "NAME"
+\fBnpm-unpublish\fR \-\- Remove a package from the registry
+.
+.SH "SYNOPSIS"
+.
+.nf
+npm\.commands\.unpublish(package, callback)
+.
+.fi
+.
+.SH "DESCRIPTION"
+This removes a package version from the registry, deleting its
+entry and removing the tarball\.
+.
+.P
+The package parameter must be defined\.
+.
+.P
+Only the first element in the package parameter is used\. If there is no first
+element, then npm assumes that the package at the current working directory
+is what is meant\.
+.
+.P
+If no version is specified, or if all versions are removed then
+the root package entry is removed from the registry entirely\.
diff --git a/deps/npm/man/man3/npm-update.3 b/deps/npm/man/man3/npm-update.3
new file mode 100644
index 000000000..fccf96f3a
--- /dev/null
+++ b/deps/npm/man/man3/npm-update.3
@@ -0,0 +1,18 @@
+.\" Generated with Ronnjs 0.3.8
+.\" http://github.com/kapouer/ronnjs/
+.
+.TH "NPM\-UPDATE" "3" "May 2014" "" ""
+.
+.SH "NAME"
+\fBnpm-update\fR \-\- Update a package
+.
+.SH "SYNOPSIS"
+.
+.nf
+npm\.commands\.update(packages, callback)
+.
+.fi
+Updates a package, upgrading it to the latest version\. It also installs any missing packages\.
+.
+.P
+The \'packages\' argument is an array of packages to update\. The \'callback\' parameter will be called when done or when an error occurs\.
diff --git a/deps/npm/man/man3/npm-version.3 b/deps/npm/man/man3/npm-version.3
new file mode 100644
index 000000000..757a2d11d
--- /dev/null
+++ b/deps/npm/man/man3/npm-version.3
@@ -0,0 +1,27 @@
+.\" Generated with Ronnjs 0.3.8
+.\" http://github.com/kapouer/ronnjs/
+.
+.TH "NPM\-VERSION" "3" "May 2014" "" ""
+.
+.SH "NAME"
+\fBnpm-version\fR \-\- Bump a package version
+.
+.SH "SYNOPSIS"
+.
+.nf
+npm\.commands\.version(newversion, callback)
+.
+.fi
+.
+.SH "DESCRIPTION"
+Run this in a package directory to bump the version and write the new
+data back to the package\.json file\.
+.
+.P
+If run in a git repo, it will also create a version commit and tag, and
+fail if the repo is not clean\.
+.
+.P
+Like all other commands, this function takes a string array as its first
+parameter\. The difference, however, is this function will fail if it does
+not have exactly one element\. The only element should be a version number\.
diff --git a/deps/npm/man/man3/npm-view.3 b/deps/npm/man/man3/npm-view.3
new file mode 100644
index 000000000..d5c9e8017
--- /dev/null
+++ b/deps/npm/man/man3/npm-view.3
@@ -0,0 +1,176 @@
+.\" Generated with Ronnjs 0.3.8
+.\" http://github.com/kapouer/ronnjs/
+.
+.TH "NPM\-VIEW" "3" "May 2014" "" ""
+.
+.SH "NAME"
+\fBnpm-view\fR \-\- View registry info
+.
+.SH "SYNOPSIS"
+.
+.nf
+npm\.commands\.view(args, [silent,] callback)
+.
+.fi
+.
+.SH "DESCRIPTION"
+This command shows data about a package and prints it to the stream
+referenced by the \fBoutfd\fR config, which defaults to stdout\.
+.
+.P
+The "args" parameter is an ordered list that closely resembles the command\-line
+usage\. The elements should be ordered such that the first element is
+the package and version (package@version)\. The version is optional\. After that,
+the rest of the parameters are fields with optional subfields ("field\.subfield")
+which can be used to get only the information desired from the registry\.
+.
+.P
+The callback will be passed all of the data returned by the query\.
+.
+.P
+For example, to get the package registry entry for the \fBconnect\fR package,
+you can do this:
+.
+.IP "" 4
+.
+.nf
+npm\.commands\.view(["connect"], callback)
+.
+.fi
+.
+.IP "" 0
+.
+.P
+If no version is specified, "latest" is assumed\.
+.
+.P
+Field names can be specified after the package descriptor\.
+For example, to show the dependencies of the \fBronn\fR package at version
+0\.3\.5, you could do the following:
+.
+.IP "" 4
+.
+.nf
+npm\.commands\.view(["ronn@0\.3\.5", "dependencies"], callback)
+.
+.fi
+.
+.IP "" 0
+.
+.P
+You can view child field by separating them with a period\.
+To view the git repository URL for the latest version of npm, you could
+do this:
+.
+.IP "" 4
+.
+.nf
+npm\.commands\.view(["npm", "repository\.url"], callback)
+.
+.fi
+.
+.IP "" 0
+.
+.P
+For fields that are arrays, requesting a non\-numeric field will return
+all of the values from the objects in the list\. For example, to get all
+the contributor names for the "express" project, you can do this:
+.
+.IP "" 4
+.
+.nf
+npm\.commands\.view(["express", "contributors\.email"], callback)
+.
+.fi
+.
+.IP "" 0
+.
+.P
+You may also use numeric indices in square braces to specifically select
+an item in an array field\. To just get the email address of the first
+contributor in the list, you can do this:
+.
+.IP "" 4
+.
+.nf
+npm\.commands\.view(["express", "contributors[0]\.email"], callback)
+.
+.fi
+.
+.IP "" 0
+.
+.P
+Multiple fields may be specified, and will be printed one after another\.
+For exampls, to get all the contributor names and email addresses, you
+can do this:
+.
+.IP "" 4
+.
+.nf
+npm\.commands\.view(["express", "contributors\.name", "contributors\.email"], callback)
+.
+.fi
+.
+.IP "" 0
+.
+.P
+"Person" fields are shown as a string if they would be shown as an
+object\. So, for example, this will show the list of npm contributors in
+the shortened string format\. (See \fBnpm help json\fR for more on this\.)
+.
+.IP "" 4
+.
+.nf
+npm\.commands\.view(["npm", "contributors"], callback)
+.
+.fi
+.
+.IP "" 0
+.
+.P
+If a version range is provided, then data will be printed for every
+matching version of the package\. This will show which version of jsdom
+was required by each matching version of yui3:
+.
+.IP "" 4
+.
+.nf
+npm\.commands\.view(["yui3@\'>0\.5\.4\'", "dependencies\.jsdom"], callback)
+.
+.fi
+.
+.IP "" 0
+.
+.SH "OUTPUT"
+If only a single string field for a single version is output, then it
+will not be colorized or quoted, so as to enable piping the output to
+another command\.
+.
+.P
+If the version range matches multiple versions, than each printed value
+will be prefixed with the version it applies to\.
+.
+.P
+If multiple fields are requested, than each of them are prefixed with
+the field name\.
+.
+.P
+Console output can be disabled by setting the \'silent\' parameter to true\.
+.
+.SH "RETURN VALUE"
+The data returned will be an object in this formation:
+.
+.IP "" 4
+.
+.nf
+{ <version>:
+ { <field>: <value>
+ , \.\.\. }
+, \.\.\. }
+.
+.fi
+.
+.IP "" 0
+.
+.P
+corresponding to the list of fields selected\.
diff --git a/deps/npm/man/man3/npm-whoami.3 b/deps/npm/man/man3/npm-whoami.3
new file mode 100644
index 000000000..c24fae9f4
--- /dev/null
+++ b/deps/npm/man/man3/npm-whoami.3
@@ -0,0 +1,24 @@
+.\" Generated with Ronnjs 0.3.8
+.\" http://github.com/kapouer/ronnjs/
+.
+.TH "NPM\-WHOAMI" "3" "May 2014" "" ""
+.
+.SH "NAME"
+\fBnpm-whoami\fR \-\- Display npm username
+.
+.SH "SYNOPSIS"
+.
+.nf
+npm\.commands\.whoami(args, callback)
+.
+.fi
+.
+.SH "DESCRIPTION"
+Print the \fBusername\fR config to standard output\.
+.
+.P
+\'args\' is never used and callback is never called with data\.
+\'args\' must be present or things will break\.
+.
+.P
+This function is not useful programmatically
diff --git a/deps/npm/man/man3/npm.3 b/deps/npm/man/man3/npm.3
index 27bfe8a5f..d7f2ad3c8 100644
--- a/deps/npm/man/man3/npm.3
+++ b/deps/npm/man/man3/npm.3
@@ -1,7 +1,7 @@
.\" Generated with Ronnjs 0.3.8
.\" http://github.com/kapouer/ronnjs/
.
-.TH "NPM" "3" "June 2013" "" ""
+.TH "NPM" "3" "May 2014" "" ""
.
.SH "NAME"
\fBnpm\fR \-\- node package manager
@@ -10,7 +10,7 @@
.
.nf
var npm = require("npm")
-npm\.load([configObject,] function (er, npm) {
+npm\.load([configObject, ]function (er, npm) {
// use the npm object, now that it\'s loaded\.
npm\.config\.set(key, val)
val = npm\.config\.get(key)
@@ -21,12 +21,12 @@ npm\.load([configObject,] function (er, npm) {
.fi
.
.SH "VERSION"
-1.2.30
+1.4.10
.
.SH "DESCRIPTION"
This is the API documentation for npm\.
To find documentation of the command line
-client, see \fBnpm help npm\fR\|\.
+npm help client, see \fBnpm\fR\|\.
.
.P
Prior to using npm\'s commands, \fBnpm\.load()\fR must be called\.
@@ -34,12 +34,11 @@ If you provide \fBconfigObject\fR as an object hash of top\-level
configs, they override the values stored in the various config
locations\. In the npm command line client, this set of configs
is parsed from the command line options\. Additional configuration
-params are loaded from two configuration files\. See \fBnpm help config\fR
-for more information\.
+npm help npm help params are loaded from two configuration files\. See \fBnpm\-config\fR, \fBnpm\-confignpm help \fR, and \fBnpmrc\fR for more information\.
.
.P
After that, each of the functions are accessible in the
-commands object: \fBnpm\.commands\.<cmd>\fR\|\. See \fBnpm help index\fR for a list of
+npm help commands object: \fBnpm\.commands\.<cmd>\fR\|\. See \fBnpm\-index\fR for a list of
all possible commands\.
.
.P
diff --git a/deps/npm/man/man3/outdated.3 b/deps/npm/man/man3/outdated.3
deleted file mode 100644
index ef48d624a..000000000
--- a/deps/npm/man/man3/outdated.3
+++ /dev/null
@@ -1,21 +0,0 @@
-.\" Generated with Ronnjs 0.3.8
-.\" http://github.com/kapouer/ronnjs/
-.
-.TH "NPM\-OUTDATED" "3" "June 2013" "" ""
-.
-.SH "NAME"
-\fBnpm-outdated\fR \-\- Check for outdated packages
-.
-.SH "SYNOPSIS"
-.
-.nf
-npm\.commands\.outdated([packages,] callback)
-.
-.fi
-.
-.SH "DESCRIPTION"
-This command will check the registry to see if the specified packages are
-currently outdated\.
-.
-.P
-If the \'packages\' parameter is left out, npm will check all packages\.
diff --git a/deps/npm/man/man3/owner.3 b/deps/npm/man/man3/owner.3
deleted file mode 100644
index 7d7a2aa05..000000000
--- a/deps/npm/man/man3/owner.3
+++ /dev/null
@@ -1,52 +0,0 @@
-.\" Generated with Ronnjs 0.3.8
-.\" http://github.com/kapouer/ronnjs/
-.
-.TH "NPM\-OWNER" "3" "June 2013" "" ""
-.
-.SH "NAME"
-\fBnpm-owner\fR \-\- Manage package owners
-.
-.SH "SYNOPSIS"
-.
-.nf
-npm\.commands\.owner(args, callback)
-.
-.fi
-.
-.SH "DESCRIPTION"
-The first element of the \'args\' parameter defines what to do, and the subsequent
-elements depend on the action\. Possible values for the action are (order of
-parameters are given in parenthesis):
-.
-.IP "\(bu" 4
-ls (package):
-List all the users who have access to modify a package and push new versions\.
-Handy when you need to know who to bug for help\.
-.
-.IP "\(bu" 4
-add (user, package):
-Add a new user as a maintainer of a package\. This user is enabled to modify
-metadata, publish new versions, and add other owners\.
-.
-.IP "\(bu" 4
-rm (user, package):
-Remove a user from the package owner list\. This immediately revokes their
-privileges\.
-.
-.IP "" 0
-.
-.P
-Note that there is only one level of access\. Either you can modify a package,
-or you can\'t\. Future versions may contain more fine\-grained access levels, but
-that is not implemented at this time\.
-.
-.SH "SEE ALSO"
-.
-.IP "\(bu" 4
-npm apihelp publish
-.
-.IP "\(bu" 4
-npm help registry
-.
-.IP "" 0
-
diff --git a/deps/npm/man/man3/pack.3 b/deps/npm/man/man3/pack.3
deleted file mode 100644
index fae21ad70..000000000
--- a/deps/npm/man/man3/pack.3
+++ /dev/null
@@ -1,28 +0,0 @@
-.\" Generated with Ronnjs 0.3.8
-.\" http://github.com/kapouer/ronnjs/
-.
-.TH "NPM\-PACK" "3" "June 2013" "" ""
-.
-.SH "NAME"
-\fBnpm-pack\fR \-\- Create a tarball from a package
-.
-.SH "SYNOPSIS"
-.
-.nf
-npm\.commands\.pack([packages,] callback)
-.
-.fi
-.
-.SH "DESCRIPTION"
-For anything that\'s installable (that is, a package folder, tarball,
-tarball url, name@tag, name@version, or name), this command will fetch
-it to the cache, and then copy the tarball to the current working
-directory as \fB<name>\-<version>\.tgz\fR, and then write the filenames out to
-stdout\.
-.
-.P
-If the same package is specified multiple times, then the file will be
-overwritten the second time\.
-.
-.P
-If no arguments are supplied, then npm packs the current package folder\.
diff --git a/deps/npm/man/man3/prefix.3 b/deps/npm/man/man3/prefix.3
deleted file mode 100644
index 34f682499..000000000
--- a/deps/npm/man/man3/prefix.3
+++ /dev/null
@@ -1,24 +0,0 @@
-.\" Generated with Ronnjs 0.3.8
-.\" http://github.com/kapouer/ronnjs/
-.
-.TH "NPM\-PREFIX" "3" "June 2013" "" ""
-.
-.SH "NAME"
-\fBnpm-prefix\fR \-\- Display prefix
-.
-.SH "SYNOPSIS"
-.
-.nf
-npm\.commands\.prefix(args, callback)
-.
-.fi
-.
-.SH "DESCRIPTION"
-Print the prefix to standard out\.
-.
-.P
-\'args\' is never used and callback is never called with data\.
-\'args\' must be present or things will break\.
-.
-.P
-This function is not useful programmatically
diff --git a/deps/npm/man/man3/prune.3 b/deps/npm/man/man3/prune.3
deleted file mode 100644
index 6999ed3e5..000000000
--- a/deps/npm/man/man3/prune.3
+++ /dev/null
@@ -1,27 +0,0 @@
-.\" Generated with Ronnjs 0.3.8
-.\" http://github.com/kapouer/ronnjs/
-.
-.TH "NPM\-PRUNE" "3" "June 2013" "" ""
-.
-.SH "NAME"
-\fBnpm-prune\fR \-\- Remove extraneous packages
-.
-.SH "SYNOPSIS"
-.
-.nf
-npm\.commands\.prune([packages,] callback)
-.
-.fi
-.
-.SH "DESCRIPTION"
-This command removes "extraneous" packages\.
-.
-.P
-The first parameter is optional, and it specifies packages to be removed\.
-.
-.P
-No packages are specified, then all packages will be checked\.
-.
-.P
-Extraneous packages are packages that are not listed on the parent
-package\'s dependencies list\.
diff --git a/deps/npm/man/man3/publish.3 b/deps/npm/man/man3/publish.3
deleted file mode 100644
index c49df8d51..000000000
--- a/deps/npm/man/man3/publish.3
+++ /dev/null
@@ -1,51 +0,0 @@
-.\" Generated with Ronnjs 0.3.8
-.\" http://github.com/kapouer/ronnjs/
-.
-.TH "NPM\-PUBLISH" "3" "June 2013" "" ""
-.
-.SH "NAME"
-\fBnpm-publish\fR \-\- Publish a package
-.
-.SH "SYNOPSIS"
-.
-.nf
-npm\.commands\.publish([packages,] callback)
-.
-.fi
-.
-.SH "DESCRIPTION"
-Publishes a package to the registry so that it can be installed by name\.
-Possible values in the \'packages\' array are:
-.
-.IP "\(bu" 4
-\fB<folder>\fR:
-A folder containing a package\.json file
-.
-.IP "\(bu" 4
-\fB<tarball>\fR:
-A url or file path to a gzipped tar archive containing a single folder
-with a package\.json file inside\.
-.
-.IP "" 0
-.
-.P
-If the package array is empty, npm will try to publish something in the
-current working directory\.
-.
-.P
-This command could fails if one of the packages specified already exists in
-the registry\. Overwrites when the "force" environment variable is set\.
-.
-.SH "SEE ALSO"
-.
-.IP "\(bu" 4
-npm help registry
-.
-.IP "\(bu" 4
-npm help adduser
-.
-.IP "\(bu" 4
-npm apihelp owner
-.
-.IP "" 0
-
diff --git a/deps/npm/man/man3/rebuild.3 b/deps/npm/man/man3/rebuild.3
deleted file mode 100644
index 275018a79..000000000
--- a/deps/npm/man/man3/rebuild.3
+++ /dev/null
@@ -1,22 +0,0 @@
-.\" Generated with Ronnjs 0.3.8
-.\" http://github.com/kapouer/ronnjs/
-.
-.TH "NPM\-REBUILD" "3" "June 2013" "" ""
-.
-.SH "NAME"
-\fBnpm-rebuild\fR \-\- Rebuild a package
-.
-.SH "SYNOPSIS"
-.
-.nf
-npm\.commands\.rebuild([packages,] callback)
-.
-.fi
-.
-.SH "DESCRIPTION"
-This command runs the \fBnpm build\fR command on each of the matched packages\. This is useful
-when you install a new version of node, and must recompile all your C++ addons with
-the new binary\. If no \'packages\' parameter is specify, every package will be rebuilt\.
-.
-.SH "CONFIGURATION"
-See \fBnpm help build\fR
diff --git a/deps/npm/man/man3/restart.3 b/deps/npm/man/man3/restart.3
deleted file mode 100644
index 74a0831a0..000000000
--- a/deps/npm/man/man3/restart.3
+++ /dev/null
@@ -1,37 +0,0 @@
-.\" Generated with Ronnjs 0.3.8
-.\" http://github.com/kapouer/ronnjs/
-.
-.TH "NPM\-RESTART" "3" "June 2013" "" ""
-.
-.SH "NAME"
-\fBnpm-restart\fR \-\- Start a package
-.
-.SH "SYNOPSIS"
-.
-.nf
-npm\.commands\.restart(packages, callback)
-.
-.fi
-.
-.SH "DESCRIPTION"
-This runs a package\'s "restart" script, if one was provided\.
-Otherwise it runs package\'s "stop" script, if one was provided, and then
-the "start" script\.
-.
-.P
-If no version is specified, then it restarts the "active" version\.
-.
-.P
-npm can run tests on multiple packages\. Just specify multiple packages
-in the \fBpackages\fR parameter\.
-.
-.SH "SEE ALSO"
-.
-.IP "\(bu" 4
-npm apihelp start
-.
-.IP "\(bu" 4
-npm apihelp stop
-.
-.IP "" 0
-
diff --git a/deps/npm/man/man3/rm.3 b/deps/npm/man/man3/rm.3
deleted file mode 100644
index 07baafa87..000000000
--- a/deps/npm/man/man3/rm.3
+++ /dev/null
@@ -1,25 +0,0 @@
-.\" Generated with Ronnjs/v0.1
-.\" http://github.com/kapouer/ronnjs/
-.
-.TH "NPM\-UNINSTALL" "3" "November 2011" "" ""
-.
-.SH "NAME"
-\fBnpm-uninstall\fR \-\- uninstall a package programmatically
-.
-.SH "SYNOPSIS"
-.
-.nf
-npm\.commands\.uninstall(packages, callback)
-.
-.fi
-.
-.SH "DESCRIPTION"
-This acts much the same ways as uninstalling on the command\-line\.
-.
-.P
-The \'packages\' parameter is an array of strings\. Each element in the array is
-the name of a package to be uninstalled\.
-.
-.P
-Finally, \'callback\' is a function that will be called when all packages have been
-uninstalled or when an error has been encountered\.
diff --git a/deps/npm/man/man3/root.3 b/deps/npm/man/man3/root.3
deleted file mode 100644
index 0f9044dc7..000000000
--- a/deps/npm/man/man3/root.3
+++ /dev/null
@@ -1,24 +0,0 @@
-.\" Generated with Ronnjs 0.3.8
-.\" http://github.com/kapouer/ronnjs/
-.
-.TH "NPM\-ROOT" "3" "June 2013" "" ""
-.
-.SH "NAME"
-\fBnpm-root\fR \-\- Display npm root
-.
-.SH "SYNOPSIS"
-.
-.nf
-npm\.commands\.root(args, callback)
-.
-.fi
-.
-.SH "DESCRIPTION"
-Print the effective \fBnode_modules\fR folder to standard out\.
-.
-.P
-\'args\' is never used and callback is never called with data\.
-\'args\' must be present or things will break\.
-.
-.P
-This function is not useful programmatically\.
diff --git a/deps/npm/man/man3/run-script.3 b/deps/npm/man/man3/run-script.3
deleted file mode 100644
index 3207c97d8..000000000
--- a/deps/npm/man/man3/run-script.3
+++ /dev/null
@@ -1,48 +0,0 @@
-.\" Generated with Ronnjs 0.3.8
-.\" http://github.com/kapouer/ronnjs/
-.
-.TH "NPM\-RUN\-SCRIPT" "3" "June 2013" "" ""
-.
-.SH "NAME"
-\fBnpm-run-script\fR \-\- Run arbitrary package scripts
-.
-.SH "SYNOPSIS"
-.
-.nf
-npm\.commands\.run\-script(args, callback)
-.
-.fi
-.
-.SH "DESCRIPTION"
-This runs an arbitrary command from a package\'s "scripts" object\.
-.
-.P
-It is used by the test, start, restart, and stop commands, but can be
-called directly, as well\.
-.
-.P
-The \'args\' parameter is an array of strings\. Behavior depends on the number
-of elements\. If there is only one element, npm assumes that the element
-represents a command to be run on the local repository\. If there is more than
-one element, then the first is assumed to be the package and the second is
-assumed to be the command to run\. All other elements are ignored\.
-.
-.SH "SEE ALSO"
-.
-.IP "\(bu" 4
-npm help scripts
-.
-.IP "\(bu" 4
-npm apihelp test
-.
-.IP "\(bu" 4
-npm apihelp start
-.
-.IP "\(bu" 4
-npm apihelp restart
-.
-.IP "\(bu" 4
-npm apihelp stop
-.
-.IP "" 0
-
diff --git a/deps/npm/man/man3/search.3 b/deps/npm/man/man3/search.3
deleted file mode 100644
index 0a18fe9db..000000000
--- a/deps/npm/man/man3/search.3
+++ /dev/null
@@ -1,64 +0,0 @@
-.\" Generated with Ronnjs 0.3.8
-.\" http://github.com/kapouer/ronnjs/
-.
-.TH "NPM\-SEARCH" "3" "June 2013" "" ""
-.
-.SH "NAME"
-\fBnpm-search\fR \-\- Search for packages
-.
-.SH "SYNOPSIS"
-.
-.nf
-npm\.commands\.search(searchTerms, [silent,] [staleness,] callback)
-.
-.fi
-.
-.SH "DESCRIPTION"
-Search the registry for packages matching the search terms\. The available parameters are:
-.
-.IP "\(bu" 4
-searchTerms:
-Array of search terms\. These terms are case\-insensitive\.
-.
-.IP "\(bu" 4
-silent:
-If true, npm will not log anything to the console\.
-.
-.IP "\(bu" 4
-staleness:
-This is the threshold for stale packages\. "Fresh" packages are not refreshed
-from the registry\. This value is measured in seconds\.
-.
-.IP "\(bu" 4
-callback:
-Returns an object where each key is the name of a package, and the value
-is information about that package along with a \'words\' property, which is
-a space\-delimited string of all of the interesting words in that package\.
-The only properties included are those that are searched, which generally include:
-.
-.IP "\(bu" 4
-name
-.
-.IP "\(bu" 4
-description
-.
-.IP "\(bu" 4
-maintainers
-.
-.IP "\(bu" 4
-url
-.
-.IP "\(bu" 4
-keywords
-.
-.IP "" 0
-
-.
-.IP "" 0
-.
-.P
-A search on the registry excludes any result that does not match all of the
-search terms\. It also removes any items from the results that contain an
-excluded term (the "searchexclude" config)\. The search is case insensitive
-and doesn\'t try to read your mind (it doesn\'t do any verb tense matching or the
-like)\.
diff --git a/deps/npm/man/man3/set.3 b/deps/npm/man/man3/set.3
deleted file mode 100644
index 548f4bb9c..000000000
--- a/deps/npm/man/man3/set.3
+++ /dev/null
@@ -1,69 +0,0 @@
-.\" Generated with Ronnjs/v0.1
-.\" http://github.com/kapouer/ronnjs/
-.
-.TH "NPM\-CONFIG" "3" "November 2011" "" ""
-.
-.SH "NAME"
-\fBnpm-config\fR \-\- Manage the npm configuration files
-.
-.SH "SYNOPSIS"
-.
-.nf
-npm\.commands\.config(args, callback)
-var val = npm\.config\.get(key)
-npm\.config\.set(key, val)
-.
-.fi
-.
-.SH "DESCRIPTION"
-This function acts much the same way as the command\-line version\. The first
-element in the array tells config what to do\. Possible values are:
-.
-.IP "\(bu" 4
-\fBset\fR
-.
-.IP
-Sets a config parameter\. The second element in \fBargs\fR is interpreted as the
-key, and the third element is interpreted as the value\.
-.
-.IP "\(bu" 4
-\fBget\fR
-.
-.IP
-Gets the value of a config parameter\. The second element in \fBargs\fR is the
-key to get the value of\.
-.
-.IP "\(bu" 4
-\fBdelete\fR (\fBrm\fR or \fBdel\fR)
-.
-.IP
-Deletes a parameter from the config\. The second element in \fBargs\fR is the
-key to delete\.
-.
-.IP "\(bu" 4
-\fBlist\fR (\fBls\fR)
-.
-.IP
-Show all configs that aren\'t secret\. No parameters necessary\.
-.
-.IP "\(bu" 4
-\fBedit\fR:
-.
-.IP
-Opens the config file in the default editor\. This command isn\'t very useful
-programmatically, but it is made available\.
-.
-.IP "" 0
-.
-.P
-To programmatically access npm configuration settings, or set them for
-the duration of a program, use the \fBnpm\.config\.set\fR and \fBnpm\.config\.get\fR
-functions instead\.
-.
-.SH "SEE ALSO"
-.
-.IP "\(bu" 4
-npm apihelp npm
-.
-.IP "" 0
-
diff --git a/deps/npm/man/man3/shrinkwrap.3 b/deps/npm/man/man3/shrinkwrap.3
deleted file mode 100644
index faee3d895..000000000
--- a/deps/npm/man/man3/shrinkwrap.3
+++ /dev/null
@@ -1,30 +0,0 @@
-.\" Generated with Ronnjs 0.3.8
-.\" http://github.com/kapouer/ronnjs/
-.
-.TH "NPM\-SHRINKWRAP" "3" "June 2013" "" ""
-.
-.SH "NAME"
-\fBnpm-shrinkwrap\fR \-\- programmatically generate package shrinkwrap file
-.
-.SH "SYNOPSIS"
-.
-.nf
-npm\.commands\.shrinkwrap(args, [silent,] callback)
-.
-.fi
-.
-.SH "DESCRIPTION"
-This acts much the same ways as shrinkwrapping on the command\-line\.
-.
-.P
-This command does not take any arguments, but \'args\' must be defined\.
-Beyond that, if any arguments are passed in, npm will politely warn that it
-does not take positional arguments\.
-.
-.P
-If the \'silent\' parameter is set to true, nothing will be output to the screen,
-but the shrinkwrap file will still be written\.
-.
-.P
-Finally, \'callback\' is a function that will be called when the shrinkwrap has
-been saved\.
diff --git a/deps/npm/man/man3/start.3 b/deps/npm/man/man3/start.3
deleted file mode 100644
index ae59112b5..000000000
--- a/deps/npm/man/man3/start.3
+++ /dev/null
@@ -1,21 +0,0 @@
-.\" Generated with Ronnjs 0.3.8
-.\" http://github.com/kapouer/ronnjs/
-.
-.TH "NPM\-START" "3" "June 2013" "" ""
-.
-.SH "NAME"
-\fBnpm-start\fR \-\- Start a package
-.
-.SH "SYNOPSIS"
-.
-.nf
-npm\.commands\.start(packages, callback)
-.
-.fi
-.
-.SH "DESCRIPTION"
-This runs a package\'s "start" script, if one was provided\.
-.
-.P
-npm can run tests on multiple packages\. Just specify multiple packages
-in the \fBpackages\fR parameter\.
diff --git a/deps/npm/man/man3/stop.3 b/deps/npm/man/man3/stop.3
deleted file mode 100644
index fec8b994a..000000000
--- a/deps/npm/man/man3/stop.3
+++ /dev/null
@@ -1,21 +0,0 @@
-.\" Generated with Ronnjs 0.3.8
-.\" http://github.com/kapouer/ronnjs/
-.
-.TH "NPM\-STOP" "3" "June 2013" "" ""
-.
-.SH "NAME"
-\fBnpm-stop\fR \-\- Stop a package
-.
-.SH "SYNOPSIS"
-.
-.nf
-npm\.commands\.stop(packages, callback)
-.
-.fi
-.
-.SH "DESCRIPTION"
-This runs a package\'s "stop" script, if one was provided\.
-.
-.P
-npm can run stop on multiple packages\. Just specify multiple packages
-in the \fBpackages\fR parameter\.
diff --git a/deps/npm/man/man3/submodule.3 b/deps/npm/man/man3/submodule.3
deleted file mode 100644
index 8e38c0299..000000000
--- a/deps/npm/man/man3/submodule.3
+++ /dev/null
@@ -1,42 +0,0 @@
-.\" Generated with Ronnjs 0.3.8
-.\" http://github.com/kapouer/ronnjs/
-.
-.TH "NPM\-SUBMODULE" "3" "June 2013" "" ""
-.
-.SH "NAME"
-\fBnpm-submodule\fR \-\- Add a package as a git submodule
-.
-.SH "SYNOPSIS"
-.
-.nf
-npm\.commands\.submodule(packages, callback)
-.
-.fi
-.
-.SH "DESCRIPTION"
-For each package specified, npm will check if it has a git repository url
-in its package\.json description then add it as a git submodule at \fBnode_modules/<pkg name>\fR\|\.
-.
-.P
-This is a convenience only\. From then on, it\'s up to you to manage
-updates by using the appropriate git commands\. npm will stubbornly
-refuse to update, modify, or remove anything with a \fB\|\.git\fR subfolder
-in it\.
-.
-.P
-This command also does not install missing dependencies, if the package
-does not include them in its git repository\. If \fBnpm ls\fR reports that
-things are missing, you can either install, link, or submodule them yourself,
-or you can do \fBnpm explore <pkgname> \-\- npm install\fR to install the
-dependencies into the submodule folder\.
-.
-.SH "SEE ALSO"
-.
-.IP "\(bu" 4
-npm help json
-.
-.IP "\(bu" 4
-git help submodule
-.
-.IP "" 0
-
diff --git a/deps/npm/man/man3/tag.3 b/deps/npm/man/man3/tag.3
deleted file mode 100644
index c6392ee48..000000000
--- a/deps/npm/man/man3/tag.3
+++ /dev/null
@@ -1,31 +0,0 @@
-.\" Generated with Ronnjs 0.3.8
-.\" http://github.com/kapouer/ronnjs/
-.
-.TH "NPM\-TAG" "3" "June 2013" "" ""
-.
-.SH "NAME"
-\fBnpm-tag\fR \-\- Tag a published version
-.
-.SH "SYNOPSIS"
-.
-.nf
-npm\.commands\.tag(package@version, tag, callback)
-.
-.fi
-.
-.SH "DESCRIPTION"
-Tags the specified version of the package with the specified tag, or the \fB\-\-tag\fR config if not specified\.
-.
-.P
-The \'package@version\' is an array of strings, but only the first two elements are
-currently used\.
-.
-.P
-The first element must be in the form package@version, where package
-is the package name and version is the version number (much like installing a
-specific version)\.
-.
-.P
-The second element is the name of the tag to tag this version with\. If this
-parameter is missing or falsey (empty), the default froom the config will be
-used\. For more information about how to set this config, check \fBman 3 npm\-config\fR for programmatic usage or \fBman npm\-config\fR for cli usage\.
diff --git a/deps/npm/man/man3/test.3 b/deps/npm/man/man3/test.3
deleted file mode 100644
index 7c09677b1..000000000
--- a/deps/npm/man/man3/test.3
+++ /dev/null
@@ -1,25 +0,0 @@
-.\" Generated with Ronnjs 0.3.8
-.\" http://github.com/kapouer/ronnjs/
-.
-.TH "NPM\-TEST" "3" "June 2013" "" ""
-.
-.SH "NAME"
-\fBnpm-test\fR \-\- Test a package
-.
-.SH "SYNOPSIS"
-.
-.nf
- npm\.commands\.test(packages, callback)
-.
-.fi
-.
-.SH "DESCRIPTION"
-This runs a package\'s "test" script, if one was provided\.
-.
-.P
-To run tests as a condition of installation, set the \fBnpat\fR config to
-true\.
-.
-.P
-npm can run tests on multiple packages\. Just specify multiple packages
-in the \fBpackages\fR parameter\.
diff --git a/deps/npm/man/man3/uninstall.3 b/deps/npm/man/man3/uninstall.3
deleted file mode 100644
index eaad18bfe..000000000
--- a/deps/npm/man/man3/uninstall.3
+++ /dev/null
@@ -1,25 +0,0 @@
-.\" Generated with Ronnjs 0.3.8
-.\" http://github.com/kapouer/ronnjs/
-.
-.TH "NPM\-UNINSTALL" "3" "June 2013" "" ""
-.
-.SH "NAME"
-\fBnpm-uninstall\fR \-\- uninstall a package programmatically
-.
-.SH "SYNOPSIS"
-.
-.nf
-npm\.commands\.uninstall(packages, callback)
-.
-.fi
-.
-.SH "DESCRIPTION"
-This acts much the same ways as uninstalling on the command\-line\.
-.
-.P
-The \'packages\' parameter is an array of strings\. Each element in the array is
-the name of a package to be uninstalled\.
-.
-.P
-Finally, \'callback\' is a function that will be called when all packages have been
-uninstalled or when an error has been encountered\.
diff --git a/deps/npm/man/man3/unpublish.3 b/deps/npm/man/man3/unpublish.3
deleted file mode 100644
index 739e74e73..000000000
--- a/deps/npm/man/man3/unpublish.3
+++ /dev/null
@@ -1,30 +0,0 @@
-.\" Generated with Ronnjs 0.3.8
-.\" http://github.com/kapouer/ronnjs/
-.
-.TH "NPM\-UNPUBLISH" "3" "June 2013" "" ""
-.
-.SH "NAME"
-\fBnpm-unpublish\fR \-\- Remove a package from the registry
-.
-.SH "SYNOPSIS"
-.
-.nf
-npm\.commands\.unpublish(package, callback)
-.
-.fi
-.
-.SH "DESCRIPTION"
-This removes a package version from the registry, deleting its
-entry and removing the tarball\.
-.
-.P
-The package parameter must be defined\.
-.
-.P
-Only the first element in the package parameter is used\. If there is no first
-element, then npm assumes that the package at the current working directory
-is what is meant\.
-.
-.P
-If no version is specified, or if all versions are removed then
-the root package entry is removed from the registry entirely\.
diff --git a/deps/npm/man/man3/update.3 b/deps/npm/man/man3/update.3
deleted file mode 100644
index 35f1ef5bc..000000000
--- a/deps/npm/man/man3/update.3
+++ /dev/null
@@ -1,18 +0,0 @@
-.\" Generated with Ronnjs 0.3.8
-.\" http://github.com/kapouer/ronnjs/
-.
-.TH "NPM\-UPDATE" "3" "June 2013" "" ""
-.
-.SH "NAME"
-\fBnpm-update\fR \-\- Update a package
-.
-.SH "SYNOPSIS"
-.
-.nf
-npm\.commands\.update(packages, callback)
-.
-.fi
-Updates a package, upgrading it to the latest version\. It also installs any missing packages\.
-.
-.P
-The \'packages\' argument is an array of packages to update\. The \'callback\' parameter will be called when done or when an error occurs\.
diff --git a/deps/npm/man/man3/version.3 b/deps/npm/man/man3/version.3
deleted file mode 100644
index 40666c9a4..000000000
--- a/deps/npm/man/man3/version.3
+++ /dev/null
@@ -1,27 +0,0 @@
-.\" Generated with Ronnjs 0.3.8
-.\" http://github.com/kapouer/ronnjs/
-.
-.TH "NPM\-VERSION" "3" "June 2013" "" ""
-.
-.SH "NAME"
-\fBnpm-version\fR \-\- Bump a package version
-.
-.SH "SYNOPSIS"
-.
-.nf
-npm\.commands\.version(newversion, callback)
-.
-.fi
-.
-.SH "DESCRIPTION"
-Run this in a package directory to bump the version and write the new
-data back to the package\.json file\.
-.
-.P
-If run in a git repo, it will also create a version commit and tag, and
-fail if the repo is not clean\.
-.
-.P
-Like all other commands, this function takes a string array as its first
-parameter\. The difference, however, is this function will fail if it does
-not have exactly one element\. The only element should be a version number\.
diff --git a/deps/npm/man/man3/view.3 b/deps/npm/man/man3/view.3
deleted file mode 100644
index b3c894292..000000000
--- a/deps/npm/man/man3/view.3
+++ /dev/null
@@ -1,176 +0,0 @@
-.\" Generated with Ronnjs 0.3.8
-.\" http://github.com/kapouer/ronnjs/
-.
-.TH "NPM\-VIEW" "3" "June 2013" "" ""
-.
-.SH "NAME"
-\fBnpm-view\fR \-\- View registry info
-.
-.SH "SYNOPSIS"
-.
-.nf
-npm\.commands\.view(args, [silent,] callback)
-.
-.fi
-.
-.SH "DESCRIPTION"
-This command shows data about a package and prints it to the stream
-referenced by the \fBoutfd\fR config, which defaults to stdout\.
-.
-.P
-The "args" parameter is an ordered list that closely resembles the command\-line
-usage\. The elements should be ordered such that the first element is
-the package and version (package@version)\. The version is optional\. After that,
-the rest of the parameters are fields with optional subfields ("field\.subfield")
-which can be used to get only the information desired from the registry\.
-.
-.P
-The callback will be passed all of the data returned by the query\.
-.
-.P
-For example, to get the package registry entry for the \fBconnect\fR package,
-you can do this:
-.
-.IP "" 4
-.
-.nf
-npm\.commands\.view(["connect"], callback)
-.
-.fi
-.
-.IP "" 0
-.
-.P
-If no version is specified, "latest" is assumed\.
-.
-.P
-Field names can be specified after the package descriptor\.
-For example, to show the dependencies of the \fBronn\fR package at version
-0\.3\.5, you could do the following:
-.
-.IP "" 4
-.
-.nf
-npm\.commands\.view(["ronn@0\.3\.5", "dependencies"], callback)
-.
-.fi
-.
-.IP "" 0
-.
-.P
-You can view child field by separating them with a period\.
-To view the git repository URL for the latest version of npm, you could
-do this:
-.
-.IP "" 4
-.
-.nf
-npm\.commands\.view(["npm", "repository\.url"], callback)
-.
-.fi
-.
-.IP "" 0
-.
-.P
-For fields that are arrays, requesting a non\-numeric field will return
-all of the values from the objects in the list\. For example, to get all
-the contributor names for the "express" project, you can do this:
-.
-.IP "" 4
-.
-.nf
-npm\.commands\.view(["express", "contributors\.email"], callback)
-.
-.fi
-.
-.IP "" 0
-.
-.P
-You may also use numeric indices in square braces to specifically select
-an item in an array field\. To just get the email address of the first
-contributor in the list, you can do this:
-.
-.IP "" 4
-.
-.nf
-npm\.commands\.view(["express", "contributors[0]\.email"], callback)
-.
-.fi
-.
-.IP "" 0
-.
-.P
-Multiple fields may be specified, and will be printed one after another\.
-For exampls, to get all the contributor names and email addresses, you
-can do this:
-.
-.IP "" 4
-.
-.nf
-npm\.commands\.view(["express", "contributors\.name", "contributors\.email"], callback)
-.
-.fi
-.
-.IP "" 0
-.
-.P
-"Person" fields are shown as a string if they would be shown as an
-object\. So, for example, this will show the list of npm contributors in
-the shortened string format\. (See \fBnpm help json\fR for more on this\.)
-.
-.IP "" 4
-.
-.nf
-npm\.commands\.view(["npm", "contributors"], callback)
-.
-.fi
-.
-.IP "" 0
-.
-.P
-If a version range is provided, then data will be printed for every
-matching version of the package\. This will show which version of jsdom
-was required by each matching version of yui3:
-.
-.IP "" 4
-.
-.nf
-npm\.commands\.view(["yui3@\'>0\.5\.4\'", "dependencies\.jsdom"], callback)
-.
-.fi
-.
-.IP "" 0
-.
-.SH "OUTPUT"
-If only a single string field for a single version is output, then it
-will not be colorized or quoted, so as to enable piping the output to
-another command\.
-.
-.P
-If the version range matches multiple versions, than each printed value
-will be prefixed with the version it applies to\.
-.
-.P
-If multiple fields are requested, than each of them are prefixed with
-the field name\.
-.
-.P
-Console output can be disabled by setting the \'silent\' parameter to true\.
-.
-.SH "RETURN VALUE"
-The data returned will be an object in this formation:
-.
-.IP "" 4
-.
-.nf
-{ <version>:
- { <field>: <value>
- , \.\.\. }
-, \.\.\. }
-.
-.fi
-.
-.IP "" 0
-.
-.P
-corresponding to the list of fields selected\.
diff --git a/deps/npm/man/man3/whoami.3 b/deps/npm/man/man3/whoami.3
deleted file mode 100644
index 7eccbab39..000000000
--- a/deps/npm/man/man3/whoami.3
+++ /dev/null
@@ -1,24 +0,0 @@
-.\" Generated with Ronnjs 0.3.8
-.\" http://github.com/kapouer/ronnjs/
-.
-.TH "NPM\-WHOAMI" "3" "June 2013" "" ""
-.
-.SH "NAME"
-\fBnpm-whoami\fR \-\- Display npm username
-.
-.SH "SYNOPSIS"
-.
-.nf
-npm\.commands\.whoami(args, callback)
-.
-.fi
-.
-.SH "DESCRIPTION"
-Print the \fBusername\fR config to standard output\.
-.
-.P
-\'args\' is never used and callback is never called with data\.
-\'args\' must be present or things will break\.
-.
-.P
-This function is not useful programmatically
diff --git a/deps/npm/man/man5/npm-folders.5 b/deps/npm/man/man5/npm-folders.5
new file mode 100644
index 000000000..982b0bc63
--- /dev/null
+++ b/deps/npm/man/man5/npm-folders.5
@@ -0,0 +1,264 @@
+.\" Generated with Ronnjs 0.3.8
+.\" http://github.com/kapouer/ronnjs/
+.
+.TH "NPM\-FOLDERS" "5" "May 2014" "" ""
+.
+.SH "NAME"
+\fBnpm-folders\fR \-\- Folder Structures Used by npm
+.
+.SH "DESCRIPTION"
+npm puts various things on your computer\. That\'s its job\.
+.
+.P
+This document will tell you what it puts where\.
+.
+.SS "tl;dr"
+.
+.IP "\(bu" 4
+Local install (default): puts stuff in \fB\|\./node_modules\fR of the current
+package root\.
+.
+.IP "\(bu" 4
+Global install (with \fB\-g\fR): puts stuff in /usr/local or wherever node
+is installed\.
+.
+.IP "\(bu" 4
+Install it \fBlocally\fR if you\'re going to \fBrequire()\fR it\.
+.
+.IP "\(bu" 4
+Install it \fBglobally\fR if you\'re going to run it on the command line\.
+.
+.IP "\(bu" 4
+If you need both, then install it in both places, or use \fBnpm link\fR\|\.
+.
+.IP "" 0
+.
+.SS "prefix Configuration"
+The \fBprefix\fR config defaults to the location where node is installed\.
+On most systems, this is \fB/usr/local\fR, and most of the time is the same
+as node\'s \fBprocess\.installPrefix\fR\|\.
+.
+.P
+On windows, this is the exact location of the node\.exe binary\. On Unix
+systems, it\'s one level up, since node is typically installed at \fB{prefix}/bin/node\fR rather than \fB{prefix}/node\.exe\fR\|\.
+.
+.P
+When the \fBglobal\fR flag is set, npm installs things into this prefix\.
+When it is not set, it uses the root of the current package, or the
+current working directory if not in a package already\.
+.
+.SS "Node Modules"
+Packages are dropped into the \fBnode_modules\fR folder under the \fBprefix\fR\|\.
+When installing locally, this means that you can \fBrequire("packagename")\fR to load its main module, or \fBrequire("packagename/lib/path/to/sub/module")\fR to load other modules\.
+.
+.P
+Global installs on Unix systems go to \fB{prefix}/lib/node_modules\fR\|\.
+Global installs on Windows go to \fB{prefix}/node_modules\fR (that is, no \fBlib\fR folder\.)
+.
+.P
+If you wish to \fBrequire()\fR a package, then install it locally\.
+.
+.SS "Executables"
+When in global mode, executables are linked into \fB{prefix}/bin\fR on Unix,
+or directly into \fB{prefix}\fR on Windows\.
+.
+.P
+When in local mode, executables are linked into \fB\|\./node_modules/\.bin\fR so that they can be made available to scripts run
+through npm\. (For example, so that a test runner will be in the path
+when you run \fBnpm test\fR\|\.)
+.
+.SS "Man Pages"
+When in global mode, man pages are linked into \fB{prefix}/share/man\fR\|\.
+.
+.P
+When in local mode, man pages are not installed\.
+.
+.P
+Man pages are not installed on Windows systems\.
+.
+.SS "Cache"
+npm help See \fBnpm\-cache\fR\|\. Cache files are stored in \fB~/\.npm\fR on Posix, or \fB~/npm\-cache\fR on Windows\.
+.
+.P
+This is controlled by the \fBcache\fR configuration param\.
+.
+.SS "Temp Files"
+Temporary files are stored by default in the folder specified by the \fBtmp\fR config, which defaults to the TMPDIR, TMP, or TEMP environment
+variables, or \fB/tmp\fR on Unix and \fBc:\\windows\\temp\fR on Windows\.
+.
+.P
+Temp files are given a unique folder under this root for each run of the
+program, and are deleted upon successful exit\.
+.
+.SH "More Information"
+When installing locally, npm first tries to find an appropriate \fBprefix\fR folder\. This is so that \fBnpm install foo@1\.2\.3\fR will install
+to the sensible root of your package, even if you happen to have \fBcd\fRed
+into some other folder\.
+.
+.P
+Starting at the $PWD, npm will walk up the folder tree checking for a
+folder that contains either a \fBpackage\.json\fR file, or a \fBnode_modules\fR
+folder\. If such a thing is found, then that is treated as the effective
+"current directory" for the purpose of running npm commands\. (This
+behavior is inspired by and similar to git\'s \.git\-folder seeking
+logic when running git commands in a working dir\.)
+.
+.P
+If no package root is found, then the current folder is used\.
+.
+.P
+When you run \fBnpm install foo@1\.2\.3\fR, then the package is loaded into
+the cache, and then unpacked into \fB\|\./node_modules/foo\fR\|\. Then, any of
+foo\'s dependencies are similarly unpacked into \fB\|\./node_modules/foo/node_modules/\.\.\.\fR\|\.
+.
+.P
+Any bin files are symlinked to \fB\|\./node_modules/\.bin/\fR, so that they may
+be found by npm scripts when necessary\.
+.
+.SS "Global Installation"
+If the \fBglobal\fR configuration is set to true, then npm will
+install packages "globally"\.
+.
+.P
+For global installation, packages are installed roughly the same way,
+but using the folders described above\.
+.
+.SS "Cycles, Conflicts, and Folder Parsimony"
+Cycles are handled using the property of node\'s module system that it
+walks up the directories looking for \fBnode_modules\fR folders\. So, at every
+stage, if a package is already installed in an ancestor \fBnode_modules\fR
+folder, then it is not installed at the current location\.
+.
+.P
+Consider the case above, where \fBfoo \-> bar \-> baz\fR\|\. Imagine if, in
+addition to that, baz depended on bar, so you\'d have: \fBfoo \-> bar \-> baz \-> bar \-> baz \.\.\.\fR\|\. However, since the folder
+structure is: \fBfoo/node_modules/bar/node_modules/baz\fR, there\'s no need to
+put another copy of bar into \fB\|\.\.\./baz/node_modules\fR, since when it calls
+require("bar"), it will get the copy that is installed in \fBfoo/node_modules/bar\fR\|\.
+.
+.P
+This shortcut is only used if the exact same
+version would be installed in multiple nested \fBnode_modules\fR folders\. It
+is still possible to have \fBa/node_modules/b/node_modules/a\fR if the two
+"a" packages are different versions\. However, without repeating the
+exact same package multiple times, an infinite regress will always be
+prevented\.
+.
+.P
+Another optimization can be made by installing dependencies at the
+highest level possible, below the localized "target" folder\.
+.
+.SS "\fIExample\fR"
+Consider this dependency graph:
+.
+.IP "" 4
+.
+.nf
+foo
++\-\- blerg@1\.2\.5
++\-\- bar@1\.2\.3
+| +\-\- blerg@1\.x (latest=1\.3\.7)
+| +\-\- baz@2\.x
+| | `\-\- quux@3\.x
+| | `\-\- bar@1\.2\.3 (cycle)
+| `\-\- asdf@*
+`\-\- baz@1\.2\.3
+ `\-\- quux@3\.x
+ `\-\- bar
+.
+.fi
+.
+.IP "" 0
+.
+.P
+In this case, we might expect a folder structure like this:
+.
+.IP "" 4
+.
+.nf
+foo
++\-\- node_modules
+ +\-\- blerg (1\.2\.5) <\-\-\-[A]
+ +\-\- bar (1\.2\.3) <\-\-\-[B]
+ | `\-\- node_modules
+ | +\-\- baz (2\.0\.2) <\-\-\-[C]
+ | | `\-\- node_modules
+ | | `\-\- quux (3\.2\.0)
+ | `\-\- asdf (2\.3\.4)
+ `\-\- baz (1\.2\.3) <\-\-\-[D]
+ `\-\- node_modules
+ `\-\- quux (3\.2\.0) <\-\-\-[E]
+.
+.fi
+.
+.IP "" 0
+.
+.P
+Since foo depends directly on \fBbar@1\.2\.3\fR and \fBbaz@1\.2\.3\fR, those are
+installed in foo\'s \fBnode_modules\fR folder\.
+.
+.P
+Even though the latest copy of blerg is 1\.3\.7, foo has a specific
+dependency on version 1\.2\.5\. So, that gets installed at [A]\. Since the
+parent installation of blerg satisfies bar\'s dependency on \fBblerg@1\.x\fR,
+it does not install another copy under [B]\.
+.
+.P
+Bar [B] also has dependencies on baz and asdf, so those are installed in
+bar\'s \fBnode_modules\fR folder\. Because it depends on \fBbaz@2\.x\fR, it cannot
+re\-use the \fBbaz@1\.2\.3\fR installed in the parent \fBnode_modules\fR folder [D],
+and must install its own copy [C]\.
+.
+.P
+Underneath bar, the \fBbaz \-> quux \-> bar\fR dependency creates a cycle\.
+However, because bar is already in quux\'s ancestry [B], it does not
+unpack another copy of bar into that folder\.
+.
+.P
+Underneath \fBfoo \-> baz\fR [D], quux\'s [E] folder tree is empty, because its
+dependency on bar is satisfied by the parent folder copy installed at [B]\.
+.
+.P
+For a graphical breakdown of what is installed where, use \fBnpm ls\fR\|\.
+.
+.SS "Publishing"
+Upon publishing, npm will look in the \fBnode_modules\fR folder\. If any of
+the items there are not in the \fBbundledDependencies\fR array, then they will
+not be included in the package tarball\.
+.
+.P
+This allows a package maintainer to install all of their dependencies
+(and dev dependencies) locally, but only re\-publish those items that
+npm help cannot be found elsewhere\. See \fBpackage\.json\fR for more information\.
+.
+.SH "SEE ALSO"
+.
+.IP "\(bu" 4
+npm help faq
+.
+.IP "\(bu" 4
+npm help package\.json
+.
+.IP "\(bu" 4
+npm help install
+.
+.IP "\(bu" 4
+npm help pack
+.
+.IP "\(bu" 4
+npm help cache
+.
+.IP "\(bu" 4
+npm help config
+.
+.IP "\(bu" 4
+npm help npmrc
+.
+.IP "\(bu" 4
+npm help config
+.
+.IP "\(bu" 4
+npm help publish
+.
+.IP "" 0
+
diff --git a/deps/npm/man/man5/npm-global.5 b/deps/npm/man/man5/npm-global.5
new file mode 100644
index 000000000..982b0bc63
--- /dev/null
+++ b/deps/npm/man/man5/npm-global.5
@@ -0,0 +1,264 @@
+.\" Generated with Ronnjs 0.3.8
+.\" http://github.com/kapouer/ronnjs/
+.
+.TH "NPM\-FOLDERS" "5" "May 2014" "" ""
+.
+.SH "NAME"
+\fBnpm-folders\fR \-\- Folder Structures Used by npm
+.
+.SH "DESCRIPTION"
+npm puts various things on your computer\. That\'s its job\.
+.
+.P
+This document will tell you what it puts where\.
+.
+.SS "tl;dr"
+.
+.IP "\(bu" 4
+Local install (default): puts stuff in \fB\|\./node_modules\fR of the current
+package root\.
+.
+.IP "\(bu" 4
+Global install (with \fB\-g\fR): puts stuff in /usr/local or wherever node
+is installed\.
+.
+.IP "\(bu" 4
+Install it \fBlocally\fR if you\'re going to \fBrequire()\fR it\.
+.
+.IP "\(bu" 4
+Install it \fBglobally\fR if you\'re going to run it on the command line\.
+.
+.IP "\(bu" 4
+If you need both, then install it in both places, or use \fBnpm link\fR\|\.
+.
+.IP "" 0
+.
+.SS "prefix Configuration"
+The \fBprefix\fR config defaults to the location where node is installed\.
+On most systems, this is \fB/usr/local\fR, and most of the time is the same
+as node\'s \fBprocess\.installPrefix\fR\|\.
+.
+.P
+On windows, this is the exact location of the node\.exe binary\. On Unix
+systems, it\'s one level up, since node is typically installed at \fB{prefix}/bin/node\fR rather than \fB{prefix}/node\.exe\fR\|\.
+.
+.P
+When the \fBglobal\fR flag is set, npm installs things into this prefix\.
+When it is not set, it uses the root of the current package, or the
+current working directory if not in a package already\.
+.
+.SS "Node Modules"
+Packages are dropped into the \fBnode_modules\fR folder under the \fBprefix\fR\|\.
+When installing locally, this means that you can \fBrequire("packagename")\fR to load its main module, or \fBrequire("packagename/lib/path/to/sub/module")\fR to load other modules\.
+.
+.P
+Global installs on Unix systems go to \fB{prefix}/lib/node_modules\fR\|\.
+Global installs on Windows go to \fB{prefix}/node_modules\fR (that is, no \fBlib\fR folder\.)
+.
+.P
+If you wish to \fBrequire()\fR a package, then install it locally\.
+.
+.SS "Executables"
+When in global mode, executables are linked into \fB{prefix}/bin\fR on Unix,
+or directly into \fB{prefix}\fR on Windows\.
+.
+.P
+When in local mode, executables are linked into \fB\|\./node_modules/\.bin\fR so that they can be made available to scripts run
+through npm\. (For example, so that a test runner will be in the path
+when you run \fBnpm test\fR\|\.)
+.
+.SS "Man Pages"
+When in global mode, man pages are linked into \fB{prefix}/share/man\fR\|\.
+.
+.P
+When in local mode, man pages are not installed\.
+.
+.P
+Man pages are not installed on Windows systems\.
+.
+.SS "Cache"
+npm help See \fBnpm\-cache\fR\|\. Cache files are stored in \fB~/\.npm\fR on Posix, or \fB~/npm\-cache\fR on Windows\.
+.
+.P
+This is controlled by the \fBcache\fR configuration param\.
+.
+.SS "Temp Files"
+Temporary files are stored by default in the folder specified by the \fBtmp\fR config, which defaults to the TMPDIR, TMP, or TEMP environment
+variables, or \fB/tmp\fR on Unix and \fBc:\\windows\\temp\fR on Windows\.
+.
+.P
+Temp files are given a unique folder under this root for each run of the
+program, and are deleted upon successful exit\.
+.
+.SH "More Information"
+When installing locally, npm first tries to find an appropriate \fBprefix\fR folder\. This is so that \fBnpm install foo@1\.2\.3\fR will install
+to the sensible root of your package, even if you happen to have \fBcd\fRed
+into some other folder\.
+.
+.P
+Starting at the $PWD, npm will walk up the folder tree checking for a
+folder that contains either a \fBpackage\.json\fR file, or a \fBnode_modules\fR
+folder\. If such a thing is found, then that is treated as the effective
+"current directory" for the purpose of running npm commands\. (This
+behavior is inspired by and similar to git\'s \.git\-folder seeking
+logic when running git commands in a working dir\.)
+.
+.P
+If no package root is found, then the current folder is used\.
+.
+.P
+When you run \fBnpm install foo@1\.2\.3\fR, then the package is loaded into
+the cache, and then unpacked into \fB\|\./node_modules/foo\fR\|\. Then, any of
+foo\'s dependencies are similarly unpacked into \fB\|\./node_modules/foo/node_modules/\.\.\.\fR\|\.
+.
+.P
+Any bin files are symlinked to \fB\|\./node_modules/\.bin/\fR, so that they may
+be found by npm scripts when necessary\.
+.
+.SS "Global Installation"
+If the \fBglobal\fR configuration is set to true, then npm will
+install packages "globally"\.
+.
+.P
+For global installation, packages are installed roughly the same way,
+but using the folders described above\.
+.
+.SS "Cycles, Conflicts, and Folder Parsimony"
+Cycles are handled using the property of node\'s module system that it
+walks up the directories looking for \fBnode_modules\fR folders\. So, at every
+stage, if a package is already installed in an ancestor \fBnode_modules\fR
+folder, then it is not installed at the current location\.
+.
+.P
+Consider the case above, where \fBfoo \-> bar \-> baz\fR\|\. Imagine if, in
+addition to that, baz depended on bar, so you\'d have: \fBfoo \-> bar \-> baz \-> bar \-> baz \.\.\.\fR\|\. However, since the folder
+structure is: \fBfoo/node_modules/bar/node_modules/baz\fR, there\'s no need to
+put another copy of bar into \fB\|\.\.\./baz/node_modules\fR, since when it calls
+require("bar"), it will get the copy that is installed in \fBfoo/node_modules/bar\fR\|\.
+.
+.P
+This shortcut is only used if the exact same
+version would be installed in multiple nested \fBnode_modules\fR folders\. It
+is still possible to have \fBa/node_modules/b/node_modules/a\fR if the two
+"a" packages are different versions\. However, without repeating the
+exact same package multiple times, an infinite regress will always be
+prevented\.
+.
+.P
+Another optimization can be made by installing dependencies at the
+highest level possible, below the localized "target" folder\.
+.
+.SS "\fIExample\fR"
+Consider this dependency graph:
+.
+.IP "" 4
+.
+.nf
+foo
++\-\- blerg@1\.2\.5
++\-\- bar@1\.2\.3
+| +\-\- blerg@1\.x (latest=1\.3\.7)
+| +\-\- baz@2\.x
+| | `\-\- quux@3\.x
+| | `\-\- bar@1\.2\.3 (cycle)
+| `\-\- asdf@*
+`\-\- baz@1\.2\.3
+ `\-\- quux@3\.x
+ `\-\- bar
+.
+.fi
+.
+.IP "" 0
+.
+.P
+In this case, we might expect a folder structure like this:
+.
+.IP "" 4
+.
+.nf
+foo
++\-\- node_modules
+ +\-\- blerg (1\.2\.5) <\-\-\-[A]
+ +\-\- bar (1\.2\.3) <\-\-\-[B]
+ | `\-\- node_modules
+ | +\-\- baz (2\.0\.2) <\-\-\-[C]
+ | | `\-\- node_modules
+ | | `\-\- quux (3\.2\.0)
+ | `\-\- asdf (2\.3\.4)
+ `\-\- baz (1\.2\.3) <\-\-\-[D]
+ `\-\- node_modules
+ `\-\- quux (3\.2\.0) <\-\-\-[E]
+.
+.fi
+.
+.IP "" 0
+.
+.P
+Since foo depends directly on \fBbar@1\.2\.3\fR and \fBbaz@1\.2\.3\fR, those are
+installed in foo\'s \fBnode_modules\fR folder\.
+.
+.P
+Even though the latest copy of blerg is 1\.3\.7, foo has a specific
+dependency on version 1\.2\.5\. So, that gets installed at [A]\. Since the
+parent installation of blerg satisfies bar\'s dependency on \fBblerg@1\.x\fR,
+it does not install another copy under [B]\.
+.
+.P
+Bar [B] also has dependencies on baz and asdf, so those are installed in
+bar\'s \fBnode_modules\fR folder\. Because it depends on \fBbaz@2\.x\fR, it cannot
+re\-use the \fBbaz@1\.2\.3\fR installed in the parent \fBnode_modules\fR folder [D],
+and must install its own copy [C]\.
+.
+.P
+Underneath bar, the \fBbaz \-> quux \-> bar\fR dependency creates a cycle\.
+However, because bar is already in quux\'s ancestry [B], it does not
+unpack another copy of bar into that folder\.
+.
+.P
+Underneath \fBfoo \-> baz\fR [D], quux\'s [E] folder tree is empty, because its
+dependency on bar is satisfied by the parent folder copy installed at [B]\.
+.
+.P
+For a graphical breakdown of what is installed where, use \fBnpm ls\fR\|\.
+.
+.SS "Publishing"
+Upon publishing, npm will look in the \fBnode_modules\fR folder\. If any of
+the items there are not in the \fBbundledDependencies\fR array, then they will
+not be included in the package tarball\.
+.
+.P
+This allows a package maintainer to install all of their dependencies
+(and dev dependencies) locally, but only re\-publish those items that
+npm help cannot be found elsewhere\. See \fBpackage\.json\fR for more information\.
+.
+.SH "SEE ALSO"
+.
+.IP "\(bu" 4
+npm help faq
+.
+.IP "\(bu" 4
+npm help package\.json
+.
+.IP "\(bu" 4
+npm help install
+.
+.IP "\(bu" 4
+npm help pack
+.
+.IP "\(bu" 4
+npm help cache
+.
+.IP "\(bu" 4
+npm help config
+.
+.IP "\(bu" 4
+npm help npmrc
+.
+.IP "\(bu" 4
+npm help config
+.
+.IP "\(bu" 4
+npm help publish
+.
+.IP "" 0
+
diff --git a/deps/npm/man/man5/npm-json.5 b/deps/npm/man/man5/npm-json.5
new file mode 100644
index 000000000..89083280d
--- /dev/null
+++ b/deps/npm/man/man5/npm-json.5
@@ -0,0 +1,871 @@
+.\" Generated with Ronnjs 0.3.8
+.\" http://github.com/kapouer/ronnjs/
+.
+.TH "PACKAGE\.JSON" "5" "May 2014" "" ""
+.
+.SH "NAME"
+\fBpackage.json\fR \-\- Specifics of npm\'s package\.json handling
+.
+.SH "DESCRIPTION"
+This document is all you need to know about what\'s required in your package\.json
+file\. It must be actual JSON, not just a JavaScript object literal\.
+.
+.P
+A lot of the behavior described in this document is affected by the config
+npm help settings described in \fBnpm\-config\fR\|\.
+.
+.SH "name"
+The \fImost\fR important things in your package\.json are the name and version fields\.
+Those are actually required, and your package won\'t install without
+them\. The name and version together form an identifier that is assumed
+to be completely unique\. Changes to the package should come along with
+changes to the version\.
+.
+.P
+The name is what your thing is called\. Some tips:
+.
+.IP "\(bu" 4
+Don\'t put "js" or "node" in the name\. It\'s assumed that it\'s js, since you\'re
+writing a package\.json file, and you can specify the engine using the "engines"
+field\. (See below\.)
+.
+.IP "\(bu" 4
+The name ends up being part of a URL, an argument on the command line, and a
+folder name\. Any name with non\-url\-safe characters will be rejected\.
+Also, it can\'t start with a dot or an underscore\.
+.
+.IP "\(bu" 4
+The name will probably be passed as an argument to require(), so it should
+be something short, but also reasonably descriptive\.
+.
+.IP "\(bu" 4
+You may want to check the npm registry to see if there\'s something by that name
+already, before you get too attached to it\. http://registry\.npmjs\.org/
+.
+.IP "" 0
+.
+.SH "version"
+The \fImost\fR important things in your package\.json are the name and version fields\.
+Those are actually required, and your package won\'t install without
+them\. The name and version together form an identifier that is assumed
+to be completely unique\. Changes to the package should come along with
+changes to the version\.
+.
+.P
+Version must be parseable by node\-semver \fIhttps://github\.com/isaacs/node\-semver\fR, which is bundled
+with npm as a dependency\. (\fBnpm install semver\fR to use it yourself\.)
+.
+.P
+npm help More on version numbers and ranges at semver\.
+.
+.SH "description"
+Put a description in it\. It\'s a string\. This helps people discover your
+package, as it\'s listed in \fBnpm search\fR\|\.
+.
+.SH "keywords"
+Put keywords in it\. It\'s an array of strings\. This helps people
+discover your package as it\'s listed in \fBnpm search\fR\|\.
+.
+.SH "homepage"
+The url to the project homepage\.
+.
+.P
+\fBNOTE\fR: This is \fInot\fR the same as "url"\. If you put a "url" field,
+then the registry will think it\'s a redirection to your package that has
+been published somewhere else, and spit at you\.
+.
+.P
+Literally\. Spit\. I\'m so not kidding\.
+.
+.SH "bugs"
+The url to your project\'s issue tracker and / or the email address to which
+issues should be reported\. These are helpful for people who encounter issues
+with your package\.
+.
+.P
+It should look like this:
+.
+.IP "" 4
+.
+.nf
+{ "url" : "http://github\.com/owner/project/issues"
+, "email" : "project@hostname\.com"
+}
+.
+.fi
+.
+.IP "" 0
+.
+.P
+You can specify either one or both values\. If you want to provide only a url,
+you can specify the value for "bugs" as a simple string instead of an object\.
+.
+.P
+If a url is provided, it will be used by the \fBnpm bugs\fR command\.
+.
+.SH "license"
+You should specify a license for your package so that people know how they are
+permitted to use it, and any restrictions you\'re placing on it\.
+.
+.P
+The simplest way, assuming you\'re using a common license such as BSD\-3\-Clause
+or MIT, is to just specify the standard SPDX ID of the license you\'re using,
+like this:
+.
+.IP "" 4
+.
+.nf
+{ "license" : "BSD\-3\-Clause" }
+.
+.fi
+.
+.IP "" 0
+.
+.P
+You can check the full list of SPDX license IDs \fIhttps://spdx\.org/licenses/\fR\|\.
+Ideally you should pick one that is OSI \fIhttp://opensource\.org/licenses/alphabetical\fR approved\.
+.
+.P
+It\'s also a good idea to include a LICENSE file at the top level in
+your package\.
+.
+.SH "people fields: author, contributors"
+The "author" is one person\. "contributors" is an array of people\. A "person"
+is an object with a "name" field and optionally "url" and "email", like this:
+.
+.IP "" 4
+.
+.nf
+{ "name" : "Barney Rubble"
+, "email" : "b@rubble\.com"
+, "url" : "http://barnyrubble\.tumblr\.com/"
+}
+.
+.fi
+.
+.IP "" 0
+.
+.P
+Or you can shorten that all into a single string, and npm will parse it for you:
+.
+.IP "" 4
+.
+.nf
+"Barney Rubble <b@rubble\.com> (http://barnyrubble\.tumblr\.com/)
+.
+.fi
+.
+.IP "" 0
+.
+.P
+Both email and url are optional either way\.
+.
+.P
+npm also sets a top\-level "maintainers" field with your npm user info\.
+.
+.SH "files"
+The "files" field is an array of files to include in your project\. If
+you name a folder in the array, then it will also include the files
+inside that folder\. (Unless they would be ignored by another rule\.)
+.
+.P
+You can also provide a "\.npmignore" file in the root of your package,
+which will keep files from being included, even if they would be picked
+up by the files array\. The "\.npmignore" file works just like a
+"\.gitignore"\.
+.
+.SH "main"
+The main field is a module ID that is the primary entry point to your program\.
+That is, if your package is named \fBfoo\fR, and a user installs it, and then does \fBrequire("foo")\fR, then your main module\'s exports object will be returned\.
+.
+.P
+This should be a module ID relative to the root of your package folder\.
+.
+.P
+For most modules, it makes the most sense to have a main script and often not
+much else\.
+.
+.SH "bin"
+A lot of packages have one or more executable files that they\'d like to
+install into the PATH\. npm makes this pretty easy (in fact, it uses this
+feature to install the "npm" executable\.)
+.
+.P
+To use this, supply a \fBbin\fR field in your package\.json which is a map of
+command name to local file name\. On install, npm will symlink that file into \fBprefix/bin\fR for global installs, or \fB\|\./node_modules/\.bin/\fR for local
+installs\.
+.
+.P
+For example, npm has this:
+.
+.IP "" 4
+.
+.nf
+{ "bin" : { "npm" : "\./cli\.js" } }
+.
+.fi
+.
+.IP "" 0
+.
+.P
+So, when you install npm, it\'ll create a symlink from the \fBcli\.js\fR script to \fB/usr/local/bin/npm\fR\|\.
+.
+.P
+If you have a single executable, and its name should be the name
+of the package, then you can just supply it as a string\. For example:
+.
+.IP "" 4
+.
+.nf
+{ "name": "my\-program"
+, "version": "1\.2\.5"
+, "bin": "\./path/to/program" }
+.
+.fi
+.
+.IP "" 0
+.
+.P
+would be the same as this:
+.
+.IP "" 4
+.
+.nf
+{ "name": "my\-program"
+, "version": "1\.2\.5"
+, "bin" : { "my\-program" : "\./path/to/program" } }
+.
+.fi
+.
+.IP "" 0
+.
+.SH "man"
+Specify either a single file or an array of filenames to put in place for the \fBman\fR program to find\.
+.
+.P
+If only a single file is provided, then it\'s installed such that it is the
+result from \fBman <pkgname>\fR, regardless of its actual filename\. For example:
+.
+.IP "" 4
+.
+.nf
+{ "name" : "foo"
+, "version" : "1\.2\.3"
+, "description" : "A packaged foo fooer for fooing foos"
+, "main" : "foo\.js"
+, "man" : "\./man/doc\.1"
+}
+.
+.fi
+.
+.IP "" 0
+.
+.P
+would link the \fB\|\./man/doc\.1\fR file in such that it is the target for \fBman foo\fR
+.
+.P
+If the filename doesn\'t start with the package name, then it\'s prefixed\.
+So, this:
+.
+.IP "" 4
+.
+.nf
+{ "name" : "foo"
+, "version" : "1\.2\.3"
+, "description" : "A packaged foo fooer for fooing foos"
+, "main" : "foo\.js"
+, "man" : [ "\./man/foo\.1", "\./man/bar\.1" ]
+}
+.
+.fi
+.
+.IP "" 0
+.
+.P
+will create files to do \fBman foo\fR and \fBman foo\-bar\fR\|\.
+.
+.P
+Man files must end with a number, and optionally a \fB\|\.gz\fR suffix if they are
+compressed\. The number dictates which man section the file is installed into\.
+.
+.IP "" 4
+.
+.nf
+{ "name" : "foo"
+, "version" : "1\.2\.3"
+, "description" : "A packaged foo fooer for fooing foos"
+, "main" : "foo\.js"
+, "man" : [ "\./man/foo\.1", "\./man/foo\.2" ]
+}
+.
+.fi
+.
+.IP "" 0
+.
+.P
+will create entries for \fBman foo\fR and \fBman 2 foo\fR
+.
+.SH "directories"
+The CommonJS Packages \fIhttp://wiki\.commonjs\.org/wiki/Packages/1\.0\fR spec details a
+few ways that you can indicate the structure of your package using a \fBdirectories\fR
+hash\. If you look at npm\'s package\.json \fIhttp://registry\.npmjs\.org/npm/latest\fR,
+you\'ll see that it has directories for doc, lib, and man\.
+.
+.P
+In the future, this information may be used in other creative ways\.
+.
+.SS "directories\.lib"
+Tell people where the bulk of your library is\. Nothing special is done
+with the lib folder in any way, but it\'s useful meta info\.
+.
+.SS "directories\.bin"
+If you specify a "bin" directory, then all the files in that folder will
+be used as the "bin" hash\.
+.
+.P
+If you have a "bin" hash already, then this has no effect\.
+.
+.SS "directories\.man"
+A folder that is full of man pages\. Sugar to generate a "man" array by
+walking the folder\.
+.
+.SS "directories\.doc"
+Put markdown files in here\. Eventually, these will be displayed nicely,
+maybe, someday\.
+.
+.SS "directories\.example"
+Put example scripts in here\. Someday, it might be exposed in some clever way\.
+.
+.SH "repository"
+Specify the place where your code lives\. This is helpful for people who
+want to contribute\. If the git repo is on github, then the \fBnpm docs\fR
+command will be able to find you\.
+.
+.P
+Do it like this:
+.
+.IP "" 4
+.
+.nf
+"repository" :
+ { "type" : "git"
+ , "url" : "http://github\.com/npm/npm\.git"
+ }
+"repository" :
+ { "type" : "svn"
+ , "url" : "http://v8\.googlecode\.com/svn/trunk/"
+ }
+.
+.fi
+.
+.IP "" 0
+.
+.P
+The URL should be a publicly available (perhaps read\-only) url that can be handed
+directly to a VCS program without any modification\. It should not be a url to an
+html project page that you put in your browser\. It\'s for computers\.
+.
+.SH "scripts"
+The "scripts" member is an object hash of script commands that are run
+at various times in the lifecycle of your package\. The key is the lifecycle
+event, and the value is the command to run at that point\.
+.
+.P
+npm help See \fBnpm\-scripts\fR to find out more about writing package scripts\.
+.
+.SH "config"
+A "config" hash can be used to set configuration
+parameters used in package scripts that persist across upgrades\. For
+instance, if a package had the following:
+.
+.IP "" 4
+.
+.nf
+{ "name" : "foo"
+, "config" : { "port" : "8080" } }
+.
+.fi
+.
+.IP "" 0
+.
+.P
+and then had a "start" command that then referenced the \fBnpm_package_config_port\fR environment variable, then the user could
+override that by doing \fBnpm config set foo:port 8001\fR\|\.
+.
+.P
+npm help See \fBnpm\-confignpm help \fR and \fBnpm\-scripts\fR for more on package
+configs\.
+.
+.SH "dependencies"
+Dependencies are specified with a simple hash of package name to
+version range\. The version range is a string which has one or more
+space\-separated descriptors\. Dependencies can also be identified with
+a tarball or git URL\.
+.
+.P
+\fBPlease do not put test harnesses or transpilers in your \fBdependencies\fR hash\.\fR See \fBdevDependencies\fR, below\.
+.
+.P
+npm help See semver for more details about specifying version ranges\.
+.
+.IP "\(bu" 4
+\fBversion\fR Must match \fBversion\fR exactly
+.
+.IP "\(bu" 4
+\fB>version\fR Must be greater than \fBversion\fR
+.
+.IP "\(bu" 4
+\fB>=version\fR etc
+.
+.IP "\(bu" 4
+\fB<version\fR
+.
+.IP "\(bu" 4
+\fB<=version\fR
+.
+.IP "\(bu" 4
+npm help \fB~version\fR "Approximately equivalent to version" See semver
+.
+.IP "\(bu" 4
+npm help \fB^version\fR "Compatible with version" See semver
+.
+.IP "\(bu" 4
+\fB1\.2\.x\fR 1\.2\.0, 1\.2\.1, etc\., but not 1\.3\.0
+.
+.IP "\(bu" 4
+\fBhttp://\.\.\.\fR See \'URLs as Dependencies\' below
+.
+.IP "\(bu" 4
+\fB*\fR Matches any version
+.
+.IP "\(bu" 4
+\fB""\fR (just an empty string) Same as \fB*\fR
+.
+.IP "\(bu" 4
+\fBversion1 \- version2\fR Same as \fB>=version1 <=version2\fR\|\.
+.
+.IP "\(bu" 4
+\fBrange1 || range2\fR Passes if either range1 or range2 are satisfied\.
+.
+.IP "\(bu" 4
+\fBgit\.\.\.\fR See \'Git URLs as Dependencies\' below
+.
+.IP "\(bu" 4
+\fBuser/repo\fR See \'GitHub URLs\' below
+.
+.IP "" 0
+.
+.P
+For example, these are all valid:
+.
+.IP "" 4
+.
+.nf
+{ "dependencies" :
+ { "foo" : "1\.0\.0 \- 2\.9999\.9999"
+ , "bar" : ">=1\.0\.2 <2\.1\.2"
+ , "baz" : ">1\.0\.2 <=2\.3\.4"
+ , "boo" : "2\.0\.1"
+ , "qux" : "<1\.0\.0 || >=2\.3\.1 <2\.4\.5 || >=2\.5\.2 <3\.0\.0"
+ , "asd" : "http://asdf\.com/asdf\.tar\.gz"
+ , "til" : "~1\.2"
+ , "elf" : "~1\.2\.3"
+ , "two" : "2\.x"
+ , "thr" : "3\.3\.x"
+ }
+}
+.
+.fi
+.
+.IP "" 0
+.
+.SS "URLs as Dependencies"
+You may specify a tarball URL in place of a version range\.
+.
+.P
+This tarball will be downloaded and installed locally to your package at
+install time\.
+.
+.SS "Git URLs as Dependencies"
+Git urls can be of the form:
+.
+.IP "" 4
+.
+.nf
+git://github\.com/user/project\.git#commit\-ish
+git+ssh://user@hostname:project\.git#commit\-ish
+git+ssh://user@hostname/project\.git#commit\-ish
+git+http://user@hostname/project/blah\.git#commit\-ish
+git+https://user@hostname/project/blah\.git#commit\-ish
+.
+.fi
+.
+.IP "" 0
+.
+.P
+The \fBcommit\-ish\fR can be any tag, sha, or branch which can be supplied as
+an argument to \fBgit checkout\fR\|\. The default is \fBmaster\fR\|\.
+.
+.SH "GitHub URLs"
+As of version 1\.1\.65, you can refer to GitHub urls as just "foo": "user/foo\-project"\. For example:
+.
+.IP "" 4
+.
+.nf
+{
+ "name": "foo",
+ "version": "0\.0\.0",
+ "dependencies": {
+ "express": "visionmedia/express"
+ }
+}
+.
+.fi
+.
+.IP "" 0
+.
+.SH "devDependencies"
+If someone is planning on downloading and using your module in their
+program, then they probably don\'t want or need to download and build
+the external test or documentation framework that you use\.
+.
+.P
+In this case, it\'s best to list these additional items in a \fBdevDependencies\fR hash\.
+.
+.P
+These things will be installed when doing \fBnpm link\fR or \fBnpm install\fR
+from the root of a package, and can be managed like any other npm
+npm help configuration param\. See \fBnpm\-config\fR for more on the topic\.
+.
+.P
+For build steps that are not platform\-specific, such as compiling
+CoffeeScript or other languages to JavaScript, use the \fBprepublish\fR
+script to do this, and make the required package a devDependency\.
+.
+.P
+For example:
+.
+.IP "" 4
+.
+.nf
+{ "name": "ethopia\-waza",
+ "description": "a delightfully fruity coffee varietal",
+ "version": "1\.2\.3",
+ "devDependencies": {
+ "coffee\-script": "~1\.6\.3"
+ },
+ "scripts": {
+ "prepublish": "coffee \-o lib/ \-c src/waza\.coffee"
+ },
+ "main": "lib/waza\.js"
+}
+.
+.fi
+.
+.IP "" 0
+.
+.P
+The \fBprepublish\fR script will be run before publishing, so that users
+can consume the functionality without requiring them to compile it
+themselves\. In dev mode (ie, locally running \fBnpm install\fR), it\'ll
+run this script as well, so that you can test it easily\.
+.
+.SH "peerDependencies"
+In some cases, you want to express the compatibility of your package with an
+host tool or library, while not necessarily doing a \fBrequire\fR of this host\.
+This is usually refered to as a \fIplugin\fR\|\. Notably, your module may be exposing
+a specific interface, expected and specified by the host documentation\.
+.
+.P
+For example:
+.
+.IP "" 4
+.
+.nf
+{
+ "name": "tea\-latte",
+ "version": "1\.3\.5"
+ "peerDependencies": {
+ "tea": "2\.x"
+ }
+}
+.
+.fi
+.
+.IP "" 0
+.
+.P
+This ensures your package \fBtea\-latte\fR can be installed \fIalong\fR with the second
+major version of the host package \fBtea\fR only\. The host package is automatically
+installed if needed\. \fBnpm install tea\-latte\fR could possibly yield the following
+dependency graph:
+.
+.IP "" 4
+.
+.nf
+├── tea\-latte@1\.3\.5
+└── tea@2\.2\.0
+.
+.fi
+.
+.IP "" 0
+.
+.P
+Trying to install another plugin with a conflicting requirement will cause an
+error\. For this reason, make sure your plugin requirement is as broad as
+possible, and not to lock it down to specific patch versions\.
+.
+.P
+Assuming the host complies with semver \fIhttp://semver\.org/\fR, only changes in
+the host package\'s major version will break your plugin\. Thus, if you\'ve worked
+with every 1\.x version of the host package, use \fB"^1\.0"\fR or \fB"1\.x"\fR to express
+this\. If you depend on features introduced in 1\.5\.2, use \fB">= 1\.5\.2 < 2"\fR\|\.
+.
+.SH "bundledDependencies"
+Array of package names that will be bundled when publishing the package\.
+.
+.P
+If this is spelled \fB"bundleDependencies"\fR, then that is also honorable\.
+.
+.SH "optionalDependencies"
+If a dependency can be used, but you would like npm to proceed if it
+cannot be found or fails to install, then you may put it in the \fBoptionalDependencies\fR hash\. This is a map of package name to version
+or url, just like the \fBdependencies\fR hash\. The difference is that
+failure is tolerated\.
+.
+.P
+It is still your program\'s responsibility to handle the lack of the
+dependency\. For example, something like this:
+.
+.IP "" 4
+.
+.nf
+try {
+ var foo = require(\'foo\')
+ var fooVersion = require(\'foo/package\.json\')\.version
+} catch (er) {
+ foo = null
+}
+if ( notGoodFooVersion(fooVersion) ) {
+ foo = null
+}
+// \.\. then later in your program \.\.
+if (foo) {
+ foo\.doFooThings()
+}
+.
+.fi
+.
+.IP "" 0
+.
+.P
+Entries in \fBoptionalDependencies\fR will override entries of the same name in \fBdependencies\fR, so it\'s usually best to only put in one place\.
+.
+.SH "engines"
+You can specify the version of node that your stuff works on:
+.
+.IP "" 4
+.
+.nf
+{ "engines" : { "node" : ">=0\.10\.3 <0\.12" } }
+.
+.fi
+.
+.IP "" 0
+.
+.P
+And, like with dependencies, if you don\'t specify the version (or if you
+specify "*" as the version), then any version of node will do\.
+.
+.P
+If you specify an "engines" field, then npm will require that "node" be
+somewhere on that list\. If "engines" is omitted, then npm will just assume
+that it works on node\.
+.
+.P
+You can also use the "engines" field to specify which versions of npm
+are capable of properly installing your program\. For example:
+.
+.IP "" 4
+.
+.nf
+{ "engines" : { "npm" : "~1\.0\.20" } }
+.
+.fi
+.
+.IP "" 0
+.
+.P
+Note that, unless the user has set the \fBengine\-strict\fR config flag, this
+field is advisory only\.
+.
+.SH "engineStrict"
+If you are sure that your module will \fIdefinitely not\fR run properly on
+versions of Node/npm other than those specified in the \fBengines\fR hash,
+then you can set \fB"engineStrict": true\fR in your package\.json file\.
+This will override the user\'s \fBengine\-strict\fR config setting\.
+.
+.P
+Please do not do this unless you are really very very sure\. If your
+engines hash is something overly restrictive, you can quite easily and
+inadvertently lock yourself into obscurity and prevent your users from
+updating to new versions of Node\. Consider this choice carefully\. If
+people abuse it, it will be removed in a future version of npm\.
+.
+.SH "os"
+You can specify which operating systems your
+module will run on:
+.
+.IP "" 4
+.
+.nf
+"os" : [ "darwin", "linux" ]
+.
+.fi
+.
+.IP "" 0
+.
+.P
+You can also blacklist instead of whitelist operating systems,
+just prepend the blacklisted os with a \'!\':
+.
+.IP "" 4
+.
+.nf
+"os" : [ "!win32" ]
+.
+.fi
+.
+.IP "" 0
+.
+.P
+The host operating system is determined by \fBprocess\.platform\fR
+.
+.P
+It is allowed to both blacklist, and whitelist, although there isn\'t any
+good reason to do this\.
+.
+.SH "cpu"
+If your code only runs on certain cpu architectures,
+you can specify which ones\.
+.
+.IP "" 4
+.
+.nf
+"cpu" : [ "x64", "ia32" ]
+.
+.fi
+.
+.IP "" 0
+.
+.P
+Like the \fBos\fR option, you can also blacklist architectures:
+.
+.IP "" 4
+.
+.nf
+"cpu" : [ "!arm", "!mips" ]
+.
+.fi
+.
+.IP "" 0
+.
+.P
+The host architecture is determined by \fBprocess\.arch\fR
+.
+.SH "preferGlobal"
+If your package is primarily a command\-line application that should be
+installed globally, then set this value to \fBtrue\fR to provide a warning
+if it is installed locally\.
+.
+.P
+It doesn\'t actually prevent users from installing it locally, but it
+does help prevent some confusion if it doesn\'t work as expected\.
+.
+.SH "private"
+If you set \fB"private": true\fR in your package\.json, then npm will refuse
+to publish it\.
+.
+.P
+This is a way to prevent accidental publication of private repositories\.
+If you would like to ensure that a given package is only ever published
+to a specific registry (for example, an internal registry),
+then use the \fBpublishConfig\fR hash described below
+to override the \fBregistry\fR config param at publish\-time\.
+.
+.SH "publishConfig"
+This is a set of config values that will be used at publish\-time\. It\'s
+especially handy if you want to set the tag or registry, so that you can
+ensure that a given package is not tagged with "latest" or published to
+the global public registry by default\.
+.
+.P
+Any config values can be overridden, but of course only "tag" and
+"registry" probably matter for the purposes of publishing\.
+.
+.P
+npm help See \fBnpm\-config\fR to see the list of config options that can be
+overridden\.
+.
+.SH "DEFAULT VALUES"
+npm will default some values based on package contents\.
+.
+.IP "\(bu" 4
+\fB"scripts": {"start": "node server\.js"}\fR
+.
+.IP
+If there is a \fBserver\.js\fR file in the root of your package, then npm
+will default the \fBstart\fR command to \fBnode server\.js\fR\|\.
+.
+.IP "\(bu" 4
+\fB"scripts":{"preinstall": "node\-gyp rebuild"}\fR
+.
+.IP
+If there is a \fBbinding\.gyp\fR file in the root of your package, npm will
+default the \fBpreinstall\fR command to compile using node\-gyp\.
+.
+.IP "\(bu" 4
+\fB"contributors": [\.\.\.]\fR
+.
+.IP
+If there is an \fBAUTHORS\fR file in the root of your package, npm will
+treat each line as a \fBName <email> (url)\fR format, where email and url
+are optional\. Lines which start with a \fB#\fR or are blank, will be
+ignored\.
+.
+.IP "" 0
+.
+.SH "SEE ALSO"
+.
+.IP "\(bu" 4
+npm help semver
+.
+.IP "\(bu" 4
+npm help init
+.
+.IP "\(bu" 4
+npm help version
+.
+.IP "\(bu" 4
+npm help config
+.
+.IP "\(bu" 4
+npm help config
+.
+.IP "\(bu" 4
+npm help help
+.
+.IP "\(bu" 4
+npm help faq
+.
+.IP "\(bu" 4
+npm help install
+.
+.IP "\(bu" 4
+npm help publish
+.
+.IP "\(bu" 4
+npm help rm
+.
+.IP "" 0
+
diff --git a/deps/npm/man/man5/npmrc.5 b/deps/npm/man/man5/npmrc.5
new file mode 100644
index 000000000..6ee6df6c7
--- /dev/null
+++ b/deps/npm/man/man5/npmrc.5
@@ -0,0 +1,89 @@
+.\" Generated with Ronnjs 0.3.8
+.\" http://github.com/kapouer/ronnjs/
+.
+.TH "NPMRC" "5" "May 2014" "" ""
+.
+.SH "NAME"
+\fBnpmrc\fR \-\- The npm config files
+.
+.SH "DESCRIPTION"
+npm gets its config settings from the command line, environment
+variables, and \fBnpmrc\fR files\.
+.
+.P
+The \fBnpm config\fR command can be used to update and edit the contents
+of the user and global npmrc files\.
+.
+.P
+npm help For a list of available configuration options, see npm\-config\.
+.
+.SH "FILES"
+The three relevant files are:
+.
+.IP "\(bu" 4
+per\-user config file (~/\.npmrc)
+.
+.IP "\(bu" 4
+global config file ($PREFIX/npmrc)
+.
+.IP "\(bu" 4
+npm builtin config file (/path/to/npm/npmrc)
+.
+.IP "" 0
+.
+.P
+All npm config files are an ini\-formatted list of \fBkey = value\fR
+parameters\. Environment variables can be replaced using \fB${VARIABLE_NAME}\fR\|\. For example:
+.
+.IP "" 4
+.
+.nf
+prefix = ${HOME}/\.npm\-packages
+.
+.fi
+.
+.IP "" 0
+.
+.P
+Each of these files is loaded, and config options are resolved in
+priority order\. For example, a setting in the userconfig file would
+override the setting in the globalconfig file\.
+.
+.SS "Per\-user config file"
+\fB$HOME/\.npmrc\fR (or the \fBuserconfig\fR param, if set in the environment
+or on the command line)
+.
+.SS "Global config file"
+\fB$PREFIX/etc/npmrc\fR (or the \fBglobalconfig\fR param, if set above):
+This file is an ini\-file formatted list of \fBkey = value\fR parameters\.
+Environment variables can be replaced as above\.
+.
+.SS "Built\-in config file"
+\fBpath/to/npm/itself/npmrc\fR
+.
+.P
+This is an unchangeable "builtin" configuration file that npm keeps
+consistent across updates\. Set fields in here using the \fB\|\./configure\fR
+script that comes with npm\. This is primarily for distribution
+maintainers to override default configs in a standard and consistent
+manner\.
+.
+.SH "SEE ALSO"
+.
+.IP "\(bu" 4
+npm help folders
+.
+.IP "\(bu" 4
+npm help config
+.
+.IP "\(bu" 4
+npm help config
+.
+.IP "\(bu" 4
+npm help package\.json
+.
+.IP "\(bu" 4
+npm help npm
+.
+.IP "" 0
+
diff --git a/deps/npm/man/man5/package.json.5 b/deps/npm/man/man5/package.json.5
new file mode 100644
index 000000000..89083280d
--- /dev/null
+++ b/deps/npm/man/man5/package.json.5
@@ -0,0 +1,871 @@
+.\" Generated with Ronnjs 0.3.8
+.\" http://github.com/kapouer/ronnjs/
+.
+.TH "PACKAGE\.JSON" "5" "May 2014" "" ""
+.
+.SH "NAME"
+\fBpackage.json\fR \-\- Specifics of npm\'s package\.json handling
+.
+.SH "DESCRIPTION"
+This document is all you need to know about what\'s required in your package\.json
+file\. It must be actual JSON, not just a JavaScript object literal\.
+.
+.P
+A lot of the behavior described in this document is affected by the config
+npm help settings described in \fBnpm\-config\fR\|\.
+.
+.SH "name"
+The \fImost\fR important things in your package\.json are the name and version fields\.
+Those are actually required, and your package won\'t install without
+them\. The name and version together form an identifier that is assumed
+to be completely unique\. Changes to the package should come along with
+changes to the version\.
+.
+.P
+The name is what your thing is called\. Some tips:
+.
+.IP "\(bu" 4
+Don\'t put "js" or "node" in the name\. It\'s assumed that it\'s js, since you\'re
+writing a package\.json file, and you can specify the engine using the "engines"
+field\. (See below\.)
+.
+.IP "\(bu" 4
+The name ends up being part of a URL, an argument on the command line, and a
+folder name\. Any name with non\-url\-safe characters will be rejected\.
+Also, it can\'t start with a dot or an underscore\.
+.
+.IP "\(bu" 4
+The name will probably be passed as an argument to require(), so it should
+be something short, but also reasonably descriptive\.
+.
+.IP "\(bu" 4
+You may want to check the npm registry to see if there\'s something by that name
+already, before you get too attached to it\. http://registry\.npmjs\.org/
+.
+.IP "" 0
+.
+.SH "version"
+The \fImost\fR important things in your package\.json are the name and version fields\.
+Those are actually required, and your package won\'t install without
+them\. The name and version together form an identifier that is assumed
+to be completely unique\. Changes to the package should come along with
+changes to the version\.
+.
+.P
+Version must be parseable by node\-semver \fIhttps://github\.com/isaacs/node\-semver\fR, which is bundled
+with npm as a dependency\. (\fBnpm install semver\fR to use it yourself\.)
+.
+.P
+npm help More on version numbers and ranges at semver\.
+.
+.SH "description"
+Put a description in it\. It\'s a string\. This helps people discover your
+package, as it\'s listed in \fBnpm search\fR\|\.
+.
+.SH "keywords"
+Put keywords in it\. It\'s an array of strings\. This helps people
+discover your package as it\'s listed in \fBnpm search\fR\|\.
+.
+.SH "homepage"
+The url to the project homepage\.
+.
+.P
+\fBNOTE\fR: This is \fInot\fR the same as "url"\. If you put a "url" field,
+then the registry will think it\'s a redirection to your package that has
+been published somewhere else, and spit at you\.
+.
+.P
+Literally\. Spit\. I\'m so not kidding\.
+.
+.SH "bugs"
+The url to your project\'s issue tracker and / or the email address to which
+issues should be reported\. These are helpful for people who encounter issues
+with your package\.
+.
+.P
+It should look like this:
+.
+.IP "" 4
+.
+.nf
+{ "url" : "http://github\.com/owner/project/issues"
+, "email" : "project@hostname\.com"
+}
+.
+.fi
+.
+.IP "" 0
+.
+.P
+You can specify either one or both values\. If you want to provide only a url,
+you can specify the value for "bugs" as a simple string instead of an object\.
+.
+.P
+If a url is provided, it will be used by the \fBnpm bugs\fR command\.
+.
+.SH "license"
+You should specify a license for your package so that people know how they are
+permitted to use it, and any restrictions you\'re placing on it\.
+.
+.P
+The simplest way, assuming you\'re using a common license such as BSD\-3\-Clause
+or MIT, is to just specify the standard SPDX ID of the license you\'re using,
+like this:
+.
+.IP "" 4
+.
+.nf
+{ "license" : "BSD\-3\-Clause" }
+.
+.fi
+.
+.IP "" 0
+.
+.P
+You can check the full list of SPDX license IDs \fIhttps://spdx\.org/licenses/\fR\|\.
+Ideally you should pick one that is OSI \fIhttp://opensource\.org/licenses/alphabetical\fR approved\.
+.
+.P
+It\'s also a good idea to include a LICENSE file at the top level in
+your package\.
+.
+.SH "people fields: author, contributors"
+The "author" is one person\. "contributors" is an array of people\. A "person"
+is an object with a "name" field and optionally "url" and "email", like this:
+.
+.IP "" 4
+.
+.nf
+{ "name" : "Barney Rubble"
+, "email" : "b@rubble\.com"
+, "url" : "http://barnyrubble\.tumblr\.com/"
+}
+.
+.fi
+.
+.IP "" 0
+.
+.P
+Or you can shorten that all into a single string, and npm will parse it for you:
+.
+.IP "" 4
+.
+.nf
+"Barney Rubble <b@rubble\.com> (http://barnyrubble\.tumblr\.com/)
+.
+.fi
+.
+.IP "" 0
+.
+.P
+Both email and url are optional either way\.
+.
+.P
+npm also sets a top\-level "maintainers" field with your npm user info\.
+.
+.SH "files"
+The "files" field is an array of files to include in your project\. If
+you name a folder in the array, then it will also include the files
+inside that folder\. (Unless they would be ignored by another rule\.)
+.
+.P
+You can also provide a "\.npmignore" file in the root of your package,
+which will keep files from being included, even if they would be picked
+up by the files array\. The "\.npmignore" file works just like a
+"\.gitignore"\.
+.
+.SH "main"
+The main field is a module ID that is the primary entry point to your program\.
+That is, if your package is named \fBfoo\fR, and a user installs it, and then does \fBrequire("foo")\fR, then your main module\'s exports object will be returned\.
+.
+.P
+This should be a module ID relative to the root of your package folder\.
+.
+.P
+For most modules, it makes the most sense to have a main script and often not
+much else\.
+.
+.SH "bin"
+A lot of packages have one or more executable files that they\'d like to
+install into the PATH\. npm makes this pretty easy (in fact, it uses this
+feature to install the "npm" executable\.)
+.
+.P
+To use this, supply a \fBbin\fR field in your package\.json which is a map of
+command name to local file name\. On install, npm will symlink that file into \fBprefix/bin\fR for global installs, or \fB\|\./node_modules/\.bin/\fR for local
+installs\.
+.
+.P
+For example, npm has this:
+.
+.IP "" 4
+.
+.nf
+{ "bin" : { "npm" : "\./cli\.js" } }
+.
+.fi
+.
+.IP "" 0
+.
+.P
+So, when you install npm, it\'ll create a symlink from the \fBcli\.js\fR script to \fB/usr/local/bin/npm\fR\|\.
+.
+.P
+If you have a single executable, and its name should be the name
+of the package, then you can just supply it as a string\. For example:
+.
+.IP "" 4
+.
+.nf
+{ "name": "my\-program"
+, "version": "1\.2\.5"
+, "bin": "\./path/to/program" }
+.
+.fi
+.
+.IP "" 0
+.
+.P
+would be the same as this:
+.
+.IP "" 4
+.
+.nf
+{ "name": "my\-program"
+, "version": "1\.2\.5"
+, "bin" : { "my\-program" : "\./path/to/program" } }
+.
+.fi
+.
+.IP "" 0
+.
+.SH "man"
+Specify either a single file or an array of filenames to put in place for the \fBman\fR program to find\.
+.
+.P
+If only a single file is provided, then it\'s installed such that it is the
+result from \fBman <pkgname>\fR, regardless of its actual filename\. For example:
+.
+.IP "" 4
+.
+.nf
+{ "name" : "foo"
+, "version" : "1\.2\.3"
+, "description" : "A packaged foo fooer for fooing foos"
+, "main" : "foo\.js"
+, "man" : "\./man/doc\.1"
+}
+.
+.fi
+.
+.IP "" 0
+.
+.P
+would link the \fB\|\./man/doc\.1\fR file in such that it is the target for \fBman foo\fR
+.
+.P
+If the filename doesn\'t start with the package name, then it\'s prefixed\.
+So, this:
+.
+.IP "" 4
+.
+.nf
+{ "name" : "foo"
+, "version" : "1\.2\.3"
+, "description" : "A packaged foo fooer for fooing foos"
+, "main" : "foo\.js"
+, "man" : [ "\./man/foo\.1", "\./man/bar\.1" ]
+}
+.
+.fi
+.
+.IP "" 0
+.
+.P
+will create files to do \fBman foo\fR and \fBman foo\-bar\fR\|\.
+.
+.P
+Man files must end with a number, and optionally a \fB\|\.gz\fR suffix if they are
+compressed\. The number dictates which man section the file is installed into\.
+.
+.IP "" 4
+.
+.nf
+{ "name" : "foo"
+, "version" : "1\.2\.3"
+, "description" : "A packaged foo fooer for fooing foos"
+, "main" : "foo\.js"
+, "man" : [ "\./man/foo\.1", "\./man/foo\.2" ]
+}
+.
+.fi
+.
+.IP "" 0
+.
+.P
+will create entries for \fBman foo\fR and \fBman 2 foo\fR
+.
+.SH "directories"
+The CommonJS Packages \fIhttp://wiki\.commonjs\.org/wiki/Packages/1\.0\fR spec details a
+few ways that you can indicate the structure of your package using a \fBdirectories\fR
+hash\. If you look at npm\'s package\.json \fIhttp://registry\.npmjs\.org/npm/latest\fR,
+you\'ll see that it has directories for doc, lib, and man\.
+.
+.P
+In the future, this information may be used in other creative ways\.
+.
+.SS "directories\.lib"
+Tell people where the bulk of your library is\. Nothing special is done
+with the lib folder in any way, but it\'s useful meta info\.
+.
+.SS "directories\.bin"
+If you specify a "bin" directory, then all the files in that folder will
+be used as the "bin" hash\.
+.
+.P
+If you have a "bin" hash already, then this has no effect\.
+.
+.SS "directories\.man"
+A folder that is full of man pages\. Sugar to generate a "man" array by
+walking the folder\.
+.
+.SS "directories\.doc"
+Put markdown files in here\. Eventually, these will be displayed nicely,
+maybe, someday\.
+.
+.SS "directories\.example"
+Put example scripts in here\. Someday, it might be exposed in some clever way\.
+.
+.SH "repository"
+Specify the place where your code lives\. This is helpful for people who
+want to contribute\. If the git repo is on github, then the \fBnpm docs\fR
+command will be able to find you\.
+.
+.P
+Do it like this:
+.
+.IP "" 4
+.
+.nf
+"repository" :
+ { "type" : "git"
+ , "url" : "http://github\.com/npm/npm\.git"
+ }
+"repository" :
+ { "type" : "svn"
+ , "url" : "http://v8\.googlecode\.com/svn/trunk/"
+ }
+.
+.fi
+.
+.IP "" 0
+.
+.P
+The URL should be a publicly available (perhaps read\-only) url that can be handed
+directly to a VCS program without any modification\. It should not be a url to an
+html project page that you put in your browser\. It\'s for computers\.
+.
+.SH "scripts"
+The "scripts" member is an object hash of script commands that are run
+at various times in the lifecycle of your package\. The key is the lifecycle
+event, and the value is the command to run at that point\.
+.
+.P
+npm help See \fBnpm\-scripts\fR to find out more about writing package scripts\.
+.
+.SH "config"
+A "config" hash can be used to set configuration
+parameters used in package scripts that persist across upgrades\. For
+instance, if a package had the following:
+.
+.IP "" 4
+.
+.nf
+{ "name" : "foo"
+, "config" : { "port" : "8080" } }
+.
+.fi
+.
+.IP "" 0
+.
+.P
+and then had a "start" command that then referenced the \fBnpm_package_config_port\fR environment variable, then the user could
+override that by doing \fBnpm config set foo:port 8001\fR\|\.
+.
+.P
+npm help See \fBnpm\-confignpm help \fR and \fBnpm\-scripts\fR for more on package
+configs\.
+.
+.SH "dependencies"
+Dependencies are specified with a simple hash of package name to
+version range\. The version range is a string which has one or more
+space\-separated descriptors\. Dependencies can also be identified with
+a tarball or git URL\.
+.
+.P
+\fBPlease do not put test harnesses or transpilers in your \fBdependencies\fR hash\.\fR See \fBdevDependencies\fR, below\.
+.
+.P
+npm help See semver for more details about specifying version ranges\.
+.
+.IP "\(bu" 4
+\fBversion\fR Must match \fBversion\fR exactly
+.
+.IP "\(bu" 4
+\fB>version\fR Must be greater than \fBversion\fR
+.
+.IP "\(bu" 4
+\fB>=version\fR etc
+.
+.IP "\(bu" 4
+\fB<version\fR
+.
+.IP "\(bu" 4
+\fB<=version\fR
+.
+.IP "\(bu" 4
+npm help \fB~version\fR "Approximately equivalent to version" See semver
+.
+.IP "\(bu" 4
+npm help \fB^version\fR "Compatible with version" See semver
+.
+.IP "\(bu" 4
+\fB1\.2\.x\fR 1\.2\.0, 1\.2\.1, etc\., but not 1\.3\.0
+.
+.IP "\(bu" 4
+\fBhttp://\.\.\.\fR See \'URLs as Dependencies\' below
+.
+.IP "\(bu" 4
+\fB*\fR Matches any version
+.
+.IP "\(bu" 4
+\fB""\fR (just an empty string) Same as \fB*\fR
+.
+.IP "\(bu" 4
+\fBversion1 \- version2\fR Same as \fB>=version1 <=version2\fR\|\.
+.
+.IP "\(bu" 4
+\fBrange1 || range2\fR Passes if either range1 or range2 are satisfied\.
+.
+.IP "\(bu" 4
+\fBgit\.\.\.\fR See \'Git URLs as Dependencies\' below
+.
+.IP "\(bu" 4
+\fBuser/repo\fR See \'GitHub URLs\' below
+.
+.IP "" 0
+.
+.P
+For example, these are all valid:
+.
+.IP "" 4
+.
+.nf
+{ "dependencies" :
+ { "foo" : "1\.0\.0 \- 2\.9999\.9999"
+ , "bar" : ">=1\.0\.2 <2\.1\.2"
+ , "baz" : ">1\.0\.2 <=2\.3\.4"
+ , "boo" : "2\.0\.1"
+ , "qux" : "<1\.0\.0 || >=2\.3\.1 <2\.4\.5 || >=2\.5\.2 <3\.0\.0"
+ , "asd" : "http://asdf\.com/asdf\.tar\.gz"
+ , "til" : "~1\.2"
+ , "elf" : "~1\.2\.3"
+ , "two" : "2\.x"
+ , "thr" : "3\.3\.x"
+ }
+}
+.
+.fi
+.
+.IP "" 0
+.
+.SS "URLs as Dependencies"
+You may specify a tarball URL in place of a version range\.
+.
+.P
+This tarball will be downloaded and installed locally to your package at
+install time\.
+.
+.SS "Git URLs as Dependencies"
+Git urls can be of the form:
+.
+.IP "" 4
+.
+.nf
+git://github\.com/user/project\.git#commit\-ish
+git+ssh://user@hostname:project\.git#commit\-ish
+git+ssh://user@hostname/project\.git#commit\-ish
+git+http://user@hostname/project/blah\.git#commit\-ish
+git+https://user@hostname/project/blah\.git#commit\-ish
+.
+.fi
+.
+.IP "" 0
+.
+.P
+The \fBcommit\-ish\fR can be any tag, sha, or branch which can be supplied as
+an argument to \fBgit checkout\fR\|\. The default is \fBmaster\fR\|\.
+.
+.SH "GitHub URLs"
+As of version 1\.1\.65, you can refer to GitHub urls as just "foo": "user/foo\-project"\. For example:
+.
+.IP "" 4
+.
+.nf
+{
+ "name": "foo",
+ "version": "0\.0\.0",
+ "dependencies": {
+ "express": "visionmedia/express"
+ }
+}
+.
+.fi
+.
+.IP "" 0
+.
+.SH "devDependencies"
+If someone is planning on downloading and using your module in their
+program, then they probably don\'t want or need to download and build
+the external test or documentation framework that you use\.
+.
+.P
+In this case, it\'s best to list these additional items in a \fBdevDependencies\fR hash\.
+.
+.P
+These things will be installed when doing \fBnpm link\fR or \fBnpm install\fR
+from the root of a package, and can be managed like any other npm
+npm help configuration param\. See \fBnpm\-config\fR for more on the topic\.
+.
+.P
+For build steps that are not platform\-specific, such as compiling
+CoffeeScript or other languages to JavaScript, use the \fBprepublish\fR
+script to do this, and make the required package a devDependency\.
+.
+.P
+For example:
+.
+.IP "" 4
+.
+.nf
+{ "name": "ethopia\-waza",
+ "description": "a delightfully fruity coffee varietal",
+ "version": "1\.2\.3",
+ "devDependencies": {
+ "coffee\-script": "~1\.6\.3"
+ },
+ "scripts": {
+ "prepublish": "coffee \-o lib/ \-c src/waza\.coffee"
+ },
+ "main": "lib/waza\.js"
+}
+.
+.fi
+.
+.IP "" 0
+.
+.P
+The \fBprepublish\fR script will be run before publishing, so that users
+can consume the functionality without requiring them to compile it
+themselves\. In dev mode (ie, locally running \fBnpm install\fR), it\'ll
+run this script as well, so that you can test it easily\.
+.
+.SH "peerDependencies"
+In some cases, you want to express the compatibility of your package with an
+host tool or library, while not necessarily doing a \fBrequire\fR of this host\.
+This is usually refered to as a \fIplugin\fR\|\. Notably, your module may be exposing
+a specific interface, expected and specified by the host documentation\.
+.
+.P
+For example:
+.
+.IP "" 4
+.
+.nf
+{
+ "name": "tea\-latte",
+ "version": "1\.3\.5"
+ "peerDependencies": {
+ "tea": "2\.x"
+ }
+}
+.
+.fi
+.
+.IP "" 0
+.
+.P
+This ensures your package \fBtea\-latte\fR can be installed \fIalong\fR with the second
+major version of the host package \fBtea\fR only\. The host package is automatically
+installed if needed\. \fBnpm install tea\-latte\fR could possibly yield the following
+dependency graph:
+.
+.IP "" 4
+.
+.nf
+├── tea\-latte@1\.3\.5
+└── tea@2\.2\.0
+.
+.fi
+.
+.IP "" 0
+.
+.P
+Trying to install another plugin with a conflicting requirement will cause an
+error\. For this reason, make sure your plugin requirement is as broad as
+possible, and not to lock it down to specific patch versions\.
+.
+.P
+Assuming the host complies with semver \fIhttp://semver\.org/\fR, only changes in
+the host package\'s major version will break your plugin\. Thus, if you\'ve worked
+with every 1\.x version of the host package, use \fB"^1\.0"\fR or \fB"1\.x"\fR to express
+this\. If you depend on features introduced in 1\.5\.2, use \fB">= 1\.5\.2 < 2"\fR\|\.
+.
+.SH "bundledDependencies"
+Array of package names that will be bundled when publishing the package\.
+.
+.P
+If this is spelled \fB"bundleDependencies"\fR, then that is also honorable\.
+.
+.SH "optionalDependencies"
+If a dependency can be used, but you would like npm to proceed if it
+cannot be found or fails to install, then you may put it in the \fBoptionalDependencies\fR hash\. This is a map of package name to version
+or url, just like the \fBdependencies\fR hash\. The difference is that
+failure is tolerated\.
+.
+.P
+It is still your program\'s responsibility to handle the lack of the
+dependency\. For example, something like this:
+.
+.IP "" 4
+.
+.nf
+try {
+ var foo = require(\'foo\')
+ var fooVersion = require(\'foo/package\.json\')\.version
+} catch (er) {
+ foo = null
+}
+if ( notGoodFooVersion(fooVersion) ) {
+ foo = null
+}
+// \.\. then later in your program \.\.
+if (foo) {
+ foo\.doFooThings()
+}
+.
+.fi
+.
+.IP "" 0
+.
+.P
+Entries in \fBoptionalDependencies\fR will override entries of the same name in \fBdependencies\fR, so it\'s usually best to only put in one place\.
+.
+.SH "engines"
+You can specify the version of node that your stuff works on:
+.
+.IP "" 4
+.
+.nf
+{ "engines" : { "node" : ">=0\.10\.3 <0\.12" } }
+.
+.fi
+.
+.IP "" 0
+.
+.P
+And, like with dependencies, if you don\'t specify the version (or if you
+specify "*" as the version), then any version of node will do\.
+.
+.P
+If you specify an "engines" field, then npm will require that "node" be
+somewhere on that list\. If "engines" is omitted, then npm will just assume
+that it works on node\.
+.
+.P
+You can also use the "engines" field to specify which versions of npm
+are capable of properly installing your program\. For example:
+.
+.IP "" 4
+.
+.nf
+{ "engines" : { "npm" : "~1\.0\.20" } }
+.
+.fi
+.
+.IP "" 0
+.
+.P
+Note that, unless the user has set the \fBengine\-strict\fR config flag, this
+field is advisory only\.
+.
+.SH "engineStrict"
+If you are sure that your module will \fIdefinitely not\fR run properly on
+versions of Node/npm other than those specified in the \fBengines\fR hash,
+then you can set \fB"engineStrict": true\fR in your package\.json file\.
+This will override the user\'s \fBengine\-strict\fR config setting\.
+.
+.P
+Please do not do this unless you are really very very sure\. If your
+engines hash is something overly restrictive, you can quite easily and
+inadvertently lock yourself into obscurity and prevent your users from
+updating to new versions of Node\. Consider this choice carefully\. If
+people abuse it, it will be removed in a future version of npm\.
+.
+.SH "os"
+You can specify which operating systems your
+module will run on:
+.
+.IP "" 4
+.
+.nf
+"os" : [ "darwin", "linux" ]
+.
+.fi
+.
+.IP "" 0
+.
+.P
+You can also blacklist instead of whitelist operating systems,
+just prepend the blacklisted os with a \'!\':
+.
+.IP "" 4
+.
+.nf
+"os" : [ "!win32" ]
+.
+.fi
+.
+.IP "" 0
+.
+.P
+The host operating system is determined by \fBprocess\.platform\fR
+.
+.P
+It is allowed to both blacklist, and whitelist, although there isn\'t any
+good reason to do this\.
+.
+.SH "cpu"
+If your code only runs on certain cpu architectures,
+you can specify which ones\.
+.
+.IP "" 4
+.
+.nf
+"cpu" : [ "x64", "ia32" ]
+.
+.fi
+.
+.IP "" 0
+.
+.P
+Like the \fBos\fR option, you can also blacklist architectures:
+.
+.IP "" 4
+.
+.nf
+"cpu" : [ "!arm", "!mips" ]
+.
+.fi
+.
+.IP "" 0
+.
+.P
+The host architecture is determined by \fBprocess\.arch\fR
+.
+.SH "preferGlobal"
+If your package is primarily a command\-line application that should be
+installed globally, then set this value to \fBtrue\fR to provide a warning
+if it is installed locally\.
+.
+.P
+It doesn\'t actually prevent users from installing it locally, but it
+does help prevent some confusion if it doesn\'t work as expected\.
+.
+.SH "private"
+If you set \fB"private": true\fR in your package\.json, then npm will refuse
+to publish it\.
+.
+.P
+This is a way to prevent accidental publication of private repositories\.
+If you would like to ensure that a given package is only ever published
+to a specific registry (for example, an internal registry),
+then use the \fBpublishConfig\fR hash described below
+to override the \fBregistry\fR config param at publish\-time\.
+.
+.SH "publishConfig"
+This is a set of config values that will be used at publish\-time\. It\'s
+especially handy if you want to set the tag or registry, so that you can
+ensure that a given package is not tagged with "latest" or published to
+the global public registry by default\.
+.
+.P
+Any config values can be overridden, but of course only "tag" and
+"registry" probably matter for the purposes of publishing\.
+.
+.P
+npm help See \fBnpm\-config\fR to see the list of config options that can be
+overridden\.
+.
+.SH "DEFAULT VALUES"
+npm will default some values based on package contents\.
+.
+.IP "\(bu" 4
+\fB"scripts": {"start": "node server\.js"}\fR
+.
+.IP
+If there is a \fBserver\.js\fR file in the root of your package, then npm
+will default the \fBstart\fR command to \fBnode server\.js\fR\|\.
+.
+.IP "\(bu" 4
+\fB"scripts":{"preinstall": "node\-gyp rebuild"}\fR
+.
+.IP
+If there is a \fBbinding\.gyp\fR file in the root of your package, npm will
+default the \fBpreinstall\fR command to compile using node\-gyp\.
+.
+.IP "\(bu" 4
+\fB"contributors": [\.\.\.]\fR
+.
+.IP
+If there is an \fBAUTHORS\fR file in the root of your package, npm will
+treat each line as a \fBName <email> (url)\fR format, where email and url
+are optional\. Lines which start with a \fB#\fR or are blank, will be
+ignored\.
+.
+.IP "" 0
+.
+.SH "SEE ALSO"
+.
+.IP "\(bu" 4
+npm help semver
+.
+.IP "\(bu" 4
+npm help init
+.
+.IP "\(bu" 4
+npm help version
+.
+.IP "\(bu" 4
+npm help config
+.
+.IP "\(bu" 4
+npm help config
+.
+.IP "\(bu" 4
+npm help help
+.
+.IP "\(bu" 4
+npm help faq
+.
+.IP "\(bu" 4
+npm help install
+.
+.IP "\(bu" 4
+npm help publish
+.
+.IP "\(bu" 4
+npm help rm
+.
+.IP "" 0
+
diff --git a/deps/npm/man/man7/npm-coding-style.7 b/deps/npm/man/man7/npm-coding-style.7
new file mode 100644
index 000000000..5014ba53c
--- /dev/null
+++ b/deps/npm/man/man7/npm-coding-style.7
@@ -0,0 +1,254 @@
+.\" Generated with Ronnjs 0.3.8
+.\" http://github.com/kapouer/ronnjs/
+.
+.TH "NPM\-CODING\-STYLE" "7" "May 2014" "" ""
+.
+.SH "NAME"
+\fBnpm-coding-style\fR \-\- npm\'s "funny" coding style
+.
+.SH "DESCRIPTION"
+npm\'s coding style is a bit unconventional\. It is not different for
+difference\'s sake, but rather a carefully crafted style that is
+designed to reduce visual clutter and make bugs more apparent\.
+.
+.P
+If you want to contribute to npm (which is very encouraged), you should
+make your code conform to npm\'s style\.
+.
+.P
+Note: this concerns npm\'s code not the specific packages at npmjs\.org
+.
+.SH "Line Length"
+Keep lines shorter than 80 characters\. It\'s better for lines to be
+too short than to be too long\. Break up long lists, objects, and other
+statements onto multiple lines\.
+.
+.SH "Indentation"
+Two\-spaces\. Tabs are better, but they look like hell in web browsers
+(and on github), and node uses 2 spaces, so that\'s that\.
+.
+.P
+Configure your editor appropriately\.
+.
+.SH "Curly braces"
+Curly braces belong on the same line as the thing that necessitates them\.
+.
+.P
+Bad:
+.
+.IP "" 4
+.
+.nf
+function ()
+{
+.
+.fi
+.
+.IP "" 0
+.
+.P
+Good:
+.
+.IP "" 4
+.
+.nf
+function () {
+.
+.fi
+.
+.IP "" 0
+.
+.P
+If a block needs to wrap to the next line, use a curly brace\. Don\'t
+use it if it doesn\'t\.
+.
+.P
+Bad:
+.
+.IP "" 4
+.
+.nf
+if (foo) { bar() }
+while (foo)
+ bar()
+.
+.fi
+.
+.IP "" 0
+.
+.P
+Good:
+.
+.IP "" 4
+.
+.nf
+if (foo) bar()
+while (foo) {
+ bar()
+}
+.
+.fi
+.
+.IP "" 0
+.
+.SH "Semicolons"
+Don\'t use them except in four situations:
+.
+.IP "\(bu" 4
+\fBfor (;;)\fR loops\. They\'re actually required\.
+.
+.IP "\(bu" 4
+null loops like: \fBwhile (something) ;\fR (But you\'d better have a good
+reason for doing that\.)
+.
+.IP "\(bu" 4
+\fBcase "foo": doSomething(); break\fR
+.
+.IP "\(bu" 4
+In front of a leading \fB(\fR or \fB[\fR at the start of the line\.
+This prevents the expression from being interpreted
+as a function call or property access, respectively\.
+.
+.IP "" 0
+.
+.P
+Some examples of good semicolon usage:
+.
+.IP "" 4
+.
+.nf
+;(x || y)\.doSomething()
+;[a, b, c]\.forEach(doSomething)
+for (var i = 0; i < 10; i ++) {
+ switch (state) {
+ case "begin": start(); continue
+ case "end": finish(); break
+ default: throw new Error("unknown state")
+ }
+ end()
+}
+.
+.fi
+.
+.IP "" 0
+.
+.P
+Note that starting lines with \fB\-\fR and \fB+\fR also should be prefixed
+with a semicolon, but this is much less common\.
+.
+.SH "Comma First"
+If there is a list of things separated by commas, and it wraps
+across multiple lines, put the comma at the start of the next
+line, directly below the token that starts the list\. Put the
+final token in the list on a line by itself\. For example:
+.
+.IP "" 4
+.
+.nf
+var magicWords = [ "abracadabra"
+ , "gesundheit"
+ , "ventrilo"
+ ]
+ , spells = { "fireball" : function () { setOnFire() }
+ , "water" : function () { putOut() }
+ }
+ , a = 1
+ , b = "abc"
+ , etc
+ , somethingElse
+.
+.fi
+.
+.IP "" 0
+.
+.SH "Whitespace"
+Put a single space in front of ( for anything other than a function call\.
+Also use a single space wherever it makes things more readable\.
+.
+.P
+Don\'t leave trailing whitespace at the end of lines\. Don\'t indent empty
+lines\. Don\'t use more spaces than are helpful\.
+.
+.SH "Functions"
+Use named functions\. They make stack traces a lot easier to read\.
+.
+.SH "Callbacks, Sync/async Style"
+Use the asynchronous/non\-blocking versions of things as much as possible\.
+It might make more sense for npm to use the synchronous fs APIs, but this
+way, the fs and http and child process stuff all uses the same callback\-passing
+methodology\.
+.
+.P
+The callback should always be the last argument in the list\. Its first
+argument is the Error or null\.
+.
+.P
+Be very careful never to ever ever throw anything\. It\'s worse than useless\.
+Just send the error message back as the first argument to the callback\.
+.
+.SH "Errors"
+Always create a new Error object with your message\. Don\'t just return a
+string message to the callback\. Stack traces are handy\.
+.
+.SH "Logging"
+Logging is done using the npmlog \fIhttps://github\.com/npm/npmlog\fR
+utility\.
+.
+.P
+Please clean up logs when they are no longer helpful\. In particular,
+logging the same object over and over again is not helpful\. Logs should
+report what\'s happening so that it\'s easier to track down where a fault
+occurs\.
+.
+.P
+npm help Use appropriate log levels\. See \fBnpm\-config\fR and search for
+"loglevel"\.
+.
+.SH "Case, naming, etc\."
+Use \fBlowerCamelCase\fR for multiword identifiers when they refer to objects,
+functions, methods, members, or anything not specified in this section\.
+.
+.P
+Use \fBUpperCamelCase\fR for class names (things that you\'d pass to "new")\.
+.
+.P
+Use \fBall\-lower\-hyphen\-css\-case\fR for multiword filenames and config keys\.
+.
+.P
+Use named functions\. They make stack traces easier to follow\.
+.
+.P
+Use \fBCAPS_SNAKE_CASE\fR for constants, things that should never change
+and are rarely used\.
+.
+.P
+Use a single uppercase letter for function names where the function
+would normally be anonymous, but needs to call itself recursively\. It
+makes it clear that it\'s a "throwaway" function\.
+.
+.SH "null, undefined, false, 0"
+Boolean variables and functions should always be either \fBtrue\fR or \fBfalse\fR\|\. Don\'t set it to 0 unless it\'s supposed to be a number\.
+.
+.P
+When something is intentionally missing or removed, set it to \fBnull\fR\|\.
+.
+.P
+Don\'t set things to \fBundefined\fR\|\. Reserve that value to mean "not yet
+set to anything\."
+.
+.P
+Boolean objects are verboten\.
+.
+.SH "SEE ALSO"
+.
+.IP "\(bu" 4
+npm help developers
+.
+.IP "\(bu" 4
+npm help faq
+.
+.IP "\(bu" 4
+npm help npm
+.
+.IP "" 0
+
diff --git a/deps/npm/man/man7/npm-config.7 b/deps/npm/man/man7/npm-config.7
new file mode 100644
index 000000000..6c96048d8
--- /dev/null
+++ b/deps/npm/man/man7/npm-config.7
@@ -0,0 +1,1484 @@
+.\" Generated with Ronnjs 0.3.8
+.\" http://github.com/kapouer/ronnjs/
+.
+.TH "NPM\-CONFIG" "7" "May 2014" "" ""
+.
+.SH "NAME"
+\fBnpm-config\fR \-\- More than you probably want to know about npm configuration
+.
+.SH "DESCRIPTION"
+npm gets its configuration values from 6 sources, in this priority:
+.
+.SS "Command Line Flags"
+Putting \fB\-\-foo bar\fR on the command line sets the \fBfoo\fR configuration
+parameter to \fB"bar"\fR\|\. A \fB\-\-\fR argument tells the cli parser to stop
+reading flags\. A \fB\-\-flag\fR parameter that is at the \fIend\fR of the
+command will be given the value of \fBtrue\fR\|\.
+.
+.SS "Environment Variables"
+Any environment variables that start with \fBnpm_config_\fR will be
+interpreted as a configuration parameter\. For example, putting \fBnpm_config_foo=bar\fR in your environment will set the \fBfoo\fR
+configuration parameter to \fBbar\fR\|\. Any environment configurations that
+are not given a value will be given the value of \fBtrue\fR\|\. Config
+values are case\-insensitive, so \fBNPM_CONFIG_FOO=bar\fR will work the
+same\.
+.
+.SS "npmrc Files"
+The three relevant files are:
+.
+.IP "\(bu" 4
+per\-user config file (~/\.npmrc)
+.
+.IP "\(bu" 4
+global config file ($PREFIX/npmrc)
+.
+.IP "\(bu" 4
+npm builtin config file (/path/to/npm/npmrc)
+.
+.IP "" 0
+.
+.P
+npm help See npmrc for more details\.
+.
+.SS "Default Configs"
+A set of configuration parameters that are internal to npm, and are
+defaults if nothing else is specified\.
+.
+.SH "Shorthands and Other CLI Niceties"
+The following shorthands are parsed on the command\-line:
+.
+.IP "\(bu" 4
+\fB\-v\fR: \fB\-\-version\fR
+.
+.IP "\(bu" 4
+\fB\-h\fR, \fB\-?\fR, \fB\-\-help\fR, \fB\-H\fR: \fB\-\-usage\fR
+.
+.IP "\(bu" 4
+\fB\-s\fR, \fB\-\-silent\fR: \fB\-\-loglevel silent\fR
+.
+.IP "\(bu" 4
+\fB\-q\fR, \fB\-\-quiet\fR: \fB\-\-loglevel warn\fR
+.
+.IP "\(bu" 4
+\fB\-d\fR: \fB\-\-loglevel info\fR
+.
+.IP "\(bu" 4
+\fB\-dd\fR, \fB\-\-verbose\fR: \fB\-\-loglevel verbose\fR
+.
+.IP "\(bu" 4
+\fB\-ddd\fR: \fB\-\-loglevel silly\fR
+.
+.IP "\(bu" 4
+\fB\-g\fR: \fB\-\-global\fR
+.
+.IP "\(bu" 4
+\fB\-l\fR: \fB\-\-long\fR
+.
+.IP "\(bu" 4
+\fB\-m\fR: \fB\-\-message\fR
+.
+.IP "\(bu" 4
+\fB\-p\fR, \fB\-\-porcelain\fR: \fB\-\-parseable\fR
+.
+.IP "\(bu" 4
+\fB\-reg\fR: \fB\-\-registry\fR
+.
+.IP "\(bu" 4
+\fB\-v\fR: \fB\-\-version\fR
+.
+.IP "\(bu" 4
+\fB\-f\fR: \fB\-\-force\fR
+.
+.IP "\(bu" 4
+\fB\-desc\fR: \fB\-\-description\fR
+.
+.IP "\(bu" 4
+\fB\-S\fR: \fB\-\-save\fR
+.
+.IP "\(bu" 4
+\fB\-D\fR: \fB\-\-save\-dev\fR
+.
+.IP "\(bu" 4
+\fB\-O\fR: \fB\-\-save\-optional\fR
+.
+.IP "\(bu" 4
+\fB\-B\fR: \fB\-\-save\-bundle\fR
+.
+.IP "\(bu" 4
+\fB\-E\fR: \fB\-\-save\-exact\fR
+.
+.IP "\(bu" 4
+\fB\-y\fR: \fB\-\-yes\fR
+.
+.IP "\(bu" 4
+\fB\-n\fR: \fB\-\-yes false\fR
+.
+.IP "\(bu" 4
+\fBll\fR and \fBla\fR commands: \fBls \-\-long\fR
+.
+.IP "" 0
+.
+.P
+If the specified configuration param resolves unambiguously to a known
+configuration parameter, then it is expanded to that configuration
+parameter\. For example:
+.
+.IP "" 4
+.
+.nf
+npm ls \-\-par
+# same as:
+npm ls \-\-parseable
+.
+.fi
+.
+.IP "" 0
+.
+.P
+If multiple single\-character shorthands are strung together, and the
+resulting combination is unambiguously not some other configuration
+param, then it is expanded to its various component pieces\. For
+example:
+.
+.IP "" 4
+.
+.nf
+npm ls \-gpld
+# same as:
+npm ls \-\-global \-\-parseable \-\-long \-\-loglevel info
+.
+.fi
+.
+.IP "" 0
+.
+.SH "Per\-Package Config Settings"
+When running scripts (npm help see \fBnpm\-scripts\fR) the package\.json "config"
+keys are overwritten in the environment if there is a config param of \fB<name>[@<version>]:<key>\fR\|\. For example, if the package\.json has
+this:
+.
+.IP "" 4
+.
+.nf
+{ "name" : "foo"
+, "config" : { "port" : "8080" }
+, "scripts" : { "start" : "node server\.js" } }
+.
+.fi
+.
+.IP "" 0
+.
+.P
+and the server\.js is this:
+.
+.IP "" 4
+.
+.nf
+http\.createServer(\.\.\.)\.listen(process\.env\.npm_package_config_port)
+.
+.fi
+.
+.IP "" 0
+.
+.P
+then the user could change the behavior by doing:
+.
+.IP "" 4
+.
+.nf
+npm config set foo:port 80
+.
+.fi
+.
+.IP "" 0
+.
+.P
+npm help See package\.json for more information\.
+.
+.SH "Config Settings"
+.
+.SS "always\-auth"
+.
+.IP "\(bu" 4
+Default: false
+.
+.IP "\(bu" 4
+Type: Boolean
+.
+.IP "" 0
+.
+.P
+Force npm to always require authentication when accessing the registry,
+even for \fBGET\fR requests\.
+.
+.SS "bin\-links"
+.
+.IP "\(bu" 4
+Default: \fBtrue\fR
+.
+.IP "\(bu" 4
+Type: Boolean
+.
+.IP "" 0
+.
+.P
+Tells npm to create symlinks (or \fB\|\.cmd\fR shims on Windows) for package
+executables\.
+.
+.P
+Set to false to have it not do this\. This can be used to work around
+the fact that some file systems don\'t support symlinks, even on
+ostensibly Unix systems\.
+.
+.SS "browser"
+.
+.IP "\(bu" 4
+Default: OS X: \fB"open"\fR, Windows: \fB"start"\fR, Others: \fB"xdg\-open"\fR
+.
+.IP "\(bu" 4
+Type: String
+.
+.IP "" 0
+.
+.P
+The browser that is called by the \fBnpm docs\fR command to open websites\.
+.
+.SS "ca"
+.
+.IP "\(bu" 4
+Default: The npm CA certificate
+.
+.IP "\(bu" 4
+Type: String or null
+.
+.IP "" 0
+.
+.P
+The Certificate Authority signing certificate that is trusted for SSL
+connections to the registry\.
+.
+.P
+Set to \fBnull\fR to only allow "known" registrars, or to a specific CA cert
+to trust only that specific signing authority\.
+.
+.P
+See also the \fBstrict\-ssl\fR config\.
+.
+.SS "cache"
+.
+.IP "\(bu" 4
+Default: Windows: \fB%AppData%\\npm\-cache\fR, Posix: \fB~/\.npm\fR
+.
+.IP "\(bu" 4
+Type: path
+.
+.IP "" 0
+.
+.P
+npm help The location of npm\'s cache directory\. See \fBnpm\-cache\fR
+.
+.SS "cache\-lock\-stale"
+.
+.IP "\(bu" 4
+Default: 60000 (1 minute)
+.
+.IP "\(bu" 4
+Type: Number
+.
+.IP "" 0
+.
+.P
+The number of ms before cache folder lockfiles are considered stale\.
+.
+.SS "cache\-lock\-retries"
+.
+.IP "\(bu" 4
+Default: 10
+.
+.IP "\(bu" 4
+Type: Number
+.
+.IP "" 0
+.
+.P
+Number of times to retry to acquire a lock on cache folder lockfiles\.
+.
+.SS "cache\-lock\-wait"
+.
+.IP "\(bu" 4
+Default: 10000 (10 seconds)
+.
+.IP "\(bu" 4
+Type: Number
+.
+.IP "" 0
+.
+.P
+Number of ms to wait for cache lock files to expire\.
+.
+.SS "cache\-max"
+.
+.IP "\(bu" 4
+Default: Infinity
+.
+.IP "\(bu" 4
+Type: Number
+.
+.IP "" 0
+.
+.P
+The maximum time (in seconds) to keep items in the registry cache before
+re\-checking against the registry\.
+.
+.P
+Note that no purging is done unless the \fBnpm cache clean\fR command is
+explicitly used, and that only GET requests use the cache\.
+.
+.SS "cache\-min"
+.
+.IP "\(bu" 4
+Default: 10
+.
+.IP "\(bu" 4
+Type: Number
+.
+.IP "" 0
+.
+.P
+The minimum time (in seconds) to keep items in the registry cache before
+re\-checking against the registry\.
+.
+.P
+Note that no purging is done unless the \fBnpm cache clean\fR command is
+explicitly used, and that only GET requests use the cache\.
+.
+.SS "cert"
+.
+.IP "\(bu" 4
+Default: \fBnull\fR
+.
+.IP "\(bu" 4
+Type: String
+.
+.IP "" 0
+.
+.P
+A client certificate to pass when accessing the registry\.
+.
+.SS "color"
+.
+.IP "\(bu" 4
+Default: true on Posix, false on Windows
+.
+.IP "\(bu" 4
+Type: Boolean or \fB"always"\fR
+.
+.IP "" 0
+.
+.P
+If false, never shows colors\. If \fB"always"\fR then always shows colors\.
+If true, then only prints color codes for tty file descriptors\.
+.
+.SS "depth"
+.
+.IP "\(bu" 4
+Default: Infinity
+.
+.IP "\(bu" 4
+Type: Number
+.
+.IP "" 0
+.
+.P
+The depth to go when recursing directories for \fBnpm ls\fR and \fBnpm cache ls\fR\|\.
+.
+.SS "description"
+.
+.IP "\(bu" 4
+Default: true
+.
+.IP "\(bu" 4
+Type: Boolean
+.
+.IP "" 0
+.
+.P
+Show the description in \fBnpm search\fR
+.
+.SS "dev"
+.
+.IP "\(bu" 4
+Default: false
+.
+.IP "\(bu" 4
+Type: Boolean
+.
+.IP "" 0
+.
+.P
+Install \fBdev\-dependencies\fR along with packages\.
+.
+.P
+Note that \fBdev\-dependencies\fR are also installed if the \fBnpat\fR flag is
+set\.
+.
+.SS "editor"
+.
+.IP "\(bu" 4
+Default: \fBEDITOR\fR environment variable if set, or \fB"vi"\fR on Posix,
+or \fB"notepad"\fR on Windows\.
+.
+.IP "\(bu" 4
+Type: path
+.
+.IP "" 0
+.
+.P
+The command to run for \fBnpm edit\fR or \fBnpm config edit\fR\|\.
+.
+.SS "email"
+The email of the logged\-in user\.
+.
+.P
+Set by the \fBnpm adduser\fR command\. Should not be set explicitly\.
+.
+.SS "engine\-strict"
+.
+.IP "\(bu" 4
+Default: false
+.
+.IP "\(bu" 4
+Type: Boolean
+.
+.IP "" 0
+.
+.P
+If set to true, then npm will stubbornly refuse to install (or even
+consider installing) any package that claims to not be compatible with
+the current Node\.js version\.
+.
+.SS "force"
+.
+.IP "\(bu" 4
+Default: false
+.
+.IP "\(bu" 4
+Type: Boolean
+.
+.IP "" 0
+.
+.P
+Makes various commands more forceful\.
+.
+.IP "\(bu" 4
+lifecycle script failure does not block progress\.
+.
+.IP "\(bu" 4
+publishing clobbers previously published versions\.
+.
+.IP "\(bu" 4
+skips cache when requesting from the registry\.
+.
+.IP "\(bu" 4
+prevents checks against clobbering non\-npm files\.
+.
+.IP "" 0
+.
+.SS "fetch\-retries"
+.
+.IP "\(bu" 4
+Default: 2
+.
+.IP "\(bu" 4
+Type: Number
+.
+.IP "" 0
+.
+.P
+The "retries" config for the \fBretry\fR module to use when fetching
+packages from the registry\.
+.
+.SS "fetch\-retry\-factor"
+.
+.IP "\(bu" 4
+Default: 10
+.
+.IP "\(bu" 4
+Type: Number
+.
+.IP "" 0
+.
+.P
+The "factor" config for the \fBretry\fR module to use when fetching
+packages\.
+.
+.SS "fetch\-retry\-mintimeout"
+.
+.IP "\(bu" 4
+Default: 10000 (10 seconds)
+.
+.IP "\(bu" 4
+Type: Number
+.
+.IP "" 0
+.
+.P
+The "minTimeout" config for the \fBretry\fR module to use when fetching
+packages\.
+.
+.SS "fetch\-retry\-maxtimeout"
+.
+.IP "\(bu" 4
+Default: 60000 (1 minute)
+.
+.IP "\(bu" 4
+Type: Number
+.
+.IP "" 0
+.
+.P
+The "maxTimeout" config for the \fBretry\fR module to use when fetching
+packages\.
+.
+.SS "git"
+.
+.IP "\(bu" 4
+Default: \fB"git"\fR
+.
+.IP "\(bu" 4
+Type: String
+.
+.IP "" 0
+.
+.P
+The command to use for git commands\. If git is installed on the
+computer, but is not in the \fBPATH\fR, then set this to the full path to
+the git binary\.
+.
+.SS "git\-tag\-version"
+.
+.IP "\(bu" 4
+Default: \fBtrue\fR
+.
+.IP "\(bu" 4
+Type: Boolean
+.
+.IP "" 0
+.
+.P
+Tag the commit when using the \fBnpm version\fR command\.
+.
+.SS "global"
+.
+.IP "\(bu" 4
+Default: false
+.
+.IP "\(bu" 4
+Type: Boolean
+.
+.IP "" 0
+.
+.P
+npm help Operates in "global" mode, so that packages are installed into the \fBprefix\fR folder instead of the current working directory\. See \fBnpm\-folders\fR for more on the differences in behavior\.
+.
+.IP "\(bu" 4
+packages are installed into the \fB{prefix}/lib/node_modules\fR folder, instead of the
+current working directory\.
+.
+.IP "\(bu" 4
+bin files are linked to \fB{prefix}/bin\fR
+.
+.IP "\(bu" 4
+man pages are linked to \fB{prefix}/share/man\fR
+.
+.IP "" 0
+.
+.SS "globalconfig"
+.
+.IP "\(bu" 4
+Default: {prefix}/etc/npmrc
+.
+.IP "\(bu" 4
+Type: path
+.
+.IP "" 0
+.
+.P
+The config file to read for global config options\.
+.
+.SS "group"
+.
+.IP "\(bu" 4
+Default: GID of the current process
+.
+.IP "\(bu" 4
+Type: String or Number
+.
+.IP "" 0
+.
+.P
+The group to use when running package scripts in global mode as the root
+user\.
+.
+.SS "heading"
+.
+.IP "\(bu" 4
+Default: \fB"npm"\fR
+.
+.IP "\(bu" 4
+Type: String
+.
+.IP "" 0
+.
+.P
+The string that starts all the debugging log output\.
+.
+.SS "https\-proxy"
+.
+.IP "\(bu" 4
+Default: the \fBHTTPS_PROXY\fR or \fBhttps_proxy\fR or \fBHTTP_PROXY\fR or \fBhttp_proxy\fR environment variables\.
+.
+.IP "\(bu" 4
+Type: url
+.
+.IP "" 0
+.
+.P
+A proxy to use for outgoing https requests\.
+.
+.SS "ignore\-scripts"
+.
+.IP "\(bu" 4
+Default: false
+.
+.IP "\(bu" 4
+Type: Boolean
+.
+.IP "" 0
+.
+.P
+If true, npm does not run scripts specified in package\.json files\.
+.
+.SS "init\-module"
+.
+.IP "\(bu" 4
+Default: ~/\.npm\-init\.js
+.
+.IP "\(bu" 4
+Type: path
+.
+.IP "" 0
+.
+.P
+A module that will be loaded by the \fBnpm init\fR command\. See the
+documentation for the init\-package\-json \fIhttps://github\.com/isaacs/init\-package\-json\fR module
+npm help for more information, or npm\-init\.
+.
+.SS "init\.author\.name"
+.
+.IP "\(bu" 4
+Default: ""
+.
+.IP "\(bu" 4
+Type: String
+.
+.IP "" 0
+.
+.P
+The value \fBnpm init\fR should use by default for the package author\'s name\.
+.
+.SS "init\.author\.email"
+.
+.IP "\(bu" 4
+Default: ""
+.
+.IP "\(bu" 4
+Type: String
+.
+.IP "" 0
+.
+.P
+The value \fBnpm init\fR should use by default for the package author\'s email\.
+.
+.SS "init\.author\.url"
+.
+.IP "\(bu" 4
+Default: ""
+.
+.IP "\(bu" 4
+Type: String
+.
+.IP "" 0
+.
+.P
+The value \fBnpm init\fR should use by default for the package author\'s homepage\.
+.
+.SS "init\.license"
+.
+.IP "\(bu" 4
+Default: "ISC"
+.
+.IP "\(bu" 4
+Type: String
+.
+.IP "" 0
+.
+.P
+The value \fBnpm init\fR should use by default for the package license\.
+.
+.SS "json"
+.
+.IP "\(bu" 4
+Default: false
+.
+.IP "\(bu" 4
+Type: Boolean
+.
+.IP "" 0
+.
+.P
+Whether or not to output JSON data, rather than the normal output\.
+.
+.P
+This feature is currently experimental, and the output data structures
+for many commands is either not implemented in JSON yet, or subject to
+change\. Only the output from \fBnpm ls \-\-json\fR is currently valid\.
+.
+.SS "key"
+.
+.IP "\(bu" 4
+Default: \fBnull\fR
+.
+.IP "\(bu" 4
+Type: String
+.
+.IP "" 0
+.
+.P
+A client key to pass when accessing the registry\.
+.
+.SS "link"
+.
+.IP "\(bu" 4
+Default: false
+.
+.IP "\(bu" 4
+Type: Boolean
+.
+.IP "" 0
+.
+.P
+If true, then local installs will link if there is a suitable globally
+installed package\.
+.
+.P
+Note that this means that local installs can cause things to be
+installed into the global space at the same time\. The link is only done
+if one of the two conditions are met:
+.
+.IP "\(bu" 4
+The package is not already installed globally, or
+.
+.IP "\(bu" 4
+the globally installed version is identical to the version that is
+being installed locally\.
+.
+.IP "" 0
+.
+.SS "local\-address"
+.
+.IP "\(bu" 4
+Default: undefined
+.
+.IP "\(bu" 4
+Type: IP Address
+.
+.IP "" 0
+.
+.P
+The IP address of the local interface to use when making connections
+to the npm registry\. Must be IPv4 in versions of Node prior to 0\.12\.
+.
+.SS "loglevel"
+.
+.IP "\(bu" 4
+Default: "http"
+.
+.IP "\(bu" 4
+Type: String
+.
+.IP "\(bu" 4
+Values: "silent", "win", "error", "warn", "http", "info", "verbose", "silly"
+.
+.IP "" 0
+.
+.P
+What level of logs to report\. On failure, \fIall\fR logs are written to \fBnpm\-debug\.log\fR in the current working directory\.
+.
+.P
+Any logs of a higher level than the setting are shown\.
+The default is "http", which shows http, warn, and error output\.
+.
+.SS "logstream"
+.
+.IP "\(bu" 4
+Default: process\.stderr
+.
+.IP "\(bu" 4
+Type: Stream
+.
+.IP "" 0
+.
+.P
+This is the stream that is passed to the npmlog \fIhttps://github\.com/npm/npmlog\fR module at run time\.
+.
+.P
+It cannot be set from the command line, but if you are using npm
+programmatically, you may wish to send logs to somewhere other than
+stderr\.
+.
+.P
+If the \fBcolor\fR config is set to true, then this stream will receive
+colored output if it is a TTY\.
+.
+.SS "long"
+.
+.IP "\(bu" 4
+Default: false
+.
+.IP "\(bu" 4
+Type: Boolean
+.
+.IP "" 0
+.
+.P
+Show extended information in \fBnpm ls\fR and \fBnpm search\fR\|\.
+.
+.SS "message"
+.
+.IP "\(bu" 4
+Default: "%s"
+.
+.IP "\(bu" 4
+Type: String
+.
+.IP "" 0
+.
+.P
+Commit message which is used by \fBnpm version\fR when creating version commit\.
+.
+.P
+Any "%s" in the message will be replaced with the version number\.
+.
+.SS "node\-version"
+.
+.IP "\(bu" 4
+Default: process\.version
+.
+.IP "\(bu" 4
+Type: semver or false
+.
+.IP "" 0
+.
+.P
+The node version to use when checking package\'s "engines" hash\.
+.
+.SS "npat"
+.
+.IP "\(bu" 4
+Default: false
+.
+.IP "\(bu" 4
+Type: Boolean
+.
+.IP "" 0
+.
+.P
+Run tests on installation\.
+.
+.SS "onload\-script"
+.
+.IP "\(bu" 4
+Default: false
+.
+.IP "\(bu" 4
+Type: path
+.
+.IP "" 0
+.
+.P
+A node module to \fBrequire()\fR when npm loads\. Useful for programmatic
+usage\.
+.
+.SS "optional"
+.
+.IP "\(bu" 4
+Default: true
+.
+.IP "\(bu" 4
+Type: Boolean
+.
+.IP "" 0
+.
+.P
+Attempt to install packages in the \fBoptionalDependencies\fR hash\. Note
+that if these packages fail to install, the overall installation
+process is not aborted\.
+.
+.SS "parseable"
+.
+.IP "\(bu" 4
+Default: false
+.
+.IP "\(bu" 4
+Type: Boolean
+.
+.IP "" 0
+.
+.P
+Output parseable results from commands that write to
+standard output\.
+.
+.SS "prefix"
+.
+.IP "\(bu" 4
+npm help Default: see npm\-folders
+.
+.IP "\(bu" 4
+Type: path
+.
+.IP "" 0
+.
+.P
+The location to install global items\. If set on the command line, then
+it forces non\-global commands to run in the specified folder\.
+.
+.SS "production"
+.
+.IP "\(bu" 4
+Default: false
+.
+.IP "\(bu" 4
+Type: Boolean
+.
+.IP "" 0
+.
+.P
+Set to true to run in "production" mode\.
+.
+.IP "1" 4
+devDependencies are not installed at the topmost level when running
+local \fBnpm install\fR without any arguments\.
+.
+.IP "2" 4
+Set the NODE_ENV="production" for lifecycle scripts\.
+.
+.IP "" 0
+.
+.SS "proprietary\-attribs"
+.
+.IP "\(bu" 4
+Default: true
+.
+.IP "\(bu" 4
+Type: Boolean
+.
+.IP "" 0
+.
+.P
+Whether or not to include proprietary extended attributes in the
+tarballs created by npm\.
+.
+.P
+Unless you are expecting to unpack package tarballs with something other
+than npm \-\- particularly a very outdated tar implementation \-\- leave
+this as true\.
+.
+.SS "proxy"
+.
+.IP "\(bu" 4
+Default: \fBHTTP_PROXY\fR or \fBhttp_proxy\fR environment variable, or null
+.
+.IP "\(bu" 4
+Type: url
+.
+.IP "" 0
+.
+.P
+A proxy to use for outgoing http requests\.
+.
+.SS "rebuild\-bundle"
+.
+.IP "\(bu" 4
+Default: true
+.
+.IP "\(bu" 4
+Type: Boolean
+.
+.IP "" 0
+.
+.P
+Rebuild bundled dependencies after installation\.
+.
+.SS "registry"
+.
+.IP "\(bu" 4
+Default: https://registry\.npmjs\.org/
+.
+.IP "\(bu" 4
+Type: url
+.
+.IP "" 0
+.
+.P
+The base URL of the npm package registry\.
+.
+.SS "rollback"
+.
+.IP "\(bu" 4
+Default: true
+.
+.IP "\(bu" 4
+Type: Boolean
+.
+.IP "" 0
+.
+.P
+Remove failed installs\.
+.
+.SS "save"
+.
+.IP "\(bu" 4
+Default: false
+.
+.IP "\(bu" 4
+Type: Boolean
+.
+.IP "" 0
+.
+.P
+Save installed packages to a package\.json file as dependencies\.
+.
+.P
+When used with the \fBnpm rm\fR command, it removes it from the dependencies
+hash\.
+.
+.P
+Only works if there is already a package\.json file present\.
+.
+.SS "save\-bundle"
+.
+.IP "\(bu" 4
+Default: false
+.
+.IP "\(bu" 4
+Type: Boolean
+.
+.IP "" 0
+.
+.P
+If a package would be saved at install time by the use of \fB\-\-save\fR, \fB\-\-save\-dev\fR, or \fB\-\-save\-optional\fR, then also put it in the \fBbundleDependencies\fR list\.
+.
+.P
+When used with the \fBnpm rm\fR command, it removes it from the
+bundledDependencies list\.
+.
+.SS "save\-dev"
+.
+.IP "\(bu" 4
+Default: false
+.
+.IP "\(bu" 4
+Type: Boolean
+.
+.IP "" 0
+.
+.P
+Save installed packages to a package\.json file as devDependencies\.
+.
+.P
+When used with the \fBnpm rm\fR command, it removes it from the
+devDependencies hash\.
+.
+.P
+Only works if there is already a package\.json file present\.
+.
+.SS "save\-exact"
+.
+.IP "\(bu" 4
+Default: false
+.
+.IP "\(bu" 4
+Type: Boolean
+.
+.IP "" 0
+.
+.P
+Dependencies saved to package\.json using \fB\-\-save\fR, \fB\-\-save\-dev\fR or \fB\-\-save\-optional\fR will be configured with an exact version rather than
+using npm\'s default semver range operator\.
+.
+.SS "save\-optional"
+.
+.IP "\(bu" 4
+Default: false
+.
+.IP "\(bu" 4
+Type: Boolean
+.
+.IP "" 0
+.
+.P
+Save installed packages to a package\.json file as
+optionalDependencies\.
+.
+.P
+When used with the \fBnpm rm\fR command, it removes it from the
+devDependencies hash\.
+.
+.P
+Only works if there is already a package\.json file present\.
+.
+.SS "save\-prefix"
+.
+.IP "\(bu" 4
+Default: \'^\'
+.
+.IP "\(bu" 4
+Type: String
+.
+.IP "" 0
+.
+.P
+Configure how versions of packages installed to a package\.json file via \fB\-\-save\fR or \fB\-\-save\-dev\fR get prefixed\.
+.
+.P
+For example if a package has version \fB1\.2\.3\fR, by default it\'s version is
+set to \fB^1\.2\.3\fR which allows minor upgrades for that package, but after
+.
+.br
+\fBnpm config set save\-prefix=\'~\'\fR it would be set to \fB~1\.2\.3\fR which only allows
+patch upgrades\.
+.
+.SS "searchopts"
+.
+.IP "\(bu" 4
+Default: ""
+.
+.IP "\(bu" 4
+Type: String
+.
+.IP "" 0
+.
+.P
+Space\-separated options that are always passed to search\.
+.
+.SS "searchexclude"
+.
+.IP "\(bu" 4
+Default: ""
+.
+.IP "\(bu" 4
+Type: String
+.
+.IP "" 0
+.
+.P
+Space\-separated options that limit the results from search\.
+.
+.SS "searchsort"
+.
+.IP "\(bu" 4
+Default: "name"
+.
+.IP "\(bu" 4
+Type: String
+.
+.IP "\(bu" 4
+Values: "name", "\-name", "date", "\-date", "description",
+"\-description", "keywords", "\-keywords"
+.
+.IP "" 0
+.
+.P
+Indication of which field to sort search results by\. Prefix with a \fB\-\fR
+character to indicate reverse sort\.
+.
+.SS "shell"
+.
+.IP "\(bu" 4
+Default: SHELL environment variable, or "bash" on Posix, or "cmd" on
+Windows
+.
+.IP "\(bu" 4
+Type: path
+.
+.IP "" 0
+.
+.P
+The shell to run for the \fBnpm explore\fR command\.
+.
+.SS "shrinkwrap"
+.
+.IP "\(bu" 4
+Default: true
+.
+.IP "\(bu" 4
+Type: Boolean
+.
+.IP "" 0
+.
+.P
+If set to false, then ignore \fBnpm\-shrinkwrap\.json\fR files when
+installing\.
+.
+.SS "sign\-git\-tag"
+.
+.IP "\(bu" 4
+Default: false
+.
+.IP "\(bu" 4
+Type: Boolean
+.
+.IP "" 0
+.
+.P
+If set to true, then the \fBnpm version\fR command will tag the version
+using \fB\-s\fR to add a signature\.
+.
+.P
+Note that git requires you to have set up GPG keys in your git configs
+for this to work properly\.
+.
+.SS "strict\-ssl"
+.
+.IP "\(bu" 4
+Default: true
+.
+.IP "\(bu" 4
+Type: Boolean
+.
+.IP "" 0
+.
+.P
+Whether or not to do SSL key validation when making requests to the
+registry via https\.
+.
+.P
+See also the \fBca\fR config\.
+.
+.SS "tag"
+.
+.IP "\(bu" 4
+Default: latest
+.
+.IP "\(bu" 4
+Type: String
+.
+.IP "" 0
+.
+.P
+If you ask npm to install a package and don\'t tell it a specific version, then
+it will install the specified tag\.
+.
+.P
+Also the tag that is added to the package@version specified by the \fBnpm
+tag\fR command, if no explicit tag is given\.
+.
+.SS "tmp"
+.
+.IP "\(bu" 4
+Default: TMPDIR environment variable, or "/tmp"
+.
+.IP "\(bu" 4
+Type: path
+.
+.IP "" 0
+.
+.P
+Where to store temporary files and folders\. All temp files are deleted
+on success, but left behind on failure for forensic purposes\.
+.
+.SS "unicode"
+.
+.IP "\(bu" 4
+Default: true
+.
+.IP "\(bu" 4
+Type: Boolean
+.
+.IP "" 0
+.
+.P
+When set to true, npm uses unicode characters in the tree output\. When
+false, it uses ascii characters to draw trees\.
+.
+.SS "unsafe\-perm"
+.
+.IP "\(bu" 4
+Default: false if running as root, true otherwise
+.
+.IP "\(bu" 4
+Type: Boolean
+.
+.IP "" 0
+.
+.P
+Set to true to suppress the UID/GID switching when running package
+scripts\. If set explicitly to false, then installing as a non\-root user
+will fail\.
+.
+.SS "usage"
+.
+.IP "\(bu" 4
+Default: false
+.
+.IP "\(bu" 4
+Type: Boolean
+.
+.IP "" 0
+.
+.P
+Set to show short usage output (like the \-H output)
+npm help instead of complete help when doing \fBnpm\-help\fR\|\.
+.
+.SS "user"
+.
+.IP "\(bu" 4
+Default: "nobody"
+.
+.IP "\(bu" 4
+Type: String or Number
+.
+.IP "" 0
+.
+.P
+The UID to set to when running package scripts as root\.
+.
+.SS "username"
+.
+.IP "\(bu" 4
+Default: null
+.
+.IP "\(bu" 4
+Type: String
+.
+.IP "" 0
+.
+.P
+The username on the npm registry\. Set with \fBnpm adduser\fR
+.
+.SS "userconfig"
+.
+.IP "\(bu" 4
+Default: ~/\.npmrc
+.
+.IP "\(bu" 4
+Type: path
+.
+.IP "" 0
+.
+.P
+The location of user\-level configuration settings\.
+.
+.SS "umask"
+.
+.IP "\(bu" 4
+Default: 022
+.
+.IP "\(bu" 4
+Type: Octal numeric string
+.
+.IP "" 0
+.
+.P
+The "umask" value to use when setting the file creation mode on files
+and folders\.
+.
+.P
+Folders and executables are given a mode which is \fB0777\fR masked against
+this value\. Other files are given a mode which is \fB0666\fR masked against
+this value\. Thus, the defaults are \fB0755\fR and \fB0644\fR respectively\.
+.
+.SS "user\-agent"
+.
+.IP "\(bu" 4
+Default: node/{process\.version} {process\.platform} {process\.arch}
+.
+.IP "\(bu" 4
+Type: String
+.
+.IP "" 0
+.
+.P
+Sets a User\-Agent to the request header
+.
+.SS "version"
+.
+.IP "\(bu" 4
+Default: false
+.
+.IP "\(bu" 4
+Type: boolean
+.
+.IP "" 0
+.
+.P
+If true, output the npm version and exit successfully\.
+.
+.P
+Only relevant when specified explicitly on the command line\.
+.
+.SS "versions"
+.
+.IP "\(bu" 4
+Default: false
+.
+.IP "\(bu" 4
+Type: boolean
+.
+.IP "" 0
+.
+.P
+If true, output the npm version as well as node\'s \fBprocess\.versions\fR
+hash, and exit successfully\.
+.
+.P
+Only relevant when specified explicitly on the command line\.
+.
+.SS "viewer"
+.
+.IP "\(bu" 4
+Default: "man" on Posix, "browser" on Windows
+.
+.IP "\(bu" 4
+Type: path
+.
+.IP "" 0
+.
+.P
+The program to use to view help content\.
+.
+.P
+Set to \fB"browser"\fR to view html help content in the default web browser\.
+.
+.SH "SEE ALSO"
+.
+.IP "\(bu" 4
+npm help config
+.
+.IP "\(bu" 4
+npm help config
+.
+.IP "\(bu" 4
+npm help npmrc
+.
+.IP "\(bu" 4
+npm help scripts
+.
+.IP "\(bu" 4
+npm help folders
+.
+.IP "\(bu" 4
+npm help npm
+.
+.IP "" 0
+
diff --git a/deps/npm/man/man7/npm-developers.7 b/deps/npm/man/man7/npm-developers.7
new file mode 100644
index 000000000..1122e23af
--- /dev/null
+++ b/deps/npm/man/man7/npm-developers.7
@@ -0,0 +1,335 @@
+.\" Generated with Ronnjs 0.3.8
+.\" http://github.com/kapouer/ronnjs/
+.
+.TH "NPM\-DEVELOPERS" "7" "May 2014" "" ""
+.
+.SH "NAME"
+\fBnpm-developers\fR \-\- Developer Guide
+.
+.SH "DESCRIPTION"
+So, you\'ve decided to use npm to develop (and maybe publish/deploy)
+your project\.
+.
+.P
+Fantastic!
+.
+.P
+There are a few things that you need to do above the simple steps
+that your users will do to install your program\.
+.
+.SH "About These Documents"
+These are man pages\. If you install npm, you should be able to
+then do \fBman npm\-thing\fR to get the documentation on a particular
+topic, or \fBnpm help thing\fR to see the same information\.
+.
+.SH "What is a "
+A package is:
+.
+.IP "\(bu" 4
+a) a folder containing a program described by a package\.json file
+.
+.IP "\(bu" 4
+b) a gzipped tarball containing (a)
+.
+.IP "\(bu" 4
+c) a url that resolves to (b)
+.
+.IP "\(bu" 4
+d) a \fB<name>@<version>\fR that is published on the registry with (c)
+.
+.IP "\(bu" 4
+e) a \fB<name>@<tag>\fR that points to (d)
+.
+.IP "\(bu" 4
+f) a \fB<name>\fR that has a "latest" tag satisfying (e)
+.
+.IP "\(bu" 4
+g) a \fBgit\fR url that, when cloned, results in (a)\.
+.
+.IP "" 0
+.
+.P
+Even if you never publish your package, you can still get a lot of
+benefits of using npm if you just want to write a node program (a), and
+perhaps if you also want to be able to easily install it elsewhere
+after packing it up into a tarball (b)\.
+.
+.P
+Git urls can be of the form:
+.
+.IP "" 4
+.
+.nf
+git://github\.com/user/project\.git#commit\-ish
+git+ssh://user@hostname:project\.git#commit\-ish
+git+http://user@hostname/project/blah\.git#commit\-ish
+git+https://user@hostname/project/blah\.git#commit\-ish
+.
+.fi
+.
+.IP "" 0
+.
+.P
+The \fBcommit\-ish\fR can be any tag, sha, or branch which can be supplied as
+an argument to \fBgit checkout\fR\|\. The default is \fBmaster\fR\|\.
+.
+.SH "The package\.json File"
+You need to have a \fBpackage\.json\fR file in the root of your project to do
+much of anything with npm\. That is basically the whole interface\.
+.
+.P
+npm help See \fBpackage\.json\fR for details about what goes in that file\. At the very
+least, you need:
+.
+.IP "\(bu" 4
+name:
+This should be a string that identifies your project\. Please do not
+use the name to specify that it runs on node, or is in JavaScript\.
+You can use the "engines" field to explicitly state the versions of
+node (or whatever else) that your program requires, and it\'s pretty
+well assumed that it\'s javascript\.
+.
+.IP
+It does not necessarily need to match your github repository name\.
+.
+.IP
+So, \fBnode\-foo\fR and \fBbar\-js\fR are bad names\. \fBfoo\fR or \fBbar\fR are better\.
+.
+.IP "\(bu" 4
+version:
+A semver\-compatible version\.
+.
+.IP "\(bu" 4
+engines:
+Specify the versions of node (or whatever else) that your program
+runs on\. The node API changes a lot, and there may be bugs or new
+functionality that you depend on\. Be explicit\.
+.
+.IP "\(bu" 4
+author:
+Take some credit\.
+.
+.IP "\(bu" 4
+scripts:
+If you have a special compilation or installation script, then you
+should put it in the \fBscripts\fR hash\. You should definitely have at
+least a basic smoke\-test command as the "scripts\.test" field\.
+npm help See npm\-scripts\.
+.
+.IP "\(bu" 4
+main:
+If you have a single module that serves as the entry point to your
+program (like what the "foo" package gives you at require("foo")),
+then you need to specify that in the "main" field\.
+.
+.IP "\(bu" 4
+directories:
+This is a hash of folders\. The best ones to include are "lib" and
+"doc", but if you specify a folder full of man pages in "man", then
+they\'ll get installed just like these ones\.
+.
+.IP "" 0
+.
+.P
+You can use \fBnpm init\fR in the root of your package in order to get you
+npm help started with a pretty basic package\.json file\. See \fBnpm\-init\fR for
+more info\.
+.
+.SH "Keeping files "
+Use a \fB\|\.npmignore\fR file to keep stuff out of your package\. If there\'s
+no \fB\|\.npmignore\fR file, but there \fIis\fR a \fB\|\.gitignore\fR file, then npm will
+ignore the stuff matched by the \fB\|\.gitignore\fR file\. If you \fIwant\fR to
+include something that is excluded by your \fB\|\.gitignore\fR file, you can
+create an empty \fB\|\.npmignore\fR file to override it\.
+.
+.P
+By default, the following paths and files are ignored, so there\'s no
+need to add them to \fB\|\.npmignore\fR explicitly:
+.
+.IP "\(bu" 4
+\fB\|\.*\.swp\fR
+.
+.IP "\(bu" 4
+\fB\|\._*\fR
+.
+.IP "\(bu" 4
+\fB\|\.DS_Store\fR
+.
+.IP "\(bu" 4
+\fB\|\.git\fR
+.
+.IP "\(bu" 4
+\fB\|\.hg\fR
+.
+.IP "\(bu" 4
+\fB\|\.lock\-wscript\fR
+.
+.IP "\(bu" 4
+\fB\|\.svn\fR
+.
+.IP "\(bu" 4
+\fB\|\.wafpickle\-*\fR
+.
+.IP "\(bu" 4
+\fBCVS\fR
+.
+.IP "\(bu" 4
+\fBnpm\-debug\.log\fR
+.
+.IP "" 0
+.
+.P
+Additionally, everything in \fBnode_modules\fR is ignored, except for
+bundled dependencies\. npm automatically handles this for you, so don\'t
+bother adding \fBnode_modules\fR to \fB\|\.npmignore\fR\|\.
+.
+.P
+The following paths and files are never ignored, so adding them to \fB\|\.npmignore\fR is pointless:
+.
+.IP "\(bu" 4
+\fBpackage\.json\fR
+.
+.IP "\(bu" 4
+\fBREADME\.*\fR
+.
+.IP "" 0
+.
+.SH "Link Packages"
+\fBnpm link\fR is designed to install a development package and see the
+changes in real time without having to keep re\-installing it\. (You do
+need to either re\-link or \fBnpm rebuild \-g\fR to update compiled packages,
+of course\.)
+.
+.P
+npm help More info at \fBnpm\-link\fR\|\.
+.
+.SH "Before Publishing: Make Sure Your Package Installs and Works"
+\fBThis is important\.\fR
+.
+.P
+If you can not install it locally, you\'ll have
+problems trying to publish it\. Or, worse yet, you\'ll be able to
+publish it, but you\'ll be publishing a broken or pointless package\.
+So don\'t do that\.
+.
+.P
+In the root of your package, do this:
+.
+.IP "" 4
+.
+.nf
+npm install \. \-g
+.
+.fi
+.
+.IP "" 0
+.
+.P
+That\'ll show you that it\'s working\. If you\'d rather just create a symlink
+package that points to your working directory, then do this:
+.
+.IP "" 4
+.
+.nf
+npm link
+.
+.fi
+.
+.IP "" 0
+.
+.P
+Use \fBnpm ls \-g\fR to see if it\'s there\.
+.
+.P
+To test a local install, go into some other folder, and then do:
+.
+.IP "" 4
+.
+.nf
+cd \.\./some\-other\-folder
+npm install \.\./my\-package
+.
+.fi
+.
+.IP "" 0
+.
+.P
+to install it locally into the node_modules folder in that other place\.
+.
+.P
+Then go into the node\-repl, and try using require("my\-thing") to
+bring in your module\'s main module\.
+.
+.SH "Create a User Account"
+Create a user with the adduser command\. It works like this:
+.
+.IP "" 4
+.
+.nf
+npm adduser
+.
+.fi
+.
+.IP "" 0
+.
+.P
+and then follow the prompts\.
+.
+.P
+npm help This is documented better in npm\-adduser\.
+.
+.SH "Publish your package"
+This part\'s easy\. IN the root of your folder, do this:
+.
+.IP "" 4
+.
+.nf
+npm publish
+.
+.fi
+.
+.IP "" 0
+.
+.P
+You can give publish a url to a tarball, or a filename of a tarball,
+or a path to a folder\.
+.
+.P
+Note that pretty much \fBeverything in that folder will be exposed\fR
+by default\. So, if you have secret stuff in there, use a \fB\|\.npmignore\fR file to list out the globs to ignore, or publish
+from a fresh checkout\.
+.
+.SH "Brag about it"
+Send emails, write blogs, blab in IRC\.
+.
+.P
+Tell the world how easy it is to install your program!
+.
+.SH "SEE ALSO"
+.
+.IP "\(bu" 4
+npm help faq
+.
+.IP "\(bu" 4
+npm help npm
+.
+.IP "\(bu" 4
+npm help init
+.
+.IP "\(bu" 4
+npm help package\.json
+.
+.IP "\(bu" 4
+npm help scripts
+.
+.IP "\(bu" 4
+npm help publish
+.
+.IP "\(bu" 4
+npm help adduser
+.
+.IP "\(bu" 4
+npm help registry
+.
+.IP "" 0
+
diff --git a/deps/npm/man/man7/npm-disputes.7 b/deps/npm/man/man7/npm-disputes.7
new file mode 100644
index 000000000..942d530bb
--- /dev/null
+++ b/deps/npm/man/man7/npm-disputes.7
@@ -0,0 +1,146 @@
+.\" Generated with Ronnjs 0.3.8
+.\" http://github.com/kapouer/ronnjs/
+.
+.TH "NPM\-DISPUTES" "7" "May 2014" "" ""
+.
+.SH "NAME"
+\fBnpm-disputes\fR \-\- Handling Module Name Disputes
+.
+.SH "SYNOPSIS"
+.
+.IP "1" 4
+Get the author email with \fBnpm owner ls <pkgname>\fR
+.
+.IP "2" 4
+Email the author, CC \fIsupport@npmjs\.com\fR
+.
+.IP "3" 4
+After a few weeks, if there\'s no resolution, we\'ll sort it out\.
+.
+.IP "" 0
+.
+.P
+Don\'t squat on package names\. Publish code or move out of the way\.
+.
+.SH "DESCRIPTION"
+There sometimes arise cases where a user publishes a module, and then
+later, some other user wants to use that name\. Here are some common
+ways that happens (each of these is based on actual events\.)
+.
+.IP "1" 4
+Joe writes a JavaScript module \fBfoo\fR, which is not node\-specific\.
+Joe doesn\'t use node at all\. Bob wants to use \fBfoo\fR in node, so he
+wraps it in an npm module\. Some time later, Joe starts using node,
+and wants to take over management of his program\.
+.
+.IP "2" 4
+Bob writes an npm module \fBfoo\fR, and publishes it\. Perhaps much
+later, Joe finds a bug in \fBfoo\fR, and fixes it\. He sends a pull
+request to Bob, but Bob doesn\'t have the time to deal with it,
+because he has a new job and a new baby and is focused on his new
+erlang project, and kind of not involved with node any more\. Joe
+would like to publish a new \fBfoo\fR, but can\'t, because the name is
+taken\.
+.
+.IP "3" 4
+Bob writes a 10\-line flow\-control library, and calls it \fBfoo\fR, and
+publishes it to the npm registry\. Being a simple little thing, it
+never really has to be updated\. Joe works for Foo Inc, the makers
+of the critically acclaimed and widely\-marketed \fBfoo\fR JavaScript
+toolkit framework\. They publish it to npm as \fBfoojs\fR, but people are
+routinely confused when \fBnpm install foo\fR is some different thing\.
+.
+.IP "4" 4
+Bob writes a parser for the widely\-known \fBfoo\fR file format, because
+he needs it for work\. Then, he gets a new job, and never updates the
+prototype\. Later on, Joe writes a much more complete \fBfoo\fR parser,
+but can\'t publish, because Bob\'s \fBfoo\fR is in the way\.
+.
+.IP "" 0
+.
+.P
+The validity of Joe\'s claim in each situation can be debated\. However,
+Joe\'s appropriate course of action in each case is the same\.
+.
+.IP "1" 4
+\fBnpm owner ls foo\fR\|\. This will tell Joe the email address of the
+owner (Bob)\.
+.
+.IP "2" 4
+Joe emails Bob, explaining the situation \fBas respectfully as
+possible\fR, and what he would like to do with the module name\. He
+adds the npm support staff \fIsupport@npmjs\.com\fR to the CC list of
+the email\. Mention in the email that Bob can run \fBnpm owner add
+joe foo\fR to add Joe as an owner of the \fBfoo\fR package\.
+.
+.IP "3" 4
+After a reasonable amount of time, if Bob has not responded, or if
+Bob and Joe can\'t come to any sort of resolution, email support \fIsupport@npmjs\.com\fR and we\'ll sort it out\. ("Reasonable" is
+usually at least 4 weeks, but extra time is allowed around common
+holidays\.)
+.
+.IP "" 0
+.
+.SH "REASONING"
+In almost every case so far, the parties involved have been able to reach
+an amicable resolution without any major intervention\. Most people
+really do want to be reasonable, and are probably not even aware that
+they\'re in your way\.
+.
+.P
+Module ecosystems are most vibrant and powerful when they are as
+self\-directed as possible\. If an admin one day deletes something you
+had worked on, then that is going to make most people quite upset,
+regardless of the justification\. When humans solve their problems by
+talking to other humans with respect, everyone has the chance to end up
+feeling good about the interaction\.
+.
+.SH "EXCEPTIONS"
+Some things are not allowed, and will be removed without discussion if
+they are brought to the attention of the npm registry admins, including
+but not limited to:
+.
+.IP "1" 4
+Malware (that is, a package designed to exploit or harm the machine on
+which it is installed)\.
+.
+.IP "2" 4
+Violations of copyright or licenses (for example, cloning an
+MIT\-licensed program, and then removing or changing the copyright and
+license statement)\.
+.
+.IP "3" 4
+Illegal content\.
+.
+.IP "4" 4
+"Squatting" on a package name that you \fIplan\fR to use, but aren\'t
+actually using\. Sorry, I don\'t care how great the name is, or how
+perfect a fit it is for the thing that someday might happen\. If
+someone wants to use it today, and you\'re just taking up space with
+an empty tarball, you\'re going to be evicted\.
+.
+.IP "5" 4
+Putting empty packages in the registry\. Packages must have SOME
+functionality\. It can be silly, but it can\'t be \fInothing\fR\|\. (See
+also: squatting\.)
+.
+.IP "6" 4
+Doing weird things with the registry, like using it as your own
+personal application database or otherwise putting non\-packagey
+things into it\.
+.
+.IP "" 0
+.
+.P
+If you see bad behavior like this, please report it right away\.
+.
+.SH "SEE ALSO"
+.
+.IP "\(bu" 4
+npm help registry
+.
+.IP "\(bu" 4
+npm help owner
+.
+.IP "" 0
+
diff --git a/deps/npm/man/man7/npm-faq.7 b/deps/npm/man/man7/npm-faq.7
new file mode 100644
index 000000000..c84a06d37
--- /dev/null
+++ b/deps/npm/man/man7/npm-faq.7
@@ -0,0 +1,479 @@
+.\" Generated with Ronnjs 0.3.8
+.\" http://github.com/kapouer/ronnjs/
+.
+.TH "NPM\-FAQ" "7" "May 2014" "" ""
+.
+.SH "NAME"
+\fBnpm-faq\fR \-\- Frequently Asked Questions
+.
+.SH "Where can I find these docs in HTML?"
+\fIhttps://www\.npmjs\.org/doc/\fR, or run:
+.
+.IP "" 4
+.
+.nf
+npm config set viewer browser
+.
+.fi
+.
+.IP "" 0
+.
+.P
+to open these documents in your default web browser rather than \fBman\fR\|\.
+.
+.SH "It didn&#39;t work\."
+That\'s not really a question\.
+.
+.SH "Why didn&#39;t it work?"
+I don\'t know yet\.
+.
+.P
+Read the error output, and if you can\'t figure out what it means,
+do what it says and post a bug with all the information it asks for\.
+.
+.SH "Where does npm put stuff?"
+npm help See \fBnpm\-folders\fR
+.
+.P
+tl;dr:
+.
+.IP "\(bu" 4
+Use the \fBnpm root\fR command to see where modules go, and the \fBnpm bin\fR
+command to see where executables go
+.
+.IP "\(bu" 4
+Global installs are different from local installs\. If you install
+something with the \fB\-g\fR flag, then its executables go in \fBnpm bin \-g\fR
+and its modules go in \fBnpm root \-g\fR\|\.
+.
+.IP "" 0
+.
+.SH "How do I install something on my computer in a central location?"
+Install it globally by tacking \fB\-g\fR or \fB\-\-global\fR to the command\. (This
+is especially important for command line utilities that need to add
+their bins to the global system \fBPATH\fR\|\.)
+.
+.SH "I installed something globally, but I can&#39;t "
+Install it locally\.
+.
+.P
+The global install location is a place for command\-line utilities
+to put their bins in the system \fBPATH\fR\|\. It\'s not for use with \fBrequire()\fR\|\.
+.
+.P
+If you \fBrequire()\fR a module in your code, then that means it\'s a
+dependency, and a part of your program\. You need to install it locally
+in your program\.
+.
+.SH "Why can&#39;t npm just put everything in one place, like other package managers?"
+Not every change is an improvement, but every improvement is a change\.
+This would be like asking git to do network IO for every commit\. It\'s
+not going to happen, because it\'s a terrible idea that causes more
+problems than it solves\.
+.
+.P
+It is much harder to avoid dependency conflicts without nesting
+dependencies\. This is fundamental to the way that npm works, and has
+npm help proven to be an extremely successful approach\. See \fBnpm\-folders\fR for
+more details\.
+.
+.P
+If you want a package to be installed in one place, and have all your
+programs reference the same copy of it, then use the \fBnpm link\fR command\.
+That\'s what it\'s for\. Install it globally, then link it into each
+program that uses it\.
+.
+.SH "Whatever, I really want the old style &#39;everything global&#39; style\."
+Write your own package manager\. You could probably even wrap up \fBnpm\fR
+in a shell script if you really wanted to\.
+.
+.P
+npm will not help you do something that is known to be a bad idea\.
+.
+.SH "Should I check my "
+Mikeal Rogers answered this question very well:
+.
+.P
+\fIhttp://www\.futurealoof\.com/posts/nodemodules\-in\-git\.html\fR
+.
+.P
+tl;dr
+.
+.IP "\(bu" 4
+Check \fBnode_modules\fR into git for things you \fBdeploy\fR, such as
+websites and apps\.
+.
+.IP "\(bu" 4
+Do not check \fBnode_modules\fR into git for libraries and modules
+intended to be reused\.
+.
+.IP "\(bu" 4
+Use npm to manage dependencies in your dev environment, but not in
+your deployment scripts\.
+.
+.IP "" 0
+.
+.SH "Is it &#39;npm&#39; or &#39;NPM&#39; or &#39;Npm&#39;?"
+npm should never be capitalized unless it is being displayed in a
+location that is customarily all\-caps (such as the title of man pages\.)
+.
+.SH "If &#39;npm&#39; is an acronym, why is it never capitalized?"
+Contrary to the belief of many, "npm" is not in fact an abbreviation for
+"Node Package Manager"\. It is a recursive bacronymic abbreviation for
+"npm is not an acronym"\. (If it was "ninaa", then it would be an
+acronym, and thus incorrectly named\.)
+.
+.P
+"NPM", however, \fIis\fR an acronym (more precisely, a capitonym) for the
+National Association of Pastoral Musicians\. You can learn more
+about them at \fIhttp://npm\.org/\fR\|\.
+.
+.P
+In software, "NPM" is a Non\-Parametric Mapping utility written by
+Chris Rorden\. You can analyze pictures of brains with it\. Learn more
+about the (capitalized) NPM program at \fIhttp://www\.cabiatl\.com/mricro/npm/\fR\|\.
+.
+.P
+The first seed that eventually grew into this flower was a bash utility
+named "pm", which was a shortened descendent of "pkgmakeinst", a
+bash function that was used to install various different things on different
+platforms, most often using Yahoo\'s \fByinst\fR\|\. If \fBnpm\fR was ever an
+acronym for anything, it was \fBnode pm\fR or maybe \fBnew pm\fR\|\.
+.
+.P
+So, in all seriousness, the "npm" project is named after its command\-line
+utility, which was organically selected to be easily typed by a right\-handed
+programmer using a US QWERTY keyboard layout, ending with the
+right\-ring\-finger in a postition to type the \fB\-\fR key for flags and
+other command\-line arguments\. That command\-line utility is always
+lower\-case, though it starts most sentences it is a part of\.
+.
+.SH "How do I list installed packages?"
+\fBnpm ls\fR
+.
+.SH "How do I search for packages?"
+\fBnpm search\fR
+.
+.P
+Arguments are greps\. \fBnpm search jsdom\fR shows jsdom packages\.
+.
+.SH "How do I update npm?"
+.
+.nf
+npm update npm \-g
+.
+.fi
+.
+.P
+You can also update all outdated local packages by doing \fBnpm update\fR without
+any arguments, or global packages by doing \fBnpm update \-g\fR\|\.
+.
+.P
+Occasionally, the version of npm will progress such that the current
+version cannot be properly installed with the version that you have
+installed already\. (Consider, if there is ever a bug in the \fBupdate\fR
+command\.)
+.
+.P
+In those cases, you can do this:
+.
+.IP "" 4
+.
+.nf
+curl https://www\.npmjs\.org/install\.sh | sh
+.
+.fi
+.
+.IP "" 0
+.
+.SH "What is a "
+A package is:
+.
+.IP "\(bu" 4
+a) a folder containing a program described by a package\.json file
+.
+.IP "\(bu" 4
+b) a gzipped tarball containing (a)
+.
+.IP "\(bu" 4
+c) a url that resolves to (b)
+.
+.IP "\(bu" 4
+d) a \fB<name>@<version>\fR that is published on the registry with (c)
+.
+.IP "\(bu" 4
+e) a \fB<name>@<tag>\fR that points to (d)
+.
+.IP "\(bu" 4
+f) a \fB<name>\fR that has a "latest" tag satisfying (e)
+.
+.IP "\(bu" 4
+g) a \fBgit\fR url that, when cloned, results in (a)\.
+.
+.IP "" 0
+.
+.P
+Even if you never publish your package, you can still get a lot of
+benefits of using npm if you just want to write a node program (a), and
+perhaps if you also want to be able to easily install it elsewhere
+after packing it up into a tarball (b)\.
+.
+.P
+Git urls can be of the form:
+.
+.IP "" 4
+.
+.nf
+git://github\.com/user/project\.git#commit\-ish
+git+ssh://user@hostname:project\.git#commit\-ish
+git+http://user@hostname/project/blah\.git#commit\-ish
+git+https://user@hostname/project/blah\.git#commit\-ish
+.
+.fi
+.
+.IP "" 0
+.
+.P
+The \fBcommit\-ish\fR can be any tag, sha, or branch which can be supplied as
+an argument to \fBgit checkout\fR\|\. The default is \fBmaster\fR\|\.
+.
+.SH "What is a "
+A module is anything that can be loaded with \fBrequire()\fR in a Node\.js
+program\. The following things are all examples of things that can be
+loaded as modules:
+.
+.IP "\(bu" 4
+A folder with a \fBpackage\.json\fR file containing a \fBmain\fR field\.
+.
+.IP "\(bu" 4
+A folder with an \fBindex\.js\fR file in it\.
+.
+.IP "\(bu" 4
+A JavaScript file\.
+.
+.IP "" 0
+.
+.P
+Most npm packages are modules, because they are libraries that you
+load with \fBrequire\fR\|\. However, there\'s no requirement that an npm
+package be a module! Some only contain an executable command\-line
+interface, and don\'t provide a \fBmain\fR field for use in Node programs\.
+.
+.P
+Almost all npm packages (at least, those that are Node programs) \fIcontain\fR many modules within them (because every file they load with \fBrequire()\fR is a module)\.
+.
+.P
+In the context of a Node program, the \fBmodule\fR is also the thing that
+was loaded \fIfrom\fR a file\. For example, in the following program:
+.
+.IP "" 4
+.
+.nf
+var req = require(\'request\')
+.
+.fi
+.
+.IP "" 0
+.
+.P
+we might say that "The variable \fBreq\fR refers to the \fBrequest\fR module"\.
+.
+.SH "So, why is it the &quot;"
+The \fBpackage\.json\fR file defines the package\. (See "What is a
+package?" above\.)
+.
+.P
+The \fBnode_modules\fR folder is the place Node\.js looks for modules\.
+(See "What is a module?" above\.)
+.
+.P
+For example, if you create a file at \fBnode_modules/foo\.js\fR and then
+had a program that did \fBvar f = require(\'foo\.js\')\fR then it would load
+the module\. However, \fBfoo\.js\fR is not a "package" in this case,
+because it does not have a package\.json\.
+.
+.P
+Alternatively, if you create a package which does not have an \fBindex\.js\fR or a \fB"main"\fR field in the \fBpackage\.json\fR file, then it is
+not a module\. Even if it\'s installed in \fBnode_modules\fR, it can\'t be
+an argument to \fBrequire()\fR\|\.
+.
+.SH "<code>&quot;node_modules&quot;</code>"
+No\. This will never happen\. This question comes up sometimes,
+because it seems silly from the outside that npm couldn\'t just be
+configured to put stuff somewhere else, and then npm could load them
+from there\. It\'s an arbitrary spelling choice, right? What\'s the big
+deal?
+.
+.P
+At the time of this writing, the string \fB\'node_modules\'\fR appears 151
+times in 53 separate files in npm and node core (excluding tests and
+documentation)\.
+.
+.P
+Some of these references are in node\'s built\-in module loader\. Since
+npm is not involved \fBat all\fR at run\-time, node itself would have to
+be configured to know where you\'ve decided to stick stuff\. Complexity
+hurdle #1\. Since the Node module system is locked, this cannot be
+changed, and is enough to kill this request\. But I\'ll continue, in
+deference to your deity\'s delicate feelings regarding spelling\.
+.
+.P
+Many of the others are in dependencies that npm uses, which are not
+necessarily tightly coupled to npm (in the sense that they do not read
+npm\'s configuration files, etc\.) Each of these would have to be
+configured to take the name of the \fBnode_modules\fR folder as a
+parameter\. Complexity hurdle #2\.
+.
+.P
+Furthermore, npm has the ability to "bundle" dependencies by adding
+the dep names to the \fB"bundledDependencies"\fR list in package\.json,
+which causes the folder to be included in the package tarball\. What
+if the author of a module bundles its dependencies, and they use a
+different spelling for \fBnode_modules\fR? npm would have to rename the
+folder at publish time, and then be smart enough to unpack it using
+your locally configured name\. Complexity hurdle #3\.
+.
+.P
+Furthermore, what happens when you \fIchange\fR this name? Fine, it\'s
+easy enough the first time, just rename the \fBnode_modules\fR folders to \fB\|\./blergyblerp/\fR or whatever name you choose\. But what about when you
+change it again? npm doesn\'t currently track any state about past
+configuration settings, so this would be rather difficult to do
+properly\. It would have to track every previous value for this
+config, and always accept any of them, or else yesterday\'s install may
+be broken tomorrow\. Complexity hurdle #5\.
+.
+.P
+Never going to happen\. The folder is named \fBnode_modules\fR\|\. It is
+written indelibly in the Node Way, handed down from the ancient times
+of Node 0\.3\.
+.
+.SH "How do I install node with npm?"
+You don\'t\. Try one of these node version managers:
+.
+.P
+Unix:
+.
+.IP "\(bu" 4
+\fIhttp://github\.com/isaacs/nave\fR
+.
+.IP "\(bu" 4
+\fIhttp://github\.com/visionmedia/n\fR
+.
+.IP "\(bu" 4
+\fIhttp://github\.com/creationix/nvm\fR
+.
+.IP "" 0
+.
+.P
+Windows:
+.
+.IP "\(bu" 4
+\fIhttp://github\.com/marcelklehr/nodist\fR
+.
+.IP "\(bu" 4
+\fIhttps://github\.com/hakobera/nvmw\fR
+.
+.IP "\(bu" 4
+\fIhttps://github\.com/nanjingboy/nvmw\fR
+.
+.IP "" 0
+.
+.SH "How can I use npm for development?"
+npm help See \fBnpm\-developersnpm help \fR and \fBpackage\.json\fR\|\.
+.
+.P
+You\'ll most likely want to \fBnpm link\fR your development folder\. That\'s
+awesomely handy\.
+.
+.P
+npm help To set up your own private registry, check out \fBnpm\-registry\fR\|\.
+.
+.SH "Can I list a url as a dependency?"
+Yes\. It should be a url to a gzipped tarball containing a single folder
+that has a package\.json in its root, or a git url\.
+(See "what is a package?" above\.)
+.
+.SH "How do I symlink to a dev folder so I don&#39;t have to keep re\-installing?"
+npm help See \fBnpm\-link\fR
+.
+.SH "The package registry website\. What is that exactly?"
+npm help See \fBnpm\-registry\fR\|\.
+.
+.SH "I forgot my password, and can&#39;t publish\. How do I reset it?"
+Go to \fIhttps://npmjs\.org/forgot\fR\|\.
+.
+.SH "I get ECONNREFUSED a lot\. What&#39;s up?"
+Either the registry is down, or node\'s DNS isn\'t able to reach out\.
+.
+.P
+To check if the registry is down, open up \fIhttps://registry\.npmjs\.org/\fR in a web browser\. This will also tell
+you if you are just unable to access the internet for some reason\.
+.
+.P
+If the registry IS down, let us know by emailing \fIsupport@npmjs\.com\fR
+or posting an issue at \fIhttps://github\.com/npm/npm/issues\fR\|\. If it\'s
+down for the world (and not just on your local network) then we\'re
+probably already being pinged about it\.
+.
+.P
+You can also often get a faster response by visiting the #npm channel
+on Freenode IRC\.
+.
+.SH "Why no namespaces?"
+Please see this discussion: \fIhttps://github\.com/npm/npm/issues/798\fR
+.
+.P
+tl;dr \- It doesn\'t actually make things better, and can make them worse\.
+.
+.P
+If you want to namespace your own packages, you may: simply use the \fB\-\fR character to separate the names\. npm is a mostly anarchic system\.
+There is not sufficient need to impose namespace rules on everyone\.
+.
+.SH "Who does npm?"
+npm was originally written by Isaac Z\. Schlueter, and many others have
+contributed to it, some of them quite substantially\.
+.
+.P
+The npm open source project, The npm Registry, and the community
+website \fIhttps://www\.npmjs\.org\fR are maintained and operated by the
+good folks at npm, Inc\. \fIhttps://www\.npmjs\.com\fR
+.
+.SH "I have a question or request not addressed here\. Where should I put it?"
+Post an issue on the github project:
+.
+.IP "\(bu" 4
+\fIhttps://github\.com/npm/npm/issues\fR
+.
+.IP "" 0
+.
+.SH "Why does npm hate me?"
+npm is not capable of hatred\. It loves everyone, especially you\.
+.
+.SH "SEE ALSO"
+.
+.IP "\(bu" 4
+npm help npm
+.
+.IP "\(bu" 4
+npm help developers
+.
+.IP "\(bu" 4
+npm help package\.json
+.
+.IP "\(bu" 4
+npm help config
+.
+.IP "\(bu" 4
+npm help config
+.
+.IP "\(bu" 4
+npm help npmrc
+.
+.IP "\(bu" 4
+npm help config
+.
+.IP "\(bu" 4
+npm help folders
+.
+.IP "" 0
+
diff --git a/deps/npm/man/man7/npm-index.7 b/deps/npm/man/man7/npm-index.7
new file mode 100644
index 000000000..576a047d3
--- /dev/null
+++ b/deps/npm/man/man7/npm-index.7
@@ -0,0 +1,307 @@
+.\" Generated with Ronnjs 0.3.8
+.\" http://github.com/kapouer/ronnjs/
+.
+.TH "NPM\-INDEX" "7" "May 2014" "" ""
+.
+.SH "NAME"
+\fBnpm-index\fR \-\- Index of all npm documentation
+.
+npm help .SH "README"
+node package manager
+.
+npm help .SH "npm"
+node package manager
+.
+npm help .SH "npm\-adduser"
+Add a registry user account
+.
+npm help .SH "npm\-bin"
+Display npm bin folder
+.
+npm help .SH "npm\-bugs"
+Bugs for a package in a web browser maybe
+.
+npm help .SH "npm\-build"
+Build a package
+.
+npm help .SH "npm\-bundle"
+REMOVED
+.
+npm help .SH "npm\-cache"
+Manipulates packages cache
+.
+npm help .SH "npm\-completion"
+Tab Completion for npm
+.
+npm help .SH "npm\-config"
+Manage the npm configuration files
+.
+npm help .SH "npm\-dedupe"
+Reduce duplication
+.
+npm help .SH "npm\-deprecate"
+Deprecate a version of a package
+.
+npm help .SH "npm\-docs"
+Docs for a package in a web browser maybe
+.
+npm help .SH "npm\-edit"
+Edit an installed package
+.
+npm help .SH "npm\-explore"
+Browse an installed package
+.
+npm help .SH "npm\-help\-search"
+Search npm help documentation
+.
+npm help .SH "npm\-help"
+Get help on npm
+.
+npm help .SH "npm\-init"
+Interactively create a package\.json file
+.
+npm help .SH "npm\-install"
+Install a package
+.
+npm help .SH "npm\-link"
+Symlink a package folder
+.
+npm help .SH "npm\-ls"
+List installed packages
+.
+npm help .SH "npm\-outdated"
+Check for outdated packages
+.
+npm help .SH "npm\-owner"
+Manage package owners
+.
+npm help .SH "npm\-pack"
+Create a tarball from a package
+.
+npm help .SH "npm\-prefix"
+Display prefix
+.
+npm help .SH "npm\-prune"
+Remove extraneous packages
+.
+npm help .SH "npm\-publish"
+Publish a package
+.
+npm help .SH "npm\-rebuild"
+Rebuild a package
+.
+npm help .SH "npm\-repo"
+Open package repository page in the browser
+.
+npm help .SH "npm\-restart"
+Start a package
+.
+npm help .SH "npm\-rm"
+Remove a package
+.
+npm help .SH "npm\-root"
+Display npm root
+.
+npm help .SH "npm\-run\-script"
+Run arbitrary package scripts
+.
+npm help .SH "npm\-search"
+Search for packages
+.
+npm help .SH "npm\-shrinkwrap"
+Lock down dependency versions
+.
+npm help .SH "npm\-star"
+Mark your favorite packages
+.
+npm help .SH "npm\-stars"
+View packages marked as favorites
+.
+npm help .SH "npm\-start"
+Start a package
+.
+npm help .SH "npm\-stop"
+Stop a package
+.
+npm help .SH "npm\-submodule"
+Add a package as a git submodule
+.
+npm help .SH "npm\-tag"
+Tag a published version
+.
+npm help .SH "npm\-test"
+Test a package
+.
+npm help .SH "npm\-uninstall"
+Remove a package
+.
+npm help .SH "npm\-unpublish"
+Remove a package from the registry
+.
+npm help .SH "npm\-update"
+Update a package
+.
+npm help .SH "npm\-version"
+Bump a package version
+.
+npm help .SH "npm\-view"
+View registry info
+.
+npm help .SH "npm\-whoami"
+Display npm username
+.
+npm apihelp .SH "npm"
+node package manager
+.
+npm apihelp .SH "npm\-bin"
+Display npm bin folder
+.
+npm apihelp .SH "npm\-bugs"
+Bugs for a package in a web browser maybe
+.
+npm apihelp .SH "npm\-commands"
+npm commands
+.
+npm apihelp .SH "npm\-config"
+Manage the npm configuration files
+.
+npm apihelp .SH "npm\-deprecate"
+Deprecate a version of a package
+.
+npm apihelp .SH "npm\-docs"
+Docs for a package in a web browser maybe
+.
+npm apihelp .SH "npm\-edit"
+Edit an installed package
+.
+npm apihelp .SH "npm\-explore"
+Browse an installed package
+.
+npm apihelp .SH "npm\-help\-search"
+Search the help pages
+.
+npm apihelp .SH "npm\-init"
+Interactively create a package\.json file
+.
+npm apihelp .SH "npm\-install"
+install a package programmatically
+.
+npm apihelp .SH "npm\-link"
+Symlink a package folder
+.
+npm apihelp .SH "npm\-load"
+Load config settings
+.
+npm apihelp .SH "npm\-ls"
+List installed packages
+.
+npm apihelp .SH "npm\-outdated"
+Check for outdated packages
+.
+npm apihelp .SH "npm\-owner"
+Manage package owners
+.
+npm apihelp .SH "npm\-pack"
+Create a tarball from a package
+.
+npm apihelp .SH "npm\-prefix"
+Display prefix
+.
+npm apihelp .SH "npm\-prune"
+Remove extraneous packages
+.
+npm apihelp .SH "npm\-publish"
+Publish a package
+.
+npm apihelp .SH "npm\-rebuild"
+Rebuild a package
+.
+npm apihelp .SH "npm\-repo"
+Open package repository page in the browser
+.
+npm apihelp .SH "npm\-restart"
+Start a package
+.
+npm apihelp .SH "npm\-root"
+Display npm root
+.
+npm apihelp .SH "npm\-run\-script"
+Run arbitrary package scripts
+.
+npm apihelp .SH "npm\-search"
+Search for packages
+.
+npm apihelp .SH "npm\-shrinkwrap"
+programmatically generate package shrinkwrap file
+.
+npm apihelp .SH "npm\-start"
+Start a package
+.
+npm apihelp .SH "npm\-stop"
+Stop a package
+.
+npm apihelp .SH "npm\-submodule"
+Add a package as a git submodule
+.
+npm apihelp .SH "npm\-tag"
+Tag a published version
+.
+npm apihelp .SH "npm\-test"
+Test a package
+.
+npm apihelp .SH "npm\-uninstall"
+uninstall a package programmatically
+.
+npm apihelp .SH "npm\-unpublish"
+Remove a package from the registry
+.
+npm apihelp .SH "npm\-update"
+Update a package
+.
+npm apihelp .SH "npm\-version"
+Bump a package version
+.
+npm apihelp .SH "npm\-view"
+View registry info
+.
+npm apihelp .SH "npm\-whoami"
+Display npm username
+.
+npm help .SH "npm\-folders"
+Folder Structures Used by npm
+.
+npm help .SH "npmrc"
+The npm config files
+.
+npm help .SH "package\.json"
+Specifics of npm\'s package\.json handling
+.
+npm help .SH "npm\-coding\-style"
+npm\'s "funny" coding style
+.
+npm help .SH "npm\-config"
+More than you probably want to know about npm configuration
+.
+npm help .SH "npm\-developers"
+Developer Guide
+.
+npm help .SH "npm\-disputes"
+Handling Module Name Disputes
+.
+npm help .SH "npm\-faq"
+Frequently Asked Questions
+.
+npm help .SH "npm\-index"
+Index of all npm documentation
+.
+npm help .SH "npm\-registry"
+The JavaScript Package Registry
+.
+npm help .SH "npm\-scripts"
+How npm handles the "scripts" field
+.
+npm help .SH "removing\-npm"
+Cleaning the Slate
+.
+npm help .SH "semver"
+The semantic versioner for npm
diff --git a/deps/npm/man/man7/npm-registry.7 b/deps/npm/man/man7/npm-registry.7
new file mode 100644
index 000000000..a6f4e7367
--- /dev/null
+++ b/deps/npm/man/man7/npm-registry.7
@@ -0,0 +1,82 @@
+.\" Generated with Ronnjs 0.3.8
+.\" http://github.com/kapouer/ronnjs/
+.
+.TH "NPM\-REGISTRY" "7" "May 2014" "" ""
+.
+.SH "NAME"
+\fBnpm-registry\fR \-\- The JavaScript Package Registry
+.
+.SH "DESCRIPTION"
+To resolve packages by name and version, npm talks to a registry website
+that implements the CommonJS Package Registry specification for reading
+package info\.
+.
+.P
+Additionally, npm\'s package registry implementation supports several
+write APIs as well, to allow for publishing packages and managing user
+account information\.
+.
+.P
+The official public npm registry is at \fIhttp://registry\.npmjs\.org/\fR\|\. It
+is powered by a CouchDB database at \fIhttp://isaacs\.iriscouch\.com/registry\fR\|\. The code for the couchapp is
+available at \fIhttp://github\.com/npm/npmjs\.org\fR\|\. npm user accounts
+are CouchDB users, stored in the \fIhttp://isaacs\.iriscouch\.com/_users\fR
+database\.
+.
+.P
+npm help npm help The registry URL is supplied by the \fBregistry\fR config parameter\. See \fBnpm\-config\fR, \fBnpmrcnpm help \fR, and \fBnpm\-config\fR for more on managing
+npm\'s configuration\.
+.
+.SH "Can I run my own private registry?"
+Yes!
+.
+.P
+The easiest way is to replicate the couch database, and use the same (or
+similar) design doc to implement the APIs\.
+.
+.P
+If you set up continuous replication from the official CouchDB, and then
+set your internal CouchDB as the registry config, then you\'ll be able
+to read any published packages, in addition to your private ones, and by
+default will only publish internally\. If you then want to publish a
+package for the whole world to see, you can simply override the \fB\-\-registry\fR config for that command\.
+.
+.SH "I don&#39;t want my package published in the official registry\. It&#39;s private\."
+Set \fB"private": true\fR in your package\.json to prevent it from being
+published at all, or \fB"publishConfig":{"registry":"http://my\-internal\-registry\.local"}\fR
+to force it to be published only to your internal registry\.
+.
+.P
+npm help See \fBpackage\.json\fR for more info on what goes in the package\.json file\.
+.
+.SH "Will you replicate from my registry into the public one?"
+No\. If you want things to be public, then publish them into the public
+registry using npm\. What little security there is would be for nought
+otherwise\.
+.
+.SH "Do I have to use couchdb to build a registry that npm can talk to?"
+No, but it\'s way easier\. Basically, yes, you do, or you have to
+effectively implement the entire CouchDB API anyway\.
+.
+.SH "Is there a website or something to see package docs and such?"
+Yes, head over to \fIhttps://npmjs\.org/\fR
+.
+.SH "SEE ALSO"
+.
+.IP "\(bu" 4
+npm help config
+.
+.IP "\(bu" 4
+npm help config
+.
+.IP "\(bu" 4
+npm help npmrc
+.
+.IP "\(bu" 4
+npm help developers
+.
+.IP "\(bu" 4
+npm help disputes
+.
+.IP "" 0
+
diff --git a/deps/npm/man/man7/npm-scripts.7 b/deps/npm/man/man7/npm-scripts.7
new file mode 100644
index 000000000..10f83192f
--- /dev/null
+++ b/deps/npm/man/man7/npm-scripts.7
@@ -0,0 +1,354 @@
+.\" Generated with Ronnjs 0.3.8
+.\" http://github.com/kapouer/ronnjs/
+.
+.TH "NPM\-SCRIPTS" "7" "May 2014" "" ""
+.
+.SH "NAME"
+\fBnpm-scripts\fR \-\- How npm handles the "scripts" field
+.
+.SH "DESCRIPTION"
+npm supports the "scripts" member of the package\.json script, for the
+following scripts:
+.
+.IP "\(bu" 4
+prepublish:
+Run BEFORE the package is published\. (Also run on local \fBnpm
+install\fR without any arguments\.)
+.
+.IP "\(bu" 4
+publish, postpublish:
+Run AFTER the package is published\.
+.
+.IP "\(bu" 4
+preinstall:
+Run BEFORE the package is installed
+.
+.IP "\(bu" 4
+install, postinstall:
+Run AFTER the package is installed\.
+.
+.IP "\(bu" 4
+preuninstall, uninstall:
+Run BEFORE the package is uninstalled\.
+.
+.IP "\(bu" 4
+postuninstall:
+Run AFTER the package is uninstalled\.
+.
+.IP "\(bu" 4
+preupdate:
+Run BEFORE the package is updated with the update command\.
+.
+.IP "\(bu" 4
+update, postupdate:
+Run AFTER the package is updated with the update command\.
+.
+.IP "\(bu" 4
+pretest, test, posttest:
+Run by the \fBnpm test\fR command\.
+.
+.IP "\(bu" 4
+prestop, stop, poststop:
+Run by the \fBnpm stop\fR command\.
+.
+.IP "\(bu" 4
+prestart, start, poststart:
+Run by the \fBnpm start\fR command\.
+.
+.IP "\(bu" 4
+prerestart, restart, postrestart:
+Run by the \fBnpm restart\fR command\. Note: \fBnpm restart\fR will run the
+stop and start scripts if no \fBrestart\fR script is provided\.
+.
+.IP "" 0
+.
+.P
+Additionally, arbitrary scripts can be run by doing \fBnpm run\-script <stage> <pkg>\fR\|\.
+.
+.SH "NOTE: INSTALL SCRIPTS ARE AN ANTIPATTERN"
+\fBtl;dr\fR Don\'t use \fBinstall\fR\|\. Use a \fB\|\.gyp\fR file for compilation, and \fBprepublish\fR for anything else\.
+.
+.P
+You should almost never have to explicitly set a \fBpreinstall\fR or \fBinstall\fR script\. If you are doing this, please consider if there is
+another option\.
+.
+.P
+The only valid use of \fBinstall\fR or \fBpreinstall\fR scripts is for
+compilation which must be done on the target architecture\. In early
+versions of node, this was often done using the \fBnode\-waf\fR scripts, or
+a standalone \fBMakefile\fR, and early versions of npm required that it be
+explicitly set in package\.json\. This was not portable, and harder to
+do properly\.
+.
+.P
+In the current version of node, the standard way to do this is using a \fB\|\.gyp\fR file\. If you have a file with a \fB\|\.gyp\fR extension in the root
+of your package, then npm will run the appropriate \fBnode\-gyp\fR commands
+automatically at install time\. This is the only officially supported
+method for compiling binary addons, and does not require that you add
+anything to your package\.json file\.
+.
+.P
+If you have to do other things before your package is used, in a way
+that is not dependent on the operating system or architecture of the
+target system, then use a \fBprepublish\fR script instead\. This includes
+tasks such as:
+.
+.IP "\(bu" 4
+Compile CoffeeScript source code into JavaScript\.
+.
+.IP "\(bu" 4
+Create minified versions of JavaScript source code\.
+.
+.IP "\(bu" 4
+Fetching remote resources that your package will use\.
+.
+.IP "" 0
+.
+.P
+The advantage of doing these things at \fBprepublish\fR time instead of \fBpreinstall\fR or \fBinstall\fR time is that they can be done once, in a
+single place, and thus greatly reduce complexity and variability\.
+Additionally, this means that:
+.
+.IP "\(bu" 4
+You can depend on \fBcoffee\-script\fR as a \fBdevDependency\fR, and thus
+your users don\'t need to have it installed\.
+.
+.IP "\(bu" 4
+You don\'t need to include the minifiers in your package, reducing
+the size for your users\.
+.
+.IP "\(bu" 4
+You don\'t need to rely on your users having \fBcurl\fR or \fBwget\fR or
+other system tools on the target machines\.
+.
+.IP "" 0
+.
+.SH "DEFAULT VALUES"
+npm will default some script values based on package contents\.
+.
+.IP "\(bu" 4
+\fB"start": "node server\.js"\fR:
+.
+.IP
+If there is a \fBserver\.js\fR file in the root of your package, then npm
+will default the \fBstart\fR command to \fBnode server\.js\fR\|\.
+.
+.IP "\(bu" 4
+\fB"preinstall": "node\-waf clean || true; node\-waf configure build"\fR:
+.
+.IP
+If there is a \fBwscript\fR file in the root of your package, npm will
+default the \fBpreinstall\fR command to compile using node\-waf\.
+.
+.IP "" 0
+.
+.SH "USER"
+If npm was invoked with root privileges, then it will change the uid
+to the user account or uid specified by the \fBuser\fR config, which
+defaults to \fBnobody\fR\|\. Set the \fBunsafe\-perm\fR flag to run scripts with
+root privileges\.
+.
+.SH "ENVIRONMENT"
+Package scripts run in an environment where many pieces of information
+are made available regarding the setup of npm and the current state of
+the process\.
+.
+.SS "path"
+If you depend on modules that define executable scripts, like test
+suites, then those executables will be added to the \fBPATH\fR for
+executing the scripts\. So, if your package\.json has this:
+.
+.IP "" 4
+.
+.nf
+{ "name" : "foo"
+, "dependencies" : { "bar" : "0\.1\.x" }
+, "scripts": { "start" : "bar \./test" } }
+.
+.fi
+.
+.IP "" 0
+.
+.P
+then you could run \fBnpm start\fR to execute the \fBbar\fR script, which is
+exported into the \fBnode_modules/\.bin\fR directory on \fBnpm install\fR\|\.
+.
+.SS "package\.json vars"
+The package\.json fields are tacked onto the \fBnpm_package_\fR prefix\. So,
+for instance, if you had \fB{"name":"foo", "version":"1\.2\.5"}\fR in your
+package\.json file, then your package scripts would have the \fBnpm_package_name\fR environment variable set to "foo", and the \fBnpm_package_version\fR set to "1\.2\.5"
+.
+.SS "configuration"
+Configuration parameters are put in the environment with the \fBnpm_config_\fR prefix\. For instance, you can view the effective \fBroot\fR
+config by checking the \fBnpm_config_root\fR environment variable\.
+.
+.SS "Special: package\.json &quot;config&quot; hash"
+The package\.json "config" keys are overwritten in the environment if
+there is a config param of \fB<name>[@<version>]:<key>\fR\|\. For example,
+if the package\.json has this:
+.
+.IP "" 4
+.
+.nf
+{ "name" : "foo"
+, "config" : { "port" : "8080" }
+, "scripts" : { "start" : "node server\.js" } }
+.
+.fi
+.
+.IP "" 0
+.
+.P
+and the server\.js is this:
+.
+.IP "" 4
+.
+.nf
+http\.createServer(\.\.\.)\.listen(process\.env\.npm_package_config_port)
+.
+.fi
+.
+.IP "" 0
+.
+.P
+then the user could change the behavior by doing:
+.
+.IP "" 4
+.
+.nf
+npm config set foo:port 80
+.
+.fi
+.
+.IP "" 0
+.
+.SS "current lifecycle event"
+Lastly, the \fBnpm_lifecycle_event\fR environment variable is set to
+whichever stage of the cycle is being executed\. So, you could have a
+single script used for different parts of the process which switches
+based on what\'s currently happening\.
+.
+.P
+Objects are flattened following this format, so if you had \fB{"scripts":{"install":"foo\.js"}}\fR in your package\.json, then you\'d
+see this in the script:
+.
+.IP "" 4
+.
+.nf
+process\.env\.npm_package_scripts_install === "foo\.js"
+.
+.fi
+.
+.IP "" 0
+.
+.SH "EXAMPLES"
+For example, if your package\.json contains this:
+.
+.IP "" 4
+.
+.nf
+{ "scripts" :
+ { "install" : "scripts/install\.js"
+ , "postinstall" : "scripts/install\.js"
+ , "uninstall" : "scripts/uninstall\.js"
+ }
+}
+.
+.fi
+.
+.IP "" 0
+.
+.P
+then the \fBscripts/install\.js\fR will be called for the install,
+post\-install, stages of the lifecycle, and the \fBscripts/uninstall\.js\fR
+would be called when the package is uninstalled\. Since \fBscripts/install\.js\fR is running for three different phases, it would
+be wise in this case to look at the \fBnpm_lifecycle_event\fR environment
+variable\.
+.
+.P
+If you want to run a make command, you can do so\. This works just
+fine:
+.
+.IP "" 4
+.
+.nf
+{ "scripts" :
+ { "preinstall" : "\./configure"
+ , "install" : "make && make install"
+ , "test" : "make test"
+ }
+}
+.
+.fi
+.
+.IP "" 0
+.
+.SH "EXITING"
+Scripts are run by passing the line as a script argument to \fBsh\fR\|\.
+.
+.P
+If the script exits with a code other than 0, then this will abort the
+process\.
+.
+.P
+Note that these script files don\'t have to be nodejs or even
+javascript programs\. They just have to be some kind of executable
+file\.
+.
+.SH "HOOK SCRIPTS"
+If you want to run a specific script at a specific lifecycle event for
+ALL packages, then you can use a hook script\.
+.
+.P
+Place an executable file at \fBnode_modules/\.hooks/{eventname}\fR, and
+it\'ll get run for all packages when they are going through that point
+in the package lifecycle for any packages installed in that root\.
+.
+.P
+Hook scripts are run exactly the same way as package\.json scripts\.
+That is, they are in a separate child process, with the env described
+above\.
+.
+.SH "BEST PRACTICES"
+.
+.IP "\(bu" 4
+Don\'t exit with a non\-zero error code unless you \fIreally\fR mean it\.
+Except for uninstall scripts, this will cause the npm action to
+fail, and potentially be rolled back\. If the failure is minor or
+only will prevent some optional features, then it\'s better to just
+print a warning and exit successfully\.
+.
+.IP "\(bu" 4
+npm help Try not to use scripts to do what npm can do for you\. Read through \fBpackage\.json\fR to see all the things that you can specify and enable
+by simply describing your package appropriately\. In general, this
+will lead to a more robust and consistent state\.
+.
+.IP "\(bu" 4
+Inspect the env to determine where to put things\. For instance, if
+the \fBnpm_config_binroot\fR environ is set to \fB/home/user/bin\fR, then
+don\'t try to install executables into \fB/usr/local/bin\fR\|\. The user
+probably set it up that way for a reason\.
+.
+.IP "\(bu" 4
+Don\'t prefix your script commands with "sudo"\. If root permissions
+are required for some reason, then it\'ll fail with that error, and
+the user will sudo the npm command in question\.
+.
+.IP "" 0
+.
+.SH "SEE ALSO"
+.
+.IP "\(bu" 4
+npm help run\-script
+.
+.IP "\(bu" 4
+npm help package\.json
+.
+.IP "\(bu" 4
+npm help developers
+.
+.IP "\(bu" 4
+npm help install
+.
+.IP "" 0
+
diff --git a/deps/npm/man/man7/removing-npm.7 b/deps/npm/man/man7/removing-npm.7
new file mode 100644
index 000000000..1ae454573
--- /dev/null
+++ b/deps/npm/man/man7/removing-npm.7
@@ -0,0 +1,107 @@
+.\" Generated with Ronnjs 0.3.8
+.\" http://github.com/kapouer/ronnjs/
+.
+.TH "NPM\-REMOVAL" "1" "May 2014" "" ""
+.
+.SH "NAME"
+\fBnpm-removal\fR \-\- Cleaning the Slate
+.
+.SH "SYNOPSIS"
+So sad to see you go\.
+.
+.IP "" 4
+.
+.nf
+sudo npm uninstall npm \-g
+.
+.fi
+.
+.IP "" 0
+.
+.P
+Or, if that fails, get the npm source code, and do:
+.
+.IP "" 4
+.
+.nf
+sudo make uninstall
+.
+.fi
+.
+.IP "" 0
+.
+.SH "More Severe Uninstalling"
+Usually, the above instructions are sufficient\. That will remove
+npm, but leave behind anything you\'ve installed\.
+.
+.P
+If that doesn\'t work, or if you require more drastic measures,
+continue reading\.
+.
+.P
+Note that this is only necessary for globally\-installed packages\. Local
+installs are completely contained within a project\'s \fBnode_modules\fR
+folder\. Delete that folder, and everything is gone (unless a package\'s
+install script is particularly ill\-behaved)\.
+.
+.P
+This assumes that you installed node and npm in the default place\. If
+you configured node with a different \fB\-\-prefix\fR, or installed npm with a
+different prefix setting, then adjust the paths accordingly, replacing \fB/usr/local\fR with your install prefix\.
+.
+.P
+To remove everything npm\-related manually:
+.
+.IP "" 4
+.
+.nf
+rm \-rf /usr/local/{lib/node{,/\.npm,_modules},bin,share/man}/npm*
+.
+.fi
+.
+.IP "" 0
+.
+.P
+If you installed things \fIwith\fR npm, then your best bet is to uninstall
+them with npm first, and then install them again once you have a
+proper install\. This can help find any symlinks that are lying
+around:
+.
+.IP "" 4
+.
+.nf
+ls \-laF /usr/local/{lib/node{,/\.npm},bin,share/man} | grep npm
+.
+.fi
+.
+.IP "" 0
+.
+.P
+Prior to version 0\.3, npm used shim files for executables and node
+modules\. To track those down, you can do the following:
+.
+.IP "" 4
+.
+.nf
+find /usr/local/{lib/node,bin} \-exec grep \-l npm \\{\\} \\; ;
+.
+.fi
+.
+.IP "" 0
+.
+.P
+(This is also in the README file\.)
+.
+.SH "SEE ALSO"
+.
+.IP "\(bu" 4
+README
+.
+.IP "\(bu" 4
+npm help rm
+.
+.IP "\(bu" 4
+npm help prune
+.
+.IP "" 0
+
diff --git a/deps/npm/man/man7/semver.7 b/deps/npm/man/man7/semver.7
new file mode 100644
index 000000000..6f7ebf1dd
--- /dev/null
+++ b/deps/npm/man/man7/semver.7
@@ -0,0 +1,219 @@
+.\" Generated with Ronnjs 0.3.8
+.\" http://github.com/kapouer/ronnjs/
+.
+.TH "SEMVER" "7" "May 2014" "" ""
+.
+.SH "NAME"
+\fBsemver\fR \-\- The semantic versioner for npm
+.
+.SH "Usage"
+.
+.nf
+$ npm install semver
+semver\.valid(\'1\.2\.3\') // \'1\.2\.3\'
+semver\.valid(\'a\.b\.c\') // null
+semver\.clean(\' =v1\.2\.3 \') // \'1\.2\.3\'
+semver\.satisfies(\'1\.2\.3\', \'1\.x || >=2\.5\.0 || 5\.0\.0 \- 7\.2\.3\') // true
+semver\.gt(\'1\.2\.3\', \'9\.8\.7\') // false
+semver\.lt(\'1\.2\.3\', \'9\.8\.7\') // true
+.
+.fi
+.
+.P
+As a command\-line utility:
+.
+.IP "" 4
+.
+.nf
+$ semver \-h
+Usage: semver <version> [<version> [\.\.\.]] [\-r <range> | \-i <inc> | \-d <dec>]
+Test if version(s) satisfy the supplied range(s), and sort them\.
+Multiple versions or ranges may be supplied, unless increment
+or decrement options are specified\. In that case, only a single
+version may be used, and it is incremented by the specified level
+Program exits successfully if any valid version satisfies
+all supplied ranges, and prints all satisfying versions\.
+If no versions are valid, or ranges are not satisfied,
+then exits failure\.
+Versions are printed in ascending order, so supplying
+multiple versions to the utility will just sort them\.
+.
+.fi
+.
+.IP "" 0
+.
+.SH "Versions"
+A "version" is described by the v2\.0\.0 specification found at \fIhttp://semver\.org/\fR\|\.
+.
+.P
+A leading \fB"="\fR or \fB"v"\fR character is stripped off and ignored\.
+.
+.SH "Ranges"
+The following range styles are supported:
+.
+.IP "\(bu" 4
+\fB1\.2\.3\fR A specific version\. When nothing else will do\. Note that
+build metadata is still ignored, so \fB1\.2\.3+build2012\fR will satisfy
+this range\.
+.
+.IP "\(bu" 4
+\fB>1\.2\.3\fR Greater than a specific version\.
+.
+.IP "\(bu" 4
+\fB<1\.2\.3\fR Less than a specific version\. If there is no prerelease
+tag on the version range, then no prerelease version will be allowed
+either, even though these are technically "less than"\.
+.
+.IP "\(bu" 4
+\fB>=1\.2\.3\fR Greater than or equal to\. Note that prerelease versions
+are NOT equal to their "normal" equivalents, so \fB1\.2\.3\-beta\fR will
+not satisfy this range, but \fB2\.3\.0\-beta\fR will\.
+.
+.IP "\(bu" 4
+\fB<=1\.2\.3\fR Less than or equal to\. In this case, prerelease versions
+ARE allowed, so \fB1\.2\.3\-beta\fR would satisfy\.
+.
+.IP "\(bu" 4
+\fB1\.2\.3 \- 2\.3\.4\fR := \fB>=1\.2\.3 <=2\.3\.4\fR
+.
+.IP "\(bu" 4
+\fB~1\.2\.3\fR := \fB>=1\.2\.3\-0 <1\.3\.0\-0\fR "Reasonably close to 1\.2\.3"\. When
+using tilde operators, prerelease versions are supported as well,
+but a prerelease of the next significant digit will NOT be
+satisfactory, so \fB1\.3\.0\-beta\fR will not satisfy \fB~1\.2\.3\fR\|\.
+.
+.IP "\(bu" 4
+\fB^1\.2\.3\fR := \fB>=1\.2\.3\-0 <2\.0\.0\-0\fR "Compatible with 1\.2\.3"\. When
+using caret operators, anything from the specified version (including
+prerelease) will be supported up to, but not including, the next
+major version (or its prereleases)\. \fB1\.5\.1\fR will satisfy \fB^1\.2\.3\fR,
+while \fB1\.2\.2\fR and \fB2\.0\.0\-beta\fR will not\.
+.
+.IP "\(bu" 4
+\fB^0\.1\.3\fR := \fB>=0\.1\.3\-0 <0\.2\.0\-0\fR "Compatible with 0\.1\.3"\. 0\.x\.x versions are
+special: the first non\-zero component indicates potentially breaking changes,
+meaning the caret operator matches any version with the same first non\-zero
+component starting at the specified version\.
+.
+.IP "\(bu" 4
+\fB^0\.0\.2\fR := \fB=0\.0\.2\fR "Only the version 0\.0\.2 is considered compatible"
+.
+.IP "\(bu" 4
+\fB~1\.2\fR := \fB>=1\.2\.0\-0 <1\.3\.0\-0\fR "Any version starting with 1\.2"
+.
+.IP "\(bu" 4
+\fB^1\.2\fR := \fB>=1\.2\.0\-0 <2\.0\.0\-0\fR "Any version compatible with 1\.2"
+.
+.IP "\(bu" 4
+\fB1\.2\.x\fR := \fB>=1\.2\.0\-0 <1\.3\.0\-0\fR "Any version starting with 1\.2"
+.
+.IP "\(bu" 4
+\fB~1\fR := \fB>=1\.0\.0\-0 <2\.0\.0\-0\fR "Any version starting with 1"
+.
+.IP "\(bu" 4
+\fB^1\fR := \fB>=1\.0\.0\-0 <2\.0\.0\-0\fR "Any version compatible with 1"
+.
+.IP "\(bu" 4
+\fB1\.x\fR := \fB>=1\.0\.0\-0 <2\.0\.0\-0\fR "Any version starting with 1"
+.
+.IP "" 0
+.
+.P
+Ranges can be joined with either a space (which implies "and") or a \fB||\fR (which implies "or")\.
+.
+.SH "Functions"
+All methods and classes take a final \fBloose\fR boolean argument that, if
+true, will be more forgiving about not\-quite\-valid semver strings\.
+The resulting output will always be 100% strict, of course\.
+.
+.P
+Strict\-mode Comparators and Ranges will be strict about the SemVer
+strings that they parse\.
+.
+.IP "\(bu" 4
+valid(v): Return the parsed version, or null if it\'s not valid\.
+.
+.IP "\(bu" 4
+inc(v, release): Return the version incremented by the release type
+(major, minor, patch, or prerelease), or null if it\'s not valid\.
+.
+.IP "" 0
+.
+.SS "Comparison"
+.
+.IP "\(bu" 4
+gt(v1, v2): \fBv1 > v2\fR
+.
+.IP "\(bu" 4
+gte(v1, v2): \fBv1 >= v2\fR
+.
+.IP "\(bu" 4
+lt(v1, v2): \fBv1 < v2\fR
+.
+.IP "\(bu" 4
+lte(v1, v2): \fBv1 <= v2\fR
+.
+.IP "\(bu" 4
+eq(v1, v2): \fBv1 == v2\fR This is true if they\'re logically equivalent,
+even if they\'re not the exact same string\. You already know how to
+compare strings\.
+.
+.IP "\(bu" 4
+neq(v1, v2): \fBv1 != v2\fR The opposite of eq\.
+.
+.IP "\(bu" 4
+cmp(v1, comparator, v2): Pass in a comparison string, and it\'ll call
+the corresponding function above\. \fB"==="\fR and \fB"!=="\fR do simple
+string comparison, but are included for completeness\. Throws if an
+invalid comparison string is provided\.
+.
+.IP "\(bu" 4
+compare(v1, v2): Return 0 if v1 == v2, or 1 if v1 is greater, or \-1 if
+v2 is greater\. Sorts in ascending order if passed to Array\.sort()\.
+.
+.IP "\(bu" 4
+rcompare(v1, v2): The reverse of compare\. Sorts an array of versions
+in descending order when passed to Array\.sort()\.
+.
+.IP "" 0
+.
+.SS "Ranges"
+.
+.IP "\(bu" 4
+validRange(range): Return the valid range or null if it\'s not valid
+.
+.IP "\(bu" 4
+satisfies(version, range): Return true if the version satisfies the
+range\.
+.
+.IP "\(bu" 4
+maxSatisfying(versions, range): Return the highest version in the list
+that satisfies the range, or null if none of them do\.
+.
+.IP "\(bu" 4
+gtr(version, range): Return true if version is greater than all the
+versions possible in the range\.
+.
+.IP "\(bu" 4
+ltr(version, range): Return true if version is less than all the
+versions possible in the range\.
+.
+.IP "\(bu" 4
+outside(version, range, hilo): Return true if the version is outside
+the bounds of the range in either the high or low direction\. The \fBhilo\fR argument must be either the string \fB\'>\'\fR or \fB\'<\'\fR\|\. (This is
+the function called by \fBgtr\fR and \fBltr\fR\|\.)
+.
+.IP "" 0
+.
+.P
+Note that, since ranges may be non\-contiguous, a version might not be
+greater than a range, less than a range, \fIor\fR satisfy a range! For
+example, the range \fB1\.2 <1\.2\.9 || >2\.0\.0\fR would have a hole from \fB1\.2\.9\fR
+until \fB2\.0\.0\fR, so the version \fB1\.2\.10\fR would not be greater than the
+range (because 2\.0\.1 satisfies, which is higher), nor less than the
+range (since 1\.2\.8 satisfies, which is lower), and it also does not
+satisfy the range\.
+.
+.P
+If you want to know if a version satisfies or does not satisfy a
+range, use the \fBsatisfies(version, range)\fR function\.
diff --git a/deps/npm/node_modules/ansi/README.md b/deps/npm/node_modules/ansi/README.md
index 7b427fe4c..2f9bb140a 100644
--- a/deps/npm/node_modules/ansi/README.md
+++ b/deps/npm/node_modules/ansi/README.md
@@ -2,8 +2,6 @@ ansi.js
=========
### Advanced ANSI formatting tool for Node.js
-![](http://f.cl.ly/items/0D3w3d1W443f2z3X361G/Screen%20Shot%202012-01-26%20at%202.18.31%20AM.png)
-
`ansi.js` is a module for Node.js that provides an easy-to-use API for
writing ANSI escape codes to `Stream` instances. ANSI escape codes are used to do
fancy things in a terminal window, like render text in colors, delete characters,
@@ -91,9 +89,3 @@ IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-----------
-
-Additionally:
-
- * The `yoshi.png` file inside `examples/imgcat` is copyright to Nintendo, Inc.
diff --git a/deps/npm/node_modules/ansi/color-spaces.pl b/deps/npm/node_modules/ansi/color-spaces.pl
new file mode 100644
index 000000000..8774c0446
--- /dev/null
+++ b/deps/npm/node_modules/ansi/color-spaces.pl
@@ -0,0 +1,67 @@
+#!/usr/bin/perl
+# Author: Todd Larason <jtl@molehill.org>
+# $XFree86: xc/programs/xterm/vttests/256colors2.pl,v 1.1 1999/07/11 08:49:54 dawes Exp $
+
+print "256 color mode\n\n";
+
+# display back ground colors
+
+for ($fgbg = 38; $fgbg <= 48; $fgbg +=10) {
+
+# first the system ones:
+print "System colors:\n";
+for ($color = 0; $color < 8; $color++) {
+ print "\x1b[${fgbg};5;${color}m::";
+}
+print "\x1b[0m\n";
+for ($color = 8; $color < 16; $color++) {
+ print "\x1b[${fgbg};5;${color}m::";
+}
+print "\x1b[0m\n\n";
+
+# now the color cube
+print "Color cube, 6x6x6:\n";
+for ($green = 0; $green < 6; $green++) {
+ for ($red = 0; $red < 6; $red++) {
+ for ($blue = 0; $blue < 6; $blue++) {
+ $color = 16 + ($red * 36) + ($green * 6) + $blue;
+ print "\x1b[${fgbg};5;${color}m::";
+ }
+ print "\x1b[0m ";
+ }
+ print "\n";
+}
+
+# now the grayscale ramp
+print "Grayscale ramp:\n";
+for ($color = 232; $color < 256; $color++) {
+ print "\x1b[${fgbg};5;${color}m::";
+}
+print "\x1b[0m\n\n";
+
+}
+
+print "Examples for the 3-byte color mode\n\n";
+
+for ($fgbg = 38; $fgbg <= 48; $fgbg +=10) {
+
+# now the color cube
+print "Color cube\n";
+for ($green = 0; $green < 256; $green+=51) {
+ for ($red = 0; $red < 256; $red+=51) {
+ for ($blue = 0; $blue < 256; $blue+=51) {
+ print "\x1b[${fgbg};2;${red};${green};${blue}m::";
+ }
+ print "\x1b[0m ";
+ }
+ print "\n";
+}
+
+# now the grayscale ramp
+print "Grayscale ramp:\n";
+for ($gray = 8; $gray < 256; $gray+=10) {
+ print "\x1b[${fgbg};2;${gray};${gray};${gray}m::";
+}
+print "\x1b[0m\n\n";
+
+}
diff --git a/deps/npm/node_modules/ansi/examples/cursorPosition.js b/deps/npm/node_modules/ansi/examples/cursorPosition.js
index 0f45bdbe5..50f964490 100755
--- a/deps/npm/node_modules/ansi/examples/cursorPosition.js
+++ b/deps/npm/node_modules/ansi/examples/cursorPosition.js
@@ -5,7 +5,7 @@ var cursor = require('../')(process.stdout)
// listen for the queryPosition report on stdin
process.stdin.resume()
-tty.setRawMode(true)
+raw(true)
process.stdin.once('data', function (b) {
var match = /\[(\d+)\;(\d+)R$/.exec(b.toString())
@@ -15,10 +15,18 @@ process.stdin.once('data', function (b) {
}
// cleanup and close stdin
- tty.setRawMode(false)
+ raw(false)
process.stdin.pause()
})
// send the query position request code to stdout
cursor.queryPosition()
+
+function raw (mode) {
+ if (process.stdin.setRawMode) {
+ process.stdin.setRawMode(mode)
+ } else {
+ tty.setRawMode(mode)
+ }
+}
diff --git a/deps/npm/node_modules/ansi/examples/imgcat/index.js b/deps/npm/node_modules/ansi/examples/imgcat/index.js
deleted file mode 100755
index 5ff2c1394..000000000
--- a/deps/npm/node_modules/ansi/examples/imgcat/index.js
+++ /dev/null
@@ -1,50 +0,0 @@
-#!/usr/bin/env node
-
-process.title = 'imgcat'
-
-var ansi = require('../../')
- , cursor = ansi(process.stdout, { enabled: true })
- , tty = require('tty')
- , Canvas = require('canvas')
- , imageFile = process.argv[2] || __dirname + '/yoshi.png'
- , screenWidth = process.stdout.isTTY ? process.stdout.getWindowSize()[0] : Infinity
- , maxWidth = parseInt(process.argv[3], 10) || screenWidth
- , image = require('fs').readFileSync(imageFile)
- , pixel = ' '
- , alphaThreshold = 0
-
-var img = new Canvas.Image();
-img.src = image;
-
-function draw () {
- var width = maxWidth / pixel.length
- , scaleW = img.width > width ? width / img.width : 1
- , w = Math.floor(img.width * scaleW)
- , h = Math.floor(img.height * scaleW);
-
- var canvas = new Canvas(w, h)
- , ctx = canvas.getContext('2d');
-
- ctx.drawImage(img, 0, 0, w, h);
-
- var data = ctx.getImageData(0, 0, w, h).data;
-
- for (var i=0, l=data.length; i<l; i+=4) {
- var r = data[i]
- , g = data[i+1]
- , b = data[i+2]
- , alpha = data[i+3];
- if (alpha > alphaThreshold) {
- cursor.bg.rgb(r, g, b);
- } else {
- cursor.bg.reset();
- }
- process.stdout.write(pixel);
- if ((i/4|0) % w === (w-1)) {
- cursor.bg.reset();
- process.stdout.write('\n');
- }
- }
-}
-
-draw();
diff --git a/deps/npm/node_modules/ansi/examples/imgcat/yoshi.png b/deps/npm/node_modules/ansi/examples/imgcat/yoshi.png
deleted file mode 100644
index 267ede254..000000000
--- a/deps/npm/node_modules/ansi/examples/imgcat/yoshi.png
+++ /dev/null
Binary files differ
diff --git a/deps/npm/node_modules/ansi/examples/starwars.js b/deps/npm/node_modules/ansi/examples/starwars.js
index a1fcad42a..06f8ba847 100755
--- a/deps/npm/node_modules/ansi/examples/starwars.js
+++ b/deps/npm/node_modules/ansi/examples/starwars.js
@@ -9,6 +9,7 @@ process.title = 'starwars'
var net = require('net')
, cursor = require('../')(process.stdout)
+ , color = process.argv[2]
// enable "raw mode" so that keystrokes aren't visible
process.stdin.resume()
@@ -22,6 +23,9 @@ if (process.stdin.setRawMode) {
var socket = net.connect(23, 'towel.blinkenlights.nl')
socket.on('connect', function () {
+ if (color in cursor.fg) {
+ cursor.fg[color]()
+ }
cursor.hide()
socket.pipe(process.stdout)
})
@@ -35,5 +39,8 @@ process.stdin.on('data', function (data) {
})
process.on('exit', function () {
- cursor.show().write('\n')
+ cursor
+ .show()
+ .fg.reset()
+ .write('\n')
})
diff --git a/deps/npm/node_modules/ansi/lib/ansi.js b/deps/npm/node_modules/ansi/lib/ansi.js
index cc883e8d8..52fc8ec8b 100644
--- a/deps/npm/node_modules/ansi/lib/ansi.js
+++ b/deps/npm/node_modules/ansi/lib/ansi.js
@@ -12,7 +12,7 @@
*/
var emitNewlineEvents = require('./newlines')
- , prefix = '\033[' // For all escape codes
+ , prefix = '\x1b[' // For all escape codes
, suffix = 'm' // Only for color codes
/**
@@ -120,6 +120,11 @@ function Cursor (stream, options) {
}
this.enabled = !!this.enabled
+ // then `buffering` is true, then `write()` calls are buffered in
+ // memory until `flush()` is invoked
+ this.buffering = !!(options && options.buffering)
+ this._buffer = []
+
// controls the foreground and background colors
this.fg = this.foreground = new Colorer(this, 0)
this.bg = this.background = new Colorer(this, 10)
@@ -145,8 +150,40 @@ exports.Cursor = Cursor
* the chaining going.
*/
-Cursor.prototype.write = function () {
- this.stream.write.apply(this.stream, arguments)
+Cursor.prototype.write = function (data) {
+ if (this.buffering) {
+ this._buffer.push(arguments)
+ } else {
+ this.stream.write.apply(this.stream, arguments)
+ }
+ return this
+}
+
+/**
+ * Buffer `write()` calls into memory.
+ *
+ * @api public
+ */
+
+Cursor.prototype.buffer = function () {
+ this.buffering = true
+ return this
+}
+
+/**
+ * Write out the in-memory buffer.
+ *
+ * @api public
+ */
+
+Cursor.prototype.flush = function () {
+ this.buffering = false
+ var str = this._buffer.map(function (args) {
+ if (args.length != 1) throw new Error('unexpected args length! ' + args.length);
+ return args[0];
+ }).join('');
+ this._buffer.splice(0); // empty
+ this.write(str);
return this
}
@@ -237,7 +274,7 @@ Object.keys(colors).forEach(function (color) {
*/
Cursor.prototype.beep = function () {
- this.enabled && this.write('\007')
+ this.enabled && this.write('\x07')
return this
}
diff --git a/deps/npm/node_modules/ansi/package.json b/deps/npm/node_modules/ansi/package.json
index d449d827e..e7cde2604 100644
--- a/deps/npm/node_modules/ansi/package.json
+++ b/deps/npm/node_modules/ansi/package.json
@@ -11,7 +11,7 @@
"256",
"stream"
],
- "version": "0.1.2",
+ "version": "0.2.1",
"author": {
"name": "Nathan Rajlich",
"email": "nathan@tootallnate.net",
@@ -25,32 +25,26 @@
"bin": {
"beep": "./examples/beep/index.js",
"clear": "./examples/clear/index.js",
- "imgcat": "./examples/imgcat/index.js",
"starwars": "./examples/starwars.js"
},
"scripts": {
"test": "mocha --reporter spec"
},
"devDependencies": {
- "mocha": "*",
- "canvas": "*"
+ "mocha": "*"
},
"engines": {
"node": "*"
},
- "_npmUser": {
- "name": "isaacs",
- "email": "i@izs.me"
- },
- "_id": "ansi@0.1.2",
- "dependencies": {},
- "optionalDependencies": {},
- "_engineSupported": true,
- "_npmVersion": "1.1.24",
- "_nodeVersion": "v0.7.10-pre",
- "_defaultsLoaded": true,
+ "readme": "ansi.js\n=========\n### Advanced ANSI formatting tool for Node.js\n\n`ansi.js` is a module for Node.js that provides an easy-to-use API for\nwriting ANSI escape codes to `Stream` instances. ANSI escape codes are used to do\nfancy things in a terminal window, like render text in colors, delete characters,\nlines, the entire window, or hide and show the cursor, and lots more!\n\nThe code for the example in the screenshot above can be found in the\n`examples/imgcat` directory.\n\n#### Features:\n\n * 256 color support for the terminal!\n * Make a beep sound from your terminal!\n * Works with *any* writable `Stream` instance.\n * Allows you to move the cursor anywhere on the terminal window.\n * Allows you to delete existing contents from the terminal window.\n * Allows you to hide and show the cursor.\n * Converts CSS color codes and RGB values into ANSI escape codes.\n * Low-level; you are in control of when escape codes are used, it's not abstracted.\n\n\nInstallation\n------------\n\nInstall with `npm`:\n\n``` bash\n$ npm install ansi\n```\n\n\nExample\n-------\n\n``` js\nvar ansi = require('ansi')\n , cursor = ansi(process.stdout)\n\n// You can chain your calls forever:\ncursor\n .red() // Set font color to red\n .bg.grey() // Set background color to grey\n .write('Hello World!') // Write 'Hello World!' to stdout\n .bg.reset() // Reset the bgcolor before writing the trailing \\n,\n // to avoid Terminal glitches\n .write('\\n') // And a final \\n to wrap things up\n\n// Rendering modes are persistent:\ncursor.hex('#660000').bold().underline()\n\n// You can use the regular logging functions, text will be green\nconsole.log('This is blood red, bold text')\n\n// To reset just the foreground color:\ncursor.fg.reset()\n\nconsole.log('This will still be bold')\n\n// Clean up after yourself!\ncursor.reset()\n```\n\n\nLicense\n-------\n\n(The MIT License)\n\nCopyright (c) 2012 Nathan Rajlich &lt;nathan@tootallnate.net&gt;\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n'Software'), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n",
+ "readmeFilename": "README.md",
+ "bugs": {
+ "url": "https://github.com/TooTallNate/ansi.js/issues"
+ },
+ "_id": "ansi@0.2.1",
"dist": {
- "shasum": "6139b23459bcd74b04572cf56b36102983d0a7d4"
+ "shasum": "76961682ac06d5ea0729af53295ea8f953a0cb21"
},
- "_from": "ansi@~0.1.2"
+ "_from": "ansi@latest",
+ "_resolved": "https://registry.npmjs.org/ansi/-/ansi-0.2.1.tgz"
}
diff --git a/deps/npm/node_modules/ansicolors/LICENSE b/deps/npm/node_modules/ansicolors/LICENSE
new file mode 100644
index 000000000..41702c504
--- /dev/null
+++ b/deps/npm/node_modules/ansicolors/LICENSE
@@ -0,0 +1,23 @@
+Copyright 2013 Thorsten Lorenz.
+All rights reserved.
+
+Permission is hereby granted, free of charge, to any person
+obtaining a copy of this software and associated documentation
+files (the "Software"), to deal in the Software without
+restriction, including without limitation the rights to use,
+copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the
+Software is furnished to do so, subject to the following
+conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+OTHER DEALINGS IN THE SOFTWARE.
diff --git a/deps/npm/node_modules/ansicolors/README.md b/deps/npm/node_modules/ansicolors/README.md
new file mode 100644
index 000000000..f3e9d070b
--- /dev/null
+++ b/deps/npm/node_modules/ansicolors/README.md
@@ -0,0 +1,62 @@
+# ansicolors [![build status](https://secure.travis-ci.org/thlorenz/ansicolors.png)](http://next.travis-ci.org/thlorenz/ansicolors)
+
+Functions that surround a string with ansicolor codes so it prints in color.
+
+In case you need styles, like `bold`, have a look at [ansistyles](https://github.com/thlorenz/ansistyles).
+
+## Installation
+
+ npm install ansicolors
+
+## Usage
+
+```js
+var colors = require('ansicolors');
+
+// foreground colors
+var redHerring = colors.red('herring');
+var blueMoon = colors.blue('moon');
+var brighBlueMoon = colors.brightBlue('moon');
+
+console.log(redHerring); // this will print 'herring' in red
+console.log(blueMoon); // this 'moon' in blue
+console.log(brightBlueMoon); // I think you got the idea
+
+// background colors
+console.log(colors.bgYellow('printed on yellow background'));
+console.log(colors.bgBrightBlue('printed on bright blue background'));
+
+// mixing background and foreground colors
+// below two lines have same result (order in which bg and fg are combined doesn't matter)
+console.log(colors.bgYellow(colors.blue('printed on yellow background in blue')));
+console.log(colors.blue(colors.bgYellow('printed on yellow background in blue')));
+```
+
+## Advanced API
+
+**ansicolors** allows you to access opening and closing escape sequences separately.
+
+```js
+var colors = require('ansicolors');
+
+function inspect(obj, depth) {
+ return require('util').inspect(obj, false, depth || 5, true);
+}
+
+console.log('open blue', inspect(colors.open.blue));
+console.log('close bgBlack', inspect(colors.close.bgBlack));
+
+// => open blue '\u001b[34m'
+// close bgBlack '\u001b[49m'
+```
+
+## Tests
+
+Look at the [tests](https://github.com/thlorenz/ansicolors/blob/master/test/ansicolors.js) to see more examples and/or run them via:
+
+ npm explore ansicolors && npm test
+
+## Alternatives
+
+**ansicolors** tries to meet simple use cases with a very simple API. However, if you need a more powerful ansi formatting tool,
+I'd suggest to look at the [features](https://github.com/TooTallNate/ansi.js#features) of the [ansi module](https://github.com/TooTallNate/ansi.js).
diff --git a/deps/npm/node_modules/ansicolors/ansicolors.js b/deps/npm/node_modules/ansicolors/ansicolors.js
new file mode 100644
index 000000000..16b2586f6
--- /dev/null
+++ b/deps/npm/node_modules/ansicolors/ansicolors.js
@@ -0,0 +1,65 @@
+// ColorCodes explained: http://www.termsys.demon.co.uk/vtansi.htm
+'use strict';
+
+var colorNums = {
+ white : 37
+ , black : 30
+ , blue : 34
+ , cyan : 36
+ , green : 32
+ , magenta : 35
+ , red : 31
+ , yellow : 33
+ , brightBlack : 90
+ , brightRed : 91
+ , brightGreen : 92
+ , brightYellow : 93
+ , brightBlue : 94
+ , brightMagenta : 95
+ , brightCyan : 96
+ , brightWhite : 97
+ }
+ , backgroundColorNums = {
+ bgBlack : 40
+ , bgRed : 41
+ , bgGreen : 42
+ , bgYellow : 43
+ , bgBlue : 44
+ , bgMagenta : 45
+ , bgCyan : 46
+ , bgWhite : 47
+ , bgBrightBlack : 100
+ , bgBrightRed : 101
+ , bgBrightGreen : 102
+ , bgBrightYellow : 103
+ , bgBrightBlue : 104
+ , bgBrightMagenta : 105
+ , bgBrightCyan : 106
+ , bgBrightWhite : 107
+ }
+ , open = {}
+ , close = {}
+ , colors = {}
+ ;
+
+Object.keys(colorNums).forEach(function (k) {
+ var o = open[k] = '\u001b[' + colorNums[k] + 'm';
+ var c = close[k] = '\u001b[39m';
+
+ colors[k] = function (s) {
+ return o + s + c;
+ };
+});
+
+Object.keys(backgroundColorNums).forEach(function (k) {
+ var o = open[k] = '\u001b[' + backgroundColorNums[k] + 'm';
+ var c = close[k] = '\u001b[49m';
+
+ colors[k] = function (s) {
+ return o + s + c;
+ };
+});
+
+module.exports = colors;
+colors.open = open;
+colors.close = close;
diff --git a/deps/npm/node_modules/ansicolors/package.json b/deps/npm/node_modules/ansicolors/package.json
new file mode 100644
index 000000000..bca06da29
--- /dev/null
+++ b/deps/npm/node_modules/ansicolors/package.json
@@ -0,0 +1,34 @@
+{
+ "name": "ansicolors",
+ "version": "0.3.2",
+ "description": "Functions that surround a string with ansicolor codes so it prints in color.",
+ "main": "ansicolors.js",
+ "scripts": {
+ "test": "node test/*.js"
+ },
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/thlorenz/ansicolors.git"
+ },
+ "keywords": [
+ "ansi",
+ "colors",
+ "highlight",
+ "string"
+ ],
+ "author": {
+ "name": "Thorsten Lorenz",
+ "email": "thlorenz@gmx.de",
+ "url": "thlorenz.com"
+ },
+ "license": "MIT",
+ "readmeFilename": "README.md",
+ "gitHead": "858847ca28e8b360d9b70eee0592700fa2ab087d",
+ "readme": "# ansicolors [![build status](https://secure.travis-ci.org/thlorenz/ansicolors.png)](http://next.travis-ci.org/thlorenz/ansicolors)\n\nFunctions that surround a string with ansicolor codes so it prints in color.\n\nIn case you need styles, like `bold`, have a look at [ansistyles](https://github.com/thlorenz/ansistyles).\n\n## Installation\n\n npm install ansicolors\n\n## Usage\n\n```js\nvar colors = require('ansicolors');\n\n// foreground colors\nvar redHerring = colors.red('herring');\nvar blueMoon = colors.blue('moon');\nvar brighBlueMoon = colors.brightBlue('moon');\n\nconsole.log(redHerring); // this will print 'herring' in red\nconsole.log(blueMoon); // this 'moon' in blue\nconsole.log(brightBlueMoon); // I think you got the idea\n\n// background colors\nconsole.log(colors.bgYellow('printed on yellow background'));\nconsole.log(colors.bgBrightBlue('printed on bright blue background'));\n\n// mixing background and foreground colors\n// below two lines have same result (order in which bg and fg are combined doesn't matter)\nconsole.log(colors.bgYellow(colors.blue('printed on yellow background in blue')));\nconsole.log(colors.blue(colors.bgYellow('printed on yellow background in blue')));\n```\n\n## Advanced API\n\n**ansicolors** allows you to access opening and closing escape sequences separately.\n\n```js\nvar colors = require('ansicolors');\n\nfunction inspect(obj, depth) {\n return require('util').inspect(obj, false, depth || 5, true);\n}\n\nconsole.log('open blue', inspect(colors.open.blue));\nconsole.log('close bgBlack', inspect(colors.close.bgBlack));\n\n// => open blue '\\u001b[34m'\n// close bgBlack '\\u001b[49m'\n```\n\n## Tests\n\nLook at the [tests](https://github.com/thlorenz/ansicolors/blob/master/test/ansicolors.js) to see more examples and/or run them via: \n\n npm explore ansicolors && npm test\n\n## Alternatives\n\n**ansicolors** tries to meet simple use cases with a very simple API. However, if you need a more powerful ansi formatting tool, \nI'd suggest to look at the [features](https://github.com/TooTallNate/ansi.js#features) of the [ansi module](https://github.com/TooTallNate/ansi.js).\n",
+ "bugs": {
+ "url": "https://github.com/thlorenz/ansicolors/issues"
+ },
+ "homepage": "https://github.com/thlorenz/ansicolors",
+ "_id": "ansicolors@0.3.2",
+ "_from": "ansicolors@latest"
+}
diff --git a/deps/npm/node_modules/ansicolors/test/ansicolors.js b/deps/npm/node_modules/ansicolors/test/ansicolors.js
new file mode 100644
index 000000000..494539305
--- /dev/null
+++ b/deps/npm/node_modules/ansicolors/test/ansicolors.js
@@ -0,0 +1,71 @@
+'use strict';
+
+var assert = require('assert')
+ , colors = require('..')
+ , open = colors.open
+ , close = colors.close
+
+console.log('Foreground colors ..');
+
+assert.equal(colors.white('printed in white'), '\u001b[37mprinted in white\u001b[39m');
+
+assert.equal(colors.black('printed in black'), '\u001b[30mprinted in black\u001b[39m');
+assert.equal(colors.brightBlack('printed in bright black'), '\u001b[90mprinted in bright black\u001b[39m');
+
+assert.equal(colors.green('printed in green'), '\u001b[32mprinted in green\u001b[39m');
+assert.equal(colors.brightGreen('printed in bright green'), '\u001b[92mprinted in bright green\u001b[39m');
+
+assert.equal(colors.red('printed in red'), '\u001b[31mprinted in red\u001b[39m');
+assert.equal(colors.brightRed('printed in bright red'), '\u001b[91mprinted in bright red\u001b[39m');
+
+console.log('OK');
+
+console.log('Background colors ..');
+
+assert.equal(
+ colors.bgBlack('printed with black background')
+ , '\u001b[40mprinted with black background\u001b[49m'
+);
+
+assert.equal(
+ colors.bgYellow('printed with yellow background')
+ , '\u001b[43mprinted with yellow background\u001b[49m'
+);
+assert.equal(
+ colors.bgBrightYellow('printed with bright yellow background')
+ , '\u001b[103mprinted with bright yellow background\u001b[49m'
+);
+
+assert.equal(
+ colors.bgWhite('printed with white background')
+ , '\u001b[47mprinted with white background\u001b[49m'
+);
+
+console.log('OK');
+
+console.log('Mixing background and foreground colors ..');
+
+assert.equal(
+ colors.blue(colors.bgYellow('printed in blue with yellow background'))
+ , '\u001b[34m\u001b[43mprinted in blue with yellow background\u001b[49m\u001b[39m'
+);
+assert.equal(
+ colors.bgYellow(colors.blue('printed in blue with yellow background again'))
+ , '\u001b[43m\u001b[34mprinted in blue with yellow background again\u001b[39m\u001b[49m'
+);
+
+console.log('OK');
+
+console.log('Open ...');
+
+assert.equal(open.black, '\u001b[30m');
+assert.equal(open.bgYellow, '\u001b[43m');
+
+console.log('OK');
+
+console.log('Close ...');
+
+assert.equal(close.black, '\u001b[39m');
+assert.equal(close.bgYellow, '\u001b[49m');
+
+console.log('OK');
diff --git a/deps/npm/node_modules/ansistyles/LICENSE b/deps/npm/node_modules/ansistyles/LICENSE
new file mode 100644
index 000000000..41702c504
--- /dev/null
+++ b/deps/npm/node_modules/ansistyles/LICENSE
@@ -0,0 +1,23 @@
+Copyright 2013 Thorsten Lorenz.
+All rights reserved.
+
+Permission is hereby granted, free of charge, to any person
+obtaining a copy of this software and associated documentation
+files (the "Software"), to deal in the Software without
+restriction, including without limitation the rights to use,
+copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the
+Software is furnished to do so, subject to the following
+conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+OTHER DEALINGS IN THE SOFTWARE.
diff --git a/deps/npm/node_modules/ansistyles/README.md b/deps/npm/node_modules/ansistyles/README.md
new file mode 100644
index 000000000..e39b8dfb6
--- /dev/null
+++ b/deps/npm/node_modules/ansistyles/README.md
@@ -0,0 +1,71 @@
+# ansistyles [![build status](https://secure.travis-ci.org/thlorenz/ansistyles.png)](http://next.travis-ci.org/thlorenz/ansistyles)
+
+Functions that surround a string with ansistyle codes so it prints in style.
+
+In case you need colors, like `red`, have a look at [ansicolors](https://github.com/thlorenz/ansicolors).
+
+## Installation
+
+ npm install ansistyles
+
+## Usage
+
+```js
+var styles = require('ansistyles');
+
+console.log(styles.bright('hello world')); // prints hello world in 'bright' white
+console.log(styles.underline('hello world')); // prints hello world underlined
+console.log(styles.inverse('hello world')); // prints hello world black on white
+```
+
+## Combining with ansicolors
+
+Get the ansicolors module:
+
+ npm install ansicolors
+
+```js
+var styles = require('ansistyles')
+ , colors = require('ansicolors');
+
+ console.log(
+ // prints hello world underlined in blue on a green background
+ colors.bgGreen(colors.blue(styles.underline('hello world')))
+ );
+```
+
+## Tests
+
+Look at the [tests](https://github.com/thlorenz/ansistyles/blob/master/test/ansistyles.js) to see more examples and/or run them via:
+
+ npm explore ansistyles && npm test
+
+## More Styles
+
+As you can see from [here](https://github.com/thlorenz/ansistyles/blob/master/ansistyles.js#L4-L15), more styles are available,
+but didn't have any effect on the terminals that I tested on Mac Lion and Ubuntu Linux.
+
+I included them for completeness, but didn't show them in the examples because they seem to have no effect.
+
+### reset
+
+A style reset function is also included, please note however that this is not nestable.
+
+Therefore the below only underlines `hell` only, but not `world`.
+
+```js
+console.log(styles.underline('hell' + styles.reset('o') + ' world'));
+```
+
+It is essentially the same as:
+
+```js
+console.log(styles.underline('hell') + styles.reset('') + 'o world');
+```
+
+
+
+## Alternatives
+
+**ansistyles** tries to meet simple use cases with a very simple API. However, if you need a more powerful ansi formatting tool,
+I'd suggest to look at the [features](https://github.com/TooTallNate/ansi.js#features) of the [ansi module](https://github.com/TooTallNate/ansi.js).
diff --git a/deps/npm/node_modules/ansistyles/ansistyles.js b/deps/npm/node_modules/ansistyles/ansistyles.js
new file mode 100644
index 000000000..5b8788c0f
--- /dev/null
+++ b/deps/npm/node_modules/ansistyles/ansistyles.js
@@ -0,0 +1,38 @@
+'use strict';
+
+/*
+ * Info: http://www.termsys.demon.co.uk/vtansi.htm#colors
+ * Following caveats
+ * bright - brightens the color (bold-blue is same as brigthtBlue)
+ * dim - nothing on Mac or Linux
+ * italic - nothing on Mac or Linux
+ * underline - underlines string
+ * blink - nothing on Mac or linux
+ * inverse - background becomes foreground and vice versa
+ *
+ * In summary, the only styles that work are:
+ * - bright, underline and inverse
+ * - the others are only included for completeness
+ */
+
+var styleNums = {
+ reset : [0, 22]
+ , bright : [1, 22]
+ , dim : [2, 22]
+ , italic : [3, 23]
+ , underline : [4, 24]
+ , blink : [5, 25]
+ , inverse : [7, 27]
+ }
+ , styles = {}
+ ;
+
+Object.keys(styleNums).forEach(function (k) {
+ styles[k] = function (s) {
+ var open = styleNums[k][0]
+ , close = styleNums[k][1];
+ return '\u001b[' + open + 'm' + s + '\u001b[' + close + 'm';
+ };
+});
+
+module.exports = styles;
diff --git a/deps/npm/node_modules/ansistyles/package.json b/deps/npm/node_modules/ansistyles/package.json
new file mode 100644
index 000000000..dec9cd9e6
--- /dev/null
+++ b/deps/npm/node_modules/ansistyles/package.json
@@ -0,0 +1,38 @@
+{
+ "name": "ansistyles",
+ "version": "0.1.3",
+ "description": "Functions that surround a string with ansistyle codes so it prints in style.",
+ "main": "ansistyles.js",
+ "scripts": {
+ "test": "node test/ansistyles.js"
+ },
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/thlorenz/ansistyles.git"
+ },
+ "keywords": [
+ "ansi",
+ "style",
+ "terminal",
+ "console"
+ ],
+ "author": {
+ "name": "Thorsten Lorenz",
+ "email": "thlorenz@gmx.de",
+ "url": "thlorenz.com"
+ },
+ "license": "MIT",
+ "readmeFilename": "README.md",
+ "gitHead": "27bf1bc65231bcc7fd109bf13b13601b51f8cd04",
+ "readme": "# ansistyles [![build status](https://secure.travis-ci.org/thlorenz/ansistyles.png)](http://next.travis-ci.org/thlorenz/ansistyles)\n\nFunctions that surround a string with ansistyle codes so it prints in style.\n\nIn case you need colors, like `red`, have a look at [ansicolors](https://github.com/thlorenz/ansicolors).\n\n## Installation\n\n npm install ansistyles\n\n## Usage\n\n```js\nvar styles = require('ansistyles');\n\nconsole.log(styles.bright('hello world')); // prints hello world in 'bright' white\nconsole.log(styles.underline('hello world')); // prints hello world underlined\nconsole.log(styles.inverse('hello world')); // prints hello world black on white\n```\n\n## Combining with ansicolors\n\nGet the ansicolors module:\n\n npm install ansicolors\n\n```js\nvar styles = require('ansistyles')\n , colors = require('ansicolors');\n\n console.log(\n // prints hello world underlined in blue on a green background\n colors.bgGreen(colors.blue(styles.underline('hello world'))) \n );\n```\n\n## Tests\n\nLook at the [tests](https://github.com/thlorenz/ansistyles/blob/master/test/ansistyles.js) to see more examples and/or run them via: \n\n npm explore ansistyles && npm test\n\n## More Styles\n\nAs you can see from [here](https://github.com/thlorenz/ansistyles/blob/master/ansistyles.js#L4-L15), more styles are available,\nbut didn't have any effect on the terminals that I tested on Mac Lion and Ubuntu Linux.\n\nI included them for completeness, but didn't show them in the examples because they seem to have no effect.\n\n### reset\n\nA style reset function is also included, please note however that this is not nestable.\n\nTherefore the below only underlines `hell` only, but not `world`.\n\n```js\nconsole.log(styles.underline('hell' + styles.reset('o') + ' world'));\n```\n\nIt is essentially the same as:\n\n```js\nconsole.log(styles.underline('hell') + styles.reset('') + 'o world');\n```\n\n\n\n## Alternatives\n\n**ansistyles** tries to meet simple use cases with a very simple API. However, if you need a more powerful ansi formatting tool, \nI'd suggest to look at the [features](https://github.com/TooTallNate/ansi.js#features) of the [ansi module](https://github.com/TooTallNate/ansi.js).\n",
+ "bugs": {
+ "url": "https://github.com/thlorenz/ansistyles/issues"
+ },
+ "homepage": "https://github.com/thlorenz/ansistyles",
+ "_id": "ansistyles@0.1.3",
+ "dist": {
+ "shasum": "b14f315fe763a2b3a88df9d3261a517e666c4615"
+ },
+ "_from": "ansistyles@0.1.3",
+ "_resolved": "https://registry.npmjs.org/ansistyles/-/ansistyles-0.1.3.tgz"
+}
diff --git a/deps/npm/node_modules/ansistyles/test/ansistyles.js b/deps/npm/node_modules/ansistyles/test/ansistyles.js
new file mode 100644
index 000000000..f769bf803
--- /dev/null
+++ b/deps/npm/node_modules/ansistyles/test/ansistyles.js
@@ -0,0 +1,15 @@
+'use strict';
+/*jshint asi: true */
+var assert = require('assert')
+ , styles = require('../')
+
+function inspect(obj, depth) {
+ console.log(require('util').inspect(obj, false, depth || 5, true));
+}
+
+assert.equal(styles.reset('reset'), '\u001b[0mreset\u001b[22m', 'reset')
+assert.equal(styles.underline('underlined'), '\u001b[4munderlined\u001b[24m', 'underline')
+assert.equal(styles.bright('bright'), '\u001b[1mbright\u001b[22m', 'bright')
+assert.equal(styles.inverse('inversed'), '\u001b[7minversed\u001b[27m', 'inverse')
+
+console.log('OK');
diff --git a/deps/npm/node_modules/block-stream/package.json b/deps/npm/node_modules/block-stream/package.json
index 273b1dcfe..ef0116772 100644
--- a/deps/npm/node_modules/block-stream/package.json
+++ b/deps/npm/node_modules/block-stream/package.json
@@ -6,7 +6,7 @@
},
"name": "block-stream",
"description": "a stream of blocks",
- "version": "0.0.6",
+ "version": "0.0.7",
"repository": {
"type": "git",
"url": "git://github.com/isaacs/block-stream.git"
@@ -16,7 +16,7 @@
},
"main": "block-stream.js",
"dependencies": {
- "inherits": "~1.0.0"
+ "inherits": "~2.0.0"
},
"devDependencies": {
"tap": "0.x"
@@ -26,6 +26,10 @@
},
"license": "BSD",
"readme": "# block-stream\n\nA stream of blocks.\n\nWrite data into it, and it'll output data in buffer blocks the size you\nspecify, padding with zeroes if necessary.\n\n```javascript\nvar block = new BlockStream(512)\nfs.createReadStream(\"some-file\").pipe(block)\nblock.pipe(fs.createWriteStream(\"block-file\"))\n```\n\nWhen `.end()` or `.flush()` is called, it'll pad the block with zeroes.\n",
- "_id": "block-stream@0.0.6",
- "_from": "block-stream@*"
+ "readmeFilename": "README.md",
+ "bugs": {
+ "url": "https://github.com/isaacs/block-stream/issues"
+ },
+ "_id": "block-stream@0.0.7",
+ "_from": "block-stream@latest"
}
diff --git a/deps/npm/node_modules/cmd-shim/package.json b/deps/npm/node_modules/cmd-shim/package.json
index 409094507..cf6c9525d 100644
--- a/deps/npm/node_modules/cmd-shim/package.json
+++ b/deps/npm/node_modules/cmd-shim/package.json
@@ -1,6 +1,6 @@
{
"name": "cmd-shim",
- "version": "1.1.0",
+ "version": "1.1.1",
"description": "Used in npm for command line application support",
"scripts": {
"test": "tap test/*.js"
@@ -11,11 +11,11 @@
},
"license": "BSD",
"optionalDependencies": {
- "graceful-fs": "1.2"
+ "graceful-fs": "2"
},
"dependencies": {
"mkdirp": "~0.3.3",
- "graceful-fs": "1.2"
+ "graceful-fs": "2"
},
"devDependencies": {
"tap": "~0.4.1",
@@ -23,6 +23,13 @@
},
"readme": "# cmd-shim\r\n\r\nThe cmd-shim used in npm to create executable scripts on Windows,\r\nsince symlinks are not suitable for this purpose there.\r\n\r\nOn Unix systems, you should use a symbolic link instead.\r\n\r\n[![Build Status](https://travis-ci.org/ForbesLindesay/cmd-shim.png?branch=master)](https://travis-ci.org/ForbesLindesay/cmd-shim) [![Dependency Status](https://gemnasium.com/ForbesLindesay/cmd-shim.png)](https://gemnasium.com/ForbesLindesay/cmd-shim)\r\n\r\n## Installation\r\n\r\n```\r\nnpm install cmd-shim\r\n```\r\n\r\n## API\r\n\r\n### cmdShim(from, to, cb)\r\n\r\nCreate a cmd shim at `to` for the command line program at `from`.\r\ne.g.\r\n\r\n```javascript\r\nvar cmdShim = require('cmd-shim');\r\ncmdShim(__dirname + '/cli.js', '/usr/bin/command-name', function (err) {\r\n if (err) throw err;\r\n});\r\n```\r\n\r\n### cmdShim.ifExists(from, to, cb)\r\n\r\nThe same as above, but will just continue if the file does not exist.\r\nSource:\r\n\r\n```javascript\r\nfunction cmdShimIfExists (from, to, cb) {\r\n fs.stat(from, function (er) {\r\n if (er) return cb()\r\n cmdShim(from, to, cb)\r\n })\r\n}\r\n```\r\n",
"readmeFilename": "README.md",
- "_id": "cmd-shim@1.1.0",
- "_from": "cmd-shim@"
+ "bugs": {
+ "url": "https://github.com/ForbesLindesay/cmd-shim/issues"
+ },
+ "_id": "cmd-shim@1.1.1",
+ "dist": {
+ "shasum": "87741e2a8b6307ea1ea8bf1f65287cb4a9ca977a"
+ },
+ "_from": "cmd-shim@latest",
+ "_resolved": "https://registry.npmjs.org/cmd-shim/-/cmd-shim-1.1.1.tgz"
}
diff --git a/deps/npm/node_modules/columnify/Readme.md b/deps/npm/node_modules/columnify/Readme.md
new file mode 100644
index 000000000..652037965
--- /dev/null
+++ b/deps/npm/node_modules/columnify/Readme.md
@@ -0,0 +1,189 @@
+# columnify
+
+[![Build Status](https://travis-ci.org/timoxley/columnify.png?branch=master)](https://travis-ci.org/timoxley/columnify)
+
+Create text-based columns suitable for console output.
+Supports minimum and maximum column widths via truncation and text wrapping.
+
+Designed to [handle sensible wrapping in npm search results](https://github.com/isaacs/npm/pull/2328).
+
+`npm search` before & after integrating columnify:
+
+![npm-tidy-search](https://f.cloud.github.com/assets/43438/1848959/ae02ad04-76a1-11e3-8255-4781debffc26.gif)
+
+## Installation & Update
+
+```
+$ npm install --save columnify@latest
+```
+
+## Usage
+
+```js
+var columnify = require('columnify')
+var columns = columnify(data, options)
+console.log(columns)
+```
+
+## Examples
+
+### Simple Columns
+
+Text is aligned under column headings. Columns are automatically resized
+to fit the content of the largest cell. Each cell will be padded with
+spaces to fill the available space and ensure column contents are
+left-aligned.
+
+```js
+var columnify = require('columnify')
+
+var columns = columnify([{
+ name: 'mod1',
+ version: '0.0.1'
+}, {
+ name: 'module2',
+ version: '0.2.0'
+}])
+
+console.log(columns)
+```
+```
+NAME VERSION
+mod1 0.0.1
+module2 0.2.0
+```
+
+### Wrapping Column Cells
+
+You can define the maximum width before wrapping for individual cells in
+columns. Minimum width is also supported. Wrapping will happen at word
+boundaries. Empty cells or those which do not fill the max/min width
+will be padded with spaces.
+
+```js
+var columnify = require('columnify')
+
+var columns = columnify([{
+ name: 'mod1',
+ description: 'some description which happens to be far larger than the max',
+ version: '0.0.1',
+}, {
+ name: 'module-two',
+ description: 'another description larger than the max',
+ version: '0.2.0',
+})
+
+console.log(columns)
+```
+```
+NAME DESCRIPTION VERSION
+mod1 some description which happens 0.0.1
+ to be far larger than the max
+module-two another description larger 0.2.0
+ than the max
+```
+
+### Truncated Columns
+
+You can disable wrapping and instead truncate content at the maximum
+column width. Truncation respects word boundaries. A truncation marker,
+`…` will appear next to the last word in any truncated line.
+
+```js
+var columns = columnify(data, {
+ truncate: true,
+ config: {
+ description: {
+ maxWidth: 20
+ }
+ }
+})
+
+console.log(columns)
+```
+
+```
+NAME DESCRIPTION VERSION
+mod1 some description… 0.0.1
+module-two another description… 0.2.0
+```
+
+
+### Custom Truncation Marker
+
+You can change the truncation marker to something other than the default
+`…`.
+
+```js
+var columns = columnify(data, {
+ truncate: true,
+ truncateMarker: '>',
+ widths: {
+ description: {
+ maxWidth: 20
+ }
+ }
+})
+
+console.log(columns)
+```
+
+```
+NAME DESCRIPTION VERSION
+mod1 some description> 0.0.1
+module-two another description> 0.2.0
+```
+
+### Custom Column Splitter
+
+If your columns need some bling, you can split columns with custom
+characters.
+
+```js
+
+var columns = columnify(data, {
+ columnSplitter: ' | '
+})
+
+console.log(columns)
+```
+```
+NAME | DESCRIPTION | VERSION
+mod1 | some description which happens to be far larger than the max | 0.0.1
+module-two | another description larger than the max | 0.2.0
+```
+
+### Filtering & Ordering Columns
+
+By default, all properties are converted into columns, whether or not
+they exist on every object or not.
+
+To explicitly specify which columns to include, and in which order,
+supply an "include" array:
+
+```js
+var data = [{
+ name: 'module1',
+ description: 'some description',
+ version: '0.0.1',
+}, {
+ name: 'module2',
+ description: 'another description',
+ version: '0.2.0',
+}]
+
+var columns = columnify(data, {
+ include: ['name', 'version'] // note description not included
+})
+
+console.log(columns)
+```
+
+```
+NAME VERSION
+module1 0.0.1
+module2 0.2.0
+```
+## License
+
+MIT
diff --git a/deps/npm/node_modules/columnify/index.js b/deps/npm/node_modules/columnify/index.js
new file mode 100644
index 000000000..462c2919f
--- /dev/null
+++ b/deps/npm/node_modules/columnify/index.js
@@ -0,0 +1,210 @@
+"use strict"
+
+var utils = require('./utils')
+var padRight = utils.padRight
+var splitIntoLines = utils.splitIntoLines
+var splitLongWords = utils.splitLongWords
+
+var DEFAULTS = {
+ maxWidth: Infinity,
+ minWidth: 0,
+ columnSplitter: ' ',
+ truncate: false,
+ truncateMarker: '…',
+ headingTransform: function(key) {
+ return key.toUpperCase()
+ },
+ dataTransform: function(cell, column, index) {
+ return cell
+ }
+}
+
+module.exports = function(items, options) {
+
+ options = options || {}
+
+ var columnConfigs = options.config || {}
+ delete options.config // remove config so doesn't appear on every column.
+
+ // Option defaults inheritance:
+ // options.config[columnName] => options => DEFAULTS
+ options = mixin(options, DEFAULTS)
+ options.config = options.config || Object.create(null)
+
+ options.spacing = options.spacing || '\n' // probably useless
+
+ var columnNames = options.include || [] // optional user-supplied columns to include
+
+ // if not suppled column names, automatically determine columns from data keys
+ if (!columnNames.length) {
+ items.forEach(function(item) {
+ for (var columnName in item) {
+ if (columnNames.indexOf(columnName) === -1) columnNames.push(columnName)
+ }
+ })
+ }
+
+ // initialize column defaults (each column inherits from options.config)
+ var columns = columnNames.reduce(function(columns, columnName) {
+ var column = Object.create(options)
+ columns[columnName] = mixin(column, columnConfigs[columnName])
+ return columns
+ }, Object.create(null))
+
+ // sanitize column settings
+ columnNames.forEach(function(columnName) {
+ var column = columns[columnName]
+ column.maxWidth = Math.ceil(column.maxWidth)
+ column.minWidth = Math.ceil(column.minWidth)
+ column.truncate = !!column.truncate
+ })
+
+ // sanitize data
+ items = items.map(function(item) {
+ var result = Object.create(null)
+ columnNames.forEach(function(columnName) {
+ // null/undefined -> ''
+ result[columnName] = item[columnName] != null ? item[columnName] : ''
+ // toString everything
+ result[columnName] = '' + result[columnName]
+ // remove funky chars
+ result[columnName] = result[columnName].replace(/\s+/g, " ")
+ })
+ return result
+ })
+
+ // transform data cells
+ columnNames.forEach(function(columnName) {
+ var column = columns[columnName]
+ items = items.map(function(item, index) {
+ item[columnName] = column.dataTransform(item[columnName], column, index)
+ return item
+ })
+ })
+
+ // add headers
+ var headers = {}
+ columnNames.forEach(function(columnName) {
+ var column = columns[columnName]
+ headers[columnName] = column.headingTransform(columnName)
+ })
+ items.unshift(headers)
+
+ // get actual max-width between min & max
+ // based on length of data in columns
+ columnNames.forEach(function(columnName) {
+ var column = columns[columnName]
+ column.width = items.map(function(item) {
+ return item[columnName]
+ }).reduce(function(min, cur) {
+ return Math.max(min, Math.min(column.maxWidth, Math.max(column.minWidth, cur.length)))
+ }, 0)
+ })
+
+ // split long words so they can break onto multiple lines
+ columnNames.forEach(function(columnName) {
+ var column = columns[columnName]
+ items = items.map(function(item) {
+ item[columnName] = splitLongWords(item[columnName], column.width, column.truncateMarker)
+ return item
+ })
+ })
+
+ // wrap long lines. each item is now an array of lines.
+ columnNames.forEach(function(columnName) {
+ var column = columns[columnName]
+ items = items.map(function(item, index) {
+ var cell = item[columnName]
+ item[columnName] = splitIntoLines(cell, column.width)
+
+ // if truncating required, only include first line + add truncation char
+ if (column.truncate && item[columnName].length > 1) {
+ item[columnName] = splitIntoLines(cell, column.width - column.truncateMarker.length)
+ var firstLine = item[columnName][0]
+ if (!endsWith(firstLine, column.truncateMarker)) item[columnName][0] += column.truncateMarker
+ item[columnName] = item[columnName].slice(0, 1)
+ }
+ return item
+ })
+ })
+
+ // recalculate column widths from truncated output/lines
+ columnNames.forEach(function(columnName) {
+ var column = columns[columnName]
+ column.width = items.map(function(item) {
+ return item[columnName].reduce(function(min, cur) {
+ return Math.max(min, Math.min(column.maxWidth, Math.max(column.minWidth, cur.length)))
+ }, 0)
+ }).reduce(function(min, cur) {
+ return Math.max(min, Math.min(column.maxWidth, Math.max(column.minWidth, cur)))
+ }, 0)
+ })
+
+ var rows = createRows(items, columns, columnNames) // merge lines into rows
+
+ // conceive output
+ return rows.reduce(function(output, row) {
+ return output.concat(row.reduce(function(rowOut, line) {
+ return rowOut.concat(line.join(options.columnSplitter))
+ }, []))
+ }, []).join(options.spacing)
+}
+
+/**
+ * Convert wrapped lines into rows with padded values.
+ *
+ * @param Array items data to process
+ * @param Array columns column width settings for wrapping
+ * @param Array columnNames column ordering
+ * @return Array items wrapped in arrays, corresponding to lines
+ */
+
+function createRows(items, columns, columnNames) {
+ return items.map(function(item) {
+ var row = []
+ var numLines = 0
+ columnNames.forEach(function(columnName) {
+ numLines = Math.max(numLines, item[columnName].length)
+ })
+ // combine matching lines of each rows
+ for (var i = 0; i < numLines; i++) {
+ row[i] = row[i] || []
+ columnNames.forEach(function(columnName) {
+ var column = columns[columnName]
+ var val = item[columnName][i] || '' // || '' ensures empty columns get padded
+ row[i].push(padRight(val, column.width))
+ })
+ }
+ return row
+ })
+}
+
+/**
+ * Generic source->target mixin.
+ * Copy properties from `source` into `target` if target doesn't have them.
+ * Destructive. Modifies `target`.
+ *
+ * @param target Object target for mixin properties.
+ * @param source Object source of mixin properties.
+ * @return Object `target` after mixin applied.
+ */
+
+function mixin(target, source) {
+ source = source || {}
+ for (var key in source) {
+ if (target.hasOwnProperty(key)) continue
+ target[key] = source[key]
+ }
+ return target
+}
+
+/**
+ * Adapted from String.prototype.endsWith polyfill.
+ */
+
+function endsWith(target, searchString, position) {
+ position = position || target.length;
+ position = position - searchString.length;
+ var lastIndex = target.lastIndexOf(searchString);
+ return lastIndex !== -1 && lastIndex === position;
+}
diff --git a/deps/npm/node_modules/columnify/package.json b/deps/npm/node_modules/columnify/package.json
new file mode 100644
index 000000000..f4fa2cb2a
--- /dev/null
+++ b/deps/npm/node_modules/columnify/package.json
@@ -0,0 +1,42 @@
+{
+ "name": "columnify",
+ "version": "0.1.2",
+ "description": "Render data in text columns, supports in-column text-wrap.",
+ "main": "index.js",
+ "scripts": {
+ "test": "tap test"
+ },
+ "author": {
+ "name": "Tim Oxley"
+ },
+ "license": "MIT",
+ "devDependencies": {
+ "tape": "~2.3.0",
+ "tap": "~0.4.6"
+ },
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/timoxley/columnify.git"
+ },
+ "keywords": [
+ "column",
+ "text",
+ "ansi",
+ "console",
+ "terminal",
+ "wrap",
+ "table"
+ ],
+ "bugs": {
+ "url": "https://github.com/timoxley/columnify/issues"
+ },
+ "homepage": "https://github.com/timoxley/columnify",
+ "readme": "# columnify\n\n[![Build Status](https://travis-ci.org/timoxley/columnify.png?branch=master)](https://travis-ci.org/timoxley/columnify)\n\nCreate text-based columns suitable for console output. \nSupports minimum and maximum column widths via truncation and text wrapping.\n\nDesigned to [handle sensible wrapping in npm search results](https://github.com/isaacs/npm/pull/2328).\n\n`npm search` before & after integrating columnify:\n\n![npm-tidy-search](https://f.cloud.github.com/assets/43438/1848959/ae02ad04-76a1-11e3-8255-4781debffc26.gif)\n\n## Installation & Update\n\n```\n$ npm install --save columnify@latest\n```\n\n## Usage\n\n```js\nvar columnify = require('columnify')\nvar columns = columnify(data, options)\nconsole.log(columns)\n```\n\n## Examples\n\n### Simple Columns\n\nText is aligned under column headings. Columns are automatically resized\nto fit the content of the largest cell. Each cell will be padded with\nspaces to fill the available space and ensure column contents are\nleft-aligned.\n\n```js\nvar columnify = require('columnify')\n\nvar columns = columnify([{\n name: 'mod1',\n version: '0.0.1'\n}, {\n name: 'module2',\n version: '0.2.0'\n}])\n\nconsole.log(columns)\n```\n```\nNAME VERSION\nmod1 0.0.1 \nmodule2 0.2.0 \n```\n\n### Wrapping Column Cells\n\nYou can define the maximum width before wrapping for individual cells in\ncolumns. Minimum width is also supported. Wrapping will happen at word\nboundaries. Empty cells or those which do not fill the max/min width\nwill be padded with spaces.\n\n```js\nvar columnify = require('columnify')\n\nvar columns = columnify([{\n name: 'mod1',\n description: 'some description which happens to be far larger than the max',\n version: '0.0.1',\n}, {\n name: 'module-two',\n description: 'another description larger than the max',\n version: '0.2.0',\n})\n\nconsole.log(columns)\n```\n```\nNAME DESCRIPTION VERSION\nmod1 some description which happens 0.0.1\n to be far larger than the max\nmodule-two another description larger 0.2.0\n than the max\n```\n\n### Truncated Columns\n\nYou can disable wrapping and instead truncate content at the maximum\ncolumn width. Truncation respects word boundaries. A truncation marker,\n`…` will appear next to the last word in any truncated line.\n\n```js\nvar columns = columnify(data, {\n truncate: true,\n config: {\n description: {\n maxWidth: 20\n }\n }\n})\n\nconsole.log(columns)\n```\n\n```\nNAME DESCRIPTION VERSION\nmod1 some description… 0.0.1 \nmodule-two another description… 0.2.0 \n```\n\n\n### Custom Truncation Marker\n\nYou can change the truncation marker to something other than the default\n`…`.\n\n```js\nvar columns = columnify(data, {\n truncate: true,\n truncateMarker: '>',\n widths: {\n description: {\n maxWidth: 20\n }\n }\n})\n\nconsole.log(columns)\n```\n\n```\nNAME DESCRIPTION VERSION\nmod1 some description> 0.0.1 \nmodule-two another description> 0.2.0 \n```\n\n### Custom Column Splitter\n\nIf your columns need some bling, you can split columns with custom\ncharacters.\n\n```js\n\nvar columns = columnify(data, {\n columnSplitter: ' | '\n})\n\nconsole.log(columns)\n```\n```\nNAME | DESCRIPTION | VERSION\nmod1 | some description which happens to be far larger than the max | 0.0.1\nmodule-two | another description larger than the max | 0.2.0\n```\n\n### Filtering & Ordering Columns\n\nBy default, all properties are converted into columns, whether or not\nthey exist on every object or not.\n\nTo explicitly specify which columns to include, and in which order,\nsupply an \"include\" array:\n\n```js\nvar data = [{\n name: 'module1',\n description: 'some description',\n version: '0.0.1',\n}, {\n name: 'module2',\n description: 'another description',\n version: '0.2.0',\n}]\n\nvar columns = columnify(data, {\n include: ['name', 'version'] // note description not included\n})\n\nconsole.log(columns)\n```\n\n```\nNAME VERSION\nmodule1 0.0.1\nmodule2 0.2.0\n```\n## License\n\nMIT\n",
+ "readmeFilename": "Readme.md",
+ "_id": "columnify@0.1.2",
+ "dist": {
+ "shasum": "ab1a1f1e37b26ba4b87c6920fb717fe51c827042"
+ },
+ "_from": "columnify@0.1.2",
+ "_resolved": "https://registry.npmjs.org/columnify/-/columnify-0.1.2.tgz"
+}
diff --git a/deps/npm/node_modules/columnify/utils.js b/deps/npm/node_modules/columnify/utils.js
new file mode 100644
index 000000000..bd7641da4
--- /dev/null
+++ b/deps/npm/node_modules/columnify/utils.js
@@ -0,0 +1,76 @@
+/**
+ * Pad `str` up to total length `max` with `chr`.
+ * If `str` is longer than `max`, padRight will return `str` unaltered.
+ *
+ * @param String str string to pad
+ * @param Number max total length of output string
+ * @param String chr optional. Character to pad with. default: ' '
+ * @return String padded str
+ */
+
+function padRight(str, max, chr) {
+ str = str != null ? str : ''
+ str = String(str)
+ var length = 1 + max - str.length
+ if (length <= 0) return str
+ return str + Array.apply(null, {length: length})
+ .join(chr || ' ')
+}
+
+/**
+ * Split a String `str` into lines of maxiumum length `max`.
+ * Splits on word boundaries.
+ *
+ * @param String str string to split
+ * @param Number max length of each line
+ * @return Array Array containing lines.
+ */
+
+function splitIntoLines(str, max) {
+ return str.trim().split(' ').reduce(function(lines, word) {
+ var line = lines[lines.length - 1]
+ if (line && line.join(' ').length + word.length < max) {
+ lines[lines.length - 1].push(word) // add to line
+ }
+ else lines.push([word]) // new line
+ return lines
+ }, []).map(function(l) {
+ return l.join(' ')
+ })
+}
+
+/**
+ * Add spaces and `truncationChar` between words of
+ * `str` which are longer than `max`.
+ *
+ * @param String str string to split
+ * @param Number max length of each line
+ * @param Number truncationChar character to append to split words
+ * @return String
+ */
+
+function splitLongWords(str, max, truncationChar, result) {
+ str = str.trim()
+ result = result || []
+ if (!str) return result.join(' ') || ''
+ var words = str.split(' ')
+ var word = words.shift() || str
+
+ if (word.length > max) {
+ var remainder = word.slice(max - truncationChar.length) // get remainder
+ words.unshift(remainder) // save remainder for next loop
+
+ word = word.slice(0, max - truncationChar.length) // grab truncated word
+ word += truncationChar // add trailing … or whatever
+ }
+ result.push(word)
+ return splitLongWords(words.join(' '), max, truncationChar, result)
+}
+
+/**
+ * Exports
+ */
+
+module.exports.padRight = padRight
+module.exports.splitIntoLines = splitIntoLines
+module.exports.splitLongWords = splitLongWords
diff --git a/deps/npm/node_modules/editor/LICENSE b/deps/npm/node_modules/editor/LICENSE
new file mode 100644
index 000000000..ee27ba4b4
--- /dev/null
+++ b/deps/npm/node_modules/editor/LICENSE
@@ -0,0 +1,18 @@
+This software is released under the MIT license:
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+the Software, and to permit persons to whom the Software is furnished to do so,
+subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/deps/npm/node_modules/editor/package.json b/deps/npm/node_modules/editor/package.json
index cbeada377..36e5f7efa 100644
--- a/deps/npm/node_modules/editor/package.json
+++ b/deps/npm/node_modules/editor/package.json
@@ -1,16 +1,15 @@
{
"name": "editor",
- "version": "0.0.4",
+ "version": "0.0.5",
"description": "launch $EDITOR in your program",
"main": "index.js",
- "bin": {},
"directories": {
"example": "example",
"test": "test"
},
"dependencies": {},
"devDependencies": {
- "tap": "~0.2.5"
+ "tap": "~0.4.4"
},
"scripts": {
"test": "tap test/*.js"
@@ -39,6 +38,6 @@
"bugs": {
"url": "https://github.com/substack/node-editor/issues"
},
- "_id": "editor@0.0.4",
- "_from": "editor@"
+ "_id": "editor@0.0.5",
+ "_from": "editor@latest"
}
diff --git a/deps/npm/node_modules/fstream-npm/fstream-npm.js b/deps/npm/node_modules/fstream-npm/fstream-npm.js
index 23e3fce3c..ca05880a6 100644
--- a/deps/npm/node_modules/fstream-npm/fstream-npm.js
+++ b/deps/npm/node_modules/fstream-npm/fstream-npm.js
@@ -143,7 +143,7 @@ Packer.prototype.applyIgnores = function (entry, partial, entryObj) {
// since it's *not* a symbolic link, if we're *already* in a bundle,
// then we should include everything.
- if (pp && pp.package) {
+ if (pp && pp.package && pp.basename === "node_modules") {
return true
}
diff --git a/deps/npm/node_modules/fstream-npm/node_modules/fstream-ignore/package.json b/deps/npm/node_modules/fstream-npm/node_modules/fstream-ignore/package.json
index fe8b93d33..fcf03f281 100644
--- a/deps/npm/node_modules/fstream-npm/node_modules/fstream-ignore/package.json
+++ b/deps/npm/node_modules/fstream-npm/node_modules/fstream-ignore/package.json
@@ -6,7 +6,7 @@
},
"name": "fstream-ignore",
"description": "A thing for ignoring files based on globs",
- "version": "0.0.6",
+ "version": "0.0.7",
"repository": {
"type": "git",
"url": "git://github.com/isaacs/fstream-ignore.git"
@@ -18,7 +18,7 @@
"dependencies": {
"minimatch": "~0.2.0",
"fstream": "~0.1.17",
- "inherits": "~1.0.0"
+ "inherits": "2"
},
"devDependencies": {
"tap": "",
@@ -28,6 +28,13 @@
"license": "BSD",
"readme": "# fstream-ignore\n\nA fstream DirReader that filters out files that match globs in `.ignore`\nfiles throughout the tree, like how git ignores files based on a\n`.gitignore` file.\n\nHere's an example:\n\n```javascript\nvar Ignore = require(\"fstream-ignore\")\nIgnore({ path: __dirname\n , ignoreFiles: [\".ignore\", \".gitignore\"]\n })\n .on(\"child\", function (c) {\n console.error(c.path.substr(c.root.path.length + 1))\n })\n .pipe(tar.Pack())\n .pipe(fs.createWriteStream(\"foo.tar\"))\n```\n\nThis will tar up the files in __dirname into `foo.tar`, ignoring\nanything matched by the globs in any .iginore or .gitignore file.\n",
"readmeFilename": "README.md",
- "_id": "fstream-ignore@0.0.6",
- "_from": "fstream-ignore@~0.0.5"
+ "bugs": {
+ "url": "https://github.com/isaacs/fstream-ignore/issues"
+ },
+ "_id": "fstream-ignore@0.0.7",
+ "dist": {
+ "shasum": "eea3033f0c3728139de7b57ab1b0d6d89c353c63"
+ },
+ "_from": "fstream-ignore@~0.0.5",
+ "_resolved": "https://registry.npmjs.org/fstream-ignore/-/fstream-ignore-0.0.7.tgz"
}
diff --git a/deps/npm/node_modules/fstream-npm/package.json b/deps/npm/node_modules/fstream-npm/package.json
index 88824e0eb..7769921d8 100644
--- a/deps/npm/node_modules/fstream-npm/package.json
+++ b/deps/npm/node_modules/fstream-npm/package.json
@@ -6,7 +6,7 @@
},
"name": "fstream-npm",
"description": "fstream class for creating npm packages",
- "version": "0.1.4",
+ "version": "0.1.6",
"repository": {
"type": "git",
"url": "git://github.com/isaacs/fstream-npm.git"
@@ -14,11 +14,14 @@
"main": "./fstream-npm.js",
"dependencies": {
"fstream-ignore": "~0.0.5",
- "inherits": ""
+ "inherits": "2"
},
"license": "BSD",
"readme": "# fstream-npm\n\nThis is an fstream DirReader class that will read a directory and filter\nthings according to the semantics of what goes in an npm package.\n\nFor example:\n\n```javascript\n// This will print out all the files that would be included\n// by 'npm publish' or 'npm install' of this directory.\n\nvar FN = require(\"fstream-npm\")\nFN({ path: \"./\" })\n .on(\"child\", function (e) {\n console.error(e.path.substr(e.root.path.length + 1))\n })\n```\n\n",
"readmeFilename": "README.md",
- "_id": "fstream-npm@0.1.4",
+ "bugs": {
+ "url": "https://github.com/isaacs/fstream-npm/issues"
+ },
+ "_id": "fstream-npm@0.1.6",
"_from": "fstream-npm@latest"
}
diff --git a/deps/npm/node_modules/fstream/lib/dir-reader.js b/deps/npm/node_modules/fstream/lib/dir-reader.js
index dd9883b22..346ac2b83 100644
--- a/deps/npm/node_modules/fstream/lib/dir-reader.js
+++ b/deps/npm/node_modules/fstream/lib/dir-reader.js
@@ -212,6 +212,7 @@ DirReader.prototype.getChildProps = function (stat) {
, follow: this.follow
, filter: this.filter
, sort: this.props.sort
+ , hardlinks: this.props.hardlinks
}
}
diff --git a/deps/npm/node_modules/fstream/lib/reader.js b/deps/npm/node_modules/fstream/lib/reader.js
index e4e1b482c..eaf921cd0 100644
--- a/deps/npm/node_modules/fstream/lib/reader.js
+++ b/deps/npm/node_modules/fstream/lib/reader.js
@@ -142,7 +142,6 @@ Reader.prototype._stat = function (currentStat) {
var me = this
, props = me.props
, stat = props.follow ? "stat" : "lstat"
-
// console.error("Reader._stat", me._path, currentStat)
if (currentStat) process.nextTick(statCb.bind(null, null, currentStat))
else fs[stat](me._path, statCb)
@@ -163,8 +162,10 @@ Reader.prototype._stat = function (currentStat) {
me.size = props.size
var type = getType(props)
+ var handleHardlinks = props.hardlinks !== false
+
// special little thing for handling hardlinks.
- if (type !== "Directory" && props.nlink && props.nlink > 1) {
+ if (handleHardlinks && type !== "Directory" && props.nlink && props.nlink > 1) {
var k = props.dev + ":" + props.ino
// console.error("Reader has nlink", me._path, k)
if (hardLinks[k] === me._path || !hardLinks[k]) hardLinks[k] = me._path
diff --git a/deps/npm/node_modules/fstream/package.json b/deps/npm/node_modules/fstream/package.json
index ba8e6221f..cf86878db 100644
--- a/deps/npm/node_modules/fstream/package.json
+++ b/deps/npm/node_modules/fstream/package.json
@@ -6,7 +6,7 @@
},
"name": "fstream",
"description": "Advanced file system stream things",
- "version": "0.1.22",
+ "version": "0.1.25",
"repository": {
"type": "git",
"url": "git://github.com/isaacs/fstream.git"
@@ -18,8 +18,8 @@
"dependencies": {
"rimraf": "2",
"mkdirp": "0.3",
- "graceful-fs": "~1.2.0",
- "inherits": "~1.0.0"
+ "graceful-fs": "~2.0.0",
+ "inherits": "~2.0.0"
},
"devDependencies": {
"tap": ""
@@ -30,6 +30,14 @@
"license": "BSD",
"readme": "Like FS streams, but with stat on them, and supporting directories and\nsymbolic links, as well as normal files. Also, you can use this to set\nthe stats on a file, even if you don't change its contents, or to create\na symlink, etc.\n\nSo, for example, you can \"write\" a directory, and it'll call `mkdir`. You\ncan specify a uid and gid, and it'll call `chown`. You can specify a\n`mtime` and `atime`, and it'll call `utimes`. You can call it a symlink\nand provide a `linkpath` and it'll call `symlink`.\n\nNote that it won't automatically resolve symbolic links. So, if you\ncall `fstream.Reader('/some/symlink')` then you'll get an object\nthat stats and then ends immediately (since it has no data). To follow\nsymbolic links, do this: `fstream.Reader({path:'/some/symlink', follow:\ntrue })`.\n\nThere are various checks to make sure that the bytes emitted are the\nsame as the intended size, if the size is set.\n\n## Examples\n\n```javascript\nfstream\n .Writer({ path: \"path/to/file\"\n , mode: 0755\n , size: 6\n })\n .write(\"hello\\n\")\n .end()\n```\n\nThis will create the directories if they're missing, and then write\n`hello\\n` into the file, chmod it to 0755, and assert that 6 bytes have\nbeen written when it's done.\n\n```javascript\nfstream\n .Writer({ path: \"path/to/file\"\n , mode: 0755\n , size: 6\n , flags: \"a\"\n })\n .write(\"hello\\n\")\n .end()\n```\n\nYou can pass flags in, if you want to append to a file.\n\n```javascript\nfstream\n .Writer({ path: \"path/to/symlink\"\n , linkpath: \"./file\"\n , SymbolicLink: true\n , mode: \"0755\" // octal strings supported\n })\n .end()\n```\n\nIf isSymbolicLink is a function, it'll be called, and if it returns\ntrue, then it'll treat it as a symlink. If it's not a function, then\nany truish value will make a symlink, or you can set `type:\n'SymbolicLink'`, which does the same thing.\n\nNote that the linkpath is relative to the symbolic link location, not\nthe parent dir or cwd.\n\n```javascript\nfstream\n .Reader(\"path/to/dir\")\n .pipe(fstream.Writer(\"path/to/other/dir\"))\n```\n\nThis will do like `cp -Rp path/to/dir path/to/other/dir`. If the other\ndir exists and isn't a directory, then it'll emit an error. It'll also\nset the uid, gid, mode, etc. to be identical. In this way, it's more\nlike `rsync -a` than simply a copy.\n",
"readmeFilename": "README.md",
- "_id": "fstream@0.1.22",
- "_from": "fstream@latest"
+ "bugs": {
+ "url": "https://github.com/isaacs/fstream/issues"
+ },
+ "homepage": "https://github.com/isaacs/fstream",
+ "_id": "fstream@0.1.25",
+ "dist": {
+ "shasum": "deef2db7c7898357c2b37202212a9e5b36abc732"
+ },
+ "_from": "fstream@0.1.25",
+ "_resolved": "https://registry.npmjs.org/fstream/-/fstream-0.1.25.tgz"
}
diff --git a/deps/npm/node_modules/read-package-json/node_modules/normalize-package-data/node_modules/github-url-from-git/.npmignore b/deps/npm/node_modules/github-url-from-git/.npmignore
index 3c3629e64..3c3629e64 100644
--- a/deps/npm/node_modules/read-package-json/node_modules/normalize-package-data/node_modules/github-url-from-git/.npmignore
+++ b/deps/npm/node_modules/github-url-from-git/.npmignore
diff --git a/deps/npm/node_modules/read-package-json/node_modules/normalize-package-data/node_modules/github-url-from-git/History.md b/deps/npm/node_modules/github-url-from-git/History.md
index fcb296bc6..fcb296bc6 100644
--- a/deps/npm/node_modules/read-package-json/node_modules/normalize-package-data/node_modules/github-url-from-git/History.md
+++ b/deps/npm/node_modules/github-url-from-git/History.md
diff --git a/deps/npm/node_modules/read-package-json/node_modules/normalize-package-data/node_modules/github-url-from-git/Makefile b/deps/npm/node_modules/github-url-from-git/Makefile
index 37f330e81..37f330e81 100644
--- a/deps/npm/node_modules/read-package-json/node_modules/normalize-package-data/node_modules/github-url-from-git/Makefile
+++ b/deps/npm/node_modules/github-url-from-git/Makefile
diff --git a/deps/npm/node_modules/read-package-json/node_modules/normalize-package-data/node_modules/github-url-from-git/Readme.md b/deps/npm/node_modules/github-url-from-git/Readme.md
index d027e8ec6..d027e8ec6 100644
--- a/deps/npm/node_modules/read-package-json/node_modules/normalize-package-data/node_modules/github-url-from-git/Readme.md
+++ b/deps/npm/node_modules/github-url-from-git/Readme.md
diff --git a/deps/npm/node_modules/read-package-json/node_modules/normalize-package-data/node_modules/github-url-from-git/index.js b/deps/npm/node_modules/github-url-from-git/index.js
index 9ccc215f0..9ccc215f0 100644
--- a/deps/npm/node_modules/read-package-json/node_modules/normalize-package-data/node_modules/github-url-from-git/index.js
+++ b/deps/npm/node_modules/github-url-from-git/index.js
diff --git a/deps/npm/node_modules/github-url-from-git/package.json b/deps/npm/node_modules/github-url-from-git/package.json
new file mode 100644
index 000000000..5673fb989
--- /dev/null
+++ b/deps/npm/node_modules/github-url-from-git/package.json
@@ -0,0 +1,31 @@
+{
+ "name": "github-url-from-git",
+ "version": "1.1.1",
+ "description": "Parse a github git url and return the github repo url",
+ "main": "index.js",
+ "scripts": {
+ "test": "mocha test.js --reporter spec --require should"
+ },
+ "repository": "",
+ "keywords": [
+ "github",
+ "git",
+ "url",
+ "parser"
+ ],
+ "author": "",
+ "license": "MIT",
+ "devDependencies": {
+ "better-assert": "~1.0.0",
+ "mocha": "~1.9.0",
+ "should": "~1.2.2"
+ },
+ "readme": "\n# github-url-from-git\n\n```js\ndescribe('parse(url)', function(){\n it('should support git://*', function(){\n var url = 'git://github.com/jamesor/mongoose-versioner';\n parse(url).should.equal('https://github.com/jamesor/mongoose-versioner');\n })\n\n it('should support git://*.git', function(){\n var url = 'git://github.com/treygriffith/cellar.git';\n parse(url).should.equal('https://github.com/treygriffith/cellar');\n })\n\n it('should support https://*', function(){\n var url = 'https://github.com/Empeeric/i18n-node';\n parse(url).should.equal('https://github.com/Empeeric/i18n-node');\n })\n\n it('should support https://*.git', function(){\n var url = 'https://jpillora@github.com/banchee/tranquil.git';\n parse(url).should.equal('https://github.com/banchee/tranquil');\n })\n\n it('should return undefined on failure', function(){\n var url = 'git://github.com/justgord/.git';\n assert(null == parse(url));\n })\n\n it('should parse git@gist urls', function() {\n var url = 'git@gist.github.com:3135914.git';\n parse(url).should.equal('https://gist.github.com/3135914')\n })\n\n it('should parse https://gist urls', function() {\n var url = 'https://gist.github.com/3135914.git';\n parse(url).should.equal('https://gist.github.com/3135914')\n })\n})\n```\n",
+ "readmeFilename": "Readme.md",
+ "_id": "github-url-from-git@1.1.1",
+ "dist": {
+ "shasum": "a14903bccbd30c91ea41765ae68ba1b27a53c4d1"
+ },
+ "_from": "github-url-from-git@1.1.1",
+ "_resolved": "https://registry.npmjs.org/github-url-from-git/-/github-url-from-git-1.1.1.tgz"
+}
diff --git a/deps/npm/node_modules/read-package-json/node_modules/normalize-package-data/node_modules/github-url-from-git/test.js b/deps/npm/node_modules/github-url-from-git/test.js
index e472302a0..e472302a0 100644
--- a/deps/npm/node_modules/read-package-json/node_modules/normalize-package-data/node_modules/github-url-from-git/test.js
+++ b/deps/npm/node_modules/github-url-from-git/test.js
diff --git a/deps/npm/node_modules/github-url-from-username-repo/.npmignore b/deps/npm/node_modules/github-url-from-username-repo/.npmignore
new file mode 100644
index 000000000..39747c08b
--- /dev/null
+++ b/deps/npm/node_modules/github-url-from-username-repo/.npmignore
@@ -0,0 +1,13 @@
+*.swp
+.*.swp
+
+.DS_Store
+*~
+.project
+.settings
+npm-debug.log
+coverage.html
+.idea
+lib-cov
+
+node_modules \ No newline at end of file
diff --git a/deps/npm/node_modules/github-url-from-username-repo/.travis.yml b/deps/npm/node_modules/github-url-from-username-repo/.travis.yml
new file mode 100644
index 000000000..a12e3f0fd
--- /dev/null
+++ b/deps/npm/node_modules/github-url-from-username-repo/.travis.yml
@@ -0,0 +1,4 @@
+language: node_js
+node_js:
+ - "0.8"
+ - "0.10" \ No newline at end of file
diff --git a/deps/npm/node_modules/github-url-from-username-repo/LICENSE b/deps/npm/node_modules/github-url-from-username-repo/LICENSE
new file mode 100644
index 000000000..44c152ba7
--- /dev/null
+++ b/deps/npm/node_modules/github-url-from-username-repo/LICENSE
@@ -0,0 +1,27 @@
+Copyright (c) Robert Kowalski ("Author")
+All rights reserved.
+
+The BSD License
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+
+1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+
+2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \ No newline at end of file
diff --git a/deps/npm/node_modules/github-url-from-username-repo/README.md b/deps/npm/node_modules/github-url-from-username-repo/README.md
new file mode 100644
index 000000000..27c4054b2
--- /dev/null
+++ b/deps/npm/node_modules/github-url-from-username-repo/README.md
@@ -0,0 +1,14 @@
+[![Build Status](https://travis-ci.org/robertkowalski/github-url-from-username-repo.png?branch=master)](https://travis-ci.org/robertkowalski/github-url-from-username-repo)
+[![Dependency Status](https://gemnasium.com/robertkowalski/github-url-from-username-repo.png)](https://gemnasium.com/robertkowalski/github-url-from-username-repo)
+
+
+# github-url-from-username-repo
+
+## Usage
+
+```javascript
+
+var getUrl = require("github-url-from-username-repo")
+getUrl("visionmedia/express") // git://github.com/visionmedia/express
+
+``` \ No newline at end of file
diff --git a/deps/npm/node_modules/github-url-from-username-repo/index.js b/deps/npm/node_modules/github-url-from-username-repo/index.js
new file mode 100644
index 000000000..46b0bb513
--- /dev/null
+++ b/deps/npm/node_modules/github-url-from-username-repo/index.js
@@ -0,0 +1,9 @@
+module.exports = getUrl
+
+function getUrl (r) {
+ if (!r) return null
+ if (/^[\w-]+\/[\w\.-]+$/.test(r))
+ return "git://github.com/" + r
+ else
+ return null
+}
diff --git a/deps/npm/node_modules/github-url-from-username-repo/package.json b/deps/npm/node_modules/github-url-from-username-repo/package.json
new file mode 100644
index 000000000..239ba7739
--- /dev/null
+++ b/deps/npm/node_modules/github-url-from-username-repo/package.json
@@ -0,0 +1,38 @@
+{
+ "name": "github-url-from-username-repo",
+ "version": "0.1.0",
+ "description": "Create urls from username/repo",
+ "main": "index.js",
+ "scripts": {
+ "test": "mocha -R spec"
+ },
+ "devDependencies": {
+ "mocha": "~1.13.0"
+ },
+ "repository": {
+ "type": "git",
+ "url": "git@github.com:robertkowalski/github-url-from-username-repo.git"
+ },
+ "author": {
+ "name": "Robert Kowalski",
+ "email": "rok@kowalski.gd"
+ },
+ "license": "BSD-2-Clause",
+ "bugs": {
+ "url": "https://github.com/robertkowalski/github-url-from-username-repo/issues"
+ },
+ "keywords": [
+ "git",
+ "github",
+ "repo"
+ ],
+ "readme": "[![Build Status](https://travis-ci.org/robertkowalski/github-url-from-username-repo.png?branch=master)](https://travis-ci.org/robertkowalski/github-url-from-username-repo)\n[![Dependency Status](https://gemnasium.com/robertkowalski/github-url-from-username-repo.png)](https://gemnasium.com/robertkowalski/github-url-from-username-repo)\n\n\n# github-url-from-username-repo\n\n## Usage\n\n```javascript\n\nvar getUrl = require(\"github-url-from-username-repo\")\ngetUrl(\"visionmedia/express\") // git://github.com/visionmedia/express\n\n```",
+ "readmeFilename": "README.md",
+ "homepage": "https://github.com/robertkowalski/github-url-from-username-repo",
+ "_id": "github-url-from-username-repo@0.1.0",
+ "dist": {
+ "shasum": "fe398af670692e91af7bcfc5ae1d99ff97b1df89"
+ },
+ "_from": "github-url-from-username-repo@0.1.0",
+ "_resolved": "https://registry.npmjs.org/github-url-from-username-repo/-/github-url-from-username-repo-0.1.0.tgz"
+}
diff --git a/deps/npm/node_modules/github-url-from-username-repo/test/index.js b/deps/npm/node_modules/github-url-from-username-repo/test/index.js
new file mode 100644
index 000000000..e8e7b4760
--- /dev/null
+++ b/deps/npm/node_modules/github-url-from-username-repo/test/index.js
@@ -0,0 +1,34 @@
+var assert = require("assert")
+var getUrl = require("../")
+
+describe("github url from username/repo", function () {
+ it("returns a github url for the username/repo", function () {
+ var url = getUrl("visionmedia/express")
+ assert.equal("git://github.com/visionmedia/express", url)
+ })
+
+ it("returns null if it does not match", function () {
+ var url = getUrl("package")
+ assert.deepEqual(null, url)
+ })
+
+ it("returns null if no repo/user was given", function () {
+ var url = getUrl()
+ assert.deepEqual(null, url)
+ })
+
+ it("works with .", function () {
+ var url = getUrl("component/downloader.js")
+ assert.equal("git://github.com/component/downloader.js", url)
+ })
+
+ it("works with . in the beginning", function () {
+ var url = getUrl("component/.downloader.js")
+ assert.equal("git://github.com/component/.downloader.js", url)
+ })
+
+ it("works with -", function () {
+ var url = getUrl("component/-dow-nloader.j-s")
+ assert.equal("git://github.com/component/-dow-nloader.j-s", url)
+ })
+})
diff --git a/deps/npm/node_modules/glob/glob.js b/deps/npm/node_modules/glob/glob.js
index f0118a4f4..f646c4483 100644
--- a/deps/npm/node_modules/glob/glob.js
+++ b/deps/npm/node_modules/glob/glob.js
@@ -36,7 +36,7 @@
module.exports = glob
-var fs = require("graceful-fs")
+var fs = require("fs")
, minimatch = require("minimatch")
, Minimatch = minimatch.Minimatch
, inherits = require("inherits")
@@ -76,6 +76,7 @@ function globSync (pattern, options) {
return glob(pattern, options)
}
+this._processingEmitQueue = false
glob.Glob = Glob
inherits(Glob, EE)
@@ -84,6 +85,11 @@ function Glob (pattern, options, cb) {
return new Glob(pattern, options, cb)
}
+ if (typeof options === "function") {
+ cb = options
+ options = null
+ }
+
if (typeof cb === "function") {
this.on("error", cb)
this.on("end", function (matches) {
@@ -93,9 +99,13 @@ function Glob (pattern, options, cb) {
options = options || {}
+ this._endEmitted = false
this.EOF = {}
this._emitQueue = []
+ this.paused = false
+ this._processingEmitQueue = false
+
this.maxDepth = options.maxDepth || 1000
this.maxLength = options.maxLength || Infinity
this.cache = options.cache || {}
@@ -211,19 +221,7 @@ Glob.prototype._finish = function () {
if (this.mark) {
// at *some* point we statted all of these
- all = all.map(function (m) {
- var sc = this.cache[m]
- if (!sc)
- return m
- var isDir = (Array.isArray(sc) || sc === 2)
- if (isDir && m.slice(-1) !== "/") {
- return m + "/"
- }
- if (!isDir && m.slice(-1) === "/") {
- return m.replace(/\/+$/, "")
- }
- return m
- }, this)
+ all = all.map(this._mark, this)
}
this.log("emitting end", all)
@@ -242,6 +240,27 @@ function alphasort (a, b) {
return a > b ? 1 : a < b ? -1 : 0
}
+Glob.prototype._mark = function (p) {
+ var c = this.cache[p]
+ var m = p
+ if (c) {
+ var isDir = c === 2 || Array.isArray(c)
+ var slash = p.slice(-1) === '/'
+
+ if (isDir && !slash)
+ m += '/'
+ else if (!isDir && slash)
+ m = m.slice(0, -1)
+
+ if (m !== p) {
+ this.statCache[m] = this.statCache[p]
+ this.cache[m] = this.cache[p]
+ }
+ }
+
+ return m
+}
+
Glob.prototype.abort = function () {
this.aborted = true
this.emit("abort")
@@ -266,34 +285,68 @@ Glob.prototype.resume = function () {
}
Glob.prototype.emitMatch = function (m) {
- if (!this.stat || this.statCache[m] || m === this.EOF) {
- this._emitQueue.push(m)
- this._processEmitQueue()
- } else {
- this._stat(m, function(exists, isDir) {
- if (exists) {
- this._emitQueue.push(m)
- this._processEmitQueue()
- }
- })
- }
+ this.log('emitMatch', m)
+ this._emitQueue.push(m)
+ this._processEmitQueue()
}
Glob.prototype._processEmitQueue = function (m) {
+ this.log("pEQ paused=%j processing=%j m=%j", this.paused,
+ this._processingEmitQueue, m)
+ var done = false
while (!this._processingEmitQueue &&
!this.paused) {
this._processingEmitQueue = true
var m = this._emitQueue.shift()
+ this.log(">processEmitQueue", m === this.EOF ? ":EOF:" : m)
if (!m) {
+ this.log(">processEmitQueue, falsey m")
this._processingEmitQueue = false
break
}
- this.log('emit!', m === this.EOF ? "end" : "match")
+ if (m === this.EOF || !(this.mark && !this.stat)) {
+ this.log("peq: unmarked, or eof")
+ next.call(this, 0, false)
+ } else if (this.statCache[m]) {
+ var sc = this.statCache[m]
+ var exists
+ if (sc)
+ exists = sc.isDirectory() ? 2 : 1
+ this.log("peq: stat cached")
+ next.call(this, exists, exists === 2)
+ } else {
+ this.log("peq: _stat, then next")
+ this._stat(m, next)
+ }
+
+ function next(exists, isDir) {
+ this.log("next", m, exists, isDir)
+ var ev = m === this.EOF ? "end" : "match"
- this.emit(m === this.EOF ? "end" : "match", m)
- this._processingEmitQueue = false
+ // "end" can only happen once.
+ assert(!this._endEmitted)
+ if (ev === "end")
+ this._endEmitted = true
+
+ if (exists) {
+ // Doesn't mean it necessarily doesn't exist, it's possible
+ // we just didn't check because we don't care that much, or
+ // this is EOF anyway.
+ if (isDir && !m.match(/\/$/)) {
+ m = m + "/"
+ } else if (!isDir && m.match(/\/$/)) {
+ m = m.replace(/\/+$/, "")
+ }
+ }
+ this.log("emit", ev, m)
+ this.emit(ev, m)
+ this._processingEmitQueue = false
+ if (done && m !== this.EOF && !this.paused)
+ this._processEmitQueue()
+ }
}
+ done = true
}
Glob.prototype._process = function (pattern, depth, index, cb_) {
diff --git a/deps/npm/node_modules/glob/package.json b/deps/npm/node_modules/glob/package.json
index 7c6879a96..71f32cd49 100644
--- a/deps/npm/node_modules/glob/package.json
+++ b/deps/npm/node_modules/glob/package.json
@@ -6,7 +6,7 @@
},
"name": "glob",
"description": "a little globber",
- "version": "3.2.1",
+ "version": "3.2.9",
"repository": {
"type": "git",
"url": "git://github.com/isaacs/node-glob.git"
@@ -17,8 +17,7 @@
},
"dependencies": {
"minimatch": "~0.2.11",
- "graceful-fs": "~1.2.0",
- "inherits": "1"
+ "inherits": "2"
},
"devDependencies": {
"tap": "~0.4.0",
@@ -26,7 +25,8 @@
"rimraf": "1"
},
"scripts": {
- "test": "tap test/*.js"
+ "test": "tap test/*.js",
+ "test-regen": "TEST_REGEN=1 node test/00-setup.js"
},
"license": "BSD",
"readme": "# Glob\n\nMatch files using the patterns the shell uses, like stars and stuff.\n\nThis is a glob implementation in JavaScript. It uses the `minimatch`\nlibrary to do its matching.\n\n## Attention: node-glob users!\n\nThe API has changed dramatically between 2.x and 3.x. This library is\nnow 100% JavaScript, and the integer flags have been replaced with an\noptions object.\n\nAlso, there's an event emitter class, proper tests, and all the other\nthings you've come to expect from node modules.\n\nAnd best of all, no compilation!\n\n## Usage\n\n```javascript\nvar glob = require(\"glob\")\n\n// options is optional\nglob(\"**/*.js\", options, function (er, files) {\n // files is an array of filenames.\n // If the `nonull` option is set, and nothing\n // was found, then files is [\"**/*.js\"]\n // er is an error object or null.\n})\n```\n\n## Features\n\nPlease see the [minimatch\ndocumentation](https://github.com/isaacs/minimatch) for more details.\n\nSupports these glob features:\n\n* Brace Expansion\n* Extended glob matching\n* \"Globstar\" `**` matching\n\nSee:\n\n* `man sh`\n* `man bash`\n* `man 3 fnmatch`\n* `man 5 gitignore`\n* [minimatch documentation](https://github.com/isaacs/minimatch)\n\n## glob(pattern, [options], cb)\n\n* `pattern` {String} Pattern to be matched\n* `options` {Object}\n* `cb` {Function}\n * `err` {Error | null}\n * `matches` {Array<String>} filenames found matching the pattern\n\nPerform an asynchronous glob search.\n\n## glob.sync(pattern, [options])\n\n* `pattern` {String} Pattern to be matched\n* `options` {Object}\n* return: {Array<String>} filenames found matching the pattern\n\nPerform a synchronous glob search.\n\n## Class: glob.Glob\n\nCreate a Glob object by instanting the `glob.Glob` class.\n\n```javascript\nvar Glob = require(\"glob\").Glob\nvar mg = new Glob(pattern, options, cb)\n```\n\nIt's an EventEmitter, and starts walking the filesystem to find matches\nimmediately.\n\n### new glob.Glob(pattern, [options], [cb])\n\n* `pattern` {String} pattern to search for\n* `options` {Object}\n* `cb` {Function} Called when an error occurs, or matches are found\n * `err` {Error | null}\n * `matches` {Array<String>} filenames found matching the pattern\n\nNote that if the `sync` flag is set in the options, then matches will\nbe immediately available on the `g.found` member.\n\n### Properties\n\n* `minimatch` The minimatch object that the glob uses.\n* `options` The options object passed in.\n* `error` The error encountered. When an error is encountered, the\n glob object is in an undefined state, and should be discarded.\n* `aborted` Boolean which is set to true when calling `abort()`. There\n is no way at this time to continue a glob search after aborting, but\n you can re-use the statCache to avoid having to duplicate syscalls.\n* `statCache` Collection of all the stat results the glob search\n performed.\n* `cache` Convenience object. Each field has the following possible\n values:\n * `false` - Path does not exist\n * `true` - Path exists\n * `1` - Path exists, and is not a directory\n * `2` - Path exists, and is a directory\n * `[file, entries, ...]` - Path exists, is a directory, and the\n array value is the results of `fs.readdir`\n\n### Events\n\n* `end` When the matching is finished, this is emitted with all the\n matches found. If the `nonull` option is set, and no match was found,\n then the `matches` list contains the original pattern. The matches\n are sorted, unless the `nosort` flag is set.\n* `match` Every time a match is found, this is emitted with the matched.\n* `error` Emitted when an unexpected error is encountered, or whenever\n any fs error occurs if `options.strict` is set.\n* `abort` When `abort()` is called, this event is raised.\n\n### Methods\n\n* `abort` Stop the search.\n\n### Options\n\nAll the options that can be passed to Minimatch can also be passed to\nGlob to change pattern matching behavior. Also, some have been added,\nor have glob-specific ramifications.\n\nAll options are false by default, unless otherwise noted.\n\nAll options are added to the glob object, as well.\n\n* `cwd` The current working directory in which to search. Defaults\n to `process.cwd()`.\n* `root` The place where patterns starting with `/` will be mounted\n onto. Defaults to `path.resolve(options.cwd, \"/\")` (`/` on Unix\n systems, and `C:\\` or some such on Windows.)\n* `dot` Include `.dot` files in normal matches and `globstar` matches.\n Note that an explicit dot in a portion of the pattern will always\n match dot files.\n* `nomount` By default, a pattern starting with a forward-slash will be\n \"mounted\" onto the root setting, so that a valid filesystem path is\n returned. Set this flag to disable that behavior.\n* `mark` Add a `/` character to directory matches. Note that this\n requires additional stat calls.\n* `nosort` Don't sort the results.\n* `stat` Set to true to stat *all* results. This reduces performance\n somewhat, and is completely unnecessary, unless `readdir` is presumed\n to be an untrustworthy indicator of file existence. It will cause\n ELOOP to be triggered one level sooner in the case of cyclical\n symbolic links.\n* `silent` When an unusual error is encountered\n when attempting to read a directory, a warning will be printed to\n stderr. Set the `silent` option to true to suppress these warnings.\n* `strict` When an unusual error is encountered\n when attempting to read a directory, the process will just continue on\n in search of other matches. Set the `strict` option to raise an error\n in these cases.\n* `cache` See `cache` property above. Pass in a previously generated\n cache object to save some fs calls.\n* `statCache` A cache of results of filesystem information, to prevent\n unnecessary stat calls. While it should not normally be necessary to\n set this, you may pass the statCache from one glob() call to the\n options object of another, if you know that the filesystem will not\n change between calls. (See \"Race Conditions\" below.)\n* `sync` Perform a synchronous glob search.\n* `nounique` In some cases, brace-expanded patterns can result in the\n same file showing up multiple times in the result set. By default,\n this implementation prevents duplicates in the result set.\n Set this flag to disable that behavior.\n* `nonull` Set to never return an empty set, instead returning a set\n containing the pattern itself. This is the default in glob(3).\n* `nocase` Perform a case-insensitive match. Note that case-insensitive\n filesystems will sometimes result in glob returning results that are\n case-insensitively matched anyway, since readdir and stat will not\n raise an error.\n* `debug` Set to enable debug logging in minimatch and glob.\n* `globDebug` Set to enable debug logging in glob, but not minimatch.\n\n## Comparisons to other fnmatch/glob implementations\n\nWhile strict compliance with the existing standards is a worthwhile\ngoal, some discrepancies exist between node-glob and other\nimplementations, and are intentional.\n\nIf the pattern starts with a `!` character, then it is negated. Set the\n`nonegate` flag to suppress this behavior, and treat leading `!`\ncharacters normally. This is perhaps relevant if you wish to start the\npattern with a negative extglob pattern like `!(a|B)`. Multiple `!`\ncharacters at the start of a pattern will negate the pattern multiple\ntimes.\n\nIf a pattern starts with `#`, then it is treated as a comment, and\nwill not match anything. Use `\\#` to match a literal `#` at the\nstart of a line, or set the `nocomment` flag to suppress this behavior.\n\nThe double-star character `**` is supported by default, unless the\n`noglobstar` flag is set. This is supported in the manner of bsdglob\nand bash 4.1, where `**` only has special significance if it is the only\nthing in a path part. That is, `a/**/b` will match `a/x/y/b`, but\n`a/**b` will not.\n\nIf an escaped pattern has no matches, and the `nonull` flag is set,\nthen glob returns the pattern as-provided, rather than\ninterpreting the character escapes. For example,\n`glob.match([], \"\\\\*a\\\\?\")` will return `\"\\\\*a\\\\?\"` rather than\n`\"*a?\"`. This is akin to setting the `nullglob` option in bash, except\nthat it does not resolve escaped pattern characters.\n\nIf brace expansion is not disabled, then it is performed before any\nother interpretation of the glob pattern. Thus, a pattern like\n`+(a|{b),c)}`, which would not be valid in bash or zsh, is expanded\n**first** into the set of `+(a|b)` and `+(a|c)`, and those patterns are\nchecked for validity. Since those two are valid, matching proceeds.\n\n## Windows\n\n**Please only use forward-slashes in glob expressions.**\n\nThough windows uses either `/` or `\\` as its path separator, only `/`\ncharacters are used by this glob implementation. You must use\nforward-slashes **only** in glob expressions. Back-slashes will always\nbe interpreted as escape characters, not path separators.\n\nResults from absolute patterns such as `/foo/*` are mounted onto the\nroot setting using `path.join`. On windows, this will by default result\nin `/foo/*` matching `C:\\foo\\bar.txt`.\n\n## Race Conditions\n\nGlob searching, by its very nature, is susceptible to race conditions,\nsince it relies on directory walking and such.\n\nAs a result, it is possible that a file that exists when glob looks for\nit may have been deleted or modified by the time it returns the result.\n\nAs part of its internal implementation, this program caches all stat\nand readdir calls that it makes, in order to cut down on system\noverhead. However, this also makes it even more susceptible to races,\nespecially if the cache or statCache objects are reused between glob\ncalls.\n\nUsers are thus advised not to use a glob result as a guarantee of\nfilesystem state in the face of rapid changes. For the vast majority\nof operations, this is never a problem.\n",
@@ -34,10 +34,7 @@
"bugs": {
"url": "https://github.com/isaacs/node-glob/issues"
},
- "_id": "glob@3.2.1",
- "dist": {
- "shasum": "57af70ec73ba2323bfe3f29a067765db64c5d758"
- },
- "_from": "glob@3.2.1",
- "_resolved": "https://registry.npmjs.org/glob/-/glob-3.2.1.tgz"
+ "homepage": "https://github.com/isaacs/node-glob",
+ "_id": "glob@3.2.9",
+ "_from": "glob@latest"
}
diff --git a/deps/npm/node_modules/glob/test/bash-results.json b/deps/npm/node_modules/glob/test/bash-results.json
index a9bc347de..8051c7238 100644
--- a/deps/npm/node_modules/glob/test/bash-results.json
+++ b/deps/npm/node_modules/glob/test/bash-results.json
@@ -283,7 +283,6 @@
"{./*/*,/tmp/glob-test/*}": [
"./examples/g.js",
"./examples/usr-local.js",
- "./node_modules/graceful-fs",
"./node_modules/inherits",
"./node_modules/minimatch",
"./node_modules/mkdirp",
@@ -296,8 +295,10 @@
"./test/cwd-test.js",
"./test/globstar-match.js",
"./test/mark.js",
+ "./test/new-glob-optional-options.js",
"./test/nocase-nomagic.js",
"./test/pause-resume.js",
+ "./test/readme-issue.js",
"./test/root-nomount.js",
"./test/root.js",
"./test/stat.js",
diff --git a/deps/npm/node_modules/glob/test/mark.js b/deps/npm/node_modules/glob/test/mark.js
index ed68a335c..bf411c0e5 100644
--- a/deps/npm/node_modules/glob/test/mark.js
+++ b/deps/npm/node_modules/glob/test/mark.js
@@ -2,6 +2,42 @@ var test = require("tap").test
var glob = require('../')
process.chdir(__dirname)
+// expose timing issues
+var lag = 5
+glob.Glob.prototype._stat = function(o) { return function(f, cb) {
+ var args = arguments
+ setTimeout(function() {
+ o.call(this, f, cb)
+ }.bind(this), lag += 5)
+}}(glob.Glob.prototype._stat)
+
+
+test("mark, with **", function (t) {
+ glob("a/*b*/**", {mark: true}, function (er, results) {
+ if (er)
+ throw er
+ var expect =
+ [ 'a/abcdef/',
+ 'a/abcdef/g/',
+ 'a/abcdef/g/h',
+ 'a/abcfed/',
+ 'a/abcfed/g/',
+ 'a/abcfed/g/h',
+ 'a/b/',
+ 'a/b/c/',
+ 'a/b/c/d',
+ 'a/bc/',
+ 'a/bc/e/',
+ 'a/bc/e/f',
+ 'a/cb/',
+ 'a/cb/e/',
+ 'a/cb/e/f' ]
+
+ t.same(results, expect)
+ t.end()
+ })
+})
+
test("mark, no / on pattern", function (t) {
glob("a/*", {mark: true}, function (er, results) {
if (er)
@@ -18,6 +54,8 @@ test("mark, no / on pattern", function (t) {
t.same(results, expect)
t.end()
+ }).on('match', function(m) {
+ t.similar(m, /\/$/)
})
})
@@ -36,6 +74,8 @@ test("mark=false, no / on pattern", function (t) {
expect.push('a/symlink')
t.same(results, expect)
t.end()
+ }).on('match', function(m) {
+ t.similar(m, /[^\/]$/)
})
})
@@ -53,6 +93,8 @@ test("mark=true, / on pattern", function (t) {
expect.push('a/symlink/')
t.same(results, expect)
t.end()
+ }).on('match', function(m) {
+ t.similar(m, /\/$/)
})
})
@@ -70,5 +112,7 @@ test("mark=false, / on pattern", function (t) {
expect.push('a/symlink/')
t.same(results, expect)
t.end()
+ }).on('match', function(m) {
+ t.similar(m, /\/$/)
})
})
diff --git a/deps/npm/node_modules/glob/test/new-glob-optional-options.js b/deps/npm/node_modules/glob/test/new-glob-optional-options.js
new file mode 100644
index 000000000..3e7dc5acb
--- /dev/null
+++ b/deps/npm/node_modules/glob/test/new-glob-optional-options.js
@@ -0,0 +1,10 @@
+var Glob = require('../glob.js').Glob;
+var test = require('tap').test;
+
+test('new glob, with cb, and no options', function (t) {
+ new Glob(__filename, function(er, results) {
+ if (er) throw er;
+ t.same(results, [__filename]);
+ t.end();
+ });
+});
diff --git a/deps/npm/node_modules/glob/test/nocase-nomagic.js b/deps/npm/node_modules/glob/test/nocase-nomagic.js
index d86297098..2503f2310 100644
--- a/deps/npm/node_modules/glob/test/nocase-nomagic.js
+++ b/deps/npm/node_modules/glob/test/nocase-nomagic.js
@@ -1,4 +1,4 @@
-var fs = require('graceful-fs');
+var fs = require('fs');
var test = require('tap').test;
var glob = require('../');
diff --git a/deps/npm/node_modules/glob/test/readme-issue.js b/deps/npm/node_modules/glob/test/readme-issue.js
new file mode 100644
index 000000000..0b4e0be29
--- /dev/null
+++ b/deps/npm/node_modules/glob/test/readme-issue.js
@@ -0,0 +1,36 @@
+var test = require("tap").test
+var glob = require("../")
+
+var mkdirp = require("mkdirp")
+var fs = require("fs")
+var rimraf = require("rimraf")
+var dir = __dirname + "/package"
+
+test("setup", function (t) {
+ mkdirp.sync(dir)
+ fs.writeFileSync(dir + "/package.json", "{}", "ascii")
+ fs.writeFileSync(dir + "/README", "x", "ascii")
+ t.pass("setup done")
+ t.end()
+})
+
+test("glob", function (t) {
+ var opt = {
+ cwd: dir,
+ nocase: true,
+ mark: true
+ }
+
+ glob("README?(.*)", opt, function (er, files) {
+ if (er)
+ throw er
+ t.same(files, ["README"])
+ t.end()
+ })
+})
+
+test("cleanup", function (t) {
+ rimraf.sync(dir)
+ t.pass("clean")
+ t.end()
+})
diff --git a/deps/npm/node_modules/graceful-fs/README.md b/deps/npm/node_modules/graceful-fs/README.md
index 01af3d6b6..eb1a10935 100644
--- a/deps/npm/node_modules/graceful-fs/README.md
+++ b/deps/npm/node_modules/graceful-fs/README.md
@@ -11,10 +11,9 @@ resilient to errors.
graceful-fs:
-* keeps track of how many file descriptors are open, and by default
- limits this to 1024. Any further requests to open a file are put in a
- queue until new slots become available. If 1024 turns out to be too
- much, it decreases the limit further.
+* Queues up `open` and `readdir` calls, and retries them once
+ something closes if there is an EMFILE error from too many file
+ descriptors.
* fixes `lchmod` for Node versions prior to 0.6.2.
* implements `fs.lutimes` if possible. Otherwise it becomes a noop.
* ignores `EINVAL` and `EPERM` errors in `chown`, `fchown` or
@@ -25,9 +24,3 @@ graceful-fs:
On Windows, it retries renaming a file for up to one second if `EACCESS`
or `EPERM` error occurs, likely because antivirus software has locked
the directory.
-
-## Configuration
-
-The maximum number of open file descriptors that graceful-fs manages may
-be adjusted by setting `fs.MAX_OPEN` to a different number. The default
-is 1024.
diff --git a/deps/npm/node_modules/graceful-fs/graceful-fs.js b/deps/npm/node_modules/graceful-fs/graceful-fs.js
index cc2f19e58..baf957d8b 100644
--- a/deps/npm/node_modules/graceful-fs/graceful-fs.js
+++ b/deps/npm/node_modules/graceful-fs/graceful-fs.js
@@ -1,359 +1,161 @@
-// this keeps a queue of opened file descriptors, and will make
-// fs operations wait until some have closed before trying to open more.
+// Monkey-patching the fs module.
+// It's ugly, but there is simply no other way to do this.
+var fs = module.exports = require('fs')
-var fs = exports = module.exports = {}
-fs._originalFs = require("fs")
+var assert = require('assert')
-Object.getOwnPropertyNames(fs._originalFs).forEach(function(prop) {
- var desc = Object.getOwnPropertyDescriptor(fs._originalFs, prop)
- Object.defineProperty(fs, prop, desc)
-})
+// fix up some busted stuff, mostly on windows and old nodes
+require('./polyfills.js')
-var queue = []
- , constants = require("constants")
-
-fs._curOpen = 0
+// The EMFILE enqueuing stuff
-fs.MIN_MAX_OPEN = 64
-fs.MAX_OPEN = 1024
-
-// prevent EMFILE errors
-function OpenReq (path, flags, mode, cb) {
- this.path = path
- this.flags = flags
- this.mode = mode
- this.cb = cb
-}
+var util = require('util')
function noop () {}
-fs.open = gracefulOpen
-
-function gracefulOpen (path, flags, mode, cb) {
- if (typeof mode === "function") cb = mode, mode = null
- if (typeof cb !== "function") cb = noop
-
- if (fs._curOpen >= fs.MAX_OPEN) {
- queue.push(new OpenReq(path, flags, mode, cb))
- setTimeout(flush)
- return
+var debug = noop
+var util = require('util')
+if (util.debuglog)
+ debug = util.debuglog('gfs')
+else if (/\bgfs\b/i.test(process.env.NODE_DEBUG || ''))
+ debug = function() {
+ var m = util.format.apply(util, arguments)
+ m = 'GFS: ' + m.split(/\n/).join('\nGFS: ')
+ console.error(m)
}
- open(path, flags, mode, function (er, fd) {
- if (er && er.code === "EMFILE" && fs._curOpen > fs.MIN_MAX_OPEN) {
- // that was too many. reduce max, get back in queue.
- // this should only happen once in a great while, and only
- // if the ulimit -n is set lower than 1024.
- fs.MAX_OPEN = fs._curOpen - 1
- return fs.open(path, flags, mode, cb)
- }
- cb(er, fd)
- })
-}
-function open (path, flags, mode, cb) {
- cb = cb || noop
- fs._curOpen ++
- fs._originalFs.open.call(fs, path, flags, mode, function (er, fd) {
- if (er) onclose()
- cb(er, fd)
+if (/\bgfs\b/i.test(process.env.NODE_DEBUG || '')) {
+ process.on('exit', function() {
+ debug('fds', fds)
+ debug(queue)
+ assert.equal(queue.length, 0)
})
}
-fs.openSync = function (path, flags, mode) {
- var ret
- ret = fs._originalFs.openSync.call(fs, path, flags, mode)
- fs._curOpen ++
- return ret
-}
-function onclose () {
- fs._curOpen --
- flush()
-}
+var originalOpen = fs.open
+fs.open = open
-function flush () {
- while (fs._curOpen < fs.MAX_OPEN) {
- var req = queue.shift()
- if (!req) return
- switch (req.constructor.name) {
- case 'OpenReq':
- open(req.path, req.flags || "r", req.mode || 0777, req.cb)
- break
- case 'ReaddirReq':
- readdir(req.path, req.cb)
- break
- default:
- throw new Error('Unknown req type: ' + req.constructor.name)
- }
- }
-}
-
-fs.close = function (fd, cb) {
- cb = cb || noop
- fs._originalFs.close.call(fs, fd, function (er) {
- onclose()
- cb(er)
- })
+function open(path, flags, mode, cb) {
+ if (typeof mode === "function") cb = mode, mode = null
+ if (typeof cb !== "function") cb = noop
+ new OpenReq(path, flags, mode, cb)
}
-fs.closeSync = function (fd) {
- try {
- return fs._originalFs.closeSync.call(fs, fd)
- } finally {
- onclose()
- }
+function OpenReq(path, flags, mode, cb) {
+ this.path = path
+ this.flags = flags
+ this.mode = mode
+ this.cb = cb
+ Req.call(this)
}
+util.inherits(OpenReq, Req)
-// readdir takes a fd as well.
-// however, the sync version closes it right away, so
-// there's no need to wrap.
-// It would be nice to catch when it throws an EMFILE,
-// but that's relatively rare anyway.
+OpenReq.prototype.process = function() {
+ originalOpen.call(fs, this.path, this.flags, this.mode, this.done)
+}
-fs.readdir = gracefulReaddir
+var fds = {}
+OpenReq.prototype.done = function(er, fd) {
+ debug('open done', er, fd)
+ if (fd)
+ fds['fd' + fd] = this.path
+ Req.prototype.done.call(this, er, fd)
+}
-function gracefulReaddir (path, cb) {
- if (fs._curOpen >= fs.MAX_OPEN) {
- queue.push(new ReaddirReq(path, cb))
- setTimeout(flush)
- return
- }
- readdir(path, function (er, files) {
- if (er && er.code === "EMFILE" && fs._curOpen > fs.MIN_MAX_OPEN) {
- fs.MAX_OPEN = fs._curOpen - 1
- return fs.readdir(path, cb)
- }
- cb(er, files)
- })
-}
+var originalReaddir = fs.readdir
+fs.readdir = readdir
-function readdir (path, cb) {
- cb = cb || noop
- fs._curOpen ++
- fs._originalFs.readdir.call(fs, path, function (er, files) {
- onclose()
- cb(er, files)
- })
+function readdir(path, cb) {
+ if (typeof cb !== "function") cb = noop
+ new ReaddirReq(path, cb)
}
-function ReaddirReq (path, cb) {
+function ReaddirReq(path, cb) {
this.path = path
this.cb = cb
+ Req.call(this)
}
+util.inherits(ReaddirReq, Req)
-// (re-)implement some things that are known busted or missing.
-
-var constants = require("constants")
-
-// lchmod, broken prior to 0.6.2
-// back-port the fix here.
-if (constants.hasOwnProperty('O_SYMLINK') &&
- process.version.match(/^v0\.6\.[0-2]|^v0\.5\./)) {
- fs.lchmod = function (path, mode, callback) {
- callback = callback || noop
- fs.open( path
- , constants.O_WRONLY | constants.O_SYMLINK
- , mode
- , function (err, fd) {
- if (err) {
- callback(err)
- return
- }
- // prefer to return the chmod error, if one occurs,
- // but still try to close, and report closing errors if they occur.
- fs.fchmod(fd, mode, function (err) {
- fs.close(fd, function(err2) {
- callback(err || err2)
- })
- })
- })
- }
+ReaddirReq.prototype.process = function() {
+ originalReaddir.call(fs, this.path, this.done)
+}
- fs.lchmodSync = function (path, mode) {
- var fd = fs.openSync(path, constants.O_WRONLY | constants.O_SYMLINK, mode)
-
- // prefer to return the chmod error, if one occurs,
- // but still try to close, and report closing errors if they occur.
- var err, err2
- try {
- var ret = fs.fchmodSync(fd, mode)
- } catch (er) {
- err = er
- }
- try {
- fs.closeSync(fd)
- } catch (er) {
- err2 = er
- }
- if (err || err2) throw (err || err2)
- return ret
- }
+ReaddirReq.prototype.done = function(er, files) {
+ if (files && files.sort)
+ files = files.sort()
+ Req.prototype.done.call(this, er, files)
+ onclose()
}
-// lutimes implementation, or no-op
-if (!fs.lutimes) {
- if (constants.hasOwnProperty("O_SYMLINK")) {
- fs.lutimes = function (path, at, mt, cb) {
- fs.open(path, constants.O_SYMLINK, function (er, fd) {
- cb = cb || noop
- if (er) return cb(er)
- fs.futimes(fd, at, mt, function (er) {
- fs.close(fd, function (er2) {
- return cb(er || er2)
- })
- })
- })
- }
-
- fs.lutimesSync = function (path, at, mt) {
- var fd = fs.openSync(path, constants.O_SYMLINK)
- , err
- , err2
- , ret
-
- try {
- var ret = fs.futimesSync(fd, at, mt)
- } catch (er) {
- err = er
- }
- try {
- fs.closeSync(fd)
- } catch (er) {
- err2 = er
- }
- if (err || err2) throw (err || err2)
- return ret
- }
-
- } else if (fs.utimensat && constants.hasOwnProperty("AT_SYMLINK_NOFOLLOW")) {
- // maybe utimensat will be bound soonish?
- fs.lutimes = function (path, at, mt, cb) {
- fs.utimensat(path, at, mt, constants.AT_SYMLINK_NOFOLLOW, cb)
- }
-
- fs.lutimesSync = function (path, at, mt) {
- return fs.utimensatSync(path, at, mt, constants.AT_SYMLINK_NOFOLLOW)
- }
+var originalClose = fs.close
+fs.close = close
- } else {
- fs.lutimes = function (_a, _b, _c, cb) { process.nextTick(cb) }
- fs.lutimesSync = function () {}
- }
+function close (fd, cb) {
+ debug('close', fd)
+ if (typeof cb !== "function") cb = noop
+ delete fds['fd' + fd]
+ originalClose.call(fs, fd, function(er) {
+ onclose()
+ cb(er)
+ })
}
-// https://github.com/isaacs/node-graceful-fs/issues/4
-// Chown should not fail on einval or eperm if non-root.
+var originalCloseSync = fs.closeSync
+fs.closeSync = closeSync
-fs.chown = chownFix(fs.chown)
-fs.fchown = chownFix(fs.fchown)
-fs.lchown = chownFix(fs.lchown)
-
-fs.chownSync = chownFixSync(fs.chownSync)
-fs.fchownSync = chownFixSync(fs.fchownSync)
-fs.lchownSync = chownFixSync(fs.lchownSync)
-
-function chownFix (orig) {
- if (!orig) return orig
- return function (target, uid, gid, cb) {
- return orig.call(fs, target, uid, gid, function (er, res) {
- if (chownErOk(er)) er = null
- cb(er, res)
- })
+function closeSync (fd) {
+ try {
+ return originalCloseSync(fd)
+ } finally {
+ onclose()
}
}
-function chownFixSync (orig) {
- if (!orig) return orig
- return function (target, uid, gid) {
- try {
- return orig.call(fs, target, uid, gid)
- } catch (er) {
- if (!chownErOk(er)) throw er
- }
- }
-}
-function chownErOk (er) {
- // if there's no getuid, or if getuid() is something other than 0,
- // and the error is EINVAL or EPERM, then just ignore it.
- // This specific case is a silent failure in cp, install, tar,
- // and most other unix tools that manage permissions.
- // When running as root, or if other types of errors are encountered,
- // then it's strict.
- if (!er || (!process.getuid || process.getuid() !== 0)
- && (er.code === "EINVAL" || er.code === "EPERM")) return true
+// Req class
+function Req () {
+ // start processing
+ this.done = this.done.bind(this)
+ this.failures = 0
+ this.process()
}
-
-// if lchmod/lchown do not exist, then make them no-ops
-if (!fs.lchmod) {
- fs.lchmod = function (path, mode, cb) {
- process.nextTick(cb)
+Req.prototype.done = function (er, result) {
+ var tryAgain = false
+ if (er) {
+ var code = er.code
+ var tryAgain = code === "EMFILE"
+ if (process.platform === "win32")
+ tryAgain = tryAgain || code === "OK"
}
- fs.lchmodSync = function () {}
-}
-if (!fs.lchown) {
- fs.lchown = function (path, uid, gid, cb) {
- process.nextTick(cb)
- }
- fs.lchownSync = function () {}
-}
-
-
-// on Windows, A/V software can lock the directory, causing this
-// to fail with an EACCES or EPERM if the directory contains newly
-// created files. Try again on failure, for up to 1 second.
-if (process.platform === "win32") {
- var rename_ = fs.rename
- fs.rename = function rename (from, to, cb) {
- var start = Date.now()
- rename_(from, to, function CB (er) {
- if (er
- && (er.code === "EACCES" || er.code === "EPERM")
- && Date.now() - start < 1000) {
- return rename_(from, to, CB)
- }
- cb(er)
- })
+ if (tryAgain) {
+ this.failures ++
+ enqueue(this)
+ } else {
+ var cb = this.cb
+ cb(er, result)
}
}
+var queue = []
-// if read() returns EAGAIN, then just try it again.
-var read = fs.read
-fs.read = function (fd, buffer, offset, length, position, callback_) {
- var callback
- if (callback_ && typeof callback_ === 'function') {
- var eagCounter = 0
- callback = function (er, _, __) {
- if (er && er.code === 'EAGAIN' && eagCounter < 10) {
- eagCounter ++
- return read.call(fs, fd, buffer, offset, length, position, callback)
- }
- callback_.apply(this, arguments)
- }
- }
- return read.call(fs, fd, buffer, offset, length, position, callback)
+function enqueue(req) {
+ queue.push(req)
+ debug('enqueue %d %s', queue.length, req.constructor.name, req)
}
-var readSync = fs.readSync
-fs.readSync = function (fd, buffer, offset, length, position) {
- var eagCounter = 0
- while (true) {
- try {
- return readSync.call(fs, fd, buffer, offset, length, position)
- } catch (er) {
- if (er.code === 'EAGAIN' && eagCounter < 10) {
- eagCounter ++
- continue
- }
- throw er
- }
+function onclose() {
+ var req = queue.shift()
+ if (req) {
+ debug('process', req.constructor.name, req)
+ req.process()
}
}
diff --git a/deps/npm/node_modules/graceful-fs/package.json b/deps/npm/node_modules/graceful-fs/package.json
index 4884b29f6..9de02f6e3 100644
--- a/deps/npm/node_modules/graceful-fs/package.json
+++ b/deps/npm/node_modules/graceful-fs/package.json
@@ -6,7 +6,7 @@
},
"name": "graceful-fs",
"description": "A drop-in replacement for fs, making various improvements.",
- "version": "1.2.2",
+ "version": "2.0.2",
"repository": {
"type": "git",
"url": "git://github.com/isaacs/node-graceful-fs.git"
@@ -38,11 +38,11 @@
"EACCESS"
],
"license": "BSD",
- "readme": "# graceful-fs\n\ngraceful-fs functions as a drop-in replacement for the fs module,\nmaking various improvements.\n\nThe improvements are meant to normalize behavior across different\nplatforms and environments, and to make filesystem access more\nresilient to errors.\n\n## Improvements over fs module\n\ngraceful-fs:\n\n* keeps track of how many file descriptors are open, and by default\n limits this to 1024. Any further requests to open a file are put in a\n queue until new slots become available. If 1024 turns out to be too\n much, it decreases the limit further.\n* fixes `lchmod` for Node versions prior to 0.6.2.\n* implements `fs.lutimes` if possible. Otherwise it becomes a noop.\n* ignores `EINVAL` and `EPERM` errors in `chown`, `fchown` or\n `lchown` if the user isn't root.\n* makes `lchmod` and `lchown` become noops, if not available.\n* retries reading a file if `read` results in EAGAIN error.\n\nOn Windows, it retries renaming a file for up to one second if `EACCESS`\nor `EPERM` error occurs, likely because antivirus software has locked\nthe directory.\n\n## Configuration\n\nThe maximum number of open file descriptors that graceful-fs manages may\nbe adjusted by setting `fs.MAX_OPEN` to a different number. The default\nis 1024.\n",
- "readmeFilename": "README.md",
"bugs": {
"url": "https://github.com/isaacs/node-graceful-fs/issues"
},
- "_id": "graceful-fs@1.2.2",
+ "readme": "ERROR: No README data found!",
+ "homepage": "https://github.com/isaacs/node-graceful-fs",
+ "_id": "graceful-fs@2.0.2",
"_from": "graceful-fs@latest"
}
diff --git a/deps/npm/node_modules/graceful-fs/polyfills.js b/deps/npm/node_modules/graceful-fs/polyfills.js
new file mode 100644
index 000000000..afc83b3f2
--- /dev/null
+++ b/deps/npm/node_modules/graceful-fs/polyfills.js
@@ -0,0 +1,228 @@
+var fs = require('fs')
+var constants = require('constants')
+
+var origCwd = process.cwd
+var cwd = null
+process.cwd = function() {
+ if (!cwd)
+ cwd = origCwd.call(process)
+ return cwd
+}
+var chdir = process.chdir
+process.chdir = function(d) {
+ cwd = null
+ chdir.call(process, d)
+}
+
+// (re-)implement some things that are known busted or missing.
+
+// lchmod, broken prior to 0.6.2
+// back-port the fix here.
+if (constants.hasOwnProperty('O_SYMLINK') &&
+ process.version.match(/^v0\.6\.[0-2]|^v0\.5\./)) {
+ fs.lchmod = function (path, mode, callback) {
+ callback = callback || noop
+ fs.open( path
+ , constants.O_WRONLY | constants.O_SYMLINK
+ , mode
+ , function (err, fd) {
+ if (err) {
+ callback(err)
+ return
+ }
+ // prefer to return the chmod error, if one occurs,
+ // but still try to close, and report closing errors if they occur.
+ fs.fchmod(fd, mode, function (err) {
+ fs.close(fd, function(err2) {
+ callback(err || err2)
+ })
+ })
+ })
+ }
+
+ fs.lchmodSync = function (path, mode) {
+ var fd = fs.openSync(path, constants.O_WRONLY | constants.O_SYMLINK, mode)
+
+ // prefer to return the chmod error, if one occurs,
+ // but still try to close, and report closing errors if they occur.
+ var err, err2
+ try {
+ var ret = fs.fchmodSync(fd, mode)
+ } catch (er) {
+ err = er
+ }
+ try {
+ fs.closeSync(fd)
+ } catch (er) {
+ err2 = er
+ }
+ if (err || err2) throw (err || err2)
+ return ret
+ }
+}
+
+
+// lutimes implementation, or no-op
+if (!fs.lutimes) {
+ if (constants.hasOwnProperty("O_SYMLINK")) {
+ fs.lutimes = function (path, at, mt, cb) {
+ fs.open(path, constants.O_SYMLINK, function (er, fd) {
+ cb = cb || noop
+ if (er) return cb(er)
+ fs.futimes(fd, at, mt, function (er) {
+ fs.close(fd, function (er2) {
+ return cb(er || er2)
+ })
+ })
+ })
+ }
+
+ fs.lutimesSync = function (path, at, mt) {
+ var fd = fs.openSync(path, constants.O_SYMLINK)
+ , err
+ , err2
+ , ret
+
+ try {
+ var ret = fs.futimesSync(fd, at, mt)
+ } catch (er) {
+ err = er
+ }
+ try {
+ fs.closeSync(fd)
+ } catch (er) {
+ err2 = er
+ }
+ if (err || err2) throw (err || err2)
+ return ret
+ }
+
+ } else if (fs.utimensat && constants.hasOwnProperty("AT_SYMLINK_NOFOLLOW")) {
+ // maybe utimensat will be bound soonish?
+ fs.lutimes = function (path, at, mt, cb) {
+ fs.utimensat(path, at, mt, constants.AT_SYMLINK_NOFOLLOW, cb)
+ }
+
+ fs.lutimesSync = function (path, at, mt) {
+ return fs.utimensatSync(path, at, mt, constants.AT_SYMLINK_NOFOLLOW)
+ }
+
+ } else {
+ fs.lutimes = function (_a, _b, _c, cb) { process.nextTick(cb) }
+ fs.lutimesSync = function () {}
+ }
+}
+
+
+// https://github.com/isaacs/node-graceful-fs/issues/4
+// Chown should not fail on einval or eperm if non-root.
+
+fs.chown = chownFix(fs.chown)
+fs.fchown = chownFix(fs.fchown)
+fs.lchown = chownFix(fs.lchown)
+
+fs.chownSync = chownFixSync(fs.chownSync)
+fs.fchownSync = chownFixSync(fs.fchownSync)
+fs.lchownSync = chownFixSync(fs.lchownSync)
+
+function chownFix (orig) {
+ if (!orig) return orig
+ return function (target, uid, gid, cb) {
+ return orig.call(fs, target, uid, gid, function (er, res) {
+ if (chownErOk(er)) er = null
+ cb(er, res)
+ })
+ }
+}
+
+function chownFixSync (orig) {
+ if (!orig) return orig
+ return function (target, uid, gid) {
+ try {
+ return orig.call(fs, target, uid, gid)
+ } catch (er) {
+ if (!chownErOk(er)) throw er
+ }
+ }
+}
+
+function chownErOk (er) {
+ // if there's no getuid, or if getuid() is something other than 0,
+ // and the error is EINVAL or EPERM, then just ignore it.
+ // This specific case is a silent failure in cp, install, tar,
+ // and most other unix tools that manage permissions.
+ // When running as root, or if other types of errors are encountered,
+ // then it's strict.
+ if (!er || (!process.getuid || process.getuid() !== 0)
+ && (er.code === "EINVAL" || er.code === "EPERM")) return true
+}
+
+
+// if lchmod/lchown do not exist, then make them no-ops
+if (!fs.lchmod) {
+ fs.lchmod = function (path, mode, cb) {
+ process.nextTick(cb)
+ }
+ fs.lchmodSync = function () {}
+}
+if (!fs.lchown) {
+ fs.lchown = function (path, uid, gid, cb) {
+ process.nextTick(cb)
+ }
+ fs.lchownSync = function () {}
+}
+
+
+
+// on Windows, A/V software can lock the directory, causing this
+// to fail with an EACCES or EPERM if the directory contains newly
+// created files. Try again on failure, for up to 1 second.
+if (process.platform === "win32") {
+ var rename_ = fs.rename
+ fs.rename = function rename (from, to, cb) {
+ var start = Date.now()
+ rename_(from, to, function CB (er) {
+ if (er
+ && (er.code === "EACCES" || er.code === "EPERM")
+ && Date.now() - start < 1000) {
+ return rename_(from, to, CB)
+ }
+ cb(er)
+ })
+ }
+}
+
+
+// if read() returns EAGAIN, then just try it again.
+var read = fs.read
+fs.read = function (fd, buffer, offset, length, position, callback_) {
+ var callback
+ if (callback_ && typeof callback_ === 'function') {
+ var eagCounter = 0
+ callback = function (er, _, __) {
+ if (er && er.code === 'EAGAIN' && eagCounter < 10) {
+ eagCounter ++
+ return read.call(fs, fd, buffer, offset, length, position, callback)
+ }
+ callback_.apply(this, arguments)
+ }
+ }
+ return read.call(fs, fd, buffer, offset, length, position, callback)
+}
+
+var readSync = fs.readSync
+fs.readSync = function (fd, buffer, offset, length, position) {
+ var eagCounter = 0
+ while (true) {
+ try {
+ return readSync.call(fs, fd, buffer, offset, length, position)
+ } catch (er) {
+ if (er.code === 'EAGAIN' && eagCounter < 10) {
+ eagCounter ++
+ continue
+ }
+ throw er
+ }
+ }
+}
+
diff --git a/deps/npm/node_modules/graceful-fs/test/open.js b/deps/npm/node_modules/graceful-fs/test/open.js
index 930d53257..104f36b0b 100644
--- a/deps/npm/node_modules/graceful-fs/test/open.js
+++ b/deps/npm/node_modules/graceful-fs/test/open.js
@@ -1,30 +1,25 @@
var test = require('tap').test
var fs = require('../graceful-fs.js')
-test('graceful fs is not fs', function (t) {
- t.notEqual(fs, require('fs'))
+test('graceful fs is monkeypatched fs', function (t) {
+ t.equal(fs, require('fs'))
t.end()
})
test('open an existing file works', function (t) {
- var start = fs._curOpen
var fd = fs.openSync(__filename, 'r')
- t.equal(fs._curOpen, start + 1)
fs.closeSync(fd)
- t.equal(fs._curOpen, start)
fs.open(__filename, 'r', function (er, fd) {
if (er) throw er
- t.equal(fs._curOpen, start + 1)
fs.close(fd, function (er) {
if (er) throw er
- t.equal(fs._curOpen, start)
+ t.pass('works')
t.end()
})
})
})
test('open a non-existing file throws', function (t) {
- var start = fs._curOpen
var er
try {
var fd = fs.openSync('this file does not exist', 'r')
@@ -34,13 +29,11 @@ test('open a non-existing file throws', function (t) {
t.ok(er, 'should throw')
t.notOk(fd, 'should not get an fd')
t.equal(er.code, 'ENOENT')
- t.equal(fs._curOpen, start)
fs.open('neither does this file', 'r', function (er, fd) {
t.ok(er, 'should throw')
t.notOk(fd, 'should not get an fd')
t.equal(er.code, 'ENOENT')
- t.equal(fs._curOpen, start)
t.end()
})
})
diff --git a/deps/npm/node_modules/graceful-fs/test/readdir-sort.js b/deps/npm/node_modules/graceful-fs/test/readdir-sort.js
new file mode 100644
index 000000000..aeaedf1c1
--- /dev/null
+++ b/deps/npm/node_modules/graceful-fs/test/readdir-sort.js
@@ -0,0 +1,21 @@
+var test = require("tap").test
+var fs = require("fs")
+
+var readdir = fs.readdir
+fs.readdir = function(path, cb) {
+ process.nextTick(function() {
+ cb(null, ["b", "z", "a"])
+ })
+}
+
+var g = require("../")
+
+test("readdir reorder", function (t) {
+ g.readdir("whatevers", function (er, files) {
+ if (er)
+ throw er
+ console.error(files)
+ t.same(files, [ "a", "b", "z" ])
+ t.end()
+ })
+})
diff --git a/deps/npm/node_modules/graceful-fs/test/ulimit.js b/deps/npm/node_modules/graceful-fs/test/ulimit.js
deleted file mode 100644
index 8d0882d0c..000000000
--- a/deps/npm/node_modules/graceful-fs/test/ulimit.js
+++ /dev/null
@@ -1,158 +0,0 @@
-var test = require('tap').test
-
-// simulated ulimit
-// this is like graceful-fs, but in reverse
-var fs_ = require('fs')
-var fs = require('../graceful-fs.js')
-var files = fs.readdirSync(__dirname)
-
-// Ok, no more actual file reading!
-
-var fds = 0
-var nextFd = 60
-var limit = 8
-fs_.open = function (path, flags, mode, cb) {
- process.nextTick(function() {
- ++fds
- if (fds >= limit) {
- --fds
- var er = new Error('EMFILE Curses!')
- er.code = 'EMFILE'
- er.path = path
- return cb(er)
- } else {
- cb(null, nextFd++)
- }
- })
-}
-
-fs_.openSync = function (path, flags, mode) {
- if (fds >= limit) {
- var er = new Error('EMFILE Curses!')
- er.code = 'EMFILE'
- er.path = path
- throw er
- } else {
- ++fds
- return nextFd++
- }
-}
-
-fs_.close = function (fd, cb) {
- process.nextTick(function () {
- --fds
- cb()
- })
-}
-
-fs_.closeSync = function (fd) {
- --fds
-}
-
-fs_.readdir = function (path, cb) {
- process.nextTick(function() {
- if (fds >= limit) {
- var er = new Error('EMFILE Curses!')
- er.code = 'EMFILE'
- er.path = path
- return cb(er)
- } else {
- ++fds
- process.nextTick(function () {
- --fds
- cb(null, [__filename, "some-other-file.js"])
- })
- }
- })
-}
-
-fs_.readdirSync = function (path) {
- if (fds >= limit) {
- var er = new Error('EMFILE Curses!')
- er.code = 'EMFILE'
- er.path = path
- throw er
- } else {
- return [__filename, "some-other-file.js"]
- }
-}
-
-
-test('open emfile autoreduce', function (t) {
- fs.MIN_MAX_OPEN = 4
- t.equal(fs.MAX_OPEN, 1024)
-
- var max = 12
- for (var i = 0; i < max; i++) {
- fs.open(__filename, 'r', next(i))
- }
-
- var phase = 0
-
- var expect =
- [ [ 0, 60, null, 1024, 4, 12, 1 ],
- [ 1, 61, null, 1024, 4, 12, 2 ],
- [ 2, 62, null, 1024, 4, 12, 3 ],
- [ 3, 63, null, 1024, 4, 12, 4 ],
- [ 4, 64, null, 1024, 4, 12, 5 ],
- [ 5, 65, null, 1024, 4, 12, 6 ],
- [ 6, 66, null, 1024, 4, 12, 7 ],
- [ 7, 67, null, 6, 4, 5, 1 ],
- [ 8, 68, null, 6, 4, 5, 2 ],
- [ 9, 69, null, 6, 4, 5, 3 ],
- [ 10, 70, null, 6, 4, 5, 4 ],
- [ 11, 71, null, 6, 4, 5, 5 ] ]
-
- var actual = []
-
- function next (i) { return function (er, fd) {
- if (er)
- throw er
- actual.push([i, fd, er, fs.MAX_OPEN, fs.MIN_MAX_OPEN, fs._curOpen, fds])
-
- if (i === max - 1) {
- t.same(actual, expect)
- t.ok(fs.MAX_OPEN < limit)
- t.end()
- }
-
- fs.close(fd)
- } }
-})
-
-test('readdir emfile autoreduce', function (t) {
- fs.MAX_OPEN = 1024
- var max = 12
- for (var i = 0; i < max; i ++) {
- fs.readdir(__dirname, next(i))
- }
-
- var expect =
- [ [0,[__filename,"some-other-file.js"],null,7,4,7,7],
- [1,[__filename,"some-other-file.js"],null,7,4,7,6],
- [2,[__filename,"some-other-file.js"],null,7,4,7,5],
- [3,[__filename,"some-other-file.js"],null,7,4,7,4],
- [4,[__filename,"some-other-file.js"],null,7,4,7,3],
- [5,[__filename,"some-other-file.js"],null,7,4,6,2],
- [6,[__filename,"some-other-file.js"],null,7,4,5,1],
- [7,[__filename,"some-other-file.js"],null,7,4,4,0],
- [8,[__filename,"some-other-file.js"],null,7,4,3,3],
- [9,[__filename,"some-other-file.js"],null,7,4,2,2],
- [10,[__filename,"some-other-file.js"],null,7,4,1,1],
- [11,[__filename,"some-other-file.js"],null,7,4,0,0] ]
-
- var actual = []
-
- function next (i) { return function (er, files) {
- if (er)
- throw er
- var line = [i, files, er, fs.MAX_OPEN, fs.MIN_MAX_OPEN, fs._curOpen, fds ]
- actual.push(line)
-
- if (i === max - 1) {
- t.ok(fs.MAX_OPEN < limit)
- t.same(actual, expect)
- t.end()
- }
- } }
-})
diff --git a/deps/npm/node_modules/inherits/LICENSE b/deps/npm/node_modules/inherits/LICENSE
index 5a8e33254..dea3013d6 100644
--- a/deps/npm/node_modules/inherits/LICENSE
+++ b/deps/npm/node_modules/inherits/LICENSE
@@ -1,14 +1,16 @@
- DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
- Version 2, December 2004
+The ISC License
- Copyright (C) 2004 Sam Hocevar <sam@hocevar.net>
+Copyright (c) Isaac Z. Schlueter
- Everyone is permitted to copy and distribute verbatim or modified
- copies of this license document, and changing it is allowed as long
- as the name is changed.
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
- DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
- TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
- 0. You just DO WHAT THE FUCK YOU WANT TO.
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
+REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
+FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
+INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
+OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+PERFORMANCE OF THIS SOFTWARE.
diff --git a/deps/npm/node_modules/inherits/README.md b/deps/npm/node_modules/inherits/README.md
index b2beaed93..b1c566585 100644
--- a/deps/npm/node_modules/inherits/README.md
+++ b/deps/npm/node_modules/inherits/README.md
@@ -1,51 +1,42 @@
-A dead simple way to do inheritance in JS.
-
- var inherits = require("inherits")
-
- function Animal () {
- this.alive = true
- }
- Animal.prototype.say = function (what) {
- console.log(what)
- }
-
- inherits(Dog, Animal)
- function Dog () {
- Dog.super.apply(this)
- }
- Dog.prototype.sniff = function () {
- this.say("sniff sniff")
- }
- Dog.prototype.bark = function () {
- this.say("woof woof")
- }
-
- inherits(Chihuahua, Dog)
- function Chihuahua () {
- Chihuahua.super.apply(this)
- }
- Chihuahua.prototype.bark = function () {
- this.say("yip yip")
- }
-
- // also works
- function Cat () {
- Cat.super.apply(this)
- }
- Cat.prototype.hiss = function () {
- this.say("CHSKKSS!!")
- }
- inherits(Cat, Animal, {
- meow: function () { this.say("miao miao") }
- })
- Cat.prototype.purr = function () {
- this.say("purr purr")
- }
-
-
- var c = new Chihuahua
- assert(c instanceof Chihuahua)
- assert(c instanceof Dog)
- assert(c instanceof Animal)
-
-The actual function is laughably small. 10-lines small.
+Browser-friendly inheritance fully compatible with standard node.js
+[inherits](http://nodejs.org/api/util.html#util_util_inherits_constructor_superconstructor).
+
+This package exports standard `inherits` from node.js `util` module in
+node environment, but also provides alternative browser-friendly
+implementation through [browser
+field](https://gist.github.com/shtylman/4339901). Alternative
+implementation is a literal copy of standard one located in standalone
+module to avoid requiring of `util`. It also has a shim for old
+browsers with no `Object.create` support.
+
+While keeping you sure you are using standard `inherits`
+implementation in node.js environment, it allows bundlers such as
+[browserify](https://github.com/substack/node-browserify) to not
+include full `util` package to your client code if all you need is
+just `inherits` function. It worth, because browser shim for `util`
+package is large and `inherits` is often the single function you need
+from it.
+
+It's recommended to use this package instead of
+`require('util').inherits` for any code that has chances to be used
+not only in node.js but in browser too.
+
+## usage
+
+```js
+var inherits = require('inherits');
+// then use exactly as the standard one
+```
+
+## note on version ~1.0
+
+Version ~1.0 had completely different motivation and is not compatible
+neither with 2.0 nor with standard node.js `inherits`.
+
+If you are using version ~1.0 and planning to switch to ~2.0, be
+careful:
+
+* new version uses `super_` instead of `super` for referencing
+ superclass
+* new version overwrites current prototype while old one preserves any
+ existing fields on it
diff --git a/deps/npm/node_modules/inherits/inherits-old.js b/deps/npm/node_modules/inherits/inherits-old.js
deleted file mode 100644
index ef39252dd..000000000
--- a/deps/npm/node_modules/inherits/inherits-old.js
+++ /dev/null
@@ -1,40 +0,0 @@
-// This is a less perfect implementation of the inherits function,
-// designed to work in cases where ES5 is not available.
-//
-// Note that it is a bit longer, and doesn't properly deal with
-// getter/setters or property descriptor flags (enumerable, etc.)
-
-module.exports = inheritsOld
-
-function inheritsOld (c, p, proto) {
- function F () { this.constructor = c }
- F.prototype = p.prototype
- var e = {}
- for (var i in c.prototype) if (c.prototype.hasOwnProperty(i)) {
- e[i] = c.prototype[i]
- }
- if (proto) for (var i in proto) if (proto.hasOwnProperty(i)) {
- e[i] = proto[i]
- }
- c.prototype = new F()
- for (var i in e) if (e.hasOwnProperty(i)) {
- c.prototype[i] = e[i]
- }
- c.super = p
-}
-
-// function Child () {
-// Child.super.call(this)
-// console.error([this
-// ,this.constructor
-// ,this.constructor === Child
-// ,this.constructor.super === Parent
-// ,Object.getPrototypeOf(this) === Child.prototype
-// ,Object.getPrototypeOf(Object.getPrototypeOf(this))
-// === Parent.prototype
-// ,this instanceof Child
-// ,this instanceof Parent])
-// }
-// function Parent () {}
-// inheritsOld(Child, Parent)
-// new Child
diff --git a/deps/npm/node_modules/inherits/inherits.js b/deps/npm/node_modules/inherits/inherits.js
index 061b39620..29f5e24f5 100644
--- a/deps/npm/node_modules/inherits/inherits.js
+++ b/deps/npm/node_modules/inherits/inherits.js
@@ -1,29 +1 @@
-module.exports = inherits
-
-function inherits (c, p, proto) {
- proto = proto || {}
- var e = {}
- ;[c.prototype, proto].forEach(function (s) {
- Object.getOwnPropertyNames(s).forEach(function (k) {
- e[k] = Object.getOwnPropertyDescriptor(s, k)
- })
- })
- c.prototype = Object.create(p.prototype, e)
- c.super = p
-}
-
-//function Child () {
-// Child.super.call(this)
-// console.error([this
-// ,this.constructor
-// ,this.constructor === Child
-// ,this.constructor.super === Parent
-// ,Object.getPrototypeOf(this) === Child.prototype
-// ,Object.getPrototypeOf(Object.getPrototypeOf(this))
-// === Parent.prototype
-// ,this instanceof Child
-// ,this instanceof Parent])
-//}
-//function Parent () {}
-//inherits(Child, Parent)
-//new Child
+module.exports = require('util').inherits
diff --git a/deps/npm/node_modules/inherits/inherits_browser.js b/deps/npm/node_modules/inherits/inherits_browser.js
new file mode 100644
index 000000000..c1e78a75e
--- /dev/null
+++ b/deps/npm/node_modules/inherits/inherits_browser.js
@@ -0,0 +1,23 @@
+if (typeof Object.create === 'function') {
+ // implementation from standard node.js 'util' module
+ module.exports = function inherits(ctor, superCtor) {
+ ctor.super_ = superCtor
+ ctor.prototype = Object.create(superCtor.prototype, {
+ constructor: {
+ value: ctor,
+ enumerable: false,
+ writable: true,
+ configurable: true
+ }
+ });
+ };
+} else {
+ // old school shim for old browsers
+ module.exports = function inherits(ctor, superCtor) {
+ ctor.super_ = superCtor
+ var TempCtor = function () {}
+ TempCtor.prototype = superCtor.prototype
+ ctor.prototype = new TempCtor()
+ ctor.prototype.constructor = ctor
+ }
+}
diff --git a/deps/npm/node_modules/inherits/package.json b/deps/npm/node_modules/inherits/package.json
index b5499c1ec..3b4843a6d 100644
--- a/deps/npm/node_modules/inherits/package.json
+++ b/deps/npm/node_modules/inherits/package.json
@@ -1,44 +1,32 @@
{
"name": "inherits",
- "description": "A tiny simple way to do classic inheritance in js",
- "version": "1.0.0",
+ "description": "Browser-friendly inheritance fully compatible with standard node.js inherits()",
+ "version": "2.0.1",
"keywords": [
"inheritance",
"class",
"klass",
"oop",
- "object-oriented"
+ "object-oriented",
+ "inherits",
+ "browser",
+ "browserify"
],
"main": "./inherits.js",
+ "browser": "./inherits_browser.js",
"repository": {
"type": "git",
- "url": "git://github.com/isaacs/inherits.git"
+ "url": "git://github.com/isaacs/inherits"
},
- "license": {
- "type": "WTFPL2"
+ "license": "ISC",
+ "scripts": {
+ "test": "node test"
},
- "author": {
- "name": "Isaac Z. Schlueter",
- "email": "i@izs.me",
- "url": "http://blog.izs.me/"
+ "readme": "Browser-friendly inheritance fully compatible with standard node.js\n[inherits](http://nodejs.org/api/util.html#util_util_inherits_constructor_superconstructor).\n\nThis package exports standard `inherits` from node.js `util` module in\nnode environment, but also provides alternative browser-friendly\nimplementation through [browser\nfield](https://gist.github.com/shtylman/4339901). Alternative\nimplementation is a literal copy of standard one located in standalone\nmodule to avoid requiring of `util`. It also has a shim for old\nbrowsers with no `Object.create` support.\n\nWhile keeping you sure you are using standard `inherits`\nimplementation in node.js environment, it allows bundlers such as\n[browserify](https://github.com/substack/node-browserify) to not\ninclude full `util` package to your client code if all you need is\njust `inherits` function. It worth, because browser shim for `util`\npackage is large and `inherits` is often the single function you need\nfrom it.\n\nIt's recommended to use this package instead of\n`require('util').inherits` for any code that has chances to be used\nnot only in node.js but in browser too.\n\n## usage\n\n```js\nvar inherits = require('inherits');\n// then use exactly as the standard one\n```\n\n## note on version ~1.0\n\nVersion ~1.0 had completely different motivation and is not compatible\nneither with 2.0 nor with standard node.js `inherits`.\n\nIf you are using version ~1.0 and planning to switch to ~2.0, be\ncareful:\n\n* new version uses `super_` instead of `super` for referencing\n superclass\n* new version overwrites current prototype while old one preserves any\n existing fields on it\n",
+ "readmeFilename": "README.md",
+ "bugs": {
+ "url": "https://github.com/isaacs/inherits/issues"
},
- "_npmUser": {
- "name": "isaacs",
- "email": "i@izs.me"
- },
- "_id": "inherits@1.0.0",
- "dependencies": {},
- "devDependencies": {},
- "optionalDependencies": {},
- "engines": {
- "node": "*"
- },
- "_engineSupported": true,
- "_npmVersion": "1.1.10",
- "_nodeVersion": "v0.7.7-pre",
- "_defaultsLoaded": true,
- "dist": {
- "shasum": "12dbc03c9f7c203289234b214a7d05a311d71450"
- },
- "_from": "git://github.com/isaacs/inherits"
+ "_id": "inherits@2.0.1",
+ "_from": "inherits@"
}
diff --git a/deps/npm/node_modules/inherits/test.js b/deps/npm/node_modules/inherits/test.js
new file mode 100644
index 000000000..fc53012d3
--- /dev/null
+++ b/deps/npm/node_modules/inherits/test.js
@@ -0,0 +1,25 @@
+var inherits = require('./inherits.js')
+var assert = require('assert')
+
+function test(c) {
+ assert(c.constructor === Child)
+ assert(c.constructor.super_ === Parent)
+ assert(Object.getPrototypeOf(c) === Child.prototype)
+ assert(Object.getPrototypeOf(Object.getPrototypeOf(c)) === Parent.prototype)
+ assert(c instanceof Child)
+ assert(c instanceof Parent)
+}
+
+function Child() {
+ Parent.call(this)
+ test(this)
+}
+
+function Parent() {}
+
+inherits(Child, Parent)
+
+var c = new Child
+test(c)
+
+console.log('ok')
diff --git a/deps/npm/node_modules/init-package-json/LICENSE b/deps/npm/node_modules/init-package-json/LICENSE
new file mode 100644
index 000000000..05eeeb88c
--- /dev/null
+++ b/deps/npm/node_modules/init-package-json/LICENSE
@@ -0,0 +1,15 @@
+The ISC License
+
+Copyright (c) Isaac Z. Schlueter
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
+IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
diff --git a/deps/npm/node_modules/init-package-json/default-input.js b/deps/npm/node_modules/init-package-json/default-input.js
index d501b0644..4390e708b 100644
--- a/deps/npm/node_modules/init-package-json/default-input.js
+++ b/deps/npm/node_modules/init-package-json/default-input.js
@@ -28,7 +28,7 @@ function readDeps (test) { return function (cb) {
try { p = JSON.parse(p) }
catch (e) { return next() }
if (!p.version) return next()
- deps[d] = '~' + p.version
+ deps[d] = config.get('save-prefix') + p.version
return next()
})
})
@@ -176,4 +176,6 @@ if (!package.author) {
: prompt('author')
}
-exports.license = prompt('license', 'BSD')
+exports.license = prompt('license', package.license ||
+ config.get('init.license') ||
+ 'ISC')
diff --git a/deps/npm/node_modules/init-package-json/example.js b/deps/npm/node_modules/init-package-json/example.js
deleted file mode 100644
index ebab729ca..000000000
--- a/deps/npm/node_modules/init-package-json/example.js
+++ /dev/null
@@ -1,14 +0,0 @@
-var init = require('./init-package-json.js')
-var path = require('path')
-var initFile = path.resolve(process.env.HOME, '.npm-init')
-var dir = process.cwd()
-
-var npm = require('npm')
-npm.load(function (er, npm) {
- if (er) throw er
- init(dir, initFile, npm.config.get(), function (er, data) {
- if (er) throw er
- console.log('written successfully')
- })
-})
-
diff --git a/deps/npm/node_modules/init-package-json/example/example-basic.js b/deps/npm/node_modules/init-package-json/example/example-basic.js
new file mode 100644
index 000000000..29b0c818d
--- /dev/null
+++ b/deps/npm/node_modules/init-package-json/example/example-basic.js
@@ -0,0 +1,8 @@
+var init = require('../init-package-json.js')
+var path = require('path')
+var dir = process.cwd()
+var initFile = require.resolve('./init/basic-init.js')
+
+init(dir, initFile, function (err, data) {
+ if (!err) console.log('written successfully')
+})
diff --git a/deps/npm/node_modules/init-package-json/example/example-default.js b/deps/npm/node_modules/init-package-json/example/example-default.js
new file mode 100644
index 000000000..f3aea518c
--- /dev/null
+++ b/deps/npm/node_modules/init-package-json/example/example-default.js
@@ -0,0 +1,7 @@
+var init = require('../init-package-json.js')
+var path = require('path')
+var dir = process.cwd()
+
+init(dir, 'file that does not exist', function (err, data) {
+ if (!err) console.log('written successfully')
+})
diff --git a/deps/npm/node_modules/init-package-json/example/example-npm.js b/deps/npm/node_modules/init-package-json/example/example-npm.js
new file mode 100644
index 000000000..b394eeabc
--- /dev/null
+++ b/deps/npm/node_modules/init-package-json/example/example-npm.js
@@ -0,0 +1,13 @@
+var init = require('../init-package-json.js')
+var path = require('path')
+var dir = process.cwd()
+var npm = require('npm')
+
+npm.load(function (er, npm) {
+ if (er) throw er
+ init(dir, npm.config.get('init-module'), npm.config, function (er, data) {
+ if (er) throw er
+ console.log('written successfully')
+ })
+})
+
diff --git a/deps/npm/node_modules/init-package-json/example/init/basic-init.js b/deps/npm/node_modules/init-package-json/example/init/basic-init.js
new file mode 100644
index 000000000..c8615cc10
--- /dev/null
+++ b/deps/npm/node_modules/init-package-json/example/init/basic-init.js
@@ -0,0 +1 @@
+exports.flavor = prompt("what's your favorite flavor of ice cream buddy?", "I LIKE THEM ALL") \ No newline at end of file
diff --git a/deps/npm/node_modules/init-package-json/init-package-json.js b/deps/npm/node_modules/init-package-json/init-package-json.js
index dafc4d324..2600e77b0 100644
--- a/deps/npm/node_modules/init-package-json/init-package-json.js
+++ b/deps/npm/node_modules/init-package-json/init-package-json.js
@@ -78,8 +78,18 @@ function init (dir, input, config, cb) {
pkg = unParsePeople(pkg)
// no need for the readme now.
delete pkg.readme
+ delete pkg.readmeFilename
+
// really don't want to have this lying around in the file
delete pkg._id
+
+ // ditto
+ delete pkg.gitHead
+
+ // if the repo is empty, remove it.
+ if (!pkg.repository)
+ delete pkg.repository
+
var d = JSON.stringify(pkg, null, 2) + '\n'
console.log('About to write to %s:\n\n%s\n', package, d)
read({prompt:'Is this ok? ', default: 'yes'}, function (er, ok) {
diff --git a/deps/npm/node_modules/init-package-json/node_modules/promzard/LICENSE b/deps/npm/node_modules/init-package-json/node_modules/promzard/LICENSE
new file mode 100644
index 000000000..05eeeb88c
--- /dev/null
+++ b/deps/npm/node_modules/init-package-json/node_modules/promzard/LICENSE
@@ -0,0 +1,15 @@
+The ISC License
+
+Copyright (c) Isaac Z. Schlueter
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
+IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
diff --git a/deps/npm/node_modules/init-package-json/node_modules/promzard/package.json b/deps/npm/node_modules/init-package-json/node_modules/promzard/package.json
index 3cf38bf80..1d713bc69 100644
--- a/deps/npm/node_modules/init-package-json/node_modules/promzard/package.json
+++ b/deps/npm/node_modules/init-package-json/node_modules/promzard/package.json
@@ -6,7 +6,7 @@
},
"name": "promzard",
"description": "prompting wizardly",
- "version": "0.2.0",
+ "version": "0.2.1",
"repository": {
"url": "git://github.com/isaacs/promzard"
},
@@ -20,11 +20,15 @@
"scripts": {
"test": "tap test/*.js"
},
+ "license": "ISC",
"readme": "# promzard\n\nA prompting wizard for building files from specialized PromZard modules.\nUsed by `npm init`.\n\nA reimplementation of @SubStack's\n[prompter](https://github.com/substack/node-prompter), which does not\nuse AST traversal.\n\nFrom another point of view, it's a reimplementation of\n[@Marak](https://github.com/marak)'s\n[wizard](https://github.com/Marak/wizard) which doesn't use schemas.\n\nThe goal is a nice drop-in enhancement for `npm init`.\n\n## Usage\n\n```javascript\nvar promzard = require('promzard')\npromzard(inputFile, optionalContextAdditions, function (er, data) {\n // .. you know what you doing ..\n})\n```\n\nIn the `inputFile` you can have something like this:\n\n```javascript\nvar fs = require('fs')\nmodule.exports = {\n \"greeting\": prompt(\"Who shall you greet?\", \"world\", function (who) {\n return \"Hello, \" + who\n }),\n \"filename\": __filename,\n \"directory\": function (cb) {\n fs.readdir(__dirname, cb)\n }\n}\n```\n\nWhen run, promzard will display the prompts and resolve the async\nfunctions in order, and then either give you an error, or the resolved\ndata, ready to be dropped into a JSON file or some other place.\n\n\n### promzard(inputFile, ctx, callback)\n\nThe inputFile is just a node module. You can require() things, set\nmodule.exports, etc. Whatever that module exports is the result, and it\nis walked over to call any functions as described below.\n\nThe only caveat is that you must give PromZard the full absolute path\nto the module (you can get this via Node's `require.resolve`.) Also,\nthe `prompt` function is injected into the context object, so watch out.\n\nWhatever you put in that `ctx` will of course also be available in the\nmodule. You can get quite fancy with this, passing in existing configs\nand so on.\n\n### Class: promzard.PromZard(file, ctx)\n\nJust like the `promzard` function, but the EventEmitter that makes it\nall happen. Emits either a `data` event with the data, or a `error`\nevent if it blows up.\n\nIf `error` is emitted, then `data` never will be.\n\n### prompt(...)\n\nIn the promzard input module, you can call the `prompt` function.\nThis prompts the user to input some data. The arguments are interpreted\nbased on type:\n\n1. `string` The first string encountered is the prompt. The second is\n the default value.\n2. `function` A transformer function which receives the data and returns\n something else. More than meets the eye.\n3. `object` The `prompt` member is the prompt, the `default` member is\n the default value, and the `transform` is the transformer.\n\nWhatever the final value is, that's what will be put on the resulting\nobject.\n\n### Functions\n\nIf there are any functions on the promzard input module's exports, then\npromzard will call each of them with a callback. This way, your module\ncan do asynchronous actions if necessary to validate or ascertain\nwhatever needs verification.\n\nThe functions are called in the context of the ctx object, and are given\na single argument, which is a callback that should be called with either\nan error, or the result to assign to that spot.\n\nIn the async function, you can also call prompt() and return the result\nof the prompt in the callback.\n\nFor example, this works fine in a promzard module:\n\n```\nexports.asyncPrompt = function (cb) {\n fs.stat(someFile, function (er, st) {\n // if there's an error, no prompt, just error\n // otherwise prompt and use the actual file size as the default\n cb(er, prompt('file size', st.size))\n })\n}\n```\n\nYou can also return other async functions in the async function\ncallback. Though that's a bit silly, it could be a handy way to reuse\nfunctionality in some cases.\n\n### Sync vs Async\n\nThe `prompt()` function is not synchronous, though it appears that way.\nIt just returns a token that is swapped out when the data object is\nwalked over asynchronously later, and returns a token.\n\nFor that reason, prompt() calls whose results don't end up on the data\nobject are never shown to the user. For example, this will only prompt\nonce:\n\n```\nexports.promptThreeTimes = prompt('prompt me once', 'shame on you')\nexports.promptThreeTimes = prompt('prompt me twice', 'um....')\nexports.promptThreeTimes = prompt('you cant prompt me again')\n```\n\n### Isn't this exactly the sort of 'looks sync' that you said was bad about other libraries?\n\nYeah, sorta. I wouldn't use promzard for anything more complicated than\na wizard that spits out prompts to set up a config file or something.\nMaybe there are other use cases I haven't considered.\n",
"readmeFilename": "README.md",
"bugs": {
"url": "https://github.com/isaacs/promzard/issues"
},
- "_id": "promzard@0.2.0",
- "_from": "promzard@~0.2.0"
+ "homepage": "https://github.com/isaacs/promzard",
+ "_id": "promzard@0.2.1",
+ "_shasum": "c4c7cbe5182465c13b43540be9daf47098b4e75b",
+ "_from": "promzard@~0.2.0",
+ "_resolved": "https://registry.npmjs.org/promzard/-/promzard-0.2.1.tgz"
}
diff --git a/deps/npm/node_modules/init-package-json/package.json b/deps/npm/node_modules/init-package-json/package.json
index c0301ff02..9ca7721cd 100644
--- a/deps/npm/node_modules/init-package-json/package.json
+++ b/deps/npm/node_modules/init-package-json/package.json
@@ -1,6 +1,6 @@
{
"name": "init-package-json",
- "version": "0.0.8",
+ "version": "0.0.16",
"main": "init-package-json.js",
"scripts": {
"test": "tap test/*.js"
@@ -14,13 +14,14 @@
"email": "i@izs.me",
"url": "http://blog.izs.me/"
},
- "license": "BSD",
+ "license": "ISC",
"description": "A node module to get your node module started",
"dependencies": {
"promzard": "~0.2.0",
"read": "~1.0.1",
- "read-package-json": "0",
- "semver": "1.x"
+ "read-package-json": "1",
+ "semver": "2.x",
+ "glob": "~3.2.7"
},
"devDependencies": {
"tap": "~0.2.5",
@@ -41,6 +42,8 @@
"bugs": {
"url": "https://github.com/isaacs/init-package-json/issues"
},
- "_id": "init-package-json@0.0.8",
+ "homepage": "https://github.com/isaacs/init-package-json",
+ "_id": "init-package-json@0.0.16",
+ "_shasum": "f7bb96fcb0a2c8061d15a2c3180323b17a65aa16",
"_from": "init-package-json@latest"
}
diff --git a/deps/npm/node_modules/lockfile/README.md b/deps/npm/node_modules/lockfile/README.md
index 18ffd5041..59e149b3f 100644
--- a/deps/npm/node_modules/lockfile/README.md
+++ b/deps/npm/node_modules/lockfile/README.md
@@ -9,10 +9,10 @@ wait patiently for others.
var lockFile = require('lockfile')
// opts is optional, and defaults to {}
-lockFile.lock('some-file.lock', opts, function (er, fd) {
+lockFile.lock('some-file.lock', opts, function (er) {
// if the er happens, then it failed to acquire a lock.
- // if there was not an error, then the fd is opened in
- // wx mode. If you want to write something to it, go ahead.
+ // if there was not an error, then the file was created,
+ // and won't be deleted until we unlock it.
// do my stuff, free of interruptions
// then, some time later, do:
@@ -33,7 +33,7 @@ effort is made to not be a litterbug.
### lockFile.lock(path, [opts], cb)
-Acquire a file lock on the specified path. Returns the FD.
+Acquire a file lock on the specified path
### lockFile.lockSync(path, [opts])
diff --git a/deps/npm/node_modules/lockfile/lockfile.js b/deps/npm/node_modules/lockfile/lockfile.js
index 87bcaf6ae..b82f1f0d6 100644
--- a/deps/npm/node_modules/lockfile/lockfile.js
+++ b/deps/npm/node_modules/lockfile/lockfile.js
@@ -6,6 +6,12 @@ if (process.version.match(/^v0\.[0-6]/)) {
wx = c.O_TRUNC | c.O_CREAT | c.O_WRONLY | c.O_EXCL
}
+var os = require('os')
+var filetime = 'ctime'
+if (os.platform() == "win32") {
+ filetime = 'mtime'
+}
+
var debug
var util = require('util')
if (util.debuglog)
@@ -32,7 +38,7 @@ process.on('exit', function () {
// XXX https://github.com/joyent/node/issues/3555
// Remove when node 0.8 is deprecated.
-if (/^v0\.[0-8]/.test(process.version)) {
+if (/^v0\.[0-8]\./.test(process.version)) {
debug('uncaughtException, version = %s', process.version)
process.on('uncaughtException', function H (er) {
debug('uncaughtException')
@@ -51,22 +57,13 @@ if (/^v0\.[0-8]/.test(process.version)) {
exports.unlock = function (path, cb) {
debug('unlock', path)
// best-effort. unlocking an already-unlocked lock is a noop
- if (hasOwnProperty(locks, path))
- fs.close(locks[path], unlink)
- else
- unlink()
-
- function unlink () {
- debug('unlink', path)
- delete locks[path]
- fs.unlink(path, function (unlinkEr) { cb() })
- }
+ delete locks[path]
+ fs.unlink(path, function (unlinkEr) { cb() })
}
exports.unlockSync = function (path) {
debug('unlockSync', path)
// best-effort. unlocking an already-unlocked lock is a noop
- try { fs.closeSync(locks[path]) } catch (er) {}
try { fs.unlinkSync(path) } catch (er) {}
delete locks[path]
}
@@ -95,7 +92,7 @@ exports.check = function (path, opts, cb) {
})
fs.close(fd, function (er) {
- var age = Date.now() - st.ctime.getTime()
+ var age = Date.now() - st[filetime].getTime()
return cb(er, age <= opts.stale)
})
})
@@ -117,7 +114,7 @@ exports.checkSync = function (path, opts) {
}
if (!opts.stale) {
- fs.closeSync(fd)
+ try { fs.closeSync(fd) } catch (er) {}
return true
}
@@ -128,7 +125,7 @@ exports.checkSync = function (path, opts) {
} finally {
fs.closeSync(fd)
}
- var age = Date.now() - st.ctime.getTime()
+ var age = Date.now() - st[filetime].getTime()
return (age <= opts.stale)
}
}
@@ -160,7 +157,9 @@ exports.lock = function (path, opts, cb) {
if (!er) {
debug('locked', path, fd)
locks[path] = fd
- return cb(null, fd)
+ return fs.close(fd, function () {
+ return cb()
+ })
}
// something other than "currently locked"
@@ -180,7 +179,7 @@ exports.lock = function (path, opts, cb) {
return cb(statEr)
}
- var age = Date.now() - st.ctime.getTime()
+ var age = Date.now() - st[filetime].getTime()
if (age > opts.stale) {
debug('lock stale', path, opts_)
exports.unlock(path, function (er) {
@@ -229,14 +228,15 @@ exports.lockSync = function (path, opts) {
try {
var fd = fs.openSync(path, wx)
locks[path] = fd
+ try { fs.closeSync(fd) } catch (er) {}
debug('locked sync!', path, fd)
- return fd
+ return
} catch (er) {
if (er.code !== 'EEXIST') return retryThrow(path, opts, er)
if (opts.stale) {
var st = fs.statSync(path)
- var ct = st.ctime.getTime()
+ var ct = st[filetime].getTime()
if (!(ct % 1000) && (opts.stale % 1000)) {
// probably don't have subsecond resolution.
// round up the staleness indicator.
diff --git a/deps/npm/node_modules/lockfile/package.json b/deps/npm/node_modules/lockfile/package.json
index f8ee2d643..39d9a857c 100644
--- a/deps/npm/node_modules/lockfile/package.json
+++ b/deps/npm/node_modules/lockfile/package.json
@@ -1,6 +1,6 @@
{
"name": "lockfile",
- "version": "0.3.4",
+ "version": "0.4.2",
"main": "lockfile.js",
"directories": {
"test": "test"
@@ -31,15 +31,15 @@
},
"license": "BSD",
"description": "A very polite lock file utility, which endeavors to not litter, and to wait patiently for others.",
- "readme": "# lockfile\n\nA very polite lock file utility, which endeavors to not litter, and to\nwait patiently for others.\n\n## Usage\n\n```javascript\nvar lockFile = require('lockfile')\n\n// opts is optional, and defaults to {}\nlockFile.lock('some-file.lock', opts, function (er, fd) {\n // if the er happens, then it failed to acquire a lock.\n // if there was not an error, then the fd is opened in\n // wx mode. If you want to write something to it, go ahead.\n\n // do my stuff, free of interruptions\n // then, some time later, do:\n lockFile.unlock('some-file.lock', function (er) {\n // er means that an error happened, and is probably bad.\n })\n})\n```\n\n## Methods\n\nSync methods return the value/throw the error, others don't. Standard\nnode fs stuff.\n\nAll known locks are removed when the process exits. Of course, it's\npossible for certain types of failures to cause this to fail, but a best\neffort is made to not be a litterbug.\n\n### lockFile.lock(path, [opts], cb)\n\nAcquire a file lock on the specified path. Returns the FD.\n\n### lockFile.lockSync(path, [opts])\n\nAcquire a file lock on the specified path\n\n### lockFile.unlock(path, cb)\n\nClose and unlink the lockfile.\n\n### lockFile.unlockSync(path)\n\nClose and unlink the lockfile.\n\n### lockFile.check(path, [opts], cb)\n\nCheck if the lockfile is locked and not stale.\n\nReturns boolean.\n\n### lockFile.checkSync(path, [opts], cb)\n\nCheck if the lockfile is locked and not stale.\n\nCallback is called with `cb(error, isLocked)`.\n\n## Options\n\n### opts.wait\n\nA number of milliseconds to wait for locks to expire before giving up.\nOnly used by lockFile.lock. Relies on fs.watch. If the lock is not\ncleared by the time the wait expires, then it returns with the original\nerror.\n\n### opts.stale\n\nA number of milliseconds before locks are considered to have expired.\n\n### opts.retries\n\nUsed by lock and lockSync. Retry `n` number of times before giving up.\n\n### opts.retryWait\n\nUsed by lock. Wait `n` milliseconds before retrying.\n",
+ "readme": "# lockfile\n\nA very polite lock file utility, which endeavors to not litter, and to\nwait patiently for others.\n\n## Usage\n\n```javascript\nvar lockFile = require('lockfile')\n\n// opts is optional, and defaults to {}\nlockFile.lock('some-file.lock', opts, function (er) {\n // if the er happens, then it failed to acquire a lock.\n // if there was not an error, then the file was created,\n // and won't be deleted until we unlock it.\n\n // do my stuff, free of interruptions\n // then, some time later, do:\n lockFile.unlock('some-file.lock', function (er) {\n // er means that an error happened, and is probably bad.\n })\n})\n```\n\n## Methods\n\nSync methods return the value/throw the error, others don't. Standard\nnode fs stuff.\n\nAll known locks are removed when the process exits. Of course, it's\npossible for certain types of failures to cause this to fail, but a best\neffort is made to not be a litterbug.\n\n### lockFile.lock(path, [opts], cb)\n\nAcquire a file lock on the specified path\n\n### lockFile.lockSync(path, [opts])\n\nAcquire a file lock on the specified path\n\n### lockFile.unlock(path, cb)\n\nClose and unlink the lockfile.\n\n### lockFile.unlockSync(path)\n\nClose and unlink the lockfile.\n\n### lockFile.check(path, [opts], cb)\n\nCheck if the lockfile is locked and not stale.\n\nReturns boolean.\n\n### lockFile.checkSync(path, [opts], cb)\n\nCheck if the lockfile is locked and not stale.\n\nCallback is called with `cb(error, isLocked)`.\n\n## Options\n\n### opts.wait\n\nA number of milliseconds to wait for locks to expire before giving up.\nOnly used by lockFile.lock. Relies on fs.watch. If the lock is not\ncleared by the time the wait expires, then it returns with the original\nerror.\n\n### opts.stale\n\nA number of milliseconds before locks are considered to have expired.\n\n### opts.retries\n\nUsed by lock and lockSync. Retry `n` number of times before giving up.\n\n### opts.retryWait\n\nUsed by lock. Wait `n` milliseconds before retrying.\n",
"readmeFilename": "README.md",
"bugs": {
"url": "https://github.com/isaacs/lockfile/issues"
},
- "_id": "lockfile@0.3.4",
+ "_id": "lockfile@0.4.2",
"dist": {
- "shasum": "932b63546e4915f81b71924b36187740358eda03"
+ "shasum": "ab91f5d3745bc005ae4fa34d078910d1f2b9612d"
},
- "_from": "lockfile@0.3.4",
- "_resolved": "https://registry.npmjs.org/lockfile/-/lockfile-0.3.4.tgz"
+ "_from": "lockfile@0.4.2",
+ "_resolved": "https://registry.npmjs.org/lockfile/-/lockfile-0.4.2.tgz"
}
diff --git a/deps/npm/node_modules/lockfile/test/basic.js b/deps/npm/node_modules/lockfile/test/basic.js
index 41dbcdc32..23e824879 100644
--- a/deps/npm/node_modules/lockfile/test/basic.js
+++ b/deps/npm/node_modules/lockfile/test/basic.js
@@ -13,6 +13,7 @@ test('setup', function (t) {
try { lockFile.unlockSync('retry-lock') } catch (er) {}
try { lockFile.unlockSync('contentious-lock') } catch (er) {}
try { lockFile.unlockSync('stale-wait-lock') } catch (er) {}
+ try { lockFile.unlockSync('stale-windows-lock') } catch (er) {}
t.end()
})
@@ -158,35 +159,6 @@ test('staleness sync test', function (t) {
}
})
-test('watch test', function (t) {
- var opts = { wait: 100 }
- var fdx
- lockFile.lock('watch-lock', function (er, fd1) {
- if (er) throw er
- setTimeout(unlock, 10)
- function unlock () {
- console.error('unlocking it')
- lockFile.unlockSync('watch-lock')
- // open another file, so the fd gets reused
- // so we can know that it actually re-opened it fresh,
- // rather than just getting the same lock as before.
- fdx = fs.openSync('x', 'w')
- fdy = fs.openSync('x', 'w')
- }
-
- // should have gotten a new fd
- lockFile.lock('watch-lock', opts, function (er, fd2) {
- if (er) throw er
- t.notEqual(fd1, fd2)
- fs.closeSync(fdx)
- fs.closeSync(fdy)
- fs.unlinkSync('x')
- lockFile.unlockSync('watch-lock')
- t.end()
- })
- })
-})
-
test('retries', function (t) {
// next 5 opens will fail.
var opens = 5
@@ -202,10 +174,9 @@ test('retries', function (t) {
process.nextTick(cb.bind(null, er))
}
- lockFile.lock('retry-lock', { retries: opens }, function (er, fd) {
+ lockFile.lock('retry-lock', { retries: opens }, function (er) {
if (er) throw er
t.equal(opens, 0)
- t.ok(fd)
lockFile.unlockSync('retry-lock')
t.end()
})
@@ -227,10 +198,9 @@ test('retryWait', function (t) {
}
var opts = { retries: opens, retryWait: 100 }
- lockFile.lock('retry-lock', opts, function (er, fd) {
+ lockFile.lock('retry-lock', opts, function (er) {
if (er) throw er
t.equal(opens, 0)
- t.ok(fd)
lockFile.unlockSync('retry-lock')
t.end()
})
@@ -280,6 +250,30 @@ test('wait and stale together', function (t) {
})
})
+
+test('stale windows file tunneling test', function (t) {
+ // for windows only
+ // nt file system tunneling feature will make file creation time not updated
+ var opts = { stale: 1000 }
+ lockFile.lockSync('stale-windows-lock')
+ setTimeout(next, 2000)
+ function next () {
+ var locked
+ lockFile.unlockSync('stale-windows-lock')
+ lockFile.lockSync('stale-windows-lock', opts)
+ locked = lockFile.checkSync('stale-windows-lock', opts)
+ t.ok(locked, "should be locked and not stale")
+ lockFile.lock('stale-windows-lock', opts, function (er) {
+ if (!er)
+ t.fail('got second lock? impossible, windows file tunneling problem!')
+ else
+ t.pass('second lock failed, windows file tunneling problem fixed')
+ t.end()
+ })
+ }
+})
+
+
test('cleanup', function (t) {
try { lockFile.unlockSync('basic-lock') } catch (er) {}
try { lockFile.unlockSync('sync-lock') } catch (er) {}
@@ -289,6 +283,7 @@ test('cleanup', function (t) {
try { lockFile.unlockSync('retry-lock') } catch (er) {}
try { lockFile.unlockSync('contentious-lock') } catch (er) {}
try { lockFile.unlockSync('stale-wait-lock') } catch (er) {}
+ try { lockFile.unlockSync('stale-windows-lock') } catch (er) {}
t.end()
})
diff --git a/deps/npm/node_modules/lru-cache/AUTHORS b/deps/npm/node_modules/lru-cache/AUTHORS
deleted file mode 100644
index 016d7fbe1..000000000
--- a/deps/npm/node_modules/lru-cache/AUTHORS
+++ /dev/null
@@ -1,8 +0,0 @@
-# Authors, sorted by whether or not they are me
-Isaac Z. Schlueter <i@izs.me>
-Carlos Brito Lage <carlos@carloslage.net>
-Marko Mikulicic <marko.mikulicic@isti.cnr.it>
-Trent Mick <trentm@gmail.com>
-Kevin O'Hara <kevinohara80@gmail.com>
-Marco Rogers <marco.rogers@gmail.com>
-Jesse Dailey <jesse.dailey@gmail.com>
diff --git a/deps/npm/node_modules/lru-cache/CONTRIBUTORS b/deps/npm/node_modules/lru-cache/CONTRIBUTORS
new file mode 100644
index 000000000..4a0bc5033
--- /dev/null
+++ b/deps/npm/node_modules/lru-cache/CONTRIBUTORS
@@ -0,0 +1,14 @@
+# Authors, sorted by whether or not they are me
+Isaac Z. Schlueter <i@izs.me>
+Brian Cottingham <spiffytech@gmail.com>
+Carlos Brito Lage <carlos@carloslage.net>
+Jesse Dailey <jesse.dailey@gmail.com>
+Kevin O'Hara <kevinohara80@gmail.com>
+Marco Rogers <marco.rogers@gmail.com>
+Mark Cavage <mcavage@gmail.com>
+Marko Mikulicic <marko.mikulicic@isti.cnr.it>
+Nathan Rajlich <nathan@tootallnate.net>
+Satheesh Natesan <snateshan@myspace-inc.com>
+Trent Mick <trentm@gmail.com>
+ashleybrener <ashley@starlogik.com>
+n4kz <n4kz@n4kz.com>
diff --git a/deps/npm/node_modules/lru-cache/lib/lru-cache.js b/deps/npm/node_modules/lru-cache/lib/lru-cache.js
index 8c80853fd..d1d138172 100644
--- a/deps/npm/node_modules/lru-cache/lib/lru-cache.js
+++ b/deps/npm/node_modules/lru-cache/lib/lru-cache.js
@@ -14,244 +14,239 @@ function hOP (obj, key) {
function naiveLength () { return 1 }
function LRUCache (options) {
- if (!(this instanceof LRUCache)) {
+ if (!(this instanceof LRUCache))
return new LRUCache(options)
- }
-
- var max
- if (typeof options === 'number') {
- max = options
- options = { max: max }
- }
-
- if (!options) options = {}
-
- max = options.max
-
- var lengthCalculator = options.length || naiveLength
-
- if (typeof lengthCalculator !== "function") {
- lengthCalculator = naiveLength
- }
- if (!max || !(typeof max === "number") || max <= 0 ) {
- // a little bit silly. maybe this should throw?
- max = Infinity
- }
-
- var allowStale = options.stale || false
+ if (typeof options === 'number')
+ options = { max: options }
- var maxAge = options.maxAge || null
+ if (!options)
+ options = {}
- var dispose = options.dispose
+ this._max = options.max
+ // Kind of weird to have a default max of Infinity, but oh well.
+ if (!this._max || !(typeof this._max === "number") || this._max <= 0 )
+ this._max = Infinity
- var cache = Object.create(null) // hash of items by key
- , lruList = Object.create(null) // list of items in order of use recency
- , mru = 0 // most recently used
- , lru = 0 // least recently used
- , length = 0 // number of items in the list
- , itemCount = 0
+ this._lengthCalculator = options.length || naiveLength
+ if (typeof this._lengthCalculator !== "function")
+ this._lengthCalculator = naiveLength
+ this._allowStale = options.stale || false
+ this._maxAge = options.maxAge || null
+ this._dispose = options.dispose
+ this.reset()
+}
- // resize the cache when the max changes.
- Object.defineProperty(this, "max",
- { set : function (mL) {
- if (!mL || !(typeof mL === "number") || mL <= 0 ) mL = Infinity
- max = mL
- // if it gets above double max, trim right away.
- // otherwise, do it whenever it's convenient.
- if (length > max) trim()
- }
- , get : function () { return max }
- , enumerable : true
- })
-
- // resize the cache when the lengthCalculator changes.
- Object.defineProperty(this, "lengthCalculator",
- { set : function (lC) {
- if (typeof lC !== "function") {
- lengthCalculator = naiveLength
- length = itemCount
- for (var key in cache) {
- cache[key].length = 1
- }
- } else {
- lengthCalculator = lC
- length = 0
- for (var key in cache) {
- cache[key].length = lengthCalculator(cache[key].value)
- length += cache[key].length
- }
+// resize the cache when the max changes.
+Object.defineProperty(LRUCache.prototype, "max",
+ { set : function (mL) {
+ if (!mL || !(typeof mL === "number") || mL <= 0 ) mL = Infinity
+ this._max = mL
+ if (this._length > this._max) trim(this)
+ }
+ , get : function () { return this._max }
+ , enumerable : true
+ })
+
+// resize the cache when the lengthCalculator changes.
+Object.defineProperty(LRUCache.prototype, "lengthCalculator",
+ { set : function (lC) {
+ if (typeof lC !== "function") {
+ this._lengthCalculator = naiveLength
+ this._length = this._itemCount
+ for (var key in this._cache) {
+ this._cache[key].length = 1
+ }
+ } else {
+ this._lengthCalculator = lC
+ this._length = 0
+ for (var key in this._cache) {
+ this._cache[key].length = this._lengthCalculator(this._cache[key].value)
+ this._length += this._cache[key].length
}
-
- if (length > max) trim()
}
- , get : function () { return lengthCalculator }
- , enumerable : true
- })
-
- Object.defineProperty(this, "length",
- { get : function () { return length }
- , enumerable : true
- })
-
-
- Object.defineProperty(this, "itemCount",
- { get : function () { return itemCount }
- , enumerable : true
- })
-
- this.forEach = function (fn, thisp) {
- thisp = thisp || this
- var i = 0;
- for (var k = mru - 1; k >= 0 && i < itemCount; k--) if (lruList[k]) {
- i++
- var hit = lruList[k]
- fn.call(thisp, hit.value, hit.key, this)
- }
- }
- this.keys = function () {
- var keys = new Array(itemCount)
- var i = 0
- for (var k = mru - 1; k >= 0 && i < itemCount; k--) if (lruList[k]) {
- var hit = lruList[k]
- keys[i++] = hit.key
+ if (this._length > this._max) trim(this)
}
- return keys
- }
-
- this.values = function () {
- var values = new Array(itemCount)
- var i = 0
- for (var k = mru - 1; k >= 0 && i < itemCount; k--) if (lruList[k]) {
- var hit = lruList[k]
- values[i++] = hit.value
+ , get : function () { return this._lengthCalculator }
+ , enumerable : true
+ })
+
+Object.defineProperty(LRUCache.prototype, "length",
+ { get : function () { return this._length }
+ , enumerable : true
+ })
+
+
+Object.defineProperty(LRUCache.prototype, "itemCount",
+ { get : function () { return this._itemCount }
+ , enumerable : true
+ })
+
+LRUCache.prototype.forEach = function (fn, thisp) {
+ thisp = thisp || this
+ var i = 0;
+ for (var k = this._mru - 1; k >= 0 && i < this._itemCount; k--) if (this._lruList[k]) {
+ i++
+ var hit = this._lruList[k]
+ if (this._maxAge && (Date.now() - hit.now > this._maxAge)) {
+ del(this, hit)
+ if (!this._allowStale) hit = undefined
}
- return values
- }
-
- this.reset = function () {
- if (dispose) {
- for (var k in cache) {
- dispose(k, cache[k].value)
- }
+ if (hit) {
+ fn.call(thisp, hit.value, hit.key, this)
}
- cache = {}
- lruList = {}
- lru = 0
- mru = 0
- length = 0
- itemCount = 0
}
+}
- // Provided for debugging/dev purposes only. No promises whatsoever that
- // this API stays stable.
- this.dump = function () {
- return cache
+LRUCache.prototype.keys = function () {
+ var keys = new Array(this._itemCount)
+ var i = 0
+ for (var k = this._mru - 1; k >= 0 && i < this._itemCount; k--) if (this._lruList[k]) {
+ var hit = this._lruList[k]
+ keys[i++] = hit.key
}
+ return keys
+}
- this.dumpLru = function () {
- return lruList
+LRUCache.prototype.values = function () {
+ var values = new Array(this._itemCount)
+ var i = 0
+ for (var k = this._mru - 1; k >= 0 && i < this._itemCount; k--) if (this._lruList[k]) {
+ var hit = this._lruList[k]
+ values[i++] = hit.value
}
+ return values
+}
- this.set = function (key, value) {
- if (hOP(cache, key)) {
- // dispose of the old one before overwriting
- if (dispose) dispose(key, cache[key].value)
- if (maxAge) cache[key].now = Date.now()
- cache[key].value = value
- this.get(key)
- return true
+LRUCache.prototype.reset = function () {
+ if (this._dispose && this._cache) {
+ for (var k in this._cache) {
+ this._dispose(k, this._cache[k].value)
}
+ }
- var len = lengthCalculator(value)
- var age = maxAge ? Date.now() : 0
- var hit = new Entry(key, value, mru++, len, age)
+ this._cache = Object.create(null) // hash of items by key
+ this._lruList = Object.create(null) // list of items in order of use recency
+ this._mru = 0 // most recently used
+ this._lru = 0 // least recently used
+ this._length = 0 // number of items in the list
+ this._itemCount = 0
+}
- // oversized objects fall out of cache automatically.
- if (hit.length > max) {
- if (dispose) dispose(key, value)
- return false
- }
+// Provided for debugging/dev purposes only. No promises whatsoever that
+// this API stays stable.
+LRUCache.prototype.dump = function () {
+ return this._cache
+}
- length += hit.length
- lruList[hit.lu] = cache[key] = hit
- itemCount ++
+LRUCache.prototype.dumpLru = function () {
+ return this._lruList
+}
- if (length > max) trim()
+LRUCache.prototype.set = function (key, value) {
+ if (hOP(this._cache, key)) {
+ // dispose of the old one before overwriting
+ if (this._dispose) this._dispose(key, this._cache[key].value)
+ if (this._maxAge) this._cache[key].now = Date.now()
+ this._cache[key].value = value
+ this.get(key)
return true
}
- this.has = function (key) {
- if (!hOP(cache, key)) return false
- var hit = cache[key]
- if (maxAge && (Date.now() - hit.now > maxAge)) {
- return false
- }
- return true
- }
+ var len = this._lengthCalculator(value)
+ var age = this._maxAge ? Date.now() : 0
+ var hit = new Entry(key, value, this._mru++, len, age)
- this.get = function (key) {
- return get(key, true)
+ // oversized objects fall out of cache automatically.
+ if (hit.length > this._max) {
+ if (this._dispose) this._dispose(key, value)
+ return false
}
- this.peek = function (key) {
- return get(key, false)
- }
+ this._length += hit.length
+ this._lruList[hit.lu] = this._cache[key] = hit
+ this._itemCount ++
- function get (key, doUse) {
- var hit = cache[key]
- if (hit) {
- if (maxAge && (Date.now() - hit.now > maxAge)) {
- del(hit)
- if (!allowStale) hit = undefined
- } else {
- if (doUse) use(hit)
- }
- if (hit) hit = hit.value
- }
- return hit
- }
+ if (this._length > this._max) trim(this)
+ return true
+}
- function use (hit) {
- shiftLU(hit)
- hit.lu = mru ++
- lruList[hit.lu] = hit
+LRUCache.prototype.has = function (key) {
+ if (!hOP(this._cache, key)) return false
+ var hit = this._cache[key]
+ if (this._maxAge && (Date.now() - hit.now > this._maxAge)) {
+ return false
}
+ return true
+}
- this.del = function (key) {
- del(cache[key])
- }
+LRUCache.prototype.get = function (key) {
+ return get(this, key, true)
+}
- function trim () {
- while (lru < mru && length > max)
- del(lruList[lru])
- }
+LRUCache.prototype.peek = function (key) {
+ return get(this, key, false)
+}
- function shiftLU(hit) {
- delete lruList[ hit.lu ]
- while (lru < mru && !lruList[lru]) lru ++
- }
+LRUCache.prototype.pop = function () {
+ var hit = this._lruList[this._lru]
+ del(this, hit)
+ return hit || null
+}
- function del(hit) {
- if (hit) {
- if (dispose) dispose(hit.key, hit.value)
- length -= hit.length
- itemCount --
- delete cache[ hit.key ]
- shiftLU(hit)
+LRUCache.prototype.del = function (key) {
+ del(this, this._cache[key])
+}
+
+function get (self, key, doUse) {
+ var hit = self._cache[key]
+ if (hit) {
+ if (self._maxAge && (Date.now() - hit.now > self._maxAge)) {
+ del(self, hit)
+ if (!self._allowStale) hit = undefined
+ } else {
+ if (doUse) use(self, hit)
}
+ if (hit) hit = hit.value
+ }
+ return hit
+}
+
+function use (self, hit) {
+ shiftLU(self, hit)
+ hit.lu = self._mru ++
+ self._lruList[hit.lu] = hit
+}
+
+function trim (self) {
+ while (self._lru < self._mru && self._length > self._max)
+ del(self, self._lruList[self._lru])
+}
+
+function shiftLU (self, hit) {
+ delete self._lruList[ hit.lu ]
+ while (self._lru < self._mru && !self._lruList[self._lru]) self._lru ++
+}
+
+function del (self, hit) {
+ if (hit) {
+ if (self._dispose) self._dispose(hit.key, hit.value)
+ self._length -= hit.length
+ self._itemCount --
+ delete self._cache[ hit.key ]
+ shiftLU(self, hit)
}
}
// classy, since V8 prefers predictable objects.
-function Entry (key, value, mru, len, age) {
+function Entry (key, value, lu, length, now) {
this.key = key
this.value = value
- this.lu = mru
- this.length = len
- this.now = age
+ this.lu = lu
+ this.length = length
+ this.now = now
}
})()
diff --git a/deps/npm/node_modules/lru-cache/package.json b/deps/npm/node_modules/lru-cache/package.json
index d5a4e8c6d..d3fbddbdf 100644
--- a/deps/npm/node_modules/lru-cache/package.json
+++ b/deps/npm/node_modules/lru-cache/package.json
@@ -1,7 +1,7 @@
{
"name": "lru-cache",
"description": "A cache object that deletes the least-recently-used items.",
- "version": "2.3.0",
+ "version": "2.5.0",
"author": {
"name": "Isaac Z. Schlueter",
"email": "i@izs.me"
@@ -22,38 +22,12 @@
"type": "MIT",
"url": "http://github.com/isaacs/node-lru-cache/raw/master/LICENSE"
},
- "contributors": [
- {
- "name": "Isaac Z. Schlueter",
- "email": "i@izs.me"
- },
- {
- "name": "Carlos Brito Lage",
- "email": "carlos@carloslage.net"
- },
- {
- "name": "Marko Mikulicic",
- "email": "marko.mikulicic@isti.cnr.it"
- },
- {
- "name": "Trent Mick",
- "email": "trentm@gmail.com"
- },
- {
- "name": "Kevin O'Hara",
- "email": "kevinohara80@gmail.com"
- },
- {
- "name": "Marco Rogers",
- "email": "marco.rogers@gmail.com"
- },
- {
- "name": "Jesse Dailey",
- "email": "jesse.dailey@gmail.com"
- }
- ],
"readme": "# lru cache\n\nA cache object that deletes the least-recently-used items.\n\n## Usage:\n\n```javascript\nvar LRU = require(\"lru-cache\")\n , options = { max: 500\n , length: function (n) { return n * 2 }\n , dispose: function (key, n) { n.close() }\n , maxAge: 1000 * 60 * 60 }\n , cache = LRU(options)\n , otherCache = LRU(50) // sets just the max size\n\ncache.set(\"key\", \"value\")\ncache.get(\"key\") // \"value\"\n\ncache.reset() // empty the cache\n```\n\nIf you put more stuff in it, then items will fall out.\n\nIf you try to put an oversized thing in it, then it'll fall out right\naway.\n\n## Options\n\n* `max` The maximum size of the cache, checked by applying the length\n function to all values in the cache. Not setting this is kind of\n silly, since that's the whole purpose of this lib, but it defaults\n to `Infinity`.\n* `maxAge` Maximum age in ms. Items are not pro-actively pruned out\n as they age, but if you try to get an item that is too old, it'll\n drop it and return undefined instead of giving it to you.\n* `length` Function that is used to calculate the length of stored\n items. If you're storing strings or buffers, then you probably want\n to do something like `function(n){return n.length}`. The default is\n `function(n){return 1}`, which is fine if you want to store `n`\n like-sized things.\n* `dispose` Function that is called on items when they are dropped\n from the cache. This can be handy if you want to close file\n descriptors or do other cleanup tasks when items are no longer\n accessible. Called with `key, value`. It's called *before*\n actually removing the item from the internal cache, so if you want\n to immediately put it back in, you'll have to do that in a\n `nextTick` or `setTimeout` callback or it won't do anything.\n* `stale` By default, if you set a `maxAge`, it'll only actually pull\n stale items out of the cache when you `get(key)`. (That is, it's\n not pre-emptively doing a `setTimeout` or anything.) If you set\n `stale:true`, it'll return the stale value before deleting it. If\n you don't set this, then it'll return `undefined` when you try to\n get a stale entry, as if it had already been deleted.\n\n## API\n\n* `set(key, value)`\n* `get(key) => value`\n\n Both of these will update the \"recently used\"-ness of the key.\n They do what you think.\n\n* `peek(key)`\n\n Returns the key value (or `undefined` if not found) without\n updating the \"recently used\"-ness of the key.\n\n (If you find yourself using this a lot, you *might* be using the\n wrong sort of data structure, but there are some use cases where\n it's handy.)\n\n* `del(key)`\n\n Deletes a key out of the cache.\n\n* `reset()`\n\n Clear the cache entirely, throwing away all values.\n\n* `has(key)`\n\n Check if a key is in the cache, without updating the recent-ness\n or deleting it for being stale.\n\n* `forEach(function(value,key,cache), [thisp])`\n\n Just like `Array.prototype.forEach`. Iterates over all the keys\n in the cache, in order of recent-ness. (Ie, more recently used\n items are iterated over first.)\n\n* `keys()`\n\n Return an array of the keys in the cache.\n\n* `values()`\n\n Return an array of the values in the cache.\n",
"readmeFilename": "README.md",
- "_id": "lru-cache@2.3.0",
+ "bugs": {
+ "url": "https://github.com/isaacs/node-lru-cache/issues"
+ },
+ "homepage": "https://github.com/isaacs/node-lru-cache",
+ "_id": "lru-cache@2.5.0",
"_from": "lru-cache@latest"
}
diff --git a/deps/npm/node_modules/lru-cache/s.js b/deps/npm/node_modules/lru-cache/s.js
deleted file mode 100644
index c2a9e548f..000000000
--- a/deps/npm/node_modules/lru-cache/s.js
+++ /dev/null
@@ -1,25 +0,0 @@
-var LRU = require('lru-cache');
-
-var max = +process.argv[2] || 10240;
-var more = 1024;
-
-var cache = LRU({
- max: max, maxAge: 86400e3
-});
-
-// fill cache
-for (var i = 0; i < max; ++i) {
- cache.set(i, {});
-}
-
-var start = process.hrtime();
-
-// adding more items
-for ( ; i < max+more; ++i) {
- cache.set(i, {});
-}
-
-var end = process.hrtime(start);
-var msecs = end[0] * 1E3 + end[1] / 1E6;
-
-console.log('adding %d items took %d ms', more, msecs.toPrecision(5));
diff --git a/deps/npm/node_modules/lru-cache/test/basic.js b/deps/npm/node_modules/lru-cache/test/basic.js
index 70f3f8beb..f72697c46 100644
--- a/deps/npm/node_modules/lru-cache/test/basic.js
+++ b/deps/npm/node_modules/lru-cache/test/basic.js
@@ -327,3 +327,43 @@ test("least recently set w/ peek", function (t) {
t.equal(cache.get("a"), undefined)
t.end()
})
+
+test("pop the least used item", function (t) {
+ var cache = new LRU(3)
+ , last
+
+ cache.set("a", "A")
+ cache.set("b", "B")
+ cache.set("c", "C")
+
+ t.equal(cache.length, 3)
+ t.equal(cache.max, 3)
+
+ // Ensure we pop a, c, b
+ cache.get("b", "B")
+
+ last = cache.pop()
+ t.equal(last.key, "a")
+ t.equal(last.value, "A")
+ t.equal(cache.length, 2)
+ t.equal(cache.max, 3)
+
+ last = cache.pop()
+ t.equal(last.key, "c")
+ t.equal(last.value, "C")
+ t.equal(cache.length, 1)
+ t.equal(cache.max, 3)
+
+ last = cache.pop()
+ t.equal(last.key, "b")
+ t.equal(last.value, "B")
+ t.equal(cache.length, 0)
+ t.equal(cache.max, 3)
+
+ last = cache.pop()
+ t.equal(last, null)
+ t.equal(cache.length, 0)
+ t.equal(cache.max, 3)
+
+ t.end()
+})
diff --git a/deps/npm/node_modules/minimatch/.npmignore b/deps/npm/node_modules/minimatch/.npmignore
new file mode 100644
index 000000000..3c3629e64
--- /dev/null
+++ b/deps/npm/node_modules/minimatch/.npmignore
@@ -0,0 +1 @@
+node_modules
diff --git a/deps/npm/node_modules/minimatch/README.md b/deps/npm/node_modules/minimatch/README.md
index 6fd07d2e9..978268e27 100644
--- a/deps/npm/node_modules/minimatch/README.md
+++ b/deps/npm/node_modules/minimatch/README.md
@@ -19,6 +19,7 @@ var minimatch = require("minimatch")
minimatch("bar.foo", "*.foo") // true!
minimatch("bar.foo", "*.bar") // false!
+minimatch("bar.foo", "*.+(bar|foo)", { debug: true }) // true, and noisy!
```
## Features
@@ -36,44 +37,6 @@ See:
* `man 3 fnmatch`
* `man 5 gitignore`
-### Comparisons to other fnmatch/glob implementations
-
-While strict compliance with the existing standards is a worthwhile
-goal, some discrepancies exist between minimatch and other
-implementations, and are intentional.
-
-If the pattern starts with a `!` character, then it is negated. Set the
-`nonegate` flag to suppress this behavior, and treat leading `!`
-characters normally. This is perhaps relevant if you wish to start the
-pattern with a negative extglob pattern like `!(a|B)`. Multiple `!`
-characters at the start of a pattern will negate the pattern multiple
-times.
-
-If a pattern starts with `#`, then it is treated as a comment, and
-will not match anything. Use `\#` to match a literal `#` at the
-start of a line, or set the `nocomment` flag to suppress this behavior.
-
-The double-star character `**` is supported by default, unless the
-`noglobstar` flag is set. This is supported in the manner of bsdglob
-and bash 4.1, where `**` only has special significance if it is the only
-thing in a path part. That is, `a/**/b` will match `a/x/y/b`, but
-`a/**b` will not. **Note that this is different from the way that `**` is
-handled by ruby's `Dir` class.**
-
-If an escaped pattern has no matches, and the `nonull` flag is set,
-then minimatch.match returns the pattern as-provided, rather than
-interpreting the character escapes. For example,
-`minimatch.match([], "\\*a\\?")` will return `"\\*a\\?"` rather than
-`"*a?"`. This is akin to setting the `nullglob` option in bash, except
-that it does not resolve escaped pattern characters.
-
-If brace expansion is not disabled, then it is performed before any
-other interpretation of the glob pattern. Thus, a pattern like
-`+(a|{b),c)}`, which would not be valid in bash or zsh, is expanded
-**first** into the set of `+(a|b)` and `+(a|c)`, and those patterns are
-checked for validity. Since those two are valid, matching proceeds.
-
-
## Minimatch Class
Create a minimatch object by instanting the `minimatch.Minimatch` class.
@@ -216,3 +179,40 @@ Suppress the behavior of treating a leading `!` character as negation.
Returns from negate expressions the same as if they were not negated.
(Ie, true on a hit, false on a miss.)
+
+
+## Comparisons to other fnmatch/glob implementations
+
+While strict compliance with the existing standards is a worthwhile
+goal, some discrepancies exist between minimatch and other
+implementations, and are intentional.
+
+If the pattern starts with a `!` character, then it is negated. Set the
+`nonegate` flag to suppress this behavior, and treat leading `!`
+characters normally. This is perhaps relevant if you wish to start the
+pattern with a negative extglob pattern like `!(a|B)`. Multiple `!`
+characters at the start of a pattern will negate the pattern multiple
+times.
+
+If a pattern starts with `#`, then it is treated as a comment, and
+will not match anything. Use `\#` to match a literal `#` at the
+start of a line, or set the `nocomment` flag to suppress this behavior.
+
+The double-star character `**` is supported by default, unless the
+`noglobstar` flag is set. This is supported in the manner of bsdglob
+and bash 4.1, where `**` only has special significance if it is the only
+thing in a path part. That is, `a/**/b` will match `a/x/y/b`, but
+`a/**b` will not.
+
+If an escaped pattern has no matches, and the `nonull` flag is set,
+then minimatch.match returns the pattern as-provided, rather than
+interpreting the character escapes. For example,
+`minimatch.match([], "\\*a\\?")` will return `"\\*a\\?"` rather than
+`"*a?"`. This is akin to setting the `nullglob` option in bash, except
+that it does not resolve escaped pattern characters.
+
+If brace expansion is not disabled, then it is performed before any
+other interpretation of the glob pattern. Thus, a pattern like
+`+(a|{b),c)}`, which would not be valid in bash or zsh, is expanded
+**first** into the set of `+(a|b)` and `+(a|c)`, and those patterns are
+checked for validity. Since those two are valid, matching proceeds.
diff --git a/deps/npm/node_modules/minimatch/minimatch.js b/deps/npm/node_modules/minimatch/minimatch.js
index 405746b67..c633f89fa 100644
--- a/deps/npm/node_modules/minimatch/minimatch.js
+++ b/deps/npm/node_modules/minimatch/minimatch.js
@@ -68,17 +68,6 @@ function charSet (s) {
// normalizes slashes.
var slashSplit = /\/+/
-minimatch.monkeyPatch = monkeyPatch
-function monkeyPatch () {
- var desc = Object.getOwnPropertyDescriptor(String.prototype, "match")
- var orig = desc.value
- desc.value = function (p) {
- if (p instanceof Minimatch) return p.match(this)
- return orig.call(this, p)
- }
- Object.defineProperty(String.prototype, desc)
-}
-
minimatch.filter = filter
function filter (pattern, options) {
options = options || {}
@@ -178,6 +167,8 @@ function Minimatch (pattern, options) {
this.make()
}
+Minimatch.prototype.debug = function() {}
+
Minimatch.prototype.make = make
function make () {
// don't do it more than once.
@@ -202,7 +193,9 @@ function make () {
// step 2: expand braces
var set = this.globSet = this.braceExpand()
- if (options.debug) console.error(this.pattern, set)
+ if (options.debug) this.debug = console.error
+
+ this.debug(this.pattern, set)
// step 3: now we have a set, so turn each one into a series of path-portion
// matching patterns.
@@ -213,21 +206,21 @@ function make () {
return s.split(slashSplit)
})
- if (options.debug) console.error(this.pattern, set)
+ this.debug(this.pattern, set)
// glob --> regexps
set = set.map(function (s, si, set) {
return s.map(this.parse, this)
}, this)
- if (options.debug) console.error(this.pattern, set)
+ this.debug(this.pattern, set)
// filter out everything that didn't compile properly.
set = set.filter(function (s) {
return -1 === s.indexOf(false)
})
- if (options.debug) console.error(this.pattern, set)
+ this.debug(this.pattern, set)
this.set = set
}
@@ -302,11 +295,11 @@ function braceExpand (pattern, options) {
// So, we pluck that off, and work with the rest,
// and then prepend it to everything we find.
if (pattern.charAt(0) !== "{") {
- // console.error(pattern)
+ this.debug(pattern)
var prefix = null
for (var i = 0, l = pattern.length; i < l; i ++) {
var c = pattern.charAt(i)
- // console.error(i, c)
+ this.debug(i, c)
if (c === "\\") {
escaping = !escaping
} else if (c === "{" && !escaping) {
@@ -317,11 +310,11 @@ function braceExpand (pattern, options) {
// actually no sets, all { were escaped.
if (prefix === null) {
- // console.error("no sets")
+ this.debug("no sets")
return [pattern]
}
- var tail = braceExpand(pattern.substr(i), options)
+ var tail = braceExpand.call(this, pattern.substr(i), options)
return tail.map(function (t) {
return prefix + t
})
@@ -336,8 +329,8 @@ function braceExpand (pattern, options) {
// first, handle numeric sets, since they're easier
var numset = pattern.match(/^\{(-?[0-9]+)\.\.(-?[0-9]+)\}/)
if (numset) {
- // console.error("numset", numset[1], numset[2])
- var suf = braceExpand(pattern.substr(numset[0].length), options)
+ this.debug("numset", numset[1], numset[2])
+ var suf = braceExpand.call(this, pattern.substr(numset[0].length), options)
, start = +numset[1]
, end = +numset[2]
, inc = start > end ? -1 : 1
@@ -369,10 +362,10 @@ function braceExpand (pattern, options) {
member = ""
}
- // console.error("Entering for")
+ this.debug("Entering for")
FOR: for (i = 1, l = pattern.length; i < l; i ++) {
var c = pattern.charAt(i)
- // console.error("", i, c)
+ this.debug("", i, c)
if (escaping) {
escaping = false
@@ -420,22 +413,22 @@ function braceExpand (pattern, options) {
// pattern.substr(i), or we have *not* closed the set,
// and need to escape the leading brace
if (depth !== 0) {
- // console.error("didn't close", pattern)
- return braceExpand("\\" + pattern, options)
+ this.debug("didn't close", pattern)
+ return braceExpand.call(this, "\\" + pattern, options)
}
// x{y,z} -> ["xy", "xz"]
- // console.error("set", set)
- // console.error("suffix", pattern.substr(i))
- var suf = braceExpand(pattern.substr(i), options)
+ this.debug("set", set)
+ this.debug("suffix", pattern.substr(i))
+ var suf = braceExpand.call(this, pattern.substr(i), options)
// ["b", "c{d,e}","{f,g}h"] ->
// [["b"], ["cd", "ce"], ["fh", "gh"]]
var addBraces = set.length === 1
- // console.error("set pre-expanded", set)
+ this.debug("set pre-expanded", set)
set = set.map(function (p) {
- return braceExpand(p, options)
- })
- // console.error("set expanded", set)
+ return braceExpand.call(this, p, options)
+ }, this)
+ this.debug("set expanded", set)
// [["b"], ["cd", "ce"], ["fh", "gh"]] ->
@@ -496,6 +489,7 @@ function parse (pattern, isSub) {
// not (start or / followed by . or .. followed by / or end)
: options.dot ? "(?!(?:^|\\\/)\\.{1,2}(?:$|\\\/))"
: "(?!\\.)"
+ , self = this
function clearStateChar () {
if (stateChar) {
@@ -514,6 +508,7 @@ function parse (pattern, isSub) {
re += "\\"+stateChar
break
}
+ self.debug('clearStateChar %j %j', stateChar, re)
stateChar = false
}
}
@@ -522,9 +517,7 @@ function parse (pattern, isSub) {
; (i < len) && (c = pattern.charAt(i))
; i ++ ) {
- if (options.debug) {
- console.error("%s\t%s %s %j", pattern, i, re, c)
- }
+ this.debug("%s\t%s %s %j", pattern, i, re, c)
// skip over any that are escaped.
if (escaping && reSpecials[c]) {
@@ -551,13 +544,12 @@ function parse (pattern, isSub) {
case "+":
case "@":
case "!":
- if (options.debug) {
- console.error("%s\t%s %s %j <-- stateChar", pattern, i, re, c)
- }
+ this.debug("%s\t%s %s %j <-- stateChar", pattern, i, re, c)
// all of those are literals inside a class, except that
// the glob [!a] means [^a] in regexp
if (inClass) {
+ this.debug(' in class')
if (c === "!" && i === classStart + 1) c = "^"
re += c
continue
@@ -566,6 +558,7 @@ function parse (pattern, isSub) {
// if we already have a stateChar, then it means
// that there was something like ** or +? in there.
// Handle the stateChar, then proceed with this one.
+ self.debug('call clearStateChar %j', stateChar)
clearStateChar()
stateChar = c
// if extglob is disabled, then +(asdf|foo) isn't a thing.
@@ -591,6 +584,7 @@ function parse (pattern, isSub) {
, reStart: re.length })
// negation is (?:(?!js)[^/]*)
re += stateChar === "!" ? "(?:(?!" : "(?:"
+ this.debug('plType %j %j', stateChar, re)
stateChar = false
continue
@@ -600,6 +594,7 @@ function parse (pattern, isSub) {
continue
}
+ clearStateChar()
hasMagic = true
re += ")"
plType = patternListStack.pop().type
@@ -623,6 +618,7 @@ function parse (pattern, isSub) {
continue
}
+ clearStateChar()
re += "|"
continue
@@ -715,7 +711,7 @@ function parse (pattern, isSub) {
return $1 + $1 + $2 + "|"
})
- // console.error("tail=%j\n %s", tail, tail)
+ this.debug("tail=%j\n %s", tail, tail)
var t = pl.type === "*" ? star
: pl.type === "?" ? qmark
: "\\" + pl.type
@@ -829,7 +825,7 @@ minimatch.match = function (list, pattern, options) {
Minimatch.prototype.match = match
function match (f, partial) {
- // console.error("match", f, this.pattern)
+ this.debug("match", f, this.pattern)
// short-circuit in the case of busted things.
// comments, etc.
if (this.comment) return false
@@ -847,9 +843,7 @@ function match (f, partial) {
// treat the test path as a set of pathparts.
f = f.split(slashSplit)
- if (options.debug) {
- console.error(this.pattern, "split", f)
- }
+ this.debug(this.pattern, "split", f)
// just ONE of the pattern sets in this.set needs to match
// in order for it to be valid. If negating, then just one
@@ -857,11 +851,16 @@ function match (f, partial) {
// Either way, return on the first hit.
var set = this.set
- // console.error(this.pattern, "set", set)
+ this.debug(this.pattern, "set", set)
+
+ var splitFile = path.basename(f.join("/")).split("/")
for (var i = 0, l = set.length; i < l; i ++) {
- var pattern = set[i]
- var hit = this.matchOne(f, pattern, partial)
+ var pattern = set[i], file = f
+ if (options.matchBase && pattern.length === 1) {
+ file = splitFile
+ }
+ var hit = this.matchOne(file, pattern, partial)
if (hit) {
if (options.flipNegate) return true
return !this.negate
@@ -882,20 +881,12 @@ function match (f, partial) {
Minimatch.prototype.matchOne = function (file, pattern, partial) {
var options = this.options
- if (options.debug) {
- console.error("matchOne",
- { "this": this
- , file: file
- , pattern: pattern })
- }
-
- if (options.matchBase && pattern.length === 1) {
- file = path.basename(file.join("/")).split("/")
- }
+ this.debug("matchOne",
+ { "this": this
+ , file: file
+ , pattern: pattern })
- if (options.debug) {
- console.error("matchOne", file.length, pattern.length)
- }
+ this.debug("matchOne", file.length, pattern.length)
for ( var fi = 0
, pi = 0
@@ -904,23 +895,18 @@ Minimatch.prototype.matchOne = function (file, pattern, partial) {
; (fi < fl) && (pi < pl)
; fi ++, pi ++ ) {
- if (options.debug) {
- console.error("matchOne loop")
- }
+ this.debug("matchOne loop")
var p = pattern[pi]
, f = file[fi]
- if (options.debug) {
- console.error(pattern, p, f)
- }
+ this.debug(pattern, p, f)
// should be impossible.
// some invalid regexp stuff in the set.
if (p === false) return false
if (p === GLOBSTAR) {
- if (options.debug)
- console.error('GLOBSTAR', [pattern, p, f])
+ this.debug('GLOBSTAR', [pattern, p, f])
// "**"
// a/**/b/**/c would match the following:
@@ -947,8 +933,7 @@ Minimatch.prototype.matchOne = function (file, pattern, partial) {
var fr = fi
, pr = pi + 1
if (pr === pl) {
- if (options.debug)
- console.error('** at the end')
+ this.debug('** at the end')
// a ** at the end will just swallow the rest.
// We have found a match.
// however, it will not swallow /.x, unless
@@ -966,15 +951,12 @@ Minimatch.prototype.matchOne = function (file, pattern, partial) {
WHILE: while (fr < fl) {
var swallowee = file[fr]
- if (options.debug) {
- console.error('\nglobstar while',
- file, fr, pattern, pr, swallowee)
- }
+ this.debug('\nglobstar while',
+ file, fr, pattern, pr, swallowee)
// XXX remove this slice. Just pass the start index.
if (this.matchOne(file.slice(fr), pattern.slice(pr), partial)) {
- if (options.debug)
- console.error('globstar found match!', fr, fl, swallowee)
+ this.debug('globstar found match!', fr, fl, swallowee)
// found a match.
return true
} else {
@@ -982,14 +964,12 @@ Minimatch.prototype.matchOne = function (file, pattern, partial) {
// can only swallow ".foo" when explicitly asked.
if (swallowee === "." || swallowee === ".." ||
(!options.dot && swallowee.charAt(0) === ".")) {
- if (options.debug)
- console.error("dot detected!", file, fr, pattern, pr)
+ this.debug("dot detected!", file, fr, pattern, pr)
break WHILE
}
// ** swallows a segment, and continue.
- if (options.debug)
- console.error('globstar swallow a segment, and continue')
+ this.debug('globstar swallow a segment, and continue')
fr ++
}
}
@@ -998,7 +978,7 @@ Minimatch.prototype.matchOne = function (file, pattern, partial) {
// If there's more *pattern* left, then
if (partial) {
// ran out of file
- // console.error("\n>>> no match, partial?", file, fr, pattern, pr)
+ this.debug("\n>>> no match, partial?", file, fr, pattern, pr)
if (fr === fl) return true
}
return false
@@ -1014,14 +994,10 @@ Minimatch.prototype.matchOne = function (file, pattern, partial) {
} else {
hit = f === p
}
- if (options.debug) {
- console.error("string match", p, f, hit)
- }
+ this.debug("string match", p, f, hit)
} else {
hit = f.match(p)
- if (options.debug) {
- console.error("pattern match", p, f, hit)
- }
+ this.debug("pattern match", p, f, hit)
}
if (!hit) return false
diff --git a/deps/npm/node_modules/minimatch/node_modules/sigmund/package.json b/deps/npm/node_modules/minimatch/node_modules/sigmund/package.json
index 798d8b955..cb7e2bd4b 100644
--- a/deps/npm/node_modules/minimatch/node_modules/sigmund/package.json
+++ b/deps/npm/node_modules/minimatch/node_modules/sigmund/package.json
@@ -36,10 +36,7 @@
"bugs": {
"url": "https://github.com/isaacs/sigmund/issues"
},
+ "homepage": "https://github.com/isaacs/sigmund",
"_id": "sigmund@1.0.0",
- "dist": {
- "shasum": "66a2b3a749ae8b5fb89efd4fcc01dc94fbe02296"
- },
- "_from": "sigmund@~1.0.0",
- "_resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.0.tgz"
+ "_from": "sigmund@~1.0.0"
}
diff --git a/deps/npm/node_modules/minimatch/package.json b/deps/npm/node_modules/minimatch/package.json
index 0e26ea948..9dedca512 100644
--- a/deps/npm/node_modules/minimatch/package.json
+++ b/deps/npm/node_modules/minimatch/package.json
@@ -6,14 +6,14 @@
},
"name": "minimatch",
"description": "a glob matcher in javascript",
- "version": "0.2.12",
+ "version": "0.2.14",
"repository": {
"type": "git",
"url": "git://github.com/isaacs/minimatch.git"
},
"main": "minimatch.js",
"scripts": {
- "test": "tap test"
+ "test": "tap test/*.js"
},
"engines": {
"node": "*"
@@ -29,11 +29,12 @@
"type": "MIT",
"url": "http://github.com/isaacs/minimatch/raw/master/LICENSE"
},
- "readme": "# minimatch\n\nA minimal matching utility.\n\n[![Build Status](https://secure.travis-ci.org/isaacs/minimatch.png)](http://travis-ci.org/isaacs/minimatch)\n\n\nThis is the matching library used internally by npm.\n\nEventually, it will replace the C binding in node-glob.\n\nIt works by converting glob expressions into JavaScript `RegExp`\nobjects.\n\n## Usage\n\n```javascript\nvar minimatch = require(\"minimatch\")\n\nminimatch(\"bar.foo\", \"*.foo\") // true!\nminimatch(\"bar.foo\", \"*.bar\") // false!\n```\n\n## Features\n\nSupports these glob features:\n\n* Brace Expansion\n* Extended glob matching\n* \"Globstar\" `**` matching\n\nSee:\n\n* `man sh`\n* `man bash`\n* `man 3 fnmatch`\n* `man 5 gitignore`\n\n### Comparisons to other fnmatch/glob implementations\n\nWhile strict compliance with the existing standards is a worthwhile\ngoal, some discrepancies exist between minimatch and other\nimplementations, and are intentional.\n\nIf the pattern starts with a `!` character, then it is negated. Set the\n`nonegate` flag to suppress this behavior, and treat leading `!`\ncharacters normally. This is perhaps relevant if you wish to start the\npattern with a negative extglob pattern like `!(a|B)`. Multiple `!`\ncharacters at the start of a pattern will negate the pattern multiple\ntimes.\n\nIf a pattern starts with `#`, then it is treated as a comment, and\nwill not match anything. Use `\\#` to match a literal `#` at the\nstart of a line, or set the `nocomment` flag to suppress this behavior.\n\nThe double-star character `**` is supported by default, unless the\n`noglobstar` flag is set. This is supported in the manner of bsdglob\nand bash 4.1, where `**` only has special significance if it is the only\nthing in a path part. That is, `a/**/b` will match `a/x/y/b`, but\n`a/**b` will not. **Note that this is different from the way that `**` is\nhandled by ruby's `Dir` class.**\n\nIf an escaped pattern has no matches, and the `nonull` flag is set,\nthen minimatch.match returns the pattern as-provided, rather than\ninterpreting the character escapes. For example,\n`minimatch.match([], \"\\\\*a\\\\?\")` will return `\"\\\\*a\\\\?\"` rather than\n`\"*a?\"`. This is akin to setting the `nullglob` option in bash, except\nthat it does not resolve escaped pattern characters.\n\nIf brace expansion is not disabled, then it is performed before any\nother interpretation of the glob pattern. Thus, a pattern like\n`+(a|{b),c)}`, which would not be valid in bash or zsh, is expanded\n**first** into the set of `+(a|b)` and `+(a|c)`, and those patterns are\nchecked for validity. Since those two are valid, matching proceeds.\n\n\n## Minimatch Class\n\nCreate a minimatch object by instanting the `minimatch.Minimatch` class.\n\n```javascript\nvar Minimatch = require(\"minimatch\").Minimatch\nvar mm = new Minimatch(pattern, options)\n```\n\n### Properties\n\n* `pattern` The original pattern the minimatch object represents.\n* `options` The options supplied to the constructor.\n* `set` A 2-dimensional array of regexp or string expressions.\n Each row in the\n array corresponds to a brace-expanded pattern. Each item in the row\n corresponds to a single path-part. For example, the pattern\n `{a,b/c}/d` would expand to a set of patterns like:\n\n [ [ a, d ]\n , [ b, c, d ] ]\n\n If a portion of the pattern doesn't have any \"magic\" in it\n (that is, it's something like `\"foo\"` rather than `fo*o?`), then it\n will be left as a string rather than converted to a regular\n expression.\n\n* `regexp` Created by the `makeRe` method. A single regular expression\n expressing the entire pattern. This is useful in cases where you wish\n to use the pattern somewhat like `fnmatch(3)` with `FNM_PATH` enabled.\n* `negate` True if the pattern is negated.\n* `comment` True if the pattern is a comment.\n* `empty` True if the pattern is `\"\"`.\n\n### Methods\n\n* `makeRe` Generate the `regexp` member if necessary, and return it.\n Will return `false` if the pattern is invalid.\n* `match(fname)` Return true if the filename matches the pattern, or\n false otherwise.\n* `matchOne(fileArray, patternArray, partial)` Take a `/`-split\n filename, and match it against a single row in the `regExpSet`. This\n method is mainly for internal use, but is exposed so that it can be\n used by a glob-walker that needs to avoid excessive filesystem calls.\n\nAll other methods are internal, and will be called as necessary.\n\n## Functions\n\nThe top-level exported function has a `cache` property, which is an LRU\ncache set to store 100 items. So, calling these methods repeatedly\nwith the same pattern and options will use the same Minimatch object,\nsaving the cost of parsing it multiple times.\n\n### minimatch(path, pattern, options)\n\nMain export. Tests a path against the pattern using the options.\n\n```javascript\nvar isJS = minimatch(file, \"*.js\", { matchBase: true })\n```\n\n### minimatch.filter(pattern, options)\n\nReturns a function that tests its\nsupplied argument, suitable for use with `Array.filter`. Example:\n\n```javascript\nvar javascripts = fileList.filter(minimatch.filter(\"*.js\", {matchBase: true}))\n```\n\n### minimatch.match(list, pattern, options)\n\nMatch against the list of\nfiles, in the style of fnmatch or glob. If nothing is matched, and\noptions.nonull is set, then return a list containing the pattern itself.\n\n```javascript\nvar javascripts = minimatch.match(fileList, \"*.js\", {matchBase: true}))\n```\n\n### minimatch.makeRe(pattern, options)\n\nMake a regular expression object from the pattern.\n\n## Options\n\nAll options are `false` by default.\n\n### debug\n\nDump a ton of stuff to stderr.\n\n### nobrace\n\nDo not expand `{a,b}` and `{1..3}` brace sets.\n\n### noglobstar\n\nDisable `**` matching against multiple folder names.\n\n### dot\n\nAllow patterns to match filenames starting with a period, even if\nthe pattern does not explicitly have a period in that spot.\n\nNote that by default, `a/**/b` will **not** match `a/.d/b`, unless `dot`\nis set.\n\n### noext\n\nDisable \"extglob\" style patterns like `+(a|b)`.\n\n### nocase\n\nPerform a case-insensitive match.\n\n### nonull\n\nWhen a match is not found by `minimatch.match`, return a list containing\nthe pattern itself. When set, an empty list is returned if there are\nno matches.\n\n### matchBase\n\nIf set, then patterns without slashes will be matched\nagainst the basename of the path if it contains slashes. For example,\n`a?b` would match the path `/xyz/123/acb`, but not `/xyz/acb/123`.\n\n### nocomment\n\nSuppress the behavior of treating `#` at the start of a pattern as a\ncomment.\n\n### nonegate\n\nSuppress the behavior of treating a leading `!` character as negation.\n\n### flipNegate\n\nReturns from negate expressions the same as if they were not negated.\n(Ie, true on a hit, false on a miss.)\n",
+ "readme": "# minimatch\n\nA minimal matching utility.\n\n[![Build Status](https://secure.travis-ci.org/isaacs/minimatch.png)](http://travis-ci.org/isaacs/minimatch)\n\n\nThis is the matching library used internally by npm.\n\nEventually, it will replace the C binding in node-glob.\n\nIt works by converting glob expressions into JavaScript `RegExp`\nobjects.\n\n## Usage\n\n```javascript\nvar minimatch = require(\"minimatch\")\n\nminimatch(\"bar.foo\", \"*.foo\") // true!\nminimatch(\"bar.foo\", \"*.bar\") // false!\nminimatch(\"bar.foo\", \"*.+(bar|foo)\", { debug: true }) // true, and noisy!\n```\n\n## Features\n\nSupports these glob features:\n\n* Brace Expansion\n* Extended glob matching\n* \"Globstar\" `**` matching\n\nSee:\n\n* `man sh`\n* `man bash`\n* `man 3 fnmatch`\n* `man 5 gitignore`\n\n## Minimatch Class\n\nCreate a minimatch object by instanting the `minimatch.Minimatch` class.\n\n```javascript\nvar Minimatch = require(\"minimatch\").Minimatch\nvar mm = new Minimatch(pattern, options)\n```\n\n### Properties\n\n* `pattern` The original pattern the minimatch object represents.\n* `options` The options supplied to the constructor.\n* `set` A 2-dimensional array of regexp or string expressions.\n Each row in the\n array corresponds to a brace-expanded pattern. Each item in the row\n corresponds to a single path-part. For example, the pattern\n `{a,b/c}/d` would expand to a set of patterns like:\n\n [ [ a, d ]\n , [ b, c, d ] ]\n\n If a portion of the pattern doesn't have any \"magic\" in it\n (that is, it's something like `\"foo\"` rather than `fo*o?`), then it\n will be left as a string rather than converted to a regular\n expression.\n\n* `regexp` Created by the `makeRe` method. A single regular expression\n expressing the entire pattern. This is useful in cases where you wish\n to use the pattern somewhat like `fnmatch(3)` with `FNM_PATH` enabled.\n* `negate` True if the pattern is negated.\n* `comment` True if the pattern is a comment.\n* `empty` True if the pattern is `\"\"`.\n\n### Methods\n\n* `makeRe` Generate the `regexp` member if necessary, and return it.\n Will return `false` if the pattern is invalid.\n* `match(fname)` Return true if the filename matches the pattern, or\n false otherwise.\n* `matchOne(fileArray, patternArray, partial)` Take a `/`-split\n filename, and match it against a single row in the `regExpSet`. This\n method is mainly for internal use, but is exposed so that it can be\n used by a glob-walker that needs to avoid excessive filesystem calls.\n\nAll other methods are internal, and will be called as necessary.\n\n## Functions\n\nThe top-level exported function has a `cache` property, which is an LRU\ncache set to store 100 items. So, calling these methods repeatedly\nwith the same pattern and options will use the same Minimatch object,\nsaving the cost of parsing it multiple times.\n\n### minimatch(path, pattern, options)\n\nMain export. Tests a path against the pattern using the options.\n\n```javascript\nvar isJS = minimatch(file, \"*.js\", { matchBase: true })\n```\n\n### minimatch.filter(pattern, options)\n\nReturns a function that tests its\nsupplied argument, suitable for use with `Array.filter`. Example:\n\n```javascript\nvar javascripts = fileList.filter(minimatch.filter(\"*.js\", {matchBase: true}))\n```\n\n### minimatch.match(list, pattern, options)\n\nMatch against the list of\nfiles, in the style of fnmatch or glob. If nothing is matched, and\noptions.nonull is set, then return a list containing the pattern itself.\n\n```javascript\nvar javascripts = minimatch.match(fileList, \"*.js\", {matchBase: true}))\n```\n\n### minimatch.makeRe(pattern, options)\n\nMake a regular expression object from the pattern.\n\n## Options\n\nAll options are `false` by default.\n\n### debug\n\nDump a ton of stuff to stderr.\n\n### nobrace\n\nDo not expand `{a,b}` and `{1..3}` brace sets.\n\n### noglobstar\n\nDisable `**` matching against multiple folder names.\n\n### dot\n\nAllow patterns to match filenames starting with a period, even if\nthe pattern does not explicitly have a period in that spot.\n\nNote that by default, `a/**/b` will **not** match `a/.d/b`, unless `dot`\nis set.\n\n### noext\n\nDisable \"extglob\" style patterns like `+(a|b)`.\n\n### nocase\n\nPerform a case-insensitive match.\n\n### nonull\n\nWhen a match is not found by `minimatch.match`, return a list containing\nthe pattern itself. When set, an empty list is returned if there are\nno matches.\n\n### matchBase\n\nIf set, then patterns without slashes will be matched\nagainst the basename of the path if it contains slashes. For example,\n`a?b` would match the path `/xyz/123/acb`, but not `/xyz/acb/123`.\n\n### nocomment\n\nSuppress the behavior of treating `#` at the start of a pattern as a\ncomment.\n\n### nonegate\n\nSuppress the behavior of treating a leading `!` character as negation.\n\n### flipNegate\n\nReturns from negate expressions the same as if they were not negated.\n(Ie, true on a hit, false on a miss.)\n\n\n## Comparisons to other fnmatch/glob implementations\n\nWhile strict compliance with the existing standards is a worthwhile\ngoal, some discrepancies exist between minimatch and other\nimplementations, and are intentional.\n\nIf the pattern starts with a `!` character, then it is negated. Set the\n`nonegate` flag to suppress this behavior, and treat leading `!`\ncharacters normally. This is perhaps relevant if you wish to start the\npattern with a negative extglob pattern like `!(a|B)`. Multiple `!`\ncharacters at the start of a pattern will negate the pattern multiple\ntimes.\n\nIf a pattern starts with `#`, then it is treated as a comment, and\nwill not match anything. Use `\\#` to match a literal `#` at the\nstart of a line, or set the `nocomment` flag to suppress this behavior.\n\nThe double-star character `**` is supported by default, unless the\n`noglobstar` flag is set. This is supported in the manner of bsdglob\nand bash 4.1, where `**` only has special significance if it is the only\nthing in a path part. That is, `a/**/b` will match `a/x/y/b`, but\n`a/**b` will not.\n\nIf an escaped pattern has no matches, and the `nonull` flag is set,\nthen minimatch.match returns the pattern as-provided, rather than\ninterpreting the character escapes. For example,\n`minimatch.match([], \"\\\\*a\\\\?\")` will return `\"\\\\*a\\\\?\"` rather than\n`\"*a?\"`. This is akin to setting the `nullglob` option in bash, except\nthat it does not resolve escaped pattern characters.\n\nIf brace expansion is not disabled, then it is performed before any\nother interpretation of the glob pattern. Thus, a pattern like\n`+(a|{b),c)}`, which would not be valid in bash or zsh, is expanded\n**first** into the set of `+(a|b)` and `+(a|c)`, and those patterns are\nchecked for validity. Since those two are valid, matching proceeds.\n",
"readmeFilename": "README.md",
"bugs": {
"url": "https://github.com/isaacs/minimatch/issues"
},
- "_id": "minimatch@0.2.12",
+ "homepage": "https://github.com/isaacs/minimatch",
+ "_id": "minimatch@0.2.14",
"_from": "minimatch@latest"
}
diff --git a/deps/npm/node_modules/minimatch/test/extglob-ending-with-state-char.js b/deps/npm/node_modules/minimatch/test/extglob-ending-with-state-char.js
new file mode 100644
index 000000000..6676e2629
--- /dev/null
+++ b/deps/npm/node_modules/minimatch/test/extglob-ending-with-state-char.js
@@ -0,0 +1,8 @@
+var test = require('tap').test
+var minimatch = require('../')
+
+test('extglob ending with statechar', function(t) {
+ t.notOk(minimatch('ax', 'a?(b*)'))
+ t.ok(minimatch('ax', '?(a*|b)'))
+ t.end()
+})
diff --git a/deps/npm/node_modules/mkdirp/package.json b/deps/npm/node_modules/mkdirp/package.json
index 54cd699bd..aea8cb497 100644
--- a/deps/npm/node_modules/mkdirp/package.json
+++ b/deps/npm/node_modules/mkdirp/package.json
@@ -25,10 +25,9 @@
"license": "MIT",
"readme": "# mkdirp\n\nLike `mkdir -p`, but in node.js!\n\n[![build status](https://secure.travis-ci.org/substack/node-mkdirp.png)](http://travis-ci.org/substack/node-mkdirp)\n\n# example\n\n## pow.js\n\n```js\nvar mkdirp = require('mkdirp');\n \nmkdirp('/tmp/foo/bar/baz', function (err) {\n if (err) console.error(err)\n else console.log('pow!')\n});\n```\n\nOutput\n\n```\npow!\n```\n\nAnd now /tmp/foo/bar/baz exists, huzzah!\n\n# methods\n\n```js\nvar mkdirp = require('mkdirp');\n```\n\n## mkdirp(dir, mode, cb)\n\nCreate a new directory and any necessary subdirectories at `dir` with octal\npermission string `mode`.\n\nIf `mode` isn't specified, it defaults to `0777 & (~process.umask())`.\n\n`cb(err, made)` fires with the error or the first directory `made`\nthat had to be created, if any.\n\n## mkdirp.sync(dir, mode)\n\nSynchronously create a new directory and any necessary subdirectories at `dir`\nwith octal permission string `mode`.\n\nIf `mode` isn't specified, it defaults to `0777 & (~process.umask())`.\n\nReturns the first directory that had to be created, if any.\n\n# install\n\nWith [npm](http://npmjs.org) do:\n\n```\nnpm install mkdirp\n```\n\n# license\n\nMIT\n",
"readmeFilename": "readme.markdown",
- "_id": "mkdirp@0.3.5",
- "dist": {
- "shasum": "35715a113218b4fa49dc9b69326afcf7f9b2948e"
+ "bugs": {
+ "url": "https://github.com/substack/node-mkdirp/issues"
},
- "_from": "mkdirp@0.3.5",
- "_resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.3.5.tgz"
+ "_id": "mkdirp@0.3.5",
+ "_from": "mkdirp@latest"
}
diff --git a/deps/npm/node_modules/node-gyp/.jshintrc b/deps/npm/node_modules/node-gyp/.jshintrc
index dcbfbcc56..52475ba2e 100644
--- a/deps/npm/node_modules/node-gyp/.jshintrc
+++ b/deps/npm/node_modules/node-gyp/.jshintrc
@@ -1,6 +1,7 @@
{
"asi": true,
"laxcomma": true,
+ "es5": true,
"node": true,
"strict": false
}
diff --git a/deps/npm/node_modules/node-gyp/.npmignore b/deps/npm/node_modules/node-gyp/.npmignore
index 45555c9d6..b0b49bd62 100644
--- a/deps/npm/node_modules/node-gyp/.npmignore
+++ b/deps/npm/node_modules/node-gyp/.npmignore
@@ -1 +1 @@
-legacy/tools/gyp/test/
+gyp/test
diff --git a/deps/npm/node_modules/node-gyp/README.md b/deps/npm/node_modules/node-gyp/README.md
index cfc982052..ffe429c32 100644
--- a/deps/npm/node_modules/node-gyp/README.md
+++ b/deps/npm/node_modules/node-gyp/README.md
@@ -9,7 +9,7 @@ program which is removed for node `v0.8`. If you have a native addon for node th
still has a `wscript` file, then you should definitely add a `binding.gyp` file
to support the latest versions of node.
-Multiple target versions of node are supported (i.e. `0.6`, `0.7`,..., `1.0`,
+Multiple target versions of node are supported (i.e. `0.8`, `0.9`, `0.10`, ..., `1.0`,
etc.), regardless of what version of node is actually installed on your system
(`node-gyp` downloads the necessary development files for the target version).
diff --git a/deps/npm/node_modules/node-gyp/addon.gypi b/deps/npm/node_modules/node-gyp/addon.gypi
index 065b975d4..0b81fab20 100644
--- a/deps/npm/node_modules/node-gyp/addon.gypi
+++ b/deps/npm/node_modules/node-gyp/addon.gypi
@@ -29,7 +29,21 @@
},
}],
[ 'OS=="win"', {
- 'libraries': [ '-l<(node_root_dir)/$(Configuration)/node.lib' ],
+ 'libraries': [
+ '-lkernel32.lib',
+ '-luser32.lib',
+ '-lgdi32.lib',
+ '-lwinspool.lib',
+ '-lcomdlg32.lib',
+ '-ladvapi32.lib',
+ '-lshell32.lib',
+ '-lole32.lib',
+ '-loleaut32.lib',
+ '-luuid.lib',
+ '-lodbc32.lib',
+ '-lDelayImp.lib',
+ '-l"<(node_root_dir)/$(ConfigurationName)/node.lib"'
+ ],
# warning C4251: 'node::ObjectWrap::handle_' : class 'v8::Persistent<T>'
# needs to have dll-interface to be used by clients of class 'node::ObjectWrap'
'msvs_disabled_warnings': [ 4251 ],
diff --git a/deps/npm/node_modules/node-gyp/bin/node-gyp.js b/deps/npm/node_modules/node-gyp/bin/node-gyp.js
index 55fa08fd0..4678260fd 100755
--- a/deps/npm/node_modules/node-gyp/bin/node-gyp.js
+++ b/deps/npm/node_modules/node-gyp/bin/node-gyp.js
@@ -124,7 +124,7 @@ function errorMessage () {
function issueMessage () {
errorMessage()
log.error('', [ 'This is a bug in `node-gyp`.'
- , 'Please file an Issue:'
+ , 'Try to update node-gyp and file an Issue if it does not help:'
, ' <https://github.com/TooTallNate/node-gyp/issues>'
].join('\n'))
}
diff --git a/deps/npm/node_modules/node-gyp/gyp/AUTHORS b/deps/npm/node_modules/node-gyp/gyp/AUTHORS
index 6db82b9e4..9389ca0a2 100644
--- a/deps/npm/node_modules/node-gyp/gyp/AUTHORS
+++ b/deps/npm/node_modules/node-gyp/gyp/AUTHORS
@@ -2,5 +2,10 @@
# Name or Organization <email address>
Google Inc.
+Bloomberg Finance L.P.
+Yandex LLC
+
Steven Knight <knight@baldmt.com>
Ryan Norton <rnorton10@gmail.com>
+David J. Sankel <david@sankelsoftware.com>
+Eric N. Vander Weele <ericvw@gmail.com>
diff --git a/deps/npm/node_modules/node-gyp/gyp/DEPS b/deps/npm/node_modules/node-gyp/gyp/DEPS
index c17571ae0..2e1120f27 100644
--- a/deps/npm/node_modules/node-gyp/gyp/DEPS
+++ b/deps/npm/node_modules/node-gyp/gyp/DEPS
@@ -8,8 +8,6 @@ vars = {
}
deps = {
- "scons":
- Var("chrome_trunk") + "/src/third_party/scons@44099",
}
deps_os = {
diff --git a/deps/npm/node_modules/node-gyp/gyp/MANIFEST b/deps/npm/node_modules/node-gyp/gyp/MANIFEST
deleted file mode 100644
index 925ecc184..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/MANIFEST
+++ /dev/null
@@ -1,21 +0,0 @@
-setup.py
-gyp
-LICENSE
-AUTHORS
-pylib/gyp/MSVSNew.py
-pylib/gyp/MSVSProject.py
-pylib/gyp/MSVSToolFile.py
-pylib/gyp/MSVSUserFile.py
-pylib/gyp/MSVSVersion.py
-pylib/gyp/SCons.py
-pylib/gyp/__init__.py
-pylib/gyp/common.py
-pylib/gyp/input.py
-pylib/gyp/xcodeproj_file.py
-pylib/gyp/generator/__init__.py
-pylib/gyp/generator/gypd.py
-pylib/gyp/generator/gypsh.py
-pylib/gyp/generator/make.py
-pylib/gyp/generator/msvs.py
-pylib/gyp/generator/scons.py
-pylib/gyp/generator/xcode.py
diff --git a/deps/npm/node_modules/node-gyp/gyp/PRESUBMIT.py b/deps/npm/node_modules/node-gyp/gyp/PRESUBMIT.py
index 0338fb4a9..9c474eb2b 100644
--- a/deps/npm/node_modules/node-gyp/gyp/PRESUBMIT.py
+++ b/deps/npm/node_modules/node-gyp/gyp/PRESUBMIT.py
@@ -17,7 +17,6 @@ PYLINT_BLACKLIST = [
'test/lib/TestCommon.py',
'test/lib/TestGyp.py',
# Needs style fix.
- 'pylib/gyp/generator/scons.py',
'pylib/gyp/generator/xcode.py',
]
@@ -75,13 +74,20 @@ def CheckChangeOnUpload(input_api, output_api):
def CheckChangeOnCommit(input_api, output_api):
report = []
+
+ # Accept any year number from 2009 to the current year.
+ current_year = int(input_api.time.strftime('%Y'))
+ allowed_years = (str(s) for s in reversed(xrange(2009, current_year + 1)))
+ years_re = '(' + '|'.join(allowed_years) + ')'
+
+ # The (c) is deprecated, but tolerate it until it's removed from all files.
license = (
- r'.*? Copyright \(c\) %(year)s Google Inc\. All rights reserved\.\n'
+ r'.*? Copyright (\(c\) )?%(year)s Google Inc\. All rights reserved\.\n'
r'.*? Use of this source code is governed by a BSD-style license that '
r'can be\n'
r'.*? found in the LICENSE file\.\n'
) % {
- 'year': input_api.time.strftime('%Y'),
+ 'year': years_re,
}
report.extend(input_api.canned_checks.PanProjectChecks(
@@ -91,14 +97,19 @@ def CheckChangeOnCommit(input_api, output_api):
'http://gyp-status.appspot.com/status',
'http://gyp-status.appspot.com/current'))
+ import os
import sys
old_sys_path = sys.path
try:
sys.path = ['pylib', 'test/lib'] + sys.path
+ blacklist = PYLINT_BLACKLIST
+ if sys.platform == 'win32':
+ blacklist = [os.path.normpath(x).replace('\\', '\\\\')
+ for x in PYLINT_BLACKLIST]
report.extend(input_api.canned_checks.RunPylint(
input_api,
output_api,
- black_list=PYLINT_BLACKLIST,
+ black_list=blacklist,
disabled_warnings=PYLINT_DISABLED_WARNINGS))
finally:
sys.path = old_sys_path
@@ -106,4 +117,4 @@ def CheckChangeOnCommit(input_api, output_api):
def GetPreferredTrySlaves():
- return ['gyp-win32', 'gyp-win64', 'gyp-linux', 'gyp-mac']
+ return ['gyp-win32', 'gyp-win64', 'gyp-linux', 'gyp-mac', 'gyp-android']
diff --git a/deps/npm/node_modules/node-gyp/gyp/buildbot/buildbot_run.py b/deps/npm/node_modules/node-gyp/gyp/buildbot/buildbot_run.py
index 57fdb655b..979073c77 100755
--- a/deps/npm/node_modules/node-gyp/gyp/buildbot/buildbot_run.py
+++ b/deps/npm/node_modules/node-gyp/gyp/buildbot/buildbot_run.py
@@ -22,9 +22,91 @@ else:
BUILDBOT_DIR = os.path.dirname(os.path.abspath(__file__))
TRUNK_DIR = os.path.dirname(BUILDBOT_DIR)
ROOT_DIR = os.path.dirname(TRUNK_DIR)
+ANDROID_DIR = os.path.join(ROOT_DIR, 'android')
+CMAKE_DIR = os.path.join(ROOT_DIR, 'cmake')
+CMAKE_BIN_DIR = os.path.join(CMAKE_DIR, 'bin')
OUT_DIR = os.path.join(TRUNK_DIR, 'out')
+def CallSubProcess(*args, **kwargs):
+ """Wrapper around subprocess.call which treats errors as build exceptions."""
+ retcode = subprocess.call(*args, **kwargs)
+ if retcode != 0:
+ print '@@@STEP_EXCEPTION@@@'
+ sys.exit(1)
+
+
+def PrepareCmake():
+ """Build CMake 2.8.8 since the version in Precise is 2.8.7."""
+ if os.environ['BUILDBOT_CLOBBER'] == '1':
+ print '@@@BUILD_STEP Clobber CMake checkout@@@'
+ shutil.rmtree(CMAKE_DIR)
+
+ # We always build CMake 2.8.8, so no need to do anything
+ # if the directory already exists.
+ if os.path.isdir(CMAKE_DIR):
+ return
+
+ print '@@@BUILD_STEP Initialize CMake checkout@@@'
+ os.mkdir(CMAKE_DIR)
+ CallSubProcess(['git', 'config', '--global', 'user.name', 'trybot'])
+ CallSubProcess(['git', 'config', '--global',
+ 'user.email', 'chrome-bot@google.com'])
+ CallSubProcess(['git', 'config', '--global', 'color.ui', 'false'])
+
+ print '@@@BUILD_STEP Sync CMake@@@'
+ CallSubProcess(
+ ['git', 'clone',
+ '--depth', '1',
+ '--single-branch',
+ '--branch', 'v2.8.8',
+ '--',
+ 'git://cmake.org/cmake.git',
+ CMAKE_DIR],
+ cwd=CMAKE_DIR)
+
+ print '@@@BUILD_STEP Build CMake@@@'
+ CallSubProcess(
+ ['/bin/bash', 'bootstrap', '--prefix=%s' % CMAKE_DIR],
+ cwd=CMAKE_DIR)
+
+ CallSubProcess( ['make', 'cmake'], cwd=CMAKE_DIR)
+
+
+def PrepareAndroidTree():
+ """Prepare an Android tree to run 'android' format tests."""
+ if os.environ['BUILDBOT_CLOBBER'] == '1':
+ print '@@@BUILD_STEP Clobber Android checkout@@@'
+ shutil.rmtree(ANDROID_DIR)
+
+ # The release of Android we use is static, so there's no need to do anything
+ # if the directory already exists.
+ if os.path.isdir(ANDROID_DIR):
+ return
+
+ print '@@@BUILD_STEP Initialize Android checkout@@@'
+ os.mkdir(ANDROID_DIR)
+ CallSubProcess(['git', 'config', '--global', 'user.name', 'trybot'])
+ CallSubProcess(['git', 'config', '--global',
+ 'user.email', 'chrome-bot@google.com'])
+ CallSubProcess(['git', 'config', '--global', 'color.ui', 'false'])
+ CallSubProcess(
+ ['repo', 'init',
+ '-u', 'https://android.googlesource.com/platform/manifest',
+ '-b', 'android-4.2.1_r1',
+ '-g', 'all,-notdefault,-device,-darwin,-mips,-x86'],
+ cwd=ANDROID_DIR)
+
+ print '@@@BUILD_STEP Sync Android@@@'
+ CallSubProcess(['repo', 'sync', '-j4'], cwd=ANDROID_DIR)
+
+ print '@@@BUILD_STEP Build Android@@@'
+ CallSubProcess(
+ ['/bin/bash',
+ '-c', 'source build/envsetup.sh && lunch full-eng && make -j4'],
+ cwd=ANDROID_DIR)
+
+
def GypTestFormat(title, format=None, msvs_version=None):
"""Run the gyp tests for a given format, emitting annotator tags.
@@ -41,20 +123,25 @@ def GypTestFormat(title, format=None, msvs_version=None):
print '@@@BUILD_STEP ' + title + '@@@'
sys.stdout.flush()
env = os.environ.copy()
- # TODO(bradnelson): remove this when this issue is resolved:
- # http://code.google.com/p/chromium/issues/detail?id=108251
- if format == 'ninja':
- env['NOGOLD'] = '1'
if msvs_version:
env['GYP_MSVS_VERSION'] = msvs_version
- retcode = subprocess.call(' '.join(
+ command = ' '.join(
[sys.executable, 'trunk/gyptest.py',
'--all',
'--passed',
'--format', format,
- '--chdir', 'trunk',
- '--path', '../scons']),
- cwd=ROOT_DIR, env=env, shell=True)
+ '--path', CMAKE_BIN_DIR,
+ '--chdir', 'trunk'])
+ if format == 'android':
+ # gyptest needs the environment setup from envsetup/lunch in order to build
+ # using the 'android' backend, so this is done in a single shell.
+ retcode = subprocess.call(
+ ['/bin/bash',
+ '-c', 'source build/envsetup.sh && lunch full-eng && cd %s && %s'
+ % (ROOT_DIR, command)],
+ cwd=ANDROID_DIR, env=env)
+ else:
+ retcode = subprocess.call(command, cwd=ROOT_DIR, env=env, shell=True)
if retcode:
# Emit failure tag, and keep going.
print '@@@STEP_FAILURE@@@'
@@ -70,19 +157,24 @@ def GypBuild():
print 'Done.'
retcode = 0
- if sys.platform.startswith('linux'):
+ # The Android gyp bot runs on linux so this must be tested first.
+ if os.environ['BUILDBOT_BUILDERNAME'] == 'gyp-android':
+ PrepareAndroidTree()
+ retcode += GypTestFormat('android')
+ elif sys.platform.startswith('linux'):
retcode += GypTestFormat('ninja')
- retcode += GypTestFormat('scons')
retcode += GypTestFormat('make')
+ PrepareCmake()
+ retcode += GypTestFormat('cmake')
elif sys.platform == 'darwin':
retcode += GypTestFormat('ninja')
retcode += GypTestFormat('xcode')
retcode += GypTestFormat('make')
elif sys.platform == 'win32':
retcode += GypTestFormat('ninja')
- retcode += GypTestFormat('msvs-2008', format='msvs', msvs_version='2008')
if os.environ['BUILDBOT_BUILDERNAME'] == 'gyp-win64':
retcode += GypTestFormat('msvs-2010', format='msvs', msvs_version='2010')
+ retcode += GypTestFormat('msvs-2012', format='msvs', msvs_version='2012')
else:
raise Exception('Unknown platform')
if retcode:
diff --git a/deps/npm/node_modules/node-gyp/gyp/data/win/large-pdb-shim.cc b/deps/npm/node_modules/node-gyp/gyp/data/win/large-pdb-shim.cc
new file mode 100644
index 000000000..8bca51081
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/gyp/data/win/large-pdb-shim.cc
@@ -0,0 +1,12 @@
+// Copyright (c) 2013 Google Inc. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// This file is used to generate an empty .pdb -- with a 4KB pagesize -- that is
+// then used during the final link for modules that have large PDBs. Otherwise,
+// the linker will generate a pdb with a page size of 1KB, which imposes a limit
+// of 1GB on the .pdb. By generating an initial empty .pdb with the compiler
+// (rather than the linker), this limit is avoided. With this in place PDBs may
+// grow to 2GB.
+//
+// This file is referenced by the msvs_large_pdb mechanism in MSVSUtil.py.
diff --git a/deps/npm/node_modules/node-gyp/gyp/gyp b/deps/npm/node_modules/node-gyp/gyp/gyp
index d52e7116f..b53a6dde8 100755
--- a/deps/npm/node_modules/node-gyp/gyp/gyp
+++ b/deps/npm/node_modules/node-gyp/gyp/gyp
@@ -1,18 +1,8 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2009 Google Inc. All rights reserved.
+#!/bin/bash
+# Copyright 2013 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
-import sys
-
-# TODO(mark): sys.path manipulation is some temporary testing stuff.
-try:
- import gyp
-except ImportError, e:
- import os.path
- sys.path.append(os.path.join(os.path.dirname(sys.argv[0]), 'pylib'))
- import gyp
-
-if __name__ == '__main__':
- sys.exit(gyp.main(sys.argv[1:]))
+set -e
+base=$(dirname "$0")
+exec python "${base}/gyp_main.py" "$@"
diff --git a/deps/npm/node_modules/node-gyp/gyp/gyp.bat b/deps/npm/node_modules/node-gyp/gyp/gyp.bat
index 90fbc6d30..c0b4ca24e 100755
--- a/deps/npm/node_modules/node-gyp/gyp/gyp.bat
+++ b/deps/npm/node_modules/node-gyp/gyp/gyp.bat
@@ -2,4 +2,4 @@
@rem Use of this source code is governed by a BSD-style license that can be
@rem found in the LICENSE file.
-@python "%~dp0/gyp" %*
+@python "%~dp0gyp_main.py" %*
diff --git a/deps/npm/node_modules/node-gyp/gyp/gyp_main.py b/deps/npm/node_modules/node-gyp/gyp/gyp_main.py
new file mode 100755
index 000000000..4ec872f0f
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/gyp/gyp_main.py
@@ -0,0 +1,18 @@
+#!/usr/bin/env python
+
+# Copyright (c) 2009 Google Inc. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+import sys
+
+# TODO(mark): sys.path manipulation is some temporary testing stuff.
+try:
+ import gyp
+except ImportError, e:
+ import os.path
+ sys.path.append(os.path.join(os.path.dirname(sys.argv[0]), 'pylib'))
+ import gyp
+
+if __name__ == '__main__':
+ sys.exit(gyp.script_main())
diff --git a/deps/npm/node_modules/node-gyp/gyp/gyptest.py b/deps/npm/node_modules/node-gyp/gyp/gyptest.py
index 6c6b00944..8f3ee0ffb 100755
--- a/deps/npm/node_modules/node-gyp/gyp/gyptest.py
+++ b/deps/npm/node_modules/node-gyp/gyp/gyptest.py
@@ -130,15 +130,18 @@ sys.stdout = Unbuffered(sys.stdout)
sys.stderr = Unbuffered(sys.stderr)
+def is_test_name(f):
+ return f.startswith('gyptest') and f.endswith('.py')
+
+
def find_all_gyptest_files(directory):
- result = []
- for root, dirs, files in os.walk(directory):
- if '.svn' in dirs:
- dirs.remove('.svn')
- result.extend([ os.path.join(root, f) for f in files
- if f.startswith('gyptest') and f.endswith('.py') ])
- result.sort()
- return result
+ result = []
+ for root, dirs, files in os.walk(directory):
+ if '.svn' in dirs:
+ dirs.remove('.svn')
+ result.extend([ os.path.join(root, f) for f in files if is_test_name(f) ])
+ result.sort()
+ return result
def main(argv=None):
@@ -173,7 +176,7 @@ def main(argv=None):
if opts.path:
extra_path = [os.path.abspath(p) for p in opts.path]
extra_path = os.pathsep.join(extra_path)
- os.environ['PATH'] += os.pathsep + extra_path
+ os.environ['PATH'] = extra_path + os.pathsep + os.environ['PATH']
if not args:
if not opts.all:
@@ -186,6 +189,9 @@ def main(argv=None):
if os.path.isdir(arg):
tests.extend(find_all_gyptest_files(os.path.normpath(arg)))
else:
+ if not is_test_name(os.path.basename(arg)):
+ print >>sys.stderr, arg, 'is not a valid gyp test name.'
+ sys.exit(1)
tests.append(arg)
if opts.list:
@@ -210,8 +216,10 @@ def main(argv=None):
else:
# TODO: not duplicate this mapping from pylib/gyp/__init__.py
format_list = {
+ 'aix5': ['make'],
'freebsd7': ['make'],
'freebsd8': ['make'],
+ 'openbsd5': ['make'],
'cygwin': ['msvs'],
'win32': ['msvs', 'ninja'],
'linux2': ['make', 'ninja'],
diff --git a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/MSVSNew.py b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/MSVSNew.py
index 253fe6198..845dcb063 100644
--- a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/MSVSNew.py
+++ b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/MSVSNew.py
@@ -2,7 +2,7 @@
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
-"""New implementation of Visual Studio project generation for SCons."""
+"""New implementation of Visual Studio project generation."""
import os
import random
@@ -325,14 +325,15 @@ class MSVSSolution:
f.write('\tEndGlobalSection\r\n')
# Folder mappings
- # TODO(rspangler): Should omit this section if there are no folders
- f.write('\tGlobalSection(NestedProjects) = preSolution\r\n')
- for e in all_entries:
- if not isinstance(e, MSVSFolder):
- continue # Does not apply to projects, only folders
- for subentry in e.entries:
- f.write('\t\t%s = %s\r\n' % (subentry.get_guid(), e.get_guid()))
- f.write('\tEndGlobalSection\r\n')
+ # Omit this section if there are no folders
+ if any([e.entries for e in all_entries if isinstance(e, MSVSFolder)]):
+ f.write('\tGlobalSection(NestedProjects) = preSolution\r\n')
+ for e in all_entries:
+ if not isinstance(e, MSVSFolder):
+ continue # Does not apply to projects, only folders
+ for subentry in e.entries:
+ f.write('\t\t%s = %s\r\n' % (subentry.get_guid(), e.get_guid()))
+ f.write('\tEndGlobalSection\r\n')
f.write('EndGlobal\r\n')
diff --git a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/MSVSSettings.py b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/MSVSSettings.py
index d0d499031..0c9532d8e 100644
--- a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/MSVSSettings.py
+++ b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/MSVSSettings.py
@@ -812,6 +812,8 @@ _Same(_link, 'UACExecutionLevel',
_Enumeration(['AsInvoker', # /level='asInvoker'
'HighestAvailable', # /level='highestAvailable'
'RequireAdministrator'])) # /level='requireAdministrator'
+_Same(_link, 'MinimumRequiredVersion', _string)
+_Same(_link, 'TreatLinkerWarningAsErrors', _boolean) # /WX
# Options found in MSVS that have been renamed in MSBuild.
@@ -834,8 +836,13 @@ _Moved(_link, 'UseLibraryDependencyInputs', 'ProjectReference', _boolean)
# MSVS options not found in MSBuild.
_MSVSOnly(_link, 'OptimizeForWindows98', _newly_boolean)
_MSVSOnly(_link, 'UseUnicodeResponseFiles', _boolean)
-# TODO(jeanluc) I don't think these are genuine settings but byproducts of Gyp.
+# These settings generate correctly in the MSVS output files when using
+# e.g. DelayLoadDLLs! or AdditionalDependencies! to exclude files from
+# configuration entries, but result in spurious artifacts which can be
+# safely ignored here. See crbug.com/246570
_MSVSOnly(_link, 'AdditionalLibraryDirectories_excluded', _folder_list)
+_MSVSOnly(_link, 'DelayLoadDLLs_excluded', _file_list)
+_MSVSOnly(_link, 'AdditionalDependencies_excluded', _file_list)
# MSBuild options not found in MSVS.
_MSBuildOnly(_link, 'BuildingInIDE', _boolean)
@@ -845,8 +852,6 @@ _MSBuildOnly(_link, 'LinkStatus', _boolean) # /LTCG:STATUS
_MSBuildOnly(_link, 'PreventDllBinding', _boolean) # /ALLOWBIND
_MSBuildOnly(_link, 'SupportNobindOfDelayLoadedDLL', _boolean) # /DELAY:NOBIND
_MSBuildOnly(_link, 'TrackerLogDirectory', _folder_name)
-_MSBuildOnly(_link, 'TreatLinkerWarningAsErrors', _boolean) # /WX
-_MSBuildOnly(_link, 'MinimumRequiredVersion', _string)
_MSBuildOnly(_link, 'MSDOSStubFileName', _file_name) # /STUB Visible='false'
_MSBuildOnly(_link, 'SectionAlignment', _integer) # /ALIGN
_MSBuildOnly(_link, 'SpecifySectionAttributes', _string) # /SECTION
@@ -980,6 +985,7 @@ _Same(_lib, 'OutputFile', _file_name) # /OUT
_Same(_lib, 'SuppressStartupBanner', _boolean) # /NOLOGO
_Same(_lib, 'UseUnicodeResponseFiles', _boolean)
_Same(_lib, 'LinkTimeCodeGeneration', _boolean) # /LTCG
+_Same(_lib, 'TargetMachine', _target_machine_enumeration)
# TODO(jeanluc) _link defines the same value that gets moved to
# ProjectReference. We may want to validate that they are consistent.
@@ -998,7 +1004,6 @@ _MSBuildOnly(_lib, 'MinimumRequiredVersion', _string)
_MSBuildOnly(_lib, 'Name', _file_name) # /NAME
_MSBuildOnly(_lib, 'RemoveObjects', _file_list) # /REMOVE
_MSBuildOnly(_lib, 'SubSystem', _subsystem_enumeration)
-_MSBuildOnly(_lib, 'TargetMachine', _target_machine_enumeration)
_MSBuildOnly(_lib, 'TrackerLogDirectory', _folder_name)
_MSBuildOnly(_lib, 'TreatLibWarningAsErrors', _boolean) # /WX
_MSBuildOnly(_lib, 'Verbose', _boolean)
diff --git a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/MSVSUtil.py b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/MSVSUtil.py
new file mode 100644
index 000000000..62e8d260d
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/MSVSUtil.py
@@ -0,0 +1,267 @@
+# Copyright (c) 2013 Google Inc. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+"""Utility functions shared amongst the Windows generators."""
+
+import copy
+import os
+
+
+_TARGET_TYPE_EXT = {
+ 'executable': '.exe',
+ 'loadable_module': '.dll',
+ 'shared_library': '.dll',
+}
+
+
+def _GetLargePdbShimCcPath():
+ """Returns the path of the large_pdb_shim.cc file."""
+ this_dir = os.path.abspath(os.path.dirname(__file__))
+ src_dir = os.path.abspath(os.path.join(this_dir, '..', '..'))
+ win_data_dir = os.path.join(src_dir, 'data', 'win')
+ large_pdb_shim_cc = os.path.join(win_data_dir, 'large-pdb-shim.cc')
+ return large_pdb_shim_cc
+
+
+def _DeepCopySomeKeys(in_dict, keys):
+ """Performs a partial deep-copy on |in_dict|, only copying the keys in |keys|.
+
+ Arguments:
+ in_dict: The dictionary to copy.
+ keys: The keys to be copied. If a key is in this list and doesn't exist in
+ |in_dict| this is not an error.
+ Returns:
+ The partially deep-copied dictionary.
+ """
+ d = {}
+ for key in keys:
+ if key not in in_dict:
+ continue
+ d[key] = copy.deepcopy(in_dict[key])
+ return d
+
+
+def _SuffixName(name, suffix):
+ """Add a suffix to the end of a target.
+
+ Arguments:
+ name: name of the target (foo#target)
+ suffix: the suffix to be added
+ Returns:
+ Target name with suffix added (foo_suffix#target)
+ """
+ parts = name.rsplit('#', 1)
+ parts[0] = '%s_%s' % (parts[0], suffix)
+ return '#'.join(parts)
+
+
+def _ShardName(name, number):
+ """Add a shard number to the end of a target.
+
+ Arguments:
+ name: name of the target (foo#target)
+ number: shard number
+ Returns:
+ Target name with shard added (foo_1#target)
+ """
+ return _SuffixName(name, str(number))
+
+
+def ShardTargets(target_list, target_dicts):
+ """Shard some targets apart to work around the linkers limits.
+
+ Arguments:
+ target_list: List of target pairs: 'base/base.gyp:base'.
+ target_dicts: Dict of target properties keyed on target pair.
+ Returns:
+ Tuple of the new sharded versions of the inputs.
+ """
+ # Gather the targets to shard, and how many pieces.
+ targets_to_shard = {}
+ for t in target_dicts:
+ shards = int(target_dicts[t].get('msvs_shard', 0))
+ if shards:
+ targets_to_shard[t] = shards
+ # Shard target_list.
+ new_target_list = []
+ for t in target_list:
+ if t in targets_to_shard:
+ for i in range(targets_to_shard[t]):
+ new_target_list.append(_ShardName(t, i))
+ else:
+ new_target_list.append(t)
+ # Shard target_dict.
+ new_target_dicts = {}
+ for t in target_dicts:
+ if t in targets_to_shard:
+ for i in range(targets_to_shard[t]):
+ name = _ShardName(t, i)
+ new_target_dicts[name] = copy.copy(target_dicts[t])
+ new_target_dicts[name]['target_name'] = _ShardName(
+ new_target_dicts[name]['target_name'], i)
+ sources = new_target_dicts[name].get('sources', [])
+ new_sources = []
+ for pos in range(i, len(sources), targets_to_shard[t]):
+ new_sources.append(sources[pos])
+ new_target_dicts[name]['sources'] = new_sources
+ else:
+ new_target_dicts[t] = target_dicts[t]
+ # Shard dependencies.
+ for t in new_target_dicts:
+ dependencies = copy.copy(new_target_dicts[t].get('dependencies', []))
+ new_dependencies = []
+ for d in dependencies:
+ if d in targets_to_shard:
+ for i in range(targets_to_shard[d]):
+ new_dependencies.append(_ShardName(d, i))
+ else:
+ new_dependencies.append(d)
+ new_target_dicts[t]['dependencies'] = new_dependencies
+
+ return (new_target_list, new_target_dicts)
+
+
+def _GetPdbPath(target_dict, config_name, vars):
+ """Returns the path to the PDB file that will be generated by a given
+ configuration.
+
+ The lookup proceeds as follows:
+ - Look for an explicit path in the VCLinkerTool configuration block.
+ - Look for an 'msvs_large_pdb_path' variable.
+ - Use '<(PRODUCT_DIR)/<(product_name).(exe|dll).pdb' if 'product_name' is
+ specified.
+ - Use '<(PRODUCT_DIR)/<(target_name).(exe|dll).pdb'.
+
+ Arguments:
+ target_dict: The target dictionary to be searched.
+ config_name: The name of the configuration of interest.
+ vars: A dictionary of common GYP variables with generator-specific values.
+ Returns:
+ The path of the corresponding PDB file.
+ """
+ config = target_dict['configurations'][config_name]
+ msvs = config.setdefault('msvs_settings', {})
+
+ linker = msvs.get('VCLinkerTool', {})
+
+ pdb_path = linker.get('ProgramDatabaseFile')
+ if pdb_path:
+ return pdb_path
+
+ variables = target_dict.get('variables', {})
+ pdb_path = variables.get('msvs_large_pdb_path', None)
+ if pdb_path:
+ return pdb_path
+
+
+ pdb_base = target_dict.get('product_name', target_dict['target_name'])
+ pdb_base = '%s%s.pdb' % (pdb_base, _TARGET_TYPE_EXT[target_dict['type']])
+ pdb_path = vars['PRODUCT_DIR'] + '/' + pdb_base
+
+ return pdb_path
+
+
+def InsertLargePdbShims(target_list, target_dicts, vars):
+ """Insert a shim target that forces the linker to use 4KB pagesize PDBs.
+
+ This is a workaround for targets with PDBs greater than 1GB in size, the
+ limit for the 1KB pagesize PDBs created by the linker by default.
+
+ Arguments:
+ target_list: List of target pairs: 'base/base.gyp:base'.
+ target_dicts: Dict of target properties keyed on target pair.
+ vars: A dictionary of common GYP variables with generator-specific values.
+ Returns:
+ Tuple of the shimmed version of the inputs.
+ """
+ # Determine which targets need shimming.
+ targets_to_shim = []
+ for t in target_dicts:
+ target_dict = target_dicts[t]
+
+ # We only want to shim targets that have msvs_large_pdb enabled.
+ if not int(target_dict.get('msvs_large_pdb', 0)):
+ continue
+ # This is intended for executable, shared_library and loadable_module
+ # targets where every configuration is set up to produce a PDB output.
+ # If any of these conditions is not true then the shim logic will fail
+ # below.
+ targets_to_shim.append(t)
+
+ large_pdb_shim_cc = _GetLargePdbShimCcPath()
+
+ for t in targets_to_shim:
+ target_dict = target_dicts[t]
+ target_name = target_dict.get('target_name')
+
+ base_dict = _DeepCopySomeKeys(target_dict,
+ ['configurations', 'default_configuration', 'toolset'])
+
+ # This is the dict for copying the source file (part of the GYP tree)
+ # to the intermediate directory of the project. This is necessary because
+ # we can't always build a relative path to the shim source file (on Windows
+ # GYP and the project may be on different drives), and Ninja hates absolute
+ # paths (it ends up generating the .obj and .obj.d alongside the source
+ # file, polluting GYPs tree).
+ copy_suffix = 'large_pdb_copy'
+ copy_target_name = target_name + '_' + copy_suffix
+ full_copy_target_name = _SuffixName(t, copy_suffix)
+ shim_cc_basename = os.path.basename(large_pdb_shim_cc)
+ shim_cc_dir = vars['SHARED_INTERMEDIATE_DIR'] + '/' + copy_target_name
+ shim_cc_path = shim_cc_dir + '/' + shim_cc_basename
+ copy_dict = copy.deepcopy(base_dict)
+ copy_dict['target_name'] = copy_target_name
+ copy_dict['type'] = 'none'
+ copy_dict['sources'] = [ large_pdb_shim_cc ]
+ copy_dict['copies'] = [{
+ 'destination': shim_cc_dir,
+ 'files': [ large_pdb_shim_cc ]
+ }]
+
+ # This is the dict for the PDB generating shim target. It depends on the
+ # copy target.
+ shim_suffix = 'large_pdb_shim'
+ shim_target_name = target_name + '_' + shim_suffix
+ full_shim_target_name = _SuffixName(t, shim_suffix)
+ shim_dict = copy.deepcopy(base_dict)
+ shim_dict['target_name'] = shim_target_name
+ shim_dict['type'] = 'static_library'
+ shim_dict['sources'] = [ shim_cc_path ]
+ shim_dict['dependencies'] = [ full_copy_target_name ]
+
+ # Set up the shim to output its PDB to the same location as the final linker
+ # target.
+ for config_name, config in shim_dict.get('configurations').iteritems():
+ pdb_path = _GetPdbPath(target_dict, config_name, vars)
+
+ # A few keys that we don't want to propagate.
+ for key in ['msvs_precompiled_header', 'msvs_precompiled_source', 'test']:
+ config.pop(key, None)
+
+ msvs = config.setdefault('msvs_settings', {})
+
+ # Update the compiler directives in the shim target.
+ compiler = msvs.setdefault('VCCLCompilerTool', {})
+ compiler['DebugInformationFormat'] = '3'
+ compiler['ProgramDataBaseFileName'] = pdb_path
+
+ # Set the explicit PDB path in the appropriate configuration of the
+ # original target.
+ config = target_dict['configurations'][config_name]
+ msvs = config.setdefault('msvs_settings', {})
+ linker = msvs.setdefault('VCLinkerTool', {})
+ linker['GenerateDebugInformation'] = 'true'
+ linker['ProgramDatabaseFile'] = pdb_path
+
+ # Add the new targets. They must go to the beginning of the list so that
+ # the dependency generation works as expected in ninja.
+ target_list.insert(0, full_copy_target_name)
+ target_list.insert(0, full_shim_target_name)
+ target_dicts[full_copy_target_name] = copy_dict
+ target_dicts[full_shim_target_name] = shim_dict
+
+ # Update the original target to depend on the shim target.
+ target_dict.setdefault('dependencies', []).append(full_shim_target_name)
+
+ return (target_list, target_dicts) \ No newline at end of file
diff --git a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/MSVSVersion.py b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/MSVSVersion.py
index 97caf6698..03b6d8ad4 100644
--- a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/MSVSVersion.py
+++ b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/MSVSVersion.py
@@ -1,4 +1,4 @@
-# Copyright (c) 2012 Google Inc. All rights reserved.
+# Copyright (c) 2013 Google Inc. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
@@ -10,6 +10,7 @@ import re
import subprocess
import sys
import gyp
+import glob
class VisualStudioVersion(object):
@@ -83,14 +84,23 @@ class VisualStudioVersion(object):
# vcvars32, which it can only find if VS??COMNTOOLS is set, which it
# isn't always.
if target_arch == 'x86':
+ if self.short_name == '2013' and (
+ os.environ.get('PROCESSOR_ARCHITECTURE') == 'AMD64' or
+ os.environ.get('PROCESSOR_ARCHITEW6432') == 'AMD64'):
+ # VS2013 non-Express has a x64-x86 cross that we want to prefer.
+ return [os.path.normpath(
+ os.path.join(self.path, 'VC/vcvarsall.bat')), 'amd64_x86']
+ # Otherwise, the standard x86 compiler.
return [os.path.normpath(
os.path.join(self.path, 'Common7/Tools/vsvars32.bat'))]
else:
assert target_arch == 'x64'
arg = 'x86_amd64'
- if (os.environ.get('PROCESSOR_ARCHITECTURE') == 'AMD64' or
+ # Use the 64-on-64 compiler if we're not using an express
+ # edition and we're running on a 64bit OS.
+ if self.short_name[-1] != 'e' and (
+ os.environ.get('PROCESSOR_ARCHITECTURE') == 'AMD64' or
os.environ.get('PROCESSOR_ARCHITEW6432') == 'AMD64'):
- # Use the 64-on-64 compiler if we can.
arg = 'amd64'
return [os.path.normpath(
os.path.join(self.path, 'VC/vcvarsall.bat')), arg]
@@ -197,6 +207,24 @@ def _CreateVersion(name, path, sdk_based=False):
if path:
path = os.path.normpath(path)
versions = {
+ '2013': VisualStudioVersion('2013',
+ 'Visual Studio 2013',
+ solution_version='13.00',
+ project_version='12.0',
+ flat_sln=False,
+ uses_vcxproj=True,
+ path=path,
+ sdk_based=sdk_based,
+ default_toolset='v120'),
+ '2013e': VisualStudioVersion('2013e',
+ 'Visual Studio 2013',
+ solution_version='13.00',
+ project_version='12.0',
+ flat_sln=True,
+ uses_vcxproj=True,
+ path=path,
+ sdk_based=sdk_based,
+ default_toolset='v120'),
'2012': VisualStudioVersion('2012',
'Visual Studio 2012',
solution_version='12.00',
@@ -224,7 +252,7 @@ def _CreateVersion(name, path, sdk_based=False):
path=path,
sdk_based=sdk_based),
'2010e': VisualStudioVersion('2010e',
- 'Visual Studio 2010',
+ 'Visual C++ Express 2010',
solution_version='11.00',
project_version='4.0',
flat_sln=True,
@@ -288,10 +316,16 @@ def _DetectVisualStudioVersions(versions_to_check, force_express):
2008(e) - Visual Studio 2008 (9)
2010(e) - Visual Studio 2010 (10)
2012(e) - Visual Studio 2012 (11)
+ 2013(e) - Visual Studio 2013 (11)
Where (e) is e for express editions of MSVS and blank otherwise.
"""
version_to_year = {
- '8.0': '2005', '9.0': '2008', '10.0': '2010', '11.0': '2012'}
+ '8.0': '2005',
+ '9.0': '2008',
+ '10.0': '2010',
+ '11.0': '2012',
+ '12.0': '2013',
+ }
versions = []
for version in versions_to_check:
# Old method of searching for which VS version is installed
@@ -308,13 +342,13 @@ def _DetectVisualStudioVersions(versions_to_check, force_express):
path = _ConvertToCygpath(path)
# Check for full.
full_path = os.path.join(path, 'devenv.exe')
- express_path = os.path.join(path, 'vcexpress.exe')
+ express_path = os.path.join(path, '*express.exe')
if not force_express and os.path.exists(full_path):
# Add this one.
versions.append(_CreateVersion(version_to_year[version],
os.path.join(path, '..', '..')))
# Check for express.
- elif os.path.exists(express_path):
+ elif glob.glob(express_path):
# Add this one.
versions.append(_CreateVersion(version_to_year[version] + 'e',
os.path.join(path, '..', '..')))
@@ -345,7 +379,7 @@ def SelectVisualStudioVersion(version='auto'):
if version == 'auto':
version = os.environ.get('GYP_MSVS_VERSION', 'auto')
version_map = {
- 'auto': ('10.0', '9.0', '8.0', '11.0'),
+ 'auto': ('10.0', '12.0', '9.0', '8.0', '11.0'),
'2005': ('8.0',),
'2005e': ('8.0',),
'2008': ('9.0',),
@@ -354,7 +388,16 @@ def SelectVisualStudioVersion(version='auto'):
'2010e': ('10.0',),
'2012': ('11.0',),
'2012e': ('11.0',),
+ '2013': ('12.0',),
+ '2013e': ('12.0',),
}
+ override_path = os.environ.get('GYP_MSVS_OVERRIDE_PATH')
+ if override_path:
+ msvs_version = os.environ.get('GYP_MSVS_VERSION')
+ if not msvs_version:
+ raise ValueError('GYP_MSVS_OVERRIDE_PATH requires GYP_MSVS_VERSION to be '
+ 'set to a particular version (e.g. 2010e).')
+ return _CreateVersion(msvs_version, override_path, sdk_based=True)
version = str(version)
versions = _DetectVisualStudioVersions(version_map[version], 'e' in version)
if not versions:
diff --git a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/SCons.py b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/SCons.py
deleted file mode 100644
index 42d845ebe..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/SCons.py
+++ /dev/null
@@ -1,199 +0,0 @@
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-SCons generator.
-
-This contains class definitions and supporting functions for generating
-pieces of SCons files for the different types of GYP targets.
-"""
-
-import os
-
-
-def WriteList(fp, list, prefix='',
- separator=',\n ',
- preamble=None,
- postamble=None):
- fp.write(preamble or '')
- fp.write((separator or ' ').join([prefix + l for l in list]))
- fp.write(postamble or '')
-
-
-class TargetBase(object):
- """
- Base class for a SCons representation of a GYP target.
- """
- is_ignored = False
- target_prefix = ''
- target_suffix = ''
- def __init__(self, spec):
- self.spec = spec
- def full_product_name(self):
- """
- Returns the full name of the product being built:
-
- * Uses 'product_name' if it's set, else prefix + 'target_name'.
- * Prepends 'product_dir' if set.
- * Appends SCons suffix variables for the target type (or
- product_extension).
- """
- suffix = self.target_suffix
- product_extension = self.spec.get('product_extension')
- if product_extension:
- suffix = '.' + product_extension
- prefix = self.spec.get('product_prefix', self.target_prefix)
- name = self.spec['target_name']
- name = prefix + self.spec.get('product_name', name) + suffix
- product_dir = self.spec.get('product_dir')
- if product_dir:
- name = os.path.join(product_dir, name)
- else:
- name = os.path.join(self.out_dir, name)
- return name
-
- def write_input_files(self, fp):
- """
- Writes the definition of the input files (sources).
- """
- sources = self.spec.get('sources')
- if not sources:
- fp.write('\ninput_files = []\n')
- return
- preamble = '\ninput_files = [\n '
- postamble = ',\n]\n'
- WriteList(fp, map(repr, sources), preamble=preamble, postamble=postamble)
-
- def builder_call(self):
- """
- Returns the actual SCons builder call to build this target.
- """
- name = self.full_product_name()
- return 'env.%s(env.File(%r), input_files)' % (self.builder_name, name)
- def write_target(self, fp, src_dir='', pre=''):
- """
- Writes the lines necessary to build this target.
- """
- fp.write('\n' + pre)
- fp.write('_outputs = %s\n' % self.builder_call())
- fp.write('target_files.extend(_outputs)\n')
-
-
-class NoneTarget(TargetBase):
- """
- A GYP target type of 'none', implicitly or explicitly.
- """
- def write_target(self, fp, src_dir='', pre=''):
- fp.write('\ntarget_files.extend(input_files)\n')
-
-
-class SettingsTarget(TargetBase):
- """
- A GYP target type of 'settings'.
- """
- is_ignored = True
-
-
-compilable_sources_template = """
-_result = []
-for infile in input_files:
- if env.compilable(infile):
- if (type(infile) == type('')
- and (infile.startswith(%(src_dir)r)
- or not os.path.isabs(env.subst(infile)))):
- # Force files below the build directory by replacing all '..'
- # elements in the path with '__':
- base, ext = os.path.splitext(os.path.normpath(infile))
- base = [d == '..' and '__' or d for d in base.split('/')]
- base = os.path.join(*base)
- object = '${OBJ_DIR}/${COMPONENT_NAME}/${TARGET_NAME}/' + base
- if not infile.startswith(%(src_dir)r):
- infile = %(src_dir)r + infile
- infile = env.%(name)s(object, infile)[0]
- else:
- infile = env.%(name)s(infile)[0]
- _result.append(infile)
-input_files = _result
-"""
-
-class CompilableSourcesTargetBase(TargetBase):
- """
- An abstract base class for targets that compile their source files.
-
- We explicitly transform compilable files into object files,
- even though SCons could infer that for us, because we want
- to control where the object file ends up. (The implicit rules
- in SCons always put the object file next to the source file.)
- """
- intermediate_builder_name = None
- def write_target(self, fp, src_dir='', pre=''):
- if self.intermediate_builder_name is None:
- raise NotImplementedError
- if src_dir and not src_dir.endswith('/'):
- src_dir += '/'
- variables = {
- 'src_dir': src_dir,
- 'name': self.intermediate_builder_name,
- }
- fp.write(compilable_sources_template % variables)
- super(CompilableSourcesTargetBase, self).write_target(fp)
-
-
-class ProgramTarget(CompilableSourcesTargetBase):
- """
- A GYP target type of 'executable'.
- """
- builder_name = 'GypProgram'
- intermediate_builder_name = 'StaticObject'
- target_prefix = '${PROGPREFIX}'
- target_suffix = '${PROGSUFFIX}'
- out_dir = '${TOP_BUILDDIR}'
-
-
-class StaticLibraryTarget(CompilableSourcesTargetBase):
- """
- A GYP target type of 'static_library'.
- """
- builder_name = 'GypStaticLibrary'
- intermediate_builder_name = 'StaticObject'
- target_prefix = '${LIBPREFIX}'
- target_suffix = '${LIBSUFFIX}'
- out_dir = '${LIB_DIR}'
-
-
-class SharedLibraryTarget(CompilableSourcesTargetBase):
- """
- A GYP target type of 'shared_library'.
- """
- builder_name = 'GypSharedLibrary'
- intermediate_builder_name = 'SharedObject'
- target_prefix = '${SHLIBPREFIX}'
- target_suffix = '${SHLIBSUFFIX}'
- out_dir = '${LIB_DIR}'
-
-
-class LoadableModuleTarget(CompilableSourcesTargetBase):
- """
- A GYP target type of 'loadable_module'.
- """
- builder_name = 'GypLoadableModule'
- intermediate_builder_name = 'SharedObject'
- target_prefix = '${SHLIBPREFIX}'
- target_suffix = '${SHLIBSUFFIX}'
- out_dir = '${TOP_BUILDDIR}'
-
-
-TargetMap = {
- None : NoneTarget,
- 'none' : NoneTarget,
- 'settings' : SettingsTarget,
- 'executable' : ProgramTarget,
- 'static_library' : StaticLibraryTarget,
- 'shared_library' : SharedLibraryTarget,
- 'loadable_module' : LoadableModuleTarget,
-}
-
-
-def Target(spec):
- return TargetMap[spec.get('type')](spec)
diff --git a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/__init__.py b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/__init__.py
index ac300a903..30edea567 100755
--- a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/__init__.py
+++ b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/__init__.py
@@ -23,8 +23,8 @@ DEBUG_VARIABLES = 'variables'
DEBUG_INCLUDES = 'includes'
-def DebugOutput(mode, message):
- if 'all' in gyp.debug.keys() or mode in gyp.debug.keys():
+def DebugOutput(mode, message, *args):
+ if 'all' in gyp.debug or mode in gyp.debug:
ctx = ('unknown', 0, 'unknown')
try:
f = traceback.extract_stack(limit=2)
@@ -32,6 +32,8 @@ def DebugOutput(mode, message):
ctx = f[0][:3]
except:
pass
+ if args:
+ message %= args
print '%s:%s:%d:%s %s' % (mode.upper(), os.path.basename(ctx[0]),
ctx[1], ctx[2], message)
@@ -104,10 +106,6 @@ def Load(build_files, format, default_variables={},
# so we can default things and the generators only have to provide what
# they need.
generator_input_info = {
- 'generator_wants_absolute_build_file_paths':
- getattr(generator, 'generator_wants_absolute_build_file_paths', False),
- 'generator_handles_variants':
- getattr(generator, 'generator_handles_variants', False),
'non_configuration_keys':
getattr(generator, 'generator_additional_non_configuration_keys', []),
'path_sections':
@@ -121,12 +119,14 @@ def Load(build_files, format, default_variables={},
'generator_wants_static_library_dependencies_adjusted', True),
'generator_wants_sorted_dependencies':
getattr(generator, 'generator_wants_sorted_dependencies', False),
+ 'generator_filelist_paths':
+ getattr(generator, 'generator_filelist_paths', None),
}
# Process the input specific to this generator.
result = gyp.input.Load(build_files, default_variables, includes[:],
depth, generator_input_info, check, circular_check,
- params['parallel'])
+ params['parallel'], params['root_targets'])
return [generator] + result
def NameValueListToDict(name_value_list):
@@ -281,26 +281,26 @@ def gyp_main(args):
parser = RegeneratableOptionParser()
usage = 'usage: %s [options ...] [build_file ...]'
parser.set_usage(usage.replace('%s', '%prog'))
+ parser.add_option('--build', dest='configs', action='append',
+ help='configuration for build after project generation')
+ parser.add_option('--check', dest='check', action='store_true',
+ help='check format of gyp files')
+ parser.add_option('--config-dir', dest='config_dir', action='store',
+ env_name='GYP_CONFIG_DIR', default=None,
+ help='The location for configuration files like '
+ 'include.gypi.')
+ parser.add_option('-d', '--debug', dest='debug', metavar='DEBUGMODE',
+ action='append', default=[], help='turn on a debugging '
+ 'mode for debugging GYP. Supported modes are "variables", '
+ '"includes" and "general" or "all" for all of them.')
parser.add_option('-D', dest='defines', action='append', metavar='VAR=VAL',
env_name='GYP_DEFINES',
help='sets variable VAR to value VAL')
+ parser.add_option('--depth', dest='depth', metavar='PATH', type='path',
+ help='set DEPTH gyp variable to a relative path to PATH')
parser.add_option('-f', '--format', dest='formats', action='append',
env_name='GYP_GENERATORS', regenerate=False,
help='output formats to generate')
- parser.add_option('--msvs-version', dest='msvs_version',
- regenerate=False,
- help='Deprecated; use -G msvs_version=MSVS_VERSION instead')
- parser.add_option('-I', '--include', dest='includes', action='append',
- metavar='INCLUDE', type='path',
- help='files to include in all loaded .gyp files')
- parser.add_option('--depth', dest='depth', metavar='PATH', type='path',
- help='set DEPTH gyp variable to a relative path to PATH')
- parser.add_option('-d', '--debug', dest='debug', metavar='DEBUGMODE',
- action='append', default=[], help='turn on a debugging '
- 'mode for debugging GYP. Supported modes are "variables", '
- '"includes" and "general" or "all" for all of them.')
- parser.add_option('-S', '--suffix', dest='suffix', default='',
- help='suffix to add to generated files')
parser.add_option('-G', dest='generator_flags', action='append', default=[],
metavar='FLAG=VAL', env_name='GYP_GENERATOR_FLAGS',
help='sets generator flag FLAG to VAL')
@@ -311,16 +311,9 @@ def gyp_main(args):
parser.add_option('--ignore-environment', dest='use_environment',
action='store_false', default=True, regenerate=False,
help='do not read options from environment variables')
- parser.add_option('--check', dest='check', action='store_true',
- help='check format of gyp files')
- parser.add_option('--parallel', action='store_true',
- env_name='GYP_PARALLEL',
- help='Use multiprocessing for speed (experimental)')
- parser.add_option('--toplevel-dir', dest='toplevel_dir', action='store',
- default=None, metavar='DIR', type='path',
- help='directory to use as the root of the source tree')
- parser.add_option('--build', dest='configs', action='append',
- help='configuration for build after project generation')
+ parser.add_option('-I', '--include', dest='includes', action='append',
+ metavar='INCLUDE', type='path',
+ help='files to include in all loaded .gyp files')
# --no-circular-check disables the check for circular relationships between
# .gyp files. These relationships should not exist, but they've only been
# observed to be harmful with the Xcode generator. Chromium's .gyp files
@@ -331,27 +324,47 @@ def gyp_main(args):
parser.add_option('--no-circular-check', dest='circular_check',
action='store_false', default=True, regenerate=False,
help="don't check for circular relationships between files")
-
- # We read a few things from ~/.gyp, so set up a var for that.
- home_vars = ['HOME']
- if sys.platform in ('cygwin', 'win32'):
- home_vars.append('USERPROFILE')
- home = None
- home_dot_gyp = None
- for home_var in home_vars:
- home = os.getenv(home_var)
- if home != None:
- home_dot_gyp = os.path.join(home, '.gyp')
- if not os.path.exists(home_dot_gyp):
- home_dot_gyp = None
- else:
- break
-
- # TODO(thomasvl): add support for ~/.gyp/defaults
+ parser.add_option('--no-parallel', action='store_true', default=False,
+ help='Disable multiprocessing')
+ parser.add_option('-S', '--suffix', dest='suffix', default='',
+ help='suffix to add to generated files')
+ parser.add_option('--toplevel-dir', dest='toplevel_dir', action='store',
+ default=None, metavar='DIR', type='path',
+ help='directory to use as the root of the source tree')
+ parser.add_option('-R', '--root-target', dest='root_targets',
+ action='append', metavar='TARGET',
+ help='include only TARGET and its deep dependencies')
options, build_files_arg = parser.parse_args(args)
build_files = build_files_arg
+ # Set up the configuration directory (defaults to ~/.gyp)
+ if not options.config_dir:
+ home = None
+ home_dot_gyp = None
+ if options.use_environment:
+ home_dot_gyp = os.environ.get('GYP_CONFIG_DIR', None)
+ if home_dot_gyp:
+ home_dot_gyp = os.path.expanduser(home_dot_gyp)
+
+ if not home_dot_gyp:
+ home_vars = ['HOME']
+ if sys.platform in ('cygwin', 'win32'):
+ home_vars.append('USERPROFILE')
+ for home_var in home_vars:
+ home = os.getenv(home_var)
+ if home != None:
+ home_dot_gyp = os.path.join(home, '.gyp')
+ if not os.path.exists(home_dot_gyp):
+ home_dot_gyp = None
+ else:
+ break
+ else:
+ home_dot_gyp = os.path.expanduser(options.config_dir)
+
+ if home_dot_gyp and not os.path.exists(home_dot_gyp):
+ home_dot_gyp = None
+
if not options.formats:
# If no format was given on the command line, then check the env variable.
generate_formats = []
@@ -375,22 +388,21 @@ def gyp_main(args):
if g_o:
options.generator_output = g_o
- if not options.parallel and options.use_environment:
- options.parallel = bool(os.environ.get('GYP_PARALLEL'))
+ options.parallel = not options.no_parallel
for mode in options.debug:
gyp.debug[mode] = 1
# Do an extra check to avoid work when we're not debugging.
- if DEBUG_GENERAL in gyp.debug.keys():
+ if DEBUG_GENERAL in gyp.debug:
DebugOutput(DEBUG_GENERAL, 'running with these options:')
for option, value in sorted(options.__dict__.items()):
if option[0] == '_':
continue
if isinstance(value, basestring):
- DebugOutput(DEBUG_GENERAL, " %s: '%s'" % (option, value))
+ DebugOutput(DEBUG_GENERAL, " %s: '%s'", option, value)
else:
- DebugOutput(DEBUG_GENERAL, " %s: %s" % (option, str(value)))
+ DebugOutput(DEBUG_GENERAL, " %s: %s", option, value)
if not build_files:
build_files = FindBuildFiles()
@@ -440,9 +452,9 @@ def gyp_main(args):
if options.defines:
defines += options.defines
cmdline_default_variables = NameValueListToDict(defines)
- if DEBUG_GENERAL in gyp.debug.keys():
+ if DEBUG_GENERAL in gyp.debug:
DebugOutput(DEBUG_GENERAL,
- "cmdline_default_variables: %s" % cmdline_default_variables)
+ "cmdline_default_variables: %s", cmdline_default_variables)
# Set up includes.
includes = []
@@ -468,16 +480,7 @@ def gyp_main(args):
gen_flags += options.generator_flags
generator_flags = NameValueListToDict(gen_flags)
if DEBUG_GENERAL in gyp.debug.keys():
- DebugOutput(DEBUG_GENERAL, "generator_flags: %s" % generator_flags)
-
- # TODO: Remove this and the option after we've gotten folks to move to the
- # generator flag.
- if options.msvs_version:
- print >>sys.stderr, \
- 'DEPRECATED: Use generator flag (-G msvs_version=' + \
- options.msvs_version + ') instead of --msvs-version=' + \
- options.msvs_version
- generator_flags['msvs_version'] = options.msvs_version
+ DebugOutput(DEBUG_GENERAL, "generator_flags: %s", generator_flags)
# Generate all requested formats (use a set in case we got one format request
# twice)
@@ -489,7 +492,8 @@ def gyp_main(args):
'build_files_arg': build_files_arg,
'gyp_binary': sys.argv[0],
'home_dot_gyp': home_dot_gyp,
- 'parallel': options.parallel}
+ 'parallel': options.parallel,
+ 'root_targets': options.root_targets}
# Start with the default variables from the command line.
[generator, flat_list, targets, data] = Load(build_files, format,
@@ -525,5 +529,9 @@ def main(args):
sys.stderr.write("gyp: %s\n" % e)
return 1
+# NOTE: setuptools generated console_scripts calls function with no arguments
+def script_main():
+ return main(sys.argv[1:])
+
if __name__ == '__main__':
- sys.exit(main(sys.argv[1:]))
+ sys.exit(script_main())
diff --git a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/common.py b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/common.py
index 4f2ae56e3..f9c6c6f3a 100644
--- a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/common.py
+++ b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/common.py
@@ -44,6 +44,14 @@ def ExceptionAppend(e, msg):
e.args = (str(e.args[0]) + ' ' + msg,) + e.args[1:]
+def FindQualifiedTargets(target, qualified_list):
+ """
+ Given a list of qualified targets, return the qualified targets for the
+ specified |target|.
+ """
+ return [t for t in qualified_list if ParseQualifiedTarget(t)[1] == target]
+
+
def ParseQualifiedTarget(target):
# Splits a qualified target into a build file, target name and toolset.
@@ -127,9 +135,16 @@ def RelativePath(path, relative_to):
# directory, returns a relative path that identifies path relative to
# relative_to.
- # Convert to absolute (and therefore normalized paths).
- path = os.path.abspath(path)
- relative_to = os.path.abspath(relative_to)
+ # Convert to normalized (and therefore absolute paths).
+ path = os.path.realpath(path)
+ relative_to = os.path.realpath(relative_to)
+
+ # On Windows, we can't create a relative path to a different drive, so just
+ # use the absolute path.
+ if sys.platform == 'win32':
+ if (os.path.splitdrive(path)[0].lower() !=
+ os.path.splitdrive(relative_to)[0].lower()):
+ return path
# Split the paths into components.
path_split = path.split(os.path.sep)
@@ -151,6 +166,20 @@ def RelativePath(path, relative_to):
return os.path.join(*relative_split)
+@memoize
+def InvertRelativePath(path, toplevel_dir=None):
+ """Given a path like foo/bar that is relative to toplevel_dir, return
+ the inverse relative path back to the toplevel_dir.
+
+ E.g. os.path.normpath(os.path.join(path, InvertRelativePath(path)))
+ should always produce the empty string, unless the path contains symlinks.
+ """
+ if not path:
+ return path
+ toplevel_dir = '.' if toplevel_dir is None else toplevel_dir
+ return RelativePath(toplevel_dir, os.path.join(toplevel_dir, path))
+
+
def FixIfRelativePath(path, relative_to):
# Like RelativePath but returns |path| unchanged if it is absolute.
if os.path.isabs(path):
@@ -362,6 +391,14 @@ def WriteOnDiff(filename):
return Writer()
+def EnsureDirExists(path):
+ """Make sure the directory for |path| exists."""
+ try:
+ os.makedirs(os.path.dirname(path))
+ except OSError:
+ pass
+
+
def GetFlavor(params):
"""Returns |params.flavor| if it's set, the system's default flavor else."""
flavors = {
@@ -378,14 +415,25 @@ def GetFlavor(params):
return 'solaris'
if sys.platform.startswith('freebsd'):
return 'freebsd'
+ if sys.platform.startswith('openbsd'):
+ return 'openbsd'
+ if sys.platform.startswith('aix'):
+ return 'aix'
return 'linux'
def CopyTool(flavor, out_path):
- """Finds (mac|sun|win)_tool.gyp in the gyp directory and copies it
+ """Finds (flock|mac|win)_tool.gyp in the gyp directory and copies it
to |out_path|."""
- prefix = { 'solaris': 'sun', 'mac': 'mac', 'win': 'win' }.get(flavor, None)
+ # aix and solaris just need flock emulation. mac and win use more complicated
+ # support scripts.
+ prefix = {
+ 'aix': 'flock',
+ 'solaris': 'flock',
+ 'mac': 'mac',
+ 'win': 'win'
+ }.get(flavor, None)
if not prefix:
return
diff --git a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/common_test.py b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/common_test.py
index dac29692b..ad6f9a143 100755
--- a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/common_test.py
+++ b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/common_test.py
@@ -58,6 +58,7 @@ class TestGetFlavor(unittest.TestCase):
def test_platform_default(self):
self.assertFlavor('freebsd', 'freebsd9' , {})
self.assertFlavor('freebsd', 'freebsd10', {})
+ self.assertFlavor('openbsd', 'openbsd5' , {})
self.assertFlavor('solaris', 'sunos5' , {});
self.assertFlavor('solaris', 'sunos' , {});
self.assertFlavor('linux' , 'linux2' , {});
diff --git a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/flock_tool.py b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/flock_tool.py
new file mode 100755
index 000000000..3e7efff26
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/flock_tool.py
@@ -0,0 +1,49 @@
+#!/usr/bin/env python
+# Copyright (c) 2011 Google Inc. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+"""These functions are executed via gyp-flock-tool when using the Makefile
+generator. Used on systems that don't have a built-in flock."""
+
+import fcntl
+import os
+import struct
+import subprocess
+import sys
+
+
+def main(args):
+ executor = FlockTool()
+ executor.Dispatch(args)
+
+
+class FlockTool(object):
+ """This class emulates the 'flock' command."""
+ def Dispatch(self, args):
+ """Dispatches a string command to a method."""
+ if len(args) < 1:
+ raise Exception("Not enough arguments")
+
+ method = "Exec%s" % self._CommandifyName(args[0])
+ getattr(self, method)(*args[1:])
+
+ def _CommandifyName(self, name_string):
+ """Transforms a tool name like copy-info-plist to CopyInfoPlist"""
+ return name_string.title().replace('-', '')
+
+ def ExecFlock(self, lockfile, *cmd_list):
+ """Emulates the most basic behavior of Linux's flock(1)."""
+ # Rely on exception handling to report errors.
+ # Note that the stock python on SunOS has a bug
+ # where fcntl.flock(fd, LOCK_EX) always fails
+ # with EBADF, that's why we use this F_SETLK
+ # hack instead.
+ fd = os.open(lockfile, os.O_WRONLY|os.O_NOCTTY|os.O_CREAT, 0666)
+ op = struct.pack('hhllhhl', fcntl.F_WRLCK, 0, 0, 0, 0, 0, 0)
+ fcntl.fcntl(fd, fcntl.F_SETLK, op)
+ return subprocess.call(cmd_list)
+
+
+if __name__ == '__main__':
+ sys.exit(main(sys.argv[1:]))
diff --git a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/android.py b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/android.py
index f7c31bd0d..41346e2b1 100644
--- a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/android.py
+++ b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/android.py
@@ -19,6 +19,7 @@ import gyp.common
import gyp.generator.make as make # Reuse global functions from make backend.
import os
import re
+import subprocess
generator_default_variables = {
'OS': 'android',
@@ -38,7 +39,7 @@ generator_default_variables = {
'RULE_INPUT_PATH': '$(RULE_SOURCES)',
'RULE_INPUT_EXT': '$(suffix $<)',
'RULE_INPUT_NAME': '$(notdir $<)',
- 'CONFIGURATION_NAME': 'NOT_USED_ON_ANDROID',
+ 'CONFIGURATION_NAME': '$(GYP_CONFIGURATION)',
}
# Make supports multiple toolsets
@@ -131,25 +132,27 @@ class AndroidMkWriter(object):
def __init__(self, android_top_dir):
self.android_top_dir = android_top_dir
- def Write(self, qualified_target, base_path, output_filename, spec, configs,
- part_of_all):
+ def Write(self, qualified_target, relative_target, base_path, output_filename,
+ spec, configs, part_of_all):
"""The main entry point: writes a .mk file for a single target.
Arguments:
qualified_target: target we're generating
+ relative_target: qualified target name relative to the root
base_path: path relative to source root we're building in, used to resolve
target-relative paths
output_filename: output .mk file name to write
spec, configs: gyp info
part_of_all: flag indicating this target is part of 'all'
"""
- make.ensure_directory_exists(output_filename)
+ gyp.common.EnsureDirExists(output_filename)
self.fp = open(output_filename, 'w')
self.fp.write(header)
self.qualified_target = qualified_target
+ self.relative_target = relative_target
self.path = base_path
self.target = spec['target_name']
self.type = spec['type']
@@ -248,7 +251,7 @@ class AndroidMkWriter(object):
actions)
"""
for action in actions:
- name = make.StringToMakefileVariable('%s_%s' % (self.qualified_target,
+ name = make.StringToMakefileVariable('%s_%s' % (self.relative_target,
action['action_name']))
self.WriteLn('### Rules for action "%s":' % action['action_name'])
inputs = action['inputs']
@@ -289,11 +292,18 @@ class AndroidMkWriter(object):
main_output = make.QuoteSpaces(self.LocalPathify(outputs[0]))
self.WriteLn('%s: gyp_local_path := $(LOCAL_PATH)' % main_output)
self.WriteLn('%s: gyp_intermediate_dir := '
- '$(GYP_ABS_ANDROID_TOP_DIR)/$(gyp_intermediate_dir)' %
- main_output)
+ '$(abspath $(gyp_intermediate_dir))' % main_output)
self.WriteLn('%s: gyp_shared_intermediate_dir := '
- '$(GYP_ABS_ANDROID_TOP_DIR)/$(gyp_shared_intermediate_dir)' %
- main_output)
+ '$(abspath $(gyp_shared_intermediate_dir))' % main_output)
+
+ # Android's envsetup.sh adds a number of directories to the path including
+ # the built host binary directory. This causes actions/rules invoked by
+ # gyp to sometimes use these instead of system versions, e.g. bison.
+ # The built host binaries may not be suitable, and can cause errors.
+ # So, we remove them from the PATH using the ANDROID_BUILD_PATHS variable
+ # set by envsetup.
+ self.WriteLn('%s: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))'
+ % main_output)
for input in inputs:
assert ' ' not in input, (
@@ -334,7 +344,7 @@ class AndroidMkWriter(object):
if len(rule.get('rule_sources', [])) == 0:
continue
did_write_rule = True
- name = make.StringToMakefileVariable('%s_%s' % (self.qualified_target,
+ name = make.StringToMakefileVariable('%s_%s' % (self.relative_target,
rule['rule_name']))
self.WriteLn('\n### Generated for rule "%s":' % name)
self.WriteLn('# "%s":' % rule)
@@ -382,11 +392,13 @@ class AndroidMkWriter(object):
main_output = outputs[0]
self.WriteLn('%s: gyp_local_path := $(LOCAL_PATH)' % main_output)
self.WriteLn('%s: gyp_intermediate_dir := '
- '$(GYP_ABS_ANDROID_TOP_DIR)/$(gyp_intermediate_dir)'
- % main_output)
+ '$(abspath $(gyp_intermediate_dir))' % main_output)
self.WriteLn('%s: gyp_shared_intermediate_dir := '
- '$(GYP_ABS_ANDROID_TOP_DIR)/$(gyp_shared_intermediate_dir)'
- % main_output)
+ '$(abspath $(gyp_shared_intermediate_dir))' % main_output)
+
+ # See explanation in WriteActions.
+ self.WriteLn('%s: export PATH := '
+ '$(subst $(ANDROID_BUILD_PATHS),,$(PATH))' % main_output)
main_output_deps = self.LocalPathify(rule_source)
if inputs:
@@ -397,7 +409,9 @@ class AndroidMkWriter(object):
(main_output, main_output_deps))
self.WriteLn('\t%s\n' % command)
for output in outputs[1:]:
- self.WriteLn('%s: %s' % (output, main_output))
+ # Make each output depend on the main output, with an empty command
+ # to force make to notice that the mtime has changed.
+ self.WriteLn('%s: %s ;' % (output, main_output))
self.WriteLn('.PHONY: %s' % (rule_trigger))
self.WriteLn('%s: %s' % (rule_trigger, main_output))
self.WriteLn('')
@@ -415,7 +429,7 @@ class AndroidMkWriter(object):
"""
self.WriteLn('### Generated for copy rule.')
- variable = make.StringToMakefileVariable(self.qualified_target + '_copies')
+ variable = make.StringToMakefileVariable(self.relative_target + '_copies')
outputs = []
for copy in copies:
for path in copy['files']:
@@ -438,7 +452,7 @@ class AndroidMkWriter(object):
(output, path))
self.WriteLn('\t@echo Copying: $@')
self.WriteLn('\t$(hide) mkdir -p $(dir $@)')
- self.WriteLn('\t$(hide) $(ACP) -r $< $@')
+ self.WriteLn('\t$(hide) $(ACP) -rpf $< $@')
self.WriteLn()
outputs.append(output)
self.WriteLn('%s = %s' % (variable,
@@ -454,42 +468,39 @@ class AndroidMkWriter(object):
Args:
spec, configs: input from gyp.
"""
- config = configs[spec['default_configuration']]
- extracted_includes = []
-
- self.WriteLn('\n# Flags passed to both C and C++ files.')
- cflags, includes_from_cflags = self.ExtractIncludesFromCFlags(
- config.get('cflags'))
- extracted_includes.extend(includes_from_cflags)
- self.WriteList(cflags, 'MY_CFLAGS')
-
- cflags_c, includes_from_cflags_c = self.ExtractIncludesFromCFlags(
- config.get('cflags_c'))
- extracted_includes.extend(includes_from_cflags_c)
- self.WriteList(cflags_c, 'MY_CFLAGS_C')
-
- self.WriteList(config.get('defines'), 'MY_DEFS', prefix='-D',
- quoter=make.EscapeCppDefine)
- self.WriteLn('LOCAL_CFLAGS := $(MY_CFLAGS_C) $(MY_CFLAGS) $(MY_DEFS)')
-
+ for configname, config in sorted(configs.iteritems()):
+ extracted_includes = []
+
+ self.WriteLn('\n# Flags passed to both C and C++ files.')
+ cflags, includes_from_cflags = self.ExtractIncludesFromCFlags(
+ config.get('cflags', []) + config.get('cflags_c', []))
+ extracted_includes.extend(includes_from_cflags)
+ self.WriteList(cflags, 'MY_CFLAGS_%s' % configname)
+
+ self.WriteList(config.get('defines'), 'MY_DEFS_%s' % configname,
+ prefix='-D', quoter=make.EscapeCppDefine)
+
+ self.WriteLn('\n# Include paths placed before CFLAGS/CPPFLAGS')
+ includes = list(config.get('include_dirs', []))
+ includes.extend(extracted_includes)
+ includes = map(Sourceify, map(self.LocalPathify, includes))
+ includes = self.NormalizeIncludePaths(includes)
+ self.WriteList(includes, 'LOCAL_C_INCLUDES_%s' % configname)
+
+ self.WriteLn('\n# Flags passed to only C++ (and not C) files.')
+ self.WriteList(config.get('cflags_cc'), 'LOCAL_CPPFLAGS_%s' % configname)
+
+ self.WriteLn('\nLOCAL_CFLAGS := $(MY_CFLAGS_$(GYP_CONFIGURATION)) '
+ '$(MY_DEFS_$(GYP_CONFIGURATION))')
# Undefine ANDROID for host modules
- # TODO: the source code should not use macro ANDROID to tell if it's host or
- # target module.
+ # TODO: the source code should not use macro ANDROID to tell if it's host
+ # or target module.
if self.toolset == 'host':
self.WriteLn('# Undefine ANDROID for host modules')
self.WriteLn('LOCAL_CFLAGS += -UANDROID')
-
- self.WriteLn('\n# Include paths placed before CFLAGS/CPPFLAGS')
- includes = list(config.get('include_dirs', []))
- includes.extend(extracted_includes)
- includes = map(Sourceify, map(self.LocalPathify, includes))
- includes = self.NormalizeIncludePaths(includes)
- self.WriteList(includes, 'LOCAL_C_INCLUDES')
self.WriteLn('LOCAL_C_INCLUDES := $(GYP_COPIED_SOURCE_ORIGIN_DIRS) '
- '$(LOCAL_C_INCLUDES)')
-
- self.WriteLn('\n# Flags passed to only C++ (and not C) files.')
- self.WriteList(config.get('cflags_cc'), 'LOCAL_CPPFLAGS')
+ '$(LOCAL_C_INCLUDES_$(GYP_CONFIGURATION))')
+ self.WriteLn('LOCAL_CPPFLAGS := $(LOCAL_CPPFLAGS_$(GYP_CONFIGURATION))')
def WriteSources(self, spec, configs, extra_sources):
@@ -682,24 +693,6 @@ class AndroidMkWriter(object):
assert spec.get('product_dir') is None # TODO: not supported?
return os.path.join(path, self.ComputeOutputBasename(spec))
-
- def NormalizeLdFlags(self, ld_flags):
- """ Clean up ldflags from gyp file.
- Remove any ldflags that contain android_top_dir.
-
- Args:
- ld_flags: ldflags from gyp files.
-
- Returns:
- clean ldflags
- """
- clean_ldflags = []
- for flag in ld_flags:
- if self.android_top_dir in flag:
- continue
- clean_ldflags.append(flag)
- return clean_ldflags
-
def NormalizeIncludePaths(self, include_paths):
""" Normalize include_paths.
Convert absolute paths to relative to the Android top directory;
@@ -731,12 +724,11 @@ class AndroidMkWriter(object):
"""
clean_cflags = []
include_paths = []
- if cflags:
- for flag in cflags:
- if flag.startswith('-I'):
- include_paths.append(flag[2:])
- else:
- clean_cflags.append(flag)
+ for flag in cflags:
+ if flag.startswith('-I'):
+ include_paths.append(flag[2:])
+ else:
+ clean_cflags.append(flag)
return (clean_cflags, include_paths)
@@ -800,14 +792,11 @@ class AndroidMkWriter(object):
spec, configs: input from gyp.
link_deps: link dependency list; see ComputeDeps()
"""
- config = configs[spec['default_configuration']]
-
- # LDFLAGS
- ldflags = list(config.get('ldflags', []))
- static_flags, dynamic_flags = self.ComputeAndroidLibraryModuleNames(
- ldflags)
- self.WriteLn('')
- self.WriteList(self.NormalizeLdFlags(ldflags), 'LOCAL_LDFLAGS')
+ for configname, config in sorted(configs.iteritems()):
+ ldflags = list(config.get('ldflags', []))
+ self.WriteLn('')
+ self.WriteList(ldflags, 'LOCAL_LDFLAGS_%s' % configname)
+ self.WriteLn('\nLOCAL_LDFLAGS := $(LOCAL_LDFLAGS_$(GYP_CONFIGURATION))')
# Libraries (i.e. -lfoo)
libraries = gyp.common.uniquer(spec.get('libraries', []))
@@ -818,12 +807,12 @@ class AndroidMkWriter(object):
static_link_deps = [x[1] for x in link_deps if x[0] == 'static']
shared_link_deps = [x[1] for x in link_deps if x[0] == 'shared']
self.WriteLn('')
- self.WriteList(static_flags + static_libs + static_link_deps,
+ self.WriteList(static_libs + static_link_deps,
'LOCAL_STATIC_LIBRARIES')
self.WriteLn('# Enable grouping to fix circular references')
self.WriteLn('LOCAL_GROUP_STATIC_LIBRARIES := true')
self.WriteLn('')
- self.WriteList(dynamic_flags + dynamic_libs + shared_link_deps,
+ self.WriteList(dynamic_libs + shared_link_deps,
'LOCAL_SHARED_LIBRARIES')
@@ -940,30 +929,16 @@ class AndroidMkWriter(object):
return path
-def WriteAutoRegenerationRule(params, root_makefile, makefile_name,
- build_files):
- """Write the target to regenerate the Makefile."""
+def PerformBuild(data, configurations, params):
+ # The android backend only supports the default configuration.
options = params['options']
- # Sort to avoid non-functional changes to makefile.
- build_files = sorted([os.path.join('$(LOCAL_PATH)', f) for f in build_files])
- build_files_args = [gyp.common.RelativePath(filename, options.toplevel_dir)
- for filename in params['build_files_arg']]
- build_files_args = [os.path.join('$(PRIVATE_LOCAL_PATH)', f)
- for f in build_files_args]
- gyp_binary = gyp.common.FixIfRelativePath(params['gyp_binary'],
- options.toplevel_dir)
- makefile_path = os.path.join('$(LOCAL_PATH)', makefile_name)
- if not gyp_binary.startswith(os.sep):
- gyp_binary = os.path.join('.', gyp_binary)
- root_makefile.write('GYP_FILES := \\\n %s\n\n' %
- '\\\n '.join(map(Sourceify, build_files)))
- root_makefile.write('%s: PRIVATE_LOCAL_PATH := $(LOCAL_PATH)\n' %
- makefile_path)
- root_makefile.write('%s: $(GYP_FILES)\n' % makefile_path)
- root_makefile.write('\techo ACTION Regenerating $@\n\t%s\n\n' %
- gyp.common.EncodePOSIXShellList([gyp_binary, '-fandroid'] +
- gyp.RegenerateFlags(options) +
- build_files_args))
+ makefile = os.path.abspath(os.path.join(options.toplevel_dir,
+ 'GypAndroid.mk'))
+ env = dict(os.environ)
+ env['ONE_SHOT_MAKEFILE'] = makefile
+ arguments = ['make', '-C', os.environ['ANDROID_BUILD_TOP'], 'gyp_all_modules']
+ print 'Building: %s' % arguments
+ subprocess.check_call(arguments, env=env)
def GenerateOutput(target_list, target_dicts, data, params):
@@ -1004,11 +979,11 @@ def GenerateOutput(target_list, target_dicts, data, params):
default_configuration = 'Default'
srcdir = '.'
- makefile_name = 'GypAndroid.mk' + options.suffix
+ makefile_name = 'GypAndroid' + options.suffix + '.mk'
makefile_path = os.path.join(options.toplevel_dir, makefile_name)
assert not options.generator_output, (
'The Android backend does not support options.generator_output.')
- make.ensure_directory_exists(makefile_path)
+ gyp.common.EnsureDirExists(makefile_path)
root_makefile = open(makefile_path, 'w')
root_makefile.write(header)
@@ -1030,7 +1005,9 @@ def GenerateOutput(target_list, target_dicts, data, params):
for qualified_target in target_list:
build_file, target, toolset = gyp.common.ParseQualifiedTarget(
qualified_target)
- build_files.add(gyp.common.RelativePath(build_file, options.toplevel_dir))
+ relative_build_file = gyp.common.RelativePath(build_file,
+ options.toplevel_dir)
+ build_files.add(relative_build_file)
included_files = data[build_file]['included_files']
for included_file in included_files:
# The included_files entries are relative to the dir of the build file
@@ -1058,9 +1035,13 @@ def GenerateOutput(target_list, target_dicts, data, params):
not int(spec.get('suppress_wildcard', False)))
if limit_to_target_all and not part_of_all:
continue
+
+ relative_target = gyp.common.QualifiedTarget(relative_build_file, target,
+ toolset)
writer = AndroidMkWriter(android_top_dir)
- android_module = writer.Write(qualified_target, base_path, output_file,
- spec, configs, part_of_all=part_of_all)
+ android_module = writer.Write(qualified_target, relative_target, base_path,
+ output_file, spec, configs,
+ part_of_all=part_of_all)
if android_module in android_modules:
print ('ERROR: Android module names must be unique. The following '
'targets both generate Android module name %s.\n %s\n %s' %
@@ -1075,8 +1056,7 @@ def GenerateOutput(target_list, target_dicts, data, params):
os.path.dirname(makefile_path))
include_list.add(mkfile_rel_path)
- # Some tools need to know the absolute path of the top directory.
- root_makefile.write('GYP_ABS_ANDROID_TOP_DIR := $(shell pwd)\n')
+ root_makefile.write('GYP_CONFIGURATION ?= %s\n' % default_configuration)
# Write out the sorted list of includes.
root_makefile.write('\n')
@@ -1084,9 +1064,6 @@ def GenerateOutput(target_list, target_dicts, data, params):
root_makefile.write('include $(LOCAL_PATH)/' + include_file + '\n')
root_makefile.write('\n')
- if generator_flags.get('auto_regeneration', True):
- WriteAutoRegenerationRule(params, root_makefile, makefile_name, build_files)
-
root_makefile.write(SHARED_FOOTER)
root_makefile.close()
diff --git a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/cmake.py b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/cmake.py
new file mode 100644
index 000000000..10d015ee8
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/cmake.py
@@ -0,0 +1,1143 @@
+# Copyright (c) 2013 Google Inc. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+"""cmake output module
+
+This module is under development and should be considered experimental.
+
+This module produces cmake (2.8.8+) input as its output. One CMakeLists.txt is
+created for each configuration.
+
+This module's original purpose was to support editing in IDEs like KDevelop
+which use CMake for project management. It is also possible to use CMake to
+generate projects for other IDEs such as eclipse cdt and code::blocks. QtCreator
+will convert the CMakeLists.txt to a code::blocks cbp for the editor to read,
+but build using CMake. As a result QtCreator editor is unaware of compiler
+defines. The generated CMakeLists.txt can also be used to build on Linux. There
+is currently no support for building on platforms other than Linux.
+
+The generated CMakeLists.txt should properly compile all projects. However,
+there is a mismatch between gyp and cmake with regard to linking. All attempts
+are made to work around this, but CMake sometimes sees -Wl,--start-group as a
+library and incorrectly repeats it. As a result the output of this generator
+should not be relied on for building.
+
+When using with kdevelop, use version 4.4+. Previous versions of kdevelop will
+not be able to find the header file directories described in the generated
+CMakeLists.txt file.
+"""
+
+import multiprocessing
+import os
+import signal
+import string
+import subprocess
+import gyp.common
+
+generator_default_variables = {
+ 'EXECUTABLE_PREFIX': '',
+ 'EXECUTABLE_SUFFIX': '',
+ 'STATIC_LIB_PREFIX': 'lib',
+ 'STATIC_LIB_SUFFIX': '.a',
+ 'SHARED_LIB_PREFIX': 'lib',
+ 'SHARED_LIB_SUFFIX': '.so',
+ 'SHARED_LIB_DIR': '${builddir}/lib.${TOOLSET}',
+ 'LIB_DIR': '${obj}.${TOOLSET}',
+ 'INTERMEDIATE_DIR': '${obj}.${TOOLSET}/${TARGET}/geni',
+ 'SHARED_INTERMEDIATE_DIR': '${obj}/gen',
+ 'PRODUCT_DIR': '${builddir}',
+ 'RULE_INPUT_PATH': '${RULE_INPUT_PATH}',
+ 'RULE_INPUT_DIRNAME': '${RULE_INPUT_DIRNAME}',
+ 'RULE_INPUT_NAME': '${RULE_INPUT_NAME}',
+ 'RULE_INPUT_ROOT': '${RULE_INPUT_ROOT}',
+ 'RULE_INPUT_EXT': '${RULE_INPUT_EXT}',
+ 'CONFIGURATION_NAME': '${configuration}',
+}
+
+FULL_PATH_VARS = ('${CMAKE_SOURCE_DIR}', '${builddir}', '${obj}')
+
+generator_supports_multiple_toolsets = True
+generator_wants_static_library_dependencies_adjusted = True
+
+COMPILABLE_EXTENSIONS = {
+ '.c': 'cc',
+ '.cc': 'cxx',
+ '.cpp': 'cxx',
+ '.cxx': 'cxx',
+ '.s': 's', # cc
+ '.S': 's', # cc
+}
+
+
+def RemovePrefix(a, prefix):
+ """Returns 'a' without 'prefix' if it starts with 'prefix'."""
+ return a[len(prefix):] if a.startswith(prefix) else a
+
+
+def CalculateVariables(default_variables, params):
+ """Calculate additional variables for use in the build (called by gyp)."""
+ default_variables.setdefault('OS', gyp.common.GetFlavor(params))
+
+
+def Compilable(filename):
+ """Return true if the file is compilable (should be in OBJS)."""
+ return any(filename.endswith(e) for e in COMPILABLE_EXTENSIONS)
+
+
+def Linkable(filename):
+ """Return true if the file is linkable (should be on the link line)."""
+ return filename.endswith('.o')
+
+
+def NormjoinPathForceCMakeSource(base_path, rel_path):
+ """Resolves rel_path against base_path and returns the result.
+
+ If rel_path is an absolute path it is returned unchanged.
+ Otherwise it is resolved against base_path and normalized.
+ If the result is a relative path, it is forced to be relative to the
+ CMakeLists.txt.
+ """
+ if os.path.isabs(rel_path):
+ return rel_path
+ if any([rel_path.startswith(var) for var in FULL_PATH_VARS]):
+ return rel_path
+ # TODO: do we need to check base_path for absolute variables as well?
+ return os.path.join('${CMAKE_SOURCE_DIR}',
+ os.path.normpath(os.path.join(base_path, rel_path)))
+
+
+def NormjoinPath(base_path, rel_path):
+ """Resolves rel_path against base_path and returns the result.
+ TODO: what is this really used for?
+ If rel_path begins with '$' it is returned unchanged.
+ Otherwise it is resolved against base_path if relative, then normalized.
+ """
+ if rel_path.startswith('$') and not rel_path.startswith('${configuration}'):
+ return rel_path
+ return os.path.normpath(os.path.join(base_path, rel_path))
+
+
+def CMakeStringEscape(a):
+ """Escapes the string 'a' for use inside a CMake string.
+
+ This means escaping
+ '\' otherwise it may be seen as modifying the next character
+ '"' otherwise it will end the string
+ ';' otherwise the string becomes a list
+
+ The following do not need to be escaped
+ '#' when the lexer is in string state, this does not start a comment
+
+ The following are yet unknown
+ '$' generator variables (like ${obj}) must not be escaped,
+ but text $ should be escaped
+ what is wanted is to know which $ come from generator variables
+ """
+ return a.replace('\\', '\\\\').replace(';', '\\;').replace('"', '\\"')
+
+
+def SetFileProperty(output, source_name, property_name, values, sep):
+ """Given a set of source file, sets the given property on them."""
+ output.write('set_source_files_properties(')
+ output.write(source_name)
+ output.write(' PROPERTIES ')
+ output.write(property_name)
+ output.write(' "')
+ for value in values:
+ output.write(CMakeStringEscape(value))
+ output.write(sep)
+ output.write('")\n')
+
+
+def SetFilesProperty(output, source_names, property_name, values, sep):
+ """Given a set of source files, sets the given property on them."""
+ output.write('set_source_files_properties(\n')
+ for source_name in source_names:
+ output.write(' ')
+ output.write(source_name)
+ output.write('\n')
+ output.write(' PROPERTIES\n ')
+ output.write(property_name)
+ output.write(' "')
+ for value in values:
+ output.write(CMakeStringEscape(value))
+ output.write(sep)
+ output.write('"\n)\n')
+
+
+def SetTargetProperty(output, target_name, property_name, values, sep=''):
+ """Given a target, sets the given property."""
+ output.write('set_target_properties(')
+ output.write(target_name)
+ output.write(' PROPERTIES ')
+ output.write(property_name)
+ output.write(' "')
+ for value in values:
+ output.write(CMakeStringEscape(value))
+ output.write(sep)
+ output.write('")\n')
+
+
+def SetVariable(output, variable_name, value):
+ """Sets a CMake variable."""
+ output.write('set(')
+ output.write(variable_name)
+ output.write(' "')
+ output.write(CMakeStringEscape(value))
+ output.write('")\n')
+
+
+def SetVariableList(output, variable_name, values):
+ """Sets a CMake variable to a list."""
+ if not values:
+ return SetVariable(output, variable_name, "")
+ if len(values) == 1:
+ return SetVariable(output, variable_name, values[0])
+ output.write('list(APPEND ')
+ output.write(variable_name)
+ output.write('\n "')
+ output.write('"\n "'.join([CMakeStringEscape(value) for value in values]))
+ output.write('")\n')
+
+
+def UnsetVariable(output, variable_name):
+ """Unsets a CMake variable."""
+ output.write('unset(')
+ output.write(variable_name)
+ output.write(')\n')
+
+
+def WriteVariable(output, variable_name, prepend=None):
+ if prepend:
+ output.write(prepend)
+ output.write('${')
+ output.write(variable_name)
+ output.write('}')
+
+
+class CMakeTargetType:
+ def __init__(self, command, modifier, property_modifier):
+ self.command = command
+ self.modifier = modifier
+ self.property_modifier = property_modifier
+
+
+cmake_target_type_from_gyp_target_type = {
+ 'executable': CMakeTargetType('add_executable', None, 'RUNTIME'),
+ 'static_library': CMakeTargetType('add_library', 'STATIC', 'ARCHIVE'),
+ 'shared_library': CMakeTargetType('add_library', 'SHARED', 'LIBRARY'),
+ 'loadable_module': CMakeTargetType('add_library', 'MODULE', 'LIBRARY'),
+ 'none': CMakeTargetType('add_custom_target', 'SOURCES', None),
+}
+
+
+def StringToCMakeTargetName(a):
+ """Converts the given string 'a' to a valid CMake target name.
+
+ All invalid characters are replaced by '_'.
+ Invalid for cmake: ' ', '/', '(', ')'
+ Invalid for make: ':'
+ Invalid for unknown reasons but cause failures: '.'
+ """
+ return a.translate(string.maketrans(' /():.', '______'))
+
+
+def WriteActions(target_name, actions, extra_sources, extra_deps,
+ path_to_gyp, output):
+ """Write CMake for the 'actions' in the target.
+
+ Args:
+ target_name: the name of the CMake target being generated.
+ actions: the Gyp 'actions' dict for this target.
+ extra_sources: [(<cmake_src>, <src>)] to append with generated source files.
+ extra_deps: [<cmake_taget>] to append with generated targets.
+ path_to_gyp: relative path from CMakeLists.txt being generated to
+ the Gyp file in which the target being generated is defined.
+ """
+ for action in actions:
+ action_name = StringToCMakeTargetName(action['action_name'])
+ action_target_name = '%s__%s' % (target_name, action_name)
+
+ inputs = action['inputs']
+ inputs_name = action_target_name + '__input'
+ SetVariableList(output, inputs_name,
+ [NormjoinPathForceCMakeSource(path_to_gyp, dep) for dep in inputs])
+
+ outputs = action['outputs']
+ cmake_outputs = [NormjoinPathForceCMakeSource(path_to_gyp, out)
+ for out in outputs]
+ outputs_name = action_target_name + '__output'
+ SetVariableList(output, outputs_name, cmake_outputs)
+
+ # Build up a list of outputs.
+ # Collect the output dirs we'll need.
+ dirs = set(dir for dir in (os.path.dirname(o) for o in outputs) if dir)
+
+ if int(action.get('process_outputs_as_sources', False)):
+ extra_sources.extend(zip(cmake_outputs, outputs))
+
+ # add_custom_command
+ output.write('add_custom_command(OUTPUT ')
+ WriteVariable(output, outputs_name)
+ output.write('\n')
+
+ if len(dirs) > 0:
+ for directory in dirs:
+ output.write(' COMMAND ${CMAKE_COMMAND} -E make_directory ')
+ output.write(directory)
+ output.write('\n')
+
+ output.write(' COMMAND ')
+ output.write(gyp.common.EncodePOSIXShellList(action['action']))
+ output.write('\n')
+
+ output.write(' DEPENDS ')
+ WriteVariable(output, inputs_name)
+ output.write('\n')
+
+ output.write(' WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/')
+ output.write(path_to_gyp)
+ output.write('\n')
+
+ output.write(' COMMENT ')
+ if 'message' in action:
+ output.write(action['message'])
+ else:
+ output.write(action_target_name)
+ output.write('\n')
+
+ output.write(' VERBATIM\n')
+ output.write(')\n')
+
+ # add_custom_target
+ output.write('add_custom_target(')
+ output.write(action_target_name)
+ output.write('\n DEPENDS ')
+ WriteVariable(output, outputs_name)
+ output.write('\n SOURCES ')
+ WriteVariable(output, inputs_name)
+ output.write('\n)\n')
+
+ extra_deps.append(action_target_name)
+
+
+def NormjoinRulePathForceCMakeSource(base_path, rel_path, rule_source):
+ if rel_path.startswith(("${RULE_INPUT_PATH}","${RULE_INPUT_DIRNAME}")):
+ if any([rule_source.startswith(var) for var in FULL_PATH_VARS]):
+ return rel_path
+ return NormjoinPathForceCMakeSource(base_path, rel_path)
+
+
+def WriteRules(target_name, rules, extra_sources, extra_deps,
+ path_to_gyp, output):
+ """Write CMake for the 'rules' in the target.
+
+ Args:
+ target_name: the name of the CMake target being generated.
+ actions: the Gyp 'actions' dict for this target.
+ extra_sources: [(<cmake_src>, <src>)] to append with generated source files.
+ extra_deps: [<cmake_taget>] to append with generated targets.
+ path_to_gyp: relative path from CMakeLists.txt being generated to
+ the Gyp file in which the target being generated is defined.
+ """
+ for rule in rules:
+ rule_name = StringToCMakeTargetName(target_name + '__' + rule['rule_name'])
+
+ inputs = rule.get('inputs', [])
+ inputs_name = rule_name + '__input'
+ SetVariableList(output, inputs_name,
+ [NormjoinPathForceCMakeSource(path_to_gyp, dep) for dep in inputs])
+ outputs = rule['outputs']
+ var_outputs = []
+
+ for count, rule_source in enumerate(rule.get('rule_sources', [])):
+ action_name = rule_name + '_' + str(count)
+
+ rule_source_dirname, rule_source_basename = os.path.split(rule_source)
+ rule_source_root, rule_source_ext = os.path.splitext(rule_source_basename)
+
+ SetVariable(output, 'RULE_INPUT_PATH', rule_source)
+ SetVariable(output, 'RULE_INPUT_DIRNAME', rule_source_dirname)
+ SetVariable(output, 'RULE_INPUT_NAME', rule_source_basename)
+ SetVariable(output, 'RULE_INPUT_ROOT', rule_source_root)
+ SetVariable(output, 'RULE_INPUT_EXT', rule_source_ext)
+
+ # Build up a list of outputs.
+ # Collect the output dirs we'll need.
+ dirs = set(dir for dir in (os.path.dirname(o) for o in outputs) if dir)
+
+ # Create variables for the output, as 'local' variable will be unset.
+ these_outputs = []
+ for output_index, out in enumerate(outputs):
+ output_name = action_name + '_' + str(output_index)
+ SetVariable(output, output_name,
+ NormjoinRulePathForceCMakeSource(path_to_gyp, out,
+ rule_source))
+ if int(rule.get('process_outputs_as_sources', False)):
+ extra_sources.append(('${' + output_name + '}', out))
+ these_outputs.append('${' + output_name + '}')
+ var_outputs.append('${' + output_name + '}')
+
+ # add_custom_command
+ output.write('add_custom_command(OUTPUT\n')
+ for out in these_outputs:
+ output.write(' ')
+ output.write(out)
+ output.write('\n')
+
+ for directory in dirs:
+ output.write(' COMMAND ${CMAKE_COMMAND} -E make_directory ')
+ output.write(directory)
+ output.write('\n')
+
+ output.write(' COMMAND ')
+ output.write(gyp.common.EncodePOSIXShellList(rule['action']))
+ output.write('\n')
+
+ output.write(' DEPENDS ')
+ WriteVariable(output, inputs_name)
+ output.write(' ')
+ output.write(NormjoinPath(path_to_gyp, rule_source))
+ output.write('\n')
+
+ # CMAKE_SOURCE_DIR is where the CMakeLists.txt lives.
+ # The cwd is the current build directory.
+ output.write(' WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/')
+ output.write(path_to_gyp)
+ output.write('\n')
+
+ output.write(' COMMENT ')
+ if 'message' in rule:
+ output.write(rule['message'])
+ else:
+ output.write(action_name)
+ output.write('\n')
+
+ output.write(' VERBATIM\n')
+ output.write(')\n')
+
+ UnsetVariable(output, 'RULE_INPUT_PATH')
+ UnsetVariable(output, 'RULE_INPUT_DIRNAME')
+ UnsetVariable(output, 'RULE_INPUT_NAME')
+ UnsetVariable(output, 'RULE_INPUT_ROOT')
+ UnsetVariable(output, 'RULE_INPUT_EXT')
+
+ # add_custom_target
+ output.write('add_custom_target(')
+ output.write(rule_name)
+ output.write(' DEPENDS\n')
+ for out in var_outputs:
+ output.write(' ')
+ output.write(out)
+ output.write('\n')
+ output.write('SOURCES ')
+ WriteVariable(output, inputs_name)
+ output.write('\n')
+ for rule_source in rule.get('rule_sources', []):
+ output.write(' ')
+ output.write(NormjoinPath(path_to_gyp, rule_source))
+ output.write('\n')
+ output.write(')\n')
+
+ extra_deps.append(rule_name)
+
+
+def WriteCopies(target_name, copies, extra_deps, path_to_gyp, output):
+ """Write CMake for the 'copies' in the target.
+
+ Args:
+ target_name: the name of the CMake target being generated.
+ actions: the Gyp 'actions' dict for this target.
+ extra_deps: [<cmake_taget>] to append with generated targets.
+ path_to_gyp: relative path from CMakeLists.txt being generated to
+ the Gyp file in which the target being generated is defined.
+ """
+ copy_name = target_name + '__copies'
+
+ # CMake gets upset with custom targets with OUTPUT which specify no output.
+ have_copies = any(copy['files'] for copy in copies)
+ if not have_copies:
+ output.write('add_custom_target(')
+ output.write(copy_name)
+ output.write(')\n')
+ extra_deps.append(copy_name)
+ return
+
+ class Copy:
+ def __init__(self, ext, command):
+ self.cmake_inputs = []
+ self.cmake_outputs = []
+ self.gyp_inputs = []
+ self.gyp_outputs = []
+ self.ext = ext
+ self.inputs_name = None
+ self.outputs_name = None
+ self.command = command
+
+ file_copy = Copy('', 'copy')
+ dir_copy = Copy('_dirs', 'copy_directory')
+
+ for copy in copies:
+ files = copy['files']
+ destination = copy['destination']
+ for src in files:
+ path = os.path.normpath(src)
+ basename = os.path.split(path)[1]
+ dst = os.path.join(destination, basename)
+
+ copy = file_copy if os.path.basename(src) else dir_copy
+
+ copy.cmake_inputs.append(NormjoinPath(path_to_gyp, src))
+ copy.cmake_outputs.append(NormjoinPathForceCMakeSource(path_to_gyp, dst))
+ copy.gyp_inputs.append(src)
+ copy.gyp_outputs.append(dst)
+
+ for copy in (file_copy, dir_copy):
+ if copy.cmake_inputs:
+ copy.inputs_name = copy_name + '__input' + copy.ext
+ SetVariableList(output, copy.inputs_name, copy.cmake_inputs)
+
+ copy.outputs_name = copy_name + '__output' + copy.ext
+ SetVariableList(output, copy.outputs_name, copy.cmake_outputs)
+
+ # add_custom_command
+ output.write('add_custom_command(\n')
+
+ output.write('OUTPUT')
+ for copy in (file_copy, dir_copy):
+ if copy.outputs_name:
+ WriteVariable(output, copy.outputs_name, ' ')
+ output.write('\n')
+
+ for copy in (file_copy, dir_copy):
+ for src, dst in zip(copy.gyp_inputs, copy.gyp_outputs):
+ # 'cmake -E copy src dst' will create the 'dst' directory if needed.
+ output.write('COMMAND ${CMAKE_COMMAND} -E %s ' % copy.command)
+ output.write(src)
+ output.write(' ')
+ output.write(dst)
+ output.write("\n")
+
+ output.write('DEPENDS')
+ for copy in (file_copy, dir_copy):
+ if copy.inputs_name:
+ WriteVariable(output, copy.inputs_name, ' ')
+ output.write('\n')
+
+ output.write('WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/')
+ output.write(path_to_gyp)
+ output.write('\n')
+
+ output.write('COMMENT Copying for ')
+ output.write(target_name)
+ output.write('\n')
+
+ output.write('VERBATIM\n')
+ output.write(')\n')
+
+ # add_custom_target
+ output.write('add_custom_target(')
+ output.write(copy_name)
+ output.write('\n DEPENDS')
+ for copy in (file_copy, dir_copy):
+ if copy.outputs_name:
+ WriteVariable(output, copy.outputs_name, ' ')
+ output.write('\n SOURCES')
+ if file_copy.inputs_name:
+ WriteVariable(output, file_copy.inputs_name, ' ')
+ output.write('\n)\n')
+
+ extra_deps.append(copy_name)
+
+
+def CreateCMakeTargetBaseName(qualified_target):
+ """This is the name we would like the target to have."""
+ _, gyp_target_name, gyp_target_toolset = (
+ gyp.common.ParseQualifiedTarget(qualified_target))
+ cmake_target_base_name = gyp_target_name
+ if gyp_target_toolset and gyp_target_toolset != 'target':
+ cmake_target_base_name += '_' + gyp_target_toolset
+ return StringToCMakeTargetName(cmake_target_base_name)
+
+
+def CreateCMakeTargetFullName(qualified_target):
+ """An unambiguous name for the target."""
+ gyp_file, gyp_target_name, gyp_target_toolset = (
+ gyp.common.ParseQualifiedTarget(qualified_target))
+ cmake_target_full_name = gyp_file + ':' + gyp_target_name
+ if gyp_target_toolset and gyp_target_toolset != 'target':
+ cmake_target_full_name += '_' + gyp_target_toolset
+ return StringToCMakeTargetName(cmake_target_full_name)
+
+
+class CMakeNamer(object):
+ """Converts Gyp target names into CMake target names.
+
+ CMake requires that target names be globally unique. One way to ensure
+ this is to fully qualify the names of the targets. Unfortunatly, this
+ ends up with all targets looking like "chrome_chrome_gyp_chrome" instead
+ of just "chrome". If this generator were only interested in building, it
+ would be possible to fully qualify all target names, then create
+ unqualified target names which depend on all qualified targets which
+ should have had that name. This is more or less what the 'make' generator
+ does with aliases. However, one goal of this generator is to create CMake
+ files for use with IDEs, and fully qualified names are not as user
+ friendly.
+
+ Since target name collision is rare, we do the above only when required.
+
+ Toolset variants are always qualified from the base, as this is required for
+ building. However, it also makes sense for an IDE, as it is possible for
+ defines to be different.
+ """
+ def __init__(self, target_list):
+ self.cmake_target_base_names_conficting = set()
+
+ cmake_target_base_names_seen = set()
+ for qualified_target in target_list:
+ cmake_target_base_name = CreateCMakeTargetBaseName(qualified_target)
+
+ if cmake_target_base_name not in cmake_target_base_names_seen:
+ cmake_target_base_names_seen.add(cmake_target_base_name)
+ else:
+ self.cmake_target_base_names_conficting.add(cmake_target_base_name)
+
+ def CreateCMakeTargetName(self, qualified_target):
+ base_name = CreateCMakeTargetBaseName(qualified_target)
+ if base_name in self.cmake_target_base_names_conficting:
+ return CreateCMakeTargetFullName(qualified_target)
+ return base_name
+
+
+def WriteTarget(namer, qualified_target, target_dicts, build_dir, config_to_use,
+ options, generator_flags, all_qualified_targets, output):
+
+ # The make generator does this always.
+ # TODO: It would be nice to be able to tell CMake all dependencies.
+ circular_libs = generator_flags.get('circular', True)
+
+ if not generator_flags.get('standalone', False):
+ output.write('\n#')
+ output.write(qualified_target)
+ output.write('\n')
+
+ gyp_file, _, _ = gyp.common.ParseQualifiedTarget(qualified_target)
+ rel_gyp_file = gyp.common.RelativePath(gyp_file, options.toplevel_dir)
+ rel_gyp_dir = os.path.dirname(rel_gyp_file)
+
+ # Relative path from build dir to top dir.
+ build_to_top = gyp.common.InvertRelativePath(build_dir, options.toplevel_dir)
+ # Relative path from build dir to gyp dir.
+ build_to_gyp = os.path.join(build_to_top, rel_gyp_dir)
+
+ path_from_cmakelists_to_gyp = build_to_gyp
+
+ spec = target_dicts.get(qualified_target, {})
+ config = spec.get('configurations', {}).get(config_to_use, {})
+
+ target_name = spec.get('target_name', '<missing target name>')
+ target_type = spec.get('type', '<missing target type>')
+ target_toolset = spec.get('toolset')
+
+ SetVariable(output, 'TARGET', target_name)
+ SetVariable(output, 'TOOLSET', target_toolset)
+
+ cmake_target_name = namer.CreateCMakeTargetName(qualified_target)
+
+ extra_sources = []
+ extra_deps = []
+
+ # Actions must come first, since they can generate more OBJs for use below.
+ if 'actions' in spec:
+ WriteActions(cmake_target_name, spec['actions'], extra_sources, extra_deps,
+ path_from_cmakelists_to_gyp, output)
+
+ # Rules must be early like actions.
+ if 'rules' in spec:
+ WriteRules(cmake_target_name, spec['rules'], extra_sources, extra_deps,
+ path_from_cmakelists_to_gyp, output)
+
+ # Copies
+ if 'copies' in spec:
+ WriteCopies(cmake_target_name, spec['copies'], extra_deps,
+ path_from_cmakelists_to_gyp, output)
+
+ # Target and sources
+ srcs = spec.get('sources', [])
+
+ # Gyp separates the sheep from the goats based on file extensions.
+ def partition(l, p):
+ return reduce(lambda x, e: x[not p(e)].append(e) or x, l, ([], []))
+ compilable_srcs, other_srcs = partition(srcs, Compilable)
+
+ # CMake gets upset when executable targets provide no sources.
+ if target_type == 'executable' and not compilable_srcs and not extra_sources:
+ print ('Executable %s has no complilable sources, treating as "none".' %
+ target_name )
+ target_type = 'none'
+
+ cmake_target_type = cmake_target_type_from_gyp_target_type.get(target_type)
+ if cmake_target_type is None:
+ print ('Target %s has unknown target type %s, skipping.' %
+ ( target_name, target_type ) )
+ return
+
+ other_srcs_name = None
+ if other_srcs:
+ other_srcs_name = cmake_target_name + '__other_srcs'
+ SetVariableList(output, other_srcs_name,
+ [NormjoinPath(path_from_cmakelists_to_gyp, src) for src in other_srcs])
+
+ # CMake is opposed to setting linker directories and considers the practice
+ # of setting linker directories dangerous. Instead, it favors the use of
+ # find_library and passing absolute paths to target_link_libraries.
+ # However, CMake does provide the command link_directories, which adds
+ # link directories to targets defined after it is called.
+ # As a result, link_directories must come before the target definition.
+ # CMake unfortunately has no means of removing entries from LINK_DIRECTORIES.
+ library_dirs = config.get('library_dirs')
+ if library_dirs is not None:
+ output.write('link_directories(')
+ for library_dir in library_dirs:
+ output.write(' ')
+ output.write(NormjoinPath(path_from_cmakelists_to_gyp, library_dir))
+ output.write('\n')
+ output.write(')\n')
+
+ output.write(cmake_target_type.command)
+ output.write('(')
+ output.write(cmake_target_name)
+
+ if cmake_target_type.modifier is not None:
+ output.write(' ')
+ output.write(cmake_target_type.modifier)
+
+ if other_srcs_name:
+ WriteVariable(output, other_srcs_name, ' ')
+
+ output.write('\n')
+
+ for src in compilable_srcs:
+ output.write(' ')
+ output.write(NormjoinPath(path_from_cmakelists_to_gyp, src))
+ output.write('\n')
+ for extra_source in extra_sources:
+ output.write(' ')
+ src, _ = extra_source
+ output.write(NormjoinPath(path_from_cmakelists_to_gyp, src))
+ output.write('\n')
+
+ output.write(')\n')
+
+ # Output name and location.
+ if target_type != 'none':
+ # Mark uncompiled sources as uncompiled.
+ if other_srcs_name:
+ output.write('set_source_files_properties(')
+ WriteVariable(output, other_srcs_name, '')
+ output.write(' PROPERTIES HEADER_FILE_ONLY "TRUE")\n')
+
+ # Output directory
+ target_output_directory = spec.get('product_dir')
+ if target_output_directory is None:
+ if target_type in ('executable', 'loadable_module'):
+ target_output_directory = generator_default_variables['PRODUCT_DIR']
+ elif target_type in ('shared_library'):
+ target_output_directory = '${builddir}/lib.${TOOLSET}'
+ elif spec.get('standalone_static_library', False):
+ target_output_directory = generator_default_variables['PRODUCT_DIR']
+ else:
+ base_path = gyp.common.RelativePath(os.path.dirname(gyp_file),
+ options.toplevel_dir)
+ target_output_directory = '${obj}.${TOOLSET}'
+ target_output_directory = (
+ os.path.join(target_output_directory, base_path))
+
+ cmake_target_output_directory = NormjoinPathForceCMakeSource(
+ path_from_cmakelists_to_gyp,
+ target_output_directory)
+ SetTargetProperty(output,
+ cmake_target_name,
+ cmake_target_type.property_modifier + '_OUTPUT_DIRECTORY',
+ cmake_target_output_directory)
+
+ # Output name
+ default_product_prefix = ''
+ default_product_name = target_name
+ default_product_ext = ''
+ if target_type == 'static_library':
+ static_library_prefix = generator_default_variables['STATIC_LIB_PREFIX']
+ default_product_name = RemovePrefix(default_product_name,
+ static_library_prefix)
+ default_product_prefix = static_library_prefix
+ default_product_ext = generator_default_variables['STATIC_LIB_SUFFIX']
+
+ elif target_type in ('loadable_module', 'shared_library'):
+ shared_library_prefix = generator_default_variables['SHARED_LIB_PREFIX']
+ default_product_name = RemovePrefix(default_product_name,
+ shared_library_prefix)
+ default_product_prefix = shared_library_prefix
+ default_product_ext = generator_default_variables['SHARED_LIB_SUFFIX']
+
+ elif target_type != 'executable':
+ print ('ERROR: What output file should be generated?',
+ 'type', target_type, 'target', target_name)
+
+ product_prefix = spec.get('product_prefix', default_product_prefix)
+ product_name = spec.get('product_name', default_product_name)
+ product_ext = spec.get('product_extension')
+ if product_ext:
+ product_ext = '.' + product_ext
+ else:
+ product_ext = default_product_ext
+
+ SetTargetProperty(output, cmake_target_name, 'PREFIX', product_prefix)
+ SetTargetProperty(output, cmake_target_name,
+ cmake_target_type.property_modifier + '_OUTPUT_NAME',
+ product_name)
+ SetTargetProperty(output, cmake_target_name, 'SUFFIX', product_ext)
+
+ # Make the output of this target referenceable as a source.
+ cmake_target_output_basename = product_prefix + product_name + product_ext
+ cmake_target_output = os.path.join(cmake_target_output_directory,
+ cmake_target_output_basename)
+ SetFileProperty(output, cmake_target_output, 'GENERATED', ['TRUE'], '')
+
+ # Let CMake know if the 'all' target should depend on this target.
+ exclude_from_all = ('TRUE' if qualified_target not in all_qualified_targets
+ else 'FALSE')
+ SetTargetProperty(output, cmake_target_name,
+ 'EXCLUDE_FROM_ALL', exclude_from_all)
+ for extra_target_name in extra_deps:
+ SetTargetProperty(output, extra_target_name,
+ 'EXCLUDE_FROM_ALL', exclude_from_all)
+
+ # Includes
+ includes = config.get('include_dirs')
+ if includes:
+ # This (target include directories) is what requires CMake 2.8.8
+ includes_name = cmake_target_name + '__include_dirs'
+ SetVariableList(output, includes_name,
+ [NormjoinPathForceCMakeSource(path_from_cmakelists_to_gyp, include)
+ for include in includes])
+ output.write('set_property(TARGET ')
+ output.write(cmake_target_name)
+ output.write(' APPEND PROPERTY INCLUDE_DIRECTORIES ')
+ WriteVariable(output, includes_name, '')
+ output.write(')\n')
+
+ # Defines
+ defines = config.get('defines')
+ if defines is not None:
+ SetTargetProperty(output,
+ cmake_target_name,
+ 'COMPILE_DEFINITIONS',
+ defines,
+ ';')
+
+ # Compile Flags - http://www.cmake.org/Bug/view.php?id=6493
+ # CMake currently does not have target C and CXX flags.
+ # So, instead of doing...
+
+ # cflags_c = config.get('cflags_c')
+ # if cflags_c is not None:
+ # SetTargetProperty(output, cmake_target_name,
+ # 'C_COMPILE_FLAGS', cflags_c, ' ')
+
+ # cflags_cc = config.get('cflags_cc')
+ # if cflags_cc is not None:
+ # SetTargetProperty(output, cmake_target_name,
+ # 'CXX_COMPILE_FLAGS', cflags_cc, ' ')
+
+ # Instead we must...
+ s_sources = []
+ c_sources = []
+ cxx_sources = []
+ for src in srcs:
+ _, ext = os.path.splitext(src)
+ src_type = COMPILABLE_EXTENSIONS.get(ext, None)
+
+ if src_type == 's':
+ s_sources.append(NormjoinPath(path_from_cmakelists_to_gyp, src))
+
+ if src_type == 'cc':
+ c_sources.append(NormjoinPath(path_from_cmakelists_to_gyp, src))
+
+ if src_type == 'cxx':
+ cxx_sources.append(NormjoinPath(path_from_cmakelists_to_gyp, src))
+
+ for extra_source in extra_sources:
+ src, real_source = extra_source
+ _, ext = os.path.splitext(real_source)
+ src_type = COMPILABLE_EXTENSIONS.get(ext, None)
+
+ if src_type == 's':
+ s_sources.append(NormjoinPath(path_from_cmakelists_to_gyp, src))
+
+ if src_type == 'cc':
+ c_sources.append(NormjoinPath(path_from_cmakelists_to_gyp, src))
+
+ if src_type == 'cxx':
+ cxx_sources.append(NormjoinPath(path_from_cmakelists_to_gyp, src))
+
+ cflags = config.get('cflags', [])
+ cflags_c = config.get('cflags_c', [])
+ cflags_cxx = config.get('cflags_cc', [])
+ if c_sources and not (s_sources or cxx_sources):
+ flags = []
+ flags.extend(cflags)
+ flags.extend(cflags_c)
+ SetTargetProperty(output, cmake_target_name, 'COMPILE_FLAGS', flags, ' ')
+
+ elif cxx_sources and not (s_sources or c_sources):
+ flags = []
+ flags.extend(cflags)
+ flags.extend(cflags_cxx)
+ SetTargetProperty(output, cmake_target_name, 'COMPILE_FLAGS', flags, ' ')
+
+ else:
+ if s_sources and cflags:
+ SetFilesProperty(output, s_sources, 'COMPILE_FLAGS', cflags, ' ')
+
+ if c_sources and (cflags or cflags_c):
+ flags = []
+ flags.extend(cflags)
+ flags.extend(cflags_c)
+ SetFilesProperty(output, c_sources, 'COMPILE_FLAGS', flags, ' ')
+
+ if cxx_sources and (cflags or cflags_cxx):
+ flags = []
+ flags.extend(cflags)
+ flags.extend(cflags_cxx)
+ SetFilesProperty(output, cxx_sources, 'COMPILE_FLAGS', flags, ' ')
+
+ # Have assembly link as c if there are no other files
+ if not c_sources and not cxx_sources and s_sources:
+ SetTargetProperty(output, cmake_target_name, 'LINKER_LANGUAGE', ['C'])
+
+ # Linker flags
+ ldflags = config.get('ldflags')
+ if ldflags is not None:
+ SetTargetProperty(output, cmake_target_name, 'LINK_FLAGS', ldflags, ' ')
+
+ # Note on Dependencies and Libraries:
+ # CMake wants to handle link order, resolving the link line up front.
+ # Gyp does not retain or enforce specifying enough information to do so.
+ # So do as other gyp generators and use --start-group and --end-group.
+ # Give CMake as little information as possible so that it doesn't mess it up.
+
+ # Dependencies
+ rawDeps = spec.get('dependencies', [])
+
+ static_deps = []
+ shared_deps = []
+ other_deps = []
+ for rawDep in rawDeps:
+ dep_cmake_name = namer.CreateCMakeTargetName(rawDep)
+ dep_spec = target_dicts.get(rawDep, {})
+ dep_target_type = dep_spec.get('type', None)
+
+ if dep_target_type == 'static_library':
+ static_deps.append(dep_cmake_name)
+ elif dep_target_type == 'shared_library':
+ shared_deps.append(dep_cmake_name)
+ else:
+ other_deps.append(dep_cmake_name)
+
+ # ensure all external dependencies are complete before internal dependencies
+ # extra_deps currently only depend on their own deps, so otherwise run early
+ if static_deps or shared_deps or other_deps:
+ for extra_dep in extra_deps:
+ output.write('add_dependencies(')
+ output.write(extra_dep)
+ output.write('\n')
+ for deps in (static_deps, shared_deps, other_deps):
+ for dep in gyp.common.uniquer(deps):
+ output.write(' ')
+ output.write(dep)
+ output.write('\n')
+ output.write(')\n')
+
+ linkable = target_type in ('executable', 'loadable_module', 'shared_library')
+ other_deps.extend(extra_deps)
+ if other_deps or (not linkable and (static_deps or shared_deps)):
+ output.write('add_dependencies(')
+ output.write(cmake_target_name)
+ output.write('\n')
+ for dep in gyp.common.uniquer(other_deps):
+ output.write(' ')
+ output.write(dep)
+ output.write('\n')
+ if not linkable:
+ for deps in (static_deps, shared_deps):
+ for lib_dep in gyp.common.uniquer(deps):
+ output.write(' ')
+ output.write(lib_dep)
+ output.write('\n')
+ output.write(')\n')
+
+ # Libraries
+ if linkable:
+ external_libs = [lib for lib in spec.get('libraries', []) if len(lib) > 0]
+ if external_libs or static_deps or shared_deps:
+ output.write('target_link_libraries(')
+ output.write(cmake_target_name)
+ output.write('\n')
+ if static_deps:
+ write_group = circular_libs and len(static_deps) > 1
+ if write_group:
+ output.write('-Wl,--start-group\n')
+ for dep in gyp.common.uniquer(static_deps):
+ output.write(' ')
+ output.write(dep)
+ output.write('\n')
+ if write_group:
+ output.write('-Wl,--end-group\n')
+ if shared_deps:
+ for dep in gyp.common.uniquer(shared_deps):
+ output.write(' ')
+ output.write(dep)
+ output.write('\n')
+ if external_libs:
+ for lib in gyp.common.uniquer(external_libs):
+ output.write(' ')
+ output.write(lib)
+ output.write('\n')
+
+ output.write(')\n')
+
+ UnsetVariable(output, 'TOOLSET')
+ UnsetVariable(output, 'TARGET')
+
+
+def GenerateOutputForConfig(target_list, target_dicts, data,
+ params, config_to_use):
+ options = params['options']
+ generator_flags = params['generator_flags']
+
+ # generator_dir: relative path from pwd to where make puts build files.
+ # Makes migrating from make to cmake easier, cmake doesn't put anything here.
+ # Each Gyp configuration creates a different CMakeLists.txt file
+ # to avoid incompatibilities between Gyp and CMake configurations.
+ generator_dir = os.path.relpath(options.generator_output or '.')
+
+ # output_dir: relative path from generator_dir to the build directory.
+ output_dir = generator_flags.get('output_dir', 'out')
+
+ # build_dir: relative path from source root to our output files.
+ # e.g. "out/Debug"
+ build_dir = os.path.normpath(os.path.join(generator_dir,
+ output_dir,
+ config_to_use))
+
+ toplevel_build = os.path.join(options.toplevel_dir, build_dir)
+
+ output_file = os.path.join(toplevel_build, 'CMakeLists.txt')
+ gyp.common.EnsureDirExists(output_file)
+
+ output = open(output_file, 'w')
+ output.write('cmake_minimum_required(VERSION 2.8.8 FATAL_ERROR)\n')
+ output.write('cmake_policy(VERSION 2.8.8)\n')
+
+ _, project_target, _ = gyp.common.ParseQualifiedTarget(target_list[-1])
+ output.write('project(')
+ output.write(project_target)
+ output.write(')\n')
+
+ SetVariable(output, 'configuration', config_to_use)
+
+ # The following appears to be as-yet undocumented.
+ # http://public.kitware.com/Bug/view.php?id=8392
+ output.write('enable_language(ASM)\n')
+ # ASM-ATT does not support .S files.
+ # output.write('enable_language(ASM-ATT)\n')
+
+ SetVariable(output, 'builddir', '${CMAKE_BINARY_DIR}')
+ SetVariable(output, 'obj', '${builddir}/obj')
+ output.write('\n')
+
+ # TODO: Undocumented/unsupported (the CMake Java generator depends on it).
+ # CMake by default names the object resulting from foo.c to be foo.c.o.
+ # Gyp traditionally names the object resulting from foo.c foo.o.
+ # This should be irrelevant, but some targets extract .o files from .a
+ # and depend on the name of the extracted .o files.
+ output.write('set(CMAKE_C_OUTPUT_EXTENSION_REPLACE 1)\n')
+ output.write('set(CMAKE_CXX_OUTPUT_EXTENSION_REPLACE 1)\n')
+ output.write('\n')
+
+ namer = CMakeNamer(target_list)
+
+ # The list of targets upon which the 'all' target should depend.
+ # CMake has it's own implicit 'all' target, one is not created explicitly.
+ all_qualified_targets = set()
+ for build_file in params['build_files']:
+ for qualified_target in gyp.common.AllTargets(target_list,
+ target_dicts,
+ os.path.normpath(build_file)):
+ all_qualified_targets.add(qualified_target)
+
+ for qualified_target in target_list:
+ WriteTarget(namer, qualified_target, target_dicts, build_dir, config_to_use,
+ options, generator_flags, all_qualified_targets, output)
+
+ output.close()
+
+
+def PerformBuild(data, configurations, params):
+ options = params['options']
+ generator_flags = params['generator_flags']
+
+ # generator_dir: relative path from pwd to where make puts build files.
+ # Makes migrating from make to cmake easier, cmake doesn't put anything here.
+ generator_dir = os.path.relpath(options.generator_output or '.')
+
+ # output_dir: relative path from generator_dir to the build directory.
+ output_dir = generator_flags.get('output_dir', 'out')
+
+ for config_name in configurations:
+ # build_dir: relative path from source root to our output files.
+ # e.g. "out/Debug"
+ build_dir = os.path.normpath(os.path.join(generator_dir,
+ output_dir,
+ config_name))
+ arguments = ['cmake', '-G', 'Ninja']
+ print 'Generating [%s]: %s' % (config_name, arguments)
+ subprocess.check_call(arguments, cwd=build_dir)
+
+ arguments = ['ninja', '-C', build_dir]
+ print 'Building [%s]: %s' % (config_name, arguments)
+ subprocess.check_call(arguments)
+
+
+def CallGenerateOutputForConfig(arglist):
+ # Ignore the interrupt signal so that the parent process catches it and
+ # kills all multiprocessing children.
+ signal.signal(signal.SIGINT, signal.SIG_IGN)
+
+ target_list, target_dicts, data, params, config_name = arglist
+ GenerateOutputForConfig(target_list, target_dicts, data, params, config_name)
+
+
+def GenerateOutput(target_list, target_dicts, data, params):
+ user_config = params.get('generator_flags', {}).get('config', None)
+ if user_config:
+ GenerateOutputForConfig(target_list, target_dicts, data,
+ params, user_config)
+ else:
+ config_names = target_dicts[target_list[0]]['configurations'].keys()
+ if params['parallel']:
+ try:
+ pool = multiprocessing.Pool(len(config_names))
+ arglists = []
+ for config_name in config_names:
+ arglists.append((target_list, target_dicts, data,
+ params, config_name))
+ pool.map(CallGenerateOutputForConfig, arglists)
+ except KeyboardInterrupt, e:
+ pool.terminate()
+ raise e
+ else:
+ for config_name in config_names:
+ GenerateOutputForConfig(target_list, target_dicts, data,
+ params, config_name)
diff --git a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/dump_dependency_json.py b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/dump_dependency_json.py
index f8480dd28..927ba6eba 100644
--- a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/dump_dependency_json.py
+++ b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/dump_dependency_json.py
@@ -45,19 +45,7 @@ def CalculateVariables(default_variables, params):
generator_additional_path_sections = getattr(msvs_generator,
'generator_additional_path_sections', [])
- # Set a variable so conditions can be based on msvs_version.
- msvs_version = gyp.msvs_emulation.GetVSVersion(generator_flags)
- default_variables['MSVS_VERSION'] = msvs_version.ShortName()
-
- # To determine processor word size on Windows, in addition to checking
- # PROCESSOR_ARCHITECTURE (which reflects the word size of the current
- # process), it is also necessary to check PROCESSOR_ARCHITEW6432 (which
- # contains the actual word size of the system when running thru WOW64).
- if ('64' in os.environ.get('PROCESSOR_ARCHITECTURE', '') or
- '64' in os.environ.get('PROCESSOR_ARCHITEW6432', '')):
- default_variables['MSVS_OS_BITS'] = 64
- else:
- default_variables['MSVS_OS_BITS'] = 32
+ gyp.msvs_emulation.CalculateCommonVariables(default_variables, params)
def CalculateGeneratorInputInfo(params):
diff --git a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/eclipse.py b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/eclipse.py
index 0f90b5ea6..84380b04d 100644
--- a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/eclipse.py
+++ b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/eclipse.py
@@ -22,6 +22,7 @@ import os.path
import subprocess
import gyp
import gyp.common
+import gyp.msvs_emulation
import shlex
generator_wants_static_library_dependencies_adjusted = False
@@ -41,18 +42,29 @@ for unused in ['RULE_INPUT_PATH', 'RULE_INPUT_ROOT', 'RULE_INPUT_NAME',
'CONFIGURATION_NAME']:
generator_default_variables[unused] = ''
-# Include dirs will occasionaly use the SHARED_INTERMEDIATE_DIR variable as
+# Include dirs will occasionally use the SHARED_INTERMEDIATE_DIR variable as
# part of the path when dealing with generated headers. This value will be
# replaced dynamically for each configuration.
generator_default_variables['SHARED_INTERMEDIATE_DIR'] = \
- '$SHARED_INTERMEDIATES_DIR'
+ '$SHARED_INTERMEDIATE_DIR'
def CalculateVariables(default_variables, params):
generator_flags = params.get('generator_flags', {})
for key, val in generator_flags.items():
default_variables.setdefault(key, val)
- default_variables.setdefault('OS', gyp.common.GetFlavor(params))
+ flavor = gyp.common.GetFlavor(params)
+ default_variables.setdefault('OS', flavor)
+ if flavor == 'win':
+ # Copy additional generator configuration data from VS, which is shared
+ # by the Eclipse generator.
+ import gyp.generator.msvs as msvs_generator
+ generator_additional_non_configuration_keys = getattr(msvs_generator,
+ 'generator_additional_non_configuration_keys', [])
+ generator_additional_path_sections = getattr(msvs_generator,
+ 'generator_additional_path_sections', [])
+
+ gyp.msvs_emulation.CalculateCommonVariables(default_variables, params)
def CalculateGeneratorInputInfo(params):
@@ -65,7 +77,7 @@ def CalculateGeneratorInputInfo(params):
def GetAllIncludeDirectories(target_list, target_dicts,
- shared_intermediates_dir, config_name):
+ shared_intermediate_dirs, config_name, params):
"""Calculate the set of include directories to be used.
Returns:
@@ -76,6 +88,9 @@ def GetAllIncludeDirectories(target_list, target_dicts,
gyp_includes_set = set()
compiler_includes_list = []
+ flavor = gyp.common.GetFlavor(params)
+ if flavor == 'win':
+ generator_flags = params.get('generator_flags', {})
for target_name in target_list:
target = target_dicts[target_name]
if config_name in target['configurations']:
@@ -85,7 +100,11 @@ def GetAllIncludeDirectories(target_list, target_dicts,
# may be done in gyp files to force certain includes to come at the end.
# TODO(jgreenwald): Change the gyp files to not abuse cflags for this, and
# remove this.
- cflags = config['cflags']
+ if flavor == 'win':
+ msvs_settings = gyp.msvs_emulation.MsvsSettings(target, generator_flags)
+ cflags = msvs_settings.GetCflags(config_name)
+ else:
+ cflags = config['cflags']
for cflag in cflags:
include_dir = ''
if cflag.startswith('-I'):
@@ -96,17 +115,18 @@ def GetAllIncludeDirectories(target_list, target_dicts,
# Find standard gyp include dirs.
if config.has_key('include_dirs'):
include_dirs = config['include_dirs']
- for include_dir in include_dirs:
- include_dir = include_dir.replace('$SHARED_INTERMEDIATES_DIR',
- shared_intermediates_dir)
- if not os.path.isabs(include_dir):
- base_dir = os.path.dirname(target_name)
+ for shared_intermediate_dir in shared_intermediate_dirs:
+ for include_dir in include_dirs:
+ include_dir = include_dir.replace('$SHARED_INTERMEDIATE_DIR',
+ shared_intermediate_dir)
+ if not os.path.isabs(include_dir):
+ base_dir = os.path.dirname(target_name)
- include_dir = base_dir + '/' + include_dir
- include_dir = os.path.abspath(include_dir)
+ include_dir = base_dir + '/' + include_dir
+ include_dir = os.path.abspath(include_dir)
- if not include_dir in gyp_includes_set:
- gyp_includes_set.add(include_dir)
+ if not include_dir in gyp_includes_set:
+ gyp_includes_set.add(include_dir)
# Generate a list that has all the include dirs.
@@ -145,7 +165,7 @@ def GetCompilerPath(target_list, target_dicts, data):
return 'gcc'
-def GetAllDefines(target_list, target_dicts, data, config_name):
+def GetAllDefines(target_list, target_dicts, data, config_name, params):
"""Calculate the defines for a project.
Returns:
@@ -155,22 +175,33 @@ def GetAllDefines(target_list, target_dicts, data, config_name):
# Get defines declared in the gyp files.
all_defines = {}
+ flavor = gyp.common.GetFlavor(params)
+ if flavor == 'win':
+ generator_flags = params.get('generator_flags', {})
for target_name in target_list:
target = target_dicts[target_name]
+ if flavor == 'win':
+ msvs_settings = gyp.msvs_emulation.MsvsSettings(target, generator_flags)
+ extra_defines = msvs_settings.GetComputedDefines(config_name)
+ else:
+ extra_defines = []
if config_name in target['configurations']:
config = target['configurations'][config_name]
- for define in config['defines']:
- split_define = define.split('=', 1)
- if len(split_define) == 1:
- split_define.append('1')
- if split_define[0].strip() in all_defines:
- # Already defined
- continue
-
- all_defines[split_define[0].strip()] = split_define[1].strip()
-
+ target_defines = config['defines']
+ else:
+ target_defines = []
+ for define in target_defines + extra_defines:
+ split_define = define.split('=', 1)
+ if len(split_define) == 1:
+ split_define.append('1')
+ if split_define[0].strip() in all_defines:
+ # Already defined
+ continue
+ all_defines[split_define[0].strip()] = split_define[1].strip()
# Get default compiler defines (if possible).
+ if flavor == 'win':
+ return all_defines # Default defines already processed in the loop above.
cc_target = GetCompilerPath(target_list, target_dicts, data)
if cc_target:
command = shlex.split(cc_target)
@@ -234,11 +265,14 @@ def GenerateOutputForConfig(target_list, target_dicts, data, params,
config_name)
toplevel_build = os.path.join(options.toplevel_dir, build_dir)
- shared_intermediate_dir = os.path.join(toplevel_build, 'obj', 'gen')
+ # Ninja uses out/Debug/gen while make uses out/Debug/obj/gen as the
+ # SHARED_INTERMEDIATE_DIR. Include both possible locations.
+ shared_intermediate_dirs = [os.path.join(toplevel_build, 'obj', 'gen'),
+ os.path.join(toplevel_build, 'gen')]
- if not os.path.exists(toplevel_build):
- os.makedirs(toplevel_build)
- out = open(os.path.join(toplevel_build, 'eclipse-cdt-settings.xml'), 'w')
+ out_name = os.path.join(toplevel_build, 'eclipse-cdt-settings.xml')
+ gyp.common.EnsureDirExists(out_name)
+ out = open(out_name, 'w')
out.write('<?xml version="1.0" encoding="UTF-8"?>\n')
out.write('<cdtprojectproperties>\n')
@@ -246,9 +280,10 @@ def GenerateOutputForConfig(target_list, target_dicts, data, params,
eclipse_langs = ['C++ Source File', 'C Source File', 'Assembly Source File',
'GNU C++', 'GNU C', 'Assembly']
include_dirs = GetAllIncludeDirectories(target_list, target_dicts,
- shared_intermediate_dir, config_name)
+ shared_intermediate_dirs, config_name,
+ params)
WriteIncludePaths(out, eclipse_langs, include_dirs)
- defines = GetAllDefines(target_list, target_dicts, data, config_name)
+ defines = GetAllDefines(target_list, target_dicts, data, config_name, params)
WriteMacros(out, eclipse_langs, defines)
out.write('</cdtprojectproperties>\n')
diff --git a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/make.py b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/make.py
index 133d8f8c6..b3f8a2b77 100644
--- a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/make.py
+++ b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/make.py
@@ -1,4 +1,4 @@
-# Copyright (c) 2012 Google Inc. All rights reserved.
+# Copyright (c) 2013 Google Inc. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
@@ -57,6 +57,7 @@ generator_wants_sorted_dependencies = False
generator_additional_non_configuration_keys = []
generator_additional_path_sections = []
generator_extra_sources_for_rules = []
+generator_filelist_paths = None
def CalculateVariables(default_variables, params):
@@ -103,11 +104,17 @@ def CalculateGeneratorInputInfo(params):
global generator_wants_sorted_dependencies
generator_wants_sorted_dependencies = True
+ output_dir = params['options'].generator_output or \
+ params['options'].toplevel_dir
+ builddir_name = generator_flags.get('output_dir', 'out')
+ qualified_out_dir = os.path.normpath(os.path.join(
+ output_dir, builddir_name, 'gypfiles'))
-def ensure_directory_exists(path):
- dir = os.path.dirname(path)
- if dir and not os.path.exists(dir):
- os.makedirs(dir)
+ global generator_filelist_paths
+ generator_filelist_paths = {
+ 'toplevel': params['options'].toplevel_dir,
+ 'qualified_out_dir': qualified_out_dir,
+ }
# The .d checking code below uses these functions:
@@ -166,15 +173,11 @@ cmd_alink = rm -f $@ && ./gyp-mac-tool filter-libtool libtool $(GYP_LIBTOOLFLAGS
quiet_cmd_link = LINK($(TOOLSET)) $@
cmd_link = $(LINK.$(TOOLSET)) $(GYP_LDFLAGS) $(LDFLAGS.$(TOOLSET)) -o "$@" $(LD_INPUTS) $(LIBS)
-# TODO(thakis): Find out and document the difference between shared_library and
-# loadable_module on mac.
quiet_cmd_solink = SOLINK($(TOOLSET)) $@
cmd_solink = $(LINK.$(TOOLSET)) -shared $(GYP_LDFLAGS) $(LDFLAGS.$(TOOLSET)) -o "$@" $(LD_INPUTS) $(LIBS)
-# TODO(thakis): The solink_module rule is likely wrong. Xcode seems to pass
-# -bundle -single_module here (for osmesa.so).
quiet_cmd_solink_module = SOLINK_MODULE($(TOOLSET)) $@
-cmd_solink_module = $(LINK.$(TOOLSET)) -shared $(GYP_LDFLAGS) $(LDFLAGS.$(TOOLSET)) -o $@ $(filter-out FORCE_DO_CMD, $^) $(LIBS)
+cmd_solink_module = $(LINK.$(TOOLSET)) -bundle $(GYP_LDFLAGS) $(LDFLAGS.$(TOOLSET)) -o $@ $(filter-out FORCE_DO_CMD, $^) $(LIBS)
"""
LINK_COMMANDS_ANDROID = """\
@@ -205,6 +208,24 @@ cmd_solink_module_host = $(LINK.$(TOOLSET)) -shared $(GYP_LDFLAGS) $(LDFLAGS.$(T
"""
+LINK_COMMANDS_AIX = """\
+quiet_cmd_alink = AR($(TOOLSET)) $@
+cmd_alink = rm -f $@ && $(AR.$(TOOLSET)) crs $@ $(filter %.o,$^)
+
+quiet_cmd_alink_thin = AR($(TOOLSET)) $@
+cmd_alink_thin = rm -f $@ && $(AR.$(TOOLSET)) crs $@ $(filter %.o,$^)
+
+quiet_cmd_link = LINK($(TOOLSET)) $@
+cmd_link = $(LINK.$(TOOLSET)) $(GYP_LDFLAGS) $(LDFLAGS.$(TOOLSET)) -o $@ $(LD_INPUTS) $(LIBS)
+
+quiet_cmd_solink = SOLINK($(TOOLSET)) $@
+cmd_solink = $(LINK.$(TOOLSET)) -shared $(GYP_LDFLAGS) $(LDFLAGS.$(TOOLSET)) -o $@ $(LD_INPUTS) $(LIBS)
+
+quiet_cmd_solink_module = SOLINK_MODULE($(TOOLSET)) $@
+cmd_solink_module = $(LINK.$(TOOLSET)) -shared $(GYP_LDFLAGS) $(LDFLAGS.$(TOOLSET)) -o $@ $(filter-out FORCE_DO_CMD, $^) $(LIBS)
+"""
+
+
# Header of toplevel Makefile.
# This should go into the build tree, but it's easier to keep it here for now.
SHARED_HEADER = ("""\
@@ -250,6 +271,14 @@ all_deps :=
%(make_global_settings)s
+CC.target ?= %(CC.target)s
+CFLAGS.target ?= $(CFLAGS)
+CXX.target ?= %(CXX.target)s
+CXXFLAGS.target ?= $(CXXFLAGS)
+LINK.target ?= %(LINK.target)s
+LDFLAGS.target ?= $(LDFLAGS)
+AR.target ?= $(AR)
+
# C++ apps need to be linked with g++.
#
# Note: flock is used to seralize linking. Linking is a memory-intensive
@@ -259,15 +288,7 @@ all_deps :=
# export LINK=g++
#
# This will allow make to invoke N linker processes as specified in -jN.
-LINK ?= %(flock)s $(builddir)/linker.lock $(CXX)
-
-CC.target ?= %(CC.target)s
-CFLAGS.target ?= $(CFLAGS)
-CXX.target ?= %(CXX.target)s
-CXXFLAGS.target ?= $(CXXFLAGS)
-LINK.target ?= %(LINK.target)s
-LDFLAGS.target ?= $(LDFLAGS)
-AR.target ?= $(AR)
+LINK ?= %(flock)s $(builddir)/linker.lock $(CXX.target)
# TODO(evan): move all cross-compilation logic to gyp-time so we don't need
# to replicate this environment fallback in make as well.
@@ -395,15 +416,14 @@ command_changed = $(or $(subst $(cmd_$(1)),,$(cmd_$(call replace_spaces,$@))),\\
# $| -- order-only dependencies
prereq_changed = $(filter-out FORCE_DO_CMD,$(filter-out $|,$?))
-# Helper that executes all postbuilds, and deletes the output file when done
-# if any of the postbuilds failed.
+# Helper that executes all postbuilds until one fails.
define do_postbuilds
@E=0;\\
for p in $(POSTBUILDS); do\\
eval $$p;\\
- F=$$?;\\
- if [ $$F -ne 0 ]; then\\
- E=$$F;\\
+ E=$$?;\\
+ if [ $$E -ne 0 ]; then\\
+ break;\\
fi;\\
done;\\
if [ $$E -ne 0 ]; then\\
@@ -484,14 +504,6 @@ quiet_cmd_infoplist = INFOPLIST $@
cmd_infoplist = $(CC.$(TOOLSET)) -E -P -Wno-trigraphs -x c $(INFOPLIST_DEFINES) "$<" -o "$@"
"""
-SHARED_HEADER_SUN_COMMANDS = """
-# gyp-sun-tool is written next to the root Makefile by gyp.
-# Use $(4) for the command, since $(2) and $(3) are used as flag by do_cmd
-# already.
-quiet_cmd_sun_tool = SUNTOOL $(4) $<
-cmd_sun_tool = ./gyp-sun-tool $(4) $< "$@"
-"""
-
def WriteRootHeaderSuffixRules(writer):
extensions = sorted(COMPILABLE_EXTENSIONS.keys(), key=str.lower)
@@ -619,21 +631,6 @@ def QuoteSpaces(s, quote=r'\ '):
return s.replace(' ', quote)
-def InvertRelativePath(path):
- """Given a relative path like foo/bar, return the inverse relative path:
- the path from the relative path back to the origin dir.
-
- E.g. os.path.normpath(os.path.join(path, InvertRelativePath(path)))
- should always produce the empty string."""
-
- if not path:
- return path
- # Only need to handle relative paths into subdirectories for now.
- assert '..' not in path, path
- depth = len(path.split(os.path.sep))
- return os.path.sep.join(['..'] * depth)
-
-
# Map from qualified target to path to output.
target_outputs = {}
# Map from qualified target to any linkable output. A subset
@@ -688,7 +685,7 @@ $(obj).$(TOOLSET)/$(TARGET)/%%.o: $(obj)/%%%s FORCE_DO_CMD
spec, configs: gyp info
part_of_all: flag indicating this target is part of 'all'
"""
- ensure_directory_exists(output_filename)
+ gyp.common.EnsureDirExists(output_filename)
self.fp = open(output_filename, 'w')
@@ -817,7 +814,7 @@ $(obj).$(TOOLSET)/$(TARGET)/%%.o: $(obj)/%%%s FORCE_DO_CMD
targets: list of "all" targets for this sub-project
build_dir: build output directory, relative to the sub-project
"""
- ensure_directory_exists(output_filename)
+ gyp.common.EnsureDirExists(output_filename)
self.fp = open(output_filename, 'w')
self.fp.write(header)
# For consistency with other builders, put sub-project build output in the
@@ -994,7 +991,13 @@ $(obj).$(TOOLSET)/$(TARGET)/%%.o: $(obj)/%%%s FORCE_DO_CMD
self.WriteLn('%s: obj := $(abs_obj)' % outputs[0])
self.WriteLn('%s: builddir := $(abs_builddir)' % outputs[0])
self.WriteMakeRule(outputs, inputs + ['FORCE_DO_CMD'], actions)
+ # Spaces in rule filenames are not supported, but rule variables have
+ # spaces in them (e.g. RULE_INPUT_PATH expands to '$(abspath $<)').
+ # The spaces within the variables are valid, so remove the variables
+ # before checking.
+ variables_with_spaces = re.compile(r'\$\([^ ]* \$<\)')
for output in outputs:
+ output = re.sub(variables_with_spaces, '', output)
assert ' ' not in output, (
"Spaces in rule filenames not yet supported (%s)" % output)
self.WriteLn('all_deps += %s' % ' '.join(outputs))
@@ -1417,8 +1420,8 @@ $(obj).$(TOOLSET)/$(TARGET)/%%.o: $(obj)/%%%s FORCE_DO_CMD
lambda p: Sourceify(self.Absolutify(p)))
# TARGET_POSTBUILDS_$(BUILDTYPE) is added to postbuilds later on.
- gyp_to_build = InvertRelativePath(self.path)
- target_postbuild = self.xcode_settings.GetTargetPostbuilds(
+ gyp_to_build = gyp.common.InvertRelativePath(self.path)
+ target_postbuild = self.xcode_settings.AddImplicitPostbuilds(
configname,
QuoteSpaces(os.path.normpath(os.path.join(gyp_to_build,
self.output))),
@@ -1429,12 +1432,14 @@ $(obj).$(TOOLSET)/$(TARGET)/%%.o: $(obj)/%%%s FORCE_DO_CMD
else:
ldflags = config.get('ldflags', [])
# Compute an rpath for this output if needed.
- if any(dep.endswith('.so') for dep in deps):
+ if any(dep.endswith('.so') or '.so.' in dep for dep in deps):
# We want to get the literal string "$ORIGIN" into the link command,
# so we need lots of escaping.
ldflags.append(r'-Wl,-rpath=\$$ORIGIN/lib.%s/' % self.toolset)
ldflags.append(r'-Wl,-rpath-link=\$(builddir)/lib.%s/' %
self.toolset)
+ library_dirs = config.get('library_dirs', [])
+ ldflags += [('-L%s' % library_dir) for library_dir in library_dirs]
self.WriteList(ldflags, 'LDFLAGS_%s' % configname)
if self.flavor == 'mac':
self.WriteList(self.xcode_settings.GetLibtoolflags(configname),
@@ -1541,7 +1546,7 @@ $(obj).$(TOOLSET)/$(TARGET)/%%.o: $(obj)/%%%s FORCE_DO_CMD
for link_dep in link_deps:
assert ' ' not in link_dep, (
"Spaces in alink input filenames not supported (%s)" % link_dep)
- if (self.flavor not in ('mac', 'win') and not
+ if (self.flavor not in ('mac', 'openbsd', 'win') and not
self.is_standalone_static_library):
self.WriteDoCmd([self.output_binary], link_deps, 'alink_thin',
part_of_all, postbuilds=postbuilds)
@@ -1899,13 +1904,15 @@ def WriteAutoRegenerationRule(params, root_makefile, makefile_name,
options = params['options']
build_files_args = [gyp.common.RelativePath(filename, options.toplevel_dir)
for filename in params['build_files_arg']]
+
gyp_binary = gyp.common.FixIfRelativePath(params['gyp_binary'],
options.toplevel_dir)
if not gyp_binary.startswith(os.sep):
gyp_binary = os.path.join('.', gyp_binary)
+
root_makefile.write(
"quiet_cmd_regen_makefile = ACTION Regenerating $@\n"
- "cmd_regen_makefile = %(cmd)s\n"
+ "cmd_regen_makefile = cd $(srcdir); %(cmd)s\n"
"%(makefile_name)s: %(deps)s\n"
"\t$(call do_cmd,regen_makefile)\n\n" % {
'makefile_name': makefile_name,
@@ -1946,7 +1953,8 @@ def GenerateOutput(target_list, target_dicts, data, params):
# We write the file in the base_path directory.
output_file = os.path.join(options.depth, base_path, base_name)
if options.generator_output:
- output_file = os.path.join(options.generator_output, output_file)
+ output_file = os.path.join(
+ options.depth, options.generator_output, base_path, base_name)
base_path = gyp.common.RelativePath(os.path.dirname(build_file),
options.toplevel_dir)
return base_path, output_file
@@ -1969,7 +1977,8 @@ def GenerateOutput(target_list, target_dicts, data, params):
makefile_path = os.path.join(options.toplevel_dir, makefile_name)
if options.generator_output:
global srcdir_prefix
- makefile_path = os.path.join(options.generator_output, makefile_path)
+ makefile_path = os.path.join(
+ options.toplevel_dir, options.generator_output, makefile_name)
srcdir = gyp.common.RelativePath(srcdir, options.generator_output)
srcdir_prefix = '$(srcdir)/'
@@ -1998,48 +2007,66 @@ def GenerateOutput(target_list, target_dicts, data, params):
})
elif flavor == 'solaris':
header_params.update({
- 'flock': './gyp-sun-tool flock',
+ 'flock': './gyp-flock-tool flock',
'flock_index': 2,
- 'extra_commands': SHARED_HEADER_SUN_COMMANDS,
})
elif flavor == 'freebsd':
+ # Note: OpenBSD has sysutils/flock. lockf seems to be FreeBSD specific.
header_params.update({
'flock': 'lockf',
})
+ elif flavor == 'aix':
+ header_params.update({
+ 'link_commands': LINK_COMMANDS_AIX,
+ 'flock': './gyp-flock-tool flock',
+ 'flock_index': 2,
+ })
header_params.update({
'CC.target': GetEnvironFallback(('CC_target', 'CC'), '$(CC)'),
'AR.target': GetEnvironFallback(('AR_target', 'AR'), '$(AR)'),
'CXX.target': GetEnvironFallback(('CXX_target', 'CXX'), '$(CXX)'),
- 'LINK.target': GetEnvironFallback(('LD_target', 'LD'), '$(LINK)'),
+ 'LINK.target': GetEnvironFallback(('LINK_target', 'LINK'), '$(LINK)'),
'CC.host': GetEnvironFallback(('CC_host',), 'gcc'),
'AR.host': GetEnvironFallback(('AR_host',), 'ar'),
'CXX.host': GetEnvironFallback(('CXX_host',), 'g++'),
- 'LINK.host': GetEnvironFallback(('LD_host',), 'g++'),
+ 'LINK.host': GetEnvironFallback(('LINK_host',), '$(CXX.host)'),
})
build_file, _, _ = gyp.common.ParseQualifiedTarget(target_list[0])
make_global_settings_array = data[build_file].get('make_global_settings', [])
+ wrappers = {}
+ wrappers['LINK'] = '%s $(builddir)/linker.lock' % flock_command
+ for key, value in make_global_settings_array:
+ if key.endswith('_wrapper'):
+ wrappers[key[:-len('_wrapper')]] = '$(abspath %s)' % value
make_global_settings = ''
for key, value in make_global_settings_array:
+ if re.match('.*_wrapper', key):
+ continue
if value[0] != '$':
value = '$(abspath %s)' % value
- if key == 'LINK':
- make_global_settings += ('%s ?= %s $(builddir)/linker.lock %s\n' %
- (key, flock_command, value))
- elif key in ('CC', 'CC.host', 'CXX', 'CXX.host'):
+ wrapper = wrappers.get(key)
+ if wrapper:
+ value = '%s %s' % (wrapper, value)
+ del wrappers[key]
+ if key in ('CC', 'CC.host', 'CXX', 'CXX.host'):
make_global_settings += (
'ifneq (,$(filter $(origin %s), undefined default))\n' % key)
# Let gyp-time envvars win over global settings.
- if key in os.environ:
- value = os.environ[key]
+ env_key = key.replace('.', '_') # CC.host -> CC_host
+ if env_key in os.environ:
+ value = os.environ[env_key]
make_global_settings += ' %s = %s\n' % (key, value)
make_global_settings += 'endif\n'
else:
make_global_settings += '%s ?= %s\n' % (key, value)
+ # TODO(ukai): define cmd when only wrapper is specified in
+ # make_global_settings.
+
header_params['make_global_settings'] = make_global_settings
- ensure_directory_exists(makefile_path)
+ gyp.common.EnsureDirExists(makefile_path)
root_makefile = open(makefile_path, 'w')
root_makefile.write(SHARED_HEADER % header_params)
# Currently any versions have the same effect, but in future the behavior
@@ -2071,7 +2098,8 @@ def GenerateOutput(target_list, target_dicts, data, params):
this_make_global_settings = data[build_file].get('make_global_settings', [])
assert make_global_settings_array == this_make_global_settings, (
- "make_global_settings needs to be the same for all targets.")
+ "make_global_settings needs to be the same for all targets. %s vs. %s" %
+ (this_make_global_settings, make_global_settings))
build_files.add(gyp.common.RelativePath(build_file, options.toplevel_dir))
included_files = data[build_file]['included_files']
diff --git a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/msvs.py b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/msvs.py
index 0e62b7926..c59aea106 100644
--- a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/msvs.py
+++ b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/msvs.py
@@ -2,6 +2,7 @@
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
+import collections
import copy
import ntpath
import os
@@ -17,9 +18,20 @@ import gyp.MSVSProject as MSVSProject
import gyp.MSVSSettings as MSVSSettings
import gyp.MSVSToolFile as MSVSToolFile
import gyp.MSVSUserFile as MSVSUserFile
+import gyp.MSVSUtil as MSVSUtil
import gyp.MSVSVersion as MSVSVersion
from gyp.common import GypError
+# TODO: Remove once bots are on 2.7, http://crbug.com/241769
+def _import_OrderedDict():
+ import collections
+ try:
+ return collections.OrderedDict
+ except AttributeError:
+ import gyp.ordered_dict
+ return gyp.ordered_dict.OrderedDict
+OrderedDict = _import_OrderedDict()
+
# Regular expression for validating Visual Studio GUIDs. If the GUID
# contains lowercase hex letters, MSVS will be fine. However,
@@ -63,7 +75,12 @@ generator_additional_path_sections = [
generator_additional_non_configuration_keys = [
'msvs_cygwin_dirs',
'msvs_cygwin_shell',
+ 'msvs_large_pdb',
'msvs_shard',
+ 'msvs_external_builder',
+ 'msvs_external_builder_out_dir',
+ 'msvs_external_builder_build_cmd',
+ 'msvs_external_builder_clean_cmd',
]
@@ -80,6 +97,46 @@ cached_username = None
cached_domain = None
+# Based on http://code.activestate.com/recipes/576694/.
+class OrderedSet(collections.MutableSet):
+ def __init__(self, iterable=None):
+ self.end = end = []
+ end += [None, end, end] # sentinel node for doubly linked list
+ self.map = {} # key --> [key, prev, next]
+ if iterable is not None:
+ self |= iterable
+
+ def __len__(self):
+ return len(self.map)
+
+ def discard(self, key):
+ if key in self.map:
+ key, prev, next = self.map.pop(key)
+ prev[2] = next
+ next[1] = prev
+
+ def __contains__(self, key):
+ return key in self.map
+
+ def add(self, key):
+ if key not in self.map:
+ end = self.end
+ curr = end[1]
+ curr[2] = end[1] = self.map[key] = [key, curr, end]
+
+ def update(self, iterable):
+ for i in iterable:
+ if i not in self:
+ self.add(i)
+
+ def __iter__(self):
+ end = self.end
+ curr = end[2]
+ while curr is not end:
+ yield curr[0]
+ curr = curr[2]
+
+
# TODO(gspencer): Switch the os.environ calls to be
# win32api.GetDomainName() and win32api.GetUserName() once the
# python version in depot_tools has been updated to work on Vista
@@ -152,13 +209,14 @@ def _FixPaths(paths):
def _ConvertSourcesToFilterHierarchy(sources, prefix=None, excluded=None,
- list_excluded=True):
+ list_excluded=True, msvs_version=None):
"""Converts a list split source file paths into a vcproj folder hierarchy.
Arguments:
sources: A list of source file paths split.
prefix: A list of source file path layers meant to apply to each of sources.
excluded: A set of excluded files.
+ msvs_version: A MSVSVersion object.
Returns:
A hierarchy of filenames and MSVSProject.Filter objects that matches the
@@ -173,7 +231,7 @@ def _ConvertSourcesToFilterHierarchy(sources, prefix=None, excluded=None,
if not prefix: prefix = []
result = []
excluded_result = []
- folders = dict()
+ folders = OrderedDict()
# Gather files into the final result, excluded, or folders.
for s in sources:
if len(s) == 1:
@@ -182,15 +240,28 @@ def _ConvertSourcesToFilterHierarchy(sources, prefix=None, excluded=None,
excluded_result.append(filename)
else:
result.append(filename)
- else:
+ elif msvs_version and not msvs_version.UsesVcxproj():
+ # For MSVS 2008 and earlier, we need to process all files before walking
+ # the sub folders.
if not folders.get(s[0]):
folders[s[0]] = []
folders[s[0]].append(s[1:])
+ else:
+ contents = _ConvertSourcesToFilterHierarchy([s[1:]], prefix + [s[0]],
+ excluded=excluded,
+ list_excluded=list_excluded,
+ msvs_version=msvs_version)
+ contents = MSVSProject.Filter(s[0], contents=contents)
+ result.append(contents)
# Add a folder for excluded files.
if excluded_result and list_excluded:
excluded_folder = MSVSProject.Filter('_excluded_files',
contents=excluded_result)
result.append(excluded_folder)
+
+ if msvs_version and msvs_version.UsesVcxproj():
+ return result
+
# Populate all the folders.
for f in folders:
contents = _ConvertSourcesToFilterHierarchy(folders[f], prefix=prefix + [f],
@@ -198,12 +269,15 @@ def _ConvertSourcesToFilterHierarchy(sources, prefix=None, excluded=None,
list_excluded=list_excluded)
contents = MSVSProject.Filter(f, contents=contents)
result.append(contents)
-
return result
def _ToolAppend(tools, tool_name, setting, value, only_if_unset=False):
if not value: return
+ _ToolSetOrAppend(tools, tool_name, setting, value, only_if_unset)
+
+
+def _ToolSetOrAppend(tools, tool_name, setting, value, only_if_unset=False):
# TODO(bradnelson): ugly hack, fix this more generally!!!
if 'Directories' in setting or 'Dependencies' in setting:
if type(value) == str:
@@ -215,7 +289,7 @@ def _ToolAppend(tools, tool_name, setting, value, only_if_unset=False):
tool = tools[tool_name]
if tool.get(setting):
if only_if_unset: return
- if type(tool[setting]) == list:
+ if type(tool[setting]) == list and type(value) == list:
tool[setting] += value
else:
raise TypeError(
@@ -232,7 +306,7 @@ def _ConfigPlatform(config_data):
def _ConfigBaseName(config_name, platform_name):
if config_name.endswith('_' + platform_name):
- return config_name[0:-len(platform_name)-1]
+ return config_name[0:-len(platform_name) - 1]
else:
return config_name
@@ -270,7 +344,7 @@ def _BuildCommandLineForRuleRaw(spec, cmd, cygwin_shell, has_input_path,
'`cygpath -m "${INPUTPATH}"`')
for i in direct_cmd]
direct_cmd = ['\\"%s\\"' % i.replace('"', '\\\\\\"') for i in direct_cmd]
- #direct_cmd = gyp.common.EncodePOSIXShellList(direct_cmd)
+ # direct_cmd = gyp.common.EncodePOSIXShellList(direct_cmd)
direct_cmd = ' '.join(direct_cmd)
# TODO(quote): regularize quoting path names throughout the module
cmd = ''
@@ -306,7 +380,7 @@ def _BuildCommandLineForRuleRaw(spec, cmd, cygwin_shell, has_input_path,
# If the argument starts with a slash or dash, it's probably a command line
# switch
arguments = [i if (i[:1] in "/-") else _FixPath(i) for i in cmd[1:]]
- arguments = [i.replace('$(InputDir)','%INPUTDIR%') for i in arguments]
+ arguments = [i.replace('$(InputDir)', '%INPUTDIR%') for i in arguments]
arguments = [MSVSSettings.FixVCMacroSlashes(i) for i in arguments]
if quote_cmd:
# Support a mode for using cmd directly.
@@ -405,13 +479,13 @@ def _AddAccumulatedActionsToMSVS(p, spec, actions_dict):
dicts describing the actions attached to that input file.
"""
for primary_input in actions_dict:
- inputs = set()
- outputs = set()
+ inputs = OrderedSet()
+ outputs = OrderedSet()
descriptions = []
commands = []
for action in actions_dict[primary_input]:
- inputs.update(set(action['inputs']))
- outputs.update(set(action['outputs']))
+ inputs.update(OrderedSet(action['inputs']))
+ outputs.update(OrderedSet(action['outputs']))
descriptions.append(action['description'])
commands.append(action['command'])
# Add the custom build step for one input file.
@@ -453,8 +527,7 @@ def _FindRuleTriggerFiles(rule, sources):
Returns:
The list of sources that trigger a particular rule.
"""
- rule_ext = rule['extension']
- return [s for s in sources if s.endswith('.' + rule_ext)]
+ return rule.get('rule_sources', [])
def _RuleInputsAndOutputs(rule, trigger_file):
@@ -468,8 +541,8 @@ def _RuleInputsAndOutputs(rule, trigger_file):
"""
raw_inputs = _FixPaths(rule.get('inputs', []))
raw_outputs = _FixPaths(rule.get('outputs', []))
- inputs = set()
- outputs = set()
+ inputs = OrderedSet()
+ outputs = OrderedSet()
inputs.add(trigger_file)
for i in raw_inputs:
inputs.add(_RuleExpandPath(i, trigger_file))
@@ -540,16 +613,16 @@ def _GenerateExternalRules(rules, output_dir, spec,
mk_file.write('OutDirCygwin:=$(shell cygpath -u "$(OutDir)")\n')
mk_file.write('IntDirCygwin:=$(shell cygpath -u "$(IntDir)")\n')
# Gather stuff needed to emit all: target.
- all_inputs = set()
- all_outputs = set()
- all_output_dirs = set()
+ all_inputs = OrderedSet()
+ all_outputs = OrderedSet()
+ all_output_dirs = OrderedSet()
first_outputs = []
for rule in rules:
trigger_files = _FindRuleTriggerFiles(rule, sources)
for tf in trigger_files:
inputs, outputs = _RuleInputsAndOutputs(rule, tf)
- all_inputs.update(set(inputs))
- all_outputs.update(set(outputs))
+ all_inputs.update(OrderedSet(inputs))
+ all_outputs.update(OrderedSet(outputs))
# Only use one target from each rule as the dependency for
# 'all' so we don't try to build each rule multiple times.
first_outputs.append(list(outputs)[0])
@@ -720,7 +793,7 @@ def _EscapeCommandLineArgumentForMSBuild(s):
"""Escapes a Windows command-line argument for use by MSBuild."""
def _Replace(match):
- return (len(match.group(1))/2*4)*'\\' + '\\"'
+ return (len(match.group(1)) / 2 * 4) * '\\' + '\\"'
# Escape all quotes so that they are interpreted literally.
s = quote_replacer_regex2.sub(_Replace, s)
@@ -778,10 +851,10 @@ def _GenerateRulesForMSVS(p, output_dir, options, spec,
if rules_external:
_GenerateExternalRules(rules_external, output_dir, spec,
sources, options, actions_to_add)
- _AdjustSourcesForRules(rules, sources, excluded_sources)
+ _AdjustSourcesForRules(spec, rules, sources, excluded_sources)
-def _AdjustSourcesForRules(rules, sources, excluded_sources):
+def _AdjustSourcesForRules(spec, rules, sources, excluded_sources):
# Add outputs generated by each rule (if applicable).
for rule in rules:
# Done if not processing outputs as sources.
@@ -790,11 +863,12 @@ def _AdjustSourcesForRules(rules, sources, excluded_sources):
trigger_files = _FindRuleTriggerFiles(rule, sources)
for trigger_file in trigger_files:
inputs, outputs = _RuleInputsAndOutputs(rule, trigger_file)
- inputs = set(_FixPaths(inputs))
- outputs = set(_FixPaths(outputs))
+ inputs = OrderedSet(_FixPaths(inputs))
+ outputs = OrderedSet(_FixPaths(outputs))
inputs.remove(_FixPath(trigger_file))
sources.update(inputs)
- excluded_sources.update(inputs)
+ if not spec.get('msvs_external_builder'):
+ excluded_sources.update(inputs)
sources.update(outputs)
@@ -807,7 +881,7 @@ def _FilterActionsFromExcluded(excluded_sources, actions_to_add):
Returns:
excluded_sources with files that have actions attached removed.
"""
- must_keep = set(_FixPaths(actions_to_add.keys()))
+ must_keep = OrderedSet(_FixPaths(actions_to_add.keys()))
return [s for s in excluded_sources if s not in must_keep]
@@ -890,9 +964,7 @@ def _GenerateMSVSProject(project, options, version, generator_flags):
generator_flags: dict of generator-specific flags.
"""
spec = project.spec
- vcproj_dir = os.path.dirname(project.path)
- if vcproj_dir and not os.path.exists(vcproj_dir):
- os.makedirs(vcproj_dir)
+ gyp.common.EnsureDirExists(project.path)
platforms = _GetUniquePlatforms(spec)
p = MSVSProject.Writer(project.path, version, spec['target_name'],
@@ -919,8 +991,9 @@ def _GenerateMSVSProject(project, options, version, generator_flags):
actions_to_add)
list_excluded = generator_flags.get('msvs_list_excluded_files', True)
sources, excluded_sources, excluded_idl = (
- _AdjustSourcesAndConvertToFilterHierarchy(
- spec, options, project_dir, sources, excluded_sources, list_excluded))
+ _AdjustSourcesAndConvertToFilterHierarchy(spec, options, project_dir,
+ sources, excluded_sources,
+ list_excluded, version))
# Add in files.
missing_sources = _VerifySourcesExist(sources, project_dir)
@@ -955,7 +1028,7 @@ def _GetUniquePlatforms(spec):
The MSVSUserFile object created.
"""
# Gather list of unique platforms.
- platforms = set()
+ platforms = OrderedSet()
for configuration in spec['configurations']:
platforms.add(_ConfigPlatform(spec['configurations'][configuration]))
platforms = list(platforms)
@@ -1001,12 +1074,12 @@ def _GetMSVSConfigurationType(spec, build_file):
}[spec['type']]
except KeyError:
if spec.get('type'):
- raise Exception('Target type %s is not a valid target type for '
- 'target %s in %s.' %
- (spec['type'], spec['target_name'], build_file))
+ raise GypError('Target type %s is not a valid target type for '
+ 'target %s in %s.' %
+ (spec['type'], spec['target_name'], build_file))
else:
- raise Exception('Missing type field for target %s in %s.' %
- (spec['target_name'], build_file))
+ raise GypError('Missing type field for target %s in %s.' %
+ (spec['target_name'], build_file))
return config_type
@@ -1021,12 +1094,13 @@ def _AddConfigurationToMSVSProject(p, spec, config_type, config_name, config):
spec: The target dictionary containing the properties of the target.
config_type: The configuration type, a number as defined by Microsoft.
config_name: The name of the configuration.
- config: The dictionnary that defines the special processing to be done
+ config: The dictionary that defines the special processing to be done
for this configuration.
"""
# Get the information for this configuration
include_dirs, resource_include_dirs = _GetIncludeDirs(config)
libraries = _GetLibraries(spec)
+ library_dirs = _GetLibraryDirs(config)
out_file, vc_tool, _ = _GetOutputFilePathAndTool(spec, msbuild=False)
defines = _GetDefines(config)
defines = [_EscapeCppDefineForMSVS(d) for d in defines]
@@ -1041,6 +1115,10 @@ def _AddConfigurationToMSVSProject(p, spec, config_type, config_name, config):
# Add in user specified msvs_settings.
msvs_settings = config.get('msvs_settings', {})
MSVSSettings.ValidateMSVSSettings(msvs_settings)
+
+ # Prevent default library inheritance from the environment.
+ _ToolAppend(tools, 'VCLinkerTool', 'AdditionalDependencies', ['$(NOINHERIT)'])
+
for tool in msvs_settings:
settings = config['msvs_settings'][tool]
for setting in settings:
@@ -1052,6 +1130,8 @@ def _AddConfigurationToMSVSProject(p, spec, config_type, config_name, config):
'AdditionalIncludeDirectories', resource_include_dirs)
# Add in libraries.
_ToolAppend(tools, 'VCLinkerTool', 'AdditionalDependencies', libraries)
+ _ToolAppend(tools, 'VCLinkerTool', 'AdditionalLibraryDirectories',
+ library_dirs)
if out_file:
_ToolAppend(tools, vc_tool, 'OutputFile', out_file, only_if_unset=True)
# Add defines.
@@ -1091,7 +1171,7 @@ def _GetIncludeDirs(config):
"""Returns the list of directories to be used for #include directives.
Arguments:
- config: The dictionnary that defines the special processing to be done
+ config: The dictionary that defines the special processing to be done
for this configuration.
Returns:
The list of directory paths.
@@ -1107,6 +1187,21 @@ def _GetIncludeDirs(config):
return include_dirs, resource_include_dirs
+def _GetLibraryDirs(config):
+ """Returns the list of directories to be used for library search paths.
+
+ Arguments:
+ config: The dictionary that defines the special processing to be done
+ for this configuration.
+ Returns:
+ The list of directory paths.
+ """
+
+ library_dirs = config.get('library_dirs', [])
+ library_dirs = _FixPaths(library_dirs)
+ return library_dirs
+
+
def _GetLibraries(spec):
"""Returns the list of libraries for this configuration.
@@ -1120,7 +1215,7 @@ def _GetLibraries(spec):
# in libraries that are assumed to be in the default library path).
# Also remove duplicate entries, leaving only the last duplicate, while
# preserving order.
- found = set()
+ found = OrderedSet()
unique_libraries_list = []
for entry in reversed(libraries):
library = re.sub('^\-l', '', entry)
@@ -1171,11 +1266,29 @@ def _GetOutputFilePathAndTool(spec, msbuild):
return out_file, vc_tool, msbuild_tool
+def _GetOutputTargetExt(spec):
+ """Returns the extension for this target, including the dot
+
+ If product_extension is specified, set target_extension to this to avoid
+ MSB8012, returns None otherwise. Ignores any target_extension settings in
+ the input files.
+
+ Arguments:
+ spec: The target dictionary containing the properties of the target.
+ Returns:
+ A string with the extension, or None
+ """
+ target_extension = spec.get('product_extension')
+ if target_extension:
+ return '.' + target_extension
+ return None
+
+
def _GetDefines(config):
"""Returns the list of preprocessor definitions for this configuation.
Arguments:
- config: The dictionnary that defines the special processing to be done
+ config: The dictionary that defines the special processing to be done
for this configuration.
Returns:
The list of preprocessor definitions.
@@ -1212,7 +1325,7 @@ def _ConvertToolsToExpectedForm(tools):
"""Convert tools to a form expected by Visual Studio.
Arguments:
- tools: A dictionnary of settings; the tool name is the key.
+ tools: A dictionary of settings; the tool name is the key.
Returns:
A list of Tool objects.
"""
@@ -1241,8 +1354,8 @@ def _AddConfigurationToMSVS(p, spec, tools, config, config_type, config_name):
Arguments:
p: The target project being generated.
spec: the target project dict.
- tools: A dictionnary of settings; the tool name is the key.
- config: The dictionnary that defines the special processing to be done
+ tools: A dictionary of settings; the tool name is the key.
+ config: The dictionary that defines the special processing to be done
for this configuration.
config_type: The configuration type, a number as defined by Microsoft.
config_name: The name of the configuration.
@@ -1281,8 +1394,7 @@ def _GetMSVSAttributes(spec, config, config_type):
def _AddNormalizedSources(sources_set, sources_array):
- sources = [_NormalizedSource(s) for s in sources_array]
- sources_set.update(set(sources))
+ sources_set.update(_NormalizedSource(s) for s in sources_array)
def _PrepareListOfSources(spec, generator_flags, gyp_file):
@@ -1300,9 +1412,9 @@ def _PrepareListOfSources(spec, generator_flags, gyp_file):
A pair of (list of sources, list of excluded sources).
The sources will be relative to the gyp file.
"""
- sources = set()
+ sources = OrderedSet()
_AddNormalizedSources(sources, spec.get('sources', []))
- excluded_sources = set()
+ excluded_sources = OrderedSet()
# Add in the gyp file.
if not generator_flags.get('standalone'):
sources.add(gyp_file)
@@ -1312,9 +1424,10 @@ def _PrepareListOfSources(spec, generator_flags, gyp_file):
inputs = a['inputs']
inputs = [_NormalizedSource(i) for i in inputs]
# Add all inputs to sources and excluded sources.
- inputs = set(inputs)
+ inputs = OrderedSet(inputs)
sources.update(inputs)
- excluded_sources.update(inputs)
+ if not spec.get('msvs_external_builder'):
+ excluded_sources.update(inputs)
if int(a.get('process_outputs_as_sources', False)):
_AddNormalizedSources(sources, a.get('outputs', []))
# Add in 'copies' inputs and outputs.
@@ -1324,7 +1437,7 @@ def _PrepareListOfSources(spec, generator_flags, gyp_file):
def _AdjustSourcesAndConvertToFilterHierarchy(
- spec, options, gyp_dir, sources, excluded_sources, list_excluded):
+ spec, options, gyp_dir, sources, excluded_sources, list_excluded, version):
"""Adjusts the list of sources and excluded sources.
Also converts the sets to lists.
@@ -1335,12 +1448,13 @@ def _AdjustSourcesAndConvertToFilterHierarchy(
gyp_dir: The path to the gyp file being processed.
sources: A set of sources to be included for this project.
excluded_sources: A set of sources to be excluded for this project.
+ version: A MSVSVersion object.
Returns:
A trio of (list of sources, list of excluded sources,
path of excluded IDL file)
"""
# Exclude excluded sources coming into the generator.
- excluded_sources.update(set(spec.get('sources_excluded', [])))
+ excluded_sources.update(OrderedSet(spec.get('sources_excluded', [])))
# Add excluded sources into sources for good measure.
sources.update(excluded_sources)
# Convert to proper windows form.
@@ -1359,7 +1473,13 @@ def _AdjustSourcesAndConvertToFilterHierarchy(
# Convert to folders and the right slashes.
sources = [i.split('\\') for i in sources]
sources = _ConvertSourcesToFilterHierarchy(sources, excluded=fully_excluded,
- list_excluded=list_excluded)
+ list_excluded=list_excluded,
+ msvs_version=version)
+
+ # Prune filters with a single child to flatten ugly directory structures
+ # such as ../../src/modules/module1 etc.
+ while len(sources) == 1 and isinstance(sources[0], MSVSProject.Filter):
+ sources = sources[0].contents
return sources, excluded_sources, excluded_idl
@@ -1428,7 +1548,7 @@ def _GetExcludedFilesFromBuild(spec, excluded_sources, excluded_idl):
def _AddToolFilesToMSVS(p, spec):
# Add in tool files (rules).
- tool_files = set()
+ tool_files = OrderedSet()
for _, config in spec['configurations'].iteritems():
for f in config.get('msvs_tool_files', []):
tool_files.add(f)
@@ -1663,7 +1783,7 @@ def _CreateProjectObjects(target_list, target_dicts, options, msvs_version):
for qualified_target in target_list:
spec = target_dicts[qualified_target]
if spec['toolset'] != 'target':
- raise Exception(
+ raise GypError(
'Multiple toolsets not supported in msvs build (target %s)' %
qualified_target)
proj_path, fixpath_prefix = _GetPathOfProject(qualified_target, spec,
@@ -1685,14 +1805,58 @@ def _CreateProjectObjects(target_list, target_dicts, options, msvs_version):
obj.set_msbuild_toolset(
_GetMsbuildToolsetOfProject(proj_path, spec, msvs_version))
projects[qualified_target] = obj
- # Set all the dependencies
+ # Set all the dependencies, but not if we are using an external builder like
+ # ninja
for project in projects.values():
- deps = project.spec.get('dependencies', [])
- deps = [projects[d] for d in deps]
- project.set_dependencies(deps)
+ if not project.spec.get('msvs_external_builder'):
+ deps = project.spec.get('dependencies', [])
+ deps = [projects[d] for d in deps]
+ project.set_dependencies(deps)
return projects
+def _InitNinjaFlavor(options, target_list, target_dicts):
+ """Initialize targets for the ninja flavor.
+
+ This sets up the necessary variables in the targets to generate msvs projects
+ that use ninja as an external builder. The variables in the spec are only set
+ if they have not been set. This allows individual specs to override the
+ default values initialized here.
+ Arguments:
+ options: Options provided to the generator.
+ target_list: List of target pairs: 'base/base.gyp:base'.
+ target_dicts: Dict of target properties keyed on target pair.
+ """
+ for qualified_target in target_list:
+ spec = target_dicts[qualified_target]
+ if spec.get('msvs_external_builder'):
+ # The spec explicitly defined an external builder, so don't change it.
+ continue
+
+ path_to_ninja = spec.get('msvs_path_to_ninja', 'ninja.exe')
+
+ spec['msvs_external_builder'] = 'ninja'
+ if not spec.get('msvs_external_builder_out_dir'):
+ spec['msvs_external_builder_out_dir'] = \
+ options.depth + '/out/$(Configuration)'
+ if not spec.get('msvs_external_builder_build_cmd'):
+ spec['msvs_external_builder_build_cmd'] = [
+ path_to_ninja,
+ '-C',
+ '$(OutDir)',
+ '$(ProjectName)',
+ ]
+ if not spec.get('msvs_external_builder_clean_cmd'):
+ spec['msvs_external_builder_clean_cmd'] = [
+ path_to_ninja,
+ '-C',
+ '$(OutDir)',
+ '-t',
+ 'clean',
+ '$(ProjectName)',
+ ]
+
+
def CalculateVariables(default_variables, params):
"""Generated variables that require params to be known."""
@@ -1717,73 +1881,8 @@ def CalculateVariables(default_variables, params):
else:
default_variables['MSVS_OS_BITS'] = 32
-
-def _ShardName(name, number):
- """Add a shard number to the end of a target.
-
- Arguments:
- name: name of the target (foo#target)
- number: shard number
- Returns:
- Target name with shard added (foo_1#target)
- """
- parts = name.rsplit('#', 1)
- parts[0] = '%s_%d' % (parts[0], number)
- return '#'.join(parts)
-
-
-def _ShardTargets(target_list, target_dicts):
- """Shard some targets apart to work around the linkers limits.
-
- Arguments:
- target_list: List of target pairs: 'base/base.gyp:base'.
- target_dicts: Dict of target properties keyed on target pair.
- Returns:
- Tuple of the new sharded versions of the inputs.
- """
- # Gather the targets to shard, and how many pieces.
- targets_to_shard = {}
- for t in target_dicts:
- shards = int(target_dicts[t].get('msvs_shard', 0))
- if shards:
- targets_to_shard[t] = shards
- # Shard target_list.
- new_target_list = []
- for t in target_list:
- if t in targets_to_shard:
- for i in range(targets_to_shard[t]):
- new_target_list.append(_ShardName(t, i))
- else:
- new_target_list.append(t)
- # Shard target_dict.
- new_target_dicts = {}
- for t in target_dicts:
- if t in targets_to_shard:
- for i in range(targets_to_shard[t]):
- name = _ShardName(t, i)
- new_target_dicts[name] = copy.copy(target_dicts[t])
- new_target_dicts[name]['target_name'] = _ShardName(
- new_target_dicts[name]['target_name'], i)
- sources = new_target_dicts[name].get('sources', [])
- new_sources = []
- for pos in range(i, len(sources), targets_to_shard[t]):
- new_sources.append(sources[pos])
- new_target_dicts[name]['sources'] = new_sources
- else:
- new_target_dicts[t] = target_dicts[t]
- # Shard dependencies.
- for t in new_target_dicts:
- dependencies = copy.copy(new_target_dicts[t].get('dependencies', []))
- new_dependencies = []
- for d in dependencies:
- if d in targets_to_shard:
- for i in range(targets_to_shard[d]):
- new_dependencies.append(_ShardName(d, i))
- else:
- new_dependencies.append(d)
- new_target_dicts[t]['dependencies'] = new_dependencies
-
- return (new_target_list, new_target_dicts)
+ if gyp.common.GetFlavor(params) == 'ninja':
+ default_variables['SHARED_INTERMEDIATE_DIR'] = '$(OutDir)gen'
def PerformBuild(data, configurations, params):
@@ -1825,7 +1924,16 @@ def GenerateOutput(target_list, target_dicts, data, params):
generator_flags = params.get('generator_flags', {})
# Optionally shard targets marked with 'msvs_shard': SHARD_COUNT.
- (target_list, target_dicts) = _ShardTargets(target_list, target_dicts)
+ (target_list, target_dicts) = MSVSUtil.ShardTargets(target_list, target_dicts)
+
+ # Optionally use the large PDB workaround for targets marked with
+ # 'msvs_large_pdb': 1.
+ (target_list, target_dicts) = MSVSUtil.InsertLargePdbShims(
+ target_list, target_dicts, generator_default_variables)
+
+ # Optionally configure each spec to use ninja as the external builder.
+ if params.get('flavor') == 'ninja':
+ _InitNinjaFlavor(options, target_list, target_dicts)
# Prepare the set of configurations.
configs = set()
@@ -1872,9 +1980,9 @@ def GenerateOutput(target_list, target_dicts, data, params):
error_message = "Missing input files:\n" + \
'\n'.join(set(missing_sources))
if generator_flags.get('msvs_error_on_missing_sources', False):
- raise Exception(error_message)
+ raise GypError(error_message)
else:
- print >>sys.stdout, "Warning: " + error_message
+ print >> sys.stdout, "Warning: " + error_message
def _GenerateMSBuildFiltersFile(filters_path, source_files,
@@ -2017,7 +2125,7 @@ def _GenerateRulesForMSBuild(output_dir, options, spec,
if rules_external:
_GenerateExternalRules(rules_external, output_dir, spec,
sources, options, actions_to_add)
- _AdjustSourcesForRules(rules, sources, excluded_sources)
+ _AdjustSourcesForRules(spec, rules, sources, excluded_sources)
class MSBuildRule(object):
@@ -2616,6 +2724,10 @@ def _GetMSBuildAttributes(spec, config, build_file):
ext = spec.get('product_extension')
msbuild_attributes['TargetExt'] = '.' + ext
+ if spec.get('msvs_external_builder'):
+ external_out_dir = spec.get('msvs_external_builder_out_dir', '.')
+ msbuild_attributes['OutputDirectory'] = _FixPath(external_out_dir) + '\\'
+
# Make sure that 'TargetPath' matches 'Lib.OutputFile' or 'Link.OutputFile'
# (depending on the tool used) to avoid MSB8012 warning.
msbuild_tool_map = {
@@ -2630,6 +2742,9 @@ def _GetMSBuildAttributes(spec, config, build_file):
out_file = msbuild_settings[msbuild_tool].get('OutputFile')
if out_file:
msbuild_attributes['TargetPath'] = _FixPath(out_file)
+ target_ext = msbuild_settings[msbuild_tool].get('TargetExt')
+ if target_ext:
+ msbuild_attributes['TargetExt'] = target_ext
return msbuild_attributes
@@ -2668,6 +2783,9 @@ def _GetMSBuildConfigurationGlobalProperties(spec, configurations, build_file):
if attributes.get('TargetPath'):
_AddConditionalProperty(properties, condition, 'TargetPath',
attributes['TargetPath'])
+ if attributes.get('TargetExt'):
+ _AddConditionalProperty(properties, condition, 'TargetExt',
+ attributes['TargetExt'])
if new_paths:
_AddConditionalProperty(properties, condition, 'ExecutablePath',
@@ -2786,7 +2904,9 @@ def _FinalizeMSBuildSettings(spec, configuration):
msbuild_settings = MSVSSettings.ConvertToMSBuildSettings(msvs_settings)
include_dirs, resource_include_dirs = _GetIncludeDirs(configuration)
libraries = _GetLibraries(spec)
+ library_dirs = _GetLibraryDirs(configuration)
out_file, _, msbuild_tool = _GetOutputFilePathAndTool(spec, msbuild=True)
+ target_ext = _GetOutputTargetExt(spec)
defines = _GetDefines(configuration)
if converted:
# Visual Studio 2010 has TR1
@@ -2815,11 +2935,18 @@ def _FinalizeMSBuildSettings(spec, configuration):
'AdditionalIncludeDirectories', include_dirs)
_ToolAppend(msbuild_settings, 'ResourceCompile',
'AdditionalIncludeDirectories', resource_include_dirs)
- # Add in libraries.
- _ToolAppend(msbuild_settings, 'Link', 'AdditionalDependencies', libraries)
+ # Add in libraries, note that even for empty libraries, we want this
+ # set, to prevent inheriting default libraries from the enviroment.
+ _ToolSetOrAppend(msbuild_settings, 'Link', 'AdditionalDependencies',
+ libraries)
+ _ToolAppend(msbuild_settings, 'Link', 'AdditionalLibraryDirectories',
+ library_dirs)
if out_file:
_ToolAppend(msbuild_settings, msbuild_tool, 'OutputFile', out_file,
only_if_unset=True)
+ if target_ext:
+ _ToolAppend(msbuild_settings, msbuild_tool, 'TargetExt', target_ext,
+ only_if_unset=True)
# Add defines.
_ToolAppend(msbuild_settings, 'ClCompile',
'PreprocessorDefinitions', defines)
@@ -2835,7 +2962,7 @@ def _FinalizeMSBuildSettings(spec, configuration):
_ToolAppend(msbuild_settings, 'ClCompile',
'PrecompiledHeaderFile', precompiled_header)
_ToolAppend(msbuild_settings, 'ClCompile',
- 'ForcedIncludeFiles', precompiled_header)
+ 'ForcedIncludeFiles', [precompiled_header])
# Loadable modules don't generate import libraries;
# tell dependent projects to not expect one.
if spec['type'] == 'loadable_module':
@@ -2850,8 +2977,7 @@ def _GetValueFormattedForMSBuild(tool_name, name, value):
if type(value) == list:
# For some settings, VS2010 does not automatically extends the settings
# TODO(jeanluc) Is this what we want?
- if name in ['AdditionalDependencies',
- 'AdditionalIncludeDirectories',
+ if name in ['AdditionalIncludeDirectories',
'AdditionalLibraryDirectories',
'AdditionalOptions',
'DelayLoadDLLs',
@@ -3000,9 +3126,7 @@ def _GenerateMSBuildProject(project, options, version, generator_flags):
spec = project.spec
configurations = spec['configurations']
project_dir, project_file_name = os.path.split(project.path)
- msbuildproj_dir = os.path.dirname(project.path)
- if msbuildproj_dir and not os.path.exists(msbuildproj_dir):
- os.makedirs(msbuildproj_dir)
+ gyp.common.EnsureDirExists(project.path)
# Prepare list of sources and excluded sources.
gyp_path = _NormalizedSource(project.build_file)
relative_path_of_gyp_file = gyp.common.RelativePath(gyp_path, project_dir)
@@ -3016,22 +3140,32 @@ def _GenerateMSBuildProject(project, options, version, generator_flags):
targets_files_of_rules = set()
extension_to_rule_name = {}
list_excluded = generator_flags.get('msvs_list_excluded_files', True)
- _GenerateRulesForMSBuild(project_dir, options, spec,
- sources, excluded_sources,
- props_files_of_rules, targets_files_of_rules,
- actions_to_add, extension_to_rule_name)
+
+ # Don't generate rules if we are using an external builder like ninja.
+ if not spec.get('msvs_external_builder'):
+ _GenerateRulesForMSBuild(project_dir, options, spec,
+ sources, excluded_sources,
+ props_files_of_rules, targets_files_of_rules,
+ actions_to_add, extension_to_rule_name)
+ else:
+ rules = spec.get('rules', [])
+ _AdjustSourcesForRules(spec, rules, sources, excluded_sources)
+
sources, excluded_sources, excluded_idl = (
_AdjustSourcesAndConvertToFilterHierarchy(spec, options,
project_dir, sources,
excluded_sources,
- list_excluded))
- _AddActions(actions_to_add, spec, project.build_file)
- _AddCopies(actions_to_add, spec)
+ list_excluded, version))
- # NOTE: this stanza must appear after all actions have been decided.
- # Don't excluded sources with actions attached, or they won't run.
- excluded_sources = _FilterActionsFromExcluded(
- excluded_sources, actions_to_add)
+ # Don't add actions if we are using an external builder like ninja.
+ if not spec.get('msvs_external_builder'):
+ _AddActions(actions_to_add, spec, project.build_file)
+ _AddCopies(actions_to_add, spec)
+
+ # NOTE: this stanza must appear after all actions have been decided.
+ # Don't excluded sources with actions attached, or they won't run.
+ excluded_sources = _FilterActionsFromExcluded(
+ excluded_sources, actions_to_add)
exclusions = _GetExcludedFilesFromBuild(spec, excluded_sources, excluded_idl)
actions_spec, sources_handled_by_action = _GenerateActionsForMSBuild(
@@ -3080,6 +3214,9 @@ def _GenerateMSBuildProject(project, options, version, generator_flags):
content += import_cpp_targets_section
content += _GetMSBuildExtensionTargets(targets_files_of_rules)
+ if spec.get('msvs_external_builder'):
+ content += _GetMSBuildExternalBuilderTargets(spec)
+
# TODO(jeanluc) File a bug to get rid of runas. We had in MSVS:
# has_run_as = _WriteMSVSUserFile(project.path, version, spec)
@@ -3088,6 +3225,31 @@ def _GenerateMSBuildProject(project, options, version, generator_flags):
return missing_sources
+def _GetMSBuildExternalBuilderTargets(spec):
+ """Return a list of MSBuild targets for external builders.
+
+ Right now, only "Build" and "Clean" targets are generated.
+
+ Arguments:
+ spec: The gyp target spec.
+ Returns:
+ List of MSBuild 'Target' specs.
+ """
+ build_cmd = _BuildCommandLineForRuleRaw(
+ spec, spec['msvs_external_builder_build_cmd'],
+ False, False, False, False)
+ build_target = ['Target', {'Name': 'Build'}]
+ build_target.append(['Exec', {'Command': build_cmd}])
+
+ clean_cmd = _BuildCommandLineForRuleRaw(
+ spec, spec['msvs_external_builder_clean_cmd'],
+ False, False, False, False)
+ clean_target = ['Target', {'Name': 'Clean'}]
+ clean_target.append(['Exec', {'Command': clean_cmd}])
+
+ return [build_target, clean_target]
+
+
def _GetMSBuildExtensions(props_files_of_rules):
extensions = ['ImportGroup', {'Label': 'ExtensionSettings'}]
for props_file in props_files_of_rules:
@@ -3113,16 +3275,16 @@ def _GenerateActionsForMSBuild(spec, actions_to_add):
Returns:
A pair of (action specification, the sources handled by this action).
"""
- sources_handled_by_action = set()
+ sources_handled_by_action = OrderedSet()
actions_spec = []
for primary_input, actions in actions_to_add.iteritems():
- inputs = set()
- outputs = set()
+ inputs = OrderedSet()
+ outputs = OrderedSet()
descriptions = []
commands = []
for action in actions:
- inputs.update(set(action['inputs']))
- outputs.update(set(action['outputs']))
+ inputs.update(OrderedSet(action['inputs']))
+ outputs.update(OrderedSet(action['outputs']))
descriptions.append(action['description'])
cmd = action['command']
# For most actions, add 'call' so that actions that invoke batch files
diff --git a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/ninja.py b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/ninja.py
index f15b473ef..c2951a4c5 100644
--- a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/ninja.py
+++ b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/ninja.py
@@ -1,9 +1,10 @@
-# Copyright (c) 2012 Google Inc. All rights reserved.
+# Copyright (c) 2013 Google Inc. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
import copy
import hashlib
+import json
import multiprocessing
import os.path
import re
@@ -13,8 +14,9 @@ import sys
import gyp
import gyp.common
import gyp.msvs_emulation
-import gyp.MSVSVersion
+import gyp.MSVSUtil as MSVSUtil
import gyp.xcode_emulation
+from cStringIO import StringIO
from gyp.common import GetEnvironFallback
import gyp.ninja_syntax as ninja_syntax
@@ -56,6 +58,7 @@ generator_default_variables = {
generator_additional_non_configuration_keys = []
generator_additional_path_sections = []
generator_extra_sources_for_rules = []
+generator_filelist_paths = None
# TODO: figure out how to not build extra host objects in the non-cross-compile
# case when this is enabled, and enable unconditionally.
@@ -97,19 +100,10 @@ def Define(d, flavor):
return QuoteShellArgument(ninja_syntax.escape('-D' + d), flavor)
-def InvertRelativePath(path):
- """Given a relative path like foo/bar, return the inverse relative path:
- the path from the relative path back to the origin dir.
-
- E.g. os.path.normpath(os.path.join(path, InvertRelativePath(path)))
- should always produce the empty string."""
-
- if not path:
- return path
- # Only need to handle relative paths into subdirectories for now.
- assert '..' not in path, path
- depth = len(path.split(os.path.sep))
- return os.path.sep.join(['..'] * depth)
+def AddArch(output, arch):
+ """Adds an arch string to an output path."""
+ output, extension = os.path.splitext(output)
+ return '%s.%s%s' % (output, arch, extension)
class Target:
@@ -218,12 +212,13 @@ class Target:
class NinjaWriter:
def __init__(self, qualified_target, target_outputs, base_dir, build_dir,
- output_file, flavor, abs_build_dir=None):
+ output_file, toplevel_build, output_file_name, flavor,
+ toplevel_dir=None):
"""
base_dir: path from source root to directory containing this gyp file,
by gyp semantics, all input paths are relative to this
build_dir: path from source root to build output
- abs_build_dir: absolute path to the build directory
+ toplevel_dir: path to the toplevel directory
"""
self.qualified_target = qualified_target
@@ -231,8 +226,14 @@ class NinjaWriter:
self.base_dir = base_dir
self.build_dir = build_dir
self.ninja = ninja_syntax.Writer(output_file)
+ self.toplevel_build = toplevel_build
+ self.output_file_name = output_file_name
+
self.flavor = flavor
- self.abs_build_dir = abs_build_dir
+ self.abs_build_dir = None
+ if toplevel_dir is not None:
+ self.abs_build_dir = os.path.abspath(os.path.join(toplevel_dir,
+ build_dir))
self.obj_ext = '.obj' if flavor == 'win' else '.o'
if flavor == 'win':
# See docstring of msvs_emulation.GenerateEnvironmentFiles().
@@ -241,9 +242,11 @@ class NinjaWriter:
self.win_env[arch] = 'environment.' + arch
# Relative path from build output dir to base dir.
- self.build_to_base = os.path.join(InvertRelativePath(build_dir), base_dir)
+ build_to_top = gyp.common.InvertRelativePath(build_dir, toplevel_dir)
+ self.build_to_base = os.path.join(build_to_top, base_dir)
# Relative path from base dir to build dir.
- self.base_to_build = os.path.join(InvertRelativePath(base_dir), build_dir)
+ base_to_top = gyp.common.InvertRelativePath(base_dir, toplevel_dir)
+ self.base_to_build = os.path.join(base_to_top, build_dir)
def ExpandSpecial(self, path, product_dir=None):
"""Expand specials like $!PRODUCT_DIR in |path|.
@@ -303,7 +306,7 @@ class NinjaWriter:
expanded = os.path.normpath(expanded)
return expanded
if '$|' in path:
- path = self.ExpandSpecial(path)
+ path = self.ExpandSpecial(path)
assert '$' not in path, path
return os.path.normpath(os.path.join(self.build_to_base, path))
@@ -355,8 +358,11 @@ class NinjaWriter:
self.ninja.newline()
return targets[0]
- def WriteSpec(self, spec, config_name, generator_flags,
- case_sensitive_filesystem):
+ def _SubninjaNameForArch(self, arch):
+ output_file_base = os.path.splitext(self.output_file_name)[0]
+ return '%s.%s.ninja' % (output_file_base, arch)
+
+ def WriteSpec(self, spec, config_name, generator_flags):
"""The main entry point for NinjaWriter: write the build rules for a spec.
Returns a Target object, which represents the output paths for this spec.
@@ -370,6 +376,9 @@ class NinjaWriter:
self.target = Target(spec['type'])
self.is_standalone_static_library = bool(
spec.get('standalone_static_library', 0))
+ # Track if this target contains any C++ files, to decide if gcc or g++
+ # should be used for linking.
+ self.uses_cpp = False
self.is_mac_bundle = gyp.xcode_emulation.IsMacBundle(self.flavor, spec)
self.xcode_settings = self.msvs_settings = None
@@ -378,8 +387,20 @@ class NinjaWriter:
if self.flavor == 'win':
self.msvs_settings = gyp.msvs_emulation.MsvsSettings(spec,
generator_flags)
- target_platform = self.msvs_settings.GetTargetPlatform(config_name)
- self.ninja.variable('arch', self.win_env[target_platform])
+ arch = self.msvs_settings.GetArch(config_name)
+ self.ninja.variable('arch', self.win_env[arch])
+ self.ninja.variable('cc', '$cl_' + arch)
+ self.ninja.variable('cxx', '$cl_' + arch)
+
+ if self.flavor == 'mac':
+ self.archs = self.xcode_settings.GetActiveArchs(config_name)
+ if len(self.archs) > 1:
+ self.arch_subninjas = dict(
+ (arch, ninja_syntax.Writer(
+ OpenOutput(os.path.join(self.toplevel_build,
+ self._SubninjaNameForArch(arch)),
+ 'w')))
+ for arch in self.archs)
# Compute predepends for all rules.
# actions_depends is the dependencies this target depends on before running
@@ -421,30 +442,44 @@ class NinjaWriter:
# Write out the compilation steps, if any.
link_deps = []
- sources = spec.get('sources', []) + extra_sources
+ sources = extra_sources + spec.get('sources', [])
if sources:
+ if self.flavor == 'mac' and len(self.archs) > 1:
+ # Write subninja file containing compile and link commands scoped to
+ # a single arch if a fat binary is being built.
+ for arch in self.archs:
+ self.ninja.subninja(self._SubninjaNameForArch(arch))
+
pch = None
if self.flavor == 'win':
gyp.msvs_emulation.VerifyMissingSources(
sources, self.abs_build_dir, generator_flags, self.GypPathToNinja)
pch = gyp.msvs_emulation.PrecompiledHeader(
- self.msvs_settings, config_name, self.GypPathToNinja)
+ self.msvs_settings, config_name, self.GypPathToNinja,
+ self.GypPathToUniqueOutput, self.obj_ext)
else:
pch = gyp.xcode_emulation.MacPrefixHeader(
self.xcode_settings, self.GypPathToNinja,
lambda path, lang: self.GypPathToUniqueOutput(path + '-' + lang))
link_deps = self.WriteSources(
- config_name, config, sources, compile_depends_stamp, pch,
- case_sensitive_filesystem)
+ self.ninja, config_name, config, sources, compile_depends_stamp, pch,
+ spec)
# Some actions/rules output 'sources' that are already object files.
- link_deps += [self.GypPathToNinja(f)
- for f in sources if f.endswith(self.obj_ext)]
+ obj_outputs = [f for f in sources if f.endswith(self.obj_ext)]
+ if obj_outputs:
+ if self.flavor != 'mac' or len(self.archs) == 1:
+ link_deps += [self.GypPathToNinja(o) for o in obj_outputs]
+ else:
+ print "Warning: Actions/rules writing object files don't work with " \
+ "multiarch targets, dropping. (target %s)" % spec['target_name']
+
if self.flavor == 'win' and self.target.type == 'static_library':
self.target.component_objs = link_deps
# Write out a link step, if needed.
output = None
+ is_empty_bundle = not link_deps and not mac_bundle_depends
if link_deps or self.target.actions_stamp or actions_depends:
output = self.WriteTarget(spec, config_name, config, link_deps,
self.target.actions_stamp or actions_depends)
@@ -453,7 +488,7 @@ class NinjaWriter:
# Bundle all of the above together, if needed.
if self.is_mac_bundle:
- output = self.WriteMacBundle(spec, mac_bundle_depends)
+ output = self.WriteMacBundle(spec, mac_bundle_depends, is_empty_bundle)
if not output:
return None
@@ -500,6 +535,10 @@ class NinjaWriter:
"""Write out the Actions, Rules, and Copies steps. Return a path
representing the outputs of these steps."""
outputs = []
+ if self.is_mac_bundle:
+ mac_bundle_resources = spec.get('mac_bundle_resources', [])[:]
+ else:
+ mac_bundle_resources = []
extra_mac_bundle_resources = []
if 'actions' in spec:
@@ -507,9 +546,10 @@ class NinjaWriter:
extra_mac_bundle_resources)
if 'rules' in spec:
outputs += self.WriteRules(spec['rules'], extra_sources, prebuild,
+ mac_bundle_resources,
extra_mac_bundle_resources)
if 'copies' in spec:
- outputs += self.WriteCopies(spec['copies'], prebuild)
+ outputs += self.WriteCopies(spec['copies'], prebuild, mac_bundle_depends)
if 'sources' in spec and self.flavor == 'win':
outputs += self.WriteWinIdlFiles(spec, prebuild)
@@ -517,9 +557,8 @@ class NinjaWriter:
stamp = self.WriteCollapsedDependencies('actions_rules_copies', outputs)
if self.is_mac_bundle:
- mac_bundle_resources = spec.get('mac_bundle_resources', []) + \
- extra_mac_bundle_resources
- self.WriteMacBundleResources(mac_bundle_resources, mac_bundle_depends)
+ self.WriteMacBundleResources(
+ extra_mac_bundle_resources + mac_bundle_resources, mac_bundle_depends)
self.WriteMacInfoPlist(mac_bundle_depends)
return stamp
@@ -576,7 +615,7 @@ class NinjaWriter:
return all_outputs
def WriteRules(self, rules, extra_sources, prebuild,
- extra_mac_bundle_resources):
+ mac_bundle_resources, extra_mac_bundle_resources):
env = self.GetSortedXcodeEnv()
all_outputs = []
for rule in rules:
@@ -616,6 +655,7 @@ class NinjaWriter:
# For each source file, write an edge that generates all the outputs.
for source in rule.get('rule_sources', []):
+ source = os.path.normpath(source)
dirname, basename = os.path.split(source)
root, ext = os.path.splitext(basename)
@@ -629,15 +669,27 @@ class NinjaWriter:
if int(rule.get('process_outputs_as_sources', False)):
extra_sources += outputs
- if int(rule.get('process_outputs_as_mac_bundle_resources', False)):
+
+ was_mac_bundle_resource = source in mac_bundle_resources
+ if was_mac_bundle_resource or \
+ int(rule.get('process_outputs_as_mac_bundle_resources', False)):
extra_mac_bundle_resources += outputs
+ # Note: This is n_resources * n_outputs_in_rule. Put to-be-removed
+ # items in a set and remove them all in a single pass if this becomes
+ # a performance issue.
+ if was_mac_bundle_resource:
+ mac_bundle_resources.remove(source)
extra_bindings = []
for var in needed_variables:
if var == 'root':
extra_bindings.append(('root', cygwin_munge(root)))
elif var == 'dirname':
- extra_bindings.append(('dirname', cygwin_munge(dirname)))
+ # '$dirname' is a parameter to the rule action, which means
+ # it shouldn't be converted to a Ninja path. But we don't
+ # want $!PRODUCT_DIR in there either.
+ dirname_expanded = self.ExpandSpecial(dirname, self.base_to_build)
+ extra_bindings.append(('dirname', cygwin_munge(dirname_expanded)))
elif var == 'source':
# '$source' is a parameter to the rule action, which means
# it shouldn't be converted to a Ninja path. But we don't
@@ -664,7 +716,7 @@ class NinjaWriter:
return all_outputs
- def WriteCopies(self, copies, prebuild):
+ def WriteCopies(self, copies, prebuild, mac_bundle_depends):
outputs = []
env = self.GetSortedXcodeEnv()
for copy in copies:
@@ -676,14 +728,24 @@ class NinjaWriter:
dst = self.GypPathToNinja(os.path.join(copy['destination'], basename),
env)
outputs += self.ninja.build(dst, 'copy', src, order_only=prebuild)
+ if self.is_mac_bundle:
+ # gyp has mac_bundle_resources to copy things into a bundle's
+ # Resources folder, but there's no built-in way to copy files to other
+ # places in the bundle. Hence, some targets use copies for this. Check
+ # if this file is copied into the current bundle, and if so add it to
+ # the bundle depends so that dependent targets get rebuilt if the copy
+ # input changes.
+ if dst.startswith(self.xcode_settings.GetBundleContentsFolderPath()):
+ mac_bundle_depends.append(dst)
return outputs
def WriteMacBundleResources(self, resources, bundle_depends):
"""Writes ninja edges for 'mac_bundle_resources'."""
for output, res in gyp.xcode_emulation.GetMacBundleResources(
- self.ExpandSpecial(generator_default_variables['PRODUCT_DIR']),
+ generator_default_variables['PRODUCT_DIR'],
self.xcode_settings, map(self.GypPathToNinja, resources)):
+ output = self.ExpandSpecial(output)
self.ninja.build(output, 'mac_tool', res,
variables=[('mactool_cmd', 'copy-bundle-resource')])
bundle_depends.append(output)
@@ -691,38 +753,56 @@ class NinjaWriter:
def WriteMacInfoPlist(self, bundle_depends):
"""Write build rules for bundle Info.plist files."""
info_plist, out, defines, extra_env = gyp.xcode_emulation.GetMacInfoPlist(
- self.ExpandSpecial(generator_default_variables['PRODUCT_DIR']),
+ generator_default_variables['PRODUCT_DIR'],
self.xcode_settings, self.GypPathToNinja)
if not info_plist:
return
+ out = self.ExpandSpecial(out)
if defines:
# Create an intermediate file to store preprocessed results.
intermediate_plist = self.GypPathToUniqueOutput(
os.path.basename(info_plist))
defines = ' '.join([Define(d, self.flavor) for d in defines])
- info_plist = self.ninja.build(intermediate_plist, 'infoplist', info_plist,
- variables=[('defines',defines)])
+ info_plist = self.ninja.build(
+ intermediate_plist, 'preprocess_infoplist', info_plist,
+ variables=[('defines',defines)])
env = self.GetSortedXcodeEnv(additional_settings=extra_env)
env = self.ComputeExportEnvString(env)
- self.ninja.build(out, 'mac_tool', info_plist,
- variables=[('mactool_cmd', 'copy-info-plist'),
- ('env', env)])
+ keys = self.xcode_settings.GetExtraPlistItems(self.config_name)
+ keys = QuoteShellArgument(json.dumps(keys), self.flavor)
+ self.ninja.build(out, 'copy_infoplist', info_plist,
+ variables=[('env', env), ('keys', keys)])
bundle_depends.append(out)
- def WriteSources(self, config_name, config, sources, predepends,
- precompiled_header, case_sensitive_filesystem):
+ def WriteSources(self, ninja_file, config_name, config, sources, predepends,
+ precompiled_header, spec):
"""Write build rules to compile all of |sources|."""
if self.toolset == 'host':
self.ninja.variable('ar', '$ar_host')
self.ninja.variable('cc', '$cc_host')
self.ninja.variable('cxx', '$cxx_host')
self.ninja.variable('ld', '$ld_host')
+ self.ninja.variable('ldxx', '$ldxx_host')
+
+ if self.flavor != 'mac' or len(self.archs) == 1:
+ return self.WriteSourcesForArch(
+ self.ninja, config_name, config, sources, predepends,
+ precompiled_header, spec)
+ else:
+ return dict((arch, self.WriteSourcesForArch(
+ self.arch_subninjas[arch], config_name, config, sources, predepends,
+ precompiled_header, spec, arch=arch))
+ for arch in self.archs)
+
+ def WriteSourcesForArch(self, ninja_file, config_name, config, sources,
+ predepends, precompiled_header, spec, arch=None):
+ """Write build rules to compile all of |sources|."""
extra_defines = []
if self.flavor == 'mac':
- cflags = self.xcode_settings.GetCflags(config_name)
+ cflags = self.xcode_settings.GetCflags(config_name, arch=arch)
cflags_c = self.xcode_settings.GetCflagsC(config_name)
cflags_cc = self.xcode_settings.GetCflagsCC(config_name)
cflags_objc = ['$cflags_c'] + \
@@ -734,62 +814,88 @@ class NinjaWriter:
cflags_c = self.msvs_settings.GetCflagsC(config_name)
cflags_cc = self.msvs_settings.GetCflagsCC(config_name)
extra_defines = self.msvs_settings.GetComputedDefines(config_name)
- self.WriteVariableList('pdbname', [self.name + '.pdb'])
- self.WriteVariableList('pchprefix', [self.name])
+ # See comment at cc_command for why there's two .pdb files.
+ pdbpath_c = pdbpath_cc = self.msvs_settings.GetCompilerPdbName(
+ config_name, self.ExpandSpecial)
+ if not pdbpath_c:
+ obj = 'obj'
+ if self.toolset != 'target':
+ obj += '.' + self.toolset
+ pdbpath = os.path.normpath(os.path.join(obj, self.base_dir, self.name))
+ pdbpath_c = pdbpath + '.c.pdb'
+ pdbpath_cc = pdbpath + '.cc.pdb'
+ self.WriteVariableList(ninja_file, 'pdbname_c', [pdbpath_c])
+ self.WriteVariableList(ninja_file, 'pdbname_cc', [pdbpath_cc])
+ self.WriteVariableList(ninja_file, 'pchprefix', [self.name])
else:
cflags = config.get('cflags', [])
cflags_c = config.get('cflags_c', [])
cflags_cc = config.get('cflags_cc', [])
+ # Respect environment variables related to build, but target-specific
+ # flags can still override them.
+ if self.toolset == 'target':
+ cflags_c = (os.environ.get('CPPFLAGS', '').split() +
+ os.environ.get('CFLAGS', '').split() + cflags_c)
+ cflags_cc = (os.environ.get('CPPFLAGS', '').split() +
+ os.environ.get('CXXFLAGS', '').split() + cflags_cc)
+
defines = config.get('defines', []) + extra_defines
- self.WriteVariableList('defines', [Define(d, self.flavor) for d in defines])
+ self.WriteVariableList(ninja_file, 'defines',
+ [Define(d, self.flavor) for d in defines])
if self.flavor == 'win':
- self.WriteVariableList('rcflags',
+ self.WriteVariableList(ninja_file, 'rcflags',
[QuoteShellArgument(self.ExpandSpecial(f), self.flavor)
for f in self.msvs_settings.GetRcflags(config_name,
self.GypPathToNinja)])
include_dirs = config.get('include_dirs', [])
+ env = self.GetSortedXcodeEnv()
if self.flavor == 'win':
+ env = self.msvs_settings.GetVSMacroEnv('$!PRODUCT_DIR',
+ config=config_name)
include_dirs = self.msvs_settings.AdjustIncludeDirs(include_dirs,
config_name)
- self.WriteVariableList('includes',
- [QuoteShellArgument('-I' + self.GypPathToNinja(i), self.flavor)
+ self.WriteVariableList(ninja_file, 'includes',
+ [QuoteShellArgument('-I' + self.GypPathToNinja(i, env), self.flavor)
for i in include_dirs])
- pch_commands = precompiled_header.GetPchBuildCommands()
+ pch_commands = precompiled_header.GetPchBuildCommands(arch)
if self.flavor == 'mac':
- self.WriteVariableList('cflags_pch_c',
- [precompiled_header.GetInclude('c')])
- self.WriteVariableList('cflags_pch_cc',
- [precompiled_header.GetInclude('cc')])
- self.WriteVariableList('cflags_pch_objc',
- [precompiled_header.GetInclude('m')])
- self.WriteVariableList('cflags_pch_objcc',
- [precompiled_header.GetInclude('mm')])
-
- self.WriteVariableList('cflags', map(self.ExpandSpecial, cflags))
- self.WriteVariableList('cflags_c', map(self.ExpandSpecial, cflags_c))
- self.WriteVariableList('cflags_cc', map(self.ExpandSpecial, cflags_cc))
+ # Most targets use no precompiled headers, so only write these if needed.
+ for ext, var in [('c', 'cflags_pch_c'), ('cc', 'cflags_pch_cc'),
+ ('m', 'cflags_pch_objc'), ('mm', 'cflags_pch_objcc')]:
+ include = precompiled_header.GetInclude(ext, arch)
+ if include: ninja_file.variable(var, include)
+
+ self.WriteVariableList(ninja_file, 'cflags',
+ map(self.ExpandSpecial, cflags))
+ self.WriteVariableList(ninja_file, 'cflags_c',
+ map(self.ExpandSpecial, cflags_c))
+ self.WriteVariableList(ninja_file, 'cflags_cc',
+ map(self.ExpandSpecial, cflags_cc))
if self.flavor == 'mac':
- self.WriteVariableList('cflags_objc', map(self.ExpandSpecial,
- cflags_objc))
- self.WriteVariableList('cflags_objcc', map(self.ExpandSpecial,
- cflags_objcc))
- self.ninja.newline()
+ self.WriteVariableList(ninja_file, 'cflags_objc',
+ map(self.ExpandSpecial, cflags_objc))
+ self.WriteVariableList(ninja_file, 'cflags_objcc',
+ map(self.ExpandSpecial, cflags_objcc))
+ ninja_file.newline()
outputs = []
+ has_rc_source = False
for source in sources:
filename, ext = os.path.splitext(source)
ext = ext[1:]
obj_ext = self.obj_ext
if ext in ('cc', 'cpp', 'cxx'):
command = 'cxx'
+ self.uses_cpp = True
elif ext == 'c' or (ext == 'S' and self.flavor != 'win'):
command = 'cc'
elif ext == 's' and self.flavor != 'win': # Doesn't generate .o.d files.
command = 'cc_s'
elif (self.flavor == 'win' and ext == 'asm' and
- self.msvs_settings.GetTargetPlatform(config_name) == 'Win32'):
+ self.msvs_settings.GetArch(config_name) == 'x86' and
+ not self.msvs_settings.HasExplicitAsmRules(spec)):
# Asm files only get auto assembled for x86 (not x64).
command = 'asm'
# Add the _asm suffix as msvs is capable of handling .cc and
@@ -799,32 +905,41 @@ class NinjaWriter:
command = 'objc'
elif self.flavor == 'mac' and ext == 'mm':
command = 'objcxx'
+ self.uses_cpp = True
elif self.flavor == 'win' and ext == 'rc':
command = 'rc'
obj_ext = '.res'
+ has_rc_source = True
else:
# Ignore unhandled extensions.
continue
input = self.GypPathToNinja(source)
output = self.GypPathToUniqueOutput(filename + obj_ext)
- # Ninja's depfile handling gets confused when the case of a filename
- # changes on a case-insensitive file system. To work around that, always
- # convert .o filenames to lowercase on such file systems. See
- # https://github.com/martine/ninja/issues/402 for details.
- if not case_sensitive_filesystem:
- output = output.lower()
- implicit = precompiled_header.GetObjDependencies([input], [output])
- self.ninja.build(output, command, input,
+ if arch is not None:
+ output = AddArch(output, arch)
+ implicit = precompiled_header.GetObjDependencies([input], [output], arch)
+ variables = []
+ if self.flavor == 'win':
+ variables, output, implicit = precompiled_header.GetFlagsModifications(
+ input, output, implicit, command, cflags_c, cflags_cc,
+ self.ExpandSpecial)
+ ninja_file.build(output, command, input,
implicit=[gch for _, _, gch in implicit],
- order_only=predepends)
+ order_only=predepends, variables=variables)
outputs.append(output)
- self.WritePchTargets(pch_commands)
+ if has_rc_source:
+ resource_include_dirs = config.get('resource_include_dirs', include_dirs)
+ self.WriteVariableList(ninja_file, 'resource_includes',
+ [QuoteShellArgument('-I' + self.GypPathToNinja(i, env), self.flavor)
+ for i in resource_include_dirs])
- self.ninja.newline()
+ self.WritePchTargets(ninja_file, pch_commands)
+
+ ninja_file.newline()
return outputs
- def WritePchTargets(self, pch_commands):
+ def WritePchTargets(self, ninja_file, pch_commands):
"""Writes ninja rules to compile prefix headers."""
if not pch_commands:
return
@@ -838,19 +953,35 @@ class NinjaWriter:
}[lang]
map = { 'c': 'cc', 'cc': 'cxx', 'm': 'objc', 'mm': 'objcxx', }
- if self.flavor == 'win':
- map.update({'c': 'cc_pch', 'cc': 'cxx_pch'})
cmd = map.get(lang)
- self.ninja.build(gch, cmd, input, variables=[(var_name, lang_flag)])
+ ninja_file.build(gch, cmd, input, variables=[(var_name, lang_flag)])
def WriteLink(self, spec, config_name, config, link_deps):
"""Write out a link step. Fills out target.binary. """
-
+ if self.flavor != 'mac' or len(self.archs) == 1:
+ return self.WriteLinkForArch(
+ self.ninja, spec, config_name, config, link_deps)
+ else:
+ output = self.ComputeOutput(spec)
+ inputs = [self.WriteLinkForArch(self.arch_subninjas[arch], spec,
+ config_name, config, link_deps[arch],
+ arch=arch)
+ for arch in self.archs]
+ extra_bindings = []
+ if not self.is_mac_bundle:
+ self.AppendPostbuildVariable(extra_bindings, spec, output, output)
+ self.ninja.build(output, 'lipo', inputs, variables=extra_bindings)
+ return output
+
+ def WriteLinkForArch(self, ninja_file, spec, config_name, config,
+ link_deps, arch=None):
+ """Write out a link step. Fills out target.binary. """
command = {
'executable': 'link',
'loadable_module': 'solink_module',
'shared_library': 'solink',
}[spec['type']]
+ command_suffix = ''
implicit_deps = set()
solibs = set()
@@ -867,120 +998,195 @@ class NinjaWriter:
continue
linkable = target.Linkable()
if linkable:
+ new_deps = []
if (self.flavor == 'win' and
target.component_objs and
self.msvs_settings.IsUseLibraryDependencyInputs(config_name)):
- extra_link_deps |= set(target.component_objs)
+ new_deps = target.component_objs
elif self.flavor == 'win' and target.import_lib:
- extra_link_deps.add(target.import_lib)
+ new_deps = [target.import_lib]
elif target.UsesToc(self.flavor):
solibs.add(target.binary)
implicit_deps.add(target.binary + '.TOC')
else:
- extra_link_deps.add(target.binary)
+ new_deps = [target.binary]
+ for new_dep in new_deps:
+ if new_dep not in extra_link_deps:
+ extra_link_deps.add(new_dep)
+ link_deps.append(new_dep)
final_output = target.FinalOutput()
if not linkable or final_output != target.binary:
implicit_deps.add(final_output)
- link_deps.extend(list(extra_link_deps))
-
extra_bindings = []
- if self.is_mac_bundle:
- output = self.ComputeMacBundleBinaryOutput()
- else:
- output = self.ComputeOutput(spec)
- extra_bindings.append(('postbuilds',
- self.GetPostbuildCommand(spec, output, output)))
+ if self.uses_cpp and self.flavor != 'win':
+ extra_bindings.append(('ld', '$ldxx'))
+ output = self.ComputeOutput(spec, arch)
+ if arch is None and not self.is_mac_bundle:
+ self.AppendPostbuildVariable(extra_bindings, spec, output, output)
+
+ is_executable = spec['type'] == 'executable'
+ # The ldflags config key is not used on mac or win. On those platforms
+ # linker flags are set via xcode_settings and msvs_settings, respectively.
+ env_ldflags = os.environ.get('LDFLAGS', '').split()
if self.flavor == 'mac':
ldflags = self.xcode_settings.GetLdflags(config_name,
self.ExpandSpecial(generator_default_variables['PRODUCT_DIR']),
- self.GypPathToNinja)
+ self.GypPathToNinja, arch)
+ ldflags = env_ldflags + ldflags
elif self.flavor == 'win':
- libflags = self.msvs_settings.GetLibFlags(config_name,
- self.GypPathToNinja)
- self.WriteVariableList(
- 'libflags', gyp.common.uniquer(map(self.ExpandSpecial, libflags)))
- is_executable = spec['type'] == 'executable'
- manifest_name = self.GypPathToUniqueOutput(
+ manifest_base_name = self.GypPathToUniqueOutput(
self.ComputeOutputFileName(spec))
- ldflags, manifest_files = self.msvs_settings.GetLdflags(config_name,
- self.GypPathToNinja, self.ExpandSpecial, manifest_name, is_executable)
- self.WriteVariableList('manifests', manifest_files)
+ ldflags, intermediate_manifest, manifest_files = \
+ self.msvs_settings.GetLdflags(config_name, self.GypPathToNinja,
+ self.ExpandSpecial, manifest_base_name,
+ output, is_executable,
+ self.toplevel_build)
+ ldflags = env_ldflags + ldflags
+ self.WriteVariableList(ninja_file, 'manifests', manifest_files)
+ implicit_deps = implicit_deps.union(manifest_files)
+ if intermediate_manifest:
+ self.WriteVariableList(
+ ninja_file, 'intermediatemanifest', [intermediate_manifest])
+ command_suffix = _GetWinLinkRuleNameSuffix(
+ self.msvs_settings.IsEmbedManifest(config_name))
+ def_file = self.msvs_settings.GetDefFile(self.GypPathToNinja)
+ if def_file:
+ implicit_deps.add(def_file)
+ else:
+ # Respect environment variables related to build, but target-specific
+ # flags can still override them.
+ ldflags = env_ldflags + config.get('ldflags', [])
+ if is_executable and len(solibs):
+ rpath = 'lib/'
+ if self.toolset != 'target':
+ rpath += self.toolset
+ ldflags.append('-Wl,-rpath=\$$ORIGIN/%s' % rpath)
+ ldflags.append('-Wl,-rpath-link=%s' % rpath)
+ self.WriteVariableList(ninja_file, 'ldflags',
+ gyp.common.uniquer(map(self.ExpandSpecial, ldflags)))
+
+ library_dirs = config.get('library_dirs', [])
+ if self.flavor == 'win':
+ library_dirs = [self.msvs_settings.ConvertVSMacros(l, config_name)
+ for l in library_dirs]
+ library_dirs = ['/LIBPATH:' + QuoteShellArgument(self.GypPathToNinja(l),
+ self.flavor)
+ for l in library_dirs]
else:
- ldflags = config.get('ldflags', [])
- self.WriteVariableList('ldflags',
- gyp.common.uniquer(map(self.ExpandSpecial,
- ldflags)))
+ library_dirs = [QuoteShellArgument('-L' + self.GypPathToNinja(l),
+ self.flavor)
+ for l in library_dirs]
libraries = gyp.common.uniquer(map(self.ExpandSpecial,
spec.get('libraries', [])))
if self.flavor == 'mac':
- libraries = self.xcode_settings.AdjustLibraries(libraries)
+ libraries = self.xcode_settings.AdjustLibraries(libraries, config_name)
elif self.flavor == 'win':
libraries = self.msvs_settings.AdjustLibraries(libraries)
- self.WriteVariableList('libs', libraries)
- self.target.binary = output
+ self.WriteVariableList(ninja_file, 'libs', library_dirs + libraries)
+
+ linked_binary = output
if command in ('solink', 'solink_module'):
extra_bindings.append(('soname', os.path.split(output)[1]))
extra_bindings.append(('lib',
gyp.common.EncodePOSIXShellArgument(output)))
if self.flavor == 'win':
- extra_bindings.append(('dll', output))
+ extra_bindings.append(('binary', output))
if '/NOENTRY' not in ldflags:
self.target.import_lib = output + '.lib'
extra_bindings.append(('implibflag',
'/IMPLIB:%s' % self.target.import_lib))
+ pdbname = self.msvs_settings.GetPDBName(
+ config_name, self.ExpandSpecial, output + '.pdb')
output = [output, self.target.import_lib]
- else:
+ if pdbname:
+ output.append(pdbname)
+ elif not self.is_mac_bundle:
output = [output, output + '.TOC']
+ else:
+ command = command + '_notoc'
+ elif self.flavor == 'win':
+ extra_bindings.append(('binary', output))
+ pdbname = self.msvs_settings.GetPDBName(
+ config_name, self.ExpandSpecial, output + '.pdb')
+ if pdbname:
+ output = [output, pdbname]
+
if len(solibs):
extra_bindings.append(('solibs', gyp.common.EncodePOSIXShellList(solibs)))
- self.ninja.build(output, command, link_deps,
+ ninja_file.build(output, command + command_suffix, link_deps,
implicit=list(implicit_deps),
variables=extra_bindings)
+ return linked_binary
def WriteTarget(self, spec, config_name, config, link_deps, compile_deps):
- if spec['type'] == 'none':
+ extra_link_deps = any(self.target_outputs.get(dep).Linkable()
+ for dep in spec.get('dependencies', [])
+ if dep in self.target_outputs)
+ if spec['type'] == 'none' or (not link_deps and not extra_link_deps):
# TODO(evan): don't call this function for 'none' target types, as
# it doesn't do anything, and we fake out a 'binary' with a stamp file.
self.target.binary = compile_deps
+ self.target.type = 'none'
elif spec['type'] == 'static_library':
self.target.binary = self.ComputeOutput(spec)
- variables = []
- postbuild = self.GetPostbuildCommand(
- spec, self.target.binary, self.target.binary)
- if postbuild:
- variables.append(('postbuilds', postbuild))
- if self.xcode_settings:
- variables.append(('libtool_flags',
- self.xcode_settings.GetLibtoolflags(config_name)))
- if (self.flavor not in ('mac', 'win') and not
+ if (self.flavor not in ('mac', 'openbsd', 'win') and not
self.is_standalone_static_library):
self.ninja.build(self.target.binary, 'alink_thin', link_deps,
- order_only=compile_deps, variables=variables)
+ order_only=compile_deps)
else:
- self.ninja.build(self.target.binary, 'alink', link_deps,
- order_only=compile_deps, variables=variables)
+ variables = []
+ if self.xcode_settings:
+ libtool_flags = self.xcode_settings.GetLibtoolflags(config_name)
+ if libtool_flags:
+ variables.append(('libtool_flags', libtool_flags))
+ if self.msvs_settings:
+ libflags = self.msvs_settings.GetLibFlags(config_name,
+ self.GypPathToNinja)
+ variables.append(('libflags', libflags))
+
+ if self.flavor != 'mac' or len(self.archs) == 1:
+ self.AppendPostbuildVariable(variables, spec,
+ self.target.binary, self.target.binary)
+ self.ninja.build(self.target.binary, 'alink', link_deps,
+ order_only=compile_deps, variables=variables)
+ else:
+ inputs = []
+ for arch in self.archs:
+ output = self.ComputeOutput(spec, arch)
+ self.arch_subninjas[arch].build(output, 'alink', link_deps[arch],
+ order_only=compile_deps,
+ variables=variables)
+ inputs.append(output)
+ # TODO: It's not clear if libtool_flags should be passed to the alink
+ # call that combines single-arch .a files into a fat .a file.
+ self.AppendPostbuildVariable(variables, spec,
+ self.target.binary, self.target.binary)
+ self.ninja.build(self.target.binary, 'alink', inputs,
+ # FIXME: test proving order_only=compile_deps isn't
+ # needed.
+ variables=variables)
else:
- self.WriteLink(spec, config_name, config, link_deps)
+ self.target.binary = self.WriteLink(spec, config_name, config, link_deps)
return self.target.binary
- def WriteMacBundle(self, spec, mac_bundle_depends):
+ def WriteMacBundle(self, spec, mac_bundle_depends, is_empty):
assert self.is_mac_bundle
package_framework = spec['type'] in ('shared_library', 'loadable_module')
output = self.ComputeMacBundleOutput()
- postbuild = self.GetPostbuildCommand(spec, output, self.target.binary,
- is_command_start=not package_framework)
+ if is_empty:
+ output += '.stamp'
variables = []
- if postbuild:
- variables.append(('postbuilds', postbuild))
- if package_framework:
+ self.AppendPostbuildVariable(variables, spec, output, self.target.binary,
+ is_command_start=not package_framework)
+ if package_framework and not is_empty:
variables.append(('version', self.xcode_settings.GetFrameworkVersion()))
self.ninja.build(output, 'package_framework', mac_bundle_depends,
variables=variables)
@@ -1010,23 +1216,30 @@ class NinjaWriter:
postbuild_settings['CHROMIUM_STRIP_SAVE_FILE'] = strip_save_file
return self.GetSortedXcodeEnv(additional_settings=postbuild_settings)
- def GetPostbuildCommand(self, spec, output, output_binary,
- is_command_start=False):
+ def AppendPostbuildVariable(self, variables, spec, output, binary,
+ is_command_start=False):
+ """Adds a 'postbuild' variable if there is a postbuild for |output|."""
+ postbuild = self.GetPostbuildCommand(spec, output, binary, is_command_start)
+ if postbuild:
+ variables.append(('postbuilds', postbuild))
+
+ def GetPostbuildCommand(self, spec, output, output_binary, is_command_start):
"""Returns a shell command that runs all the postbuilds, and removes
|output| if any of them fails. If |is_command_start| is False, then the
returned string will start with ' && '."""
if not self.xcode_settings or spec['type'] == 'none' or not output:
return ''
output = QuoteShellArgument(output, self.flavor)
- target_postbuilds = self.xcode_settings.GetTargetPostbuilds(
- self.config_name,
- os.path.normpath(os.path.join(self.base_to_build, output)),
- QuoteShellArgument(
- os.path.normpath(os.path.join(self.base_to_build, output_binary)),
- self.flavor),
- quiet=True)
postbuilds = gyp.xcode_emulation.GetSpecPostbuildCommands(spec, quiet=True)
- postbuilds = target_postbuilds + postbuilds
+ if output_binary is not None:
+ postbuilds = self.xcode_settings.AddImplicitPostbuilds(
+ self.config_name,
+ os.path.normpath(os.path.join(self.base_to_build, output)),
+ QuoteShellArgument(
+ os.path.normpath(os.path.join(self.base_to_build, output_binary)),
+ self.flavor),
+ postbuilds, quiet=True)
+
if not postbuilds:
return ''
# Postbuilds expect to be run in the gyp file's directory, so insert an
@@ -1036,10 +1249,9 @@ class NinjaWriter:
env = self.ComputeExportEnvString(self.GetSortedXcodePostbuildEnv())
# G will be non-null if any postbuild fails. Run all postbuilds in a
# subshell.
- commands = env + ' (F=0; ' + \
- ' '.join([ninja_syntax.escape(command) + ' || F=$$?;'
- for command in postbuilds])
- command_string = (commands + ' exit $$F); G=$$?; '
+ commands = env + ' (' + \
+ ' && '.join([ninja_syntax.escape(command) for command in postbuilds])
+ command_string = (commands + '); G=$$?; '
# Remove the final output if any postbuild failed.
'((exit $$G) || rm -rf %s) ' % output + '&& exit $$G)')
if is_command_start:
@@ -1060,14 +1272,9 @@ class NinjaWriter:
def ComputeMacBundleOutput(self):
"""Return the 'output' (full output path) to a bundle output directory."""
assert self.is_mac_bundle
- path = self.ExpandSpecial(generator_default_variables['PRODUCT_DIR'])
- return os.path.join(path, self.xcode_settings.GetWrapperName())
-
- def ComputeMacBundleBinaryOutput(self):
- """Return the 'output' (full output path) to the binary in a bundle."""
- assert self.is_mac_bundle
- path = self.ExpandSpecial(generator_default_variables['PRODUCT_DIR'])
- return os.path.join(path, self.xcode_settings.GetExecutablePath())
+ path = generator_default_variables['PRODUCT_DIR']
+ return self.ExpandSpecial(
+ os.path.join(path, self.xcode_settings.GetWrapperName()))
def ComputeOutputFileName(self, spec, type=None):
"""Compute the filename of the final output for the current target."""
@@ -1119,12 +1326,9 @@ class NinjaWriter:
else:
raise Exception('Unhandled output type %s' % type)
- def ComputeOutput(self, spec, type=None):
+ def ComputeOutput(self, spec, arch=None):
"""Compute the path for the final output of the spec."""
- assert not self.is_mac_bundle or type
-
- if not type:
- type = spec['type']
+ type = spec['type']
if self.flavor == 'win':
override = self.msvs_settings.GetOutputName(self.config_name,
@@ -1132,13 +1336,13 @@ class NinjaWriter:
if override:
return override
- if self.flavor == 'mac' and type in (
+ if arch is None and self.flavor == 'mac' and type in (
'static_library', 'executable', 'shared_library', 'loadable_module'):
filename = self.xcode_settings.GetExecutablePath()
else:
filename = self.ComputeOutputFileName(spec, type)
- if 'product_dir' in spec:
+ if arch is None and 'product_dir' in spec:
path = os.path.join(spec['product_dir'], filename)
return self.ExpandSpecial(path)
@@ -1150,7 +1354,14 @@ class NinjaWriter:
elif self.flavor == 'win' and self.toolset == 'target':
type_in_output_root += ['shared_library']
- if type in type_in_output_root or self.is_standalone_static_library:
+ if arch is not None:
+ # Make sure partial executables don't end up in a bundle or the regular
+ # output directory.
+ archdir = 'arch'
+ if self.toolset != 'target':
+ archdir = os.path.join('arch', '%s' % self.toolset)
+ return os.path.join(archdir, AddArch(filename, arch))
+ elif type in type_in_output_root or self.is_standalone_static_library:
return filename
elif type == 'shared_library':
libdir = 'lib'
@@ -1160,11 +1371,11 @@ class NinjaWriter:
else:
return self.GypPathToUniqueOutput(filename, qualified=False)
- def WriteVariableList(self, var, values):
+ def WriteVariableList(self, ninja_file, var, values):
assert not isinstance(values, str)
if values is None:
values = []
- self.ninja.variable(var, ' '.join(values))
+ ninja_file.variable(var, ' '.join(values))
def WriteNewNinjaRule(self, name, args, description, is_cygwin, env):
"""Write out a new ninja "rule" statement for a given command.
@@ -1261,7 +1472,6 @@ def CalculateVariables(default_variables, params):
default_variables['STATIC_LIB_SUFFIX'] = '.lib'
default_variables['SHARED_LIB_PREFIX'] = ''
default_variables['SHARED_LIB_SUFFIX'] = '.dll'
- generator_flags = params.get('generator_flags', {})
# Copy additional generator configuration data from VS, which is shared
# by the Windows Ninja generator.
@@ -1271,19 +1481,7 @@ def CalculateVariables(default_variables, params):
generator_additional_path_sections = getattr(msvs_generator,
'generator_additional_path_sections', [])
- # Set a variable so conditions can be based on msvs_version.
- msvs_version = gyp.msvs_emulation.GetVSVersion(generator_flags)
- default_variables['MSVS_VERSION'] = msvs_version.ShortName()
-
- # To determine processor word size on Windows, in addition to checking
- # PROCESSOR_ARCHITECTURE (which reflects the word size of the current
- # process), it is also necessary to check PROCESSOR_ARCHITEW6432 (which
- # contains the actual word size of the system when running thru WOW64).
- if ('64' in os.environ.get('PROCESSOR_ARCHITECTURE', '') or
- '64' in os.environ.get('PROCESSOR_ARCHITEW6432', '')):
- default_variables['MSVS_OS_BITS'] = 64
- else:
- default_variables['MSVS_OS_BITS'] = 32
+ gyp.msvs_emulation.CalculateCommonVariables(default_variables, params)
else:
operating_system = flavor
if flavor == 'android':
@@ -1295,42 +1493,167 @@ def CalculateVariables(default_variables, params):
default_variables.setdefault('LIB_DIR',
os.path.join('$!PRODUCT_DIR', 'obj'))
+def ComputeOutputDir(params):
+ """Returns the path from the toplevel_dir to the build output directory."""
+ # generator_dir: relative path from pwd to where make puts build files.
+ # Makes migrating from make to ninja easier, ninja doesn't put anything here.
+ generator_dir = os.path.relpath(params['options'].generator_output or '.')
+
+ # output_dir: relative path from generator_dir to the build directory.
+ output_dir = params.get('generator_flags', {}).get('output_dir', 'out')
+
+ # Relative path from source root to our output files. e.g. "out"
+ return os.path.normpath(os.path.join(generator_dir, output_dir))
+
+
+def CalculateGeneratorInputInfo(params):
+ """Called by __init__ to initialize generator values based on params."""
+ # E.g. "out/gypfiles"
+ toplevel = params['options'].toplevel_dir
+ qualified_out_dir = os.path.normpath(os.path.join(
+ toplevel, ComputeOutputDir(params), 'gypfiles'))
+
+ global generator_filelist_paths
+ generator_filelist_paths = {
+ 'toplevel': toplevel,
+ 'qualified_out_dir': qualified_out_dir,
+ }
+
def OpenOutput(path, mode='w'):
"""Open |path| for writing, creating directories if necessary."""
- try:
- os.makedirs(os.path.dirname(path))
- except OSError:
- pass
+ gyp.common.EnsureDirExists(path)
return open(path, mode)
+def CommandWithWrapper(cmd, wrappers, prog):
+ wrapper = wrappers.get(cmd, '')
+ if wrapper:
+ return wrapper + ' ' + prog
+ return prog
+
+
+def GetDefaultConcurrentLinks():
+ """Returns a best-guess for a number of concurrent links."""
+ if sys.platform in ('win32', 'cygwin'):
+ import ctypes
+
+ class MEMORYSTATUSEX(ctypes.Structure):
+ _fields_ = [
+ ("dwLength", ctypes.c_ulong),
+ ("dwMemoryLoad", ctypes.c_ulong),
+ ("ullTotalPhys", ctypes.c_ulonglong),
+ ("ullAvailPhys", ctypes.c_ulonglong),
+ ("ullTotalPageFile", ctypes.c_ulonglong),
+ ("ullAvailPageFile", ctypes.c_ulonglong),
+ ("ullTotalVirtual", ctypes.c_ulonglong),
+ ("ullAvailVirtual", ctypes.c_ulonglong),
+ ("sullAvailExtendedVirtual", ctypes.c_ulonglong),
+ ]
+
+ stat = MEMORYSTATUSEX()
+ stat.dwLength = ctypes.sizeof(stat)
+ ctypes.windll.kernel32.GlobalMemoryStatusEx(ctypes.byref(stat))
+
+ mem_limit = max(1, stat.ullTotalPhys / (4 * (2 ** 30))) # total / 4GB
+ hard_cap = max(1, int(os.getenv('GYP_LINK_CONCURRENCY_MAX', 2**32)))
+ # return min(mem_limit, hard_cap)
+ # TODO(scottmg): Temporary speculative fix for OOM on builders
+ # See http://crbug.com/333000.
+ return 2
+ elif sys.platform.startswith('linux'):
+ with open("/proc/meminfo") as meminfo:
+ memtotal_re = re.compile(r'^MemTotal:\s*(\d*)\s*kB')
+ for line in meminfo:
+ match = memtotal_re.match(line)
+ if not match:
+ continue
+ # Allow 8Gb per link on Linux because Gold is quite memory hungry
+ return max(1, int(match.group(1)) / (8 * (2 ** 20)))
+ return 1
+ elif sys.platform == 'darwin':
+ try:
+ avail_bytes = int(subprocess.check_output(['sysctl', '-n', 'hw.memsize']))
+ # A static library debug build of Chromium's unit_tests takes ~2.7GB, so
+ # 4GB per ld process allows for some more bloat.
+ return max(1, avail_bytes / (4 * (2 ** 30))) # total / 4GB
+ except:
+ return 1
+ else:
+ # TODO(scottmg): Implement this for other platforms.
+ return 1
+
+
+def _GetWinLinkRuleNameSuffix(embed_manifest):
+ """Returns the suffix used to select an appropriate linking rule depending on
+ whether the manifest embedding is enabled."""
+ return '_embed' if embed_manifest else ''
+
+
+def _AddWinLinkRules(master_ninja, embed_manifest):
+ """Adds link rules for Windows platform to |master_ninja|."""
+ def FullLinkCommand(ldcmd, out, binary_type):
+ resource_name = {
+ 'exe': '1',
+ 'dll': '2',
+ }[binary_type]
+ return '%(python)s gyp-win-tool link-with-manifests $arch %(embed)s ' \
+ '%(out)s "%(ldcmd)s" %(resname)s $mt $rc "$intermediatemanifest" ' \
+ '$manifests' % {
+ 'python': sys.executable,
+ 'out': out,
+ 'ldcmd': ldcmd,
+ 'resname': resource_name,
+ 'embed': embed_manifest }
+ rule_name_suffix = _GetWinLinkRuleNameSuffix(embed_manifest)
+ use_separate_mspdbsrv = (
+ int(os.environ.get('GYP_USE_SEPARATE_MSPDBSRV', '0')) != 0)
+ dlldesc = 'LINK%s(DLL) $binary' % rule_name_suffix.upper()
+ dllcmd = ('%s gyp-win-tool link-wrapper $arch %s '
+ '$ld /nologo $implibflag /DLL /OUT:$binary '
+ '@$binary.rsp' % (sys.executable, use_separate_mspdbsrv))
+ dllcmd = FullLinkCommand(dllcmd, '$binary', 'dll')
+ master_ninja.rule('solink' + rule_name_suffix,
+ description=dlldesc, command=dllcmd,
+ rspfile='$binary.rsp',
+ rspfile_content='$libs $in_newline $ldflags',
+ restat=True,
+ pool='link_pool')
+ master_ninja.rule('solink_module' + rule_name_suffix,
+ description=dlldesc, command=dllcmd,
+ rspfile='$binary.rsp',
+ rspfile_content='$libs $in_newline $ldflags',
+ restat=True,
+ pool='link_pool')
+ # Note that ldflags goes at the end so that it has the option of
+ # overriding default settings earlier in the command line.
+ exe_cmd = ('%s gyp-win-tool link-wrapper $arch %s '
+ '$ld /nologo /OUT:$binary @$binary.rsp' %
+ (sys.executable, use_separate_mspdbsrv))
+ exe_cmd = FullLinkCommand(exe_cmd, '$binary', 'exe')
+ master_ninja.rule('link' + rule_name_suffix,
+ description='LINK%s $binary' % rule_name_suffix.upper(),
+ command=exe_cmd,
+ rspfile='$binary.rsp',
+ rspfile_content='$in_newline $libs $ldflags',
+ pool='link_pool')
+
+
def GenerateOutputForConfig(target_list, target_dicts, data, params,
config_name):
options = params['options']
flavor = gyp.common.GetFlavor(params)
generator_flags = params.get('generator_flags', {})
- # generator_dir: relative path from pwd to where make puts build files.
- # Makes migrating from make to ninja easier, ninja doesn't put anything here.
- generator_dir = os.path.relpath(params['options'].generator_output or '.')
-
- # output_dir: relative path from generator_dir to the build directory.
- output_dir = generator_flags.get('output_dir', 'out')
-
# build_dir: relative path from source root to our output files.
# e.g. "out/Debug"
- build_dir = os.path.normpath(os.path.join(generator_dir,
- output_dir,
- config_name))
+ build_dir = os.path.normpath(
+ os.path.join(ComputeOutputDir(params), config_name))
toplevel_build = os.path.join(options.toplevel_dir, build_dir)
- master_ninja = ninja_syntax.Writer(
- OpenOutput(os.path.join(toplevel_build, 'build.ninja')),
- width=120)
- case_sensitive_filesystem = not os.path.exists(
- os.path.join(toplevel_build, 'BUILD.NINJA'))
+ master_ninja_file = OpenOutput(os.path.join(toplevel_build, 'build.ninja'))
+ master_ninja = ninja_syntax.Writer(master_ninja_file, width=120)
# Put build-time support tools in out/{config_name}.
gyp.common.CopyTool(flavor, toplevel_build)
@@ -1343,17 +1666,20 @@ def GenerateOutputForConfig(target_list, target_dicts, data, params,
# 'CC_host'/'CXX_host' enviroment variable, cc_host/cxx_host should be set
# to cc/cxx.
if flavor == 'win':
+ # Overridden by local arch choice in the use_deps case.
+ # Chromium's ffmpeg c99conv.py currently looks for a 'cc =' line in
+ # build.ninja so needs something valid here. http://crbug.com/233985
cc = 'cl.exe'
cxx = 'cl.exe'
ld = 'link.exe'
- gyp.msvs_emulation.GenerateEnvironmentFiles(
- toplevel_build, generator_flags, OpenOutput)
ld_host = '$ld'
else:
- cc = 'gcc'
- cxx = 'g++'
- ld = '$cxx'
- ld_host = '$cxx_host'
+ cc = 'cc'
+ cxx = 'c++'
+ ld = '$cc'
+ ldxx = '$cxx'
+ ld_host = '$cc_host'
+ ldxx_host = '$cxx_host'
cc_host = None
cxx_host = None
@@ -1362,36 +1688,42 @@ def GenerateOutputForConfig(target_list, target_dicts, data, params,
build_file, _, _ = gyp.common.ParseQualifiedTarget(target_list[0])
make_global_settings = data[build_file].get('make_global_settings', [])
- build_to_root = InvertRelativePath(build_dir)
+ build_to_root = gyp.common.InvertRelativePath(build_dir,
+ options.toplevel_dir)
+ wrappers = {}
for key, value in make_global_settings:
if key == 'CC':
cc = os.path.join(build_to_root, value)
if key == 'CXX':
cxx = os.path.join(build_to_root, value)
- if key == 'LD':
- ld = os.path.join(build_to_root, value)
if key == 'CC.host':
cc_host = os.path.join(build_to_root, value)
cc_host_global_setting = value
if key == 'CXX.host':
cxx_host = os.path.join(build_to_root, value)
cxx_host_global_setting = value
- if key == 'LD.host':
- ld_host = os.path.join(build_to_root, value)
+ if key.endswith('_wrapper'):
+ wrappers[key[:-len('_wrapper')]] = os.path.join(build_to_root, value)
+
+ # Support wrappers from environment variables too.
+ for key, value in os.environ.iteritems():
+ if key.lower().endswith('_wrapper'):
+ key_prefix = key[:-len('_wrapper')]
+ key_prefix = re.sub(r'\.HOST$', '.host', key_prefix)
+ wrappers[key_prefix] = os.path.join(build_to_root, value)
+
+ if flavor == 'win':
+ cl_paths = gyp.msvs_emulation.GenerateEnvironmentFiles(
+ toplevel_build, generator_flags, OpenOutput)
+ for arch, path in cl_paths.iteritems():
+ master_ninja.variable(
+ 'cl_' + arch, CommandWithWrapper('CC', wrappers,
+ QuoteShellArgument(path, flavor)))
- flock = 'flock'
- if flavor == 'mac':
- flock = './gyp-mac-tool flock'
cc = GetEnvironFallback(['CC_target', 'CC'], cc)
- master_ninja.variable('cc', cc)
+ master_ninja.variable('cc', CommandWithWrapper('CC', wrappers, cc))
cxx = GetEnvironFallback(['CXX_target', 'CXX'], cxx)
- master_ninja.variable('cxx', cxx)
- ld = GetEnvironFallback(['LD_target', 'LD'], ld)
-
- if not cc_host:
- cc_host = cc
- if not cxx_host:
- cxx_host = cxx
+ master_ninja.variable('cxx', CommandWithWrapper('CXX', wrappers, cxx))
if flavor == 'win':
master_ninja.variable('ld', ld)
@@ -1400,38 +1732,54 @@ def GenerateOutputForConfig(target_list, target_dicts, data, params,
master_ninja.variable('rc', 'rc.exe')
master_ninja.variable('asm', 'ml.exe')
master_ninja.variable('mt', 'mt.exe')
- master_ninja.variable('use_dep_database', '1')
else:
- master_ninja.variable('ld', flock + ' linker.lock ' + ld)
+ master_ninja.variable('ld', CommandWithWrapper('LINK', wrappers, ld))
+ master_ninja.variable('ldxx', CommandWithWrapper('LINK', wrappers, ldxx))
master_ninja.variable('ar', GetEnvironFallback(['AR_target', 'AR'], 'ar'))
- master_ninja.variable('ar_host', GetEnvironFallback(['AR_host'], 'ar'))
- cc_host = GetEnvironFallback(['CC_host'], cc_host)
- cxx_host = GetEnvironFallback(['CXX_host'], cxx_host)
- ld_host = GetEnvironFallback(['LD_host'], ld_host)
-
- # The environment variable could be used in 'make_global_settings', like
- # ['CC.host', '$(CC)'] or ['CXX.host', '$(CXX)'], transform them here.
- if '$(CC)' in cc_host and cc_host_global_setting:
- cc_host = cc_host_global_setting.replace('$(CC)', cc)
- if '$(CXX)' in cxx_host and cxx_host_global_setting:
- cxx_host = cxx_host_global_setting.replace('$(CXX)', cxx)
- master_ninja.variable('cc_host', cc_host)
- master_ninja.variable('cxx_host', cxx_host)
- if flavor == 'win':
- master_ninja.variable('ld_host', ld_host)
- else:
- master_ninja.variable('ld_host', flock + ' linker.lock ' + ld_host)
+ if generator_supports_multiple_toolsets:
+ if not cc_host:
+ cc_host = cc
+ if not cxx_host:
+ cxx_host = cxx
+
+ master_ninja.variable('ar_host', GetEnvironFallback(['AR_host'], 'ar'))
+ cc_host = GetEnvironFallback(['CC_host'], cc_host)
+ cxx_host = GetEnvironFallback(['CXX_host'], cxx_host)
+
+ # The environment variable could be used in 'make_global_settings', like
+ # ['CC.host', '$(CC)'] or ['CXX.host', '$(CXX)'], transform them here.
+ if '$(CC)' in cc_host and cc_host_global_setting:
+ cc_host = cc_host_global_setting.replace('$(CC)', cc)
+ if '$(CXX)' in cxx_host and cxx_host_global_setting:
+ cxx_host = cxx_host_global_setting.replace('$(CXX)', cxx)
+ master_ninja.variable('cc_host',
+ CommandWithWrapper('CC.host', wrappers, cc_host))
+ master_ninja.variable('cxx_host',
+ CommandWithWrapper('CXX.host', wrappers, cxx_host))
+ if flavor == 'win':
+ master_ninja.variable('ld_host', ld_host)
+ else:
+ master_ninja.variable('ld_host', CommandWithWrapper(
+ 'LINK', wrappers, ld_host))
+ master_ninja.variable('ldxx_host', CommandWithWrapper(
+ 'LINK', wrappers, ldxx_host))
+
+ master_ninja.newline()
+ master_ninja.pool('link_pool', depth=GetDefaultConcurrentLinks())
master_ninja.newline()
+ deps = 'msvc' if flavor == 'win' else 'gcc'
+
if flavor != 'win':
master_ninja.rule(
'cc',
description='CC $out',
command=('$cc -MMD -MF $out.d $defines $includes $cflags $cflags_c '
'$cflags_pch_c -c $in -o $out'),
- depfile='$out.d')
+ depfile='$out.d',
+ deps=deps)
master_ninja.rule(
'cc_s',
description='CC $out',
@@ -1442,50 +1790,37 @@ def GenerateOutputForConfig(target_list, target_dicts, data, params,
description='CXX $out',
command=('$cxx -MMD -MF $out.d $defines $includes $cflags $cflags_cc '
'$cflags_pch_cc -c $in -o $out'),
- depfile='$out.d')
+ depfile='$out.d',
+ deps=deps)
else:
- # Template for compile commands mostly shared between compiling files
- # and generating PCH. In the case of PCH, the "output" is specified by /Fp
- # rather than /Fo (for object files), but we still need to specify an /Fo
- # when compiling PCH.
- cc_template = ('ninja -t msvc -r . -o $out -e $arch '
+ # TODO(scottmg) Separate pdb names is a test to see if it works around
+ # http://crbug.com/142362. It seems there's a race between the creation of
+ # the .pdb by the precompiled header step for .cc and the compilation of
+ # .c files. This should be handled by mspdbsrv, but rarely errors out with
+ # c1xx : fatal error C1033: cannot open program database
+ # By making the rules target separate pdb files this might be avoided.
+ cc_command = ('ninja -t msvc -e $arch ' +
+ '-- '
+ '$cc /nologo /showIncludes /FC '
+ '@$out.rsp /c $in /Fo$out /Fd$pdbname_c ')
+ cxx_command = ('ninja -t msvc -e $arch ' +
'-- '
- '$cc /nologo /showIncludes /FC '
- '@$out.rsp '
- '$cflags_pch_c /c $in %(outspec)s /Fd$pdbname ')
- cxx_template = ('ninja -t msvc -r . -o $out -e $arch '
- '-- '
- '$cxx /nologo /showIncludes /FC '
- '@$out.rsp '
- '$cflags_pch_cc /c $in %(outspec)s $pchobj /Fd$pdbname ')
+ '$cxx /nologo /showIncludes /FC '
+ '@$out.rsp /c $in /Fo$out /Fd$pdbname_cc ')
master_ninja.rule(
'cc',
description='CC $out',
- command=cc_template % {'outspec': '/Fo$out'},
- depfile='$out.d',
- rspfile='$out.rsp',
- rspfile_content='$defines $includes $cflags $cflags_c')
- master_ninja.rule(
- 'cc_pch',
- description='CC PCH $out',
- command=cc_template % {'outspec': '/Fp$out /Fo$out.obj'},
- depfile='$out.d',
+ command=cc_command,
rspfile='$out.rsp',
- rspfile_content='$defines $includes $cflags $cflags_c')
+ rspfile_content='$defines $includes $cflags $cflags_c',
+ deps=deps)
master_ninja.rule(
'cxx',
description='CXX $out',
- command=cxx_template % {'outspec': '/Fo$out'},
- depfile='$out.d',
- rspfile='$out.rsp',
- rspfile_content='$defines $includes $cflags $cflags_cc')
- master_ninja.rule(
- 'cxx_pch',
- description='CXX PCH $out',
- command=cxx_template % {'outspec': '/Fp$out /Fo$out.obj'},
- depfile='$out.d',
+ command=cxx_command,
rspfile='$out.rsp',
- rspfile_content='$defines $includes $cflags $cflags_cc')
+ rspfile_content='$defines $includes $cflags $cflags_cc',
+ deps=deps)
master_ninja.rule(
'idl',
description='IDL $in',
@@ -1497,7 +1832,7 @@ def GenerateOutputForConfig(target_list, target_dicts, data, params,
description='RC $in',
# Note: $in must be last otherwise rc.exe complains.
command=('%s gyp-win-tool rc-wrapper '
- '$arch $rc $defines $includes $rcflags /fo$out $in' %
+ '$arch $rc $defines $resource_includes $rcflags /fo$out $in' %
sys.executable))
master_ninja.rule(
'asm',
@@ -1539,67 +1874,48 @@ def GenerateOutputForConfig(target_list, target_dicts, data, params,
restat=True,
command=(mtime_preserving_solink_base % {
'suffix': '-Wl,--whole-archive $in $solibs -Wl,--no-whole-archive '
- '$libs'}))
+ '$libs'}),
+ pool='link_pool')
master_ninja.rule(
'solink_module',
description='SOLINK(module) $lib',
restat=True,
command=(mtime_preserving_solink_base % {
- 'suffix': '-Wl,--start-group $in $solibs -Wl,--end-group $libs'}))
+ 'suffix': '-Wl,--start-group $in $solibs -Wl,--end-group '
+ '$libs'}),
+ pool='link_pool')
master_ninja.rule(
'link',
description='LINK $out',
- command=('$ld $ldflags -o $out -Wl,-rpath=\$$ORIGIN/lib '
- '-Wl,--start-group $in $solibs -Wl,--end-group $libs'))
+ command=('$ld $ldflags -o $out '
+ '-Wl,--start-group $in $solibs -Wl,--end-group $libs'),
+ pool='link_pool')
elif flavor == 'win':
master_ninja.rule(
'alink',
description='LIB $out',
- command=('%s gyp-win-tool link-wrapper $arch '
+ command=('%s gyp-win-tool link-wrapper $arch False '
'$ar /nologo /ignore:4221 /OUT:$out @$out.rsp' %
sys.executable),
rspfile='$out.rsp',
rspfile_content='$in_newline $libflags')
- dlldesc = 'LINK(DLL) $dll'
- dllcmd = ('%s gyp-win-tool link-wrapper $arch '
- '$ld /nologo $implibflag /DLL /OUT:$dll '
- '/PDB:$dll.pdb @$dll.rsp' % sys.executable)
- dllcmd += (' && %s gyp-win-tool manifest-wrapper $arch '
- '$mt -nologo -manifest $manifests -out:$dll.manifest' %
- sys.executable)
- master_ninja.rule('solink', description=dlldesc, command=dllcmd,
- rspfile='$dll.rsp',
- rspfile_content='$libs $in_newline $ldflags',
- restat=True)
- master_ninja.rule('solink_module', description=dlldesc, command=dllcmd,
- rspfile='$dll.rsp',
- rspfile_content='$libs $in_newline $ldflags',
- restat=True)
- # Note that ldflags goes at the end so that it has the option of
- # overriding default settings earlier in the command line.
- master_ninja.rule(
- 'link',
- description='LINK $out',
- command=('%s gyp-win-tool link-wrapper $arch '
- '$ld /nologo /OUT:$out /PDB:$out.pdb @$out.rsp && '
- '%s gyp-win-tool manifest-wrapper $arch '
- '$mt -nologo -manifest $manifests -out:$out.manifest' %
- (sys.executable, sys.executable)),
- rspfile='$out.rsp',
- rspfile_content='$in_newline $libs $ldflags')
+ _AddWinLinkRules(master_ninja, embed_manifest=True)
+ _AddWinLinkRules(master_ninja, embed_manifest=False)
else:
master_ninja.rule(
'objc',
description='OBJC $out',
command=('$cc -MMD -MF $out.d $defines $includes $cflags $cflags_objc '
'$cflags_pch_objc -c $in -o $out'),
- depfile='$out.d')
+ depfile='$out.d',
+ deps=deps)
master_ninja.rule(
'objcxx',
description='OBJCXX $out',
command=('$cxx -MMD -MF $out.d $defines $includes $cflags $cflags_objcc '
'$cflags_pch_objcc -c $in -o $out'),
- depfile='$out.d')
+ depfile='$out.d',
+ deps=deps)
master_ninja.rule(
'alink',
description='LIBTOOL-STATIC $out, POSTBUILDS',
@@ -1607,9 +1923,14 @@ def GenerateOutputForConfig(target_list, target_dicts, data, params,
'./gyp-mac-tool filter-libtool libtool $libtool_flags '
'-static -o $out $in'
'$postbuilds')
+ master_ninja.rule(
+ 'lipo',
+ description='LIPO $out, POSTBUILDS',
+ command='rm -f $out && lipo -create $in -output $out$postbuilds')
# Record the public interface of $lib in $lib.TOC. See the corresponding
# comment in the posix section above for details.
+ solink_base = '$ld %(type)s $ldflags -o $lib %(suffix)s'
mtime_preserving_solink_base = (
'if [ ! -e $lib -o ! -e ${lib}.TOC ] || '
# Always force dependent targets to relink if this library
@@ -1623,37 +1944,57 @@ def GenerateOutputForConfig(target_list, target_dicts, data, params,
'mv ${lib}.tmp ${lib}.TOC ; '
'fi; '
'fi'
- % { 'solink': '$ld -shared $ldflags -o $lib %(suffix)s',
+ % { 'solink': solink_base,
'extract_toc':
'{ otool -l $lib | grep LC_ID_DYLIB -A 5; '
'nm -gP $lib | cut -f1-2 -d\' \' | grep -v U$$; true; }'})
- # TODO(thakis): The solink_module rule is likely wrong. Xcode seems to pass
- # -bundle -single_module here (for osmesa.so).
+ solink_suffix = '$in $solibs $libs$postbuilds'
master_ninja.rule(
'solink',
description='SOLINK $lib, POSTBUILDS',
restat=True,
- command=(mtime_preserving_solink_base % {
- 'suffix': '$in $solibs $libs$postbuilds'}))
+ command=mtime_preserving_solink_base % {'suffix': solink_suffix,
+ 'type': '-shared'},
+ pool='link_pool')
+ master_ninja.rule(
+ 'solink_notoc',
+ description='SOLINK $lib, POSTBUILDS',
+ restat=True,
+ command=solink_base % {'suffix':solink_suffix, 'type': '-shared'},
+ pool='link_pool')
+
+ solink_module_suffix = '$in $solibs $libs$postbuilds'
master_ninja.rule(
'solink_module',
description='SOLINK(module) $lib, POSTBUILDS',
restat=True,
- command=(mtime_preserving_solink_base % {
- 'suffix': '$in $solibs $libs$postbuilds'}))
+ command=mtime_preserving_solink_base % {'suffix': solink_module_suffix,
+ 'type': '-bundle'},
+ pool='link_pool')
+ master_ninja.rule(
+ 'solink_module_notoc',
+ description='SOLINK(module) $lib, POSTBUILDS',
+ restat=True,
+ command=solink_base % {'suffix': solink_module_suffix, 'type': '-bundle'},
+ pool='link_pool')
master_ninja.rule(
'link',
description='LINK $out, POSTBUILDS',
command=('$ld $ldflags -o $out '
- '$in $solibs $libs$postbuilds'))
+ '$in $solibs $libs$postbuilds'),
+ pool='link_pool')
master_ninja.rule(
- 'infoplist',
- description='INFOPLIST $out',
+ 'preprocess_infoplist',
+ description='PREPROCESS INFOPLIST $out',
command=('$cc -E -P -Wno-trigraphs -x c $defines $in -o $out && '
'plutil -convert xml1 $out $out'))
master_ninja.rule(
+ 'copy_infoplist',
+ description='COPY INFOPLIST $in',
+ command='$env ./gyp-mac-tool copy-info-plist $in $out $keys')
+ master_ninja.rule(
'mac_tool',
description='MACTOOL $mactool_cmd $in',
command='$env ./gyp-mac-tool $mactool_cmd $in $out')
@@ -1695,6 +2036,7 @@ def GenerateOutputForConfig(target_list, target_dicts, data, params,
# target_short_names is a map from target short name to a list of Target
# objects.
target_short_names = {}
+
for qualified_target in target_list:
# qualified_target is like: third_party/icu/icu.gyp:icui18n#target
build_file, name, toolset = \
@@ -1702,7 +2044,8 @@ def GenerateOutputForConfig(target_list, target_dicts, data, params,
this_make_global_settings = data[build_file].get('make_global_settings', [])
assert make_global_settings == this_make_global_settings, (
- "make_global_settings needs to be the same for all targets.")
+ "make_global_settings needs to be the same for all targets. %s vs. %s" %
+ (this_make_global_settings, make_global_settings))
spec = target_dicts[qualified_target]
if flavor == 'mac':
@@ -1716,14 +2059,21 @@ def GenerateOutputForConfig(target_list, target_dicts, data, params,
obj += '.' + toolset
output_file = os.path.join(obj, base_path, name + '.ninja')
- abs_build_dir = os.path.abspath(toplevel_build)
+ ninja_output = StringIO()
writer = NinjaWriter(qualified_target, target_outputs, base_path, build_dir,
- OpenOutput(os.path.join(toplevel_build, output_file)),
- flavor, abs_build_dir=abs_build_dir)
- master_ninja.subninja(output_file)
+ ninja_output,
+ toplevel_build, output_file,
+ flavor, toplevel_dir=options.toplevel_dir)
+
+ target = writer.WriteSpec(spec, config_name, generator_flags)
+
+ if ninja_output.tell() > 0:
+ # Only create files for ninja files that actually have contents.
+ with OpenOutput(os.path.join(toplevel_build, output_file)) as ninja_file:
+ ninja_file.write(ninja_output.getvalue())
+ ninja_output.close()
+ master_ninja.subninja(output_file)
- target = writer.WriteSpec(
- spec, config_name, generator_flags, case_sensitive_filesystem)
if target:
if name != target.FinalOutput() and spec['toolset'] == 'target':
target_short_names.setdefault(name, []).append(target)
@@ -1746,6 +2096,8 @@ def GenerateOutputForConfig(target_list, target_dicts, data, params,
master_ninja.build('all', 'phony', list(all_outputs))
master_ninja.default(generator_flags.get('default_target', 'all'))
+ master_ninja_file.close()
+
def PerformBuild(data, configurations, params):
options = params['options']
@@ -1766,7 +2118,16 @@ def CallGenerateOutputForConfig(arglist):
def GenerateOutput(target_list, target_dicts, data, params):
+ # Update target_dicts for iOS device builds.
+ target_dicts = gyp.xcode_emulation.CloneConfigurationForDeviceAndEmulator(
+ target_dicts)
+
user_config = params.get('generator_flags', {}).get('config', None)
+ if gyp.common.GetFlavor(params) == 'win':
+ target_list, target_dicts = MSVSUtil.ShardTargets(target_list, target_dicts)
+ target_list, target_dicts = MSVSUtil.InsertLargePdbShims(
+ target_list, target_dicts, generator_default_variables)
+
if user_config:
GenerateOutputForConfig(target_list, target_dicts, data, params,
user_config)
@@ -1779,7 +2140,7 @@ def GenerateOutput(target_list, target_dicts, data, params):
for config_name in config_names:
arglists.append(
(target_list, target_dicts, data, params, config_name))
- pool.map(CallGenerateOutputForConfig, arglists)
+ pool.map(CallGenerateOutputForConfig, arglists)
except KeyboardInterrupt, e:
pool.terminate()
raise e
diff --git a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/ninja_test.py b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/ninja_test.py
index 90dd15373..52661bcdf 100644
--- a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/ninja_test.py
+++ b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/ninja_test.py
@@ -14,31 +14,31 @@ import TestCommon
class TestPrefixesAndSuffixes(unittest.TestCase):
- if sys.platform in ('win32', 'cygwin'):
- def test_BinaryNamesWindows(self):
- writer = ninja.NinjaWriter('foo', 'wee', '.', '.', 'ninja.build', 'win')
- spec = { 'target_name': 'wee' }
- self.assertTrue(writer.ComputeOutputFileName(spec, 'executable').
- endswith('.exe'))
- self.assertTrue(writer.ComputeOutputFileName(spec, 'shared_library').
- endswith('.dll'))
- self.assertTrue(writer.ComputeOutputFileName(spec, 'static_library').
- endswith('.lib'))
+ def test_BinaryNamesWindows(self):
+ writer = ninja.NinjaWriter('foo', 'wee', '.', '.', 'build.ninja', '.',
+ 'build.ninja', 'win')
+ spec = { 'target_name': 'wee' }
+ self.assertTrue(writer.ComputeOutputFileName(spec, 'executable').
+ endswith('.exe'))
+ self.assertTrue(writer.ComputeOutputFileName(spec, 'shared_library').
+ endswith('.dll'))
+ self.assertTrue(writer.ComputeOutputFileName(spec, 'static_library').
+ endswith('.lib'))
- if sys.platform == 'linux2':
- def test_BinaryNamesLinux(self):
- writer = ninja.NinjaWriter('foo', 'wee', '.', '.', 'ninja.build', 'linux')
- spec = { 'target_name': 'wee' }
- self.assertTrue('.' not in writer.ComputeOutputFileName(spec,
- 'executable'))
- self.assertTrue(writer.ComputeOutputFileName(spec, 'shared_library').
- startswith('lib'))
- self.assertTrue(writer.ComputeOutputFileName(spec, 'static_library').
- startswith('lib'))
- self.assertTrue(writer.ComputeOutputFileName(spec, 'shared_library').
- endswith('.so'))
- self.assertTrue(writer.ComputeOutputFileName(spec, 'static_library').
- endswith('.a'))
+ def test_BinaryNamesLinux(self):
+ writer = ninja.NinjaWriter('foo', 'wee', '.', '.', 'build.ninja', '.',
+ 'build.ninja', 'linux')
+ spec = { 'target_name': 'wee' }
+ self.assertTrue('.' not in writer.ComputeOutputFileName(spec,
+ 'executable'))
+ self.assertTrue(writer.ComputeOutputFileName(spec, 'shared_library').
+ startswith('lib'))
+ self.assertTrue(writer.ComputeOutputFileName(spec, 'static_library').
+ startswith('lib'))
+ self.assertTrue(writer.ComputeOutputFileName(spec, 'shared_library').
+ endswith('.so'))
+ self.assertTrue(writer.ComputeOutputFileName(spec, 'static_library').
+ endswith('.a'))
if __name__ == '__main__':
unittest.main()
diff --git a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/scons.py b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/scons.py
deleted file mode 100644
index fe7cb581b..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/scons.py
+++ /dev/null
@@ -1,1072 +0,0 @@
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import gyp
-import gyp.common
-import gyp.SCons as SCons
-import os.path
-import pprint
-import re
-import subprocess
-
-
-# TODO: remove when we delete the last WriteList() call in this module
-WriteList = SCons.WriteList
-
-
-generator_default_variables = {
- 'EXECUTABLE_PREFIX': '',
- 'EXECUTABLE_SUFFIX': '',
- 'STATIC_LIB_PREFIX': '${LIBPREFIX}',
- 'SHARED_LIB_PREFIX': '${SHLIBPREFIX}',
- 'STATIC_LIB_SUFFIX': '${LIBSUFFIX}',
- 'SHARED_LIB_SUFFIX': '${SHLIBSUFFIX}',
- 'INTERMEDIATE_DIR': '${INTERMEDIATE_DIR}',
- 'SHARED_INTERMEDIATE_DIR': '${SHARED_INTERMEDIATE_DIR}',
- 'OS': 'linux',
- 'PRODUCT_DIR': '$TOP_BUILDDIR',
- 'SHARED_LIB_DIR': '$LIB_DIR',
- 'LIB_DIR': '$LIB_DIR',
- 'RULE_INPUT_ROOT': '${SOURCE.filebase}',
- 'RULE_INPUT_DIRNAME': '${SOURCE.dir}',
- 'RULE_INPUT_EXT': '${SOURCE.suffix}',
- 'RULE_INPUT_NAME': '${SOURCE.file}',
- 'RULE_INPUT_PATH': '${SOURCE.abspath}',
- 'CONFIGURATION_NAME': '${CONFIG_NAME}',
-}
-
-# Tell GYP how to process the input for us.
-generator_handles_variants = True
-generator_wants_absolute_build_file_paths = True
-
-
-def FixPath(path, prefix):
- if not os.path.isabs(path) and not path[0] == '$':
- path = prefix + path
- return path
-
-
-header = """\
-# This file is generated; do not edit.
-"""
-
-
-_alias_template = """
-if GetOption('verbose'):
- _action = Action([%(action)s])
-else:
- _action = Action([%(action)s], %(message)s)
-_outputs = env.Alias(
- ['_%(target_name)s_action'],
- %(inputs)s,
- _action
-)
-env.AlwaysBuild(_outputs)
-"""
-
-_run_as_template = """
-if GetOption('verbose'):
- _action = Action([%(action)s])
-else:
- _action = Action([%(action)s], %(message)s)
-"""
-
-_run_as_template_suffix = """
-_run_as_target = env.Alias('run_%(target_name)s', target_files, _action)
-env.Requires(_run_as_target, [
- Alias('%(target_name)s'),
-])
-env.AlwaysBuild(_run_as_target)
-"""
-
-_command_template = """
-if GetOption('verbose'):
- _action = Action([%(action)s])
-else:
- _action = Action([%(action)s], %(message)s)
-_outputs = env.Command(
- %(outputs)s,
- %(inputs)s,
- _action
-)
-"""
-
-# This is copied from the default SCons action, updated to handle symlinks.
-_copy_action_template = """
-import shutil
-import SCons.Action
-
-def _copy_files_or_dirs_or_symlinks(dest, src):
- SCons.Node.FS.invalidate_node_memos(dest)
- if SCons.Util.is_List(src) and os.path.isdir(dest):
- for file in src:
- shutil.copy2(file, dest)
- return 0
- elif os.path.islink(src):
- linkto = os.readlink(src)
- os.symlink(linkto, dest)
- return 0
- elif os.path.isfile(src):
- return shutil.copy2(src, dest)
- else:
- return shutil.copytree(src, dest, 1)
-
-def _copy_files_or_dirs_or_symlinks_str(dest, src):
- return 'Copying %s to %s ...' % (src, dest)
-
-GYPCopy = SCons.Action.ActionFactory(_copy_files_or_dirs_or_symlinks,
- _copy_files_or_dirs_or_symlinks_str,
- convert=str)
-"""
-
-_rule_template = """
-%(name)s_additional_inputs = %(inputs)s
-%(name)s_outputs = %(outputs)s
-def %(name)s_emitter(target, source, env):
- return (%(name)s_outputs, source + %(name)s_additional_inputs)
-if GetOption('verbose'):
- %(name)s_action = Action([%(action)s])
-else:
- %(name)s_action = Action([%(action)s], %(message)s)
-env['BUILDERS']['%(name)s'] = Builder(action=%(name)s_action,
- emitter=%(name)s_emitter)
-
-_outputs = []
-_processed_input_files = []
-for infile in input_files:
- if (type(infile) == type('')
- and not os.path.isabs(infile)
- and not infile[0] == '$'):
- infile = %(src_dir)r + infile
- if str(infile).endswith('.%(extension)s'):
- _generated = env.%(name)s(infile)
- env.Precious(_generated)
- _outputs.append(_generated)
- %(process_outputs_as_sources_line)s
- else:
- _processed_input_files.append(infile)
-prerequisites.extend(_outputs)
-input_files = _processed_input_files
-"""
-
-_spawn_hack = """
-import re
-import SCons.Platform.posix
-needs_shell = re.compile('["\\'><!^&]')
-def gyp_spawn(sh, escape, cmd, args, env):
- def strip_scons_quotes(arg):
- if arg[0] == '"' and arg[-1] == '"':
- return arg[1:-1]
- return arg
- stripped_args = [strip_scons_quotes(a) for a in args]
- if needs_shell.search(' '.join(stripped_args)):
- return SCons.Platform.posix.exec_spawnvpe([sh, '-c', ' '.join(args)], env)
- else:
- return SCons.Platform.posix.exec_spawnvpe(stripped_args, env)
-"""
-
-
-def EscapeShellArgument(s):
- """Quotes an argument so that it will be interpreted literally by a POSIX
- shell. Taken from
- http://stackoverflow.com/questions/35817/whats-the-best-way-to-escape-ossystem-calls-in-python
- """
- return "'" + s.replace("'", "'\\''") + "'"
-
-
-def InvertNaiveSConsQuoting(s):
- """SCons tries to "help" with quoting by naively putting double-quotes around
- command-line arguments containing space or tab, which is broken for all
- but trivial cases, so we undo it. (See quote_spaces() in Subst.py)"""
- if ' ' in s or '\t' in s:
- # Then SCons will put double-quotes around this, so add our own quotes
- # to close its quotes at the beginning and end.
- s = '"' + s + '"'
- return s
-
-
-def EscapeSConsVariableExpansion(s):
- """SCons has its own variable expansion syntax using $. We must escape it for
- strings to be interpreted literally. For some reason this requires four
- dollar signs, not two, even without the shell involved."""
- return s.replace('$', '$$$$')
-
-
-def EscapeCppDefine(s):
- """Escapes a CPP define so that it will reach the compiler unaltered."""
- s = EscapeShellArgument(s)
- s = InvertNaiveSConsQuoting(s)
- s = EscapeSConsVariableExpansion(s)
- return s
-
-
-def GenerateConfig(fp, config, indent='', src_dir=''):
- """
- Generates SCons dictionary items for a gyp configuration.
-
- This provides the main translation between the (lower-case) gyp settings
- keywords and the (upper-case) SCons construction variables.
- """
- var_mapping = {
- 'ASFLAGS' : 'asflags',
- 'CCFLAGS' : 'cflags',
- 'CFLAGS' : 'cflags_c',
- 'CXXFLAGS' : 'cflags_cc',
- 'CPPDEFINES' : 'defines',
- 'CPPPATH' : 'include_dirs',
- # Add the ldflags value to $LINKFLAGS, but not $SHLINKFLAGS.
- # SCons defines $SHLINKFLAGS to incorporate $LINKFLAGS, so
- # listing both here would case 'ldflags' to get appended to
- # both, and then have it show up twice on the command line.
- 'LINKFLAGS' : 'ldflags',
- }
- postamble='\n%s],\n' % indent
- for scons_var in sorted(var_mapping.keys()):
- gyp_var = var_mapping[scons_var]
- value = config.get(gyp_var)
- if value:
- if gyp_var in ('defines',):
- value = [EscapeCppDefine(v) for v in value]
- if gyp_var in ('include_dirs',):
- if src_dir and not src_dir.endswith('/'):
- src_dir += '/'
- result = []
- for v in value:
- v = FixPath(v, src_dir)
- # Force SCons to evaluate the CPPPATH directories at
- # SConscript-read time, so delayed evaluation of $SRC_DIR
- # doesn't point it to the --generator-output= directory.
- result.append('env.Dir(%r)' % v)
- value = result
- else:
- value = map(repr, value)
- WriteList(fp,
- value,
- prefix=indent,
- preamble='%s%s = [\n ' % (indent, scons_var),
- postamble=postamble)
-
-
-def GenerateSConscript(output_filename, spec, build_file, build_file_data):
- """
- Generates a SConscript file for a specific target.
-
- This generates a SConscript file suitable for building any or all of
- the target's configurations.
-
- A SConscript file may be called multiple times to generate targets for
- multiple configurations. Consequently, it needs to be ready to build
- the target for any requested configuration, and therefore contains
- information about the settings for all configurations (generated into
- the SConscript file at gyp configuration time) as well as logic for
- selecting (at SCons build time) the specific configuration being built.
-
- The general outline of a generated SConscript file is:
-
- -- Header
-
- -- Import 'env'. This contains a $CONFIG_NAME construction
- variable that specifies what configuration to build
- (e.g. Debug, Release).
-
- -- Configurations. This is a dictionary with settings for
- the different configurations (Debug, Release) under which this
- target can be built. The values in the dictionary are themselves
- dictionaries specifying what construction variables should added
- to the local copy of the imported construction environment
- (Append), should be removed (FilterOut), and should outright
- replace the imported values (Replace).
-
- -- Clone the imported construction environment and update
- with the proper configuration settings.
-
- -- Initialize the lists of the targets' input files and prerequisites.
-
- -- Target-specific actions and rules. These come after the
- input file and prerequisite initializations because the
- outputs of the actions and rules may affect the input file
- list (process_outputs_as_sources) and get added to the list of
- prerequisites (so that they're guaranteed to be executed before
- building the target).
-
- -- Call the Builder for the target itself.
-
- -- Arrange for any copies to be made into installation directories.
-
- -- Set up the {name} Alias (phony Node) for the target as the
- primary handle for building all of the target's pieces.
-
- -- Use env.Require() to make sure the prerequisites (explicitly
- specified, but also including the actions and rules) are built
- before the target itself.
-
- -- Return the {name} Alias to the calling SConstruct file
- so it can be added to the list of default targets.
- """
- scons_target = SCons.Target(spec)
-
- gyp_dir = os.path.dirname(output_filename)
- if not gyp_dir:
- gyp_dir = '.'
- gyp_dir = os.path.abspath(gyp_dir)
-
- output_dir = os.path.dirname(output_filename)
- src_dir = build_file_data['_DEPTH']
- src_dir_rel = gyp.common.RelativePath(src_dir, output_dir)
- subdir = gyp.common.RelativePath(os.path.dirname(build_file), src_dir)
- src_subdir = '$SRC_DIR/' + subdir
- src_subdir_ = src_subdir + '/'
-
- component_name = os.path.splitext(os.path.basename(build_file))[0]
- target_name = spec['target_name']
-
- if not os.path.exists(gyp_dir):
- os.makedirs(gyp_dir)
- fp = open(output_filename, 'w')
- fp.write(header)
-
- fp.write('\nimport os\n')
- fp.write('\nImport("env")\n')
-
- #
- fp.write('\n')
- fp.write('env = env.Clone(COMPONENT_NAME=%s,\n' % repr(component_name))
- fp.write(' TARGET_NAME=%s)\n' % repr(target_name))
-
- #
- for config in spec['configurations'].itervalues():
- if config.get('scons_line_length'):
- fp.write(_spawn_hack)
- break
-
- #
- indent = ' ' * 12
- fp.write('\n')
- fp.write('configurations = {\n')
- for config_name, config in spec['configurations'].iteritems():
- fp.write(' \'%s\' : {\n' % config_name)
-
- fp.write(' \'Append\' : dict(\n')
- GenerateConfig(fp, config, indent, src_subdir)
- libraries = spec.get('libraries')
- if libraries:
- WriteList(fp,
- map(repr, libraries),
- prefix=indent,
- preamble='%sLIBS = [\n ' % indent,
- postamble='\n%s],\n' % indent)
- fp.write(' ),\n')
-
- fp.write(' \'FilterOut\' : dict(\n' )
- for key, var in config.get('scons_remove', {}).iteritems():
- fp.write(' %s = %s,\n' % (key, repr(var)))
- fp.write(' ),\n')
-
- fp.write(' \'Replace\' : dict(\n' )
- scons_settings = config.get('scons_variable_settings', {})
- for key in sorted(scons_settings.keys()):
- val = pprint.pformat(scons_settings[key])
- fp.write(' %s = %s,\n' % (key, val))
- if 'c++' in spec.get('link_languages', []):
- fp.write(' %s = %s,\n' % ('LINK', repr('$CXX')))
- if config.get('scons_line_length'):
- fp.write(' SPAWN = gyp_spawn,\n')
- fp.write(' ),\n')
-
- fp.write(' \'ImportExternal\' : [\n' )
- for var in config.get('scons_import_variables', []):
- fp.write(' %s,\n' % repr(var))
- fp.write(' ],\n')
-
- fp.write(' \'PropagateExternal\' : [\n' )
- for var in config.get('scons_propagate_variables', []):
- fp.write(' %s,\n' % repr(var))
- fp.write(' ],\n')
-
- fp.write(' },\n')
- fp.write('}\n')
-
- fp.write('\n'
- 'config = configurations[env[\'CONFIG_NAME\']]\n'
- 'env.Append(**config[\'Append\'])\n'
- 'env.FilterOut(**config[\'FilterOut\'])\n'
- 'env.Replace(**config[\'Replace\'])\n')
-
- fp.write('\n'
- '# Scons forces -fPIC for SHCCFLAGS on some platforms.\n'
- '# Disable that so we can control it from cflags in gyp.\n'
- '# Note that Scons itself is inconsistent with its -fPIC\n'
- '# setting. SHCCFLAGS forces -fPIC, and SHCFLAGS does not.\n'
- '# This will make SHCCFLAGS consistent with SHCFLAGS.\n'
- 'env[\'SHCCFLAGS\'] = [\'$CCFLAGS\']\n')
-
- fp.write('\n'
- 'for _var in config[\'ImportExternal\']:\n'
- ' if _var in ARGUMENTS:\n'
- ' env[_var] = ARGUMENTS[_var]\n'
- ' elif _var in os.environ:\n'
- ' env[_var] = os.environ[_var]\n'
- 'for _var in config[\'PropagateExternal\']:\n'
- ' if _var in ARGUMENTS:\n'
- ' env[_var] = ARGUMENTS[_var]\n'
- ' elif _var in os.environ:\n'
- ' env[\'ENV\'][_var] = os.environ[_var]\n')
-
- fp.write('\n'
- "env['ENV']['LD_LIBRARY_PATH'] = env.subst('$LIB_DIR')\n")
-
- #
- #fp.write("\nif env.has_key('CPPPATH'):\n")
- #fp.write(" env['CPPPATH'] = map(env.Dir, env['CPPPATH'])\n")
-
- variants = spec.get('variants', {})
- for setting in sorted(variants.keys()):
- if_fmt = 'if ARGUMENTS.get(%s) not in (None, \'0\'):\n'
- fp.write('\n')
- fp.write(if_fmt % repr(setting.upper()))
- fp.write(' env.AppendUnique(\n')
- GenerateConfig(fp, variants[setting], indent, src_subdir)
- fp.write(' )\n')
-
- #
- scons_target.write_input_files(fp)
-
- fp.write('\n')
- fp.write('target_files = []\n')
- prerequisites = spec.get('scons_prerequisites', [])
- fp.write('prerequisites = %s\n' % pprint.pformat(prerequisites))
-
- actions = spec.get('actions', [])
- for action in actions:
- a = ['cd', src_subdir, '&&'] + action['action']
- message = action.get('message')
- if message:
- message = repr(message)
- inputs = [FixPath(f, src_subdir_) for f in action.get('inputs', [])]
- outputs = [FixPath(f, src_subdir_) for f in action.get('outputs', [])]
- if outputs:
- template = _command_template
- else:
- template = _alias_template
- fp.write(template % {
- 'inputs' : pprint.pformat(inputs),
- 'outputs' : pprint.pformat(outputs),
- 'action' : pprint.pformat(a),
- 'message' : message,
- 'target_name': target_name,
- })
- if int(action.get('process_outputs_as_sources', 0)):
- fp.write('input_files.extend(_outputs)\n')
- fp.write('prerequisites.extend(_outputs)\n')
- fp.write('target_files.extend(_outputs)\n')
-
- rules = spec.get('rules', [])
- for rule in rules:
- name = re.sub('[^a-zA-Z0-9_]', '_', rule['rule_name'])
- message = rule.get('message')
- if message:
- message = repr(message)
- if int(rule.get('process_outputs_as_sources', 0)):
- poas_line = '_processed_input_files.extend(_generated)'
- else:
- poas_line = '_processed_input_files.append(infile)'
- inputs = [FixPath(f, src_subdir_) for f in rule.get('inputs', [])]
- outputs = [FixPath(f, src_subdir_) for f in rule.get('outputs', [])]
- # Skip a rule with no action and no inputs.
- if 'action' not in rule and not rule.get('rule_sources', []):
- continue
- a = ['cd', src_subdir, '&&'] + rule['action']
- fp.write(_rule_template % {
- 'inputs' : pprint.pformat(inputs),
- 'outputs' : pprint.pformat(outputs),
- 'action' : pprint.pformat(a),
- 'extension' : rule['extension'],
- 'name' : name,
- 'message' : message,
- 'process_outputs_as_sources_line' : poas_line,
- 'src_dir' : src_subdir_,
- })
-
- scons_target.write_target(fp, src_subdir)
-
- copies = spec.get('copies', [])
- if copies:
- fp.write(_copy_action_template)
- for copy in copies:
- destdir = None
- files = None
- try:
- destdir = copy['destination']
- except KeyError, e:
- gyp.common.ExceptionAppend(
- e,
- "Required 'destination' key missing for 'copies' in %s." % build_file)
- raise
- try:
- files = copy['files']
- except KeyError, e:
- gyp.common.ExceptionAppend(
- e, "Required 'files' key missing for 'copies' in %s." % build_file)
- raise
- if not files:
- # TODO: should probably add a (suppressible) warning;
- # a null file list may be unintentional.
- continue
- if not destdir:
- raise Exception(
- "Required 'destination' key is empty for 'copies' in %s." % build_file)
-
- fmt = ('\n'
- '_outputs = env.Command(%s,\n'
- ' %s,\n'
- ' GYPCopy(\'$TARGET\', \'$SOURCE\'))\n')
- for f in copy['files']:
- # Remove trailing separators so basename() acts like Unix basename and
- # always returns the last element, whether a file or dir. Without this,
- # only the contents, not the directory itself, are copied (and nothing
- # might be copied if dest already exists, since scons thinks nothing needs
- # to be done).
- dest = os.path.join(destdir, os.path.basename(f.rstrip(os.sep)))
- f = FixPath(f, src_subdir_)
- dest = FixPath(dest, src_subdir_)
- fp.write(fmt % (repr(dest), repr(f)))
- fp.write('target_files.extend(_outputs)\n')
-
- run_as = spec.get('run_as')
- if run_as:
- action = run_as.get('action', [])
- working_directory = run_as.get('working_directory')
- if not working_directory:
- working_directory = gyp_dir
- else:
- if not os.path.isabs(working_directory):
- working_directory = os.path.normpath(os.path.join(gyp_dir,
- working_directory))
- if run_as.get('environment'):
- for (key, val) in run_as.get('environment').iteritems():
- action = ['%s="%s"' % (key, val)] + action
- action = ['cd', '"%s"' % working_directory, '&&'] + action
- fp.write(_run_as_template % {
- 'action' : pprint.pformat(action),
- 'message' : run_as.get('message', ''),
- })
-
- fmt = "\ngyp_target = env.Alias('%s', target_files)\n"
- fp.write(fmt % target_name)
-
- dependencies = spec.get('scons_dependencies', [])
- if dependencies:
- WriteList(fp, dependencies, preamble='dependencies = [\n ',
- postamble='\n]\n')
- fp.write('env.Requires(target_files, dependencies)\n')
- fp.write('env.Requires(gyp_target, dependencies)\n')
- fp.write('for prerequisite in prerequisites:\n')
- fp.write(' env.Requires(prerequisite, dependencies)\n')
- fp.write('env.Requires(gyp_target, prerequisites)\n')
-
- if run_as:
- fp.write(_run_as_template_suffix % {
- 'target_name': target_name,
- })
-
- fp.write('Return("gyp_target")\n')
-
- fp.close()
-
-
-#############################################################################
-# TEMPLATE BEGIN
-
-_wrapper_template = """\
-
-__doc__ = '''
-Wrapper configuration for building this entire "solution,"
-including all the specific targets in various *.scons files.
-'''
-
-import os
-import sys
-
-import SCons.Environment
-import SCons.Util
-
-def GetProcessorCount():
- '''
- Detects the number of CPUs on the system. Adapted form:
- http://codeliberates.blogspot.com/2008/05/detecting-cpuscores-in-python.html
- '''
- # Linux, Unix and Mac OS X:
- if hasattr(os, 'sysconf'):
- if os.sysconf_names.has_key('SC_NPROCESSORS_ONLN'):
- # Linux and Unix or Mac OS X with python >= 2.5:
- return os.sysconf('SC_NPROCESSORS_ONLN')
- else: # Mac OS X with Python < 2.5:
- return int(os.popen2("sysctl -n hw.ncpu")[1].read())
- # Windows:
- if os.environ.has_key('NUMBER_OF_PROCESSORS'):
- return max(int(os.environ.get('NUMBER_OF_PROCESSORS', '1')), 1)
- return 1 # Default
-
-# Support PROGRESS= to show progress in different ways.
-p = ARGUMENTS.get('PROGRESS')
-if p == 'spinner':
- Progress(['/\\r', '|\\r', '\\\\\\r', '-\\r'],
- interval=5,
- file=open('/dev/tty', 'w'))
-elif p == 'name':
- Progress('$TARGET\\r', overwrite=True, file=open('/dev/tty', 'w'))
-
-# Set the default -j value based on the number of processors.
-SetOption('num_jobs', GetProcessorCount() + 1)
-
-# Have SCons use its cached dependency information.
-SetOption('implicit_cache', 1)
-
-# Only re-calculate MD5 checksums if a timestamp has changed.
-Decider('MD5-timestamp')
-
-# Since we set the -j value by default, suppress SCons warnings about being
-# unable to support parallel build on versions of Python with no threading.
-default_warnings = ['no-no-parallel-support']
-SetOption('warn', default_warnings + GetOption('warn'))
-
-AddOption('--mode', nargs=1, dest='conf_list', default=[],
- action='append', help='Configuration to build.')
-
-AddOption('--verbose', dest='verbose', default=False,
- action='store_true', help='Verbose command-line output.')
-
-
-#
-sconscript_file_map = %(sconscript_files)s
-
-class LoadTarget:
- '''
- Class for deciding if a given target sconscript is to be included
- based on a list of included target names, optionally prefixed with '-'
- to exclude a target name.
- '''
- def __init__(self, load):
- '''
- Initialize a class with a list of names for possible loading.
-
- Arguments:
- load: list of elements in the LOAD= specification
- '''
- self.included = set([c for c in load if not c.startswith('-')])
- self.excluded = set([c[1:] for c in load if c.startswith('-')])
-
- if not self.included:
- self.included = set(['all'])
-
- def __call__(self, target):
- '''
- Returns True if the specified target's sconscript file should be
- loaded, based on the initialized included and excluded lists.
- '''
- return (target in self.included or
- ('all' in self.included and not target in self.excluded))
-
-if 'LOAD' in ARGUMENTS:
- load = ARGUMENTS['LOAD'].split(',')
-else:
- load = []
-load_target = LoadTarget(load)
-
-sconscript_files = []
-for target, sconscript in sconscript_file_map.iteritems():
- if load_target(target):
- sconscript_files.append(sconscript)
-
-
-target_alias_list= []
-
-conf_list = GetOption('conf_list')
-if conf_list:
- # In case the same --mode= value was specified multiple times.
- conf_list = list(set(conf_list))
-else:
- conf_list = [%(default_configuration)r]
-
-sconsbuild_dir = Dir(%(sconsbuild_dir)s)
-
-
-def FilterOut(self, **kw):
- kw = SCons.Environment.copy_non_reserved_keywords(kw)
- for key, val in kw.items():
- envval = self.get(key, None)
- if envval is None:
- # No existing variable in the environment, so nothing to delete.
- continue
-
- for vremove in val:
- # Use while not if, so we can handle duplicates.
- while vremove in envval:
- envval.remove(vremove)
-
- self[key] = envval
-
- # TODO(sgk): SCons.Environment.Append() has much more logic to deal
- # with various types of values. We should handle all those cases in here
- # too. (If variable is a dict, etc.)
-
-
-non_compilable_suffixes = {
- 'LINUX' : set([
- '.bdic',
- '.css',
- '.dat',
- '.fragment',
- '.gperf',
- '.h',
- '.hh',
- '.hpp',
- '.html',
- '.hxx',
- '.idl',
- '.in',
- '.in0',
- '.in1',
- '.js',
- '.mk',
- '.rc',
- '.sigs',
- '',
- ]),
- 'WINDOWS' : set([
- '.h',
- '.hh',
- '.hpp',
- '.dat',
- '.idl',
- '.in',
- '.in0',
- '.in1',
- ]),
-}
-
-def compilable(env, file):
- base, ext = os.path.splitext(str(file))
- if ext in non_compilable_suffixes[env['TARGET_PLATFORM']]:
- return False
- return True
-
-def compilable_files(env, sources):
- return [x for x in sources if compilable(env, x)]
-
-def GypProgram(env, target, source, *args, **kw):
- source = compilable_files(env, source)
- result = env.Program(target, source, *args, **kw)
- if env.get('INCREMENTAL'):
- env.Precious(result)
- return result
-
-def GypTestProgram(env, target, source, *args, **kw):
- source = compilable_files(env, source)
- result = env.Program(target, source, *args, **kw)
- if env.get('INCREMENTAL'):
- env.Precious(*result)
- return result
-
-def GypLibrary(env, target, source, *args, **kw):
- source = compilable_files(env, source)
- result = env.Library(target, source, *args, **kw)
- return result
-
-def GypLoadableModule(env, target, source, *args, **kw):
- source = compilable_files(env, source)
- result = env.LoadableModule(target, source, *args, **kw)
- return result
-
-def GypStaticLibrary(env, target, source, *args, **kw):
- source = compilable_files(env, source)
- result = env.StaticLibrary(target, source, *args, **kw)
- return result
-
-def GypSharedLibrary(env, target, source, *args, **kw):
- source = compilable_files(env, source)
- result = env.SharedLibrary(target, source, *args, **kw)
- if env.get('INCREMENTAL'):
- env.Precious(result)
- return result
-
-def add_gyp_methods(env):
- env.AddMethod(GypProgram)
- env.AddMethod(GypTestProgram)
- env.AddMethod(GypLibrary)
- env.AddMethod(GypLoadableModule)
- env.AddMethod(GypStaticLibrary)
- env.AddMethod(GypSharedLibrary)
-
- env.AddMethod(FilterOut)
-
- env.AddMethod(compilable)
-
-
-base_env = Environment(
- tools = %(scons_tools)s,
- INTERMEDIATE_DIR='$OBJ_DIR/${COMPONENT_NAME}/_${TARGET_NAME}_intermediate',
- LIB_DIR='$TOP_BUILDDIR/lib',
- OBJ_DIR='$TOP_BUILDDIR/obj',
- SCONSBUILD_DIR=sconsbuild_dir.abspath,
- SHARED_INTERMEDIATE_DIR='$OBJ_DIR/_global_intermediate',
- SRC_DIR=Dir(%(src_dir)r),
- TARGET_PLATFORM='LINUX',
- TOP_BUILDDIR='$SCONSBUILD_DIR/$CONFIG_NAME',
- LIBPATH=['$LIB_DIR'],
-)
-
-if not GetOption('verbose'):
- base_env.SetDefault(
- ARCOMSTR='Creating library $TARGET',
- ASCOMSTR='Assembling $TARGET',
- CCCOMSTR='Compiling $TARGET',
- CONCATSOURCECOMSTR='ConcatSource $TARGET',
- CXXCOMSTR='Compiling $TARGET',
- LDMODULECOMSTR='Building loadable module $TARGET',
- LINKCOMSTR='Linking $TARGET',
- MANIFESTCOMSTR='Updating manifest for $TARGET',
- MIDLCOMSTR='Compiling IDL $TARGET',
- PCHCOMSTR='Precompiling $TARGET',
- RANLIBCOMSTR='Indexing $TARGET',
- RCCOMSTR='Compiling resource $TARGET',
- SHCCCOMSTR='Compiling $TARGET',
- SHCXXCOMSTR='Compiling $TARGET',
- SHLINKCOMSTR='Linking $TARGET',
- SHMANIFESTCOMSTR='Updating manifest for $TARGET',
- )
-
-add_gyp_methods(base_env)
-
-for conf in conf_list:
- env = base_env.Clone(CONFIG_NAME=conf)
- SConsignFile(env.File('$TOP_BUILDDIR/.sconsign').abspath)
- for sconscript in sconscript_files:
- target_alias = env.SConscript(sconscript, exports=['env'])
- if target_alias:
- target_alias_list.extend(target_alias)
-
-Default(Alias('all', target_alias_list))
-
-help_fmt = '''
-Usage: hammer [SCONS_OPTIONS] [VARIABLES] [TARGET] ...
-
-Local command-line build options:
- --mode=CONFIG Configuration to build:
- --mode=Debug [default]
- --mode=Release
- --verbose Print actual executed command lines.
-
-Supported command-line build variables:
- LOAD=[module,...] Comma-separated list of components to load in the
- dependency graph ('-' prefix excludes)
- PROGRESS=type Display a progress indicator:
- name: print each evaluated target name
- spinner: print a spinner every 5 targets
-
-The following TARGET names can also be used as LOAD= module names:
-
-%%s
-'''
-
-if GetOption('help'):
- def columnar_text(items, width=78, indent=2, sep=2):
- result = []
- colwidth = max(map(len, items)) + sep
- cols = (width - indent) / colwidth
- if cols < 1:
- cols = 1
- rows = (len(items) + cols - 1) / cols
- indent = '%%*s' %% (indent, '')
- sep = indent
- for row in xrange(0, rows):
- result.append(sep)
- for i in xrange(row, len(items), rows):
- result.append('%%-*s' %% (colwidth, items[i]))
- sep = '\\n' + indent
- result.append('\\n')
- return ''.join(result)
-
- load_list = set(sconscript_file_map.keys())
- target_aliases = set(map(str, target_alias_list))
-
- common = load_list and target_aliases
- load_only = load_list - common
- target_only = target_aliases - common
- help_text = [help_fmt %% columnar_text(sorted(list(common)))]
- if target_only:
- fmt = "The following are additional TARGET names:\\n\\n%%s\\n"
- help_text.append(fmt %% columnar_text(sorted(list(target_only))))
- if load_only:
- fmt = "The following are additional LOAD= module names:\\n\\n%%s\\n"
- help_text.append(fmt %% columnar_text(sorted(list(load_only))))
- Help(''.join(help_text))
-"""
-
-# TEMPLATE END
-#############################################################################
-
-
-def GenerateSConscriptWrapper(build_file, build_file_data, name,
- output_filename, sconscript_files,
- default_configuration):
- """
- Generates the "wrapper" SConscript file (analogous to the Visual Studio
- solution) that calls all the individual target SConscript files.
- """
- output_dir = os.path.dirname(output_filename)
- src_dir = build_file_data['_DEPTH']
- src_dir_rel = gyp.common.RelativePath(src_dir, output_dir)
- if not src_dir_rel:
- src_dir_rel = '.'
- scons_settings = build_file_data.get('scons_settings', {})
- sconsbuild_dir = scons_settings.get('sconsbuild_dir', '#')
- scons_tools = scons_settings.get('tools', ['default'])
-
- sconscript_file_lines = ['dict(']
- for target in sorted(sconscript_files.keys()):
- sconscript = sconscript_files[target]
- sconscript_file_lines.append(' %s = %r,' % (target, sconscript))
- sconscript_file_lines.append(')')
-
- fp = open(output_filename, 'w')
- fp.write(header)
- fp.write(_wrapper_template % {
- 'default_configuration' : default_configuration,
- 'name' : name,
- 'scons_tools' : repr(scons_tools),
- 'sconsbuild_dir' : repr(sconsbuild_dir),
- 'sconscript_files' : '\n'.join(sconscript_file_lines),
- 'src_dir' : src_dir_rel,
- })
- fp.close()
-
- # Generate the SConstruct file that invokes the wrapper SConscript.
- dir, fname = os.path.split(output_filename)
- SConstruct = os.path.join(dir, 'SConstruct')
- fp = open(SConstruct, 'w')
- fp.write(header)
- fp.write('SConscript(%s)\n' % repr(fname))
- fp.close()
-
-
-def TargetFilename(target, build_file=None, output_suffix=''):
- """Returns the .scons file name for the specified target.
- """
- if build_file is None:
- build_file, target = gyp.common.ParseQualifiedTarget(target)[:2]
- output_file = os.path.join(os.path.dirname(build_file),
- target + output_suffix + '.scons')
- return output_file
-
-
-def PerformBuild(data, configurations, params):
- options = params['options']
-
- # Due to the way we test gyp on the chromium typbots
- # we need to look for 'scons.py' as well as the more common 'scons'
- # TODO(sbc): update the trybots to have a more normal install
- # of scons.
- scons = 'scons'
- paths = os.environ['PATH'].split(os.pathsep)
- for scons_name in ['scons', 'scons.py']:
- for path in paths:
- test_scons = os.path.join(path, scons_name)
- print 'looking for: %s' % test_scons
- if os.path.exists(test_scons):
- print "found scons: %s" % scons
- scons = test_scons
- break
-
- for config in configurations:
- arguments = [scons, '-C', options.toplevel_dir, '--mode=%s' % config]
- print "Building [%s]: %s" % (config, arguments)
- subprocess.check_call(arguments)
-
-
-def GenerateOutput(target_list, target_dicts, data, params):
- """
- Generates all the output files for the specified targets.
- """
- options = params['options']
-
- if options.generator_output:
- def output_path(filename):
- return filename.replace(params['cwd'], options.generator_output)
- else:
- def output_path(filename):
- return filename
-
- default_configuration = None
-
- for qualified_target in target_list:
- spec = target_dicts[qualified_target]
- if spec['toolset'] != 'target':
- raise Exception(
- 'Multiple toolsets not supported in scons build (target %s)' %
- qualified_target)
- scons_target = SCons.Target(spec)
- if scons_target.is_ignored:
- continue
-
- # TODO: assumes the default_configuration of the first target
- # non-Default target is the correct default for all targets.
- # Need a better model for handle variation between targets.
- if (not default_configuration and
- spec['default_configuration'] != 'Default'):
- default_configuration = spec['default_configuration']
-
- build_file, target = gyp.common.ParseQualifiedTarget(qualified_target)[:2]
- output_file = TargetFilename(target, build_file, options.suffix)
- if options.generator_output:
- output_file = output_path(output_file)
-
- if not spec.has_key('libraries'):
- spec['libraries'] = []
-
- # Add dependent static library targets to the 'libraries' value.
- deps = spec.get('dependencies', [])
- spec['scons_dependencies'] = []
- for d in deps:
- td = target_dicts[d]
- target_name = td['target_name']
- spec['scons_dependencies'].append("Alias('%s')" % target_name)
- if td['type'] in ('static_library', 'shared_library'):
- libname = td.get('product_name', target_name)
- spec['libraries'].append('lib' + libname)
- if td['type'] == 'loadable_module':
- prereqs = spec.get('scons_prerequisites', [])
- # TODO: parameterize with <(SHARED_LIBRARY_*) variables?
- td_target = SCons.Target(td)
- td_target.target_prefix = '${SHLIBPREFIX}'
- td_target.target_suffix = '${SHLIBSUFFIX}'
-
- GenerateSConscript(output_file, spec, build_file, data[build_file])
-
- if not default_configuration:
- default_configuration = 'Default'
-
- for build_file in sorted(data.keys()):
- path, ext = os.path.splitext(build_file)
- if ext != '.gyp':
- continue
- output_dir, basename = os.path.split(path)
- output_filename = path + '_main' + options.suffix + '.scons'
-
- all_targets = gyp.common.AllTargets(target_list, target_dicts, build_file)
- sconscript_files = {}
- for t in all_targets:
- scons_target = SCons.Target(target_dicts[t])
- if scons_target.is_ignored:
- continue
- bf, target = gyp.common.ParseQualifiedTarget(t)[:2]
- target_filename = TargetFilename(target, bf, options.suffix)
- tpath = gyp.common.RelativePath(target_filename, output_dir)
- sconscript_files[target] = tpath
-
- output_filename = output_path(output_filename)
- if sconscript_files:
- GenerateSConscriptWrapper(build_file, data[build_file], basename,
- output_filename, sconscript_files,
- default_configuration)
diff --git a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/xcode.py b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/xcode.py
index 7b21bae8a..331e78baa 100644
--- a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/xcode.py
+++ b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/xcode.py
@@ -72,6 +72,7 @@ generator_additional_non_configuration_keys = [
'mac_bundle_resources',
'mac_framework_headers',
'mac_framework_private_headers',
+ 'mac_xctest_bundle',
'xcode_create_dependents_test_runner',
]
@@ -480,39 +481,6 @@ sys.exit(subprocess.call(sys.argv[1:]))" """
raise
-cached_xcode_version = None
-def InstalledXcodeVersion():
- """Fetches the installed version of Xcode, returns empty string if it is
- unable to figure it out."""
-
- global cached_xcode_version
- if not cached_xcode_version is None:
- return cached_xcode_version
-
- # Default to an empty string
- cached_xcode_version = ''
-
- # Collect the xcodebuild's version information.
- try:
- import subprocess
- cmd = ['/usr/bin/xcodebuild', '-version']
- proc = subprocess.Popen(cmd, stdout=subprocess.PIPE)
- xcodebuild_version_info = proc.communicate()[0]
- # Any error, return empty string
- if proc.returncode:
- xcodebuild_version_info = ''
- except OSError:
- # We failed to launch the tool
- xcodebuild_version_info = ''
-
- # Pull out the Xcode version itself.
- match_line = re.search('^Xcode (.*)$', xcodebuild_version_info, re.MULTILINE)
- if match_line:
- cached_xcode_version = match_line.group(1)
- # Done!
- return cached_xcode_version
-
-
def AddSourceToTarget(source, type, pbxp, xct):
# TODO(mark): Perhaps source_extensions and library_extensions can be made a
# little bit fancier.
@@ -579,13 +547,13 @@ def ExpandXcodeVariables(string, expansions):
return string
-def EscapeXCodeArgument(s):
- """We must escape the arguments that we give to XCode so that it knows not to
- split on spaces and to respect backslash and quote literals."""
- s = s.replace('\\', '\\\\')
- s = s.replace('"', '\\"')
- return '"' + s + '"'
-
+_xcode_define_re = re.compile(r'([\\\"\' ])')
+def EscapeXcodeDefine(s):
+ """We must escape the defines that we give to XCode so that it knows not to
+ split on spaces and to respect backslash and quote literals. However, we
+ must not quote the define, or Xcode will incorrectly intepret variables
+ especially $(inherited)."""
+ return re.sub(_xcode_define_re, r'\\\1', s)
def PerformBuild(data, configurations, params):
@@ -675,6 +643,7 @@ def GenerateOutput(target_list, target_dicts, data, params):
'static_library': 'com.apple.product-type.library.static',
'executable+bundle': 'com.apple.product-type.application',
'loadable_module+bundle': 'com.apple.product-type.bundle',
+ 'loadable_module+xctest': 'com.apple.product-type.bundle.unit-test',
'shared_library+bundle': 'com.apple.product-type.framework',
}
@@ -684,11 +653,18 @@ def GenerateOutput(target_list, target_dicts, data, params):
}
type = spec['type']
- is_bundle = int(spec.get('mac_bundle', 0))
+ is_xctest = int(spec.get('mac_xctest_bundle', 0))
+ is_bundle = int(spec.get('mac_bundle', 0)) or is_xctest
if type != 'none':
type_bundle_key = type
- if is_bundle:
+ if is_xctest:
+ type_bundle_key += '+xctest'
+ assert type == 'loadable_module', (
+ 'mac_xctest_bundle targets must have type loadable_module '
+ '(target %s)' % target_name)
+ elif is_bundle:
type_bundle_key += '+bundle'
+
xctarget_type = gyp.xcodeproj_file.PBXNativeTarget
try:
target_properties['productType'] = _types[type_bundle_key]
@@ -701,6 +677,9 @@ def GenerateOutput(target_list, target_dicts, data, params):
assert not is_bundle, (
'mac_bundle targets cannot have type none (target "%s")' %
target_name)
+ assert not is_xctest, (
+ 'mac_xctest_bundle targets cannot have type none (target "%s")' %
+ target_name)
target_product_name = spec.get('product_name')
if target_product_name is not None:
@@ -1053,7 +1032,7 @@ def GenerateOutput(target_list, target_dicts, data, params):
if [ "${JOB_COUNT}" -gt 4 ]; then
JOB_COUNT=4
fi
-exec "${DEVELOPER_BIN_DIR}/make" -f "${PROJECT_FILE_PATH}/%s" -j "${JOB_COUNT}"
+exec xcrun make -f "${PROJECT_FILE_PATH}/%s" -j "${JOB_COUNT}"
exit 1
""" % makefile_name
ssbp = gyp.xcodeproj_file.PBXShellScriptBuildPhase({
@@ -1110,20 +1089,29 @@ exit 1
AddHeaderToTarget(header, pbxp, xct, True)
# Add "copies".
+ pbxcp_dict = {}
for copy_group in spec.get('copies', []):
- pbxcp = gyp.xcodeproj_file.PBXCopyFilesBuildPhase({
- 'name': 'Copy to ' + copy_group['destination']
- },
- parent=xct)
dest = copy_group['destination']
if dest[0] not in ('/', '$'):
# Relative paths are relative to $(SRCROOT).
dest = '$(SRCROOT)/' + dest
- pbxcp.SetDestination(dest)
- # TODO(mark): The usual comment about this knowing too much about
- # gyp.xcodeproj_file internals applies.
- xct._properties['buildPhases'].insert(prebuild_index, pbxcp)
+ # Coalesce multiple "copies" sections in the same target with the same
+ # "destination" property into the same PBXCopyFilesBuildPhase, otherwise
+ # they'll wind up with ID collisions.
+ pbxcp = pbxcp_dict.get(dest, None)
+ if pbxcp is None:
+ pbxcp = gyp.xcodeproj_file.PBXCopyFilesBuildPhase({
+ 'name': 'Copy to ' + copy_group['destination']
+ },
+ parent=xct)
+ pbxcp.SetDestination(dest)
+
+ # TODO(mark): The usual comment about this knowing too much about
+ # gyp.xcodeproj_file internals applies.
+ xct._properties['buildPhases'].insert(prebuild_index, pbxcp)
+
+ pbxcp_dict[dest] = pbxcp
for file in copy_group['files']:
pbxcp.AddFile(file)
@@ -1202,9 +1190,15 @@ exit 1
xcbc.AppendBuildSetting('FRAMEWORK_SEARCH_PATHS', include_dir)
for include_dir in configuration.get('include_dirs', []):
xcbc.AppendBuildSetting('HEADER_SEARCH_PATHS', include_dir)
+ for library_dir in configuration.get('library_dirs', []):
+ if library_dir not in xcode_standard_library_dirs and (
+ not xcbc.HasBuildSetting(_library_search_paths_var) or
+ library_dir not in xcbc.GetBuildSetting(_library_search_paths_var)):
+ xcbc.AppendBuildSetting(_library_search_paths_var, library_dir)
+
if 'defines' in configuration:
for define in configuration['defines']:
- set_define = EscapeXCodeArgument(define)
+ set_define = EscapeXcodeDefine(define)
xcbc.AppendBuildSetting('GCC_PREPROCESSOR_DEFINITIONS', set_define)
if 'xcode_settings' in configuration:
for xck, xcv in configuration['xcode_settings'].iteritems():
diff --git a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/xcode_test.py b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/xcode_test.py
new file mode 100644
index 000000000..260324a43
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/xcode_test.py
@@ -0,0 +1,23 @@
+#!/usr/bin/env python
+
+# Copyright (c) 2013 Google Inc. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+""" Unit tests for the xcode.py file. """
+
+import gyp.generator.xcode as xcode
+import unittest
+import sys
+
+
+class TestEscapeXcodeDefine(unittest.TestCase):
+ if sys.platform == 'darwin':
+ def test_InheritedRemainsUnescaped(self):
+ self.assertEqual(xcode.EscapeXcodeDefine('$(inherited)'), '$(inherited)')
+
+ def test_Escaping(self):
+ self.assertEqual(xcode.EscapeXcodeDefine('a b"c\\'), 'a\\ b\\"c\\\\')
+
+if __name__ == '__main__':
+ unittest.main()
diff --git a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/input.py b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/input.py
index 65236671f..6472912db 100644
--- a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/input.py
+++ b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/input.py
@@ -22,6 +22,7 @@ import subprocess
import sys
import threading
import time
+import traceback
from gyp.common import GypError
@@ -46,23 +47,18 @@ base_path_sections = [
]
path_sections = []
+is_path_section_charset = set('=+?!')
+is_path_section_match_re = re.compile('_(dir|file|path)s?$')
def IsPathSection(section):
# If section ends in one of these characters, it's applied to a section
# without the trailing characters. '/' is notably absent from this list,
# because there's no way for a regular expression to be treated as a path.
- while section[-1:] in ('=', '+', '?', '!'):
- section = section[0:-1]
+ while section[-1:] in is_path_section_charset:
+ section = section[:-1]
+ return section in path_sections or is_path_section_match_re.search(section)
- if section in path_sections or \
- section.endswith('_dir') or section.endswith('_dirs') or \
- section.endswith('_file') or section.endswith('_files') or \
- section.endswith('_path') or section.endswith('_paths'):
- return True
- return False
-
-
-# base_non_configuraiton_keys is a list of key names that belong in the target
+# base_non_configuration_keys is a list of key names that belong in the target
# itself and should not be propagated into its configurations. It is merged
# with a list that can come from the generator to
# create non_configuration_keys.
@@ -74,7 +70,6 @@ base_non_configuration_keys = [
'default_configuration',
'dependencies',
'dependencies_original',
- 'link_languages',
'libraries',
'postbuilds',
'product_dir',
@@ -90,7 +85,6 @@ base_non_configuration_keys = [
'toolset',
'toolsets',
'type',
- 'variants',
# Sections that can be found inside targets or configurations, but that
# should not be propagated from targets into their configurations.
@@ -113,12 +107,14 @@ invalid_configuration_keys = [
'type',
]
-# Controls how the generator want the build file paths.
-absolute_build_file_paths = False
-
# Controls whether or not the generator supports multiple toolsets.
multiple_toolsets = False
+# Paths for converting filelist paths to output paths: {
+# toplevel,
+# qualified_output_dir,
+# }
+generator_filelist_paths = None
def GetIncludedBuildFiles(build_file_path, aux_data, included=None):
"""Return a list of all build files included into build_file_path.
@@ -228,21 +224,26 @@ def LoadOneBuildFile(build_file_path, data, aux_data, variables, includes,
gyp.common.ExceptionAppend(e, 'while reading ' + build_file_path)
raise
+ if not isinstance(build_file_data, dict):
+ raise GypError("%s does not evaluate to a dictionary." % build_file_path)
+
data[build_file_path] = build_file_data
aux_data[build_file_path] = {}
# Scan for includes and merge them in.
- try:
- if is_target:
- LoadBuildFileIncludesIntoDict(build_file_data, build_file_path, data,
- aux_data, variables, includes, check)
- else:
- LoadBuildFileIncludesIntoDict(build_file_data, build_file_path, data,
- aux_data, variables, None, check)
- except Exception, e:
- gyp.common.ExceptionAppend(e,
- 'while reading includes of ' + build_file_path)
- raise
+ if ('skip_includes' not in build_file_data or
+ not build_file_data['skip_includes']):
+ try:
+ if is_target:
+ LoadBuildFileIncludesIntoDict(build_file_data, build_file_path, data,
+ aux_data, variables, includes, check)
+ else:
+ LoadBuildFileIncludesIntoDict(build_file_data, build_file_path, data,
+ aux_data, variables, None, check)
+ except Exception, e:
+ gyp.common.ExceptionAppend(e,
+ 'while reading includes of ' + build_file_path)
+ raise
return build_file_data
@@ -269,7 +270,7 @@ def LoadBuildFileIncludesIntoDict(subdict, subdict_path, data, aux_data,
aux_data[subdict_path]['included'] = []
aux_data[subdict_path]['included'].append(include)
- gyp.DebugOutput(gyp.DEBUG_INCLUDES, "Loading Included File: '%s'" % include)
+ gyp.DebugOutput(gyp.DEBUG_INCLUDES, "Loading Included File: '%s'", include)
MergeDicts(subdict,
LoadOneBuildFile(include, data, aux_data, variables, None,
@@ -349,17 +350,13 @@ def LoadTargetBuildFile(build_file_path, data, aux_data, variables, includes,
else:
variables['DEPTH'] = d.replace('\\', '/')
- # If the generator needs absolue paths, then do so.
- if absolute_build_file_paths:
- build_file_path = os.path.abspath(build_file_path)
-
if build_file_path in data['target_build_files']:
# Already loaded.
return False
data['target_build_files'].add(build_file_path)
gyp.DebugOutput(gyp.DEBUG_INCLUDES,
- "Loading Target Build File '%s'" % build_file_path)
+ "Loading Target Build File '%s'", build_file_path)
build_file_data = LoadOneBuildFile(build_file_path, data, aux_data, variables,
includes, True, check)
@@ -450,7 +447,8 @@ def LoadTargetBuildFile(build_file_path, data, aux_data, variables, includes,
def CallLoadTargetBuildFile(global_flags,
build_file_path, data,
aux_data, variables,
- includes, depth, check):
+ includes, depth, check,
+ generator_input_info):
"""Wrapper around LoadTargetBuildFile for parallel processing.
This wrapper is used when LoadTargetBuildFile is executed in
@@ -468,6 +466,7 @@ def CallLoadTargetBuildFile(global_flags,
data_keys = set(data)
aux_data_keys = set(aux_data)
+ SetGeneratorGlobals(generator_input_info)
result = LoadTargetBuildFile(build_file_path, data,
aux_data, variables,
includes, depth, check, False)
@@ -493,8 +492,12 @@ def CallLoadTargetBuildFile(global_flags,
data_out,
aux_data_out,
dependencies)
+ except GypError, e:
+ sys.stderr.write("gyp: %s\n" % e)
+ return None
except Exception, e:
- print "Exception: ", e
+ print >>sys.stderr, 'Exception:', e
+ print >>sys.stderr, traceback.format_exc()
return None
@@ -555,12 +558,14 @@ class ParallelState(object):
self.condition.release()
-def LoadTargetBuildFileParallel(build_file_path, data, aux_data,
- variables, includes, depth, check):
+def LoadTargetBuildFilesParallel(build_files, data, aux_data,
+ variables, includes, depth, check,
+ generator_input_info):
parallel_state = ParallelState()
parallel_state.condition = threading.Condition()
- parallel_state.dependencies = [build_file_path]
- parallel_state.scheduled = set([build_file_path])
+ # Make copies of the build_files argument that we can modify while working.
+ parallel_state.dependencies = list(build_files)
+ parallel_state.scheduled = set(build_files)
parallel_state.pending = 0
parallel_state.data = data
parallel_state.aux_data = aux_data
@@ -583,7 +588,6 @@ def LoadTargetBuildFileParallel(build_file_path, data, aux_data,
global_flags = {
'path_sections': globals()['path_sections'],
'non_configuration_keys': globals()['non_configuration_keys'],
- 'absolute_build_file_paths': globals()['absolute_build_file_paths'],
'multiple_toolsets': globals()['multiple_toolsets']}
if not parallel_state.pool:
@@ -592,48 +596,47 @@ def LoadTargetBuildFileParallel(build_file_path, data, aux_data,
CallLoadTargetBuildFile,
args = (global_flags, dependency,
data_in, aux_data_in,
- variables, includes, depth, check),
+ variables, includes, depth, check, generator_input_info),
callback = parallel_state.LoadTargetBuildFileCallback)
except KeyboardInterrupt, e:
parallel_state.pool.terminate()
raise e
parallel_state.condition.release()
- if parallel_state.error:
- sys.exit()
+ parallel_state.pool.close()
+ parallel_state.pool.join()
+ parallel_state.pool = None
+
+ if parallel_state.error:
+ sys.exit(1)
# Look for the bracket that matches the first bracket seen in a
# string, and return the start and end as a tuple. For example, if
# the input is something like "<(foo <(bar)) blah", then it would
# return (1, 13), indicating the entire string except for the leading
# "<" and trailing " blah".
-def FindEnclosingBracketGroup(input):
- brackets = { '}': '{',
- ']': '[',
- ')': '(', }
+LBRACKETS= set('{[(')
+BRACKETS = {'}': '{', ']': '[', ')': '('}
+def FindEnclosingBracketGroup(input_str):
stack = []
- count = 0
start = -1
- for char in input:
- if char in brackets.values():
+ for index, char in enumerate(input_str):
+ if char in LBRACKETS:
stack.append(char)
if start == -1:
- start = count
- if char in brackets.keys():
- try:
- last_bracket = stack.pop()
- except IndexError:
+ start = index
+ elif char in BRACKETS:
+ if not stack:
return (-1, -1)
- if last_bracket != brackets[char]:
+ if stack.pop() != BRACKETS[char]:
return (-1, -1)
- if len(stack) == 0:
- return (start, count + 1)
- count = count + 1
+ if not stack:
+ return (start, index + 1)
return (-1, -1)
-canonical_int_re = re.compile('^(0|-?[1-9][0-9]*)$')
+canonical_int_re = re.compile('(0|-?[1-9][0-9]*)$')
def IsStrCanonicalInt(string):
@@ -641,10 +644,7 @@ def IsStrCanonicalInt(string):
The canonical form is such that str(int(string)) == string.
"""
- if not isinstance(string, str) or not canonical_int_re.match(string):
- return False
-
- return True
+ return isinstance(string, str) and canonical_int_re.match(string)
# This matches things like "<(asdf)", "<!(cmd)", "<!@(cmd)", "<|(list)",
@@ -713,7 +713,7 @@ def ExpandVariables(input, phase, variables, build_file):
# Get the entire list of matches as a list of MatchObject instances.
# (using findall here would return strings instead of MatchObjects).
- matches = [match for match in variable_re.finditer(input_str)]
+ matches = list(variable_re.finditer(input_str))
if not matches:
return input_str
@@ -725,8 +725,7 @@ def ExpandVariables(input, phase, variables, build_file):
matches.reverse()
for match_group in matches:
match = match_group.groupdict()
- gyp.DebugOutput(gyp.DEBUG_VARIABLES,
- "Matches: %s" % repr(match))
+ gyp.DebugOutput(gyp.DEBUG_VARIABLES, "Matches: %r", match)
# match['replace'] is the substring to look for, match['type']
# is the character code for the replacement type (< > <! >! <| >| <@
# >@ <!@ >!@), match['is_array'] contains a '[' for command
@@ -793,7 +792,7 @@ def ExpandVariables(input, phase, variables, build_file):
# Find the build file's directory, so commands can be run or file lists
# generated relative to it.
build_file_dir = os.path.dirname(build_file)
- if build_file_dir == '':
+ if build_file_dir == '' and not file_list:
# If build_file is just a leaf filename indicating a file in the
# current directory, build_file_dir might be an empty string. Set
# it to None to signal to subprocess.Popen that it should run the
@@ -810,9 +809,22 @@ def ExpandVariables(input, phase, variables, build_file):
else:
contents_list = contents.split(' ')
replacement = contents_list[0]
- path = replacement
- if not os.path.isabs(path):
- path = os.path.join(build_file_dir, path)
+ if os.path.isabs(replacement):
+ raise GypError('| cannot handle absolute paths, got "%s"' % replacement)
+
+ if not generator_filelist_paths:
+ path = os.path.join(build_file_dir, replacement)
+ else:
+ if os.path.isabs(build_file_dir):
+ toplevel = generator_filelist_paths['toplevel']
+ rel_build_file_dir = gyp.common.RelativePath(build_file_dir, toplevel)
+ else:
+ rel_build_file_dir = build_file_dir
+ qualified_out_dir = generator_filelist_paths['qualified_out_dir']
+ path = os.path.join(qualified_out_dir, rel_build_file_dir, replacement)
+ gyp.common.EnsureDirExists(path)
+
+ replacement = gyp.common.RelativePath(path, build_file_dir)
f = gyp.common.WriteOnDiff(path)
for i in contents_list[1:]:
f.write('%s\n' % i)
@@ -839,8 +851,8 @@ def ExpandVariables(input, phase, variables, build_file):
cached_value = cached_command_results.get(cache_key, None)
if cached_value is None:
gyp.DebugOutput(gyp.DEBUG_VARIABLES,
- "Executing command '%s' in directory '%s'" %
- (contents,build_file_dir))
+ "Executing command '%s' in directory '%s'",
+ contents, build_file_dir)
replacement = ''
@@ -851,13 +863,19 @@ def ExpandVariables(input, phase, variables, build_file):
# that don't load quickly, this can be faster than
# <!(python modulename param eters). Do this in |build_file_dir|.
oldwd = os.getcwd() # Python doesn't like os.open('.'): no fchdir.
- os.chdir(build_file_dir)
-
- parsed_contents = shlex.split(contents)
- py_module = __import__(parsed_contents[0])
- replacement = str(py_module.DoMain(parsed_contents[1:])).rstrip()
-
- os.chdir(oldwd)
+ if build_file_dir: # build_file_dir may be None (see above).
+ os.chdir(build_file_dir)
+ try:
+
+ parsed_contents = shlex.split(contents)
+ try:
+ py_module = __import__(parsed_contents[0])
+ except ImportError as e:
+ raise GypError("Error importing pymod_do_main"
+ "module (%s): %s" % (parsed_contents[0], e))
+ replacement = str(py_module.DoMain(parsed_contents[1:])).rstrip()
+ finally:
+ os.chdir(oldwd)
assert replacement != None
elif command_string:
raise GypError("Unknown command string '%s' in '%s'." %
@@ -884,8 +902,8 @@ def ExpandVariables(input, phase, variables, build_file):
cached_command_results[cache_key] = replacement
else:
gyp.DebugOutput(gyp.DEBUG_VARIABLES,
- "Had cache value for command '%s' in directory '%s'" %
- (contents,build_file_dir))
+ "Had cache value for command '%s' in directory '%s'",
+ contents,build_file_dir)
replacement = cached_value
else:
@@ -960,8 +978,7 @@ def ExpandVariables(input, phase, variables, build_file):
# Look for more matches now that we've replaced some, to deal with
# expanding local variables (variables defined in the same
# variables block as this one).
- gyp.DebugOutput(gyp.DEBUG_VARIABLES,
- "Found output %s, recursing." % repr(output))
+ gyp.DebugOutput(gyp.DEBUG_VARIABLES, "Found output %r, recursing.", output)
if isinstance(output, list):
if output and isinstance(output[0], list):
# Leave output alone if it's a list of lists.
@@ -1062,7 +1079,7 @@ def ProcessConditionsInDict(the_dict, phase, variables, build_file):
except NameError, e:
gyp.common.ExceptionAppend(e, 'while evaluating condition \'%s\' in %s' %
(cond_expr_expanded, build_file))
- raise
+ raise GypError(e)
if merge_dict != None:
# Expand variables and nested conditinals in the merge_dict before
@@ -1407,6 +1424,25 @@ def RemoveDuplicateDependencies(targets):
target_dict[dependency_key] = Unify(dependencies)
+def Filter(l, item):
+ """Removes item from l."""
+ res = {}
+ return [res.setdefault(e, e) for e in l if e != item]
+
+
+def RemoveSelfDependencies(targets):
+ """Remove self dependencies from targets that have the prune_self_dependency
+ variable set."""
+ for target_name, target_dict in targets.iteritems():
+ for dependency_key in dependency_sections:
+ dependencies = target_dict.get(dependency_key, [])
+ if dependencies:
+ for t in dependencies:
+ if t == target_name:
+ if targets[t].get('variables', {}).get('prune_self_dependency', 0):
+ target_dict[dependency_key] = Filter(dependencies, target_name)
+
+
class DependencyGraphNode(object):
"""
@@ -1424,6 +1460,9 @@ class DependencyGraphNode(object):
self.dependencies = []
self.dependents = []
+ def __repr__(self):
+ return '<DependencyGraphNode: %r>' % self.ref
+
def FlattenToList(self):
# flat_list is the sorted list of dependencies - actually, the list items
# are the "ref" attributes of DependencyGraphNodes. Every target will
@@ -1466,6 +1505,27 @@ class DependencyGraphNode(object):
return flat_list
+ def FindCycles(self, path=None):
+ """
+ Returns a list of cycles in the graph, where each cycle is its own list.
+ """
+ if path is None:
+ path = [self]
+
+ results = []
+ for node in self.dependents:
+ if node in path:
+ cycle = [node]
+ for part in path:
+ cycle.append(part)
+ if part == node:
+ break
+ results.append(tuple(cycle))
+ else:
+ results.extend(node.FindCycles([node] + path))
+
+ return list(set(results))
+
def DirectDependencies(self, dependencies=None):
"""Returns a list of just direct dependencies."""
if dependencies == None:
@@ -1541,7 +1601,8 @@ class DependencyGraphNode(object):
return dependencies
- def LinkDependencies(self, targets, dependencies=None, initial=True):
+ def _LinkDependenciesInternal(self, targets, include_shared_libraries,
+ dependencies=None, initial=True):
"""Returns a list of dependency targets that are linked into this target.
This function has a split personality, depending on the setting of
@@ -1551,6 +1612,9 @@ class DependencyGraphNode(object):
When adding a target to the list of dependencies, this function will
recurse into itself with |initial| set to False, to collect dependencies
that are linked into the linkable target for which the list is being built.
+
+ If |include_shared_libraries| is False, the resulting dependencies will not
+ include shared_library targets that are linked into this target.
"""
if dependencies == None:
dependencies = []
@@ -1595,6 +1659,16 @@ class DependencyGraphNode(object):
if not initial and target_type in ('executable', 'loadable_module'):
return dependencies
+ # Shared libraries are already fully linked. They should only be included
+ # in |dependencies| when adjusting static library dependencies (in order to
+ # link against the shared_library's import lib), but should not be included
+ # in |dependencies| when propagating link_settings.
+ # The |include_shared_libraries| flag controls which of these two cases we
+ # are handling.
+ if (not initial and target_type == 'shared_library' and
+ not include_shared_libraries):
+ return dependencies
+
# The target is linkable, add it to the list of link dependencies.
if self.ref not in dependencies:
dependencies.append(self.ref)
@@ -1604,10 +1678,32 @@ class DependencyGraphNode(object):
# this target linkable. Always look at dependencies of the initial
# target, and always look at dependencies of non-linkables.
for dependency in self.dependencies:
- dependency.LinkDependencies(targets, dependencies, False)
+ dependency._LinkDependenciesInternal(targets,
+ include_shared_libraries,
+ dependencies, False)
return dependencies
+ def DependenciesForLinkSettings(self, targets):
+ """
+ Returns a list of dependency targets whose link_settings should be merged
+ into this target.
+ """
+
+ # TODO(sbaig) Currently, chrome depends on the bug that shared libraries'
+ # link_settings are propagated. So for now, we will allow it, unless the
+ # 'allow_sharedlib_linksettings_propagation' flag is explicitly set to
+ # False. Once chrome is fixed, we can remove this flag.
+ include_shared_libraries = \
+ targets[self.ref].get('allow_sharedlib_linksettings_propagation', True)
+ return self._LinkDependenciesInternal(targets, include_shared_libraries)
+
+ def DependenciesToLinkAgainst(self, targets):
+ """
+ Returns a list of dependency targets that are linked into this target.
+ """
+ return self._LinkDependenciesInternal(targets, True)
+
def BuildDependencyList(targets):
# Create a DependencyGraphNode for each target. Put it into a dict for easy
@@ -1698,10 +1794,16 @@ def VerifyNoGYPFileCircularDependencies(targets):
for file in dependency_nodes.iterkeys():
if not file in flat_list:
bad_files.append(file)
+ common_path_prefix = os.path.commonprefix(dependency_nodes)
+ cycles = []
+ for cycle in root_node.FindCycles():
+ simplified_paths = []
+ for node in cycle:
+ assert(node.ref.startswith(common_path_prefix))
+ simplified_paths.append(node.ref[len(common_path_prefix):])
+ cycles.append('Cycle: %s' % ' -> '.join(simplified_paths))
raise DependencyGraphNode.CircularException, \
- 'Some files not reachable, cycle in .gyp file dependency graph ' + \
- 'detected involving some or all of: ' + \
- ' '.join(bad_files)
+ 'Cycles in .gyp file dependency graph detected:\n' + '\n'.join(cycles)
def DoDependentSettings(key, flat_list, targets, dependency_nodes):
@@ -1718,7 +1820,8 @@ def DoDependentSettings(key, flat_list, targets, dependency_nodes):
dependencies = \
dependency_nodes[target].DirectAndImportedDependencies(targets)
elif key == 'link_settings':
- dependencies = dependency_nodes[target].LinkDependencies(targets)
+ dependencies = \
+ dependency_nodes[target].DependenciesForLinkSettings(targets)
else:
raise GypError("DoDependentSettings doesn't know how to determine "
'dependencies for ' + key)
@@ -1791,7 +1894,8 @@ def AdjustStaticLibraryDependencies(flat_list, targets, dependency_nodes,
# target. Add them to the dependencies list if they're not already
# present.
- link_dependencies = dependency_nodes[target].LinkDependencies(targets)
+ link_dependencies = \
+ dependency_nodes[target].DependenciesToLinkAgainst(targets)
for dependency in link_dependencies:
if dependency == target:
continue
@@ -1845,12 +1949,10 @@ def MakePathRelative(to_file, fro_file, item):
return ret
def MergeLists(to, fro, to_file, fro_file, is_paths=False, append=True):
- def is_hashable(x):
- try:
- hash(x)
- except TypeError:
- return False
- return True
+ # Python documentation recommends objects which do not support hash
+ # set this value to None. Python library objects follow this rule.
+ is_hashable = lambda val: val.__hash__
+
# If x is hashable, returns whether x is in s. Else returns whether x is in l.
def is_in_set_or_list(x, s, l):
if is_hashable(x):
@@ -1861,8 +1963,7 @@ def MergeLists(to, fro, to_file, fro_file, is_paths=False, append=True):
# Make membership testing of hashables in |to| (in particular, strings)
# faster.
- hashable_to_set = set([x for x in to if is_hashable(x)])
-
+ hashable_to_set = set(x for x in to if is_hashable(x))
for item in fro:
singleton = False
if isinstance(item, str) or isinstance(item, int):
@@ -2056,7 +2157,7 @@ def SetUpConfigurations(target, target_dict):
if not 'configurations' in target_dict:
target_dict['configurations'] = {'Default': {}}
if not 'default_configuration' in target_dict:
- concrete = [i for i in target_dict['configurations'].keys()
+ concrete = [i for i in target_dict['configurations'].iterkeys()
if not target_dict['configurations'][i].get('abstract')]
target_dict['default_configuration'] = sorted(concrete)[0]
@@ -2176,6 +2277,7 @@ def ProcessListFiltersInDict(name, the_dict):
continue
if not isinstance(the_dict[list_key], list):
+ value = the_dict[list_key]
raise ValueError, name + ' key ' + list_key + \
' must be list, not ' + \
value.__class__.__name__ + ' when applying ' + \
@@ -2315,8 +2417,8 @@ def ValidateTargetType(target, target_dict):
def ValidateSourcesInTarget(target, target_dict, build_file):
- # TODO: Check if MSVC allows this for non-static_library targets.
- if target_dict.get('type', None) != 'static_library':
+ # TODO: Check if MSVC allows this for loadable_module targets.
+ if target_dict.get('type', None) not in ('static_library', 'shared_library'):
return
sources = target_dict.get('sources', [])
basenames = {}
@@ -2367,6 +2469,8 @@ def ValidateRulesInTarget(target, target_dict, extra_sources_for_rules):
rule_names[rule_name] = rule
rule_extension = rule['extension']
+ if rule_extension.startswith('.'):
+ rule_extension = rule_extension[1:]
if rule_extension in rule_extensions:
raise GypError(('extension %s associated with multiple rules, ' +
'target %s rules %s and %s') %
@@ -2381,7 +2485,6 @@ def ValidateRulesInTarget(target, target_dict, extra_sources_for_rules):
raise GypError(
'rule_sources must not exist in input, target %s rule %s' %
(target, rule_name))
- extension = rule['extension']
rule_sources = []
source_keys = ['sources']
@@ -2391,7 +2494,7 @@ def ValidateRulesInTarget(target, target_dict, extra_sources_for_rules):
(source_root, source_extension) = os.path.splitext(source)
if source_extension.startswith('.'):
source_extension = source_extension[1:]
- if source_extension == extension:
+ if source_extension == rule_extension:
rule_sources.append(source)
if len(rule_sources) > 0:
@@ -2478,6 +2581,41 @@ def TurnIntIntoStrInList(the_list):
TurnIntIntoStrInList(item)
+def PruneUnwantedTargets(targets, flat_list, dependency_nodes, root_targets,
+ data):
+ """Return only the targets that are deep dependencies of |root_targets|."""
+ qualified_root_targets = []
+ for target in root_targets:
+ target = target.strip()
+ qualified_targets = gyp.common.FindQualifiedTargets(target, flat_list)
+ if not qualified_targets:
+ raise GypError("Could not find target %s" % target)
+ qualified_root_targets.extend(qualified_targets)
+
+ wanted_targets = {}
+ for target in qualified_root_targets:
+ wanted_targets[target] = targets[target]
+ for dependency in dependency_nodes[target].DeepDependencies():
+ wanted_targets[dependency] = targets[dependency]
+
+ wanted_flat_list = [t for t in flat_list if t in wanted_targets]
+
+ # Prune unwanted targets from each build_file's data dict.
+ for build_file in data['target_build_files']:
+ if not 'targets' in data[build_file]:
+ continue
+ new_targets = []
+ for target in data[build_file]['targets']:
+ qualified_name = gyp.common.QualifiedTarget(build_file,
+ target['target_name'],
+ target['toolset'])
+ if qualified_name in wanted_targets:
+ new_targets.append(target)
+ data[build_file]['targets'] = new_targets
+
+ return wanted_targets, wanted_flat_list
+
+
def VerifyNoCollidingTargets(targets):
"""Verify that no two targets in the same directory share the same name.
@@ -2505,10 +2643,9 @@ def VerifyNoCollidingTargets(targets):
used[key] = gyp
-def Load(build_files, variables, includes, depth, generator_input_info, check,
- circular_check, parallel):
+def SetGeneratorGlobals(generator_input_info):
# Set up path_sections and non_configuration_keys with the default data plus
- # the generator-specifc data.
+ # the generator-specific data.
global path_sections
path_sections = base_path_sections[:]
path_sections.extend(generator_input_info['path_sections'])
@@ -2517,18 +2654,17 @@ def Load(build_files, variables, includes, depth, generator_input_info, check,
non_configuration_keys = base_non_configuration_keys[:]
non_configuration_keys.extend(generator_input_info['non_configuration_keys'])
- # TODO(mark) handle variants if the generator doesn't want them directly.
- generator_handles_variants = \
- generator_input_info['generator_handles_variants']
-
- global absolute_build_file_paths
- absolute_build_file_paths = \
- generator_input_info['generator_wants_absolute_build_file_paths']
-
global multiple_toolsets
multiple_toolsets = generator_input_info[
'generator_supports_multiple_toolsets']
+ global generator_filelist_paths
+ generator_filelist_paths = generator_input_info['generator_filelist_paths']
+
+
+def Load(build_files, variables, includes, depth, generator_input_info, check,
+ circular_check, parallel, root_targets):
+ SetGeneratorGlobals(generator_input_info)
# A generator can have other lists (in addition to sources) be processed
# for rules.
extra_sources_for_rules = generator_input_info['extra_sources_for_rules']
@@ -2542,21 +2678,21 @@ def Load(build_files, variables, includes, depth, generator_input_info, check,
# track of the keys corresponding to "target" files.
data = {'target_build_files': set()}
aux_data = {}
- for build_file in build_files:
- # Normalize paths everywhere. This is important because paths will be
- # used as keys to the data dict and for references between input files.
- build_file = os.path.normpath(build_file)
- try:
- if parallel:
- print >>sys.stderr, 'Using parallel processing (experimental).'
- LoadTargetBuildFileParallel(build_file, data, aux_data,
- variables, includes, depth, check)
- else:
+ # Normalize paths everywhere. This is important because paths will be
+ # used as keys to the data dict and for references between input files.
+ build_files = set(map(os.path.normpath, build_files))
+ if parallel:
+ LoadTargetBuildFilesParallel(build_files, data, aux_data,
+ variables, includes, depth, check,
+ generator_input_info)
+ else:
+ for build_file in build_files:
+ try:
LoadTargetBuildFile(build_file, data, aux_data,
variables, includes, depth, check, True)
- except Exception, e:
- gyp.common.ExceptionAppend(e, 'while trying to load %s' % build_file)
- raise
+ except Exception, e:
+ gyp.common.ExceptionAppend(e, 'while trying to load %s' % build_file)
+ raise
# Build a dict to access each target's subdict by qualified name.
targets = BuildTargetsDict(data)
@@ -2564,6 +2700,10 @@ def Load(build_files, variables, includes, depth, generator_input_info, check,
# Fully qualify all dependency links.
QualifyDependencies(targets)
+ # Remove self-dependencies from targets that have 'prune_self_dependencies'
+ # set to 1.
+ RemoveSelfDependencies(targets)
+
# Expand dependencies specified as build_file:*.
ExpandWildcardDependencies(targets, data)
@@ -2591,6 +2731,12 @@ def Load(build_files, variables, includes, depth, generator_input_info, check,
[dependency_nodes, flat_list] = BuildDependencyList(targets)
+ if root_targets:
+ # Remove, from |targets| and |flat_list|, the targets that are not deep
+ # dependencies of the targets specified in |root_targets|.
+ targets, flat_list = PruneUnwantedTargets(
+ targets, flat_list, dependency_nodes, root_targets, data)
+
# Check that no two targets in the same directory have the same name.
VerifyNoCollidingTargets(flat_list)
diff --git a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/input_test.py b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/input_test.py
new file mode 100755
index 000000000..cdbf6b2fa
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/input_test.py
@@ -0,0 +1,90 @@
+#!/usr/bin/env python
+
+# Copyright 2013 Google Inc. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+"""Unit tests for the input.py file."""
+
+import gyp.input
+import unittest
+import sys
+
+
+class TestFindCycles(unittest.TestCase):
+ def setUp(self):
+ self.nodes = {}
+ for x in ('a', 'b', 'c', 'd', 'e'):
+ self.nodes[x] = gyp.input.DependencyGraphNode(x)
+
+ def _create_dependency(self, dependent, dependency):
+ dependent.dependencies.append(dependency)
+ dependency.dependents.append(dependent)
+
+ def test_no_cycle_empty_graph(self):
+ for label, node in self.nodes.iteritems():
+ self.assertEquals([], node.FindCycles())
+
+ def test_no_cycle_line(self):
+ self._create_dependency(self.nodes['a'], self.nodes['b'])
+ self._create_dependency(self.nodes['b'], self.nodes['c'])
+ self._create_dependency(self.nodes['c'], self.nodes['d'])
+
+ for label, node in self.nodes.iteritems():
+ self.assertEquals([], node.FindCycles())
+
+ def test_no_cycle_dag(self):
+ self._create_dependency(self.nodes['a'], self.nodes['b'])
+ self._create_dependency(self.nodes['a'], self.nodes['c'])
+ self._create_dependency(self.nodes['b'], self.nodes['c'])
+
+ for label, node in self.nodes.iteritems():
+ self.assertEquals([], node.FindCycles())
+
+ def test_cycle_self_reference(self):
+ self._create_dependency(self.nodes['a'], self.nodes['a'])
+
+ self.assertEquals([(self.nodes['a'], self.nodes['a'])],
+ self.nodes['a'].FindCycles())
+
+ def test_cycle_two_nodes(self):
+ self._create_dependency(self.nodes['a'], self.nodes['b'])
+ self._create_dependency(self.nodes['b'], self.nodes['a'])
+
+ self.assertEquals([(self.nodes['a'], self.nodes['b'], self.nodes['a'])],
+ self.nodes['a'].FindCycles())
+ self.assertEquals([(self.nodes['b'], self.nodes['a'], self.nodes['b'])],
+ self.nodes['b'].FindCycles())
+
+ def test_two_cycles(self):
+ self._create_dependency(self.nodes['a'], self.nodes['b'])
+ self._create_dependency(self.nodes['b'], self.nodes['a'])
+
+ self._create_dependency(self.nodes['b'], self.nodes['c'])
+ self._create_dependency(self.nodes['c'], self.nodes['b'])
+
+ cycles = self.nodes['a'].FindCycles()
+ self.assertTrue(
+ (self.nodes['a'], self.nodes['b'], self.nodes['a']) in cycles)
+ self.assertTrue(
+ (self.nodes['b'], self.nodes['c'], self.nodes['b']) in cycles)
+ self.assertEquals(2, len(cycles))
+
+ def test_big_cycle(self):
+ self._create_dependency(self.nodes['a'], self.nodes['b'])
+ self._create_dependency(self.nodes['b'], self.nodes['c'])
+ self._create_dependency(self.nodes['c'], self.nodes['d'])
+ self._create_dependency(self.nodes['d'], self.nodes['e'])
+ self._create_dependency(self.nodes['e'], self.nodes['a'])
+
+ self.assertEquals([(self.nodes['a'],
+ self.nodes['b'],
+ self.nodes['c'],
+ self.nodes['d'],
+ self.nodes['e'],
+ self.nodes['a'])],
+ self.nodes['a'].FindCycles())
+
+
+if __name__ == '__main__':
+ unittest.main()
diff --git a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/mac_tool.py b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/mac_tool.py
index 69267694d..ac19b6dc8 100755
--- a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/mac_tool.py
+++ b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/mac_tool.py
@@ -9,6 +9,9 @@ These functions are executed via gyp-mac-tool when using the Makefile generator.
"""
import fcntl
+import fnmatch
+import glob
+import json
import os
import plistlib
import re
@@ -16,6 +19,7 @@ import shutil
import string
import subprocess
import sys
+import tempfile
def main(args):
@@ -47,22 +51,33 @@ class MacTool(object):
extension = os.path.splitext(source)[1].lower()
if os.path.isdir(source):
# Copy tree.
+ # TODO(thakis): This copies file attributes like mtime, while the
+ # single-file branch below doesn't. This should probably be changed to
+ # be consistent with the single-file branch.
if os.path.exists(dest):
shutil.rmtree(dest)
shutil.copytree(source, dest)
elif extension == '.xib':
return self._CopyXIBFile(source, dest)
+ elif extension == '.storyboard':
+ return self._CopyXIBFile(source, dest)
elif extension == '.strings':
self._CopyStringsFile(source, dest)
else:
- shutil.copyfile(source, dest)
+ shutil.copy(source, dest)
def _CopyXIBFile(self, source, dest):
"""Compiles a XIB file with ibtool into a binary plist in the bundle."""
- tools_dir = os.environ.get('DEVELOPER_BIN_DIR', '/usr/bin')
- args = [os.path.join(tools_dir, 'ibtool'), '--errors', '--warnings',
- '--notices', '--output-format', 'human-readable-text', '--compile',
- dest, source]
+
+ # ibtool sometimes crashes with relative paths. See crbug.com/314728.
+ base = os.path.dirname(os.path.realpath(__file__))
+ if os.path.relpath(source):
+ source = os.path.join(base, source)
+ if os.path.relpath(dest):
+ dest = os.path.join(base, dest)
+
+ args = ['xcrun', 'ibtool', '--errors', '--warnings', '--notices',
+ '--output-format', 'human-readable-text', '--compile', dest, source]
ibtool_section_re = re.compile(r'/\*.*\*/')
ibtool_re = re.compile(r'.*note:.*is clipping its content')
ibtoolout = subprocess.Popen(args, stdout=subprocess.PIPE)
@@ -80,10 +95,21 @@ class MacTool(object):
def _CopyStringsFile(self, source, dest):
"""Copies a .strings file using iconv to reconvert the input into UTF-16."""
input_code = self._DetectInputEncoding(source) or "UTF-8"
- fp = open(dest, 'w')
- args = ['/usr/bin/iconv', '--from-code', input_code, '--to-code',
- 'UTF-16', source]
- subprocess.call(args, stdout=fp)
+
+ # Xcode's CpyCopyStringsFile / builtin-copyStrings seems to call
+ # CFPropertyListCreateFromXMLData() behind the scenes; at least it prints
+ # CFPropertyListCreateFromXMLData(): Old-style plist parser: missing
+ # semicolon in dictionary.
+ # on invalid files. Do the same kind of validation.
+ import CoreFoundation
+ s = open(source, 'rb').read()
+ d = CoreFoundation.CFDataCreate(None, s, len(s))
+ _, error = CoreFoundation.CFPropertyListCreateFromXMLData(None, d, 0, None)
+ if error:
+ return
+
+ fp = open(dest, 'wb')
+ fp.write(s.decode(input_code).encode('UTF-16'))
fp.close()
def _DetectInputEncoding(self, file_name):
@@ -97,28 +123,58 @@ class MacTool(object):
return None
fp.close()
if header.startswith("\xFE\xFF"):
- return "UTF-16BE"
+ return "UTF-16"
elif header.startswith("\xFF\xFE"):
- return "UTF-16LE"
+ return "UTF-16"
elif header.startswith("\xEF\xBB\xBF"):
return "UTF-8"
else:
return None
- def ExecCopyInfoPlist(self, source, dest):
+ def ExecCopyInfoPlist(self, source, dest, *keys):
"""Copies the |source| Info.plist to the destination directory |dest|."""
# Read the source Info.plist into memory.
fd = open(source, 'r')
lines = fd.read()
fd.close()
+ # Insert synthesized key/value pairs (e.g. BuildMachineOSBuild).
+ plist = plistlib.readPlistFromString(lines)
+ if keys:
+ plist = dict(plist.items() + json.loads(keys[0]).items())
+ lines = plistlib.writePlistToString(plist)
+
# Go through all the environment variables and replace them as variables in
# the file.
+ IDENT_RE = re.compile('[/\s]')
for key in os.environ:
if key.startswith('_'):
continue
evar = '${%s}' % key
- lines = string.replace(lines, evar, os.environ[key])
+ evalue = os.environ[key]
+ lines = string.replace(lines, evar, evalue)
+
+ # Xcode supports various suffices on environment variables, which are
+ # all undocumented. :rfc1034identifier is used in the standard project
+ # template these days, and :identifier was used earlier. They are used to
+ # convert non-url characters into things that look like valid urls --
+ # except that the replacement character for :identifier, '_' isn't valid
+ # in a URL either -- oops, hence :rfc1034identifier was born.
+ evar = '${%s:identifier}' % key
+ evalue = IDENT_RE.sub('_', os.environ[key])
+ lines = string.replace(lines, evar, evalue)
+
+ evar = '${%s:rfc1034identifier}' % key
+ evalue = IDENT_RE.sub('-', os.environ[key])
+ lines = string.replace(lines, evar, evalue)
+
+ # Remove any keys with values that haven't been replaced.
+ lines = lines.split('\n')
+ for i in range(len(lines)):
+ if lines[i].strip().startswith("<string>${"):
+ lines[i] = None
+ lines[i - 1] = None
+ lines = '\n'.join(filter(lambda x: x is not None, lines))
# Write out the file with variables replaced.
fd = open(dest, 'w')
@@ -160,8 +216,9 @@ class MacTool(object):
return subprocess.call(cmd_list)
def ExecFilterLibtool(self, *cmd_list):
- """Calls libtool and filters out 'libtool: file: foo.o has no symbols'."""
- libtool_re = re.compile(r'^libtool: file: .* has no symbols$')
+ """Calls libtool and filters out '/path/to/libtool: file: foo.o has no
+ symbols'."""
+ libtool_re = re.compile(r'^.*libtool: file: .* has no symbols$')
libtoolout = subprocess.Popen(cmd_list, stderr=subprocess.PIPE)
_, err = libtoolout.communicate()
for line in err.splitlines():
@@ -205,6 +262,250 @@ class MacTool(object):
os.remove(link)
os.symlink(dest, link)
+ def ExecCodeSignBundle(self, key, resource_rules, entitlements, provisioning):
+ """Code sign a bundle.
+
+ This function tries to code sign an iOS bundle, following the same
+ algorithm as Xcode:
+ 1. copy ResourceRules.plist from the user or the SDK into the bundle,
+ 2. pick the provisioning profile that best match the bundle identifier,
+ and copy it into the bundle as embedded.mobileprovision,
+ 3. copy Entitlements.plist from user or SDK next to the bundle,
+ 4. code sign the bundle.
+ """
+ resource_rules_path = self._InstallResourceRules(resource_rules)
+ substitutions, overrides = self._InstallProvisioningProfile(
+ provisioning, self._GetCFBundleIdentifier())
+ entitlements_path = self._InstallEntitlements(
+ entitlements, substitutions, overrides)
+ subprocess.check_call([
+ 'codesign', '--force', '--sign', key, '--resource-rules',
+ resource_rules_path, '--entitlements', entitlements_path,
+ os.path.join(
+ os.environ['TARGET_BUILD_DIR'],
+ os.environ['FULL_PRODUCT_NAME'])])
+
+ def _InstallResourceRules(self, resource_rules):
+ """Installs ResourceRules.plist from user or SDK into the bundle.
+
+ Args:
+ resource_rules: string, optional, path to the ResourceRules.plist file
+ to use, default to "${SDKROOT}/ResourceRules.plist"
+
+ Returns:
+ Path to the copy of ResourceRules.plist into the bundle.
+ """
+ source_path = resource_rules
+ target_path = os.path.join(
+ os.environ['BUILT_PRODUCTS_DIR'],
+ os.environ['CONTENTS_FOLDER_PATH'],
+ 'ResourceRules.plist')
+ if not source_path:
+ source_path = os.path.join(
+ os.environ['SDKROOT'], 'ResourceRules.plist')
+ shutil.copy2(source_path, target_path)
+ return target_path
+
+ def _InstallProvisioningProfile(self, profile, bundle_identifier):
+ """Installs embedded.mobileprovision into the bundle.
+
+ Args:
+ profile: string, optional, short name of the .mobileprovision file
+ to use, if empty or the file is missing, the best file installed
+ will be used
+ bundle_identifier: string, value of CFBundleIdentifier from Info.plist
+
+ Returns:
+ A tuple containing two dictionary: variables substitutions and values
+ to overrides when generating the entitlements file.
+ """
+ source_path, provisioning_data, team_id = self._FindProvisioningProfile(
+ profile, bundle_identifier)
+ target_path = os.path.join(
+ os.environ['BUILT_PRODUCTS_DIR'],
+ os.environ['CONTENTS_FOLDER_PATH'],
+ 'embedded.mobileprovision')
+ shutil.copy2(source_path, target_path)
+ substitutions = self._GetSubstitutions(bundle_identifier, team_id + '.')
+ return substitutions, provisioning_data['Entitlements']
+
+ def _FindProvisioningProfile(self, profile, bundle_identifier):
+ """Finds the .mobileprovision file to use for signing the bundle.
+
+ Checks all the installed provisioning profiles (or if the user specified
+ the PROVISIONING_PROFILE variable, only consult it) and select the most
+ specific that correspond to the bundle identifier.
+
+ Args:
+ profile: string, optional, short name of the .mobileprovision file
+ to use, if empty or the file is missing, the best file installed
+ will be used
+ bundle_identifier: string, value of CFBundleIdentifier from Info.plist
+
+ Returns:
+ A tuple of the path to the selected provisioning profile, the data of
+ the embedded plist in the provisioning profile and the team identifier
+ to use for code signing.
+
+ Raises:
+ SystemExit: if no .mobileprovision can be used to sign the bundle.
+ """
+ profiles_dir = os.path.join(
+ os.environ['HOME'], 'Library', 'MobileDevice', 'Provisioning Profiles')
+ if not os.path.isdir(profiles_dir):
+ print >>sys.stderr, (
+ 'cannot find mobile provisioning for %s' % bundle_identifier)
+ sys.exit(1)
+ provisioning_profiles = None
+ if profile:
+ profile_path = os.path.join(profiles_dir, profile + '.mobileprovision')
+ if os.path.exists(profile_path):
+ provisioning_profiles = [profile_path]
+ if not provisioning_profiles:
+ provisioning_profiles = glob.glob(
+ os.path.join(profiles_dir, '*.mobileprovision'))
+ valid_provisioning_profiles = {}
+ for profile_path in provisioning_profiles:
+ profile_data = self._LoadProvisioningProfile(profile_path)
+ app_id_pattern = profile_data.get(
+ 'Entitlements', {}).get('application-identifier', '')
+ for team_identifier in profile_data.get('TeamIdentifier', []):
+ app_id = '%s.%s' % (team_identifier, bundle_identifier)
+ if fnmatch.fnmatch(app_id, app_id_pattern):
+ valid_provisioning_profiles[app_id_pattern] = (
+ profile_path, profile_data, team_identifier)
+ if not valid_provisioning_profiles:
+ print >>sys.stderr, (
+ 'cannot find mobile provisioning for %s' % bundle_identifier)
+ sys.exit(1)
+ # If the user has multiple provisioning profiles installed that can be
+ # used for ${bundle_identifier}, pick the most specific one (ie. the
+ # provisioning profile whose pattern is the longest).
+ selected_key = max(valid_provisioning_profiles, key=lambda v: len(v))
+ return valid_provisioning_profiles[selected_key]
+
+ def _LoadProvisioningProfile(self, profile_path):
+ """Extracts the plist embedded in a provisioning profile.
+
+ Args:
+ profile_path: string, path to the .mobileprovision file
+
+ Returns:
+ Content of the plist embedded in the provisioning profile as a dictionary.
+ """
+ with tempfile.NamedTemporaryFile() as temp:
+ subprocess.check_call([
+ 'security', 'cms', '-D', '-i', profile_path, '-o', temp.name])
+ return self._LoadPlistMaybeBinary(temp.name)
+
+ def _LoadPlistMaybeBinary(self, plist_path):
+ """Loads into a memory a plist possibly encoded in binary format.
+
+ This is a wrapper around plistlib.readPlist that tries to convert the
+ plist to the XML format if it can't be parsed (assuming that it is in
+ the binary format).
+
+ Args:
+ plist_path: string, path to a plist file, in XML or binary format
+
+ Returns:
+ Content of the plist as a dictionary.
+ """
+ try:
+ # First, try to read the file using plistlib that only supports XML,
+ # and if an exception is raised, convert a temporary copy to XML and
+ # load that copy.
+ return plistlib.readPlist(plist_path)
+ except:
+ pass
+ with tempfile.NamedTemporaryFile() as temp:
+ shutil.copy2(plist_path, temp.name)
+ subprocess.check_call(['plutil', '-convert', 'xml1', temp.name])
+ return plistlib.readPlist(temp.name)
+
+ def _GetSubstitutions(self, bundle_identifier, app_identifier_prefix):
+ """Constructs a dictionary of variable substitutions for Entitlements.plist.
+
+ Args:
+ bundle_identifier: string, value of CFBundleIdentifier from Info.plist
+ app_identifier_prefix: string, value for AppIdentifierPrefix
+
+ Returns:
+ Dictionary of substitutions to apply when generating Entitlements.plist.
+ """
+ return {
+ 'CFBundleIdentifier': bundle_identifier,
+ 'AppIdentifierPrefix': app_identifier_prefix,
+ }
+
+ def _GetCFBundleIdentifier(self):
+ """Extracts CFBundleIdentifier value from Info.plist in the bundle.
+
+ Returns:
+ Value of CFBundleIdentifier in the Info.plist located in the bundle.
+ """
+ info_plist_path = os.path.join(
+ os.environ['TARGET_BUILD_DIR'],
+ os.environ['INFOPLIST_PATH'])
+ info_plist_data = self._LoadPlistMaybeBinary(info_plist_path)
+ return info_plist_data['CFBundleIdentifier']
+
+ def _InstallEntitlements(self, entitlements, substitutions, overrides):
+ """Generates and install the ${BundleName}.xcent entitlements file.
+
+ Expands variables "$(variable)" pattern in the source entitlements file,
+ add extra entitlements defined in the .mobileprovision file and the copy
+ the generated plist to "${BundlePath}.xcent".
+
+ Args:
+ entitlements: string, optional, path to the Entitlements.plist template
+ to use, defaults to "${SDKROOT}/Entitlements.plist"
+ substitutions: dictionary, variable substitutions
+ overrides: dictionary, values to add to the entitlements
+
+ Returns:
+ Path to the generated entitlements file.
+ """
+ source_path = entitlements
+ target_path = os.path.join(
+ os.environ['BUILT_PRODUCTS_DIR'],
+ os.environ['PRODUCT_NAME'] + '.xcent')
+ if not source_path:
+ source_path = os.path.join(
+ os.environ['SDKROOT'],
+ 'Entitlements.plist')
+ shutil.copy2(source_path, target_path)
+ data = self._LoadPlistMaybeBinary(target_path)
+ data = self._ExpandVariables(data, substitutions)
+ if overrides:
+ for key in overrides:
+ if key not in data:
+ data[key] = overrides[key]
+ plistlib.writePlist(data, target_path)
+ return target_path
+
+ def _ExpandVariables(self, data, substitutions):
+ """Expands variables "$(variable)" in data.
+
+ Args:
+ data: object, can be either string, list or dictionary
+ substitutions: dictionary, variable substitutions to perform
+
+ Returns:
+ Copy of data where each references to "$(variable)" has been replaced
+ by the corresponding value found in substitutions, or left intact if
+ the key was not found.
+ """
+ if isinstance(data, str):
+ for key, value in substitutions.iteritems():
+ data = data.replace('$(%s)' % key, value)
+ return data
+ if isinstance(data, list):
+ return [self._ExpandVariables(v, substitutions) for v in data]
+ if isinstance(data, dict):
+ return dict((k, self._ExpandVariables(data[k],
+ substitutions)) for k in data)
+ return data
if __name__ == '__main__':
sys.exit(main(sys.argv[1:]))
diff --git a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/msvs_emulation.py b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/msvs_emulation.py
index 41a3bc72c..6428fced0 100644
--- a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/msvs_emulation.py
+++ b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/msvs_emulation.py
@@ -152,6 +152,7 @@ class MsvsSettings(object):
('msvs_disabled_warnings', list),
('msvs_precompiled_header', str),
('msvs_precompiled_source', str),
+ ('msvs_configuration_platform', str),
('msvs_target_platform', str),
]
configs = spec['configurations']
@@ -165,19 +166,27 @@ class MsvsSettings(object):
def GetVSMacroEnv(self, base_to_build=None, config=None):
"""Get a dict of variables mapping internal VS macro names to their gyp
equivalents."""
- target_platform = self.GetTargetPlatform(config)
- target_platform = {'x86': 'Win32'}.get(target_platform, target_platform)
+ target_platform = 'Win32' if self.GetArch(config) == 'x86' else 'x64'
+ target_name = self.spec.get('product_prefix', '') + \
+ self.spec.get('product_name', self.spec['target_name'])
+ target_dir = base_to_build + '\\' if base_to_build else ''
replacements = {
- '$(VSInstallDir)': self.vs_version.Path(),
- '$(VCInstallDir)': os.path.join(self.vs_version.Path(), 'VC') + '\\',
- '$(OutDir)\\': base_to_build + '\\' if base_to_build else '',
+ '$(OutDir)\\': target_dir,
+ '$(TargetDir)\\': target_dir,
'$(IntDir)': '$!INTERMEDIATE_DIR',
'$(InputPath)': '${source}',
'$(InputName)': '${root}',
'$(ProjectName)': self.spec['target_name'],
+ '$(TargetName)': target_name,
'$(PlatformName)': target_platform,
'$(ProjectDir)\\': '',
}
+ # '$(VSInstallDir)' and '$(VCInstallDir)' are available when and only when
+ # Visual Studio is actually installed.
+ if self.vs_version.Path():
+ replacements['$(VSInstallDir)'] = self.vs_version.Path()
+ replacements['$(VCInstallDir)'] = os.path.join(self.vs_version.Path(),
+ 'VC') + '\\'
# Chromium uses DXSDK_DIR in include/lib paths, but it may or may not be
# set. This happens when the SDK is sync'd via src-internal, rather than
# by typical end-user installation of the SDK. If it's not set, we don't
@@ -193,7 +202,8 @@ class MsvsSettings(object):
def AdjustLibraries(self, libraries):
"""Strip -l from library if it's specified with that."""
- return [lib[2:] if lib.startswith('-l') else lib for lib in libraries]
+ libs = [lib[2:] if lib.startswith('-l') else lib for lib in libraries]
+ return [lib + '.lib' if not lib.endswith('.lib') else lib for lib in libs]
def _GetAndMunge(self, field, path, default, prefix, append, map):
"""Retrieve a value from |field| at |path| or return |default|. If
@@ -215,29 +225,40 @@ class MsvsSettings(object):
return self.parent._GetAndMunge(self.field, self.base_path + [name],
default=default, prefix=prefix, append=self.append, map=map)
- def GetTargetPlatform(self, config):
- target_platform = self.msvs_target_platform.get(config, '')
- if not target_platform:
- target_platform = 'Win32'
- return {'Win32': 'x86'}.get(target_platform, target_platform)
-
- def _RealConfig(self, config):
- target_platform = self.GetTargetPlatform(config)
- if target_platform == 'x64' and not config.endswith('_x64'):
+ def GetArch(self, config):
+ """Get architecture based on msvs_configuration_platform and
+ msvs_target_platform. Returns either 'x86' or 'x64'."""
+ configuration_platform = self.msvs_configuration_platform.get(config, '')
+ platform = self.msvs_target_platform.get(config, '')
+ if not platform: # If no specific override, use the configuration's.
+ platform = configuration_platform
+ # Map from platform to architecture.
+ return {'Win32': 'x86', 'x64': 'x64'}.get(platform, 'x86')
+
+ def _TargetConfig(self, config):
+ """Returns the target-specific configuration."""
+ # There's two levels of architecture/platform specification in VS. The
+ # first level is globally for the configuration (this is what we consider
+ # "the" config at the gyp level, which will be something like 'Debug' or
+ # 'Release_x64'), and a second target-specific configuration, which is an
+ # override for the global one. |config| is remapped here to take into
+ # account the local target-specific overrides to the global configuration.
+ arch = self.GetArch(config)
+ if arch == 'x64' and not config.endswith('_x64'):
config += '_x64'
+ if arch == 'x86' and config.endswith('_x64'):
+ config = config.rsplit('_', 1)[0]
return config
def _Setting(self, path, config,
default=None, prefix='', append=None, map=None):
"""_GetAndMunge for msvs_settings."""
- config = self._RealConfig(config)
return self._GetAndMunge(
self.msvs_settings[config], path, default, prefix, append, map)
def _ConfigAttrib(self, path, config,
default=None, prefix='', append=None, map=None):
"""_GetAndMunge for msvs_configuration_attributes."""
- config = self._RealConfig(config)
return self._GetAndMunge(
self.msvs_configuration_attributes[config],
path, default, prefix, append, map)
@@ -245,7 +266,7 @@ class MsvsSettings(object):
def AdjustIncludeDirs(self, include_dirs, config):
"""Updates include_dirs to expand VS specific paths, and adds the system
include dirs used for platform SDK and similar."""
- config = self._RealConfig(config)
+ config = self._TargetConfig(config)
includes = include_dirs + self.msvs_system_include_dirs[config]
includes.extend(self._Setting(
('VCCLCompilerTool', 'AdditionalIncludeDirectories'), config, default=[]))
@@ -254,7 +275,7 @@ class MsvsSettings(object):
def GetComputedDefines(self, config):
"""Returns the set of defines that are injected to the defines list based
on other VS settings."""
- config = self._RealConfig(config)
+ config = self._TargetConfig(config)
defines = []
if self._ConfigAttrib(['CharacterSet'], config) == '1':
defines.extend(('_UNICODE', 'UNICODE'))
@@ -264,10 +285,29 @@ class MsvsSettings(object):
('VCCLCompilerTool', 'PreprocessorDefinitions'), config, default=[]))
return defines
+ def GetCompilerPdbName(self, config, expand_special):
+ """Get the pdb file name that should be used for compiler invocations, or
+ None if there's no explicit name specified."""
+ config = self._TargetConfig(config)
+ pdbname = self._Setting(
+ ('VCCLCompilerTool', 'ProgramDataBaseFileName'), config)
+ if pdbname:
+ pdbname = expand_special(self.ConvertVSMacros(pdbname))
+ return pdbname
+
+ def GetMapFileName(self, config, expand_special):
+ """Gets the explicitly overriden map file name for a target or returns None
+ if it's not set."""
+ config = self._TargetConfig(config)
+ map_file = self._Setting(('VCLinkerTool', 'MapFileName'), config)
+ if map_file:
+ map_file = expand_special(self.ConvertVSMacros(map_file, config=config))
+ return map_file
+
def GetOutputName(self, config, expand_special):
"""Gets the explicitly overridden output name for a target or returns None
if it's not overridden."""
- config = self._RealConfig(config)
+ config = self._TargetConfig(config)
type = self.spec['type']
root = 'VCLibrarianTool' if type == 'static_library' else 'VCLinkerTool'
# TODO(scottmg): Handle OutputDirectory without OutputFile.
@@ -277,27 +317,36 @@ class MsvsSettings(object):
output_file, config=config))
return output_file
- def GetPDBName(self, config, expand_special):
- """Gets the explicitly overridden pdb name for a target or returns None
- if it's not overridden."""
- config = self._RealConfig(config)
+ def GetPDBName(self, config, expand_special, default):
+ """Gets the explicitly overridden pdb name for a target or returns
+ default if it's not overridden, or if no pdb will be generated."""
+ config = self._TargetConfig(config)
output_file = self._Setting(('VCLinkerTool', 'ProgramDatabaseFile'), config)
- if output_file:
- output_file = expand_special(self.ConvertVSMacros(
- output_file, config=config))
- return output_file
+ generate_debug_info = self._Setting(
+ ('VCLinkerTool', 'GenerateDebugInformation'), config)
+ if generate_debug_info:
+ if output_file:
+ return expand_special(self.ConvertVSMacros(output_file, config=config))
+ else:
+ return default
+ else:
+ return None
def GetCflags(self, config):
"""Returns the flags that need to be added to .c and .cc compilations."""
- config = self._RealConfig(config)
+ config = self._TargetConfig(config)
cflags = []
cflags.extend(['/wd' + w for w in self.msvs_disabled_warnings[config]])
cl = self._GetWrapper(self, self.msvs_settings[config],
'VCCLCompilerTool', append=cflags)
cl('Optimization',
- map={'0': 'd', '1': '1', '2': '2', '3': 'x'}, prefix='/O')
+ map={'0': 'd', '1': '1', '2': '2', '3': 'x'}, prefix='/O', default='2')
cl('InlineFunctionExpansion', prefix='/Ob')
+ cl('DisableSpecificWarnings', prefix='/wd')
+ cl('StringPooling', map={'true': '/GF'})
+ cl('EnableFiberSafeOptimizations', map={'true': '/GT'})
cl('OmitFramePointers', map={'false': '-', 'true': ''}, prefix='/Oy')
+ cl('EnableIntrinsicFunctions', map={'false': '-', 'true': ''}, prefix='/Oi')
cl('FavorSizeOrSpeed', map={'1': 't', '2': 's'}, prefix='/O')
cl('WholeProgramOptimization', map={'true': '/GL'})
cl('WarningLevel', prefix='/W')
@@ -312,8 +361,16 @@ class MsvsSettings(object):
cl('RuntimeLibrary',
map={'0': 'T', '1': 'Td', '2': 'D', '3': 'Dd'}, prefix='/M')
cl('ExceptionHandling', map={'1': 'sc','2': 'a'}, prefix='/EH')
+ cl('DefaultCharIsUnsigned', map={'true': '/J'})
+ cl('TreatWChar_tAsBuiltInType',
+ map={'false': '-', 'true': ''}, prefix='/Zc:wchar_t')
cl('EnablePREfast', map={'true': '/analyze'})
cl('AdditionalOptions', prefix='')
+ cflags.extend(['/FI' + f for f in self._Setting(
+ ('VCCLCompilerTool', 'ForcedIncludeFiles'), config, default=[])])
+ if self.vs_version.short_name in ('2013', '2013e'):
+ # New flag required in 2013 to maintain previous PDB behavior.
+ cflags.append('/FS')
# ninja handles parallelism by itself, don't have the compiler do it too.
cflags = filter(lambda x: not x.startswith('/MP'), cflags)
return cflags
@@ -321,13 +378,13 @@ class MsvsSettings(object):
def GetPrecompiledHeader(self, config, gyp_to_build_path):
"""Returns an object that handles the generation of precompiled header
build steps."""
- config = self._RealConfig(config)
+ config = self._TargetConfig(config)
return _PchHelper(self, config, gyp_to_build_path)
def _GetPchFlags(self, config, extension):
"""Get the flags to be added to the cflags for precompiled header support.
"""
- config = self._RealConfig(config)
+ config = self._TargetConfig(config)
# The PCH is only built once by a particular source file. Usage of PCH must
# only be for the same language (i.e. C vs. C++), so only include the pch
# flags when the language matches.
@@ -340,18 +397,18 @@ class MsvsSettings(object):
def GetCflagsC(self, config):
"""Returns the flags that need to be added to .c compilations."""
- config = self._RealConfig(config)
+ config = self._TargetConfig(config)
return self._GetPchFlags(config, '.c')
def GetCflagsCC(self, config):
"""Returns the flags that need to be added to .cc compilations."""
- config = self._RealConfig(config)
+ config = self._TargetConfig(config)
return ['/TP'] + self._GetPchFlags(config, '.cc')
def _GetAdditionalLibraryDirectories(self, root, config, gyp_to_build_path):
"""Get and normalize the list of paths in AdditionalLibraryDirectories
setting."""
- config = self._RealConfig(config)
+ config = self._TargetConfig(config)
libpaths = self._Setting((root, 'AdditionalLibraryDirectories'),
config, default=[])
libpaths = [os.path.normpath(
@@ -361,67 +418,109 @@ class MsvsSettings(object):
def GetLibFlags(self, config, gyp_to_build_path):
"""Returns the flags that need to be added to lib commands."""
- config = self._RealConfig(config)
+ config = self._TargetConfig(config)
libflags = []
lib = self._GetWrapper(self, self.msvs_settings[config],
'VCLibrarianTool', append=libflags)
libflags.extend(self._GetAdditionalLibraryDirectories(
'VCLibrarianTool', config, gyp_to_build_path))
+ lib('LinkTimeCodeGeneration', map={'true': '/LTCG'})
+ lib('TargetMachine', map={'1': 'X86', '17': 'X64'}, prefix='/MACHINE:')
lib('AdditionalOptions')
return libflags
- def _GetDefFileAsLdflags(self, spec, ldflags, gyp_to_build_path):
- """.def files get implicitly converted to a ModuleDefinitionFile for the
- linker in the VS generator. Emulate that behaviour here."""
- def_file = ''
+ def GetDefFile(self, gyp_to_build_path):
+ """Returns the .def file from sources, if any. Otherwise returns None."""
+ spec = self.spec
if spec['type'] in ('shared_library', 'loadable_module', 'executable'):
def_files = [s for s in spec.get('sources', []) if s.endswith('.def')]
if len(def_files) == 1:
- ldflags.append('/DEF:"%s"' % gyp_to_build_path(def_files[0]))
+ return gyp_to_build_path(def_files[0])
elif len(def_files) > 1:
raise Exception("Multiple .def files")
+ return None
+
+ def _GetDefFileAsLdflags(self, ldflags, gyp_to_build_path):
+ """.def files get implicitly converted to a ModuleDefinitionFile for the
+ linker in the VS generator. Emulate that behaviour here."""
+ def_file = self.GetDefFile(gyp_to_build_path)
+ if def_file:
+ ldflags.append('/DEF:"%s"' % def_file)
+
+ def GetPGDName(self, config, expand_special):
+ """Gets the explicitly overridden pgd name for a target or returns None
+ if it's not overridden."""
+ config = self._TargetConfig(config)
+ output_file = self._Setting(
+ ('VCLinkerTool', 'ProfileGuidedDatabase'), config)
+ if output_file:
+ output_file = expand_special(self.ConvertVSMacros(
+ output_file, config=config))
+ return output_file
def GetLdflags(self, config, gyp_to_build_path, expand_special,
- manifest_base_name, is_executable):
+ manifest_base_name, output_name, is_executable, build_dir):
"""Returns the flags that need to be added to link commands, and the
manifest files."""
- config = self._RealConfig(config)
+ config = self._TargetConfig(config)
ldflags = []
ld = self._GetWrapper(self, self.msvs_settings[config],
'VCLinkerTool', append=ldflags)
- self._GetDefFileAsLdflags(self.spec, ldflags, gyp_to_build_path)
+ self._GetDefFileAsLdflags(ldflags, gyp_to_build_path)
ld('GenerateDebugInformation', map={'true': '/DEBUG'})
ld('TargetMachine', map={'1': 'X86', '17': 'X64'}, prefix='/MACHINE:')
ldflags.extend(self._GetAdditionalLibraryDirectories(
'VCLinkerTool', config, gyp_to_build_path))
ld('DelayLoadDLLs', prefix='/DELAYLOAD:')
+ ld('TreatLinkerWarningAsErrors', prefix='/WX',
+ map={'true': '', 'false': ':NO'})
out = self.GetOutputName(config, expand_special)
if out:
ldflags.append('/OUT:' + out)
- pdb = self.GetPDBName(config, expand_special)
+ pdb = self.GetPDBName(config, expand_special, output_name + '.pdb')
if pdb:
ldflags.append('/PDB:' + pdb)
+ pgd = self.GetPGDName(config, expand_special)
+ if pgd:
+ ldflags.append('/PGD:' + pgd)
+ map_file = self.GetMapFileName(config, expand_special)
+ ld('GenerateMapFile', map={'true': '/MAP:' + map_file if map_file
+ else '/MAP'})
+ ld('MapExports', map={'true': '/MAPINFO:EXPORTS'})
ld('AdditionalOptions', prefix='')
- ld('SubSystem', map={'1': 'CONSOLE', '2': 'WINDOWS'}, prefix='/SUBSYSTEM:')
+
+ minimum_required_version = self._Setting(
+ ('VCLinkerTool', 'MinimumRequiredVersion'), config, default='')
+ if minimum_required_version:
+ minimum_required_version = ',' + minimum_required_version
+ ld('SubSystem',
+ map={'1': 'CONSOLE%s' % minimum_required_version,
+ '2': 'WINDOWS%s' % minimum_required_version},
+ prefix='/SUBSYSTEM:')
+
+ ld('TerminalServerAware', map={'1': ':NO', '2': ''}, prefix='/TSAWARE')
ld('LinkIncremental', map={'1': ':NO', '2': ''}, prefix='/INCREMENTAL')
+ ld('BaseAddress', prefix='/BASE:')
ld('FixedBaseAddress', map={'1': ':NO', '2': ''}, prefix='/FIXED')
ld('RandomizedBaseAddress',
map={'1': ':NO', '2': ''}, prefix='/DYNAMICBASE')
ld('DataExecutionPrevention',
map={'1': ':NO', '2': ''}, prefix='/NXCOMPAT')
ld('OptimizeReferences', map={'1': 'NOREF', '2': 'REF'}, prefix='/OPT:')
+ ld('ForceSymbolReferences', prefix='/INCLUDE:')
ld('EnableCOMDATFolding', map={'1': 'NOICF', '2': 'ICF'}, prefix='/OPT:')
- ld('LinkTimeCodeGeneration', map={'1': '/LTCG'})
+ ld('LinkTimeCodeGeneration',
+ map={'1': '', '2': ':PGINSTRUMENT', '3': ':PGOPTIMIZE',
+ '4': ':PGUPDATE'},
+ prefix='/LTCG')
ld('IgnoreDefaultLibraryNames', prefix='/NODEFAULTLIB:')
ld('ResourceOnlyDLL', map={'true': '/NOENTRY'})
ld('EntryPointSymbol', prefix='/ENTRY:')
- ld('Profile', map={ 'true': '/PROFILE'})
+ ld('Profile', map={'true': '/PROFILE'})
+ ld('LargeAddressAware',
+ map={'1': ':NO', '2': ''}, prefix='/LARGEADDRESSAWARE')
# TODO(scottmg): This should sort of be somewhere else (not really a flag).
ld('AdditionalDependencies', prefix='')
- # TODO(scottmg): These too.
- ldflags.extend(('kernel32.lib', 'user32.lib', 'gdi32.lib', 'winspool.lib',
- 'comdlg32.lib', 'advapi32.lib', 'shell32.lib', 'ole32.lib',
- 'oleaut32.lib', 'uuid.lib', 'odbc32.lib', 'DelayImp.lib'))
# If the base address is not specifically controlled, DYNAMICBASE should
# be on by default.
@@ -438,40 +537,104 @@ class MsvsSettings(object):
ldflags.append('/NXCOMPAT')
have_def_file = filter(lambda x: x.startswith('/DEF:'), ldflags)
- manifest_flags, intermediate_manifest_file = self._GetLdManifestFlags(
- config, manifest_base_name, is_executable and not have_def_file)
+ manifest_flags, intermediate_manifest, manifest_files = \
+ self._GetLdManifestFlags(config, manifest_base_name, gyp_to_build_path,
+ is_executable and not have_def_file, build_dir)
ldflags.extend(manifest_flags)
- manifest_files = self._GetAdditionalManifestFiles(config, gyp_to_build_path)
- manifest_files.append(intermediate_manifest_file)
-
- return ldflags, manifest_files
-
- def _GetLdManifestFlags(self, config, name, allow_isolation):
- """Returns the set of flags that need to be added to the link to generate
- a default manifest, as well as the name of the generated file."""
- # Add manifest flags that mirror the defaults in VS. Chromium dev builds
- # do not currently use any non-default settings, but we could parse
- # VCManifestTool blocks if Chromium or other projects need them in the
- # future. Of particular note, we do not yet support EmbedManifest because
- # it complicates incremental linking.
+ return ldflags, intermediate_manifest, manifest_files
+
+ def _GetLdManifestFlags(self, config, name, gyp_to_build_path,
+ allow_isolation, build_dir):
+ """Returns a 3-tuple:
+ - the set of flags that need to be added to the link to generate
+ a default manifest
+ - the intermediate manifest that the linker will generate that should be
+ used to assert it doesn't add anything to the merged one.
+ - the list of all the manifest files to be merged by the manifest tool and
+ included into the link."""
+ generate_manifest = self._Setting(('VCLinkerTool', 'GenerateManifest'),
+ config,
+ default='true')
+ if generate_manifest != 'true':
+ # This means not only that the linker should not generate the intermediate
+ # manifest but also that the manifest tool should do nothing even when
+ # additional manifests are specified.
+ return ['/MANIFEST:NO'], [], []
+
output_name = name + '.intermediate.manifest'
flags = [
'/MANIFEST',
'/ManifestFile:' + output_name,
- '''/MANIFESTUAC:"level='asInvoker' uiAccess='false'"'''
]
+
+ # Instead of using the MANIFESTUAC flags, we generate a .manifest to
+ # include into the list of manifests. This allows us to avoid the need to
+ # do two passes during linking. The /MANIFEST flag and /ManifestFile are
+ # still used, and the intermediate manifest is used to assert that the
+ # final manifest we get from merging all the additional manifest files
+ # (plus the one we generate here) isn't modified by merging the
+ # intermediate into it.
+
+ # Always NO, because we generate a manifest file that has what we want.
+ flags.append('/MANIFESTUAC:NO')
+
+ config = self._TargetConfig(config)
+ enable_uac = self._Setting(('VCLinkerTool', 'EnableUAC'), config,
+ default='true')
+ manifest_files = []
+ generated_manifest_outer = \
+"<?xml version='1.0' encoding='UTF-8' standalone='yes'?>" \
+"<assembly xmlns='urn:schemas-microsoft-com:asm.v1' manifestVersion='1.0'>%s" \
+"</assembly>"
+ if enable_uac == 'true':
+ execution_level = self._Setting(('VCLinkerTool', 'UACExecutionLevel'),
+ config, default='0')
+ execution_level_map = {
+ '0': 'asInvoker',
+ '1': 'highestAvailable',
+ '2': 'requireAdministrator'
+ }
+
+ ui_access = self._Setting(('VCLinkerTool', 'UACUIAccess'), config,
+ default='false')
+
+ inner = '''
+<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
+ <security>
+ <requestedPrivileges>
+ <requestedExecutionLevel level='%s' uiAccess='%s' />
+ </requestedPrivileges>
+ </security>
+</trustInfo>''' % (execution_level_map[execution_level], ui_access)
+ else:
+ inner = ''
+
+ generated_manifest_contents = generated_manifest_outer % inner
+ generated_name = name + '.generated.manifest'
+ # Need to join with the build_dir here as we're writing it during
+ # generation time, but we return the un-joined version because the build
+ # will occur in that directory. We only write the file if the contents
+ # have changed so that simply regenerating the project files doesn't
+ # cause a relink.
+ build_dir_generated_name = os.path.join(build_dir, generated_name)
+ gyp.common.EnsureDirExists(build_dir_generated_name)
+ f = gyp.common.WriteOnDiff(build_dir_generated_name)
+ f.write(generated_manifest_contents)
+ f.close()
+ manifest_files = [generated_name]
+
if allow_isolation:
flags.append('/ALLOWISOLATION')
- return flags, output_name
+
+ manifest_files += self._GetAdditionalManifestFiles(config,
+ gyp_to_build_path)
+ return flags, output_name, manifest_files
def _GetAdditionalManifestFiles(self, config, gyp_to_build_path):
"""Gets additional manifest files that are added to the default one
generated by the linker."""
files = self._Setting(('VCManifestTool', 'AdditionalManifestFiles'), config,
default=[])
- if (self._Setting(
- ('VCManifestTool', 'EmbedManifest'), config, default='') == 'true'):
- print 'gyp/msvs_emulation.py: "EmbedManifest: true" not yet supported.'
if isinstance(files, str):
files = files.split(';')
return [os.path.normpath(
@@ -481,14 +644,27 @@ class MsvsSettings(object):
def IsUseLibraryDependencyInputs(self, config):
"""Returns whether the target should be linked via Use Library Dependency
Inputs (using component .objs of a given .lib)."""
- config = self._RealConfig(config)
+ config = self._TargetConfig(config)
uldi = self._Setting(('VCLinkerTool', 'UseLibraryDependencyInputs'), config)
return uldi == 'true'
+ def IsEmbedManifest(self, config):
+ """Returns whether manifest should be linked into binary."""
+ config = self._TargetConfig(config)
+ embed = self._Setting(('VCManifestTool', 'EmbedManifest'), config,
+ default='true')
+ return embed == 'true'
+
+ def IsLinkIncremental(self, config):
+ """Returns whether the target should be linked incrementally."""
+ config = self._TargetConfig(config)
+ link_inc = self._Setting(('VCLinkerTool', 'LinkIncremental'), config)
+ return link_inc != '1'
+
def GetRcflags(self, config, gyp_to_ninja_path):
"""Returns the flags that need to be added to invocations of the resource
compiler."""
- config = self._RealConfig(config)
+ config = self._TargetConfig(config)
rcflags = []
rc = self._GetWrapper(self, self.msvs_settings[config],
'VCResourceCompilerTool', append=rcflags)
@@ -525,18 +701,27 @@ class MsvsSettings(object):
return int(rule.get('msvs_cygwin_shell',
self.spec.get('msvs_cygwin_shell', 1))) != 0
- def HasExplicitIdlRules(self, spec):
- """Determine if there's an explicit rule for idl files. When there isn't we
- need to generate implicit rules to build MIDL .idl files."""
+ def _HasExplicitRuleForExtension(self, spec, extension):
+ """Determine if there's an explicit rule for a particular extension."""
for rule in spec.get('rules', []):
- if rule['extension'] == 'idl' and int(rule.get('msvs_external_rule', 0)):
+ if rule['extension'] == extension:
return True
return False
+ def HasExplicitIdlRules(self, spec):
+ """Determine if there's an explicit rule for idl files. When there isn't we
+ need to generate implicit rules to build MIDL .idl files."""
+ return self._HasExplicitRuleForExtension(spec, 'idl')
+
+ def HasExplicitAsmRules(self, spec):
+ """Determine if there's an explicit rule for asm files. When there isn't we
+ need to generate implicit rules to assemble .asm files."""
+ return self._HasExplicitRuleForExtension(spec, 'asm')
+
def GetIdlBuildData(self, source, config):
"""Determine the implicit outputs for an idl file. Returns output
directory, outputs, and variables and flags that are required."""
- config = self._RealConfig(config)
+ config = self._TargetConfig(config)
midl_get = self._GetWrapper(self, self.msvs_settings[config], 'VCMIDLTool')
def midl(name, default=None):
return self.ConvertVSMacros(midl_get(name, default=default),
@@ -556,7 +741,8 @@ class MsvsSettings(object):
('iid', iid),
('proxy', proxy)]
# TODO(scottmg): Are there configuration settings to set these flags?
- flags = ['/char', 'signed', '/env', 'win32', '/Oicf']
+ target_platform = 'win32' if self.GetArch(config) == 'x86' else 'x64'
+ flags = ['/char', 'signed', '/env', target_platform, '/Oicf']
return outdir, output, variables, flags
@@ -566,54 +752,57 @@ def _LanguageMatchesForPch(source_ext, pch_source_ext):
return ((source_ext in c_exts and pch_source_ext in c_exts) or
(source_ext in cc_exts and pch_source_ext in cc_exts))
+
class PrecompiledHeader(object):
"""Helper to generate dependencies and build rules to handle generation of
precompiled headers. Interface matches the GCH handler in xcode_emulation.py.
"""
- def __init__(self, settings, config, gyp_to_build_path):
+ def __init__(
+ self, settings, config, gyp_to_build_path, gyp_to_unique_output, obj_ext):
self.settings = settings
self.config = config
- self.gyp_to_build_path = gyp_to_build_path
+ pch_source = self.settings.msvs_precompiled_source[self.config]
+ self.pch_source = gyp_to_build_path(pch_source)
+ filename, _ = os.path.splitext(pch_source)
+ self.output_obj = gyp_to_unique_output(filename + obj_ext).lower()
def _PchHeader(self):
"""Get the header that will appear in an #include line for all source
files."""
return os.path.split(self.settings.msvs_precompiled_header[self.config])[1]
- def _PchSource(self):
- """Get the source file that is built once to compile the pch data."""
- return self.gyp_to_build_path(
- self.settings.msvs_precompiled_source[self.config])
-
- def _PchOutput(self):
- """Get the name of the output of the compiled pch data."""
- return '${pchprefix}.' + self._PchHeader() + '.pch'
-
- def GetObjDependencies(self, sources, objs):
+ def GetObjDependencies(self, sources, objs, arch):
"""Given a list of sources files and the corresponding object files,
returns a list of the pch files that should be depended upon. The
additional wrapping in the return value is for interface compatability
with make.py on Mac, and xcode_emulation.py."""
+ assert arch is None
if not self._PchHeader():
return []
- source = self._PchSource()
- assert source
- pch_ext = os.path.splitext(self._PchSource())[1]
+ pch_ext = os.path.splitext(self.pch_source)[1]
for source in sources:
if _LanguageMatchesForPch(os.path.splitext(source)[1], pch_ext):
- return [(None, None, self._PchOutput())]
+ return [(None, None, self.output_obj)]
return []
- def GetPchBuildCommands(self):
- """Returns [(path_to_pch, language_flag, language, header)].
- |path_to_gch| and |header| are relative to the build directory."""
- header = self._PchHeader()
- source = self._PchSource()
- if not source or not header:
- return []
- ext = os.path.splitext(source)[1]
- lang = 'c' if ext == '.c' else 'cc'
- return [(self._PchOutput(), '/Yc' + header, lang, source)]
+ def GetPchBuildCommands(self, arch):
+ """Not used on Windows as there are no additional build steps required
+ (instead, existing steps are modified in GetFlagsModifications below)."""
+ return []
+
+ def GetFlagsModifications(self, input, output, implicit, command,
+ cflags_c, cflags_cc, expand_special):
+ """Get the modified cflags and implicit dependencies that should be used
+ for the pch compilation step."""
+ if input == self.pch_source:
+ pch_output = ['/Yc' + self._PchHeader()]
+ if command == 'cxx':
+ return ([('cflags_cc', map(expand_special, cflags_cc + pch_output))],
+ self.output_obj, [])
+ elif command == 'cc':
+ return ([('cflags_c', map(expand_special, cflags_c + pch_output))],
+ self.output_obj, [])
+ return [], output, implicit
vs_version = None
@@ -681,6 +870,14 @@ def _FormatAsEnvironmentBlock(envvar_dict):
block += nul
return block
+def _ExtractCLPath(output_of_where):
+ """Gets the path to cl.exe based on the output of calling the environment
+ setup batch file, followed by the equivalent of `where`."""
+ # Take the first line, as that's the first found in the PATH.
+ for line in output_of_where.strip().splitlines():
+ if line.startswith('LOC:'):
+ return line[len('LOC:'):].strip()
+
def GenerateEnvironmentFiles(toplevel_build_dir, generator_flags, open_out):
"""It's not sufficient to have the absolute path to the compiler, linker,
etc. on Windows, as those tools rely on .dlls being in the PATH. We also
@@ -691,9 +888,21 @@ def GenerateEnvironmentFiles(toplevel_build_dir, generator_flags, open_out):
of compiler tools (cl, link, lib, rc, midl, etc.) via win_tool.py which
sets up the environment, and then we do not prefix the compiler with
an absolute path, instead preferring something like "cl.exe" in the rule
- which will then run whichever the environment setup has put in the path."""
+ which will then run whichever the environment setup has put in the path.
+ When the following procedure to generate environment files does not
+ meet your requirement (e.g. for custom toolchains), you can pass
+ "-G ninja_use_custom_environment_files" to the gyp to suppress file
+ generation and use custom environment files prepared by yourself."""
+ archs = ('x86', 'x64')
+ if generator_flags.get('ninja_use_custom_environment_files', 0):
+ cl_paths = {}
+ for arch in archs:
+ cl_paths[arch] = 'cl.exe'
+ return cl_paths
vs = GetVSVersion(generator_flags)
- for arch in ('x86', 'x64'):
+ cl_paths = {}
+ for arch in archs:
+ # Extract environment variables for subprocesses.
args = vs.SetupScript(arch)
args.extend(('&&', 'set'))
popen = subprocess.Popen(
@@ -705,6 +914,15 @@ def GenerateEnvironmentFiles(toplevel_build_dir, generator_flags, open_out):
f.write(env_block)
f.close()
+ # Find cl.exe location for this architecture.
+ args = vs.SetupScript(arch)
+ args.extend(('&&',
+ 'for', '%i', 'in', '(cl.exe)', 'do', '@echo', 'LOC:%~$PATH:i'))
+ popen = subprocess.Popen(args, shell=True, stdout=subprocess.PIPE)
+ output, _ = popen.communicate()
+ cl_paths[arch] = _ExtractCLPath(output)
+ return cl_paths
+
def VerifyMissingSources(sources, build_dir, generator_flags, gyp_to_ninja):
"""Emulate behavior of msvs_error_on_missing_sources present in the msvs
generator: Check that all regular source files, i.e. not created at run time,
@@ -720,3 +938,22 @@ def VerifyMissingSources(sources, build_dir, generator_flags, gyp_to_ninja):
# path for a slightly less crazy looking output.
cleaned_up = [os.path.normpath(x) for x in missing]
raise Exception('Missing input files:\n%s' % '\n'.join(cleaned_up))
+
+# Sets some values in default_variables, which are required for many
+# generators, run on Windows.
+def CalculateCommonVariables(default_variables, params):
+ generator_flags = params.get('generator_flags', {})
+
+ # Set a variable so conditions can be based on msvs_version.
+ msvs_version = gyp.msvs_emulation.GetVSVersion(generator_flags)
+ default_variables['MSVS_VERSION'] = msvs_version.ShortName()
+
+ # To determine processor word size on Windows, in addition to checking
+ # PROCESSOR_ARCHITECTURE (which reflects the word size of the current
+ # process), it is also necessary to check PROCESSOR_ARCHITEW6432 (which
+ # contains the actual word size of the system when running thru WOW64).
+ if ('64' in os.environ.get('PROCESSOR_ARCHITECTURE', '') or
+ '64' in os.environ.get('PROCESSOR_ARCHITEW6432', '')):
+ default_variables['MSVS_OS_BITS'] = 64
+ else:
+ default_variables['MSVS_OS_BITS'] = 32
diff --git a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/ninja_syntax.py b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/ninja_syntax.py
index 0f3603a8c..d2948f06c 100644
--- a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/ninja_syntax.py
+++ b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/ninja_syntax.py
@@ -34,8 +34,13 @@ class Writer(object):
value = ' '.join(filter(None, value)) # Filter out empty strings.
self._line('%s = %s' % (key, value), indent)
+ def pool(self, name, depth):
+ self._line('pool %s' % name)
+ self.variable('depth', depth, indent=1)
+
def rule(self, name, command, description=None, depfile=None,
- generator=False, restat=False, rspfile=None, rspfile_content=None):
+ generator=False, pool=None, restat=False, rspfile=None,
+ rspfile_content=None, deps=None):
self._line('rule %s' % name)
self.variable('command', command, indent=1)
if description:
@@ -44,12 +49,16 @@ class Writer(object):
self.variable('depfile', depfile, indent=1)
if generator:
self.variable('generator', '1', indent=1)
+ if pool:
+ self.variable('pool', pool, indent=1)
if restat:
self.variable('restat', '1', indent=1)
if rspfile:
self.variable('rspfile', rspfile, indent=1)
if rspfile_content:
self.variable('rspfile_content', rspfile_content, indent=1)
+ if deps:
+ self.variable('deps', deps, indent=1)
def build(self, outputs, rule, inputs=None, implicit=None, order_only=None,
variables=None):
@@ -67,13 +76,12 @@ class Writer(object):
all_inputs.append('||')
all_inputs.extend(order_only)
- self._line('build %s: %s %s' % (' '.join(out_outputs),
- rule,
- ' '.join(all_inputs)))
+ self._line('build %s: %s' % (' '.join(out_outputs),
+ ' '.join([rule] + all_inputs)))
if variables:
if isinstance(variables, dict):
- iterator = variables.iteritems()
+ iterator = iter(variables.items())
else:
iterator = iter(variables)
diff --git a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/ordered_dict.py b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/ordered_dict.py
new file mode 100644
index 000000000..a1e89f919
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/ordered_dict.py
@@ -0,0 +1,289 @@
+# Unmodified from http://code.activestate.com/recipes/576693/
+# other than to add MIT license header (as specified on page, but not in code).
+# Linked from Python documentation here:
+# http://docs.python.org/2/library/collections.html#collections.OrderedDict
+#
+# This should be deleted once Py2.7 is available on all bots, see
+# http://crbug.com/241769.
+#
+# Copyright (c) 2009 Raymond Hettinger.
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+# Backport of OrderedDict() class that runs on Python 2.4, 2.5, 2.6, 2.7 and pypy.
+# Passes Python2.7's test suite and incorporates all the latest updates.
+
+try:
+ from thread import get_ident as _get_ident
+except ImportError:
+ from dummy_thread import get_ident as _get_ident
+
+try:
+ from _abcoll import KeysView, ValuesView, ItemsView
+except ImportError:
+ pass
+
+
+class OrderedDict(dict):
+ 'Dictionary that remembers insertion order'
+ # An inherited dict maps keys to values.
+ # The inherited dict provides __getitem__, __len__, __contains__, and get.
+ # The remaining methods are order-aware.
+ # Big-O running times for all methods are the same as for regular dictionaries.
+
+ # The internal self.__map dictionary maps keys to links in a doubly linked list.
+ # The circular doubly linked list starts and ends with a sentinel element.
+ # The sentinel element never gets deleted (this simplifies the algorithm).
+ # Each link is stored as a list of length three: [PREV, NEXT, KEY].
+
+ def __init__(self, *args, **kwds):
+ '''Initialize an ordered dictionary. Signature is the same as for
+ regular dictionaries, but keyword arguments are not recommended
+ because their insertion order is arbitrary.
+
+ '''
+ if len(args) > 1:
+ raise TypeError('expected at most 1 arguments, got %d' % len(args))
+ try:
+ self.__root
+ except AttributeError:
+ self.__root = root = [] # sentinel node
+ root[:] = [root, root, None]
+ self.__map = {}
+ self.__update(*args, **kwds)
+
+ def __setitem__(self, key, value, dict_setitem=dict.__setitem__):
+ 'od.__setitem__(i, y) <==> od[i]=y'
+ # Setting a new item creates a new link which goes at the end of the linked
+ # list, and the inherited dictionary is updated with the new key/value pair.
+ if key not in self:
+ root = self.__root
+ last = root[0]
+ last[1] = root[0] = self.__map[key] = [last, root, key]
+ dict_setitem(self, key, value)
+
+ def __delitem__(self, key, dict_delitem=dict.__delitem__):
+ 'od.__delitem__(y) <==> del od[y]'
+ # Deleting an existing item uses self.__map to find the link which is
+ # then removed by updating the links in the predecessor and successor nodes.
+ dict_delitem(self, key)
+ link_prev, link_next, key = self.__map.pop(key)
+ link_prev[1] = link_next
+ link_next[0] = link_prev
+
+ def __iter__(self):
+ 'od.__iter__() <==> iter(od)'
+ root = self.__root
+ curr = root[1]
+ while curr is not root:
+ yield curr[2]
+ curr = curr[1]
+
+ def __reversed__(self):
+ 'od.__reversed__() <==> reversed(od)'
+ root = self.__root
+ curr = root[0]
+ while curr is not root:
+ yield curr[2]
+ curr = curr[0]
+
+ def clear(self):
+ 'od.clear() -> None. Remove all items from od.'
+ try:
+ for node in self.__map.itervalues():
+ del node[:]
+ root = self.__root
+ root[:] = [root, root, None]
+ self.__map.clear()
+ except AttributeError:
+ pass
+ dict.clear(self)
+
+ def popitem(self, last=True):
+ '''od.popitem() -> (k, v), return and remove a (key, value) pair.
+ Pairs are returned in LIFO order if last is true or FIFO order if false.
+
+ '''
+ if not self:
+ raise KeyError('dictionary is empty')
+ root = self.__root
+ if last:
+ link = root[0]
+ link_prev = link[0]
+ link_prev[1] = root
+ root[0] = link_prev
+ else:
+ link = root[1]
+ link_next = link[1]
+ root[1] = link_next
+ link_next[0] = root
+ key = link[2]
+ del self.__map[key]
+ value = dict.pop(self, key)
+ return key, value
+
+ # -- the following methods do not depend on the internal structure --
+
+ def keys(self):
+ 'od.keys() -> list of keys in od'
+ return list(self)
+
+ def values(self):
+ 'od.values() -> list of values in od'
+ return [self[key] for key in self]
+
+ def items(self):
+ 'od.items() -> list of (key, value) pairs in od'
+ return [(key, self[key]) for key in self]
+
+ def iterkeys(self):
+ 'od.iterkeys() -> an iterator over the keys in od'
+ return iter(self)
+
+ def itervalues(self):
+ 'od.itervalues -> an iterator over the values in od'
+ for k in self:
+ yield self[k]
+
+ def iteritems(self):
+ 'od.iteritems -> an iterator over the (key, value) items in od'
+ for k in self:
+ yield (k, self[k])
+
+ # Suppress 'OrderedDict.update: Method has no argument':
+ # pylint: disable=E0211
+ def update(*args, **kwds):
+ '''od.update(E, **F) -> None. Update od from dict/iterable E and F.
+
+ If E is a dict instance, does: for k in E: od[k] = E[k]
+ If E has a .keys() method, does: for k in E.keys(): od[k] = E[k]
+ Or if E is an iterable of items, does: for k, v in E: od[k] = v
+ In either case, this is followed by: for k, v in F.items(): od[k] = v
+
+ '''
+ if len(args) > 2:
+ raise TypeError('update() takes at most 2 positional '
+ 'arguments (%d given)' % (len(args),))
+ elif not args:
+ raise TypeError('update() takes at least 1 argument (0 given)')
+ self = args[0]
+ # Make progressively weaker assumptions about "other"
+ other = ()
+ if len(args) == 2:
+ other = args[1]
+ if isinstance(other, dict):
+ for key in other:
+ self[key] = other[key]
+ elif hasattr(other, 'keys'):
+ for key in other.keys():
+ self[key] = other[key]
+ else:
+ for key, value in other:
+ self[key] = value
+ for key, value in kwds.items():
+ self[key] = value
+
+ __update = update # let subclasses override update without breaking __init__
+
+ __marker = object()
+
+ def pop(self, key, default=__marker):
+ '''od.pop(k[,d]) -> v, remove specified key and return the corresponding value.
+ If key is not found, d is returned if given, otherwise KeyError is raised.
+
+ '''
+ if key in self:
+ result = self[key]
+ del self[key]
+ return result
+ if default is self.__marker:
+ raise KeyError(key)
+ return default
+
+ def setdefault(self, key, default=None):
+ 'od.setdefault(k[,d]) -> od.get(k,d), also set od[k]=d if k not in od'
+ if key in self:
+ return self[key]
+ self[key] = default
+ return default
+
+ def __repr__(self, _repr_running={}):
+ 'od.__repr__() <==> repr(od)'
+ call_key = id(self), _get_ident()
+ if call_key in _repr_running:
+ return '...'
+ _repr_running[call_key] = 1
+ try:
+ if not self:
+ return '%s()' % (self.__class__.__name__,)
+ return '%s(%r)' % (self.__class__.__name__, self.items())
+ finally:
+ del _repr_running[call_key]
+
+ def __reduce__(self):
+ 'Return state information for pickling'
+ items = [[k, self[k]] for k in self]
+ inst_dict = vars(self).copy()
+ for k in vars(OrderedDict()):
+ inst_dict.pop(k, None)
+ if inst_dict:
+ return (self.__class__, (items,), inst_dict)
+ return self.__class__, (items,)
+
+ def copy(self):
+ 'od.copy() -> a shallow copy of od'
+ return self.__class__(self)
+
+ @classmethod
+ def fromkeys(cls, iterable, value=None):
+ '''OD.fromkeys(S[, v]) -> New ordered dictionary with keys from S
+ and values equal to v (which defaults to None).
+
+ '''
+ d = cls()
+ for key in iterable:
+ d[key] = value
+ return d
+
+ def __eq__(self, other):
+ '''od.__eq__(y) <==> od==y. Comparison to another OD is order-sensitive
+ while comparison to a regular mapping is order-insensitive.
+
+ '''
+ if isinstance(other, OrderedDict):
+ return len(self)==len(other) and self.items() == other.items()
+ return dict.__eq__(self, other)
+
+ def __ne__(self, other):
+ return not self == other
+
+ # -- the following methods are only used in Python 2.7 --
+
+ def viewkeys(self):
+ "od.viewkeys() -> a set-like object providing a view on od's keys"
+ return KeysView(self)
+
+ def viewvalues(self):
+ "od.viewvalues() -> an object providing a view on od's values"
+ return ValuesView(self)
+
+ def viewitems(self):
+ "od.viewitems() -> a set-like object providing a view on od's items"
+ return ItemsView(self)
+
diff --git a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/sun_tool.py b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/sun_tool.py
deleted file mode 100755
index 90d59c824..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/sun_tool.py
+++ /dev/null
@@ -1,51 +0,0 @@
-#!/usr/bin/env python
-# Copyright (c) 2011 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""These functions are executed via gyp-sun-tool when using the Makefile
-generator."""
-
-import fcntl
-import os
-import struct
-import subprocess
-import sys
-
-
-def main(args):
- executor = SunTool()
- executor.Dispatch(args)
-
-
-class SunTool(object):
- """This class performs all the SunOS tooling steps. The methods can either be
- executed directly, or dispatched from an argument list."""
-
- def Dispatch(self, args):
- """Dispatches a string command to a method."""
- if len(args) < 1:
- raise Exception("Not enough arguments")
-
- method = "Exec%s" % self._CommandifyName(args[0])
- getattr(self, method)(*args[1:])
-
- def _CommandifyName(self, name_string):
- """Transforms a tool name like copy-info-plist to CopyInfoPlist"""
- return name_string.title().replace('-', '')
-
- def ExecFlock(self, lockfile, *cmd_list):
- """Emulates the most basic behavior of Linux's flock(1)."""
- # Rely on exception handling to report errors.
- # Note that the stock python on SunOS has a bug
- # where fcntl.flock(fd, LOCK_EX) always fails
- # with EBADF, that's why we use this F_SETLK
- # hack instead.
- fd = os.open(lockfile, os.O_WRONLY|os.O_NOCTTY|os.O_CREAT, 0666)
- op = struct.pack('hhllhhl', fcntl.F_WRLCK, 0, 0, 0, 0, 0, 0)
- fcntl.fcntl(fd, fcntl.F_SETLK, op)
- return subprocess.call(cmd_list)
-
-
-if __name__ == '__main__':
- sys.exit(main(sys.argv[1:]))
diff --git a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/win_tool.py b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/win_tool.py
index 7b0657363..e9d7df0bb 100755
--- a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/win_tool.py
+++ b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/win_tool.py
@@ -9,14 +9,18 @@
These functions are executed via gyp-win-tool when using the ninja generator.
"""
-from ctypes import windll, wintypes
import os
+import re
import shutil
import subprocess
+import string
import sys
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
+# A regex matching an argument corresponding to the output filename passed to
+# link.exe.
+_LINK_EXE_OUT_ARG = re.compile('/OUT:(?P<out>.+)$', re.IGNORECASE)
def main(args):
executor = WinTool()
@@ -25,34 +29,35 @@ def main(args):
sys.exit(exit_code)
-class LinkLock(object):
- """A flock-style lock to limit the number of concurrent links to one.
+class WinTool(object):
+ """This class performs all the Windows tooling steps. The methods can either
+ be executed directly, or dispatched from an argument list."""
- Uses a session-local mutex based on the file's directory.
- """
- def __enter__(self):
- name = 'Local\\%s' % BASE_DIR.replace('\\', '_').replace(':', '_')
- self.mutex = windll.kernel32.CreateMutexW(
- wintypes.c_int(0),
- wintypes.c_int(0),
- wintypes.create_unicode_buffer(name))
- assert self.mutex
- result = windll.kernel32.WaitForSingleObject(
- self.mutex, wintypes.c_int(0xFFFFFFFF))
- # 0x80 means another process was killed without releasing the mutex, but
- # that this process has been given ownership. This is fine for our
- # purposes.
- assert result in (0, 0x80), (
- "%s, %s" % (result, windll.kernel32.GetLastError()))
+ def _UseSeparateMspdbsrv(self, env, args):
+ """Allows to use a unique instance of mspdbsrv.exe per linker instead of a
+ shared one."""
+ if len(args) < 1:
+ raise Exception("Not enough arguments")
- def __exit__(self, type, value, traceback):
- windll.kernel32.ReleaseMutex(self.mutex)
- windll.kernel32.CloseHandle(self.mutex)
+ if args[0] != 'link.exe':
+ return
+ # Use the output filename passed to the linker to generate an endpoint name
+ # for mspdbsrv.exe.
+ endpoint_name = None
+ for arg in args:
+ m = _LINK_EXE_OUT_ARG.match(arg)
+ if m:
+ endpoint_name = '%s_%d' % (m.group('out'), os.getpid())
+ break
-class WinTool(object):
- """This class performs all the Windows tooling steps. The methods can either
- be executed directly, or dispatched from an argument list."""
+ if endpoint_name is None:
+ return
+
+ # Adds the appropriate environment variable. This will be read by link.exe
+ # to know which instance of mspdbsrv.exe it should connect to (if it's
+ # not set then the default endpoint is used).
+ env['_MSPDBSRV_ENDPOINT_'] = endpoint_name
def Dispatch(self, args):
"""Dispatches a string command to a method."""
@@ -91,20 +96,100 @@ class WinTool(object):
else:
shutil.copy2(source, dest)
- def ExecLinkWrapper(self, arch, *args):
+ def ExecLinkWrapper(self, arch, use_separate_mspdbsrv, *args):
"""Filter diagnostic output from link that looks like:
' Creating library ui.dll.lib and object ui.dll.exp'
This happens when there are exports from the dll or exe.
"""
- with LinkLock():
- env = self._GetEnv(arch)
- popen = subprocess.Popen(args, shell=True, env=env,
- stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
- out, _ = popen.communicate()
- for line in out.splitlines():
- if not line.startswith(' Creating library '):
- print line
- return popen.returncode
+ env = self._GetEnv(arch)
+ if use_separate_mspdbsrv == 'True':
+ self._UseSeparateMspdbsrv(env, args)
+ link = subprocess.Popen(args,
+ shell=True,
+ env=env,
+ stdout=subprocess.PIPE,
+ stderr=subprocess.STDOUT)
+ out, _ = link.communicate()
+ for line in out.splitlines():
+ if not line.startswith(' Creating library '):
+ print line
+ return link.returncode
+
+ def ExecLinkWithManifests(self, arch, embed_manifest, out, ldcmd, resname,
+ mt, rc, intermediate_manifest, *manifests):
+ """A wrapper for handling creating a manifest resource and then executing
+ a link command."""
+ # The 'normal' way to do manifests is to have link generate a manifest
+ # based on gathering dependencies from the object files, then merge that
+ # manifest with other manifests supplied as sources, convert the merged
+ # manifest to a resource, and then *relink*, including the compiled
+ # version of the manifest resource. This breaks incremental linking, and
+ # is generally overly complicated. Instead, we merge all the manifests
+ # provided (along with one that includes what would normally be in the
+ # linker-generated one, see msvs_emulation.py), and include that into the
+ # first and only link. We still tell link to generate a manifest, but we
+ # only use that to assert that our simpler process did not miss anything.
+ variables = {
+ 'python': sys.executable,
+ 'arch': arch,
+ 'out': out,
+ 'ldcmd': ldcmd,
+ 'resname': resname,
+ 'mt': mt,
+ 'rc': rc,
+ 'intermediate_manifest': intermediate_manifest,
+ 'manifests': ' '.join(manifests),
+ }
+ add_to_ld = ''
+ if manifests:
+ subprocess.check_call(
+ '%(python)s gyp-win-tool manifest-wrapper %(arch)s %(mt)s -nologo '
+ '-manifest %(manifests)s -out:%(out)s.manifest' % variables)
+ if embed_manifest == 'True':
+ subprocess.check_call(
+ '%(python)s gyp-win-tool manifest-to-rc %(arch)s %(out)s.manifest'
+ ' %(out)s.manifest.rc %(resname)s' % variables)
+ subprocess.check_call(
+ '%(python)s gyp-win-tool rc-wrapper %(arch)s %(rc)s '
+ '%(out)s.manifest.rc' % variables)
+ add_to_ld = ' %(out)s.manifest.res' % variables
+ subprocess.check_call(ldcmd + add_to_ld)
+
+ # Run mt.exe on the theoretically complete manifest we generated, merging
+ # it with the one the linker generated to confirm that the linker
+ # generated one does not add anything. This is strictly unnecessary for
+ # correctness, it's only to verify that e.g. /MANIFESTDEPENDENCY was not
+ # used in a #pragma comment.
+ if manifests:
+ # Merge the intermediate one with ours to .assert.manifest, then check
+ # that .assert.manifest is identical to ours.
+ subprocess.check_call(
+ '%(python)s gyp-win-tool manifest-wrapper %(arch)s %(mt)s -nologo '
+ '-manifest %(out)s.manifest %(intermediate_manifest)s '
+ '-out:%(out)s.assert.manifest' % variables)
+ assert_manifest = '%(out)s.assert.manifest' % variables
+ our_manifest = '%(out)s.manifest' % variables
+ # Load and normalize the manifests. mt.exe sometimes removes whitespace,
+ # and sometimes doesn't unfortunately.
+ with open(our_manifest, 'rb') as our_f:
+ with open(assert_manifest, 'rb') as assert_f:
+ our_data = our_f.read().translate(None, string.whitespace)
+ assert_data = assert_f.read().translate(None, string.whitespace)
+ if our_data != assert_data:
+ os.unlink(out)
+ def dump(filename):
+ sys.stderr.write('%s\n-----\n' % filename)
+ with open(filename, 'rb') as f:
+ sys.stderr.write(f.read() + '\n-----\n')
+ dump(intermediate_manifest)
+ dump(our_manifest)
+ dump(assert_manifest)
+ sys.stderr.write(
+ 'Linker generated manifest "%s" added to final manifest "%s" '
+ '(result in "%s"). '
+ 'Were /MANIFEST switches used in #pragma statements? ' % (
+ intermediate_manifest, our_manifest, assert_manifest))
+ return 1
def ExecManifestWrapper(self, arch, *args):
"""Run manifest tool with environment set. Strip out undesirable warning
@@ -119,6 +204,16 @@ class WinTool(object):
print line
return popen.returncode
+ def ExecManifestToRc(self, arch, *args):
+ """Creates a resource file pointing a SxS assembly manifest.
+ |args| is tuple containing path to resource file, path to manifest file
+ and resource name which can be "1" (for executables) or "2" (for DLLs)."""
+ manifest_path, resource_path, resource_name = args
+ with open(resource_path, 'wb') as output:
+ output.write('#include <windows.h>\n%s RT_MANIFEST "%s"' % (
+ resource_name,
+ os.path.abspath(manifest_path).replace('\\', '/')))
+
def ExecMidlWrapper(self, arch, outdir, tlb, h, dlldata, iid, proxy, idl,
*flags):
"""Filter noisy filenames output from MIDL compile step that isn't
@@ -183,11 +278,14 @@ class WinTool(object):
"""Runs an action command line from a response file using the environment
for |arch|. If |dir| is supplied, use that as the working directory."""
env = self._GetEnv(arch)
+ # TODO(scottmg): This is a temporary hack to get some specific variables
+ # through to actions that are set after gyp-time. http://crbug.com/333738.
+ for k, v in os.environ.iteritems():
+ if k not in env:
+ env[k] = v
args = open(rspfile).read()
dir = dir[0] if dir else None
- popen = subprocess.Popen(args, shell=True, env=env, cwd=dir)
- popen.wait()
- return popen.returncode
+ return subprocess.call(args, shell=True, env=env, cwd=dir)
if __name__ == '__main__':
sys.exit(main(sys.argv[1:]))
diff --git a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/xcode_emulation.py b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/xcode_emulation.py
index ef5b46046..30f27d583 100644
--- a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/xcode_emulation.py
+++ b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/xcode_emulation.py
@@ -7,21 +7,42 @@ This module contains classes that help to emulate xcodebuild behavior on top of
other build systems, such as make and ninja.
"""
+import copy
import gyp.common
+import os
import os.path
import re
import shlex
+import subprocess
+import sys
+import tempfile
+from gyp.common import GypError
class XcodeSettings(object):
"""A class that understands the gyp 'xcode_settings' object."""
- # Computed lazily by _GetSdkBaseDir(). Shared by all XcodeSettings, so cached
+ # Populated lazily by _SdkPath(). Shared by all XcodeSettings, so cached
# at class-level for efficiency.
- _sdk_base_dir = None
+ _sdk_path_cache = {}
+ _sdk_root_cache = {}
+
+ # Populated lazily by GetExtraPlistItems(). Shared by all XcodeSettings, so
+ # cached at class-level for efficiency.
+ _plist_cache = {}
+
+ # Populated lazily by GetIOSPostbuilds. Shared by all XcodeSettings, so
+ # cached at class-level for efficiency.
+ _codesigning_key_cache = {}
+
+ # Populated lazily by _XcodeVersion. Shared by all XcodeSettings, so cached
+ # at class-level for efficiency.
+ _xcode_version_cache = ()
def __init__(self, spec):
self.spec = spec
+ self.isIOS = False
+
# Per-target 'xcode_settings' are pushed down into configs earlier by gyp.
# This means self.xcode_settings[config] always contains all settings
# for that config -- the per-target settings as well. Settings that are
@@ -30,6 +51,10 @@ class XcodeSettings(object):
configs = spec['configurations']
for configname, config in configs.iteritems():
self.xcode_settings[configname] = config.get('xcode_settings', {})
+ self._ConvertConditionalKeys(configname)
+ if self.xcode_settings[configname].get('IPHONEOS_DEPLOYMENT_TARGET',
+ None):
+ self.isIOS = True
# This is only non-None temporarily during the execution of some methods.
self.configname = None
@@ -37,6 +62,23 @@ class XcodeSettings(object):
# Used by _AdjustLibrary to match .a and .dylib entries in libraries.
self.library_re = re.compile(r'^lib([^/]+)\.(a|dylib)$')
+ def _ConvertConditionalKeys(self, configname):
+ """Converts or warns on conditional keys. Xcode supports conditional keys,
+ such as CODE_SIGN_IDENTITY[sdk=iphoneos*]. This is a partial implementation
+ with some keys converted while the rest force a warning."""
+ settings = self.xcode_settings[configname]
+ conditional_keys = [key for key in settings if key.endswith(']')]
+ for key in conditional_keys:
+ # If you need more, speak up at http://crbug.com/122592
+ if key.endswith("[sdk=iphoneos*]"):
+ if configname.endswith("iphoneos"):
+ new_key = key.split("[")[0]
+ settings[new_key] = settings[key]
+ else:
+ print 'Warning: Conditional keys not implemented, ignoring:', \
+ ' '.join(conditional_keys)
+ del settings[key]
+
def _Settings(self):
assert self.configname
return self.xcode_settings[self.configname]
@@ -76,7 +118,7 @@ class XcodeSettings(object):
'WRAPPER_EXTENSION', default=default_wrapper_extension)
return '.' + self.spec.get('product_extension', wrapper_extension)
elif self.spec['type'] == 'executable':
- return '.app'
+ return '.' + self.spec.get('product_extension', 'app')
else:
assert False, "Don't know extension for '%s', target '%s'" % (
self.spec['type'], self.spec['target_name'])
@@ -101,6 +143,8 @@ class XcodeSettings(object):
def GetBundleContentsFolderPath(self):
"""Returns the qualified path to the bundle's contents folder. E.g.
Chromium.app/Contents or Foo.bundle/Versions/A. Only valid for bundles."""
+ if self.isIOS:
+ return self.GetWrapperName()
assert self._IsBundle()
if self.spec['type'] == 'shared_library':
return os.path.join(
@@ -113,6 +157,8 @@ class XcodeSettings(object):
"""Returns the qualified path to the bundle's resource folder. E.g.
Chromium.app/Contents/Resources. Only valid for bundles."""
assert self._IsBundle()
+ if self.isIOS:
+ return self.GetBundleContentsFolderPath()
return os.path.join(self.GetBundleContentsFolderPath(), 'Resources')
def GetBundlePlistPath(self):
@@ -157,7 +203,7 @@ class XcodeSettings(object):
"""Returns the name of the bundle binary of by this target.
E.g. Chromium.app/Contents/MacOS/Chromium. Only valid for bundles."""
assert self._IsBundle()
- if self.spec['type'] in ('shared_library'):
+ if self.spec['type'] in ('shared_library') or self.isIOS:
path = self.GetBundleContentsFolderPath()
elif self.spec['type'] in ('executable', 'loadable_module'):
path = os.path.join(self.GetBundleContentsFolderPath(), 'MacOS')
@@ -219,36 +265,62 @@ class XcodeSettings(object):
else:
return self._GetStandaloneBinaryPath()
- def _GetSdkBaseDir(self):
- """Returns the root of the 'Developer' directory. On Xcode 4.2 and prior,
- this is usually just /Developer. Xcode 4.3 moved that folder into the Xcode
- bundle."""
- if not XcodeSettings._sdk_base_dir:
- import subprocess
- job = subprocess.Popen(['xcode-select', '-print-path'],
- stdout=subprocess.PIPE,
- stderr=subprocess.STDOUT)
- out, err = job.communicate()
- if job.returncode != 0:
- print out
- raise Exception('Error %d running xcode-select' % job.returncode)
- # The Developer folder moved in Xcode 4.3.
- xcode43_sdk_path = os.path.join(
- out.rstrip(), 'Platforms/MacOSX.platform/Developer/SDKs')
- if os.path.isdir(xcode43_sdk_path):
- XcodeSettings._sdk_base_dir = xcode43_sdk_path
- else:
- XcodeSettings._sdk_base_dir = os.path.join(out.rstrip(), 'SDKs')
- return XcodeSettings._sdk_base_dir
+ def GetActiveArchs(self, configname):
+ """Returns the architectures this target should be built for."""
+ # TODO: Look at VALID_ARCHS, ONLY_ACTIVE_ARCH; possibly set
+ # CURRENT_ARCH / NATIVE_ARCH env vars?
+ return self.xcode_settings[configname].get('ARCHS', [self._DefaultArch()])
+
+ def _GetStdout(self, cmdlist):
+ job = subprocess.Popen(cmdlist, stdout=subprocess.PIPE)
+ out = job.communicate()[0]
+ if job.returncode != 0:
+ sys.stderr.write(out + '\n')
+ raise GypError('Error %d running %s' % (job.returncode, cmdlist[0]))
+ return out.rstrip('\n')
+
+ def _GetSdkVersionInfoItem(self, sdk, infoitem):
+ # xcodebuild requires Xcode and can't run on Command Line Tools-only
+ # systems from 10.7 onward.
+ # Since the CLT has no SDK paths anyway, returning None is the
+ # most sensible route and should still do the right thing.
+ try:
+ return self._GetStdout(['xcodebuild', '-version', '-sdk', sdk, infoitem])
+ except:
+ pass
- def _SdkPath(self):
- sdk_root = self.GetPerTargetSetting('SDKROOT', default='macosx10.5')
- if sdk_root.startswith('macosx'):
- return os.path.join(self._GetSdkBaseDir(),
- 'MacOSX' + sdk_root[len('macosx'):] + '.sdk')
- return sdk_root
+ def _SdkRoot(self, configname):
+ if configname is None:
+ configname = self.configname
+ return self.GetPerConfigSetting('SDKROOT', configname, default='')
+
+ def _SdkPath(self, configname=None):
+ sdk_root = self._SdkRoot(configname)
+ if sdk_root.startswith('/'):
+ return sdk_root
+ return self._XcodeSdkPath(sdk_root)
+
+ def _XcodeSdkPath(self, sdk_root):
+ if sdk_root not in XcodeSettings._sdk_path_cache:
+ sdk_path = self._GetSdkVersionInfoItem(sdk_root, 'Path')
+ XcodeSettings._sdk_path_cache[sdk_root] = sdk_path
+ if sdk_root:
+ XcodeSettings._sdk_root_cache[sdk_path] = sdk_root
+ return XcodeSettings._sdk_path_cache[sdk_root]
+
+ def _AppendPlatformVersionMinFlags(self, lst):
+ self._Appendf(lst, 'MACOSX_DEPLOYMENT_TARGET', '-mmacosx-version-min=%s')
+ if 'IPHONEOS_DEPLOYMENT_TARGET' in self._Settings():
+ # TODO: Implement this better?
+ sdk_path_basename = os.path.basename(self._SdkPath())
+ if sdk_path_basename.lower().startswith('iphonesimulator'):
+ self._Appendf(lst, 'IPHONEOS_DEPLOYMENT_TARGET',
+ '-mios-simulator-version-min=%s')
+ else:
+ self._Appendf(lst, 'IPHONEOS_DEPLOYMENT_TARGET',
+ '-miphoneos-version-min=%s')
- def GetCflags(self, configname):
+ def GetCflags(self, configname, arch=None):
"""Returns flags that need to be added to .c, .cc, .m, and .mm
compilations."""
# This functions (and the similar ones below) do not offer complete
@@ -258,9 +330,12 @@ class XcodeSettings(object):
cflags = []
sdk_root = self._SdkPath()
- if 'SDKROOT' in self._Settings():
+ if 'SDKROOT' in self._Settings() and sdk_root:
cflags.append('-isysroot %s' % sdk_root)
+ if self._Test('CLANG_WARN_CONSTANT_CONVERSION', 'YES', default='NO'):
+ cflags.append('-Wconstant-conversion')
+
if self._Test('GCC_CHAR_IS_UNSIGNED_CHAR', 'YES', default='NO'):
cflags.append('-funsigned-char')
@@ -292,6 +367,11 @@ class XcodeSettings(object):
else:
raise NotImplementedError('Unknown debug format %s' % dbg_format)
+ if self._Settings().get('GCC_STRICT_ALIASING') == 'YES':
+ cflags.append('-fstrict-aliasing')
+ elif self._Settings().get('GCC_STRICT_ALIASING') == 'NO':
+ cflags.append('-fno-strict-aliasing')
+
if self._Test('GCC_SYMBOLS_PRIVATE_EXTERN', 'YES', default='NO'):
cflags.append('-fvisibility=hidden')
@@ -301,7 +381,7 @@ class XcodeSettings(object):
if self._Test('GCC_WARN_ABOUT_MISSING_NEWLINE', 'YES', default='NO'):
cflags.append('-Wnewline-eof')
- self._Appendf(cflags, 'MACOSX_DEPLOYMENT_TARGET', '-mmacosx-version-min=%s')
+ self._AppendPlatformVersionMinFlags(cflags)
# TODO:
if self._Test('COPY_PHASE_STRIP', 'YES', default='NO'):
@@ -313,7 +393,10 @@ class XcodeSettings(object):
self._WarnUnimplemented('MACH_O_TYPE')
self._WarnUnimplemented('PRODUCT_TYPE')
- archs = self._Settings().get('ARCHS', ['i386'])
+ if arch is not None:
+ archs = [arch]
+ else:
+ archs = self._Settings().get('ARCHS', [self._DefaultArch()])
if len(archs) != 1:
# TODO: Supporting fat binaries will be annoying.
self._WarnUnimplemented('ARCHS')
@@ -333,10 +416,14 @@ class XcodeSettings(object):
cflags += self._Settings().get('WARNING_CFLAGS', [])
+ if sdk_root:
+ framework_root = sdk_root
+ else:
+ framework_root = ''
config = self.spec['configurations'][self.configname]
framework_dirs = config.get('mac_framework_dirs', [])
for directory in framework_dirs:
- cflags.append('-F' + directory.replace('$(SDKROOT)', sdk_root))
+ cflags.append('-F' + directory.replace('$(SDKROOT)', framework_root))
self.configname = None
return cflags
@@ -345,7 +432,10 @@ class XcodeSettings(object):
"""Returns flags that need to be added to .c, and .m compilations."""
self.configname = configname
cflags_c = []
- self._Appendf(cflags_c, 'GCC_C_LANGUAGE_STANDARD', '-std=%s')
+ if self._Settings().get('GCC_C_LANGUAGE_STANDARD', '') == 'ansi':
+ cflags_c.append('-ansi')
+ else:
+ self._Appendf(cflags_c, 'GCC_C_LANGUAGE_STANDARD', '-std=%s')
cflags_c += self._Settings().get('OTHER_CFLAGS', [])
self.configname = None
return cflags_c
@@ -354,6 +444,16 @@ class XcodeSettings(object):
"""Returns flags that need to be added to .cc, and .mm compilations."""
self.configname = configname
cflags_cc = []
+
+ clang_cxx_language_standard = self._Settings().get(
+ 'CLANG_CXX_LANGUAGE_STANDARD')
+ # Note: Don't make c++0x to c++11 so that c++0x can be used with older
+ # clangs that don't understand c++11 yet (like Xcode 4.2's).
+ if clang_cxx_language_standard:
+ cflags_cc.append('-std=%s' % clang_cxx_language_standard)
+
+ self._Appendf(cflags_cc, 'CLANG_CXX_LIBRARY', '-stdlib=%s')
+
if self._Test('GCC_ENABLE_CPP_RTTI', 'NO', default='YES'):
cflags_cc.append('-fno-rtti')
if self._Test('GCC_ENABLE_CPP_EXCEPTIONS', 'NO', default='YES'):
@@ -362,6 +462,7 @@ class XcodeSettings(object):
cflags_cc.append('-fvisibility-inlines-hidden')
if self._Test('GCC_THREADSAFE_STATICS', 'NO', default='YES'):
cflags_cc.append('-fno-threadsafe-statics')
+ # Note: This flag is a no-op for clang, it only has an effect for gcc.
if self._Test('GCC_WARN_ABOUT_INVALID_OFFSETOF_MACRO', 'NO', default='YES'):
cflags_cc.append('-Wno-invalid-offsetof')
@@ -387,13 +488,22 @@ class XcodeSettings(object):
elif gc_policy == 'required':
flags.append('-fobjc-gc-only')
+ def _AddObjectiveCARCFlags(self, flags):
+ if self._Test('CLANG_ENABLE_OBJC_ARC', 'YES', default='NO'):
+ flags.append('-fobjc-arc')
+
+ def _AddObjectiveCMissingPropertySynthesisFlags(self, flags):
+ if self._Test('CLANG_WARN_OBJC_MISSING_PROPERTY_SYNTHESIS',
+ 'YES', default='NO'):
+ flags.append('-Wobjc-missing-property-synthesis')
+
def GetCflagsObjC(self, configname):
"""Returns flags that need to be added to .m compilations."""
self.configname = configname
cflags_objc = []
-
self._AddObjectiveCGarbageCollectionFlags(cflags_objc)
-
+ self._AddObjectiveCARCFlags(cflags_objc)
+ self._AddObjectiveCMissingPropertySynthesisFlags(cflags_objc)
self.configname = None
return cflags_objc
@@ -402,6 +512,8 @@ class XcodeSettings(object):
self.configname = configname
cflags_objcc = []
self._AddObjectiveCGarbageCollectionFlags(cflags_objcc)
+ self._AddObjectiveCARCFlags(cflags_objcc)
+ self._AddObjectiveCMissingPropertySynthesisFlags(cflags_objcc)
if self._Test('GCC_OBJC_CALL_CXX_CDTORS', 'YES', default='NO'):
cflags_objcc.append('-fobjc-call-cxx-cdtors')
self.configname = None
@@ -496,7 +608,7 @@ class XcodeSettings(object):
ldflag = '-L' + gyp_to_build_path(ldflag[len('-L'):])
return ldflag
- def GetLdflags(self, configname, product_dir, gyp_to_build_path):
+ def GetLdflags(self, configname, product_dir, gyp_to_build_path, arch=None):
"""Returns flags that need to be passed to the linker.
Args:
@@ -524,9 +636,10 @@ class XcodeSettings(object):
ldflags, 'DYLIB_COMPATIBILITY_VERSION', '-compatibility_version %s')
self._Appendf(
ldflags, 'DYLIB_CURRENT_VERSION', '-current_version %s')
- self._Appendf(
- ldflags, 'MACOSX_DEPLOYMENT_TARGET', '-mmacosx-version-min=%s')
- if 'SDKROOT' in self._Settings():
+
+ self._AppendPlatformVersionMinFlags(ldflags)
+
+ if 'SDKROOT' in self._Settings() and self._SdkPath():
ldflags.append('-isysroot ' + self._SdkPath())
for library_path in self._Settings().get('LIBRARY_SEARCH_PATHS', []):
@@ -537,7 +650,10 @@ class XcodeSettings(object):
'-Wl,' + gyp_to_build_path(
self._Settings()['ORDER_FILE']))
- archs = self._Settings().get('ARCHS', ['i386'])
+ if arch is not None:
+ archs = [arch]
+ else:
+ archs = self._Settings().get('ARCHS', [self._DefaultArch()])
if len(archs) != 1:
# TODO: Supporting fat binaries will be annoying.
self._WarnUnimplemented('ARCHS')
@@ -548,16 +664,19 @@ class XcodeSettings(object):
ldflags.append('-L' + product_dir)
install_name = self.GetInstallName()
- if install_name:
+ if install_name and self.spec['type'] != 'loadable_module':
ldflags.append('-install_name ' + install_name.replace(' ', r'\ '))
for rpath in self._Settings().get('LD_RUNPATH_SEARCH_PATHS', []):
ldflags.append('-Wl,-rpath,' + rpath)
+ sdk_root = self._SdkPath()
+ if not sdk_root:
+ sdk_root = ''
config = self.spec['configurations'][self.configname]
framework_dirs = config.get('mac_framework_dirs', [])
for directory in framework_dirs:
- ldflags.append('-F' + directory.replace('$(SDKROOT)', self._SdkPath()))
+ ldflags.append('-F' + directory.replace('$(SDKROOT)', sdk_root))
self.configname = None
return ldflags
@@ -595,19 +714,25 @@ class XcodeSettings(object):
del result[key]
return result
+ def GetPerConfigSetting(self, setting, configname, default=None):
+ if configname in self.xcode_settings:
+ return self.xcode_settings[configname].get(setting, default)
+ else:
+ return self.GetPerTargetSetting(setting, default)
+
def GetPerTargetSetting(self, setting, default=None):
"""Tries to get xcode_settings.setting from spec. Assumes that the setting
has the same value in all configurations and throws otherwise."""
- first_pass = True
+ is_first_pass = True
result = None
for configname in sorted(self.xcode_settings.keys()):
- if first_pass:
+ if is_first_pass:
result = self.xcode_settings[configname].get(setting, None)
- first_pass = False
+ is_first_pass = False
else:
assert result == self.xcode_settings[configname].get(setting, None), (
"Expected per-target setting for '%s', got per-config setting "
- "(target %s)" % (setting, spec['target_name']))
+ "(target %s)" % (setting, self.spec['target_name']))
if result is None:
return default
return result
@@ -623,7 +748,7 @@ class XcodeSettings(object):
self._Test('STRIP_INSTALLED_PRODUCT', 'YES', default='NO')):
default_strip_style = 'debugging'
- if self._IsBundle():
+ if self.spec['type'] == 'loadable_module' and self._IsBundle():
default_strip_style = 'non-global'
elif self.spec['type'] == 'executable':
default_strip_style = 'all'
@@ -665,7 +790,8 @@ class XcodeSettings(object):
self.configname = None
return result
- def GetTargetPostbuilds(self, configname, output, output_binary, quiet=False):
+ def _GetTargetPostbuilds(self, configname, output, output_binary,
+ quiet=False):
"""Returns a list of shell commands that contain the shell commands
to run as postbuilds for this target, before the actual postbuilds."""
# dSYMs need to build before stripping happens.
@@ -673,7 +799,58 @@ class XcodeSettings(object):
self._GetDebugInfoPostbuilds(configname, output, output_binary, quiet) +
self._GetStripPostbuilds(configname, output_binary, quiet))
- def _AdjustLibrary(self, library):
+ def _GetIOSPostbuilds(self, configname, output_binary):
+ """Return a shell command to codesign the iOS output binary so it can
+ be deployed to a device. This should be run as the very last step of the
+ build."""
+ if not (self.isIOS and self.spec['type'] == "executable"):
+ return []
+
+ settings = self.xcode_settings[configname]
+ key = self._GetIOSCodeSignIdentityKey(settings)
+ if not key:
+ return []
+
+ # Warn for any unimplemented signing xcode keys.
+ unimpl = ['OTHER_CODE_SIGN_FLAGS']
+ unimpl = set(unimpl) & set(self.xcode_settings[configname].keys())
+ if unimpl:
+ print 'Warning: Some codesign keys not implemented, ignoring: %s' % (
+ ', '.join(sorted(unimpl)))
+
+ return ['%s code-sign-bundle "%s" "%s" "%s" "%s"' % (
+ os.path.join('${TARGET_BUILD_DIR}', 'gyp-mac-tool'), key,
+ settings.get('CODE_SIGN_RESOURCE_RULES_PATH', ''),
+ settings.get('CODE_SIGN_ENTITLEMENTS', ''),
+ settings.get('PROVISIONING_PROFILE', ''))
+ ]
+
+ def _GetIOSCodeSignIdentityKey(self, settings):
+ identity = settings.get('CODE_SIGN_IDENTITY')
+ if not identity:
+ return None
+ if identity not in XcodeSettings._codesigning_key_cache:
+ output = subprocess.check_output(
+ ['security', 'find-identity', '-p', 'codesigning', '-v'])
+ for line in output.splitlines():
+ if identity in line:
+ fingerprint = line.split()[1]
+ cache = XcodeSettings._codesigning_key_cache
+ assert identity not in cache or fingerprint == cache[identity], (
+ "Multiple codesigning fingerprints for identity: %s" % identity)
+ XcodeSettings._codesigning_key_cache[identity] = fingerprint
+ return XcodeSettings._codesigning_key_cache.get(identity, '')
+
+ def AddImplicitPostbuilds(self, configname, output, output_binary,
+ postbuilds=[], quiet=False):
+ """Returns a list of shell commands that should run before and after
+ |postbuilds|."""
+ assert output_binary is not None
+ pre = self._GetTargetPostbuilds(configname, output, output_binary, quiet)
+ post = self._GetIOSPostbuilds(configname, output_binary)
+ return pre + postbuilds + post
+
+ def _AdjustLibrary(self, library, config_name=None):
if library.endswith('.framework'):
l = '-framework ' + os.path.splitext(os.path.basename(library))[0]
else:
@@ -682,15 +859,171 @@ class XcodeSettings(object):
l = '-l' + m.group(1)
else:
l = library
- return l.replace('$(SDKROOT)', self._SdkPath())
- def AdjustLibraries(self, libraries):
+ sdk_root = self._SdkPath(config_name)
+ if not sdk_root:
+ sdk_root = ''
+ return l.replace('$(SDKROOT)', sdk_root)
+
+ def AdjustLibraries(self, libraries, config_name=None):
"""Transforms entries like 'Cocoa.framework' in libraries into entries like
'-framework Cocoa', 'libcrypto.dylib' into '-lcrypto', etc.
"""
- libraries = [ self._AdjustLibrary(library) for library in libraries]
+ libraries = [self._AdjustLibrary(library, config_name)
+ for library in libraries]
return libraries
+ def _BuildMachineOSBuild(self):
+ return self._GetStdout(['sw_vers', '-buildVersion'])
+
+ # This method ported from the logic in Homebrew's CLT version check
+ def _CLTVersion(self):
+ # pkgutil output looks like
+ # package-id: com.apple.pkg.CLTools_Executables
+ # version: 5.0.1.0.1.1382131676
+ # volume: /
+ # location: /
+ # install-time: 1382544035
+ # groups: com.apple.FindSystemFiles.pkg-group com.apple.DevToolsBoth.pkg-group com.apple.DevToolsNonRelocatableShared.pkg-group
+ STANDALONE_PKG_ID = "com.apple.pkg.DeveloperToolsCLILeo"
+ FROM_XCODE_PKG_ID = "com.apple.pkg.DeveloperToolsCLI"
+ MAVERICKS_PKG_ID = "com.apple.pkg.CLTools_Executables"
+
+ regex = re.compile('version: (?P<version>.+)')
+ for key in [MAVERICKS_PKG_ID, STANDALONE_PKG_ID, FROM_XCODE_PKG_ID]:
+ try:
+ output = self._GetStdout(['/usr/sbin/pkgutil', '--pkg-info', key])
+ return re.search(regex, output).groupdict()['version']
+ except:
+ continue
+
+ def _XcodeVersion(self):
+ # `xcodebuild -version` output looks like
+ # Xcode 4.6.3
+ # Build version 4H1503
+ # or like
+ # Xcode 3.2.6
+ # Component versions: DevToolsCore-1809.0; DevToolsSupport-1806.0
+ # BuildVersion: 10M2518
+ # Convert that to '0463', '4H1503'.
+ if len(XcodeSettings._xcode_version_cache) == 0:
+ try:
+ version_list = self._GetStdout(['xcodebuild', '-version']).splitlines()
+ # In some circumstances xcodebuild exits 0 but doesn't return
+ # the right results; for example, a user on 10.7 or 10.8 with
+ # a bogus path set via xcode-select
+ # In that case this may be a CLT-only install so fall back to
+ # checking that version.
+ if len(version_list) < 2:
+ raise GypError, "xcodebuild returned unexpected results"
+ except:
+ version = self._CLTVersion()
+ if version:
+ version = re.match('(\d\.\d\.?\d*)', version).groups()[0]
+ else:
+ raise GypError, "No Xcode or CLT version detected!"
+ # The CLT has no build information, so we return an empty string.
+ version_list = [version, '']
+ version = version_list[0]
+ build = version_list[-1]
+ # Be careful to convert "4.2" to "0420":
+ version = version.split()[-1].replace('.', '')
+ version = (version + '0' * (3 - len(version))).zfill(4)
+ if build:
+ build = build.split()[-1]
+ XcodeSettings._xcode_version_cache = (version, build)
+ return XcodeSettings._xcode_version_cache
+
+ def _XcodeIOSDeviceFamily(self, configname):
+ family = self.xcode_settings[configname].get('TARGETED_DEVICE_FAMILY', '1')
+ return [int(x) for x in family.split(',')]
+
+ def GetExtraPlistItems(self, configname=None):
+ """Returns a dictionary with extra items to insert into Info.plist."""
+ if configname not in XcodeSettings._plist_cache:
+ cache = {}
+ cache['BuildMachineOSBuild'] = self._BuildMachineOSBuild()
+
+ xcode, xcode_build = self._XcodeVersion()
+ cache['DTXcode'] = xcode
+ cache['DTXcodeBuild'] = xcode_build
+
+ sdk_root = self._SdkRoot(configname)
+ if not sdk_root:
+ sdk_root = self._DefaultSdkRoot()
+ cache['DTSDKName'] = sdk_root
+ if xcode >= '0430':
+ cache['DTSDKBuild'] = self._GetSdkVersionInfoItem(
+ sdk_root, 'ProductBuildVersion')
+ else:
+ cache['DTSDKBuild'] = cache['BuildMachineOSBuild']
+
+ if self.isIOS:
+ cache['DTPlatformName'] = cache['DTSDKName']
+ if configname.endswith("iphoneos"):
+ cache['DTPlatformVersion'] = self._GetSdkVersionInfoItem(
+ sdk_root, 'ProductVersion')
+ cache['CFBundleSupportedPlatforms'] = ['iPhoneOS']
+ else:
+ cache['CFBundleSupportedPlatforms'] = ['iPhoneSimulator']
+ XcodeSettings._plist_cache[configname] = cache
+
+ # Include extra plist items that are per-target, not per global
+ # XcodeSettings.
+ items = dict(XcodeSettings._plist_cache[configname])
+ if self.isIOS:
+ items['UIDeviceFamily'] = self._XcodeIOSDeviceFamily(configname)
+ return items
+
+ def _DefaultSdkRoot(self):
+ """Returns the default SDKROOT to use.
+
+ Prior to version 5.0.0, if SDKROOT was not explicitly set in the Xcode
+ project, then the environment variable was empty. Starting with this
+ version, Xcode uses the name of the newest SDK installed.
+ """
+ if self._XcodeVersion() < '0500':
+ return ''
+ default_sdk_path = self._XcodeSdkPath('')
+ default_sdk_root = XcodeSettings._sdk_root_cache.get(default_sdk_path)
+ if default_sdk_root:
+ return default_sdk_root
+ try:
+ all_sdks = self._GetStdout(['xcodebuild', '-showsdks'])
+ except:
+ # If xcodebuild fails, there will be no valid SDKs
+ return ''
+ for line in all_sdks.splitlines():
+ items = line.split()
+ if len(items) >= 3 and items[-2] == '-sdk':
+ sdk_root = items[-1]
+ sdk_path = self._XcodeSdkPath(sdk_root)
+ if sdk_path == default_sdk_path:
+ return sdk_root
+ return ''
+
+ def _DefaultArch(self):
+ # For Mac projects, Xcode changed the default value used when ARCHS is not
+ # set from "i386" to "x86_64".
+ #
+ # For iOS projects, if ARCHS is unset, it defaults to "armv7 armv7s" when
+ # building for a device, and the simulator binaries are always build for
+ # "i386".
+ #
+ # For new projects, ARCHS is set to $(ARCHS_STANDARD_INCLUDING_64_BIT),
+ # which correspond to "armv7 armv7s arm64", and when building the simulator
+ # the architecture is either "i386" or "x86_64" depending on the simulated
+ # device (respectively 32-bit or 64-bit device).
+ #
+ # Since the value returned by this function is only used when ARCHS is not
+ # set, then on iOS we return "i386", as the default xcode project generator
+ # does not set ARCHS if it is not set in the .gyp file.
+ if self.isIOS:
+ return 'i386'
+ version, build = self._XcodeVersion()
+ if version >= '0500':
+ return 'x86_64'
+ return 'i386'
class MacPrefixHeader(object):
"""A class that helps with emulating Xcode's GCC_PREFIX_HEADER feature.
@@ -742,21 +1075,28 @@ class MacPrefixHeader(object):
self.header, lang)
self.header = gyp_path_to_build_path(self.header)
- def GetInclude(self, lang):
+ def _CompiledHeader(self, lang, arch):
+ assert self.compile_headers
+ h = self.compiled_headers[lang]
+ if arch:
+ h += '.' + arch
+ return h
+
+ def GetInclude(self, lang, arch=None):
"""Gets the cflags to include the prefix header for language |lang|."""
if self.compile_headers and lang in self.compiled_headers:
- return '-include %s' % self.compiled_headers[lang]
+ return '-include %s' % self._CompiledHeader(lang, arch)
elif self.header:
return '-include %s' % self.header
else:
return ''
- def _Gch(self, lang):
+ def _Gch(self, lang, arch):
"""Returns the actual file name of the prefix header for language |lang|."""
assert self.compile_headers
- return self.compiled_headers[lang] + '.gch'
+ return self._CompiledHeader(lang, arch) + '.gch'
- def GetObjDependencies(self, sources, objs):
+ def GetObjDependencies(self, sources, objs, arch=None):
"""Given a list of source files and the corresponding object files, returns
a list of (source, object, gch) tuples, where |gch| is the build-directory
relative path to the gch file each object file depends on. |compilable[i]|
@@ -774,20 +1114,20 @@ class MacPrefixHeader(object):
'.mm': 'mm',
}.get(ext, None)
if lang:
- result.append((source, obj, self._Gch(lang)))
+ result.append((source, obj, self._Gch(lang, arch)))
return result
- def GetPchBuildCommands(self):
+ def GetPchBuildCommands(self, arch=None):
"""Returns [(path_to_gch, language_flag, language, header)].
|path_to_gch| and |header| are relative to the build directory.
"""
if not self.header or not self.compile_headers:
return []
return [
- (self._Gch('c'), '-x c-header', 'c', self.header),
- (self._Gch('cc'), '-x c++-header', 'cc', self.header),
- (self._Gch('m'), '-x objective-c-header', 'm', self.header),
- (self._Gch('mm'), '-x objective-c++-header', 'mm', self.header),
+ (self._Gch('c', arch), '-x c-header', 'c', self.header),
+ (self._Gch('cc', arch), '-x c++-header', 'cc', self.header),
+ (self._Gch('m', arch), '-x objective-c-header', 'm', self.header),
+ (self._Gch('mm', arch), '-x objective-c++-header', 'mm', self.header),
]
@@ -853,14 +1193,17 @@ def GetMacBundleResources(product_dir, xcode_settings, resources):
output = os.path.join(output, res_parts[1])
# Compiled XIB files are referred to by .nib.
if output.endswith('.xib'):
- output = output[0:-3] + 'nib'
+ output = os.path.splitext(output)[0] + '.nib'
+ # Compiled storyboard files are referred to by .storyboardc.
+ if output.endswith('.storyboard'):
+ output = os.path.splitext(output)[0] + '.storyboardc'
yield output, res
def GetMacInfoPlist(product_dir, xcode_settings, gyp_path_to_build_path):
"""Returns (info_plist, dest_plist, defines, extra_env), where:
- * |info_plist| is the sourc plist path, relative to the
+ * |info_plist| is the source plist path, relative to the
build directory,
* |dest_plist| is the destination plist path, relative to the
build directory,
@@ -939,8 +1282,8 @@ def _GetXcodeEnv(xcode_settings, built_products_dir, srcroot, configuration,
'TARGET_BUILD_DIR' : built_products_dir,
'TEMP_DIR' : '${TMPDIR}',
}
- if xcode_settings.GetPerTargetSetting('SDKROOT'):
- env['SDKROOT'] = xcode_settings._SdkPath()
+ if xcode_settings.GetPerConfigSetting('SDKROOT', configuration):
+ env['SDKROOT'] = xcode_settings._SdkPath(configuration)
else:
env['SDKROOT'] = ''
@@ -1042,7 +1385,7 @@ def _TopologicallySortedEnvVarKeys(env):
order.reverse()
return order
except gyp.common.CycleError, e:
- raise Exception(
+ raise GypError(
'Xcode environment variables are cyclically dependent: ' + str(e.nodes))
@@ -1063,3 +1406,35 @@ def GetSpecPostbuildCommands(spec, quiet=False):
spec['target_name'], postbuild['postbuild_name']))
postbuilds.append(gyp.common.EncodePOSIXShellList(postbuild['action']))
return postbuilds
+
+
+def _HasIOSTarget(targets):
+ """Returns true if any target contains the iOS specific key
+ IPHONEOS_DEPLOYMENT_TARGET."""
+ for target_dict in targets.values():
+ for config in target_dict['configurations'].values():
+ if config.get('xcode_settings', {}).get('IPHONEOS_DEPLOYMENT_TARGET'):
+ return True
+ return False
+
+
+def _AddIOSDeviceConfigurations(targets):
+ """Clone all targets and append -iphoneos to the name. Configure these targets
+ to build for iOS devices."""
+ for target_dict in targets.values():
+ for config_name in target_dict['configurations'].keys():
+ config = target_dict['configurations'][config_name]
+ new_config_name = config_name + '-iphoneos'
+ new_config_dict = copy.deepcopy(config)
+ if target_dict['toolset'] == 'target':
+ new_config_dict['xcode_settings']['ARCHS'] = ['armv7']
+ new_config_dict['xcode_settings']['SDKROOT'] = 'iphoneos'
+ target_dict['configurations'][new_config_name] = new_config_dict
+ return targets
+
+def CloneConfigurationForDeviceAndEmulator(target_dicts):
+ """If |target_dicts| contains any iOS targets, automatically create -iphoneos
+ targets for iOS device builds."""
+ if _HasIOSTarget(target_dicts):
+ return _AddIOSDeviceConfigurations(target_dicts)
+ return target_dicts
diff --git a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/xcodeproj_file.py b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/xcodeproj_file.py
index ec4cb96bc..6e4a1dc69 100644
--- a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/xcodeproj_file.py
+++ b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/xcodeproj_file.py
@@ -169,7 +169,7 @@ _quoted = re.compile('___')
# This pattern should match any character that needs to be escaped by
# XCObject._EncodeString. See that function.
-_escaped = re.compile('[\\\\"]|[^ -~]')
+_escaped = re.compile('[\\\\"]|[\x00-\x1f]')
# Used by SourceTreeAndPathFromPath
@@ -557,9 +557,9 @@ class XCObject(object):
# 10 ^J NL is encoded as "\n"
# 13 ^M CR is encoded as "\n" rendering it indistinguishable from
# 10 ^J NL
- # All other nonprintable characters within the ASCII range (0 through 127
- # inclusive) are encoded as "\U001f" referring to the Unicode code point in
- # hexadecimal. For example, character 14 (^N SO) is encoded as "\U000e".
+ # All other characters within the ASCII control character range (0 through
+ # 31 inclusive) are encoded as "\U001f" referring to the Unicode code point
+ # in hexadecimal. For example, character 14 (^N SO) is encoded as "\U000e".
# Characters above the ASCII range are passed through to the output encoded
# as UTF-8 without any escaping. These mappings are contained in the
# class' _encode_transforms list.
@@ -1483,8 +1483,11 @@ class PBXFileReference(XCFileLikeElement, XCContainerPortal, XCRemoteObject):
'cpp': 'sourcecode.cpp.cpp',
'css': 'text.css',
'cxx': 'sourcecode.cpp.cpp',
+ 'dart': 'sourcecode',
'dylib': 'compiled.mach-o.dylib',
'framework': 'wrapper.framework',
+ 'gyp': 'sourcecode',
+ 'gypi': 'sourcecode',
'h': 'sourcecode.c.h',
'hxx': 'sourcecode.cpp.h',
'icns': 'image.icns',
@@ -1503,6 +1506,7 @@ class PBXFileReference(XCFileLikeElement, XCContainerPortal, XCRemoteObject):
'r': 'sourcecode.rez',
'rez': 'sourcecode.rez',
's': 'sourcecode.asm',
+ 'storyboard': 'file.storyboard',
'strings': 'text.plist.strings',
'ttf': 'file',
'xcconfig': 'text.xcconfig',
@@ -1511,8 +1515,15 @@ class PBXFileReference(XCFileLikeElement, XCContainerPortal, XCRemoteObject):
'y': 'sourcecode.yacc',
}
+ prop_map = {
+ 'dart': 'explicitFileType',
+ 'gyp': 'explicitFileType',
+ 'gypi': 'explicitFileType',
+ }
+
if is_dir:
file_type = 'folder'
+ prop_name = 'lastKnownFileType'
else:
basename = posixpath.basename(self._properties['path'])
(root, ext) = posixpath.splitext(basename)
@@ -1527,8 +1538,9 @@ class PBXFileReference(XCFileLikeElement, XCContainerPortal, XCRemoteObject):
# for unrecognized files not containing text. Xcode seems to choose
# based on content.
file_type = extension_map.get(ext, 'text')
+ prop_name = prop_map.get(ext, 'lastKnownFileType')
- self._properties['lastKnownFileType'] = file_type
+ self._properties[prop_name] = file_type
class PBXVariantGroup(PBXGroup, XCFileLikeElement):
@@ -2226,20 +2238,22 @@ class PBXNativeTarget(XCTarget):
# prefix : the prefix for the file name
# suffix : the suffix for the filen ame
_product_filetypes = {
- 'com.apple.product-type.application': ['wrapper.application',
- '', '.app'],
- 'com.apple.product-type.bundle': ['wrapper.cfbundle',
- '', '.bundle'],
- 'com.apple.product-type.framework': ['wrapper.framework',
- '', '.framework'],
- 'com.apple.product-type.library.dynamic': ['compiled.mach-o.dylib',
- 'lib', '.dylib'],
- 'com.apple.product-type.library.static': ['archive.ar',
- 'lib', '.a'],
- 'com.apple.product-type.tool': ['compiled.mach-o.executable',
- '', ''],
- 'com.googlecode.gyp.xcode.bundle': ['compiled.mach-o.dylib',
- '', '.so'],
+ 'com.apple.product-type.application': ['wrapper.application',
+ '', '.app'],
+ 'com.apple.product-type.bundle': ['wrapper.cfbundle',
+ '', '.bundle'],
+ 'com.apple.product-type.framework': ['wrapper.framework',
+ '', '.framework'],
+ 'com.apple.product-type.library.dynamic': ['compiled.mach-o.dylib',
+ 'lib', '.dylib'],
+ 'com.apple.product-type.library.static': ['archive.ar',
+ 'lib', '.a'],
+ 'com.apple.product-type.tool': ['compiled.mach-o.executable',
+ '', ''],
+ 'com.apple.product-type.bundle.unit-test': ['wrapper.cfbundle',
+ '', '.xctest'],
+ 'com.googlecode.gyp.xcode.bundle': ['compiled.mach-o.dylib',
+ '', '.so'],
}
def __init__(self, properties=None, id=None, parent=None,
@@ -2291,6 +2305,11 @@ class PBXNativeTarget(XCTarget):
if force_extension is None:
force_extension = suffix[1:]
+ if self._properties['productType'] == \
+ 'com.apple.product-type-bundle.unit.test':
+ if force_extension is None:
+ force_extension = suffix[1:]
+
if force_extension is not None:
# If it's a wrapper (bundle), set WRAPPER_EXTENSION.
if filetype.startswith('wrapper.'):
diff --git a/deps/npm/node_modules/node-gyp/gyp/setup.py b/deps/npm/node_modules/node-gyp/gyp/setup.py
index ed2b41a3c..75a42558d 100755
--- a/deps/npm/node_modules/node-gyp/gyp/setup.py
+++ b/deps/npm/node_modules/node-gyp/gyp/setup.py
@@ -4,10 +4,7 @@
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
-from distutils.core import setup
-from distutils.command.install import install
-from distutils.command.install_lib import install_lib
-from distutils.command.install_scripts import install_scripts
+from setuptools import setup
setup(
name='gyp',
@@ -18,9 +15,5 @@ setup(
url='http://code.google.com/p/gyp',
package_dir = {'': 'pylib'},
packages=['gyp', 'gyp.generator'],
-
- scripts = ['gyp'],
- cmdclass = {'install': install,
- 'install_lib': install_lib,
- 'install_scripts': install_scripts},
+ entry_points = {'console_scripts': ['gyp=gyp:script_main'] }
)
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/actions-bare/gyptest-bare.py b/deps/npm/node_modules/node-gyp/gyp/test/actions-bare/gyptest-bare.py
deleted file mode 100755
index b0c10938d..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/actions-bare/gyptest-bare.py
+++ /dev/null
@@ -1,23 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2009 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Verifies actions which are not depended on by other targets get executed.
-"""
-
-import TestGyp
-
-test = TestGyp.TestGyp()
-
-test.run_gyp('bare.gyp', chdir='src')
-test.relocate('src', 'relocate/src')
-test.build('bare.gyp', chdir='relocate/src')
-
-file_content = 'Hello from bare.py\n'
-
-test.built_file_must_match('out.txt', file_content, chdir='relocate/src')
-
-test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/actions-bare/src/bare.gyp b/deps/npm/node_modules/node-gyp/gyp/test/actions-bare/src/bare.gyp
deleted file mode 100644
index 3d28f099d..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/actions-bare/src/bare.gyp
+++ /dev/null
@@ -1,25 +0,0 @@
-# Copyright (c) 2009 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'targets': [
- {
- 'target_name': 'bare',
- 'type': 'none',
- 'actions': [
- {
- 'action_name': 'action1',
- 'inputs': [
- 'bare.py',
- ],
- 'outputs': [
- '<(PRODUCT_DIR)/out.txt',
- ],
- 'action': ['python', 'bare.py', '<(PRODUCT_DIR)/out.txt'],
- 'msvs_cygwin_shell': 0,
- },
- ],
- },
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/actions-bare/src/bare.py b/deps/npm/node_modules/node-gyp/gyp/test/actions-bare/src/bare.py
deleted file mode 100755
index 12307500f..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/actions-bare/src/bare.py
+++ /dev/null
@@ -1,11 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2009 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import sys
-
-f = open(sys.argv[1], 'wb')
-f.write('Hello from bare.py\n')
-f.close()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/actions-multiple/gyptest-all.py b/deps/npm/node_modules/node-gyp/gyp/test/actions-multiple/gyptest-all.py
deleted file mode 100755
index 2a083de9b..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/actions-multiple/gyptest-all.py
+++ /dev/null
@@ -1,72 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Verifies two actions can be attached to the same input files.
-"""
-
-import sys
-
-import TestGyp
-
-test = TestGyp.TestGyp()
-
-test.run_gyp('actions.gyp', chdir='src')
-
-test.relocate('src', 'relocate/src')
-
-# Test of fine-grained dependencies for generators that can build individual
-# files on demand.
-# In particular:
-# - TargetA depends on TargetB.
-# - TargetA and TargetB are 'none' type with actions attached.
-# - TargetA has multiple actions.
-# - An output from one of the actions in TargetA (not the first listed),
-# is requested as the build target.
-# Ensure that TargetB gets built.
-#
-# This sub-test can only be done with generators/build tools that can
-# be asked to build individual files rather than whole targets (make, ninja).
-if test.format in ['make', 'ninja']:
- # Select location of target based on generator.
- if test.format == 'make':
- target = 'multi2.txt'
- elif test.format == 'ninja':
- if sys.platform in ['win32', 'cygwin']:
- target = '..\\..\\multi2.txt'
- else:
- target = '../../multi2.txt'
- else:
- assert False
- test.build('actions.gyp', chdir='relocate/src', target=target)
- test.must_contain('relocate/src/multi2.txt', 'hello there')
- test.must_contain('relocate/src/multi_dep.txt', 'hello there')
-
-
-# Test that two actions can be attached to the same inputs.
-test.build('actions.gyp', test.ALL, chdir='relocate/src')
-test.must_contain('relocate/src/output1.txt', 'hello there')
-test.must_contain('relocate/src/output2.txt', 'hello there')
-test.must_contain('relocate/src/output3.txt', 'hello there')
-test.must_contain('relocate/src/output4.txt', 'hello there')
-
-# Test that process_outputs_as_sources works in conjuction with merged
-# actions.
-test.run_built_executable(
- 'multiple_action_source_filter',
- chdir='relocate/src',
- stdout=(
- '{\n'
- 'bar\n'
- 'car\n'
- 'dar\n'
- 'ear\n'
- '}\n'
- ),
-)
-
-
-test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/actions-multiple/src/actions.gyp b/deps/npm/node_modules/node-gyp/gyp/test/actions-multiple/src/actions.gyp
deleted file mode 100644
index c70a58f70..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/actions-multiple/src/actions.gyp
+++ /dev/null
@@ -1,226 +0,0 @@
-# Copyright (c) 2011 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'variables': {
- # Have a long string so that actions will exceed xp 512 character
- # command limit on xp.
- 'long_string':
- 'abcdefghijklmnopqrstuvwxyz0123456789'
- 'abcdefghijklmnopqrstuvwxyz0123456789'
- 'abcdefghijklmnopqrstuvwxyz0123456789'
- 'abcdefghijklmnopqrstuvwxyz0123456789'
- 'abcdefghijklmnopqrstuvwxyz0123456789'
- 'abcdefghijklmnopqrstuvwxyz0123456789'
- 'abcdefghijklmnopqrstuvwxyz0123456789'
- 'abcdefghijklmnopqrstuvwxyz0123456789'
- 'abcdefghijklmnopqrstuvwxyz0123456789'
- 'abcdefghijklmnopqrstuvwxyz0123456789'
- 'abcdefghijklmnopqrstuvwxyz0123456789'
- },
- 'targets': [
- {
- 'target_name': 'multiple_action_target',
- 'type': 'none',
- 'actions': [
- {
- 'action_name': 'action1',
- 'inputs': [
- 'copy.py',
- 'input.txt',
- ],
- 'outputs': [
- 'output1.txt',
- ],
- 'action': [
- 'python', '<@(_inputs)', '<(_outputs)', '<(long_string)',
- ],
- # Allows the test to run without hermetic cygwin on windows.
- 'msvs_cygwin_shell': 0,
- },
- {
- 'action_name': 'action2',
- 'inputs': [
- 'copy.py',
- 'input.txt',
- ],
- 'outputs': [
- 'output2.txt',
- ],
- 'action': [
- 'python', '<@(_inputs)', '<(_outputs)', '<(long_string)',
- ],
- # Allows the test to run without hermetic cygwin on windows.
- 'msvs_cygwin_shell': 0,
- },
- {
- 'action_name': 'action3',
- 'inputs': [
- 'copy.py',
- 'input.txt',
- ],
- 'outputs': [
- 'output3.txt',
- ],
- 'action': [
- 'python', '<@(_inputs)', '<(_outputs)', '<(long_string)',
- ],
- # Allows the test to run without hermetic cygwin on windows.
- 'msvs_cygwin_shell': 0,
- },
- {
- 'action_name': 'action4',
- 'inputs': [
- 'copy.py',
- 'input.txt',
- ],
- 'outputs': [
- 'output4.txt',
- ],
- 'action': [
- 'python', '<@(_inputs)', '<(_outputs)', '<(long_string)',
- ],
- # Allows the test to run without hermetic cygwin on windows.
- 'msvs_cygwin_shell': 0,
- },
- ],
- },
- {
- 'target_name': 'multiple_action_source_filter',
- 'type': 'executable',
- 'sources': [
- 'main.c',
- # TODO(bradnelson): add foo.c here once this issue is fixed:
- # http://code.google.com/p/gyp/issues/detail?id=175
- ],
- 'actions': [
- {
- 'action_name': 'action1',
- 'inputs': [
- 'foo.c',
- 'filter.py',
- ],
- 'outputs': [
- '<(INTERMEDIATE_DIR)/output1.c',
- ],
- 'process_outputs_as_sources': 1,
- 'action': [
- 'python', 'filter.py', 'foo', 'bar', 'foo.c', '<@(_outputs)',
- ],
- # Allows the test to run without hermetic cygwin on windows.
- 'msvs_cygwin_shell': 0,
- },
- {
- 'action_name': 'action2',
- 'inputs': [
- 'foo.c',
- 'filter.py',
- ],
- 'outputs': [
- '<(INTERMEDIATE_DIR)/output2.c',
- ],
- 'process_outputs_as_sources': 1,
- 'action': [
- 'python', 'filter.py', 'foo', 'car', 'foo.c', '<@(_outputs)',
- ],
- # Allows the test to run without hermetic cygwin on windows.
- 'msvs_cygwin_shell': 0,
- },
- {
- 'action_name': 'action3',
- 'inputs': [
- 'foo.c',
- 'filter.py',
- ],
- 'outputs': [
- '<(INTERMEDIATE_DIR)/output3.c',
- ],
- 'process_outputs_as_sources': 1,
- 'action': [
- 'python', 'filter.py', 'foo', 'dar', 'foo.c', '<@(_outputs)',
- ],
- # Allows the test to run without hermetic cygwin on windows.
- 'msvs_cygwin_shell': 0,
- },
- {
- 'action_name': 'action4',
- 'inputs': [
- 'foo.c',
- 'filter.py',
- ],
- 'outputs': [
- '<(INTERMEDIATE_DIR)/output4.c',
- ],
- 'process_outputs_as_sources': 1,
- 'action': [
- 'python', 'filter.py', 'foo', 'ear', 'foo.c', '<@(_outputs)',
- ],
- # Allows the test to run without hermetic cygwin on windows.
- 'msvs_cygwin_shell': 0,
- },
- ],
- },
- {
- 'target_name': 'multiple_dependent_target',
- 'type': 'none',
- 'actions': [
- {
- 'action_name': 'action1',
- 'inputs': [
- 'copy.py',
- 'input.txt',
- ],
- 'outputs': [
- 'multi1.txt',
- ],
- 'action': [
- 'python', '<@(_inputs)', '<(_outputs)', '<(long_string)',
- ],
- # Allows the test to run without hermetic cygwin on windows.
- 'msvs_cygwin_shell': 0,
- },
- {
- 'action_name': 'action2',
- 'inputs': [
- 'copy.py',
- 'input.txt',
- ],
- 'outputs': [
- 'multi2.txt',
- ],
- 'action': [
- 'python', '<@(_inputs)', '<(_outputs)', '<(long_string)',
- ],
- # Allows the test to run without hermetic cygwin on windows.
- 'msvs_cygwin_shell': 0,
- },
- ],
- 'dependencies': [
- 'multiple_required_target',
- ],
- },
- {
- 'target_name': 'multiple_required_target',
- 'type': 'none',
- 'actions': [
- {
- 'action_name': 'multi_dep',
- 'inputs': [
- 'copy.py',
- 'input.txt',
- ],
- 'outputs': [
- 'multi_dep.txt',
- ],
- 'process_outputs_as_sources': 1,
- 'action': [
- 'python', '<@(_inputs)', '<(_outputs)', '<(long_string)',
- ],
- # Allows the test to run without hermetic cygwin on windows.
- 'msvs_cygwin_shell': 0,
- },
- ],
- },
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/actions-multiple/src/copy.py b/deps/npm/node_modules/node-gyp/gyp/test/actions-multiple/src/copy.py
deleted file mode 100755
index 077467938..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/actions-multiple/src/copy.py
+++ /dev/null
@@ -1,9 +0,0 @@
-#!/usr/bin/env python
-# Copyright (c) 2011 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import shutil
-import sys
-
-shutil.copyfile(sys.argv[1], sys.argv[2])
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/actions-multiple/src/filter.py b/deps/npm/node_modules/node-gyp/gyp/test/actions-multiple/src/filter.py
deleted file mode 100755
index f61a5fa59..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/actions-multiple/src/filter.py
+++ /dev/null
@@ -1,12 +0,0 @@
-#!/usr/bin/env python
-# Copyright (c) 2011 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-
-import sys
-
-data = open(sys.argv[3], 'r').read()
-fh = open(sys.argv[4], 'w')
-fh.write(data.replace(sys.argv[1], sys.argv[2]))
-fh.close()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/actions-multiple/src/foo.c b/deps/npm/node_modules/node-gyp/gyp/test/actions-multiple/src/foo.c
deleted file mode 100644
index 23c4ef7f2..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/actions-multiple/src/foo.c
+++ /dev/null
@@ -1,11 +0,0 @@
-/*
- * Copyright (c) 2011 Google Inc. All rights reserved.
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-#include <stdio.h>
-
-void foo(void) {
- printf("foo\n");
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/actions-multiple/src/input.txt b/deps/npm/node_modules/node-gyp/gyp/test/actions-multiple/src/input.txt
deleted file mode 100644
index c7c7da3c6..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/actions-multiple/src/input.txt
+++ /dev/null
@@ -1 +0,0 @@
-hello there
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/actions-multiple/src/main.c b/deps/npm/node_modules/node-gyp/gyp/test/actions-multiple/src/main.c
deleted file mode 100644
index 0a420b903..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/actions-multiple/src/main.c
+++ /dev/null
@@ -1,22 +0,0 @@
-/*
- * Copyright (c) 2011 Google Inc. All rights reserved.
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-#include <stdio.h>
-
-void bar(void);
-void car(void);
-void dar(void);
-void ear(void);
-
-int main() {
- printf("{\n");
- bar();
- car();
- dar();
- ear();
- printf("}\n");
- return 0;
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/actions-none/gyptest-none.py b/deps/npm/node_modules/node-gyp/gyp/test/actions-none/gyptest-none.py
deleted file mode 100755
index d013a4ac1..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/actions-none/gyptest-none.py
+++ /dev/null
@@ -1,26 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Verifies actions can be in 'none' type targets with source files.
-"""
-
-import TestGyp
-
-test = TestGyp.TestGyp()
-# TODO(bradnelson): fix scons.
-if test.format == 'scons':
- test.skip_test()
-
-test.run_gyp('none_with_source_files.gyp', chdir='src')
-test.relocate('src', 'relocate/src')
-test.build('none_with_source_files.gyp', chdir='relocate/src')
-
-file_content = 'foo.cc\n'
-
-test.built_file_must_match('fake.out', file_content, chdir='relocate/src')
-
-test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/actions-none/src/fake_cross.py b/deps/npm/node_modules/node-gyp/gyp/test/actions-none/src/fake_cross.py
deleted file mode 100644
index 2913f66a6..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/actions-none/src/fake_cross.py
+++ /dev/null
@@ -1,12 +0,0 @@
-#!/usr/bin/python
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-
-import sys
-
-fh = open(sys.argv[-1], 'wb')
-for filename in sys.argv[1:-1]:
- fh.write(open(filename).read())
-fh.close()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/actions-none/src/foo.cc b/deps/npm/node_modules/node-gyp/gyp/test/actions-none/src/foo.cc
deleted file mode 100644
index c6c61745b..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/actions-none/src/foo.cc
+++ /dev/null
@@ -1 +0,0 @@
-foo.cc
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/actions-none/src/none_with_source_files.gyp b/deps/npm/node_modules/node-gyp/gyp/test/actions-none/src/none_with_source_files.gyp
deleted file mode 100644
index e2aaebc10..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/actions-none/src/none_with_source_files.gyp
+++ /dev/null
@@ -1,35 +0,0 @@
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-# Test that 'none' type targets can have .cc files in them.
-
-{
- 'targets': [
- {
- 'target_name': 'none_with_sources',
- 'type': 'none',
- 'msvs_cygwin_shell': 0,
- 'sources': [
- 'foo.cc',
- ],
- 'actions': [
- {
- 'action_name': 'fake_cross',
- 'inputs': [
- 'fake_cross.py',
- '<@(_sources)',
- ],
- 'outputs': [
- '<(PRODUCT_DIR)/fake.out',
- ],
- 'action': [
- 'python', '<@(_inputs)', '<@(_outputs)',
- ],
- # Allows the test to run without hermetic cygwin on windows.
- 'msvs_cygwin_shell': 0,
- }
- ],
- },
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/actions-subdir/gyptest-action.py b/deps/npm/node_modules/node-gyp/gyp/test/actions-subdir/gyptest-action.py
deleted file mode 100755
index 09cfef189..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/actions-subdir/gyptest-action.py
+++ /dev/null
@@ -1,26 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2009 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Test actions that output to PRODUCT_DIR.
-"""
-
-import TestGyp
-
-# TODO fix this for xcode: http://code.google.com/p/gyp/issues/detail?id=88
-test = TestGyp.TestGyp(formats=['!xcode'])
-
-test.run_gyp('none.gyp', chdir='src')
-
-test.build('none.gyp', test.ALL, chdir='src')
-
-file_content = 'Hello from make-file.py\n'
-subdir_file_content = 'Hello from make-subdir-file.py\n'
-
-test.built_file_must_match('file.out', file_content, chdir='src')
-test.built_file_must_match('subdir_file.out', subdir_file_content, chdir='src')
-
-test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/actions-subdir/src/make-file.py b/deps/npm/node_modules/node-gyp/gyp/test/actions-subdir/src/make-file.py
deleted file mode 100755
index 74e55811d..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/actions-subdir/src/make-file.py
+++ /dev/null
@@ -1,11 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2009 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import sys
-
-contents = 'Hello from make-file.py\n'
-
-open(sys.argv[1], 'wb').write(contents)
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/actions-subdir/src/none.gyp b/deps/npm/node_modules/node-gyp/gyp/test/actions-subdir/src/none.gyp
deleted file mode 100644
index 23f8d25a5..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/actions-subdir/src/none.gyp
+++ /dev/null
@@ -1,31 +0,0 @@
-# Copyright (c) 2009 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'targets': [
- {
- 'target_name': 'file',
- 'type': 'none',
- 'msvs_cygwin_shell': 0,
- 'actions': [
- {
- 'action_name': 'make-file',
- 'inputs': [
- 'make-file.py',
- ],
- 'outputs': [
- '<(PRODUCT_DIR)/file.out',
- ],
- 'action': [
- 'python', '<(_inputs)', '<@(_outputs)',
- ],
- 'process_outputs_as_sources': 1,
- }
- ],
- 'dependencies': [
- 'subdir/subdir.gyp:subdir_file',
- ],
- },
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/actions-subdir/src/subdir/make-subdir-file.py b/deps/npm/node_modules/node-gyp/gyp/test/actions-subdir/src/subdir/make-subdir-file.py
deleted file mode 100755
index 80ce19ae0..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/actions-subdir/src/subdir/make-subdir-file.py
+++ /dev/null
@@ -1,11 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2009 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import sys
-
-contents = 'Hello from make-subdir-file.py\n'
-
-open(sys.argv[1], 'wb').write(contents)
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/actions-subdir/src/subdir/subdir.gyp b/deps/npm/node_modules/node-gyp/gyp/test/actions-subdir/src/subdir/subdir.gyp
deleted file mode 100644
index 0315d4eb8..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/actions-subdir/src/subdir/subdir.gyp
+++ /dev/null
@@ -1,28 +0,0 @@
-# Copyright (c) 2009 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'targets': [
- {
- 'target_name': 'subdir_file',
- 'type': 'none',
- 'msvs_cygwin_shell': 0,
- 'actions': [
- {
- 'action_name': 'make-subdir-file',
- 'inputs': [
- 'make-subdir-file.py',
- ],
- 'outputs': [
- '<(PRODUCT_DIR)/subdir_file.out',
- ],
- 'action': [
- 'python', '<(_inputs)', '<@(_outputs)',
- ],
- 'process_outputs_as_sources': 1,
- }
- ],
- },
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/actions/gyptest-all.py b/deps/npm/node_modules/node-gyp/gyp/test/actions/gyptest-all.py
deleted file mode 100755
index 705fec4b5..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/actions/gyptest-all.py
+++ /dev/null
@@ -1,102 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Verifies simple actions when using an explicit build target of 'all'.
-"""
-
-import glob
-import os
-import TestGyp
-
-test = TestGyp.TestGyp(workdir='workarea_all')
-
-test.run_gyp('actions.gyp', chdir='src')
-
-test.relocate('src', 'relocate/src')
-
-# Some gyp files use an action that mentions an output but never
-# writes it as a means to making the action run on every build. That
-# doesn't mesh well with ninja's semantics. TODO(evan): figure out
-# how to work always-run actions in to ninja.
-# Android also can't do this as it doesn't have order-only dependencies.
-if test.format in ['ninja', 'android']:
- test.build('actions.gyp', test.ALL, chdir='relocate/src')
-else:
- # Test that an "always run" action increases a counter on multiple
- # invocations, and that a dependent action updates in step.
- test.build('actions.gyp', test.ALL, chdir='relocate/src')
- test.must_match('relocate/src/subdir1/actions-out/action-counter.txt', '1')
- test.must_match('relocate/src/subdir1/actions-out/action-counter_2.txt', '1')
- test.build('actions.gyp', test.ALL, chdir='relocate/src')
- test.must_match('relocate/src/subdir1/actions-out/action-counter.txt', '2')
- test.must_match('relocate/src/subdir1/actions-out/action-counter_2.txt', '2')
-
- # The "always run" action only counts to 2, but the dependent target
- # will count forever if it's allowed to run. This verifies that the
- # dependent target only runs when the "always run" action generates
- # new output, not just because the "always run" ran.
- test.build('actions.gyp', test.ALL, chdir='relocate/src')
- test.must_match('relocate/src/subdir1/actions-out/action-counter.txt', '2')
- test.must_match('relocate/src/subdir1/actions-out/action-counter_2.txt', '2')
-
-expect = """\
-Hello from program.c
-Hello from make-prog1.py
-Hello from make-prog2.py
-"""
-
-if test.format == 'xcode':
- chdir = 'relocate/src/subdir1'
-else:
- chdir = 'relocate/src'
-test.run_built_executable('program', chdir=chdir, stdout=expect)
-
-
-test.must_match('relocate/src/subdir2/file.out', "Hello from make-file.py\n")
-
-
-expect = "Hello from generate_main.py\n"
-
-if test.format == 'xcode':
- chdir = 'relocate/src/subdir3'
-else:
- chdir = 'relocate/src'
-test.run_built_executable('null_input', chdir=chdir, stdout=expect)
-
-
-# Clean out files which may have been created if test.ALL was run.
-def clean_dep_files():
- for file in (glob.glob('relocate/src/dep_*.txt') +
- glob.glob('relocate/src/deps_all_done_*.txt')):
- if os.path.exists(file):
- os.remove(file)
-
-# Confirm our clean.
-clean_dep_files()
-test.must_not_exist('relocate/src/dep_1.txt')
-test.must_not_exist('relocate/src/deps_all_done_first_123.txt')
-
-# Make sure all deps finish before an action is run on a 'None' target.
-# If using the Make builder, add -j to make things more difficult.
-arguments = []
-if test.format == 'make':
- arguments = ['-j']
-test.build('actions.gyp', 'action_with_dependencies_123', chdir='relocate/src',
- arguments=arguments)
-test.must_exist('relocate/src/deps_all_done_first_123.txt')
-
-# Try again with a target that has deps in reverse. Output files from
-# previous tests deleted. Confirm this execution did NOT run the ALL
-# target which would mess up our dep tests.
-clean_dep_files()
-test.build('actions.gyp', 'action_with_dependencies_321', chdir='relocate/src',
- arguments=arguments)
-test.must_exist('relocate/src/deps_all_done_first_321.txt')
-test.must_not_exist('relocate/src/deps_all_done_first_123.txt')
-
-
-test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/actions/gyptest-default.py b/deps/npm/node_modules/node-gyp/gyp/test/actions/gyptest-default.py
deleted file mode 100755
index f5b4e3510..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/actions/gyptest-default.py
+++ /dev/null
@@ -1,69 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Verifies simple actions when using the default build target.
-"""
-
-import TestGyp
-
-test = TestGyp.TestGyp(workdir='workarea_default')
-
-test.run_gyp('actions.gyp', chdir='src')
-
-test.relocate('src', 'relocate/src')
-
-# Some gyp files use an action that mentions an output but never
-# writes it as a means to making the action run on every build. That
-# doesn't mesh well with ninja's semantics. TODO(evan): figure out
-# how to work always-run actions in to ninja.
-# Android also can't do this as it doesn't have order-only dependencies.
-if test.format in ['ninja', 'android']:
- test.build('actions.gyp', test.ALL, chdir='relocate/src')
-else:
- # Test that an "always run" action increases a counter on multiple
- # invocations, and that a dependent action updates in step.
- test.build('actions.gyp', chdir='relocate/src')
- test.must_match('relocate/src/subdir1/actions-out/action-counter.txt', '1')
- test.must_match('relocate/src/subdir1/actions-out/action-counter_2.txt', '1')
- test.build('actions.gyp', chdir='relocate/src')
- test.must_match('relocate/src/subdir1/actions-out/action-counter.txt', '2')
- test.must_match('relocate/src/subdir1/actions-out/action-counter_2.txt', '2')
-
- # The "always run" action only counts to 2, but the dependent target
- # will count forever if it's allowed to run. This verifies that the
- # dependent target only runs when the "always run" action generates
- # new output, not just because the "always run" ran.
- test.build('actions.gyp', test.ALL, chdir='relocate/src')
- test.must_match('relocate/src/subdir1/actions-out/action-counter.txt', '2')
- test.must_match('relocate/src/subdir1/actions-out/action-counter_2.txt', '2')
-
-expect = """\
-Hello from program.c
-Hello from make-prog1.py
-Hello from make-prog2.py
-"""
-
-if test.format == 'xcode':
- chdir = 'relocate/src/subdir1'
-else:
- chdir = 'relocate/src'
-test.run_built_executable('program', chdir=chdir, stdout=expect)
-
-
-test.must_match('relocate/src/subdir2/file.out', "Hello from make-file.py\n")
-
-
-expect = "Hello from generate_main.py\n"
-
-if test.format == 'xcode':
- chdir = 'relocate/src/subdir3'
-else:
- chdir = 'relocate/src'
-test.run_built_executable('null_input', chdir=chdir, stdout=expect)
-
-
-test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/actions/gyptest-errors.py b/deps/npm/node_modules/node-gyp/gyp/test/actions/gyptest-errors.py
deleted file mode 100755
index e1ef883e1..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/actions/gyptest-errors.py
+++ /dev/null
@@ -1,24 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2009 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Verifies behavior for different action configuration errors:
-exit status of 1, and the expected error message must be in stderr.
-"""
-
-import TestGyp
-
-test = TestGyp.TestGyp(workdir='workarea_errors')
-
-
-test.run_gyp('action_missing_name.gyp', chdir='src', status=1, stderr=None)
-expect = [
- "Anonymous action in target broken_actions2. An action must have an 'action_name' field.",
-]
-test.must_contain_all_lines(test.stderr(), expect)
-
-
-test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/actions/src/action_missing_name.gyp b/deps/npm/node_modules/node-gyp/gyp/test/actions/src/action_missing_name.gyp
deleted file mode 100644
index 00424c35a..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/actions/src/action_missing_name.gyp
+++ /dev/null
@@ -1,24 +0,0 @@
-# Copyright (c) 2009 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'targets': [
- {
- 'target_name': 'broken_actions2',
- 'type': 'none',
- 'actions': [
- {
- 'inputs': [
- 'no_name.input',
- ],
- 'action': [
- 'python',
- '-c',
- 'print \'missing name\'',
- ],
- },
- ],
- },
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/actions/src/actions.gyp b/deps/npm/node_modules/node-gyp/gyp/test/actions/src/actions.gyp
deleted file mode 100644
index 5d2db1955..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/actions/src/actions.gyp
+++ /dev/null
@@ -1,114 +0,0 @@
-# Copyright (c) 2009 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'targets': [
- {
- 'target_name': 'pull_in_all_actions',
- 'type': 'none',
- 'dependencies': [
- 'subdir1/executable.gyp:*',
- 'subdir2/none.gyp:*',
- 'subdir3/null_input.gyp:*',
- ],
- },
- {
- 'target_name': 'depend_on_always_run_action',
- 'type': 'none',
- 'dependencies': [ 'subdir1/executable.gyp:counter' ],
- 'actions': [
- {
- 'action_name': 'use_always_run_output',
- 'inputs': [
- 'subdir1/actions-out/action-counter.txt',
- 'subdir1/counter.py',
- ],
- 'outputs': [
- 'subdir1/actions-out/action-counter_2.txt',
- ],
- 'action': [
- 'python', 'subdir1/counter.py', '<(_outputs)',
- ],
- # Allows the test to run without hermetic cygwin on windows.
- 'msvs_cygwin_shell': 0,
- },
- ],
- },
-
- # Three deps which don't finish immediately.
- # Each one has a small delay then creates a file.
- # Delays are 1.0, 1.1, and 2.0 seconds.
- {
- 'target_name': 'dep_1',
- 'type': 'none',
- 'actions': [{
- 'inputs': [ 'actions.gyp' ],
- 'outputs': [ 'dep_1.txt' ],
- 'action_name': 'dep_1',
- 'action': [ 'python', '-c',
- 'import time; time.sleep(1); open(\'dep_1.txt\', \'w\')' ],
- # Allows the test to run without hermetic cygwin on windows.
- 'msvs_cygwin_shell': 0,
- }],
- },
- {
- 'target_name': 'dep_2',
- 'type': 'none',
- 'actions': [{
- 'inputs': [ 'actions.gyp' ],
- 'outputs': [ 'dep_2.txt' ],
- 'action_name': 'dep_2',
- 'action': [ 'python', '-c',
- 'import time; time.sleep(1.1); open(\'dep_2.txt\', \'w\')' ],
- # Allows the test to run without hermetic cygwin on windows.
- 'msvs_cygwin_shell': 0,
- }],
- },
- {
- 'target_name': 'dep_3',
- 'type': 'none',
- 'actions': [{
- 'inputs': [ 'actions.gyp' ],
- 'outputs': [ 'dep_3.txt' ],
- 'action_name': 'dep_3',
- 'action': [ 'python', '-c',
- 'import time; time.sleep(2.0); open(\'dep_3.txt\', \'w\')' ],
- # Allows the test to run without hermetic cygwin on windows.
- 'msvs_cygwin_shell': 0,
- }],
- },
-
- # An action which assumes the deps have completed.
- # Does NOT list the output files of it's deps as inputs.
- # On success create the file deps_all_done_first.txt.
- {
- 'target_name': 'action_with_dependencies_123',
- 'type': 'none',
- 'dependencies': [ 'dep_1', 'dep_2', 'dep_3' ],
- 'actions': [{
- 'inputs': [ 'actions.gyp' ],
- 'outputs': [ 'deps_all_done_first_123.txt' ],
- 'action_name': 'action_with_dependencies_123',
- 'action': [ 'python', 'confirm-dep-files.py', '<(_outputs)' ],
- # Allows the test to run without hermetic cygwin on windows.
- 'msvs_cygwin_shell': 0,
- }],
- },
- # Same as above but with deps in reverse.
- {
- 'target_name': 'action_with_dependencies_321',
- 'type': 'none',
- 'dependencies': [ 'dep_3', 'dep_2', 'dep_1' ],
- 'actions': [{
- 'inputs': [ 'actions.gyp' ],
- 'outputs': [ 'deps_all_done_first_321.txt' ],
- 'action_name': 'action_with_dependencies_321',
- 'action': [ 'python', 'confirm-dep-files.py', '<(_outputs)' ],
- # Allows the test to run without hermetic cygwin on windows.
- 'msvs_cygwin_shell': 0,
- }],
- },
-
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/actions/src/confirm-dep-files.py b/deps/npm/node_modules/node-gyp/gyp/test/actions/src/confirm-dep-files.py
deleted file mode 100755
index 3b8463057..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/actions/src/confirm-dep-files.py
+++ /dev/null
@@ -1,21 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2011 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""Confirms presence of files generated by our targets we depend on.
-If they exist, create a new file.
-
-Note target's input files are explicitly NOT defined in the gyp file
-so they can't easily be passed to this script as args.
-"""
-
-import os
-import sys
-
-outfile = sys.argv[1] # Example value we expect: deps_all_done_first_123.txt
-if (os.path.exists("dep_1.txt") and
- os.path.exists("dep_2.txt") and
- os.path.exists("dep_3.txt")):
- open(outfile, "w")
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/actions/src/subdir1/counter.py b/deps/npm/node_modules/node-gyp/gyp/test/actions/src/subdir1/counter.py
deleted file mode 100755
index 3612d7d2b..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/actions/src/subdir1/counter.py
+++ /dev/null
@@ -1,46 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2010 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import sys
-import time
-
-output = sys.argv[1]
-persistoutput = "%s.persist" % sys.argv[1]
-
-count = 0
-try:
- count = open(persistoutput, 'r').read()
-except:
- pass
-count = int(count) + 1
-
-if len(sys.argv) > 2:
- max_count = int(sys.argv[2])
- if count > max_count:
- count = max_count
-
-oldcount = 0
-try:
- oldcount = open(output, 'r').read()
-except:
- pass
-
-# Save the count in a file that is undeclared, and thus hidden, to gyp. We need
-# to do this because, prior to running commands, scons deletes any declared
-# outputs, so we would lose our count if we just wrote to the given output file.
-# (The other option is to use Precious() in the scons generator, but that seems
-# too heavy-handed just to support this somewhat unrealistic test case, and
-# might lead to unintended side-effects).
-open(persistoutput, 'w').write('%d' % (count))
-
-# Only write the given output file if the count has changed.
-if int(oldcount) != count:
- open(output, 'w').write('%d' % (count))
- # Sleep so the next run changes the file time sufficiently to make the build
- # detect the file as changed.
- time.sleep(1)
-
-sys.exit(0)
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/actions/src/subdir1/executable.gyp b/deps/npm/node_modules/node-gyp/gyp/test/actions/src/subdir1/executable.gyp
deleted file mode 100644
index 6a1ce4f91..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/actions/src/subdir1/executable.gyp
+++ /dev/null
@@ -1,74 +0,0 @@
-# Copyright (c) 2009 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'targets': [
- {
- 'target_name': 'program',
- 'type': 'executable',
- 'msvs_cygwin_shell': 0,
- 'sources': [
- 'program.c',
- ],
- 'actions': [
- {
- 'action_name': 'make-prog1',
- 'inputs': [
- 'make-prog1.py',
- ],
- 'outputs': [
- '<(INTERMEDIATE_DIR)/prog1.c',
- ],
- 'action': [
- 'python', '<(_inputs)', '<@(_outputs)',
- ],
- 'process_outputs_as_sources': 1,
- },
- {
- 'action_name': 'make-prog2',
- 'inputs': [
- 'make-prog2.py',
- ],
- 'outputs': [
- 'actions-out/prog2.c',
- ],
- 'action': [
- 'python', '<(_inputs)', '<@(_outputs)',
- ],
- 'process_outputs_as_sources': 1,
- # Allows the test to run without hermetic cygwin on windows.
- 'msvs_cygwin_shell': 0,
- },
- ],
- },
- {
- 'target_name': 'counter',
- 'type': 'none',
- 'actions': [
- {
- # This action should always run, regardless of whether or not it's
- # inputs or the command-line change. We do this by creating a dummy
- # first output, which is always missing, thus causing the build to
- # always try to recreate it. Actual output files should be listed
- # after the dummy one, and dependent targets should list the real
- # output(s) in their inputs
- # (see '../actions.gyp:depend_on_always_run_action').
- 'action_name': 'action_counter',
- 'inputs': [
- 'counter.py',
- ],
- 'outputs': [
- 'actions-out/action-counter.txt.always',
- 'actions-out/action-counter.txt',
- ],
- 'action': [
- 'python', '<(_inputs)', 'actions-out/action-counter.txt', '2',
- ],
- # Allows the test to run without hermetic cygwin on windows.
- 'msvs_cygwin_shell': 0,
- },
- ],
- },
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/actions/src/subdir1/make-prog1.py b/deps/npm/node_modules/node-gyp/gyp/test/actions/src/subdir1/make-prog1.py
deleted file mode 100755
index 7ea1d8a2d..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/actions/src/subdir1/make-prog1.py
+++ /dev/null
@@ -1,20 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2009 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import sys
-
-contents = r"""
-#include <stdio.h>
-
-void prog1(void)
-{
- printf("Hello from make-prog1.py\n");
-}
-"""
-
-open(sys.argv[1], 'w').write(contents)
-
-sys.exit(0)
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/actions/src/subdir1/make-prog2.py b/deps/npm/node_modules/node-gyp/gyp/test/actions/src/subdir1/make-prog2.py
deleted file mode 100755
index 0bfe4973c..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/actions/src/subdir1/make-prog2.py
+++ /dev/null
@@ -1,20 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2009 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import sys
-
-contents = r"""
-#include <stdio.h>
-
-void prog2(void)
-{
- printf("Hello from make-prog2.py\n");
-}
-"""
-
-open(sys.argv[1], 'w').write(contents)
-
-sys.exit(0)
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/actions/src/subdir1/program.c b/deps/npm/node_modules/node-gyp/gyp/test/actions/src/subdir1/program.c
deleted file mode 100644
index d5f661d90..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/actions/src/subdir1/program.c
+++ /dev/null
@@ -1,12 +0,0 @@
-#include <stdio.h>
-
-extern void prog1(void);
-extern void prog2(void);
-
-int main(int argc, char *argv[])
-{
- printf("Hello from program.c\n");
- prog1();
- prog2();
- return 0;
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/actions/src/subdir2/make-file.py b/deps/npm/node_modules/node-gyp/gyp/test/actions/src/subdir2/make-file.py
deleted file mode 100755
index fff065314..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/actions/src/subdir2/make-file.py
+++ /dev/null
@@ -1,11 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2009 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import sys
-
-contents = "Hello from make-file.py\n"
-
-open(sys.argv[1], 'wb').write(contents)
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/actions/src/subdir2/none.gyp b/deps/npm/node_modules/node-gyp/gyp/test/actions/src/subdir2/none.gyp
deleted file mode 100644
index 2caa97d55..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/actions/src/subdir2/none.gyp
+++ /dev/null
@@ -1,33 +0,0 @@
-# Copyright (c) 2009 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'targets': [
- {
- 'target_name': 'file',
- 'type': 'none',
- 'msvs_cygwin_shell': 0,
- 'actions': [
- {
- 'action_name': 'make-file',
- 'inputs': [
- 'make-file.py',
- ],
- 'outputs': [
- 'file.out',
- # TODO: enhance testing infrastructure to test this
- # without having to hard-code the intermediate dir paths.
- #'<(INTERMEDIATE_DIR)/file.out',
- ],
- 'action': [
- 'python', '<(_inputs)', '<@(_outputs)',
- ],
- 'process_outputs_as_sources': 1,
- # Allows the test to run without hermetic cygwin on windows.
- 'msvs_cygwin_shell': 0,
- }
- ],
- },
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/actions/src/subdir3/generate_main.py b/deps/npm/node_modules/node-gyp/gyp/test/actions/src/subdir3/generate_main.py
deleted file mode 100755
index b90b3aa6d..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/actions/src/subdir3/generate_main.py
+++ /dev/null
@@ -1,21 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2009 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import sys
-
-contents = """
-#include <stdio.h>
-
-int main(int argc, char *argv[])
-{
- printf("Hello from generate_main.py\\n");
- return 0;
-}
-"""
-
-open(sys.argv[1], 'w').write(contents)
-
-sys.exit(0)
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/actions/src/subdir3/null_input.gyp b/deps/npm/node_modules/node-gyp/gyp/test/actions/src/subdir3/null_input.gyp
deleted file mode 100644
index 9b0bea5fd..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/actions/src/subdir3/null_input.gyp
+++ /dev/null
@@ -1,29 +0,0 @@
-# Copyright (c) 2009 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'targets': [
- {
- 'target_name': 'null_input',
- 'type': 'executable',
- 'msvs_cygwin_shell': 0,
- 'actions': [
- {
- 'action_name': 'generate_main',
- 'process_outputs_as_sources': 1,
- 'inputs': [],
- 'outputs': [
- '<(INTERMEDIATE_DIR)/main.c',
- ],
- 'action': [
- # TODO: we can't just use <(_outputs) here?!
- 'python', 'generate_main.py', '<(INTERMEDIATE_DIR)/main.c',
- ],
- # Allows the test to run without hermetic cygwin on windows.
- 'msvs_cygwin_shell': 0,
- },
- ],
- },
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/additional-targets/gyptest-additional.py b/deps/npm/node_modules/node-gyp/gyp/test/additional-targets/gyptest-additional.py
deleted file mode 100755
index 4225b9a1a..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/additional-targets/gyptest-additional.py
+++ /dev/null
@@ -1,56 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Verifies simple actions when using an explicit build target of 'all'.
-"""
-
-import TestGyp
-
-test = TestGyp.TestGyp()
-
-test.run_gyp('all.gyp', chdir='src')
-test.relocate('src', 'relocate/src')
-
-# Build all.
-test.build('all.gyp', chdir='relocate/src')
-
-if test.format=='xcode':
- chdir = 'relocate/src/dir1'
-else:
- chdir = 'relocate/src'
-
-# Output is as expected.
-file_content = 'Hello from emit.py\n'
-test.built_file_must_match('out2.txt', file_content, chdir=chdir)
-
-test.built_file_must_not_exist('out.txt', chdir='relocate/src')
-test.built_file_must_not_exist('foolib1',
- type=test.SHARED_LIB,
- chdir=chdir)
-
-# TODO(mmoss) Make consistent with scons, with 'dir1' before 'out/Default'?
-if test.format in ('make', 'ninja', 'android'):
- chdir='relocate/src'
-else:
- chdir='relocate/src/dir1'
-
-# Build the action explicitly.
-test.build('actions.gyp', 'action1_target', chdir=chdir)
-
-# Check that things got run.
-file_content = 'Hello from emit.py\n'
-test.built_file_must_exist('out.txt', chdir=chdir)
-
-# Build the shared library explicitly.
-test.build('actions.gyp', 'foolib1', chdir=chdir)
-
-test.built_file_must_exist('foolib1',
- type=test.SHARED_LIB,
- chdir=chdir,
- subdir='dir1')
-
-test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/additional-targets/src/all.gyp b/deps/npm/node_modules/node-gyp/gyp/test/additional-targets/src/all.gyp
deleted file mode 100644
index 21c83080a..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/additional-targets/src/all.gyp
+++ /dev/null
@@ -1,13 +0,0 @@
-# Copyright (c) 2009 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'targets': [
- {
- 'target_name': 'all_targets',
- 'type': 'none',
- 'dependencies': ['dir1/actions.gyp:*'],
- },
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/additional-targets/src/dir1/actions.gyp b/deps/npm/node_modules/node-gyp/gyp/test/additional-targets/src/dir1/actions.gyp
deleted file mode 100644
index 5089c8091..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/additional-targets/src/dir1/actions.gyp
+++ /dev/null
@@ -1,56 +0,0 @@
-# Copyright (c) 2009 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'targets': [
- {
- 'target_name': 'action1_target',
- 'type': 'none',
- 'suppress_wildcard': 1,
- 'actions': [
- {
- 'action_name': 'action1',
- 'inputs': [
- 'emit.py',
- ],
- 'outputs': [
- '<(PRODUCT_DIR)/out.txt',
- ],
- 'action': ['python', 'emit.py', '<(PRODUCT_DIR)/out.txt'],
- 'msvs_cygwin_shell': 0,
- },
- ],
- },
- {
- 'target_name': 'action2_target',
- 'type': 'none',
- 'actions': [
- {
- 'action_name': 'action2',
- 'inputs': [
- 'emit.py',
- ],
- 'outputs': [
- '<(PRODUCT_DIR)/out2.txt',
- ],
- 'action': ['python', 'emit.py', '<(PRODUCT_DIR)/out2.txt'],
- 'msvs_cygwin_shell': 0,
- },
- ],
- },
- {
- 'target_name': 'foolib1',
- 'type': 'shared_library',
- 'suppress_wildcard': 1,
- 'sources': ['lib1.c'],
- },
- ],
- 'conditions': [
- ['OS=="linux"', {
- 'target_defaults': {
- 'cflags': ['-fPIC'],
- },
- }],
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/additional-targets/src/dir1/emit.py b/deps/npm/node_modules/node-gyp/gyp/test/additional-targets/src/dir1/emit.py
deleted file mode 100755
index fd3138738..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/additional-targets/src/dir1/emit.py
+++ /dev/null
@@ -1,11 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2009 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import sys
-
-f = open(sys.argv[1], 'wb')
-f.write('Hello from emit.py\n')
-f.close()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/additional-targets/src/dir1/lib1.c b/deps/npm/node_modules/node-gyp/gyp/test/additional-targets/src/dir1/lib1.c
deleted file mode 100644
index df4cb10f7..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/additional-targets/src/dir1/lib1.c
+++ /dev/null
@@ -1,6 +0,0 @@
-#ifdef _WIN32
-__declspec(dllexport)
-#endif
-int func1(void) {
- return 42;
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/assembly/gyptest-assembly.py b/deps/npm/node_modules/node-gyp/gyp/test/assembly/gyptest-assembly.py
deleted file mode 100755
index 8a8431054..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/assembly/gyptest-assembly.py
+++ /dev/null
@@ -1,31 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-A basic test of compiling assembler files.
-"""
-
-import sys
-import TestGyp
-
-if sys.platform != 'win32':
- # TODO(bradnelson): get this working for windows.
- test = TestGyp.TestGyp(formats=['!msvs'])
-
- test.run_gyp('assembly.gyp', chdir='src')
-
- test.relocate('src', 'relocate/src')
-
- test.build('assembly.gyp', test.ALL, chdir='relocate/src')
-
- expect = """\
-Hello from program.c
-Got 42.
-"""
- test.run_built_executable('program', chdir='relocate/src', stdout=expect)
-
-
- test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/assembly/src/as.bat b/deps/npm/node_modules/node-gyp/gyp/test/assembly/src/as.bat
deleted file mode 100644
index 0a47382cb..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/assembly/src/as.bat
+++ /dev/null
@@ -1,4 +0,0 @@
-@echo off
-:: Mock windows assembler.
-cl /c %1 /Fo"%2"
-
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/assembly/src/assembly.gyp b/deps/npm/node_modules/node-gyp/gyp/test/assembly/src/assembly.gyp
deleted file mode 100644
index af7333100..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/assembly/src/assembly.gyp
+++ /dev/null
@@ -1,62 +0,0 @@
-# Copyright (c) 2009 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'target_defaults': {
- 'conditions': [
- ['OS=="win"', {
- 'defines': ['PLATFORM_WIN'],
- }],
- ['OS=="mac"', {
- 'defines': ['PLATFORM_MAC'],
- }],
- ['OS=="linux"', {
- 'defines': ['PLATFORM_LINUX'],
- }],
- ['OS=="android"', {
- 'defines': ['PLATFORM_ANDROID'],
- }],
- ],
- },
- 'targets': [
- {
- 'target_name': 'program',
- 'type': 'executable',
- 'dependencies': ['lib1'],
- 'sources': [
- 'program.c',
- ],
- },
- {
- 'target_name': 'lib1',
- 'type': 'static_library',
- 'sources': [
- 'lib1.S',
- ],
- },
- ],
- 'conditions': [
- ['OS=="win"', {
- 'target_defaults': {
- 'rules': [
- {
- 'rule_name': 'assembler',
- 'msvs_cygwin_shell': 0,
- 'extension': 'S',
- 'inputs': [
- 'as.bat',
- ],
- 'outputs': [
- '<(INTERMEDIATE_DIR)/<(RULE_INPUT_ROOT).obj',
- ],
- 'action':
- ['as.bat', 'lib1.c', '<(_outputs)'],
- 'message': 'Building assembly file <(RULE_INPUT_PATH)',
- 'process_outputs_as_sources': 1,
- },
- ],
- },
- },],
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/assembly/src/lib1.S b/deps/npm/node_modules/node-gyp/gyp/test/assembly/src/lib1.S
deleted file mode 100644
index 7de9f19cf..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/assembly/src/lib1.S
+++ /dev/null
@@ -1,15 +0,0 @@
-#if PLATFORM_WINDOWS || PLATFORM_MAC
-# define IDENTIFIER(n) _##n
-#else /* Linux */
-# define IDENTIFIER(n) n
-#endif
-
-.globl IDENTIFIER(lib1_function)
-IDENTIFIER(lib1_function):
-#if !defined(PLATFORM_ANDROID)
- movl $42, %eax
- ret
-#else /* Android (assuming ARM) */
- mov r0, #42
- bx lr
-#endif
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/assembly/src/lib1.c b/deps/npm/node_modules/node-gyp/gyp/test/assembly/src/lib1.c
deleted file mode 100644
index be21ecd5f..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/assembly/src/lib1.c
+++ /dev/null
@@ -1,3 +0,0 @@
-int lib1_function(void) {
- return 42;
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/assembly/src/program.c b/deps/npm/node_modules/node-gyp/gyp/test/assembly/src/program.c
deleted file mode 100644
index ecce3b0bb..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/assembly/src/program.c
+++ /dev/null
@@ -1,12 +0,0 @@
-#include <stdio.h>
-
-extern int lib1_function(void);
-
-int main(int argc, char *argv[])
-{
- fprintf(stdout, "Hello from program.c\n");
- fflush(stdout);
- fprintf(stdout, "Got %d.\n", lib1_function());
- fflush(stdout);
- return 0;
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/build-option/gyptest-build.py b/deps/npm/node_modules/node-gyp/gyp/test/build-option/gyptest-build.py
deleted file mode 100755
index 602c43565..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/build-option/gyptest-build.py
+++ /dev/null
@@ -1,22 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Verifies simplest-possible build of a "Hello, world!" program
-using the default build target.
-"""
-
-import TestGyp
-
-test = TestGyp.TestGyp(workdir='workarea_default')
-
-test.run_gyp('hello.gyp', '--build=Default')
-
-test.run_built_executable('hello', stdout="Hello, world!\n")
-
-test.up_to_date('hello.gyp', test.DEFAULT)
-
-test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/build-option/hello.c b/deps/npm/node_modules/node-gyp/gyp/test/build-option/hello.c
deleted file mode 100644
index 78a67b546..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/build-option/hello.c
+++ /dev/null
@@ -1,13 +0,0 @@
-/*
- * Copyright (c) 2012 Google Inc. All rights reserved.
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-#include <stdio.h>
-
-int main(int argc, char *argv[])
-{
- printf("Hello, world!\n");
- return 0;
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/build-option/hello.gyp b/deps/npm/node_modules/node-gyp/gyp/test/build-option/hello.gyp
deleted file mode 100644
index 1974d51cc..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/build-option/hello.gyp
+++ /dev/null
@@ -1,15 +0,0 @@
-# Copyright (c) 2009 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'targets': [
- {
- 'target_name': 'hello',
- 'type': 'executable',
- 'sources': [
- 'hello.c',
- ],
- },
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/builddir/gyptest-all.py b/deps/npm/node_modules/node-gyp/gyp/test/builddir/gyptest-all.py
deleted file mode 100755
index 711f8772e..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/builddir/gyptest-all.py
+++ /dev/null
@@ -1,85 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Verify the settings that cause a set of programs to be created in
-a specific build directory, and that no intermediate built files
-get created outside of that build directory hierarchy even when
-referred to with deeply-nested ../../.. paths.
-"""
-
-import TestGyp
-
-# TODO(mmoss): Make only supports (theoretically) a single, global build
-# directory (through GYP_GENERATOR_FLAGS 'output_dir'), rather than
-# gyp-file-specific settings (e.g. the stuff in builddir.gypi) that the other
-# generators support, so this doesn't work yet for make.
-# TODO(mmoss) Make also has the issue that the top-level Makefile is written to
-# the "--depth" location, which is one level above 'src', but then this test
-# moves 'src' somewhere else, leaving the Makefile behind, so make can't find
-# its sources. I'm not sure if make is wrong for writing outside the current
-# directory, or if the test is wrong for assuming everything generated is under
-# the current directory.
-# Android does not support setting the build directory.
-test = TestGyp.TestGyp(formats=['!make', '!ninja', '!android'])
-
-test.run_gyp('prog1.gyp', '--depth=..', chdir='src')
-if test.format == 'msvs':
- if test.uses_msbuild:
- test.must_contain('src/prog1.vcxproj',
- '<OutDir>..\\builddir\\Default\\</OutDir>')
- else:
- test.must_contain('src/prog1.vcproj',
- 'OutputDirectory="..\\builddir\\Default\\"')
-
-test.relocate('src', 'relocate/src')
-
-test.subdir('relocate/builddir')
-
-# Make sure that all the built ../../etc. files only get put under builddir,
-# by making all of relocate read-only and then making only builddir writable.
-test.writable('relocate', False)
-test.writable('relocate/builddir', True)
-
-# Suppress the test infrastructure's setting SYMROOT on the command line.
-test.build('prog1.gyp', test.ALL, SYMROOT=None, chdir='relocate/src')
-
-expect1 = """\
-Hello from prog1.c
-Hello from func1.c
-"""
-
-expect2 = """\
-Hello from subdir2/prog2.c
-Hello from func2.c
-"""
-
-expect3 = """\
-Hello from subdir2/subdir3/prog3.c
-Hello from func3.c
-"""
-
-expect4 = """\
-Hello from subdir2/subdir3/subdir4/prog4.c
-Hello from func4.c
-"""
-
-expect5 = """\
-Hello from subdir2/subdir3/subdir4/subdir5/prog5.c
-Hello from func5.c
-"""
-
-def run_builddir(prog, expect):
- dir = 'relocate/builddir/Default/'
- test.run(program=test.workpath(dir + prog), stdout=expect)
-
-run_builddir('prog1', expect1)
-run_builddir('prog2', expect2)
-run_builddir('prog3', expect3)
-run_builddir('prog4', expect4)
-run_builddir('prog5', expect5)
-
-test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/builddir/gyptest-default.py b/deps/npm/node_modules/node-gyp/gyp/test/builddir/gyptest-default.py
deleted file mode 100755
index d29cd4360..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/builddir/gyptest-default.py
+++ /dev/null
@@ -1,85 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Verify the settings that cause a set of programs to be created in
-a specific build directory, and that no intermediate built files
-get created outside of that build directory hierarchy even when
-referred to with deeply-nested ../../.. paths.
-"""
-
-import TestGyp
-
-# TODO(mmoss): Make only supports (theoretically) a single, global build
-# directory (through GYP_GENERATOR_FLAGS 'output_dir'), rather than
-# gyp-file-specific settings (e.g. the stuff in builddir.gypi) that the other
-# generators support, so this doesn't work yet for make.
-# TODO(mmoss) Make also has the issue that the top-level Makefile is written to
-# the "--depth" location, which is one level above 'src', but then this test
-# moves 'src' somewhere else, leaving the Makefile behind, so make can't find
-# its sources. I'm not sure if make is wrong for writing outside the current
-# directory, or if the test is wrong for assuming everything generated is under
-# the current directory.
-# Android does not support setting the build directory.
-test = TestGyp.TestGyp(formats=['!make', '!ninja', '!android'])
-
-test.run_gyp('prog1.gyp', '--depth=..', chdir='src')
-if test.format == 'msvs':
- if test.uses_msbuild:
- test.must_contain('src/prog1.vcxproj',
- '<OutDir>..\\builddir\\Default\\</OutDir>')
- else:
- test.must_contain('src/prog1.vcproj',
- 'OutputDirectory="..\\builddir\\Default\\"')
-
-test.relocate('src', 'relocate/src')
-
-test.subdir('relocate/builddir')
-
-# Make sure that all the built ../../etc. files only get put under builddir,
-# by making all of relocate read-only and then making only builddir writable.
-test.writable('relocate', False)
-test.writable('relocate/builddir', True)
-
-# Suppress the test infrastructure's setting SYMROOT on the command line.
-test.build('prog1.gyp', SYMROOT=None, chdir='relocate/src')
-
-expect1 = """\
-Hello from prog1.c
-Hello from func1.c
-"""
-
-expect2 = """\
-Hello from subdir2/prog2.c
-Hello from func2.c
-"""
-
-expect3 = """\
-Hello from subdir2/subdir3/prog3.c
-Hello from func3.c
-"""
-
-expect4 = """\
-Hello from subdir2/subdir3/subdir4/prog4.c
-Hello from func4.c
-"""
-
-expect5 = """\
-Hello from subdir2/subdir3/subdir4/subdir5/prog5.c
-Hello from func5.c
-"""
-
-def run_builddir(prog, expect):
- dir = 'relocate/builddir/Default/'
- test.run(program=test.workpath(dir + prog), stdout=expect)
-
-run_builddir('prog1', expect1)
-run_builddir('prog2', expect2)
-run_builddir('prog3', expect3)
-run_builddir('prog4', expect4)
-run_builddir('prog5', expect5)
-
-test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/builddir/src/builddir.gypi b/deps/npm/node_modules/node-gyp/gyp/test/builddir/src/builddir.gypi
deleted file mode 100644
index 544c1e68e..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/builddir/src/builddir.gypi
+++ /dev/null
@@ -1,21 +0,0 @@
-# Copyright (c) 2009 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'target_defaults': {
- 'configurations': {
- 'Default': {
- 'msvs_configuration_attributes': {
- 'OutputDirectory': '<(DEPTH)\\builddir/Default',
- },
- },
- },
- },
- 'scons_settings': {
- 'sconsbuild_dir': '<(DEPTH)/builddir',
- },
- 'xcode_settings': {
- 'SYMROOT': '<(DEPTH)/builddir',
- },
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/builddir/src/func1.c b/deps/npm/node_modules/node-gyp/gyp/test/builddir/src/func1.c
deleted file mode 100644
index b8e6a0695..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/builddir/src/func1.c
+++ /dev/null
@@ -1,6 +0,0 @@
-#include <stdio.h>
-
-void func1(void)
-{
- printf("Hello from func1.c\n");
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/builddir/src/func2.c b/deps/npm/node_modules/node-gyp/gyp/test/builddir/src/func2.c
deleted file mode 100644
index 14aabac47..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/builddir/src/func2.c
+++ /dev/null
@@ -1,6 +0,0 @@
-#include <stdio.h>
-
-void func2(void)
-{
- printf("Hello from func2.c\n");
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/builddir/src/func3.c b/deps/npm/node_modules/node-gyp/gyp/test/builddir/src/func3.c
deleted file mode 100644
index 3b4edeae6..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/builddir/src/func3.c
+++ /dev/null
@@ -1,6 +0,0 @@
-#include <stdio.h>
-
-void func3(void)
-{
- printf("Hello from func3.c\n");
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/builddir/src/func4.c b/deps/npm/node_modules/node-gyp/gyp/test/builddir/src/func4.c
deleted file mode 100644
index 732891b79..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/builddir/src/func4.c
+++ /dev/null
@@ -1,6 +0,0 @@
-#include <stdio.h>
-
-void func4(void)
-{
- printf("Hello from func4.c\n");
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/builddir/src/func5.c b/deps/npm/node_modules/node-gyp/gyp/test/builddir/src/func5.c
deleted file mode 100644
index 18fdfabbb..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/builddir/src/func5.c
+++ /dev/null
@@ -1,6 +0,0 @@
-#include <stdio.h>
-
-void func5(void)
-{
- printf("Hello from func5.c\n");
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/builddir/src/prog1.c b/deps/npm/node_modules/node-gyp/gyp/test/builddir/src/prog1.c
deleted file mode 100644
index 674ca747b..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/builddir/src/prog1.c
+++ /dev/null
@@ -1,10 +0,0 @@
-#include <stdio.h>
-
-extern void func1(void);
-
-int main(int argc, char *argv[])
-{
- printf("Hello from prog1.c\n");
- func1();
- return 0;
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/builddir/src/prog1.gyp b/deps/npm/node_modules/node-gyp/gyp/test/builddir/src/prog1.gyp
deleted file mode 100644
index 5b96f035e..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/builddir/src/prog1.gyp
+++ /dev/null
@@ -1,30 +0,0 @@
-# Copyright (c) 2009 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'includes': [
- 'builddir.gypi',
- ],
- 'targets': [
- {
- 'target_name': 'pull_in_all',
- 'type': 'none',
- 'dependencies': [
- 'prog1',
- 'subdir2/prog2.gyp:prog2',
- 'subdir2/subdir3/prog3.gyp:prog3',
- 'subdir2/subdir3/subdir4/prog4.gyp:prog4',
- 'subdir2/subdir3/subdir4/subdir5/prog5.gyp:prog5',
- ],
- },
- {
- 'target_name': 'prog1',
- 'type': 'executable',
- 'sources': [
- 'prog1.c',
- 'func1.c',
- ],
- },
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/builddir/src/subdir2/prog2.c b/deps/npm/node_modules/node-gyp/gyp/test/builddir/src/subdir2/prog2.c
deleted file mode 100644
index bbdf4f060..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/builddir/src/subdir2/prog2.c
+++ /dev/null
@@ -1,10 +0,0 @@
-#include <stdio.h>
-
-extern void func2(void);
-
-int main(int argc, char *argv[])
-{
- printf("Hello from subdir2/prog2.c\n");
- func2();
- return 0;
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/builddir/src/subdir2/prog2.gyp b/deps/npm/node_modules/node-gyp/gyp/test/builddir/src/subdir2/prog2.gyp
deleted file mode 100644
index 96299b646..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/builddir/src/subdir2/prog2.gyp
+++ /dev/null
@@ -1,19 +0,0 @@
-# Copyright (c) 2009 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'includes': [
- '../builddir.gypi',
- ],
- 'targets': [
- {
- 'target_name': 'prog2',
- 'type': 'executable',
- 'sources': [
- 'prog2.c',
- '../func2.c',
- ],
- },
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/builddir/src/subdir2/subdir3/prog3.c b/deps/npm/node_modules/node-gyp/gyp/test/builddir/src/subdir2/subdir3/prog3.c
deleted file mode 100644
index 10c530b23..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/builddir/src/subdir2/subdir3/prog3.c
+++ /dev/null
@@ -1,10 +0,0 @@
-#include <stdio.h>
-
-extern void func3(void);
-
-int main(int argc, char *argv[])
-{
- printf("Hello from subdir2/subdir3/prog3.c\n");
- func3();
- return 0;
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/builddir/src/subdir2/subdir3/prog3.gyp b/deps/npm/node_modules/node-gyp/gyp/test/builddir/src/subdir2/subdir3/prog3.gyp
deleted file mode 100644
index d7df43c7b..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/builddir/src/subdir2/subdir3/prog3.gyp
+++ /dev/null
@@ -1,19 +0,0 @@
-# Copyright (c) 2009 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'includes': [
- '../../builddir.gypi',
- ],
- 'targets': [
- {
- 'target_name': 'prog3',
- 'type': 'executable',
- 'sources': [
- 'prog3.c',
- '../../func3.c',
- ],
- },
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/builddir/src/subdir2/subdir3/subdir4/prog4.c b/deps/npm/node_modules/node-gyp/gyp/test/builddir/src/subdir2/subdir3/subdir4/prog4.c
deleted file mode 100644
index dcba9a9d4..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/builddir/src/subdir2/subdir3/subdir4/prog4.c
+++ /dev/null
@@ -1,10 +0,0 @@
-#include <stdio.h>
-
-extern void func4(void);
-
-int main(int argc, char *argv[])
-{
- printf("Hello from subdir2/subdir3/subdir4/prog4.c\n");
- func4();
- return 0;
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/builddir/src/subdir2/subdir3/subdir4/prog4.gyp b/deps/npm/node_modules/node-gyp/gyp/test/builddir/src/subdir2/subdir3/subdir4/prog4.gyp
deleted file mode 100644
index 862a8a18c..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/builddir/src/subdir2/subdir3/subdir4/prog4.gyp
+++ /dev/null
@@ -1,19 +0,0 @@
-# Copyright (c) 2009 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'includes': [
- '../../../builddir.gypi',
- ],
- 'targets': [
- {
- 'target_name': 'prog4',
- 'type': 'executable',
- 'sources': [
- 'prog4.c',
- '../../../func4.c',
- ],
- },
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/builddir/src/subdir2/subdir3/subdir4/subdir5/prog5.c b/deps/npm/node_modules/node-gyp/gyp/test/builddir/src/subdir2/subdir3/subdir4/subdir5/prog5.c
deleted file mode 100644
index 69132e576..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/builddir/src/subdir2/subdir3/subdir4/subdir5/prog5.c
+++ /dev/null
@@ -1,10 +0,0 @@
-#include <stdio.h>
-
-extern void func5(void);
-
-int main(int argc, char *argv[])
-{
- printf("Hello from subdir2/subdir3/subdir4/subdir5/prog5.c\n");
- func5();
- return 0;
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/builddir/src/subdir2/subdir3/subdir4/subdir5/prog5.gyp b/deps/npm/node_modules/node-gyp/gyp/test/builddir/src/subdir2/subdir3/subdir4/subdir5/prog5.gyp
deleted file mode 100644
index fe1c9cbf5..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/builddir/src/subdir2/subdir3/subdir4/subdir5/prog5.gyp
+++ /dev/null
@@ -1,19 +0,0 @@
-# Copyright (c) 2009 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'includes': [
- '../../../../builddir.gypi',
- ],
- 'targets': [
- {
- 'target_name': 'prog5',
- 'type': 'executable',
- 'sources': [
- 'prog5.c',
- '../../../../func5.c',
- ],
- },
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/cflags/cflags.c b/deps/npm/node_modules/node-gyp/gyp/test/cflags/cflags.c
deleted file mode 100644
index c1e245207..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/cflags/cflags.c
+++ /dev/null
@@ -1,15 +0,0 @@
-/* Copyright (c) 2010 Google Inc. All rights reserved.
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file. */
-
-#include <stdio.h>
-
-int main(int argc, char *argv[])
-{
-#ifdef __OPTIMIZE__
- printf("Using an optimization flag\n");
-#else
- printf("Using no optimization flag\n");
-#endif
- return 0;
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/cflags/cflags.gyp b/deps/npm/node_modules/node-gyp/gyp/test/cflags/cflags.gyp
deleted file mode 100644
index 9003fb167..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/cflags/cflags.gyp
+++ /dev/null
@@ -1,16 +0,0 @@
-# Copyright (c) 2010 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'targets': [
- {
- 'target_name': 'cflags',
- 'type': 'executable',
- 'opt': '-Os',
- 'sources': [
- 'cflags.c',
- ],
- },
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/cflags/gyptest-cflags.py b/deps/npm/node_modules/node-gyp/gyp/test/cflags/gyptest-cflags.py
deleted file mode 100755
index a4cee4bf0..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/cflags/gyptest-cflags.py
+++ /dev/null
@@ -1,65 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Verifies build of an executable with C++ define specified by a gyp define, and
-the use of the environment during regeneration when the gyp file changes.
-"""
-
-import os
-import TestGyp
-
-env_stack = []
-
-
-def PushEnv():
- env_copy = os.environ.copy()
- env_stack.append(env_copy)
-
-def PopEnv():
- os.eniron=env_stack.pop()
-
-# Regenerating build files when a gyp file changes is currently only supported
-# by the make and Android generators.
-test = TestGyp.TestGyp(formats=['make', 'android'])
-
-try:
- PushEnv()
- os.environ['CFLAGS'] = '-O0'
- test.run_gyp('cflags.gyp')
-finally:
- # We clear the environ after calling gyp. When the auto-regeneration happens,
- # the same define should be reused anyway. Reset to empty string first in
- # case the platform doesn't support unsetenv.
- PopEnv()
-
-test.build('cflags.gyp')
-
-expect = """\
-Using no optimization flag
-"""
-test.run_built_executable('cflags', stdout=expect)
-
-test.sleep()
-
-try:
- PushEnv()
- os.environ['CFLAGS'] = '-O2'
- test.run_gyp('cflags.gyp')
-finally:
- # We clear the environ after calling gyp. When the auto-regeneration happens,
- # the same define should be reused anyway. Reset to empty string first in
- # case the platform doesn't support unsetenv.
- PopEnv()
-
-test.build('cflags.gyp')
-
-expect = """\
-Using an optimization flag
-"""
-test.run_built_executable('cflags', stdout=expect)
-
-test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/compilable/gyptest-headers.py b/deps/npm/node_modules/node-gyp/gyp/test/compilable/gyptest-headers.py
deleted file mode 100755
index 91760216f..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/compilable/gyptest-headers.py
+++ /dev/null
@@ -1,29 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2009 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Verifies that .hpp files are ignored when included in the source list on all
-platforms.
-"""
-
-import TestGyp
-
-test = TestGyp.TestGyp()
-
-test.run_gyp('headers.gyp', chdir='src')
-
-test.relocate('src', 'relocate/src')
-
-test.build('headers.gyp', test.ALL, chdir='relocate/src')
-
-expect = """\
-Hello from program.c
-Hello from lib1.c
-"""
-test.run_built_executable('program', chdir='relocate/src', stdout=expect)
-
-
-test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/compilable/src/headers.gyp b/deps/npm/node_modules/node-gyp/gyp/test/compilable/src/headers.gyp
deleted file mode 100644
index b6c2a8857..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/compilable/src/headers.gyp
+++ /dev/null
@@ -1,26 +0,0 @@
-# Copyright (c) 2009 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'targets': [
- {
- 'target_name': 'program',
- 'type': 'executable',
- 'dependencies': [
- 'lib1'
- ],
- 'sources': [
- 'program.cpp',
- ],
- },
- {
- 'target_name': 'lib1',
- 'type': 'static_library',
- 'sources': [
- 'lib1.hpp',
- 'lib1.cpp',
- ],
- },
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/compilable/src/lib1.cpp b/deps/npm/node_modules/node-gyp/gyp/test/compilable/src/lib1.cpp
deleted file mode 100644
index 51bc31a40..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/compilable/src/lib1.cpp
+++ /dev/null
@@ -1,7 +0,0 @@
-#include <stdio.h>
-#include "lib1.hpp"
-
-void lib1_function(void) {
- fprintf(stdout, "Hello from lib1.c\n");
- fflush(stdout);
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/compilable/src/lib1.hpp b/deps/npm/node_modules/node-gyp/gyp/test/compilable/src/lib1.hpp
deleted file mode 100644
index 72e63e8ac..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/compilable/src/lib1.hpp
+++ /dev/null
@@ -1,6 +0,0 @@
-#ifndef _lib1_hpp
-#define _lib1_hpp
-
-extern void lib1_function(void);
-
-#endif
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/compilable/src/program.cpp b/deps/npm/node_modules/node-gyp/gyp/test/compilable/src/program.cpp
deleted file mode 100644
index 81420bad4..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/compilable/src/program.cpp
+++ /dev/null
@@ -1,9 +0,0 @@
-#include <stdio.h>
-#include "lib1.hpp"
-
-int main(int argc, char *argv[]) {
- fprintf(stdout, "Hello from program.c\n");
- fflush(stdout);
- lib1_function();
- return 0;
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/compiler-override/compiler-global-settings.gyp.in b/deps/npm/node_modules/node-gyp/gyp/test/compiler-override/compiler-global-settings.gyp.in
deleted file mode 100644
index ca13a53e8..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/compiler-override/compiler-global-settings.gyp.in
+++ /dev/null
@@ -1,34 +0,0 @@
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- # PYTHON and PWD are replaced by the test code before this
- # gyp file runs
- 'make_global_settings': [
- ['CC', r'$PYTHON $PWD/my_cc.py FOO'],
- ['CXX', r'$PYTHON $PWD/my_cxx.py FOO'],
- ['CC.host', r'$PYTHON $PWD/my_cc.py BAR'],
- ['CXX.host', r'$PYTHON $PWD/my_cxx.py BAR'],
-
- ['LD', r'$PYTHON $PWD/my_ld.py FOO_LINK'],
- ['LD.host', r'$PYTHON $PWD/my_ld.py BAR_LINK'],
- ['LINK', r'$PYTHON $PWD/my_ld.py FOO_LINK'],
- ['LINK.host', r'$PYTHON $PWD/my_ld.py BAR_LINK'],
- ],
-
- # The above global settings should mean that
- # that these targets are built using the fake
- # toolchain above.
- 'targets': [
- {
- 'toolset': '$TOOLSET',
- 'target_name': 'hello',
- 'type': 'executable',
- 'sources': [
- 'test.c',
- 'cxxtest.cc',
- ],
- },
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/compiler-override/compiler-host.gyp b/deps/npm/node_modules/node-gyp/gyp/test/compiler-override/compiler-host.gyp
deleted file mode 100644
index 05b0368d4..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/compiler-override/compiler-host.gyp
+++ /dev/null
@@ -1,17 +0,0 @@
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'targets': [
- {
- 'toolset': 'host',
- 'target_name': 'hello',
- 'type': 'executable',
- 'sources': [
- 'test.c',
- 'cxxtest.cc',
- ],
- },
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/compiler-override/compiler.gyp b/deps/npm/node_modules/node-gyp/gyp/test/compiler-override/compiler.gyp
deleted file mode 100644
index c2f3002f2..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/compiler-override/compiler.gyp
+++ /dev/null
@@ -1,16 +0,0 @@
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'targets': [
- {
- 'target_name': 'hello',
- 'type': 'executable',
- 'sources': [
- 'test.c',
- 'cxxtest.cc',
- ],
- },
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/compiler-override/cxxtest.cc b/deps/npm/node_modules/node-gyp/gyp/test/compiler-override/cxxtest.cc
deleted file mode 100644
index 517a35361..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/compiler-override/cxxtest.cc
+++ /dev/null
@@ -1,7 +0,0 @@
-// Copyright (c) 2012 Google Inc. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Deliberate C syntax error as this file should never be passed to
-// the actual compiler
-#error Should not be passed to a real compiler
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/compiler-override/gyptest-compiler-env.py b/deps/npm/node_modules/node-gyp/gyp/test/compiler-override/gyptest-compiler-env.py
deleted file mode 100755
index 896695dbd..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/compiler-override/gyptest-compiler-env.py
+++ /dev/null
@@ -1,55 +0,0 @@
-#!/usr/bin/env python
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-"""
-Verifies that the user can override the compiler and linker using CC/CXX/LD
-environment variables.
-"""
-
-import TestGyp
-import os
-import copy
-import sys
-
-here = os.path.dirname(os.path.abspath(__file__))
-
-if sys.platform == 'win32':
- # cross compiling not support by ninja on windows
- # and make not supported on windows at all.
- sys.exit(0)
-
-test = TestGyp.TestGyp(formats=['ninja', 'make'])
-
-def CheckCompiler(test, gypfile, check_for):
- test.run_gyp(gypfile)
- test.build(gypfile)
-
- # We can't test to presence of my_ld.py in the output since
- # ninja will use CXX_target as the linker regardless
- test.must_contain_all_lines(test.stdout(), check_for)
-
-oldenv = os.environ.copy()
-try:
- # Check that CC, CXX and LD set target compiler
- os.environ['CC'] = 'python %s/my_cc.py FOO' % here
- os.environ['CXX'] = 'python %s/my_cxx.py FOO' % here
- os.environ['LD'] = 'python %s/my_ld.py FOO_LINK' % here
- CheckCompiler(test, 'compiler.gyp',
- ['my_cc.py', 'my_cxx.py', 'FOO', 'FOO_LINK'])
-finally:
- os.environ.clear()
- os.environ.update(oldenv)
-
-try:
- # Check that CC_host sets host compilee
- os.environ['CC_host'] = 'python %s/my_cc.py HOST' % here
- os.environ['CXX_host'] = 'python %s/my_cxx.py HOST' % here
- os.environ['LD_host'] = 'python %s/my_ld.py HOST_LINK' % here
- CheckCompiler(test, 'compiler-host.gyp',
- ['my_cc.py', 'my_cxx.py', 'HOST', 'HOST_LINK'])
-finally:
- os.environ.clear()
- os.environ.update(oldenv)
-
-test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/compiler-override/gyptest-compiler-global-settings.py b/deps/npm/node_modules/node-gyp/gyp/test/compiler-override/gyptest-compiler-global-settings.py
deleted file mode 100755
index 23ebe3661..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/compiler-override/gyptest-compiler-global-settings.py
+++ /dev/null
@@ -1,52 +0,0 @@
-#!/usr/bin/env python
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-"""
-Verifies that make_global_settings can be used to override the
-compiler settings.
-"""
-
-import TestGyp
-import os
-import copy
-import sys
-from string import Template
-
-
-if sys.platform == 'win32':
- # cross compiling not support by ninja on windows
- # and make not supported on windows at all.
- sys.exit(0)
-
-test = TestGyp.TestGyp(formats=['ninja', 'make'])
-
-gypfile = 'compiler-global-settings.gyp'
-
-replacements = { 'PYTHON': '/usr/bin/python', 'PWD': os.getcwd()}
-
-# Process the .in gyp file to produce the final gyp file
-# since we need to include absolute paths in the make_global_settings
-# section.
-replacements['TOOLSET'] = 'target'
-s = Template(open(gypfile + '.in').read())
-output = open(gypfile, 'w')
-output.write(s.substitute(replacements))
-output.close()
-
-test.run_gyp(gypfile)
-test.build(gypfile)
-test.must_contain_all_lines(test.stdout(), ['my_cc.py', 'my_cxx.py', 'FOO'])
-
-# Same again but with the host toolset.
-replacements['TOOLSET'] = 'host'
-s = Template(open(gypfile + '.in').read())
-output = open(gypfile, 'w')
-output.write(s.substitute(replacements))
-output.close()
-
-test.run_gyp(gypfile)
-test.build(gypfile)
-test.must_contain_all_lines(test.stdout(), ['my_cc.py', 'my_cxx.py', 'BAR'])
-
-test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/compiler-override/my_cc.py b/deps/npm/node_modules/node-gyp/gyp/test/compiler-override/my_cc.py
deleted file mode 100755
index e2f0bdd51..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/compiler-override/my_cc.py
+++ /dev/null
@@ -1,6 +0,0 @@
-#!/usr/bin/env python
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-import sys
-print sys.argv
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/compiler-override/my_cxx.py b/deps/npm/node_modules/node-gyp/gyp/test/compiler-override/my_cxx.py
deleted file mode 100755
index e2f0bdd51..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/compiler-override/my_cxx.py
+++ /dev/null
@@ -1,6 +0,0 @@
-#!/usr/bin/env python
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-import sys
-print sys.argv
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/compiler-override/my_ld.py b/deps/npm/node_modules/node-gyp/gyp/test/compiler-override/my_ld.py
deleted file mode 100755
index e2f0bdd51..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/compiler-override/my_ld.py
+++ /dev/null
@@ -1,6 +0,0 @@
-#!/usr/bin/env python
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-import sys
-print sys.argv
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/compiler-override/test.c b/deps/npm/node_modules/node-gyp/gyp/test/compiler-override/test.c
deleted file mode 100644
index 517a35361..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/compiler-override/test.c
+++ /dev/null
@@ -1,7 +0,0 @@
-// Copyright (c) 2012 Google Inc. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Deliberate C syntax error as this file should never be passed to
-// the actual compiler
-#error Should not be passed to a real compiler
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/configurations/basics/configurations.c b/deps/npm/node_modules/node-gyp/gyp/test/configurations/basics/configurations.c
deleted file mode 100644
index 6c1f90016..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/configurations/basics/configurations.c
+++ /dev/null
@@ -1,15 +0,0 @@
-#include <stdio.h>
-
-int main(int argc, char *argv[])
-{
-#ifdef FOO
- printf("Foo configuration\n");
-#endif
-#ifdef DEBUG
- printf("Debug configuration\n");
-#endif
-#ifdef RELEASE
- printf("Release configuration\n");
-#endif
- return 0;
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/configurations/basics/configurations.gyp b/deps/npm/node_modules/node-gyp/gyp/test/configurations/basics/configurations.gyp
deleted file mode 100644
index 93f1d8d5c..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/configurations/basics/configurations.gyp
+++ /dev/null
@@ -1,32 +0,0 @@
-# Copyright (c) 2009 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'targets': [
- {
- 'target_name': 'configurations',
- 'type': 'executable',
- 'sources': [
- 'configurations.c',
- ],
- 'configurations': {
- 'Debug': {
- 'defines': [
- 'DEBUG',
- ],
- },
- 'Release': {
- 'defines': [
- 'RELEASE',
- ],
- },
- 'Foo': {
- 'defines': [
- 'FOO',
- ],
- },
- }
- },
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/configurations/basics/gyptest-configurations.py b/deps/npm/node_modules/node-gyp/gyp/test/configurations/basics/gyptest-configurations.py
deleted file mode 100755
index 27cd2e87d..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/configurations/basics/gyptest-configurations.py
+++ /dev/null
@@ -1,29 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2009 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Verifies build of an executable in three different configurations.
-"""
-
-import TestGyp
-
-test = TestGyp.TestGyp()
-
-test.run_gyp('configurations.gyp')
-
-test.set_configuration('Release')
-test.build('configurations.gyp')
-test.run_built_executable('configurations', stdout="Release configuration\n")
-
-test.set_configuration('Debug')
-test.build('configurations.gyp')
-test.run_built_executable('configurations', stdout="Debug configuration\n")
-
-test.set_configuration('Foo')
-test.build('configurations.gyp')
-test.run_built_executable('configurations', stdout="Foo configuration\n")
-
-test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/configurations/inheritance/configurations.c b/deps/npm/node_modules/node-gyp/gyp/test/configurations/inheritance/configurations.c
deleted file mode 100644
index 2d5565eeb..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/configurations/inheritance/configurations.c
+++ /dev/null
@@ -1,21 +0,0 @@
-#include <stdio.h>
-
-int main(int argc, char *argv[])
-{
-#ifdef BASE
- printf("Base configuration\n");
-#endif
-#ifdef COMMON
- printf("Common configuration\n");
-#endif
-#ifdef COMMON2
- printf("Common2 configuration\n");
-#endif
-#ifdef DEBUG
- printf("Debug configuration\n");
-#endif
-#ifdef RELEASE
- printf("Release configuration\n");
-#endif
- return 0;
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/configurations/inheritance/configurations.gyp b/deps/npm/node_modules/node-gyp/gyp/test/configurations/inheritance/configurations.gyp
deleted file mode 100644
index 9441376b4..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/configurations/inheritance/configurations.gyp
+++ /dev/null
@@ -1,40 +0,0 @@
-# Copyright (c) 2009 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'target_defaults': {
- 'configurations': {
- 'Base': {
- 'abstract': 1,
- 'defines': ['BASE'],
- },
- 'Common': {
- 'abstract': 1,
- 'inherit_from': ['Base'],
- 'defines': ['COMMON'],
- },
- 'Common2': {
- 'abstract': 1,
- 'defines': ['COMMON2'],
- },
- 'Debug': {
- 'inherit_from': ['Common', 'Common2'],
- 'defines': ['DEBUG'],
- },
- 'Release': {
- 'inherit_from': ['Common', 'Common2'],
- 'defines': ['RELEASE'],
- },
- },
- },
- 'targets': [
- {
- 'target_name': 'configurations',
- 'type': 'executable',
- 'sources': [
- 'configurations.c',
- ],
- },
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/configurations/inheritance/gyptest-inheritance.py b/deps/npm/node_modules/node-gyp/gyp/test/configurations/inheritance/gyptest-inheritance.py
deleted file mode 100755
index 22c73a375..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/configurations/inheritance/gyptest-inheritance.py
+++ /dev/null
@@ -1,33 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2009 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Verifies build of an executable in three different configurations.
-"""
-
-import TestGyp
-
-test = TestGyp.TestGyp()
-
-test.run_gyp('configurations.gyp')
-
-test.set_configuration('Release')
-test.build('configurations.gyp')
-test.run_built_executable('configurations',
- stdout=('Base configuration\n'
- 'Common configuration\n'
- 'Common2 configuration\n'
- 'Release configuration\n'))
-
-test.set_configuration('Debug')
-test.build('configurations.gyp')
-test.run_built_executable('configurations',
- stdout=('Base configuration\n'
- 'Common configuration\n'
- 'Common2 configuration\n'
- 'Debug configuration\n'))
-
-test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/configurations/invalid/actions.gyp b/deps/npm/node_modules/node-gyp/gyp/test/configurations/invalid/actions.gyp
deleted file mode 100644
index a6e42089e..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/configurations/invalid/actions.gyp
+++ /dev/null
@@ -1,18 +0,0 @@
-# Copyright (c) 2010 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'targets': [
- {
- 'target_name': 'configurations',
- 'type': 'none',
- 'configurations': {
- 'Debug': {
- 'actions': [
- ],
- },
- }
- },
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/configurations/invalid/all_dependent_settings.gyp b/deps/npm/node_modules/node-gyp/gyp/test/configurations/invalid/all_dependent_settings.gyp
deleted file mode 100644
index b16a245df..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/configurations/invalid/all_dependent_settings.gyp
+++ /dev/null
@@ -1,18 +0,0 @@
-# Copyright (c) 2010 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'targets': [
- {
- 'target_name': 'configurations',
- 'type': 'none',
- 'configurations': {
- 'Debug': {
- 'all_dependent_settings': [
- ],
- },
- }
- },
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/configurations/invalid/configurations.gyp b/deps/npm/node_modules/node-gyp/gyp/test/configurations/invalid/configurations.gyp
deleted file mode 100644
index 2cfc96004..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/configurations/invalid/configurations.gyp
+++ /dev/null
@@ -1,18 +0,0 @@
-# Copyright (c) 2010 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'targets': [
- {
- 'target_name': 'configurations',
- 'type': 'none',
- 'configurations': {
- 'Debug': {
- 'configurations': [
- ],
- },
- }
- },
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/configurations/invalid/dependencies.gyp b/deps/npm/node_modules/node-gyp/gyp/test/configurations/invalid/dependencies.gyp
deleted file mode 100644
index 74633f3f1..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/configurations/invalid/dependencies.gyp
+++ /dev/null
@@ -1,18 +0,0 @@
-# Copyright (c) 2010 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'targets': [
- {
- 'target_name': 'configurations',
- 'type': 'none',
- 'configurations': {
- 'Debug': {
- 'dependencies': [
- ],
- },
- }
- },
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/configurations/invalid/direct_dependent_settings.gyp b/deps/npm/node_modules/node-gyp/gyp/test/configurations/invalid/direct_dependent_settings.gyp
deleted file mode 100644
index 8a0f2e95e..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/configurations/invalid/direct_dependent_settings.gyp
+++ /dev/null
@@ -1,18 +0,0 @@
-# Copyright (c) 2010 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'targets': [
- {
- 'target_name': 'configurations',
- 'type': 'none',
- 'configurations': {
- 'Debug': {
- 'direct_dependent_settings': [
- ],
- },
- }
- },
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/configurations/invalid/gyptest-configurations.py b/deps/npm/node_modules/node-gyp/gyp/test/configurations/invalid/gyptest-configurations.py
deleted file mode 100755
index c8b853e7a..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/configurations/invalid/gyptest-configurations.py
+++ /dev/null
@@ -1,39 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2010 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Verifies build of an executable in three different configurations.
-"""
-
-import TestGyp
-
-# Keys that do not belong inside a configuration dictionary.
-invalid_configuration_keys = [
- 'actions',
- 'all_dependent_settings',
- 'configurations',
- 'dependencies',
- 'direct_dependent_settings',
- 'libraries',
- 'link_settings',
- 'sources',
- 'standalone_static_library',
- 'target_name',
- 'type',
-]
-
-test = TestGyp.TestGyp()
-
-if test.format == 'scons':
- test.skip_test('TODO: http://code.google.com/p/gyp/issues/detail?id=176\n')
-
-for test_key in invalid_configuration_keys:
- test.run_gyp('%s.gyp' % test_key, status=1, stderr=None)
- expect = ['%s not allowed in the Debug configuration, found in target '
- '%s.gyp:configurations#target' % (test_key, test_key)]
- test.must_contain_all_lines(test.stderr(), expect)
-
-test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/configurations/invalid/libraries.gyp b/deps/npm/node_modules/node-gyp/gyp/test/configurations/invalid/libraries.gyp
deleted file mode 100644
index c4014ed40..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/configurations/invalid/libraries.gyp
+++ /dev/null
@@ -1,18 +0,0 @@
-# Copyright (c) 2010 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'targets': [
- {
- 'target_name': 'configurations',
- 'type': 'none',
- 'configurations': {
- 'Debug': {
- 'libraries': [
- ],
- },
- }
- },
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/configurations/invalid/link_settings.gyp b/deps/npm/node_modules/node-gyp/gyp/test/configurations/invalid/link_settings.gyp
deleted file mode 100644
index 2f0e1c46f..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/configurations/invalid/link_settings.gyp
+++ /dev/null
@@ -1,18 +0,0 @@
-# Copyright (c) 2010 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'targets': [
- {
- 'target_name': 'configurations',
- 'type': 'none',
- 'configurations': {
- 'Debug': {
- 'link_settings': [
- ],
- },
- }
- },
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/configurations/invalid/sources.gyp b/deps/npm/node_modules/node-gyp/gyp/test/configurations/invalid/sources.gyp
deleted file mode 100644
index b38cca038..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/configurations/invalid/sources.gyp
+++ /dev/null
@@ -1,18 +0,0 @@
-# Copyright (c) 2010 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'targets': [
- {
- 'target_name': 'configurations',
- 'type': 'none',
- 'configurations': {
- 'Debug': {
- 'sources': [
- ],
- },
- }
- },
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/configurations/invalid/standalone_static_library.gyp b/deps/npm/node_modules/node-gyp/gyp/test/configurations/invalid/standalone_static_library.gyp
deleted file mode 100644
index 2edb9febd..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/configurations/invalid/standalone_static_library.gyp
+++ /dev/null
@@ -1,17 +0,0 @@
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'targets': [
- {
- 'target_name': 'configurations',
- 'type': 'none',
- 'configurations': {
- 'Debug': {
- 'standalone_static_library': 1,
- },
- }
- },
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/configurations/invalid/target_name.gyp b/deps/npm/node_modules/node-gyp/gyp/test/configurations/invalid/target_name.gyp
deleted file mode 100644
index 83baad95d..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/configurations/invalid/target_name.gyp
+++ /dev/null
@@ -1,18 +0,0 @@
-# Copyright (c) 2010 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'targets': [
- {
- 'target_name': 'configurations',
- 'type': 'none',
- 'configurations': {
- 'Debug': {
- 'target_name': [
- ],
- },
- }
- },
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/configurations/invalid/type.gyp b/deps/npm/node_modules/node-gyp/gyp/test/configurations/invalid/type.gyp
deleted file mode 100644
index bc55898b8..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/configurations/invalid/type.gyp
+++ /dev/null
@@ -1,18 +0,0 @@
-# Copyright (c) 2010 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'targets': [
- {
- 'target_name': 'configurations',
- 'type': 'none',
- 'configurations': {
- 'Debug': {
- 'type': [
- ],
- },
- }
- },
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/configurations/target_platform/configurations.gyp b/deps/npm/node_modules/node-gyp/gyp/test/configurations/target_platform/configurations.gyp
deleted file mode 100644
index d15429f4e..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/configurations/target_platform/configurations.gyp
+++ /dev/null
@@ -1,58 +0,0 @@
-# Copyright (c) 2009 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'target_defaults': {
- 'configurations': {
- 'Debug_Win32': {
- 'msvs_configuration_platform': 'Win32',
- },
- 'Debug_x64': {
- 'msvs_configuration_platform': 'x64',
- },
- },
- },
- 'targets': [
- {
- 'target_name': 'left',
- 'type': 'static_library',
- 'sources': [
- 'left.c',
- ],
- 'configurations': {
- 'Debug_Win32': {
- 'msvs_target_platform': 'x64',
- },
- },
- },
- {
- 'target_name': 'right',
- 'type': 'static_library',
- 'sources': [
- 'right.c',
- ],
- },
- {
- 'target_name': 'front_left',
- 'type': 'executable',
- 'dependencies': ['left'],
- 'sources': [
- 'front.c',
- ],
- 'configurations': {
- 'Debug_Win32': {
- 'msvs_target_platform': 'x64',
- },
- },
- },
- {
- 'target_name': 'front_right',
- 'type': 'executable',
- 'dependencies': ['right'],
- 'sources': [
- 'front.c',
- ],
- },
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/configurations/target_platform/front.c b/deps/npm/node_modules/node-gyp/gyp/test/configurations/target_platform/front.c
deleted file mode 100644
index 12b1d0aa3..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/configurations/target_platform/front.c
+++ /dev/null
@@ -1,8 +0,0 @@
-#include <stdio.h>
-
-const char *message(void);
-
-int main(int argc, char *argv[]) {
- printf("%s\n", message());
- return 0;
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/configurations/target_platform/gyptest-target_platform.py b/deps/npm/node_modules/node-gyp/gyp/test/configurations/target_platform/gyptest-target_platform.py
deleted file mode 100755
index ae4e9e5a2..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/configurations/target_platform/gyptest-target_platform.py
+++ /dev/null
@@ -1,40 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2009 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Tests the msvs specific msvs_target_platform option.
-"""
-
-import TestGyp
-import TestCommon
-
-
-def RunX64(exe, stdout):
- try:
- test.run_built_executable(exe, stdout=stdout)
- except WindowsError, e:
- # Assume the exe is 64-bit if it can't load on 32-bit systems.
- # Both versions of the error are required because different versions
- # of python seem to return different errors for invalid exe type.
- if e.errno != 193 and '[Error 193]' not in str(e):
- raise
-
-
-test = TestGyp.TestGyp(formats=['msvs'])
-
-test.run_gyp('configurations.gyp')
-
-test.set_configuration('Debug|x64')
-test.build('configurations.gyp', rebuild=True)
-RunX64('front_left', stdout=('left\n'))
-RunX64('front_right', stdout=('right\n'))
-
-test.set_configuration('Debug|Win32')
-test.build('configurations.gyp', rebuild=True)
-RunX64('front_left', stdout=('left\n'))
-test.run_built_executable('front_right', stdout=('right\n'))
-
-test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/configurations/target_platform/left.c b/deps/npm/node_modules/node-gyp/gyp/test/configurations/target_platform/left.c
deleted file mode 100644
index 1ce2ea122..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/configurations/target_platform/left.c
+++ /dev/null
@@ -1,3 +0,0 @@
-const char *message(void) {
- return "left";
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/configurations/target_platform/right.c b/deps/npm/node_modules/node-gyp/gyp/test/configurations/target_platform/right.c
deleted file mode 100644
index b1578492f..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/configurations/target_platform/right.c
+++ /dev/null
@@ -1,3 +0,0 @@
-const char *message(void) {
- return "right";
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/configurations/x64/configurations.c b/deps/npm/node_modules/node-gyp/gyp/test/configurations/x64/configurations.c
deleted file mode 100644
index 72c97e31d..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/configurations/x64/configurations.c
+++ /dev/null
@@ -1,12 +0,0 @@
-#include <stdio.h>
-
-int main(int argc, char *argv[]) {
- if (sizeof(void*) == 4) {
- printf("Running Win32\n");
- } else if (sizeof(void*) == 8) {
- printf("Running x64\n");
- } else {
- printf("Unexpected platform\n");
- }
- return 0;
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/configurations/x64/configurations.gyp b/deps/npm/node_modules/node-gyp/gyp/test/configurations/x64/configurations.gyp
deleted file mode 100644
index 8b0139f14..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/configurations/x64/configurations.gyp
+++ /dev/null
@@ -1,38 +0,0 @@
-# Copyright (c) 2009 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'target_defaults': {
- 'configurations': {
- 'Debug': {
- 'msvs_configuration_platform': 'Win32',
- },
- 'Debug_x64': {
- 'inherit_from': ['Debug'],
- 'msvs_configuration_platform': 'x64',
- },
- },
- },
- 'targets': [
- {
- 'target_name': 'configurations',
- 'type': 'executable',
- 'sources': [
- 'configurations.c',
- ],
- },
- {
- 'target_name': 'configurations64',
- 'type': 'executable',
- 'sources': [
- 'configurations.c',
- ],
- 'configurations': {
- 'Debug': {
- 'msvs_target_platform': 'x64',
- },
- },
- },
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/configurations/x64/gyptest-x86.py b/deps/npm/node_modules/node-gyp/gyp/test/configurations/x64/gyptest-x86.py
deleted file mode 100755
index 8675d8f7e..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/configurations/x64/gyptest-x86.py
+++ /dev/null
@@ -1,31 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Verifies build of an executable in three different configurations.
-"""
-
-import TestGyp
-
-import sys
-
-formats = ['msvs']
-if sys.platform == 'win32':
- formats += ['ninja']
-test = TestGyp.TestGyp(formats=formats)
-
-test.run_gyp('configurations.gyp')
-test.set_configuration('Debug|Win32')
-test.build('configurations.gyp', test.ALL)
-
-for machine, suffix in [('14C machine (x86)', ''),
- ('8664 machine (x64)', '64')]:
- output = test.run_dumpbin(
- '/headers', test.built_file_path('configurations%s.exe' % suffix))
- if machine not in output:
- test.fail_test()
-
-test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/copies/gyptest-all.py b/deps/npm/node_modules/node-gyp/gyp/test/copies/gyptest-all.py
deleted file mode 100755
index 8542ab7b9..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/copies/gyptest-all.py
+++ /dev/null
@@ -1,40 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2009 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Verifies file copies using an explicit build target of 'all'.
-"""
-
-import TestGyp
-
-test = TestGyp.TestGyp()
-
-test.run_gyp('copies.gyp', chdir='src')
-
-test.relocate('src', 'relocate/src')
-
-test.build('copies.gyp', test.ALL, chdir='relocate/src')
-
-test.must_match(['relocate', 'src', 'copies-out', 'file1'], 'file1 contents\n')
-
-test.built_file_must_match('copies-out/file2',
- 'file2 contents\n',
- chdir='relocate/src')
-
-test.built_file_must_match('copies-out/directory/file3',
- 'file3 contents\n',
- chdir='relocate/src')
-test.built_file_must_match('copies-out/directory/file4',
- 'file4 contents\n',
- chdir='relocate/src')
-test.built_file_must_match('copies-out/directory/subdir/file5',
- 'file5 contents\n',
- chdir='relocate/src')
-test.built_file_must_match('copies-out/subdir/file6',
- 'file6 contents\n',
- chdir='relocate/src')
-
-test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/copies/gyptest-default.py b/deps/npm/node_modules/node-gyp/gyp/test/copies/gyptest-default.py
deleted file mode 100755
index a5d1bf9c3..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/copies/gyptest-default.py
+++ /dev/null
@@ -1,40 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2009 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Verifies file copies using the build tool default.
-"""
-
-import TestGyp
-
-test = TestGyp.TestGyp()
-
-test.run_gyp('copies.gyp', chdir='src')
-
-test.relocate('src', 'relocate/src')
-
-test.build('copies.gyp', chdir='relocate/src')
-
-test.must_match(['relocate', 'src', 'copies-out', 'file1'], 'file1 contents\n')
-
-test.built_file_must_match('copies-out/file2',
- 'file2 contents\n',
- chdir='relocate/src')
-
-test.built_file_must_match('copies-out/directory/file3',
- 'file3 contents\n',
- chdir='relocate/src')
-test.built_file_must_match('copies-out/directory/file4',
- 'file4 contents\n',
- chdir='relocate/src')
-test.built_file_must_match('copies-out/directory/subdir/file5',
- 'file5 contents\n',
- chdir='relocate/src')
-test.built_file_must_match('copies-out/subdir/file6',
- 'file6 contents\n',
- chdir='relocate/src')
-
-test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/copies/gyptest-slash.py b/deps/npm/node_modules/node-gyp/gyp/test/copies/gyptest-slash.py
deleted file mode 100755
index 81a4f42a3..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/copies/gyptest-slash.py
+++ /dev/null
@@ -1,38 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2011 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Verifies file copies with a trailing slash in the destination directory.
-"""
-
-import TestGyp
-
-test = TestGyp.TestGyp()
-test.run_gyp('copies-slash.gyp', chdir='src')
-test.relocate('src', 'relocate/src')
-test.build('copies-slash.gyp', chdir='relocate/src')
-
-test.built_file_must_match('copies-out-slash/directory/file3',
- 'file3 contents\n',
- chdir='relocate/src')
-test.built_file_must_match('copies-out-slash/directory/file4',
- 'file4 contents\n',
- chdir='relocate/src')
-test.built_file_must_match('copies-out-slash/directory/subdir/file5',
- 'file5 contents\n',
- chdir='relocate/src')
-
-test.built_file_must_match('copies-out-slash-2/directory/file3',
- 'file3 contents\n',
- chdir='relocate/src')
-test.built_file_must_match('copies-out-slash-2/directory/file4',
- 'file4 contents\n',
- chdir='relocate/src')
-test.built_file_must_match('copies-out-slash-2/directory/subdir/file5',
- 'file5 contents\n',
- chdir='relocate/src')
-
-test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/copies/gyptest-updir.py b/deps/npm/node_modules/node-gyp/gyp/test/copies/gyptest-updir.py
deleted file mode 100755
index 1bb9b1d12..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/copies/gyptest-updir.py
+++ /dev/null
@@ -1,23 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Verifies file copies where the destination is one level above an expansion that
-yields a make variable.
-"""
-
-import TestGyp
-
-test = TestGyp.TestGyp()
-test.run_gyp('copies-updir.gyp', chdir='src')
-test.relocate('src', 'relocate/src')
-test.build('copies-updir.gyp', 'copies_up', chdir='relocate/src')
-
-test.built_file_must_match('../copies-out-updir/file1',
- 'file1 contents\n',
- chdir='relocate/src')
-
-test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/copies/src/copies-slash.gyp b/deps/npm/node_modules/node-gyp/gyp/test/copies/src/copies-slash.gyp
deleted file mode 100644
index 9bf54bd18..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/copies/src/copies-slash.gyp
+++ /dev/null
@@ -1,36 +0,0 @@
-# Copyright (c) 2011 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'targets': [
- # A trailing slash on the destination directory should be ignored.
- {
- 'target_name': 'copies_recursive_trailing_slash',
- 'type': 'none',
- 'copies': [
- {
- 'destination': '<(PRODUCT_DIR)/copies-out-slash/',
- 'files': [
- 'directory/',
- ],
- },
- ],
- },
- # Even if the source directory is below <(PRODUCT_DIR).
- {
- 'target_name': 'copies_recursive_trailing_slash_in_product_dir',
- 'type': 'none',
- 'dependencies': [ ':copies_recursive_trailing_slash' ],
- 'copies': [
- {
- 'destination': '<(PRODUCT_DIR)/copies-out-slash-2/',
- 'files': [
- '<(PRODUCT_DIR)/copies-out-slash/directory/',
- ],
- },
- ],
- },
- ],
-}
-
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/copies/src/copies-updir.gyp b/deps/npm/node_modules/node-gyp/gyp/test/copies/src/copies-updir.gyp
deleted file mode 100644
index bd3bfdd1d..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/copies/src/copies-updir.gyp
+++ /dev/null
@@ -1,21 +0,0 @@
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'targets': [
- {
- 'target_name': 'copies_up',
- 'type': 'none',
- 'copies': [
- {
- 'destination': '<(PRODUCT_DIR)/../copies-out-updir',
- 'files': [
- 'file1',
- ],
- },
- ],
- },
- ],
-}
-
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/copies/src/copies.gyp b/deps/npm/node_modules/node-gyp/gyp/test/copies/src/copies.gyp
deleted file mode 100644
index ce2e0cabc..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/copies/src/copies.gyp
+++ /dev/null
@@ -1,70 +0,0 @@
-# Copyright (c) 2009 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'targets': [
- {
- 'target_name': 'copies1',
- 'type': 'none',
- 'copies': [
- {
- 'destination': 'copies-out',
- 'files': [
- 'file1',
- ],
- },
- ],
- },
- {
- 'target_name': 'copies2',
- 'type': 'none',
- 'copies': [
- {
- 'destination': '<(PRODUCT_DIR)/copies-out',
- 'files': [
- 'file2',
- ],
- },
- ],
- },
- # Copy a directory tree.
- {
- 'target_name': 'copies_recursive',
- 'type': 'none',
- 'copies': [
- {
- 'destination': '<(PRODUCT_DIR)/copies-out',
- 'files': [
- 'directory/',
- ],
- },
- ],
- },
- # Copy a directory from deeper in the tree (this should not reproduce the
- # entire directory path in the destination, only the final directory).
- {
- 'target_name': 'copies_recursive_depth',
- 'type': 'none',
- 'copies': [
- {
- 'destination': '<(PRODUCT_DIR)/copies-out',
- 'files': [
- 'parentdir/subdir/',
- ],
- },
- ],
- },
- # Verify that a null 'files' list doesn't gag the generators.
- {
- 'target_name': 'copies_null',
- 'type': 'none',
- 'copies': [
- {
- 'destination': '<(PRODUCT_DIR)/copies-null',
- 'files': [],
- },
- ],
- },
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/copies/src/directory/file3 b/deps/npm/node_modules/node-gyp/gyp/test/copies/src/directory/file3
deleted file mode 100644
index 43f16f352..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/copies/src/directory/file3
+++ /dev/null
@@ -1 +0,0 @@
-file3 contents
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/copies/src/directory/file4 b/deps/npm/node_modules/node-gyp/gyp/test/copies/src/directory/file4
deleted file mode 100644
index 5f7270a08..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/copies/src/directory/file4
+++ /dev/null
@@ -1 +0,0 @@
-file4 contents
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/copies/src/directory/subdir/file5 b/deps/npm/node_modules/node-gyp/gyp/test/copies/src/directory/subdir/file5
deleted file mode 100644
index 41f47186b..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/copies/src/directory/subdir/file5
+++ /dev/null
@@ -1 +0,0 @@
-file5 contents
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/copies/src/file1 b/deps/npm/node_modules/node-gyp/gyp/test/copies/src/file1
deleted file mode 100644
index 84d55c575..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/copies/src/file1
+++ /dev/null
@@ -1 +0,0 @@
-file1 contents
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/copies/src/file2 b/deps/npm/node_modules/node-gyp/gyp/test/copies/src/file2
deleted file mode 100644
index af1b8ae35..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/copies/src/file2
+++ /dev/null
@@ -1 +0,0 @@
-file2 contents
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/copies/src/parentdir/subdir/file6 b/deps/npm/node_modules/node-gyp/gyp/test/copies/src/parentdir/subdir/file6
deleted file mode 100644
index f5d575734..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/copies/src/parentdir/subdir/file6
+++ /dev/null
@@ -1 +0,0 @@
-file6 contents
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/custom-generator/gyptest-custom-generator.py b/deps/npm/node_modules/node-gyp/gyp/test/custom-generator/gyptest-custom-generator.py
deleted file mode 100755
index 85fd0724a..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/custom-generator/gyptest-custom-generator.py
+++ /dev/null
@@ -1,18 +0,0 @@
-#!/usr/bin/env python
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""Test that custom generators can be passed to --format
-"""
-
-import TestGyp
-
-test = TestGyp.TestGypCustom(format='mygenerator.py')
-test.run_gyp('test.gyp')
-
-# mygenerator.py should generate a file called MyBuildFile containing
-# "Testing..." alongside the gyp file.
-test.must_match('MyBuildFile', 'Testing...\n')
-
-test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/custom-generator/mygenerator.py b/deps/npm/node_modules/node-gyp/gyp/test/custom-generator/mygenerator.py
deleted file mode 100644
index 8eb4c2de1..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/custom-generator/mygenerator.py
+++ /dev/null
@@ -1,14 +0,0 @@
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""Custom gyp generator that doesn't do much."""
-
-import gyp.common
-
-generator_default_variables = {}
-
-def GenerateOutput(target_list, target_dicts, data, params):
- f = open("MyBuildFile", "wb")
- f.write("Testing...\n")
- f.close()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/custom-generator/test.gyp b/deps/npm/node_modules/node-gyp/gyp/test/custom-generator/test.gyp
deleted file mode 100644
index aa5f864a3..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/custom-generator/test.gyp
+++ /dev/null
@@ -1,15 +0,0 @@
-# Copyright (c) 2010 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'targets': [
- {
- 'target_name': 'exe',
- 'type': 'executable',
- 'sources': [
- 'main.c',
- ],
- },
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/cxxflags/cxxflags.cc b/deps/npm/node_modules/node-gyp/gyp/test/cxxflags/cxxflags.cc
deleted file mode 100644
index c1e245207..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/cxxflags/cxxflags.cc
+++ /dev/null
@@ -1,15 +0,0 @@
-/* Copyright (c) 2010 Google Inc. All rights reserved.
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file. */
-
-#include <stdio.h>
-
-int main(int argc, char *argv[])
-{
-#ifdef __OPTIMIZE__
- printf("Using an optimization flag\n");
-#else
- printf("Using no optimization flag\n");
-#endif
- return 0;
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/cxxflags/cxxflags.gyp b/deps/npm/node_modules/node-gyp/gyp/test/cxxflags/cxxflags.gyp
deleted file mode 100644
index 24d883aae..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/cxxflags/cxxflags.gyp
+++ /dev/null
@@ -1,16 +0,0 @@
-# Copyright (c) 2010 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'targets': [
- {
- 'target_name': 'cxxflags',
- 'type': 'executable',
- 'opt': '-Os',
- 'sources': [
- 'cxxflags.cc',
- ],
- },
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/cxxflags/gyptest-cxxflags.py b/deps/npm/node_modules/node-gyp/gyp/test/cxxflags/gyptest-cxxflags.py
deleted file mode 100755
index 71db8bc40..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/cxxflags/gyptest-cxxflags.py
+++ /dev/null
@@ -1,65 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Verifies build of an executable with C++ define specified by a gyp define, and
-the use of the environment during regeneration when the gyp file changes.
-"""
-
-import os
-import TestGyp
-
-env_stack = []
-
-
-def PushEnv():
- env_copy = os.environ.copy()
- env_stack.append(env_copy)
-
-def PopEnv():
- os.eniron=env_stack.pop()
-
-# Regenerating build files when a gyp file changes is currently only supported
-# by the make and Android generators.
-test = TestGyp.TestGyp(formats=['make', 'android'])
-
-try:
- PushEnv()
- os.environ['CXXFLAGS'] = '-O0'
- test.run_gyp('cxxflags.gyp')
-finally:
- # We clear the environ after calling gyp. When the auto-regeneration happens,
- # the same define should be reused anyway. Reset to empty string first in
- # case the platform doesn't support unsetenv.
- PopEnv()
-
-test.build('cxxflags.gyp')
-
-expect = """\
-Using no optimization flag
-"""
-test.run_built_executable('cxxflags', stdout=expect)
-
-test.sleep()
-
-try:
- PushEnv()
- os.environ['CXXFLAGS'] = '-O2'
- test.run_gyp('cxxflags.gyp')
-finally:
- # We clear the environ after calling gyp. When the auto-regeneration happens,
- # the same define should be reused anyway. Reset to empty string first in
- # case the platform doesn't support unsetenv.
- PopEnv()
-
-test.build('cxxflags.gyp')
-
-expect = """\
-Using an optimization flag
-"""
-test.run_built_executable('cxxflags', stdout=expect)
-
-test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/defines-escaping/defines-escaping.c b/deps/npm/node_modules/node-gyp/gyp/test/defines-escaping/defines-escaping.c
deleted file mode 100644
index 440757222..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/defines-escaping/defines-escaping.c
+++ /dev/null
@@ -1,11 +0,0 @@
-/* Copyright (c) 2010 Google Inc. All rights reserved.
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file. */
-
-#include <stdio.h>
-
-int main(int argc, char *argv[])
-{
- printf(TEST_FORMAT, TEST_ARGS);
- return 0;
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/defines-escaping/defines-escaping.gyp b/deps/npm/node_modules/node-gyp/gyp/test/defines-escaping/defines-escaping.gyp
deleted file mode 100644
index 6f0f3fde4..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/defines-escaping/defines-escaping.gyp
+++ /dev/null
@@ -1,19 +0,0 @@
-# Copyright (c) 2009 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'targets': [
- {
- 'target_name': 'defines_escaping',
- 'type': 'executable',
- 'sources': [
- 'defines-escaping.c',
- ],
- 'defines': [
- 'TEST_FORMAT="<(test_format)"',
- 'TEST_ARGS=<(test_args)',
- ],
- },
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/defines-escaping/gyptest-defines-escaping.py b/deps/npm/node_modules/node-gyp/gyp/test/defines-escaping/gyptest-defines-escaping.py
deleted file mode 100755
index eb18a3d36..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/defines-escaping/gyptest-defines-escaping.py
+++ /dev/null
@@ -1,184 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2010 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Verifies build of an executable with C++ define specified by a gyp define using
-various special characters such as quotes, commas, etc.
-"""
-
-import os
-import TestGyp
-
-test = TestGyp.TestGyp()
-
-# Tests string literals, percents, and backslash escapes.
-try:
- os.environ['GYP_DEFINES'] = (
- r"""test_format='\n%s\n' """
- r"""test_args='"Simple test of %s with a literal"'""")
- test.run_gyp('defines-escaping.gyp')
-finally:
- del os.environ['GYP_DEFINES']
-
-test.build('defines-escaping.gyp')
-
-expect = """
-Simple test of %s with a literal
-"""
-test.run_built_executable('defines_escaping', stdout=expect)
-
-
-# Test multiple comma-and-space-separated string literals.
-try:
- os.environ['GYP_DEFINES'] = \
- r"""test_format='\n%s and %s\n' test_args='"foo", "bar"'"""
- test.run_gyp('defines-escaping.gyp')
-finally:
- del os.environ['GYP_DEFINES']
-
-test.sleep()
-test.touch('defines-escaping.c')
-test.build('defines-escaping.gyp')
-
-expect = """
-foo and bar
-"""
-test.run_built_executable('defines_escaping', stdout=expect)
-
-
-# Test string literals containing quotes.
-try:
- os.environ['GYP_DEFINES'] = (
- r"""test_format='\n%s %s %s %s %s\n' """
- r"""test_args='"\"These,\"","""
- r""" "\"words,\"","""
- r""" "\"are,\"","""
- r""" "\"in,\"","""
- r""" "\"quotes.\""'""")
- test.run_gyp('defines-escaping.gyp')
-finally:
- del os.environ['GYP_DEFINES']
-
-test.sleep()
-test.touch('defines-escaping.c')
-test.build('defines-escaping.gyp')
-
-expect = """
-"These," "words," "are," "in," "quotes."
-"""
-test.run_built_executable('defines_escaping', stdout=expect)
-
-
-# Test string literals containing single quotes.
-try:
- os.environ['GYP_DEFINES'] = (
- r"""test_format='\n%s %s %s %s %s\n' """
- r"""test_args="\"'These,'\","""
- r""" \"'words,'\","""
- r""" \"'are,'\","""
- r""" \"'in,'\","""
- r""" \"'quotes.'\"" """)
- test.run_gyp('defines-escaping.gyp')
-finally:
- del os.environ['GYP_DEFINES']
-
-test.sleep()
-test.touch('defines-escaping.c')
-test.build('defines-escaping.gyp')
-
-expect = """
-'These,' 'words,' 'are,' 'in,' 'quotes.'
-"""
-test.run_built_executable('defines_escaping', stdout=expect)
-
-
-# Test string literals containing different numbers of backslashes before quotes
-# (to exercise Windows' quoting behaviour).
-try:
- os.environ['GYP_DEFINES'] = (
- r"""test_format='\n%s\n%s\n%s\n' """
- r"""test_args='"\\\"1 visible slash\\\"","""
- r""" "\\\\\"2 visible slashes\\\\\"","""
- r""" "\\\\\\\"3 visible slashes\\\\\\\""'""")
- test.run_gyp('defines-escaping.gyp')
-finally:
- del os.environ['GYP_DEFINES']
-
-test.sleep()
-test.touch('defines-escaping.c')
-test.build('defines-escaping.gyp')
-
-expect = r"""
-\"1 visible slash\"
-\\"2 visible slashes\\"
-\\\"3 visible slashes\\\"
-"""
-test.run_built_executable('defines_escaping', stdout=expect)
-
-
-# Test that various scary sequences are passed unfettered.
-try:
- os.environ['GYP_DEFINES'] = (
- r"""test_format='\n%s\n' """
- r"""test_args='"$foo, &quot; `foo`;"'""")
- test.run_gyp('defines-escaping.gyp')
-finally:
- del os.environ['GYP_DEFINES']
-
-test.sleep()
-test.touch('defines-escaping.c')
-test.build('defines-escaping.gyp')
-
-expect = """
-$foo, &quot; `foo`;
-"""
-test.run_built_executable('defines_escaping', stdout=expect)
-
-
-# VisualStudio 2010 can't handle passing %PATH%
-if not (test.format == 'msvs' and test.uses_msbuild):
- try:
- os.environ['GYP_DEFINES'] = (
- """test_format='%s' """
- """test_args='"%PATH%"'""")
- test.run_gyp('defines-escaping.gyp')
- finally:
- del os.environ['GYP_DEFINES']
-
- test.sleep()
- test.touch('defines-escaping.c')
- test.build('defines-escaping.gyp')
-
- expect = "%PATH%"
- test.run_built_executable('defines_escaping', stdout=expect)
-
-
-# Test commas and semi-colons preceded by backslashes (to exercise Windows'
-# quoting behaviour).
-try:
- os.environ['GYP_DEFINES'] = (
- r"""test_format='\n%s\n%s\n' """
- r"""test_args='"\\, \\\\;","""
- # Same thing again, but enclosed in visible quotes.
- r""" "\"\\, \\\\;\""'""")
- test.run_gyp('defines-escaping.gyp')
-finally:
- del os.environ['GYP_DEFINES']
-
-test.sleep()
-test.touch('defines-escaping.c')
-test.build('defines-escaping.gyp')
-
-expect = r"""
-\, \\;
-"\, \\;"
-"""
-test.run_built_executable('defines_escaping', stdout=expect)
-
-# We deliberately do not test having an odd number of quotes in a string
-# literal because that isn't feasible in MSVS.
-
-test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/defines/defines-env.gyp b/deps/npm/node_modules/node-gyp/gyp/test/defines/defines-env.gyp
deleted file mode 100644
index 1781546ae..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/defines/defines-env.gyp
+++ /dev/null
@@ -1,22 +0,0 @@
-# Copyright (c) 2009 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'variables': {
- 'value%': '5',
- },
- 'targets': [
- {
- 'target_name': 'defines',
- 'type': 'executable',
- 'sources': [
- 'defines.c',
- ],
- 'defines': [
- 'VALUE=<(value)',
- ],
- },
- ],
-}
-
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/defines/defines.c b/deps/npm/node_modules/node-gyp/gyp/test/defines/defines.c
deleted file mode 100644
index e0ef5212d..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/defines/defines.c
+++ /dev/null
@@ -1,23 +0,0 @@
-/* Copyright (c) 2011 Google Inc. All rights reserved.
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file. */
-
-#include <stdio.h>
-
-int main(int argc, char *argv[])
-{
-#ifdef FOO
- printf("FOO is defined\n");
-#endif
- printf("VALUE is %d\n", VALUE);
-
-#ifdef PAREN_VALUE
- printf("2*PAREN_VALUE is %d\n", 2*PAREN_VALUE);
-#endif
-
-#ifdef HASH_VALUE
- printf("HASH_VALUE is %s\n", HASH_VALUE);
-#endif
-
- return 0;
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/defines/defines.gyp b/deps/npm/node_modules/node-gyp/gyp/test/defines/defines.gyp
deleted file mode 100644
index 90a755eb8..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/defines/defines.gyp
+++ /dev/null
@@ -1,38 +0,0 @@
-# Copyright (c) 2009 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'targets': [
- {
- 'target_name': 'defines',
- 'type': 'executable',
- 'sources': [
- 'defines.c',
- ],
- 'defines': [
- 'FOO',
- 'VALUE=1',
- 'PAREN_VALUE=(1+2+3)',
- 'HASH_VALUE="a#1"',
- ],
- },
- ],
- 'conditions': [
- ['OS=="fakeos"', {
- 'targets': [
- {
- 'target_name': 'fakeosprogram',
- 'type': 'executable',
- 'sources': [
- 'defines.c',
- ],
- 'defines': [
- 'FOO',
- 'VALUE=1',
- ],
- },
- ],
- }],
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/defines/gyptest-define-override.py b/deps/npm/node_modules/node-gyp/gyp/test/defines/gyptest-define-override.py
deleted file mode 100755
index 82e325af2..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/defines/gyptest-define-override.py
+++ /dev/null
@@ -1,34 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2009 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Verifies that a default gyp define can be overridden.
-"""
-
-import os
-import TestGyp
-
-test = TestGyp.TestGyp()
-
-# Command-line define
-test.run_gyp('defines.gyp', '-D', 'OS=fakeos')
-test.build('defines.gyp')
-test.built_file_must_exist('fakeosprogram', type=test.EXECUTABLE)
-# Clean up the exe so subsequent tests don't find an old exe.
-os.remove(test.built_file_path('fakeosprogram', type=test.EXECUTABLE))
-
-# Without "OS" override, fokeosprogram shouldn't be built.
-test.run_gyp('defines.gyp')
-test.build('defines.gyp')
-test.built_file_must_not_exist('fakeosprogram', type=test.EXECUTABLE)
-
-# Environment define
-os.environ['GYP_DEFINES'] = 'OS=fakeos'
-test.run_gyp('defines.gyp')
-test.build('defines.gyp')
-test.built_file_must_exist('fakeosprogram', type=test.EXECUTABLE)
-
-test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/defines/gyptest-defines-env-regyp.py b/deps/npm/node_modules/node-gyp/gyp/test/defines/gyptest-defines-env-regyp.py
deleted file mode 100755
index 1d1d1cfbd..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/defines/gyptest-defines-env-regyp.py
+++ /dev/null
@@ -1,51 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Verifies build of an executable with C++ define specified by a gyp define, and
-the use of the environment during regeneration when the gyp file changes.
-"""
-
-import os
-import TestGyp
-
-# Regenerating build files when a gyp file changes is currently only supported
-# by the make and Android generators.
-test = TestGyp.TestGyp(formats=['make', 'android'])
-
-try:
- os.environ['GYP_DEFINES'] = 'value=50'
- test.run_gyp('defines.gyp')
-finally:
- # We clear the environ after calling gyp. When the auto-regeneration happens,
- # the same define should be reused anyway. Reset to empty string first in
- # case the platform doesn't support unsetenv.
- os.environ['GYP_DEFINES'] = ''
- del os.environ['GYP_DEFINES']
-
-test.build('defines.gyp')
-
-expect = """\
-FOO is defined
-VALUE is 1
-2*PAREN_VALUE is 12
-HASH_VALUE is a#1
-"""
-test.run_built_executable('defines', stdout=expect)
-
-# Sleep so that the changed gyp file will have a newer timestamp than the
-# previously generated build files.
-test.sleep()
-test.write('defines.gyp', test.read('defines-env.gyp'))
-
-test.build('defines.gyp', test.ALL)
-
-expect = """\
-VALUE is 50
-"""
-test.run_built_executable('defines', stdout=expect)
-
-test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/defines/gyptest-defines-env.py b/deps/npm/node_modules/node-gyp/gyp/test/defines/gyptest-defines-env.py
deleted file mode 100755
index 6b4e7175a..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/defines/gyptest-defines-env.py
+++ /dev/null
@@ -1,85 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2009 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Verifies build of an executable with C++ define specified by a gyp define.
-"""
-
-import os
-import TestGyp
-
-test = TestGyp.TestGyp()
-
-# With the value only given in environment, it should be used.
-try:
- os.environ['GYP_DEFINES'] = 'value=10'
- test.run_gyp('defines-env.gyp')
-finally:
- del os.environ['GYP_DEFINES']
-
-test.build('defines-env.gyp')
-
-expect = """\
-VALUE is 10
-"""
-test.run_built_executable('defines', stdout=expect)
-
-
-# With the value given in both command line and environment,
-# command line should take precedence.
-try:
- os.environ['GYP_DEFINES'] = 'value=20'
- test.run_gyp('defines-env.gyp', '-Dvalue=25')
-finally:
- del os.environ['GYP_DEFINES']
-
-test.sleep()
-test.touch('defines.c')
-test.build('defines-env.gyp')
-
-expect = """\
-VALUE is 25
-"""
-test.run_built_executable('defines', stdout=expect)
-
-
-# With the value only given in environment, it should be ignored if
-# --ignore-environment is specified.
-try:
- os.environ['GYP_DEFINES'] = 'value=30'
- test.run_gyp('defines-env.gyp', '--ignore-environment')
-finally:
- del os.environ['GYP_DEFINES']
-
-test.sleep()
-test.touch('defines.c')
-test.build('defines-env.gyp')
-
-expect = """\
-VALUE is 5
-"""
-test.run_built_executable('defines', stdout=expect)
-
-
-# With the value given in both command line and environment, and
-# --ignore-environment also specified, command line should still be used.
-try:
- os.environ['GYP_DEFINES'] = 'value=40'
- test.run_gyp('defines-env.gyp', '--ignore-environment', '-Dvalue=45')
-finally:
- del os.environ['GYP_DEFINES']
-
-test.sleep()
-test.touch('defines.c')
-test.build('defines-env.gyp')
-
-expect = """\
-VALUE is 45
-"""
-test.run_built_executable('defines', stdout=expect)
-
-
-test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/defines/gyptest-defines.py b/deps/npm/node_modules/node-gyp/gyp/test/defines/gyptest-defines.py
deleted file mode 100755
index 33e50f8c4..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/defines/gyptest-defines.py
+++ /dev/null
@@ -1,27 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2011 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Verifies build of an executable with C++ defines.
-"""
-
-import TestGyp
-
-test = TestGyp.TestGyp()
-
-test.run_gyp('defines.gyp')
-
-test.build('defines.gyp')
-
-expect = """\
-FOO is defined
-VALUE is 1
-2*PAREN_VALUE is 12
-HASH_VALUE is a#1
-"""
-test.run_built_executable('defines', stdout=expect)
-
-test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/dependencies/a.c b/deps/npm/node_modules/node-gyp/gyp/test/dependencies/a.c
deleted file mode 100755
index 3bba111d2..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/dependencies/a.c
+++ /dev/null
@@ -1,9 +0,0 @@
-/* Copyright (c) 2009 Google Inc. All rights reserved.
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file. */
-
-extern int funcB();
-
-int funcA() {
- return funcB();
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/dependencies/b/b.c b/deps/npm/node_modules/node-gyp/gyp/test/dependencies/b/b.c
deleted file mode 100755
index b5e771bcc..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/dependencies/b/b.c
+++ /dev/null
@@ -1,3 +0,0 @@
-int funcB() {
- return 2;
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/dependencies/b/b.gyp b/deps/npm/node_modules/node-gyp/gyp/test/dependencies/b/b.gyp
deleted file mode 100755
index 893dc64d6..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/dependencies/b/b.gyp
+++ /dev/null
@@ -1,22 +0,0 @@
-# Copyright (c) 2009 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'targets': [
- {
- 'target_name': 'b',
- 'type': 'static_library',
- 'sources': [
- 'b.c',
- ],
- },
- {
- 'target_name': 'b3',
- 'type': 'static_library',
- 'sources': [
- 'b3.c',
- ],
- },
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/dependencies/b/b3.c b/deps/npm/node_modules/node-gyp/gyp/test/dependencies/b/b3.c
deleted file mode 100755
index 287f67ff3..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/dependencies/b/b3.c
+++ /dev/null
@@ -1,9 +0,0 @@
-/*
- * Copyright (c) 2011 Google Inc. All rights reserved.
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-int funcB() {
- return 3;
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/dependencies/c/c.c b/deps/npm/node_modules/node-gyp/gyp/test/dependencies/c/c.c
deleted file mode 100644
index 4949daf3e..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/dependencies/c/c.c
+++ /dev/null
@@ -1,4 +0,0 @@
-int funcC() {
- return 3
- // Intentional syntax error. This file should never be compiled, so this
- // shouldn't be a problem.
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/dependencies/c/c.gyp b/deps/npm/node_modules/node-gyp/gyp/test/dependencies/c/c.gyp
deleted file mode 100644
index eabebea9e..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/dependencies/c/c.gyp
+++ /dev/null
@@ -1,22 +0,0 @@
-# Copyright (c) 2009 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'targets': [
- {
- 'target_name': 'c_unused',
- 'type': 'static_library',
- 'sources': [
- 'c.c',
- ],
- },
- {
- 'target_name': 'd',
- 'type': 'static_library',
- 'sources': [
- 'd.c',
- ],
- },
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/dependencies/c/d.c b/deps/npm/node_modules/node-gyp/gyp/test/dependencies/c/d.c
deleted file mode 100644
index 05465fc1a..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/dependencies/c/d.c
+++ /dev/null
@@ -1,3 +0,0 @@
-int funcD() {
- return 4;
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/dependencies/double_dependency.gyp b/deps/npm/node_modules/node-gyp/gyp/test/dependencies/double_dependency.gyp
deleted file mode 100644
index c4a2d0013..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/dependencies/double_dependency.gyp
+++ /dev/null
@@ -1,23 +0,0 @@
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'targets': [
- {
- 'target_name': 'double_dependency',
- 'type': 'shared_library',
- 'dependencies': [
- 'double_dependent.gyp:double_dependent',
- ],
- 'conditions': [
- ['1==1', {
- 'dependencies': [
- 'double_dependent.gyp:*',
- ],
- }],
- ],
- },
- ],
-}
-
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/dependencies/double_dependent.gyp b/deps/npm/node_modules/node-gyp/gyp/test/dependencies/double_dependent.gyp
deleted file mode 100644
index 334caff72..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/dependencies/double_dependent.gyp
+++ /dev/null
@@ -1,12 +0,0 @@
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'targets': [
- {
- 'target_name': 'double_dependent',
- 'type': 'none',
- },
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/dependencies/extra_targets.gyp b/deps/npm/node_modules/node-gyp/gyp/test/dependencies/extra_targets.gyp
deleted file mode 100644
index c1a26de42..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/dependencies/extra_targets.gyp
+++ /dev/null
@@ -1,18 +0,0 @@
-# Copyright (c) 2009 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'targets': [
- {
- 'target_name': 'a',
- 'type': 'static_library',
- 'sources': [
- 'a.c',
- ],
- # This only depends on the "d" target; other targets in c.gyp
- # should not become part of the build (unlike with 'c/c.gyp:*').
- 'dependencies': ['c/c.gyp:d'],
- },
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/dependencies/gyptest-double-dependency.py b/deps/npm/node_modules/node-gyp/gyp/test/dependencies/gyptest-double-dependency.py
deleted file mode 100644
index 7692740c5..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/dependencies/gyptest-double-dependency.py
+++ /dev/null
@@ -1,19 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Verify that pulling in a dependency a second time in a conditional works for
-shared_library targets. Regression test for http://crbug.com/122588
-"""
-
-import TestGyp
-
-test = TestGyp.TestGyp()
-
-test.run_gyp('double_dependency.gyp')
-
-# If running gyp worked, all is well.
-test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/dependencies/gyptest-extra-targets.py b/deps/npm/node_modules/node-gyp/gyp/test/dependencies/gyptest-extra-targets.py
deleted file mode 100755
index 3752f7445..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/dependencies/gyptest-extra-targets.py
+++ /dev/null
@@ -1,21 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2009 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Verify that dependencies don't pull unused targets into the build.
-"""
-
-import TestGyp
-
-test = TestGyp.TestGyp()
-
-test.run_gyp('extra_targets.gyp')
-
-# This should fail if it tries to build 'c_unused' since 'c/c.c' has a syntax
-# error and won't compile.
-test.build('extra_targets.gyp', test.ALL)
-
-test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/dependencies/gyptest-lib-only.py b/deps/npm/node_modules/node-gyp/gyp/test/dependencies/gyptest-lib-only.py
deleted file mode 100755
index 02159f5f1..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/dependencies/gyptest-lib-only.py
+++ /dev/null
@@ -1,39 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2011 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Verify that a link time only dependency will get pulled into the set of built
-targets, even if no executable uses it.
-"""
-
-import TestGyp
-
-import sys
-
-test = TestGyp.TestGyp()
-
-test.run_gyp('lib_only.gyp')
-
-test.build('lib_only.gyp', test.ALL)
-
-test.built_file_must_exist('a', type=test.STATIC_LIB)
-
-# TODO(bradnelson/mark):
-# On linux and windows a library target will at least pull its link dependencies
-# into the generated sln/_main.scons, since not doing so confuses users.
-# This is not currently implemented on mac, which has the opposite behavior.
-if sys.platform == 'darwin':
- if test.format == 'xcode':
- test.built_file_must_not_exist('b', type=test.STATIC_LIB)
- else:
- assert test.format in ('make', 'ninja')
- test.built_file_must_exist('b', type=test.STATIC_LIB)
-else:
- # Make puts the resulting library in a directory matching the input gyp file;
- # for the 'b' library, that is in the 'b' subdirectory.
- test.built_file_must_exist('b', type=test.STATIC_LIB, subdir='b')
-
-test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/dependencies/gyptest-none-traversal.py b/deps/npm/node_modules/node-gyp/gyp/test/dependencies/gyptest-none-traversal.py
deleted file mode 100755
index c09063dad..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/dependencies/gyptest-none-traversal.py
+++ /dev/null
@@ -1,25 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2011 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Verify that static library dependencies don't traverse none targets, unless
-explicitly specified.
-"""
-
-import TestGyp
-
-import sys
-
-test = TestGyp.TestGyp()
-
-test.run_gyp('none_traversal.gyp')
-
-test.build('none_traversal.gyp', test.ALL)
-
-test.run_built_executable('needs_chain', stdout="2\n")
-test.run_built_executable('doesnt_need_chain', stdout="3\n")
-
-test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/dependencies/lib_only.gyp b/deps/npm/node_modules/node-gyp/gyp/test/dependencies/lib_only.gyp
deleted file mode 100755
index f6c84dea6..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/dependencies/lib_only.gyp
+++ /dev/null
@@ -1,16 +0,0 @@
-# Copyright (c) 2009 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'targets': [
- {
- 'target_name': 'a',
- 'type': 'static_library',
- 'sources': [
- 'a.c',
- ],
- 'dependencies': ['b/b.gyp:b'],
- },
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/dependencies/main.c b/deps/npm/node_modules/node-gyp/gyp/test/dependencies/main.c
deleted file mode 100644
index 185bd482f..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/dependencies/main.c
+++ /dev/null
@@ -1,14 +0,0 @@
-/*
- * Copyright (c) 2011 Google Inc. All rights reserved.
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-#include <stdio.h>
-
-extern int funcA();
-
-int main() {
- printf("%d\n", funcA());
- return 0;
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/dependencies/none_traversal.gyp b/deps/npm/node_modules/node-gyp/gyp/test/dependencies/none_traversal.gyp
deleted file mode 100755
index 3d8ab30af..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/dependencies/none_traversal.gyp
+++ /dev/null
@@ -1,46 +0,0 @@
-# Copyright (c) 2009 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'targets': [
- {
- 'target_name': 'needs_chain',
- 'type': 'executable',
- 'sources': [
- 'a.c',
- 'main.c',
- ],
- 'dependencies': ['chain'],
- },
- {
- 'target_name': 'chain',
- 'type': 'none',
- 'dependencies': ['b/b.gyp:b'],
- },
- {
- 'target_name': 'doesnt_need_chain',
- 'type': 'executable',
- 'sources': [
- 'main.c',
- ],
- 'dependencies': ['no_chain', 'other_chain'],
- },
- {
- 'target_name': 'no_chain',
- 'type': 'none',
- 'sources': [
- ],
- 'dependencies': ['b/b.gyp:b'],
- 'dependencies_traverse': 0,
- },
- {
- 'target_name': 'other_chain',
- 'type': 'static_library',
- 'sources': [
- 'a.c',
- ],
- 'dependencies': ['b/b.gyp:b3'],
- },
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/dependency-copy/gyptest-copy.py b/deps/npm/node_modules/node-gyp/gyp/test/dependency-copy/gyptest-copy.py
deleted file mode 100755
index 5ba7c73d4..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/dependency-copy/gyptest-copy.py
+++ /dev/null
@@ -1,26 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2009 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Verifies dependencies do the copy step.
-"""
-
-import TestGyp
-
-test = TestGyp.TestGyp()
-
-test.run_gyp('copies.gyp', chdir='src')
-
-test.build('copies.gyp', 'proj2', chdir='src')
-
-test.run_built_executable('proj1',
- chdir='src',
- stdout="Hello from file1.c\n")
-test.run_built_executable('proj2',
- chdir='src',
- stdout="Hello from file2.c\n")
-
-test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/dependency-copy/src/copies.gyp b/deps/npm/node_modules/node-gyp/gyp/test/dependency-copy/src/copies.gyp
deleted file mode 100644
index 4176b1878..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/dependency-copy/src/copies.gyp
+++ /dev/null
@@ -1,25 +0,0 @@
-# Copyright (c) 2009 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'targets': [
- {
- 'target_name': 'proj1',
- 'type': 'executable',
- 'sources': [
- 'file1.c',
- ],
- },
- {
- 'target_name': 'proj2',
- 'type': 'executable',
- 'sources': [
- 'file2.c',
- ],
- 'dependencies': [
- 'proj1',
- ]
- },
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/dependency-copy/src/file1.c b/deps/npm/node_modules/node-gyp/gyp/test/dependency-copy/src/file1.c
deleted file mode 100644
index 3caf5d634..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/dependency-copy/src/file1.c
+++ /dev/null
@@ -1,7 +0,0 @@
-#include <stdio.h>
-
-int main(int argc, char *argv[])
-{
- printf("Hello from file1.c\n");
- return 0;
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/dependency-copy/src/file2.c b/deps/npm/node_modules/node-gyp/gyp/test/dependency-copy/src/file2.c
deleted file mode 100644
index ed45cc012..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/dependency-copy/src/file2.c
+++ /dev/null
@@ -1,7 +0,0 @@
-#include <stdio.h>
-
-int main(int argc, char *argv[])
-{
- printf("Hello from file2.c\n");
- return 0;
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/errors/duplicate_basenames.gyp b/deps/npm/node_modules/node-gyp/gyp/test/errors/duplicate_basenames.gyp
deleted file mode 100644
index b3dceb394..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/errors/duplicate_basenames.gyp
+++ /dev/null
@@ -1,13 +0,0 @@
-# Copyright (c) 2009 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'targets': [
- {
- 'target_name': 'foo',
- 'type': 'static_library',
- 'sources': ['foo.c', 'foo.cc'],
- },
- ]
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/errors/duplicate_node.gyp b/deps/npm/node_modules/node-gyp/gyp/test/errors/duplicate_node.gyp
deleted file mode 100644
index d6096096b..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/errors/duplicate_node.gyp
+++ /dev/null
@@ -1,12 +0,0 @@
-# Copyright (c) 2011 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'targets': [
- { 'target_name' : 'foo', 'type': 'executable' },
- ],
- 'targets': [
- { 'target_name' : 'bar', 'type': 'executable' },
- ]
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/errors/duplicate_rule.gyp b/deps/npm/node_modules/node-gyp/gyp/test/errors/duplicate_rule.gyp
deleted file mode 100644
index dab98e96c..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/errors/duplicate_rule.gyp
+++ /dev/null
@@ -1,22 +0,0 @@
-# Copyright (c) 2011 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'targets': [
- {
- 'target_name': 'foo',
- 'type': 'executable',
- 'rules': [
- {
- 'rule_name': 'bar',
- 'extension': '',
- },
- {
- 'rule_name': 'bar',
- 'extension': '',
- },
- ],
- },
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/errors/duplicate_targets.gyp b/deps/npm/node_modules/node-gyp/gyp/test/errors/duplicate_targets.gyp
deleted file mode 100644
index aec470eef..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/errors/duplicate_targets.gyp
+++ /dev/null
@@ -1,14 +0,0 @@
-# Copyright (c) 2009 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'targets': [
- {
- 'target_name': 'foo'
- },
- {
- 'target_name': 'foo'
- },
- ]
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/errors/gyptest-errors.py b/deps/npm/node_modules/node-gyp/gyp/test/errors/gyptest-errors.py
deleted file mode 100755
index 67a1356d1..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/errors/gyptest-errors.py
+++ /dev/null
@@ -1,49 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Test that two targets with the same name generates an error.
-"""
-
-import TestGyp
-import TestCmd
-
-# TODO(sbc): Remove the need for match_re below, and make scons
-# error messages consistent with other generators by removing
-# input.py:generator_wants_absolute_build_file_paths.
-
-test = TestGyp.TestGyp()
-
-stderr = ('gyp: Duplicate target definitions for '
- '.*duplicate_targets.gyp:foo#target\n')
-test.run_gyp('duplicate_targets.gyp', status=1, stderr=stderr,
- match=TestCmd.match_re)
-
-stderr = ('gyp: Unable to find targets in build file .*missing_targets.gyp '
- 'while trying to load missing_targets.gyp\n')
-test.run_gyp('missing_targets.gyp', status=1, stderr=stderr,
- match=TestCmd.match_re)
-
-stderr = ('gyp: rule bar exists in duplicate, target '
- '.*duplicate_rule.gyp:foo#target\n')
-test.run_gyp('duplicate_rule.gyp', status=1, stderr=stderr,
- match=TestCmd.match_re)
-
-stderr = ("gyp: Key 'targets' repeated at level 1 with key path '' while "
- "reading .*duplicate_node.gyp while trying to load "
- "duplicate_node.gyp\n")
-test.run_gyp('duplicate_node.gyp', '--check', status=1, stderr=stderr,
- match=TestCmd.match_re)
-
-stderr = 'gyp: Duplicate basenames in sources section, see list above\n'
-test.run_gyp('duplicate_basenames.gyp', status=1, stderr=stderr)
-
-stderr = ("gyp: Dependency '.*missing_dep.gyp:missing.gyp#target' not found "
- "while trying to load target .*missing_dep.gyp:foo#target\n")
-test.run_gyp('missing_dep.gyp', status=1, stderr=stderr,
- match=TestCmd.match_re)
-
-test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/errors/missing_dep.gyp b/deps/npm/node_modules/node-gyp/gyp/test/errors/missing_dep.gyp
deleted file mode 100644
index 08746be3d..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/errors/missing_dep.gyp
+++ /dev/null
@@ -1,15 +0,0 @@
-# Copyright (c) 2011 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'targets': [
- {
- 'target_name': 'foo',
- 'type': 'static_library',
- 'dependencies': [
- 'missing.gyp'
- ]
- },
- ]
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/errors/missing_targets.gyp b/deps/npm/node_modules/node-gyp/gyp/test/errors/missing_targets.gyp
deleted file mode 100644
index 13d4f924c..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/errors/missing_targets.gyp
+++ /dev/null
@@ -1,8 +0,0 @@
-# Copyright (c) 2011 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'target_defaults': {
- },
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/escaping/colon/test.gyp b/deps/npm/node_modules/node-gyp/gyp/test/escaping/colon/test.gyp
deleted file mode 100644
index 715f95490..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/escaping/colon/test.gyp
+++ /dev/null
@@ -1,21 +0,0 @@
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-{
- 'targets': [
- {
- 'target_name': 'colon',
- 'type': 'executable',
- 'sources': [
- 'a:b.c',
- ],
- 'copies': [
- {
- 'destination': '<(PRODUCT_DIR)/',
- # MSVS2008 gets confused if the same file is in 'sources' and 'copies'
- 'files': [ 'a:b.c-d', ],
- },
- ],
- },
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/escaping/gyptest-colon.py b/deps/npm/node_modules/node-gyp/gyp/test/escaping/gyptest-colon.py
deleted file mode 100644
index 610f00e4e..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/escaping/gyptest-colon.py
+++ /dev/null
@@ -1,43 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Tests that filenames that contain colons are handled correctly.
-(This is important for absolute paths on Windows.)
-"""
-
-import os
-import sys
-import TestGyp
-
-# TODO: Make colons in filenames work with make, if required.
-test = TestGyp.TestGyp(formats=['!make'])
-CHDIR = 'colon'
-
-source_name = 'colon/a:b.c'
-copies_name = 'colon/a:b.c-d'
-if sys.platform == 'win32':
- # Windows uses : as drive separator and doesn't allow it in regular filenames.
- # Use abspath() to create a path that contains a colon instead.
- abs_source = os.path.abspath('colon/file.c')
- test.write('colon/test.gyp',
- test.read('colon/test.gyp').replace("'a:b.c'", repr(abs_source)))
- source_name = abs_source
-
- abs_copies = os.path.abspath('colon/file.txt')
- test.write('colon/test.gyp',
- test.read('colon/test.gyp').replace("'a:b.c-d'", repr(abs_copies)))
- copies_name = abs_copies
-
-# Create the file dynamically, Windows is unhappy if a file with a colon in
-# its name is checked in.
-test.write(source_name, 'int main() {}')
-test.write(copies_name, 'foo')
-
-test.run_gyp('test.gyp', chdir=CHDIR)
-test.build('test.gyp', test.ALL, chdir=CHDIR)
-test.built_file_must_exist(os.path.basename(copies_name), chdir=CHDIR)
-test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/exclusion/exclusion.gyp b/deps/npm/node_modules/node-gyp/gyp/test/exclusion/exclusion.gyp
deleted file mode 100644
index 1232dabae..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/exclusion/exclusion.gyp
+++ /dev/null
@@ -1,23 +0,0 @@
-# Copyright (c) 2010 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'targets': [
- {
- 'target_name': 'hello',
- 'type': 'executable',
- 'sources': [
- 'hello.c',
- 'bogus.c',
- 'also/not/real.c',
- 'also/not/real2.c',
- ],
- 'sources!': [
- 'bogus.c',
- 'also/not/real.c',
- 'also/not/real2.c',
- ],
- },
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/exclusion/gyptest-exclusion.py b/deps/npm/node_modules/node-gyp/gyp/test/exclusion/gyptest-exclusion.py
deleted file mode 100755
index 1fc32bf87..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/exclusion/gyptest-exclusion.py
+++ /dev/null
@@ -1,22 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2010 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Verifies that exclusions (e.g. sources!) are respected. Excluded sources
-that do not exist should not prevent the build from succeeding.
-"""
-
-import TestGyp
-
-test = TestGyp.TestGyp()
-
-test.run_gyp('exclusion.gyp')
-test.build('exclusion.gyp')
-
-# executables
-test.built_file_must_exist('hello' + test._exe, test.EXECUTABLE, bare=True)
-
-test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/exclusion/hello.c b/deps/npm/node_modules/node-gyp/gyp/test/exclusion/hello.c
deleted file mode 100644
index 30e8d5416..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/exclusion/hello.c
+++ /dev/null
@@ -1,15 +0,0 @@
-/* Copyright (c) 2010 Google Inc. All rights reserved.
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file. */
-
-#include <stdio.h>
-
-int func1(void) {
- return 42;
-}
-
-int main(int argc, char *argv[]) {
- printf("Hello, world!\n");
- printf("%d\n", func1());
- return 0;
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/external-cross-compile/gyptest-cross.py b/deps/npm/node_modules/node-gyp/gyp/test/external-cross-compile/gyptest-cross.py
deleted file mode 100755
index 6b8df816d..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/external-cross-compile/gyptest-cross.py
+++ /dev/null
@@ -1,35 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Verifies that actions can be + a source scanner can be used to implement,
-cross-compiles (for Native Client at this point).
-"""
-
-import TestGyp
-
-test = TestGyp.TestGyp()
-
-# TODO(bradnelson): fix scons.
-if test.format == 'scons':
- test.skip_test()
-
-test.run_gyp('cross.gyp', chdir='src')
-
-test.relocate('src', 'relocate/src')
-
-test.build('cross.gyp', test.ALL, chdir='relocate/src')
-
-expect = """\
-From test1.cc
-From test2.c
-From test3.cc
-From test4.c
-"""
-test.run_built_executable('program', chdir='relocate/src', stdout=expect)
-
-
-test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/external-cross-compile/src/bogus1.cc b/deps/npm/node_modules/node-gyp/gyp/test/external-cross-compile/src/bogus1.cc
deleted file mode 100644
index 1b8d01199..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/external-cross-compile/src/bogus1.cc
+++ /dev/null
@@ -1 +0,0 @@
-From bogus1.cc
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/external-cross-compile/src/bogus2.c b/deps/npm/node_modules/node-gyp/gyp/test/external-cross-compile/src/bogus2.c
deleted file mode 100644
index cbf4a123c..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/external-cross-compile/src/bogus2.c
+++ /dev/null
@@ -1 +0,0 @@
-From bogus2.c
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/external-cross-compile/src/cross.gyp b/deps/npm/node_modules/node-gyp/gyp/test/external-cross-compile/src/cross.gyp
deleted file mode 100644
index aeda76b5b..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/external-cross-compile/src/cross.gyp
+++ /dev/null
@@ -1,83 +0,0 @@
-# Copyright (c) 2009 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'includes': ['cross_compile.gypi'],
- 'target_defaults': {
- 'variables': {
- 'nix_lame%': 0,
- },
- 'target_conditions': [
- ['nix_lame==1', {
- 'sources/': [
- ['exclude', 'lame'],
- ],
- }],
- ],
- },
- 'targets': [
- {
- 'target_name': 'program',
- 'type': 'executable',
- 'dependencies': [
- 'program_inc',
- ],
- 'include_dirs': [
- '<(SHARED_INTERMEDIATE_DIR)',
- ],
- 'sources': [
- 'program.cc',
- ],
- },
- {
- 'target_name': 'program_inc',
- 'type': 'none',
- 'dependencies': ['cross_program'],
- 'actions': [
- {
- 'action_name': 'program_inc',
- 'inputs': ['<(SHARED_INTERMEDIATE_DIR)/cross_program.fake'],
- 'outputs': ['<(SHARED_INTERMEDIATE_DIR)/cross_program.h'],
- 'action': ['python', 'tochar.py', '<@(_inputs)', '<@(_outputs)'],
- },
- ],
- # Allows the test to run without hermetic cygwin on windows.
- 'msvs_cygwin_shell': 0,
- },
- {
- 'target_name': 'cross_program',
- 'type': 'none',
- 'variables': {
- 'cross': 1,
- 'nix_lame': 1,
- },
- 'dependencies': ['cross_lib'],
- 'sources': [
- 'test1.cc',
- 'test2.c',
- 'very_lame.cc',
- '<(SHARED_INTERMEDIATE_DIR)/cross_lib.fake',
- ],
- },
- {
- 'target_name': 'cross_lib',
- 'type': 'none',
- 'variables': {
- 'cross': 1,
- 'nix_lame': 1,
- },
- 'sources': [
- 'test3.cc',
- 'test4.c',
- 'bogus1.cc',
- 'bogus2.c',
- 'sort_of_lame.cc',
- ],
- 'sources!': [
- 'bogus1.cc',
- 'bogus2.c',
- ],
- },
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/external-cross-compile/src/cross_compile.gypi b/deps/npm/node_modules/node-gyp/gyp/test/external-cross-compile/src/cross_compile.gypi
deleted file mode 100644
index 36e651903..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/external-cross-compile/src/cross_compile.gypi
+++ /dev/null
@@ -1,23 +0,0 @@
-{
- 'target_defaults': {
- 'variables': {
- 'cross%': 0,
- },
- 'target_conditions': [
- ['cross==1', {
- 'actions': [
- {
- 'action_name': 'cross compile >(_target_name)',
- 'inputs': ['^@(_sources)'],
- 'outputs': ['<(SHARED_INTERMEDIATE_DIR)/>(_target_name).fake'],
- 'action': [
- 'python', 'fake_cross.py', '>@(_outputs)', '^@(_sources)',
- ],
- # Allows the test to run without hermetic cygwin on windows.
- 'msvs_cygwin_shell': 0,
- },
- ],
- }],
- ],
- },
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/external-cross-compile/src/fake_cross.py b/deps/npm/node_modules/node-gyp/gyp/test/external-cross-compile/src/fake_cross.py
deleted file mode 100644
index 05eacc6a6..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/external-cross-compile/src/fake_cross.py
+++ /dev/null
@@ -1,18 +0,0 @@
-#!/usr/bin/python
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import sys
-
-fh = open(sys.argv[1], 'w')
-
-filenames = sys.argv[2:]
-
-for filename in filenames:
- subfile = open(filename)
- data = subfile.read()
- subfile.close()
- fh.write(data)
-
-fh.close()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/external-cross-compile/src/program.cc b/deps/npm/node_modules/node-gyp/gyp/test/external-cross-compile/src/program.cc
deleted file mode 100644
index a50ca367a..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/external-cross-compile/src/program.cc
+++ /dev/null
@@ -1,16 +0,0 @@
-/*
- * Copyright (c) 2012 Google Inc. All rights reserved.
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-#include <stdio.h>
-
-static char data[] = {
-#include "cross_program.h"
-};
-
-int main(int argc, char *argv[]) {
- fwrite(data, 1, sizeof(data), stdout);
- return 0;
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/external-cross-compile/src/test1.cc b/deps/npm/node_modules/node-gyp/gyp/test/external-cross-compile/src/test1.cc
deleted file mode 100644
index b584c31d1..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/external-cross-compile/src/test1.cc
+++ /dev/null
@@ -1 +0,0 @@
-From test1.cc
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/external-cross-compile/src/test2.c b/deps/npm/node_modules/node-gyp/gyp/test/external-cross-compile/src/test2.c
deleted file mode 100644
index 367ae19ea..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/external-cross-compile/src/test2.c
+++ /dev/null
@@ -1 +0,0 @@
-From test2.c
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/external-cross-compile/src/test3.cc b/deps/npm/node_modules/node-gyp/gyp/test/external-cross-compile/src/test3.cc
deleted file mode 100644
index 9eb64735b..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/external-cross-compile/src/test3.cc
+++ /dev/null
@@ -1 +0,0 @@
-From test3.cc
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/external-cross-compile/src/test4.c b/deps/npm/node_modules/node-gyp/gyp/test/external-cross-compile/src/test4.c
deleted file mode 100644
index 8ecc33ec1..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/external-cross-compile/src/test4.c
+++ /dev/null
@@ -1 +0,0 @@
-From test4.c
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/external-cross-compile/src/tochar.py b/deps/npm/node_modules/node-gyp/gyp/test/external-cross-compile/src/tochar.py
deleted file mode 100644
index c0780d984..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/external-cross-compile/src/tochar.py
+++ /dev/null
@@ -1,13 +0,0 @@
-#!/usr/bin/python
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import sys
-
-src = open(sys.argv[1])
-dst = open(sys.argv[2], 'w')
-for ch in src.read():
- dst.write('%d,\n' % ord(ch))
-src.close()
-dst.close()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/generator-output/actions/actions.gyp b/deps/npm/node_modules/node-gyp/gyp/test/generator-output/actions/actions.gyp
deleted file mode 100644
index dded59aff..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/generator-output/actions/actions.gyp
+++ /dev/null
@@ -1,16 +0,0 @@
-# Copyright (c) 2009 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'targets': [
- {
- 'target_name': 'pull_in_all_actions',
- 'type': 'none',
- 'dependencies': [
- 'subdir1/executable.gyp:*',
- 'subdir2/none.gyp:*',
- ],
- },
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/generator-output/actions/build/README.txt b/deps/npm/node_modules/node-gyp/gyp/test/generator-output/actions/build/README.txt
deleted file mode 100644
index 1b052c9a2..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/generator-output/actions/build/README.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-A place-holder for this Xcode build output directory, so that the
-test script can verify that .xcodeproj files are not created in
-their normal location by making the src/ read-only, and then
-selectively making this build directory writable.
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/generator-output/actions/subdir1/actions-out/README.txt b/deps/npm/node_modules/node-gyp/gyp/test/generator-output/actions/subdir1/actions-out/README.txt
deleted file mode 100644
index 1b052c9a2..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/generator-output/actions/subdir1/actions-out/README.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-A place-holder for this Xcode build output directory, so that the
-test script can verify that .xcodeproj files are not created in
-their normal location by making the src/ read-only, and then
-selectively making this build directory writable.
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/generator-output/actions/subdir1/build/README.txt b/deps/npm/node_modules/node-gyp/gyp/test/generator-output/actions/subdir1/build/README.txt
deleted file mode 100644
index 1b052c9a2..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/generator-output/actions/subdir1/build/README.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-A place-holder for this Xcode build output directory, so that the
-test script can verify that .xcodeproj files are not created in
-their normal location by making the src/ read-only, and then
-selectively making this build directory writable.
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/generator-output/actions/subdir1/executable.gyp b/deps/npm/node_modules/node-gyp/gyp/test/generator-output/actions/subdir1/executable.gyp
deleted file mode 100644
index 6bdd60a1f..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/generator-output/actions/subdir1/executable.gyp
+++ /dev/null
@@ -1,44 +0,0 @@
-# Copyright (c) 2009 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'targets': [
- {
- 'target_name': 'program',
- 'type': 'executable',
- 'msvs_cygwin_shell': 0,
- 'sources': [
- 'program.c',
- ],
- 'actions': [
- {
- 'action_name': 'make-prog1',
- 'inputs': [
- 'make-prog1.py',
- ],
- 'outputs': [
- '<(INTERMEDIATE_DIR)/prog1.c',
- ],
- 'action': [
- 'python', '<(_inputs)', '<@(_outputs)',
- ],
- 'process_outputs_as_sources': 1,
- },
- {
- 'action_name': 'make-prog2',
- 'inputs': [
- 'make-prog2.py',
- ],
- 'outputs': [
- 'actions-out/prog2.c',
- ],
- 'action': [
- 'python', '<(_inputs)', '<@(_outputs)',
- ],
- 'process_outputs_as_sources': 1,
- },
- ],
- },
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/generator-output/actions/subdir1/make-prog1.py b/deps/npm/node_modules/node-gyp/gyp/test/generator-output/actions/subdir1/make-prog1.py
deleted file mode 100755
index 7ea1d8a2d..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/generator-output/actions/subdir1/make-prog1.py
+++ /dev/null
@@ -1,20 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2009 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import sys
-
-contents = r"""
-#include <stdio.h>
-
-void prog1(void)
-{
- printf("Hello from make-prog1.py\n");
-}
-"""
-
-open(sys.argv[1], 'w').write(contents)
-
-sys.exit(0)
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/generator-output/actions/subdir1/make-prog2.py b/deps/npm/node_modules/node-gyp/gyp/test/generator-output/actions/subdir1/make-prog2.py
deleted file mode 100755
index 0bfe4973c..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/generator-output/actions/subdir1/make-prog2.py
+++ /dev/null
@@ -1,20 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2009 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import sys
-
-contents = r"""
-#include <stdio.h>
-
-void prog2(void)
-{
- printf("Hello from make-prog2.py\n");
-}
-"""
-
-open(sys.argv[1], 'w').write(contents)
-
-sys.exit(0)
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/generator-output/actions/subdir1/program.c b/deps/npm/node_modules/node-gyp/gyp/test/generator-output/actions/subdir1/program.c
deleted file mode 100644
index d5f661d90..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/generator-output/actions/subdir1/program.c
+++ /dev/null
@@ -1,12 +0,0 @@
-#include <stdio.h>
-
-extern void prog1(void);
-extern void prog2(void);
-
-int main(int argc, char *argv[])
-{
- printf("Hello from program.c\n");
- prog1();
- prog2();
- return 0;
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/generator-output/actions/subdir2/actions-out/README.txt b/deps/npm/node_modules/node-gyp/gyp/test/generator-output/actions/subdir2/actions-out/README.txt
deleted file mode 100644
index 1b052c9a2..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/generator-output/actions/subdir2/actions-out/README.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-A place-holder for this Xcode build output directory, so that the
-test script can verify that .xcodeproj files are not created in
-their normal location by making the src/ read-only, and then
-selectively making this build directory writable.
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/generator-output/actions/subdir2/build/README.txt b/deps/npm/node_modules/node-gyp/gyp/test/generator-output/actions/subdir2/build/README.txt
deleted file mode 100644
index 1b052c9a2..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/generator-output/actions/subdir2/build/README.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-A place-holder for this Xcode build output directory, so that the
-test script can verify that .xcodeproj files are not created in
-their normal location by making the src/ read-only, and then
-selectively making this build directory writable.
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/generator-output/actions/subdir2/make-file.py b/deps/npm/node_modules/node-gyp/gyp/test/generator-output/actions/subdir2/make-file.py
deleted file mode 100755
index fff065314..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/generator-output/actions/subdir2/make-file.py
+++ /dev/null
@@ -1,11 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2009 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import sys
-
-contents = "Hello from make-file.py\n"
-
-open(sys.argv[1], 'wb').write(contents)
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/generator-output/actions/subdir2/none.gyp b/deps/npm/node_modules/node-gyp/gyp/test/generator-output/actions/subdir2/none.gyp
deleted file mode 100644
index f98f52753..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/generator-output/actions/subdir2/none.gyp
+++ /dev/null
@@ -1,31 +0,0 @@
-# Copyright (c) 2009 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'targets': [
- {
- 'target_name': 'file',
- 'type': 'none',
- 'msvs_cygwin_shell': 0,
- 'actions': [
- {
- 'action_name': 'make-file',
- 'inputs': [
- 'make-file.py',
- ],
- 'outputs': [
- 'actions-out/file.out',
- # TODO: enhance testing infrastructure to test this
- # without having to hard-code the intermediate dir paths.
- #'<(INTERMEDIATE_DIR)/file.out',
- ],
- 'action': [
- 'python', '<(_inputs)', '<@(_outputs)',
- ],
- 'process_outputs_as_sources': 1,
- }
- ],
- },
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/generator-output/copies/build/README.txt b/deps/npm/node_modules/node-gyp/gyp/test/generator-output/copies/build/README.txt
deleted file mode 100644
index 90ef88619..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/generator-output/copies/build/README.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-A place-holder for this Xcode build output directory, so that the
-test script can verify that .xcodeproj files are not created in
-their normal location by making the src/ read-only, and then
-selectively making this build directory writable.
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/generator-output/copies/copies-out/README.txt b/deps/npm/node_modules/node-gyp/gyp/test/generator-output/copies/copies-out/README.txt
deleted file mode 100644
index 90ef88619..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/generator-output/copies/copies-out/README.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-A place-holder for this Xcode build output directory, so that the
-test script can verify that .xcodeproj files are not created in
-their normal location by making the src/ read-only, and then
-selectively making this build directory writable.
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/generator-output/copies/copies.gyp b/deps/npm/node_modules/node-gyp/gyp/test/generator-output/copies/copies.gyp
deleted file mode 100644
index 479a3d9b6..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/generator-output/copies/copies.gyp
+++ /dev/null
@@ -1,50 +0,0 @@
-# Copyright (c) 2009 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'targets': [
- {
- 'target_name': 'pull_in_subdir',
- 'type': 'none',
- 'dependencies': [
- 'subdir/subdir.gyp:*',
- ],
- },
- {
- 'target_name': 'copies1',
- 'type': 'none',
- 'copies': [
- {
- 'destination': 'copies-out',
- 'files': [
- 'file1',
- ],
- },
- ],
- },
- {
- 'target_name': 'copies2',
- 'type': 'none',
- 'copies': [
- {
- 'destination': '<(PRODUCT_DIR)/copies-out',
- 'files': [
- 'file2',
- ],
- },
- ],
- },
- # Verify that a null 'files' list doesn't gag the generators.
- {
- 'target_name': 'copies_null',
- 'type': 'none',
- 'copies': [
- {
- 'destination': '<(PRODUCT_DIR)/copies-null',
- 'files': [],
- },
- ],
- },
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/generator-output/copies/file1 b/deps/npm/node_modules/node-gyp/gyp/test/generator-output/copies/file1
deleted file mode 100644
index 84d55c575..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/generator-output/copies/file1
+++ /dev/null
@@ -1 +0,0 @@
-file1 contents
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/generator-output/copies/file2 b/deps/npm/node_modules/node-gyp/gyp/test/generator-output/copies/file2
deleted file mode 100644
index af1b8ae35..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/generator-output/copies/file2
+++ /dev/null
@@ -1 +0,0 @@
-file2 contents
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/generator-output/copies/subdir/build/README.txt b/deps/npm/node_modules/node-gyp/gyp/test/generator-output/copies/subdir/build/README.txt
deleted file mode 100644
index 90ef88619..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/generator-output/copies/subdir/build/README.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-A place-holder for this Xcode build output directory, so that the
-test script can verify that .xcodeproj files are not created in
-their normal location by making the src/ read-only, and then
-selectively making this build directory writable.
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/generator-output/copies/subdir/copies-out/README.txt b/deps/npm/node_modules/node-gyp/gyp/test/generator-output/copies/subdir/copies-out/README.txt
deleted file mode 100644
index 90ef88619..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/generator-output/copies/subdir/copies-out/README.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-A place-holder for this Xcode build output directory, so that the
-test script can verify that .xcodeproj files are not created in
-their normal location by making the src/ read-only, and then
-selectively making this build directory writable.
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/generator-output/copies/subdir/file3 b/deps/npm/node_modules/node-gyp/gyp/test/generator-output/copies/subdir/file3
deleted file mode 100644
index 43f16f352..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/generator-output/copies/subdir/file3
+++ /dev/null
@@ -1 +0,0 @@
-file3 contents
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/generator-output/copies/subdir/file4 b/deps/npm/node_modules/node-gyp/gyp/test/generator-output/copies/subdir/file4
deleted file mode 100644
index 5f7270a08..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/generator-output/copies/subdir/file4
+++ /dev/null
@@ -1 +0,0 @@
-file4 contents
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/generator-output/copies/subdir/subdir.gyp b/deps/npm/node_modules/node-gyp/gyp/test/generator-output/copies/subdir/subdir.gyp
deleted file mode 100644
index af031d283..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/generator-output/copies/subdir/subdir.gyp
+++ /dev/null
@@ -1,32 +0,0 @@
-# Copyright (c) 2009 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'targets': [
- {
- 'target_name': 'copies3',
- 'type': 'none',
- 'copies': [
- {
- 'destination': 'copies-out',
- 'files': [
- 'file3',
- ],
- },
- ],
- },
- {
- 'target_name': 'copies4',
- 'type': 'none',
- 'copies': [
- {
- 'destination': '<(PRODUCT_DIR)/copies-out',
- 'files': [
- 'file4',
- ],
- },
- ],
- },
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/generator-output/gyptest-actions.py b/deps/npm/node_modules/node-gyp/gyp/test/generator-output/gyptest-actions.py
deleted file mode 100755
index fc80ef098..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/generator-output/gyptest-actions.py
+++ /dev/null
@@ -1,58 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Verifies --generator-output= behavior when using actions.
-"""
-
-import TestGyp
-
-# Ninja and Android don't support --generator-output.
-test = TestGyp.TestGyp(formats=['!ninja', '!android'])
-
-# All the generated files should go under 'gypfiles'. The source directory
-# ('actions') should be untouched.
-test.writable(test.workpath('actions'), False)
-test.run_gyp('actions.gyp',
- '--generator-output=' + test.workpath('gypfiles'),
- chdir='actions')
-
-test.writable(test.workpath('actions'), True)
-
-test.relocate('actions', 'relocate/actions')
-test.relocate('gypfiles', 'relocate/gypfiles')
-
-test.writable(test.workpath('relocate/actions'), False)
-
-# Some of the action outputs use "pure" relative paths (i.e. without prefixes
-# like <(INTERMEDIATE_DIR) or <(PROGRAM_DIR)). Even though we are building under
-# 'gypfiles', such outputs will still be created relative to the original .gyp
-# sources. Projects probably wouldn't normally do this, since it kind of defeats
-# the purpose of '--generator-output', but it is supported behaviour.
-test.writable(test.workpath('relocate/actions/build'), True)
-test.writable(test.workpath('relocate/actions/subdir1/build'), True)
-test.writable(test.workpath('relocate/actions/subdir1/actions-out'), True)
-test.writable(test.workpath('relocate/actions/subdir2/build'), True)
-test.writable(test.workpath('relocate/actions/subdir2/actions-out'), True)
-
-test.build('actions.gyp', test.ALL, chdir='relocate/gypfiles')
-
-expect = """\
-Hello from program.c
-Hello from make-prog1.py
-Hello from make-prog2.py
-"""
-
-if test.format == 'xcode':
- chdir = 'relocate/actions/subdir1'
-else:
- chdir = 'relocate/gypfiles'
-test.run_built_executable('program', chdir=chdir, stdout=expect)
-
-test.must_match('relocate/actions/subdir2/actions-out/file.out',
- "Hello from make-file.py\n")
-
-test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/generator-output/gyptest-copies.py b/deps/npm/node_modules/node-gyp/gyp/test/generator-output/gyptest-copies.py
deleted file mode 100755
index baef39336..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/generator-output/gyptest-copies.py
+++ /dev/null
@@ -1,59 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Verifies file copies with --generator-output using an explicit build
-target of 'all'.
-"""
-
-import TestGyp
-
-# Ninja and Android don't support --generator-output.
-test = TestGyp.TestGyp(formats=['!ninja', '!android'])
-
-test.writable(test.workpath('copies'), False)
-
-test.run_gyp('copies.gyp',
- '--generator-output=' + test.workpath('gypfiles'),
- chdir='copies')
-
-test.writable(test.workpath('copies'), True)
-
-test.relocate('copies', 'relocate/copies')
-test.relocate('gypfiles', 'relocate/gypfiles')
-
-test.writable(test.workpath('relocate/copies'), False)
-
-test.writable(test.workpath('relocate/copies/build'), True)
-test.writable(test.workpath('relocate/copies/copies-out'), True)
-test.writable(test.workpath('relocate/copies/subdir/build'), True)
-test.writable(test.workpath('relocate/copies/subdir/copies-out'), True)
-
-test.build('copies.gyp', test.ALL, chdir='relocate/gypfiles')
-
-test.must_match(['relocate', 'copies', 'copies-out', 'file1'],
- "file1 contents\n")
-
-if test.format == 'xcode':
- chdir = 'relocate/copies/build'
-elif test.format == 'make':
- chdir = 'relocate/gypfiles/out'
-else:
- chdir = 'relocate/gypfiles'
-test.must_match([chdir, 'Default', 'copies-out', 'file2'], "file2 contents\n")
-
-test.must_match(['relocate', 'copies', 'subdir', 'copies-out', 'file3'],
- "file3 contents\n")
-
-if test.format == 'xcode':
- chdir = 'relocate/copies/subdir/build'
-elif test.format == 'make':
- chdir = 'relocate/gypfiles/out'
-else:
- chdir = 'relocate/gypfiles'
-test.must_match([chdir, 'Default', 'copies-out', 'file4'], "file4 contents\n")
-
-test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/generator-output/gyptest-mac-bundle.py b/deps/npm/node_modules/node-gyp/gyp/test/generator-output/gyptest-mac-bundle.py
deleted file mode 100644
index d8ad91081..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/generator-output/gyptest-mac-bundle.py
+++ /dev/null
@@ -1,29 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Verifies mac bundles work with --generator-output.
-"""
-
-import TestGyp
-
-import sys
-
-if sys.platform == 'darwin':
- # Ninja doesn't support --generator-output.
- test = TestGyp.TestGyp(formats=['!ninja'])
-
- MAC_BUNDLE_DIR = 'mac-bundle'
- GYPFILES_DIR = 'gypfiles'
- test.writable(test.workpath(MAC_BUNDLE_DIR), False)
- test.run_gyp('test.gyp',
- '--generator-output=' + test.workpath(GYPFILES_DIR),
- chdir=MAC_BUNDLE_DIR)
- test.writable(test.workpath(MAC_BUNDLE_DIR), True)
-
- test.build('test.gyp', test.ALL, chdir=GYPFILES_DIR)
-
- test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/generator-output/gyptest-relocate.py b/deps/npm/node_modules/node-gyp/gyp/test/generator-output/gyptest-relocate.py
deleted file mode 100755
index 7be19fe02..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/generator-output/gyptest-relocate.py
+++ /dev/null
@@ -1,60 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Verifies that a project hierarchy created with the --generator-output=
-option can be built even when it's relocated to a different path.
-"""
-
-import TestGyp
-
-# Ninja and Android don't support --generator-output.
-test = TestGyp.TestGyp(formats=['!ninja', '!android'])
-
-test.writable(test.workpath('src'), False)
-
-test.run_gyp('prog1.gyp',
- '-Dset_symroot=1',
- '--generator-output=' + test.workpath('gypfiles'),
- chdir='src')
-
-test.writable(test.workpath('src'), True)
-
-test.relocate('src', 'relocate/src')
-test.relocate('gypfiles', 'relocate/gypfiles')
-
-test.writable(test.workpath('relocate/src'), False)
-
-test.writable(test.workpath('relocate/src/build'), True)
-test.writable(test.workpath('relocate/src/subdir2/build'), True)
-test.writable(test.workpath('relocate/src/subdir3/build'), True)
-
-test.build('prog1.gyp', test.ALL, chdir='relocate/gypfiles')
-
-chdir = 'relocate/gypfiles'
-
-expect = """\
-Hello from %s
-Hello from inc.h
-Hello from inc1/include1.h
-Hello from inc2/include2.h
-Hello from inc3/include3.h
-Hello from subdir2/deeper/deeper.h
-"""
-
-if test.format == 'xcode':
- chdir = 'relocate/src'
-test.run_built_executable('prog1', chdir=chdir, stdout=expect % 'prog1.c')
-
-if test.format == 'xcode':
- chdir = 'relocate/src/subdir2'
-test.run_built_executable('prog2', chdir=chdir, stdout=expect % 'prog2.c')
-
-if test.format == 'xcode':
- chdir = 'relocate/src/subdir3'
-test.run_built_executable('prog3', chdir=chdir, stdout=expect % 'prog3.c')
-
-test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/generator-output/gyptest-rules.py b/deps/npm/node_modules/node-gyp/gyp/test/generator-output/gyptest-rules.py
deleted file mode 100755
index f0abf749a..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/generator-output/gyptest-rules.py
+++ /dev/null
@@ -1,59 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Verifies --generator-output= behavior when using rules.
-"""
-
-import TestGyp
-
-# Ninja and Android don't support --generator-output.
-test = TestGyp.TestGyp(formats=['!ninja', '!android'])
-
-test.writable(test.workpath('rules'), False)
-
-test.run_gyp('rules.gyp',
- '--generator-output=' + test.workpath('gypfiles'),
- chdir='rules')
-
-test.writable(test.workpath('rules'), True)
-
-test.relocate('rules', 'relocate/rules')
-test.relocate('gypfiles', 'relocate/gypfiles')
-
-test.writable(test.workpath('relocate/rules'), False)
-
-test.writable(test.workpath('relocate/rules/build'), True)
-test.writable(test.workpath('relocate/rules/subdir1/build'), True)
-test.writable(test.workpath('relocate/rules/subdir2/build'), True)
-test.writable(test.workpath('relocate/rules/subdir2/rules-out'), True)
-
-test.build('rules.gyp', test.ALL, chdir='relocate/gypfiles')
-
-expect = """\
-Hello from program.c
-Hello from function1.in1
-Hello from function2.in1
-Hello from define3.in0
-Hello from define4.in0
-"""
-
-if test.format == 'xcode':
- chdir = 'relocate/rules/subdir1'
-else:
- chdir = 'relocate/gypfiles'
-test.run_built_executable('program', chdir=chdir, stdout=expect)
-
-test.must_match('relocate/rules/subdir2/rules-out/file1.out',
- "Hello from file1.in0\n")
-test.must_match('relocate/rules/subdir2/rules-out/file2.out',
- "Hello from file2.in0\n")
-test.must_match('relocate/rules/subdir2/rules-out/file3.out',
- "Hello from file3.in1\n")
-test.must_match('relocate/rules/subdir2/rules-out/file4.out',
- "Hello from file4.in1\n")
-
-test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/generator-output/gyptest-subdir2-deep.py b/deps/npm/node_modules/node-gyp/gyp/test/generator-output/gyptest-subdir2-deep.py
deleted file mode 100755
index 68dc68913..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/generator-output/gyptest-subdir2-deep.py
+++ /dev/null
@@ -1,37 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Verifies building a target from a .gyp file a few subdirectories
-deep when the --generator-output= option is used to put the build
-configuration files in a separate directory tree.
-"""
-
-import TestGyp
-
-# Ninja and Android don't support --generator-output.
-test = TestGyp.TestGyp(formats=['!ninja', '!android'])
-
-test.writable(test.workpath('src'), False)
-
-test.writable(test.workpath('src/subdir2/deeper/build'), True)
-
-test.run_gyp('deeper.gyp',
- '-Dset_symroot=1',
- '--generator-output=' + test.workpath('gypfiles'),
- chdir='src/subdir2/deeper')
-
-test.build('deeper.gyp', test.ALL, chdir='gypfiles')
-
-chdir = 'gypfiles'
-
-if test.format == 'xcode':
- chdir = 'src/subdir2/deeper'
-test.run_built_executable('deeper',
- chdir=chdir,
- stdout="Hello from deeper.c\n")
-
-test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/generator-output/gyptest-top-all.py b/deps/npm/node_modules/node-gyp/gyp/test/generator-output/gyptest-top-all.py
deleted file mode 100755
index 00950cc3c..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/generator-output/gyptest-top-all.py
+++ /dev/null
@@ -1,54 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Verifies building a project hierarchy created when the --generator-output=
-option is used to put the build configuration files in a separate
-directory tree.
-"""
-
-import TestGyp
-
-# Ninja and Android don't support --generator-output.
-test = TestGyp.TestGyp(formats=['!ninja', '!android'])
-
-test.writable(test.workpath('src'), False)
-
-test.run_gyp('prog1.gyp',
- '-Dset_symroot=1',
- '--generator-output=' + test.workpath('gypfiles'),
- chdir='src')
-
-test.writable(test.workpath('src/build'), True)
-test.writable(test.workpath('src/subdir2/build'), True)
-test.writable(test.workpath('src/subdir3/build'), True)
-
-test.build('prog1.gyp', test.ALL, chdir='gypfiles')
-
-chdir = 'gypfiles'
-
-expect = """\
-Hello from %s
-Hello from inc.h
-Hello from inc1/include1.h
-Hello from inc2/include2.h
-Hello from inc3/include3.h
-Hello from subdir2/deeper/deeper.h
-"""
-
-if test.format == 'xcode':
- chdir = 'src'
-test.run_built_executable('prog1', chdir=chdir, stdout=expect % 'prog1.c')
-
-if test.format == 'xcode':
- chdir = 'src/subdir2'
-test.run_built_executable('prog2', chdir=chdir, stdout=expect % 'prog2.c')
-
-if test.format == 'xcode':
- chdir = 'src/subdir3'
-test.run_built_executable('prog3', chdir=chdir, stdout=expect % 'prog3.c')
-
-test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/generator-output/mac-bundle/Info.plist b/deps/npm/node_modules/node-gyp/gyp/test/generator-output/mac-bundle/Info.plist
deleted file mode 100644
index 8cb142e9f..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/generator-output/mac-bundle/Info.plist
+++ /dev/null
@@ -1,32 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
- <key>CFBundleDevelopmentRegion</key>
- <string>English</string>
- <key>CFBundleExecutable</key>
- <string>${EXECUTABLE_NAME}</string>
- <key>CFBundleIconFile</key>
- <string></string>
- <key>CFBundleIdentifier</key>
- <string>com.google.${PRODUCT_NAME}</string>
- <key>CFBundleInfoDictionaryVersion</key>
- <string>6.0</string>
- <key>CFBundleName</key>
- <string>${PRODUCT_NAME}</string>
- <key>CFBundlePackageType</key>
- <string>APPL</string>
- <key>CFBundleShortVersionString</key>
- <string>1.0</string>
- <key>CFBundleSignature</key>
- <string>ause</string>
- <key>CFBundleVersion</key>
- <string>1</string>
- <key>LSMinimumSystemVersion</key>
- <string>${MACOSX_DEPLOYMENT_TARGET}</string>
- <key>NSMainNibFile</key>
- <string>MainMenu</string>
- <key>NSPrincipalClass</key>
- <string>NSApplication</string>
-</dict>
-</plist>
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/generator-output/mac-bundle/app.order b/deps/npm/node_modules/node-gyp/gyp/test/generator-output/mac-bundle/app.order
deleted file mode 100644
index 4eb9e89d3..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/generator-output/mac-bundle/app.order
+++ /dev/null
@@ -1 +0,0 @@
-_main
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/generator-output/mac-bundle/header.h b/deps/npm/node_modules/node-gyp/gyp/test/generator-output/mac-bundle/header.h
deleted file mode 100644
index 7ed777512..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/generator-output/mac-bundle/header.h
+++ /dev/null
@@ -1 +0,0 @@
-int f();
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/generator-output/mac-bundle/main.c b/deps/npm/node_modules/node-gyp/gyp/test/generator-output/mac-bundle/main.c
deleted file mode 100644
index 237c8ce18..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/generator-output/mac-bundle/main.c
+++ /dev/null
@@ -1 +0,0 @@
-int main() {}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/generator-output/mac-bundle/resource.sb b/deps/npm/node_modules/node-gyp/gyp/test/generator-output/mac-bundle/resource.sb
deleted file mode 100644
index 731befc45..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/generator-output/mac-bundle/resource.sb
+++ /dev/null
@@ -1 +0,0 @@
-A text file.
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/generator-output/mac-bundle/test.gyp b/deps/npm/node_modules/node-gyp/gyp/test/generator-output/mac-bundle/test.gyp
deleted file mode 100644
index 35ac674f6..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/generator-output/mac-bundle/test.gyp
+++ /dev/null
@@ -1,25 +0,0 @@
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-{
- 'targets': [
- {
- 'target_name': 'test_app',
- 'product_name': 'Test App Gyp',
- 'type': 'executable',
- 'mac_bundle': 1,
- 'sources': [
- 'main.c',
- ],
- 'mac_bundle_resources': [
- 'resource.sb',
- ],
- 'xcode_settings': {
- 'INFOPLIST_FILE': 'Info.plist',
- 'ORDER_FILE': 'app.order',
- 'GCC_PREFIX_HEADER': 'header.h',
- 'GCC_PRECOMPILE_PREFIX_HEADER': 'YES',
- },
- },
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/generator-output/rules/build/README.txt b/deps/npm/node_modules/node-gyp/gyp/test/generator-output/rules/build/README.txt
deleted file mode 100644
index 1b052c9a2..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/generator-output/rules/build/README.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-A place-holder for this Xcode build output directory, so that the
-test script can verify that .xcodeproj files are not created in
-their normal location by making the src/ read-only, and then
-selectively making this build directory writable.
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/generator-output/rules/copy-file.py b/deps/npm/node_modules/node-gyp/gyp/test/generator-output/rules/copy-file.py
deleted file mode 100755
index 938c336ad..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/generator-output/rules/copy-file.py
+++ /dev/null
@@ -1,12 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2009 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import sys
-
-contents = open(sys.argv[1], 'r').read()
-open(sys.argv[2], 'wb').write(contents)
-
-sys.exit(0)
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/generator-output/rules/rules.gyp b/deps/npm/node_modules/node-gyp/gyp/test/generator-output/rules/rules.gyp
deleted file mode 100644
index dded59aff..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/generator-output/rules/rules.gyp
+++ /dev/null
@@ -1,16 +0,0 @@
-# Copyright (c) 2009 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'targets': [
- {
- 'target_name': 'pull_in_all_actions',
- 'type': 'none',
- 'dependencies': [
- 'subdir1/executable.gyp:*',
- 'subdir2/none.gyp:*',
- ],
- },
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/generator-output/rules/subdir1/build/README.txt b/deps/npm/node_modules/node-gyp/gyp/test/generator-output/rules/subdir1/build/README.txt
deleted file mode 100644
index 1b052c9a2..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/generator-output/rules/subdir1/build/README.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-A place-holder for this Xcode build output directory, so that the
-test script can verify that .xcodeproj files are not created in
-their normal location by making the src/ read-only, and then
-selectively making this build directory writable.
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/generator-output/rules/subdir1/define3.in0 b/deps/npm/node_modules/node-gyp/gyp/test/generator-output/rules/subdir1/define3.in0
deleted file mode 100644
index cc29c643f..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/generator-output/rules/subdir1/define3.in0
+++ /dev/null
@@ -1 +0,0 @@
-#define STRING3 "Hello from define3.in0\n"
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/generator-output/rules/subdir1/define4.in0 b/deps/npm/node_modules/node-gyp/gyp/test/generator-output/rules/subdir1/define4.in0
deleted file mode 100644
index c9b0467b3..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/generator-output/rules/subdir1/define4.in0
+++ /dev/null
@@ -1 +0,0 @@
-#define STRING4 "Hello from define4.in0\n"
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/generator-output/rules/subdir1/executable.gyp b/deps/npm/node_modules/node-gyp/gyp/test/generator-output/rules/subdir1/executable.gyp
deleted file mode 100644
index 2fd89a0d5..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/generator-output/rules/subdir1/executable.gyp
+++ /dev/null
@@ -1,59 +0,0 @@
-# Copyright (c) 2009 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'targets': [
- {
- 'target_name': 'program',
- 'type': 'executable',
- 'msvs_cygwin_shell': 0,
- 'sources': [
- 'program.c',
- 'function1.in1',
- 'function2.in1',
- 'define3.in0',
- 'define4.in0',
- ],
- 'include_dirs': [
- '<(INTERMEDIATE_DIR)',
- ],
- 'rules': [
- {
- 'rule_name': 'copy_file_0',
- 'extension': 'in0',
- 'inputs': [
- '../copy-file.py',
- ],
- 'outputs': [
- # TODO: fix SCons and Make to support generated files not
- # in a variable-named path like <(INTERMEDIATE_DIR)
- #'<(RULE_INPUT_ROOT).c',
- '<(INTERMEDIATE_DIR)/<(RULE_INPUT_ROOT).h',
- ],
- 'action': [
- 'python', '<(_inputs)', '<(RULE_INPUT_PATH)', '<@(_outputs)',
- ],
- 'process_outputs_as_sources': 0,
- },
- {
- 'rule_name': 'copy_file_1',
- 'extension': 'in1',
- 'inputs': [
- '../copy-file.py',
- ],
- 'outputs': [
- # TODO: fix SCons and Make to support generated files not
- # in a variable-named path like <(INTERMEDIATE_DIR)
- #'<(RULE_INPUT_ROOT).c',
- '<(INTERMEDIATE_DIR)/<(RULE_INPUT_ROOT).c',
- ],
- 'action': [
- 'python', '<(_inputs)', '<(RULE_INPUT_PATH)', '<@(_outputs)',
- ],
- 'process_outputs_as_sources': 1,
- },
- ],
- },
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/generator-output/rules/subdir1/function1.in1 b/deps/npm/node_modules/node-gyp/gyp/test/generator-output/rules/subdir1/function1.in1
deleted file mode 100644
index 545e7ca16..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/generator-output/rules/subdir1/function1.in1
+++ /dev/null
@@ -1,6 +0,0 @@
-#include <stdio.h>
-
-void function1(void)
-{
- printf("Hello from function1.in1\n");
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/generator-output/rules/subdir1/function2.in1 b/deps/npm/node_modules/node-gyp/gyp/test/generator-output/rules/subdir1/function2.in1
deleted file mode 100644
index 6bad43f9c..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/generator-output/rules/subdir1/function2.in1
+++ /dev/null
@@ -1,6 +0,0 @@
-#include <stdio.h>
-
-void function2(void)
-{
- printf("Hello from function2.in1\n");
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/generator-output/rules/subdir1/program.c b/deps/npm/node_modules/node-gyp/gyp/test/generator-output/rules/subdir1/program.c
deleted file mode 100644
index 27fd31ed4..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/generator-output/rules/subdir1/program.c
+++ /dev/null
@@ -1,18 +0,0 @@
-#include <stdio.h>
-#include "define3.h"
-#include "define4.h"
-
-extern void function1(void);
-extern void function2(void);
-extern void function3(void);
-extern void function4(void);
-
-int main(int argc, char *argv[])
-{
- printf("Hello from program.c\n");
- function1();
- function2();
- printf("%s", STRING3);
- printf("%s", STRING4);
- return 0;
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/generator-output/rules/subdir2/build/README.txt b/deps/npm/node_modules/node-gyp/gyp/test/generator-output/rules/subdir2/build/README.txt
deleted file mode 100644
index 1b052c9a2..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/generator-output/rules/subdir2/build/README.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-A place-holder for this Xcode build output directory, so that the
-test script can verify that .xcodeproj files are not created in
-their normal location by making the src/ read-only, and then
-selectively making this build directory writable.
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/generator-output/rules/subdir2/file1.in0 b/deps/npm/node_modules/node-gyp/gyp/test/generator-output/rules/subdir2/file1.in0
deleted file mode 100644
index 7aca64f4c..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/generator-output/rules/subdir2/file1.in0
+++ /dev/null
@@ -1 +0,0 @@
-Hello from file1.in0
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/generator-output/rules/subdir2/file2.in0 b/deps/npm/node_modules/node-gyp/gyp/test/generator-output/rules/subdir2/file2.in0
deleted file mode 100644
index 80a281a2a..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/generator-output/rules/subdir2/file2.in0
+++ /dev/null
@@ -1 +0,0 @@
-Hello from file2.in0
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/generator-output/rules/subdir2/file3.in1 b/deps/npm/node_modules/node-gyp/gyp/test/generator-output/rules/subdir2/file3.in1
deleted file mode 100644
index 60ae2e793..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/generator-output/rules/subdir2/file3.in1
+++ /dev/null
@@ -1 +0,0 @@
-Hello from file3.in1
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/generator-output/rules/subdir2/file4.in1 b/deps/npm/node_modules/node-gyp/gyp/test/generator-output/rules/subdir2/file4.in1
deleted file mode 100644
index 5a3c30720..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/generator-output/rules/subdir2/file4.in1
+++ /dev/null
@@ -1 +0,0 @@
-Hello from file4.in1
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/generator-output/rules/subdir2/none.gyp b/deps/npm/node_modules/node-gyp/gyp/test/generator-output/rules/subdir2/none.gyp
deleted file mode 100644
index 664cbd9cb..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/generator-output/rules/subdir2/none.gyp
+++ /dev/null
@@ -1,49 +0,0 @@
-# Copyright (c) 2009 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'targets': [
- {
- 'target_name': 'files',
- 'type': 'none',
- 'msvs_cygwin_shell': 0,
- 'sources': [
- 'file1.in0',
- 'file2.in0',
- 'file3.in1',
- 'file4.in1',
- ],
- 'rules': [
- {
- 'rule_name': 'copy_file_0',
- 'extension': 'in0',
- 'inputs': [
- '../copy-file.py',
- ],
- 'outputs': [
- 'rules-out/<(RULE_INPUT_ROOT).out',
- ],
- 'action': [
- 'python', '<(_inputs)', '<(RULE_INPUT_PATH)', '<@(_outputs)',
- ],
- 'process_outputs_as_sources': 0,
- },
- {
- 'rule_name': 'copy_file_1',
- 'extension': 'in1',
- 'inputs': [
- '../copy-file.py',
- ],
- 'outputs': [
- 'rules-out/<(RULE_INPUT_ROOT).out',
- ],
- 'action': [
- 'python', '<(_inputs)', '<(RULE_INPUT_PATH)', '<@(_outputs)',
- ],
- 'process_outputs_as_sources': 1,
- },
- ],
- },
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/generator-output/rules/subdir2/rules-out/README.txt b/deps/npm/node_modules/node-gyp/gyp/test/generator-output/rules/subdir2/rules-out/README.txt
deleted file mode 100644
index 1b052c9a2..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/generator-output/rules/subdir2/rules-out/README.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-A place-holder for this Xcode build output directory, so that the
-test script can verify that .xcodeproj files are not created in
-their normal location by making the src/ read-only, and then
-selectively making this build directory writable.
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/generator-output/src/build/README.txt b/deps/npm/node_modules/node-gyp/gyp/test/generator-output/src/build/README.txt
deleted file mode 100644
index 90ef88619..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/generator-output/src/build/README.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-A place-holder for this Xcode build output directory, so that the
-test script can verify that .xcodeproj files are not created in
-their normal location by making the src/ read-only, and then
-selectively making this build directory writable.
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/generator-output/src/inc.h b/deps/npm/node_modules/node-gyp/gyp/test/generator-output/src/inc.h
deleted file mode 100644
index 57aa1a5a7..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/generator-output/src/inc.h
+++ /dev/null
@@ -1 +0,0 @@
-#define INC_STRING "inc.h"
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/generator-output/src/inc1/include1.h b/deps/npm/node_modules/node-gyp/gyp/test/generator-output/src/inc1/include1.h
deleted file mode 100644
index 1d59065fc..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/generator-output/src/inc1/include1.h
+++ /dev/null
@@ -1 +0,0 @@
-#define INCLUDE1_STRING "inc1/include1.h"
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/generator-output/src/prog1.c b/deps/npm/node_modules/node-gyp/gyp/test/generator-output/src/prog1.c
deleted file mode 100644
index 656f81d5f..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/generator-output/src/prog1.c
+++ /dev/null
@@ -1,18 +0,0 @@
-#include <stdio.h>
-
-#include "inc.h"
-#include "include1.h"
-#include "include2.h"
-#include "include3.h"
-#include "deeper.h"
-
-int main(int argc, char *argv[])
-{
- printf("Hello from prog1.c\n");
- printf("Hello from %s\n", INC_STRING);
- printf("Hello from %s\n", INCLUDE1_STRING);
- printf("Hello from %s\n", INCLUDE2_STRING);
- printf("Hello from %s\n", INCLUDE3_STRING);
- printf("Hello from %s\n", DEEPER_STRING);
- return 0;
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/generator-output/src/prog1.gyp b/deps/npm/node_modules/node-gyp/gyp/test/generator-output/src/prog1.gyp
deleted file mode 100644
index d50e6fb0a..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/generator-output/src/prog1.gyp
+++ /dev/null
@@ -1,28 +0,0 @@
-# Copyright (c) 2009 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'includes': [
- 'symroot.gypi',
- ],
- 'targets': [
- {
- 'target_name': 'prog1',
- 'type': 'executable',
- 'dependencies': [
- 'subdir2/prog2.gyp:prog2',
- ],
- 'include_dirs': [
- '.',
- 'inc1',
- 'subdir2/inc2',
- 'subdir3/inc3',
- 'subdir2/deeper',
- ],
- 'sources': [
- 'prog1.c',
- ],
- },
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/generator-output/src/subdir2/build/README.txt b/deps/npm/node_modules/node-gyp/gyp/test/generator-output/src/subdir2/build/README.txt
deleted file mode 100644
index 90ef88619..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/generator-output/src/subdir2/build/README.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-A place-holder for this Xcode build output directory, so that the
-test script can verify that .xcodeproj files are not created in
-their normal location by making the src/ read-only, and then
-selectively making this build directory writable.
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/generator-output/src/subdir2/deeper/build/README.txt b/deps/npm/node_modules/node-gyp/gyp/test/generator-output/src/subdir2/deeper/build/README.txt
deleted file mode 100644
index 90ef88619..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/generator-output/src/subdir2/deeper/build/README.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-A place-holder for this Xcode build output directory, so that the
-test script can verify that .xcodeproj files are not created in
-their normal location by making the src/ read-only, and then
-selectively making this build directory writable.
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/generator-output/src/subdir2/deeper/deeper.c b/deps/npm/node_modules/node-gyp/gyp/test/generator-output/src/subdir2/deeper/deeper.c
deleted file mode 100644
index 56c49d1f7..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/generator-output/src/subdir2/deeper/deeper.c
+++ /dev/null
@@ -1,7 +0,0 @@
-#include <stdio.h>
-
-int main(int argc, char *argv[])
-{
- printf("Hello from deeper.c\n");
- return 0;
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/generator-output/src/subdir2/deeper/deeper.gyp b/deps/npm/node_modules/node-gyp/gyp/test/generator-output/src/subdir2/deeper/deeper.gyp
deleted file mode 100644
index 864877087..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/generator-output/src/subdir2/deeper/deeper.gyp
+++ /dev/null
@@ -1,18 +0,0 @@
-# Copyright (c) 2009 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'includes': [
- '../../symroot.gypi',
- ],
- 'targets': [
- {
- 'target_name': 'deeper',
- 'type': 'executable',
- 'sources': [
- 'deeper.c',
- ],
- },
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/generator-output/src/subdir2/deeper/deeper.h b/deps/npm/node_modules/node-gyp/gyp/test/generator-output/src/subdir2/deeper/deeper.h
deleted file mode 100644
index f6484a0fe..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/generator-output/src/subdir2/deeper/deeper.h
+++ /dev/null
@@ -1 +0,0 @@
-#define DEEPER_STRING "subdir2/deeper/deeper.h"
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/generator-output/src/subdir2/inc2/include2.h b/deps/npm/node_modules/node-gyp/gyp/test/generator-output/src/subdir2/inc2/include2.h
deleted file mode 100644
index 1ccfa5dea..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/generator-output/src/subdir2/inc2/include2.h
+++ /dev/null
@@ -1 +0,0 @@
-#define INCLUDE2_STRING "inc2/include2.h"
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/generator-output/src/subdir2/prog2.c b/deps/npm/node_modules/node-gyp/gyp/test/generator-output/src/subdir2/prog2.c
deleted file mode 100644
index 38d6c84d1..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/generator-output/src/subdir2/prog2.c
+++ /dev/null
@@ -1,18 +0,0 @@
-#include <stdio.h>
-
-#include "inc.h"
-#include "include1.h"
-#include "include2.h"
-#include "include3.h"
-#include "deeper.h"
-
-int main(int argc, char *argv[])
-{
- printf("Hello from prog2.c\n");
- printf("Hello from %s\n", INC_STRING);
- printf("Hello from %s\n", INCLUDE1_STRING);
- printf("Hello from %s\n", INCLUDE2_STRING);
- printf("Hello from %s\n", INCLUDE3_STRING);
- printf("Hello from %s\n", DEEPER_STRING);
- return 0;
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/generator-output/src/subdir2/prog2.gyp b/deps/npm/node_modules/node-gyp/gyp/test/generator-output/src/subdir2/prog2.gyp
deleted file mode 100644
index 7176ed8be..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/generator-output/src/subdir2/prog2.gyp
+++ /dev/null
@@ -1,28 +0,0 @@
-# Copyright (c) 2009 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'includes': [
- '../symroot.gypi',
- ],
- 'targets': [
- {
- 'target_name': 'prog2',
- 'type': 'executable',
- 'include_dirs': [
- '..',
- '../inc1',
- 'inc2',
- '../subdir3/inc3',
- 'deeper',
- ],
- 'dependencies': [
- '../subdir3/prog3.gyp:prog3',
- ],
- 'sources': [
- 'prog2.c',
- ],
- },
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/generator-output/src/subdir3/build/README.txt b/deps/npm/node_modules/node-gyp/gyp/test/generator-output/src/subdir3/build/README.txt
deleted file mode 100644
index 90ef88619..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/generator-output/src/subdir3/build/README.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-A place-holder for this Xcode build output directory, so that the
-test script can verify that .xcodeproj files are not created in
-their normal location by making the src/ read-only, and then
-selectively making this build directory writable.
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/generator-output/src/subdir3/inc3/include3.h b/deps/npm/node_modules/node-gyp/gyp/test/generator-output/src/subdir3/inc3/include3.h
deleted file mode 100644
index bf53bf1f0..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/generator-output/src/subdir3/inc3/include3.h
+++ /dev/null
@@ -1 +0,0 @@
-#define INCLUDE3_STRING "inc3/include3.h"
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/generator-output/src/subdir3/prog3.c b/deps/npm/node_modules/node-gyp/gyp/test/generator-output/src/subdir3/prog3.c
deleted file mode 100644
index 7848b45ab..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/generator-output/src/subdir3/prog3.c
+++ /dev/null
@@ -1,18 +0,0 @@
-#include <stdio.h>
-
-#include "inc.h"
-#include "include1.h"
-#include "include2.h"
-#include "include3.h"
-#include "deeper.h"
-
-int main(int argc, char *argv[])
-{
- printf("Hello from prog3.c\n");
- printf("Hello from %s\n", INC_STRING);
- printf("Hello from %s\n", INCLUDE1_STRING);
- printf("Hello from %s\n", INCLUDE2_STRING);
- printf("Hello from %s\n", INCLUDE3_STRING);
- printf("Hello from %s\n", DEEPER_STRING);
- return 0;
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/generator-output/src/subdir3/prog3.gyp b/deps/npm/node_modules/node-gyp/gyp/test/generator-output/src/subdir3/prog3.gyp
deleted file mode 100644
index 46c5e000a..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/generator-output/src/subdir3/prog3.gyp
+++ /dev/null
@@ -1,25 +0,0 @@
-# Copyright (c) 2009 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'includes': [
- '../symroot.gypi',
- ],
- 'targets': [
- {
- 'target_name': 'prog3',
- 'type': 'executable',
- 'include_dirs': [
- '..',
- '../inc1',
- '../subdir2/inc2',
- 'inc3',
- '../subdir2/deeper',
- ],
- 'sources': [
- 'prog3.c',
- ],
- },
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/generator-output/src/symroot.gypi b/deps/npm/node_modules/node-gyp/gyp/test/generator-output/src/symroot.gypi
deleted file mode 100644
index 519916427..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/generator-output/src/symroot.gypi
+++ /dev/null
@@ -1,16 +0,0 @@
-# Copyright (c) 2009 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'variables': {
- 'set_symroot%': 0,
- },
- 'conditions': [
- ['set_symroot == 1', {
- 'xcode_settings': {
- 'SYMROOT': '<(DEPTH)/build',
- },
- }],
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/gyp-defines/defines.gyp b/deps/npm/node_modules/node-gyp/gyp/test/gyp-defines/defines.gyp
deleted file mode 100644
index f59bbd20d..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/gyp-defines/defines.gyp
+++ /dev/null
@@ -1,26 +0,0 @@
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'targets': [
- {
- 'target_name': 'test_target',
- 'type': 'none',
- 'actions': [
- {
- 'action_name': 'test_action',
- 'inputs': [],
- 'outputs': [ 'action.txt' ],
- 'action': [
- 'python',
- 'echo.py',
- '<(key)',
- '<(_outputs)',
- ],
- 'msvs_cygwin_shell': 0,
- }
- ],
- },
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/gyp-defines/echo.py b/deps/npm/node_modules/node-gyp/gyp/test/gyp-defines/echo.py
deleted file mode 100644
index b85add12f..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/gyp-defines/echo.py
+++ /dev/null
@@ -1,11 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import sys
-
-f = open(sys.argv[2], 'w+')
-f.write(sys.argv[1])
-f.close()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/gyp-defines/gyptest-multiple-values.py b/deps/npm/node_modules/node-gyp/gyp/test/gyp-defines/gyptest-multiple-values.py
deleted file mode 100644
index a659ad8af..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/gyp-defines/gyptest-multiple-values.py
+++ /dev/null
@@ -1,34 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Verifies that when multiple values are supplied for a gyp define, the last one
-is used.
-"""
-
-import os
-import TestGyp
-
-test = TestGyp.TestGyp()
-
-os.environ['GYP_DEFINES'] = 'key=value1 key=value2 key=value3'
-test.run_gyp('defines.gyp')
-test.build('defines.gyp')
-test.must_contain('action.txt', 'value3')
-
-# The last occurrence of a repeated set should take precedence over other
-# values.
-os.environ['GYP_DEFINES'] = 'key=repeated_value key=value1 key=repeated_value'
-test.run_gyp('defines.gyp')
-if test.format == 'msvs' and not test.uses_msbuild:
- # msvs versions before 2010 don't detect build rule changes not reflected
- # in file system timestamps. Rebuild to see differences.
- test.build('defines.gyp', rebuild=True)
-else:
- test.build('defines.gyp')
-test.must_contain('action.txt', 'repeated_value')
-
-test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/gyp-defines/gyptest-regyp.py b/deps/npm/node_modules/node-gyp/gyp/test/gyp-defines/gyptest-regyp.py
deleted file mode 100644
index 3c1d4d908..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/gyp-defines/gyptest-regyp.py
+++ /dev/null
@@ -1,40 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Verifies that when the same value is repeated for a gyp define, duplicates are
-stripped from the regeneration rule.
-"""
-
-import os
-import TestGyp
-
-# Regenerating build files when a gyp file changes is currently only supported
-# by the make and Android generators.
-test = TestGyp.TestGyp(formats=['make', 'android'])
-
-os.environ['GYP_DEFINES'] = 'key=repeated_value key=value1 key=repeated_value'
-test.run_gyp('defines.gyp')
-test.build('defines.gyp')
-
-# The last occurrence of a repeated set should take precedence over other
-# values. See gyptest-multiple-values.py.
-test.must_contain('action.txt', 'repeated_value')
-
-# So the regeneration rule needs to use the correct order.
-test.must_not_contain(
- 'Makefile', '"-Dkey=repeated_value" "-Dkey=value1" "-Dkey=repeated_value"')
-test.must_contain('Makefile', '"-Dkey=value1" "-Dkey=repeated_value"')
-
-# Sleep so that the changed gyp file will have a newer timestamp than the
-# previously generated build files.
-test.sleep()
-os.utime("defines.gyp", None)
-
-test.build('defines.gyp')
-test.must_contain('action.txt', 'repeated_value')
-
-test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/hard_dependency/gyptest-exported-hard-dependency.py b/deps/npm/node_modules/node-gyp/gyp/test/hard_dependency/gyptest-exported-hard-dependency.py
deleted file mode 100755
index ba5152880..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/hard_dependency/gyptest-exported-hard-dependency.py
+++ /dev/null
@@ -1,37 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2009 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Verify that a hard_dependency that is exported is pulled in as a dependency
-for a target if the target is a static library and if the generator will
-remove dependencies between static libraries.
-"""
-
-import TestGyp
-
-test = TestGyp.TestGyp()
-
-if test.format == 'dump_dependency_json':
- test.skip_test('Skipping test; dependency JSON does not adjust ' \
- 'static libraries.\n')
-
-test.run_gyp('hard_dependency.gyp', chdir='src')
-
-chdir = 'relocate/src'
-test.relocate('src', chdir)
-
-test.build('hard_dependency.gyp', 'c', chdir=chdir)
-
-# The 'a' static library should be built, as it has actions with side-effects
-# that are necessary to compile 'c'. Even though 'c' does not directly depend
-# on 'a', because 'a' is a hard_dependency that 'b' exports, 'c' should import
-# it as a hard_dependency and ensure it is built before building 'c'.
-test.built_file_must_exist('a', type=test.STATIC_LIB, chdir=chdir)
-test.built_file_must_not_exist('b', type=test.STATIC_LIB, chdir=chdir)
-test.built_file_must_exist('c', type=test.STATIC_LIB, chdir=chdir)
-test.built_file_must_not_exist('d', type=test.STATIC_LIB, chdir=chdir)
-
-test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/hard_dependency/gyptest-no-exported-hard-dependency.py b/deps/npm/node_modules/node-gyp/gyp/test/hard_dependency/gyptest-no-exported-hard-dependency.py
deleted file mode 100755
index 10774ca2a..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/hard_dependency/gyptest-no-exported-hard-dependency.py
+++ /dev/null
@@ -1,36 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2009 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Verify that a hard_dependency that is not exported is not pulled in as a
-dependency for a target if the target does not explicitly specify a dependency
-and none of its dependencies export the hard_dependency.
-"""
-
-import TestGyp
-
-test = TestGyp.TestGyp()
-
-if test.format == 'dump_dependency_json':
- test.skip_test('Skipping test; dependency JSON does not adjust ' \
- 'static libaries.\n')
-
-test.run_gyp('hard_dependency.gyp', chdir='src')
-
-chdir = 'relocate/src'
-test.relocate('src', chdir)
-
-test.build('hard_dependency.gyp', 'd', chdir=chdir)
-
-# Because 'c' does not export a hard_dependency, only the target 'd' should
-# be built. This is because the 'd' target does not need the generated headers
-# in order to be compiled.
-test.built_file_must_not_exist('a', type=test.STATIC_LIB, chdir=chdir)
-test.built_file_must_not_exist('b', type=test.STATIC_LIB, chdir=chdir)
-test.built_file_must_not_exist('c', type=test.STATIC_LIB, chdir=chdir)
-test.built_file_must_exist('d', type=test.STATIC_LIB, chdir=chdir)
-
-test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/hard_dependency/src/a.c b/deps/npm/node_modules/node-gyp/gyp/test/hard_dependency/src/a.c
deleted file mode 100644
index 0fa0223c9..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/hard_dependency/src/a.c
+++ /dev/null
@@ -1,9 +0,0 @@
-/* Copyright (c) 2011 Google Inc. All rights reserved.
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file. */
-
-#include "a.h"
-
-int funcA() {
- return 42;
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/hard_dependency/src/a.h b/deps/npm/node_modules/node-gyp/gyp/test/hard_dependency/src/a.h
deleted file mode 100644
index 854a06504..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/hard_dependency/src/a.h
+++ /dev/null
@@ -1,12 +0,0 @@
-/* Copyright (c) 2009 Google Inc. All rights reserved.
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file. */
-
-#ifndef A_H_
-#define A_H_
-
-#include "generated.h"
-
-int funcA();
-
-#endif // A_H_
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/hard_dependency/src/b.c b/deps/npm/node_modules/node-gyp/gyp/test/hard_dependency/src/b.c
deleted file mode 100644
index 0baace929..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/hard_dependency/src/b.c
+++ /dev/null
@@ -1,9 +0,0 @@
-/* Copyright (c) 2011 Google Inc. All rights reserved.
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file. */
-
-#include "a.h"
-
-int funcB() {
- return funcA();
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/hard_dependency/src/b.h b/deps/npm/node_modules/node-gyp/gyp/test/hard_dependency/src/b.h
deleted file mode 100644
index 22b48cefe..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/hard_dependency/src/b.h
+++ /dev/null
@@ -1,12 +0,0 @@
-/* Copyright (c) 2011 Google Inc. All rights reserved.
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file. */
-
-#ifndef B_H_
-#define B_H_
-
-#include "a.h"
-
-int funcB();
-
-#endif // B_H_
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/hard_dependency/src/c.c b/deps/npm/node_modules/node-gyp/gyp/test/hard_dependency/src/c.c
deleted file mode 100644
index 7d0068208..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/hard_dependency/src/c.c
+++ /dev/null
@@ -1,10 +0,0 @@
-/* Copyright (c) 2011 Google Inc. All rights reserved.
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file. */
-
-#include "b.h"
-#include "c.h"
-
-int funcC() {
- return funcB();
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/hard_dependency/src/c.h b/deps/npm/node_modules/node-gyp/gyp/test/hard_dependency/src/c.h
deleted file mode 100644
index f4ea7fefa..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/hard_dependency/src/c.h
+++ /dev/null
@@ -1,10 +0,0 @@
-/* Copyright (c) 2011 Google Inc. All rights reserved.
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file. */
-
-#ifndef C_H_
-#define C_H_
-
-int funcC();
-
-#endif // C_H_
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/hard_dependency/src/d.c b/deps/npm/node_modules/node-gyp/gyp/test/hard_dependency/src/d.c
deleted file mode 100644
index d016c3ce7..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/hard_dependency/src/d.c
+++ /dev/null
@@ -1,9 +0,0 @@
-/* Copyright (c) 2009 Google Inc. All rights reserved.
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file. */
-
-#include "c.h"
-
-int funcD() {
- return funcC();
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/hard_dependency/src/emit.py b/deps/npm/node_modules/node-gyp/gyp/test/hard_dependency/src/emit.py
deleted file mode 100755
index 2df74b79a..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/hard_dependency/src/emit.py
+++ /dev/null
@@ -1,11 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2011 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import sys
-
-f = open(sys.argv[1], 'wb')
-f.write('/* Hello World */\n')
-f.close()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/hard_dependency/src/hard_dependency.gyp b/deps/npm/node_modules/node-gyp/gyp/test/hard_dependency/src/hard_dependency.gyp
deleted file mode 100644
index 4479c5f04..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/hard_dependency/src/hard_dependency.gyp
+++ /dev/null
@@ -1,78 +0,0 @@
-# Copyright (c) 2011 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'targets': [
- {
- 'target_name': 'a',
- 'type': 'static_library',
- 'sources': [
- 'a.c',
- 'a.h',
- ],
- 'hard_dependency': 1,
- 'actions': [
- {
- 'action_name': 'generate_headers',
- 'inputs': [
- 'emit.py'
- ],
- 'outputs': [
- '<(SHARED_INTERMEDIATE_DIR)/generated.h'
- ],
- 'action': [
- 'python',
- 'emit.py',
- '<(SHARED_INTERMEDIATE_DIR)/generated.h',
- ],
- # Allows the test to run without hermetic cygwin on windows.
- 'msvs_cygwin_shell': 0,
- },
- ],
- 'include_dirs': [
- '<(SHARED_INTERMEDIATE_DIR)',
- ],
- 'direct_dependent_settings': {
- 'include_dirs': [
- '<(SHARED_INTERMEDIATE_DIR)',
- ],
- },
- },
- {
- 'target_name': 'b',
- 'type': 'static_library',
- 'sources': [
- 'b.c',
- 'b.h',
- ],
- 'dependencies': [
- 'a',
- ],
- 'export_dependent_settings': [
- 'a',
- ],
- },
- {
- 'target_name': 'c',
- 'type': 'static_library',
- 'sources': [
- 'c.c',
- 'c.h',
- ],
- 'dependencies': [
- 'b',
- ],
- },
- {
- 'target_name': 'd',
- 'type': 'static_library',
- 'sources': [
- 'd.c',
- ],
- 'dependencies': [
- 'c',
- ],
- }
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/hello/gyptest-all.py b/deps/npm/node_modules/node-gyp/gyp/test/hello/gyptest-all.py
deleted file mode 100755
index 1739b6886..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/hello/gyptest-all.py
+++ /dev/null
@@ -1,24 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2009 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Verifies simplest-possible build of a "Hello, world!" program
-using an explicit build target of 'all'.
-"""
-
-import TestGyp
-
-test = TestGyp.TestGyp(workdir='workarea_all')
-
-test.run_gyp('hello.gyp')
-
-test.build('hello.gyp', test.ALL)
-
-test.run_built_executable('hello', stdout="Hello, world!\n")
-
-test.up_to_date('hello.gyp', test.ALL)
-
-test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/hello/gyptest-default.py b/deps/npm/node_modules/node-gyp/gyp/test/hello/gyptest-default.py
deleted file mode 100755
index 22377e7ac..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/hello/gyptest-default.py
+++ /dev/null
@@ -1,24 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2009 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Verifies simplest-possible build of a "Hello, world!" program
-using the default build target.
-"""
-
-import TestGyp
-
-test = TestGyp.TestGyp(workdir='workarea_default')
-
-test.run_gyp('hello.gyp')
-
-test.build('hello.gyp')
-
-test.run_built_executable('hello', stdout="Hello, world!\n")
-
-test.up_to_date('hello.gyp', test.DEFAULT)
-
-test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/hello/gyptest-disable-regyp.py b/deps/npm/node_modules/node-gyp/gyp/test/hello/gyptest-disable-regyp.py
deleted file mode 100755
index 1e4b30667..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/hello/gyptest-disable-regyp.py
+++ /dev/null
@@ -1,32 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2009 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Verifies that Makefiles don't get rebuilt when a source gyp file changes and
-the disable_regeneration generator flag is set.
-"""
-
-import TestGyp
-
-test = TestGyp.TestGyp()
-
-test.run_gyp('hello.gyp', '-Gauto_regeneration=0')
-
-test.build('hello.gyp', test.ALL)
-
-test.run_built_executable('hello', stdout="Hello, world!\n")
-
-# Sleep so that the changed gyp file will have a newer timestamp than the
-# previously generated build files.
-test.sleep()
-test.write('hello.gyp', test.read('hello2.gyp'))
-
-test.build('hello.gyp', test.ALL)
-
-# Should still be the old executable, as regeneration was disabled.
-test.run_built_executable('hello', stdout="Hello, world!\n")
-
-test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/hello/gyptest-regyp.py b/deps/npm/node_modules/node-gyp/gyp/test/hello/gyptest-regyp.py
deleted file mode 100755
index 2131972f2..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/hello/gyptest-regyp.py
+++ /dev/null
@@ -1,32 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Verifies that Makefiles get rebuilt when a source gyp file changes.
-"""
-
-import TestGyp
-
-# Regenerating build files when a gyp file changes is currently only supported
-# by the make and Android generators.
-test = TestGyp.TestGyp(formats=['make', 'android'])
-
-test.run_gyp('hello.gyp')
-
-test.build('hello.gyp', test.ALL)
-
-test.run_built_executable('hello', stdout="Hello, world!\n")
-
-# Sleep so that the changed gyp file will have a newer timestamp than the
-# previously generated build files.
-test.sleep()
-test.write('hello.gyp', test.read('hello2.gyp'))
-
-test.build('hello.gyp', test.ALL)
-
-test.run_built_executable('hello', stdout="Hello, two!\n")
-
-test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/hello/gyptest-target.py b/deps/npm/node_modules/node-gyp/gyp/test/hello/gyptest-target.py
deleted file mode 100755
index 1abaf7057..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/hello/gyptest-target.py
+++ /dev/null
@@ -1,24 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2009 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Verifies simplest-possible build of a "Hello, world!" program
-using an explicit build target of 'hello'.
-"""
-
-import TestGyp
-
-test = TestGyp.TestGyp(workdir='workarea_target')
-
-test.run_gyp('hello.gyp')
-
-test.build('hello.gyp', 'hello')
-
-test.run_built_executable('hello', stdout="Hello, world!\n")
-
-test.up_to_date('hello.gyp', 'hello')
-
-test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/hello/hello.c b/deps/npm/node_modules/node-gyp/gyp/test/hello/hello.c
deleted file mode 100644
index 8dbecc049..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/hello/hello.c
+++ /dev/null
@@ -1,11 +0,0 @@
-/* Copyright (c) 2009 Google Inc. All rights reserved.
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file. */
-
-#include <stdio.h>
-
-int main(int argc, char *argv[])
-{
- printf("Hello, world!\n");
- return 0;
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/hello/hello.gyp b/deps/npm/node_modules/node-gyp/gyp/test/hello/hello.gyp
deleted file mode 100644
index 1974d51cc..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/hello/hello.gyp
+++ /dev/null
@@ -1,15 +0,0 @@
-# Copyright (c) 2009 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'targets': [
- {
- 'target_name': 'hello',
- 'type': 'executable',
- 'sources': [
- 'hello.c',
- ],
- },
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/hello/hello2.c b/deps/npm/node_modules/node-gyp/gyp/test/hello/hello2.c
deleted file mode 100644
index 19ef3fbd5..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/hello/hello2.c
+++ /dev/null
@@ -1,11 +0,0 @@
-/* Copyright (c) 2009 Google Inc. All rights reserved.
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file. */
-
-#include <stdio.h>
-
-int main(int argc, char *argv[])
-{
- printf("Hello, two!\n");
- return 0;
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/hello/hello2.gyp b/deps/npm/node_modules/node-gyp/gyp/test/hello/hello2.gyp
deleted file mode 100644
index 25b08caf3..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/hello/hello2.gyp
+++ /dev/null
@@ -1,15 +0,0 @@
-# Copyright (c) 2009 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'targets': [
- {
- 'target_name': 'hello',
- 'type': 'executable',
- 'sources': [
- 'hello2.c',
- ],
- },
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/home_dot_gyp/gyptest-home-includes-regyp.py b/deps/npm/node_modules/node-gyp/gyp/test/home_dot_gyp/gyptest-home-includes-regyp.py
deleted file mode 100755
index a206125f3..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/home_dot_gyp/gyptest-home-includes-regyp.py
+++ /dev/null
@@ -1,44 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Verifies inclusion of $HOME/.gyp/include.gypi works properly with relocation
-and with regeneration.
-"""
-
-import os
-import TestGyp
-
-# Regenerating build files when a gyp file changes is currently only supported
-# by the make and Android generators.
-test = TestGyp.TestGyp(formats=['make', 'android'])
-
-os.environ['HOME'] = os.path.abspath('home')
-
-test.run_gyp('all.gyp', chdir='src')
-
-# After relocating, we should still be able to build (build file shouldn't
-# contain relative reference to ~/.gyp/include.gypi)
-test.relocate('src', 'relocate/src')
-
-test.build('all.gyp', test.ALL, chdir='relocate/src')
-
-test.run_built_executable('printfoo',
- chdir='relocate/src',
- stdout='FOO is fromhome\n')
-
-# Building should notice any changes to ~/.gyp/include.gypi and regyp.
-test.sleep()
-
-test.write('home/.gyp/include.gypi', test.read('home2/.gyp/include.gypi'))
-
-test.build('all.gyp', test.ALL, chdir='relocate/src')
-
-test.run_built_executable('printfoo',
- chdir='relocate/src',
- stdout='FOO is fromhome2\n')
-
-test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/home_dot_gyp/gyptest-home-includes.py b/deps/npm/node_modules/node-gyp/gyp/test/home_dot_gyp/gyptest-home-includes.py
deleted file mode 100755
index 8ad52556b..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/home_dot_gyp/gyptest-home-includes.py
+++ /dev/null
@@ -1,30 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2011 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Verifies inclusion of $HOME/.gyp/include.gypi works.
-"""
-
-import os
-import TestGyp
-
-test = TestGyp.TestGyp()
-
-os.environ['HOME'] = os.path.abspath('home')
-
-test.run_gyp('all.gyp', chdir='src')
-
-# After relocating, we should still be able to build (build file shouldn't
-# contain relative reference to ~/.gyp/include.gypi)
-test.relocate('src', 'relocate/src')
-
-test.build('all.gyp', test.ALL, chdir='relocate/src')
-
-test.run_built_executable('printfoo',
- chdir='relocate/src',
- stdout='FOO is fromhome\n')
-
-test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/home_dot_gyp/home/.gyp/include.gypi b/deps/npm/node_modules/node-gyp/gyp/test/home_dot_gyp/home/.gyp/include.gypi
deleted file mode 100644
index fcfb39bef..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/home_dot_gyp/home/.gyp/include.gypi
+++ /dev/null
@@ -1,5 +0,0 @@
-{
- 'variables': {
- 'foo': '"fromhome"',
- },
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/home_dot_gyp/home2/.gyp/include.gypi b/deps/npm/node_modules/node-gyp/gyp/test/home_dot_gyp/home2/.gyp/include.gypi
deleted file mode 100644
index f0d84b31a..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/home_dot_gyp/home2/.gyp/include.gypi
+++ /dev/null
@@ -1,5 +0,0 @@
-{
- 'variables': {
- 'foo': '"fromhome2"',
- },
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/home_dot_gyp/src/all.gyp b/deps/npm/node_modules/node-gyp/gyp/test/home_dot_gyp/src/all.gyp
deleted file mode 100644
index 14b6aea28..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/home_dot_gyp/src/all.gyp
+++ /dev/null
@@ -1,22 +0,0 @@
-# Copyright (c) 2009 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'variables': {
- 'foo%': '"fromdefault"',
- },
- 'targets': [
- {
- 'target_name': 'printfoo',
- 'type': 'executable',
- 'sources': [
- 'printfoo.c',
- ],
- 'defines': [
- 'FOO=<(foo)',
- ],
- },
- ],
-}
-
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/home_dot_gyp/src/printfoo.c b/deps/npm/node_modules/node-gyp/gyp/test/home_dot_gyp/src/printfoo.c
deleted file mode 100644
index 92d2cbacb..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/home_dot_gyp/src/printfoo.c
+++ /dev/null
@@ -1,7 +0,0 @@
-#include <stdio.h>
-
-int main(int argc, char *argv[])
-{
- printf("FOO is %s\n", FOO);
- return 0;
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/include_dirs/gyptest-all.py b/deps/npm/node_modules/node-gyp/gyp/test/include_dirs/gyptest-all.py
deleted file mode 100755
index 94a1338d4..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/include_dirs/gyptest-all.py
+++ /dev/null
@@ -1,46 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2009 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Verifies use of include_dirs when using an explicit build target of 'all'.
-"""
-
-import TestGyp
-
-test = TestGyp.TestGyp()
-
-if test.format == 'scons':
- test.skip_test('TODO: http://code.google.com/p/gyp/issues/detail?id=176\n')
-
-test.run_gyp('includes.gyp', chdir='src')
-
-test.relocate('src', 'relocate/src')
-
-test.build('includes.gyp', test.ALL, chdir='relocate/src')
-
-expect = """\
-Hello from includes.c
-Hello from inc.h
-Hello from include1.h
-Hello from subdir/inc2/include2.h
-Hello from shadow2/shadow.h
-"""
-test.run_built_executable('includes', stdout=expect, chdir='relocate/src')
-
-if test.format == 'xcode':
- chdir='relocate/src/subdir'
-else:
- chdir='relocate/src'
-
-expect = """\
-Hello from subdir/subdir_includes.c
-Hello from subdir/inc.h
-Hello from include1.h
-Hello from subdir/inc2/include2.h
-"""
-test.run_built_executable('subdir_includes', stdout=expect, chdir=chdir)
-
-test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/include_dirs/gyptest-default.py b/deps/npm/node_modules/node-gyp/gyp/test/include_dirs/gyptest-default.py
deleted file mode 100755
index 42acd1f96..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/include_dirs/gyptest-default.py
+++ /dev/null
@@ -1,46 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2009 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Verifies use of include_dirs when using the default build target.
-"""
-
-import TestGyp
-
-test = TestGyp.TestGyp()
-
-if test.format == 'scons':
- test.skip_test('TODO: http://code.google.com/p/gyp/issues/detail?id=176\n')
-
-test.run_gyp('includes.gyp', chdir='src')
-
-test.relocate('src', 'relocate/src')
-
-test.build('includes.gyp', test.ALL, chdir='relocate/src')
-
-expect = """\
-Hello from includes.c
-Hello from inc.h
-Hello from include1.h
-Hello from subdir/inc2/include2.h
-Hello from shadow2/shadow.h
-"""
-test.run_built_executable('includes', stdout=expect, chdir='relocate/src')
-
-if test.format == 'xcode':
- chdir='relocate/src/subdir'
-else:
- chdir='relocate/src'
-
-expect = """\
-Hello from subdir/subdir_includes.c
-Hello from subdir/inc.h
-Hello from include1.h
-Hello from subdir/inc2/include2.h
-"""
-test.run_built_executable('subdir_includes', stdout=expect, chdir=chdir)
-
-test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/include_dirs/src/inc.h b/deps/npm/node_modules/node-gyp/gyp/test/include_dirs/src/inc.h
deleted file mode 100644
index 0398d6915..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/include_dirs/src/inc.h
+++ /dev/null
@@ -1 +0,0 @@
-#define INC_STRING "inc.h"
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/include_dirs/src/inc1/include1.h b/deps/npm/node_modules/node-gyp/gyp/test/include_dirs/src/inc1/include1.h
deleted file mode 100644
index 43356b5f4..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/include_dirs/src/inc1/include1.h
+++ /dev/null
@@ -1 +0,0 @@
-#define INCLUDE1_STRING "include1.h"
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/include_dirs/src/includes.c b/deps/npm/node_modules/node-gyp/gyp/test/include_dirs/src/includes.c
deleted file mode 100644
index e2afbd3ed..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/include_dirs/src/includes.c
+++ /dev/null
@@ -1,19 +0,0 @@
-#include <stdio.h>
-
-#include "inc.h"
-#include "include1.h"
-#include "include2.h"
-#include "shadow.h"
-
-int main(int argc, char *argv[])
-{
- printf("Hello from includes.c\n");
- printf("Hello from %s\n", INC_STRING);
- printf("Hello from %s\n", INCLUDE1_STRING);
- printf("Hello from %s\n", INCLUDE2_STRING);
- /* Test that include_dirs happen first: The gyp file has a -Ishadow1
- cflag and an include_dir of shadow2. Including shadow.h should get
- the shadow.h from the include_dir. */
- printf("Hello from %s\n", SHADOW_STRING);
- return 0;
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/include_dirs/src/includes.gyp b/deps/npm/node_modules/node-gyp/gyp/test/include_dirs/src/includes.gyp
deleted file mode 100644
index 359269020..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/include_dirs/src/includes.gyp
+++ /dev/null
@@ -1,27 +0,0 @@
-# Copyright (c) 2009 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'targets': [
- {
- 'target_name': 'includes',
- 'type': 'executable',
- 'dependencies': [
- 'subdir/subdir_includes.gyp:subdir_includes',
- ],
- 'cflags': [
- '-Ishadow1',
- ],
- 'include_dirs': [
- '.',
- 'inc1',
- 'shadow2',
- 'subdir/inc2',
- ],
- 'sources': [
- 'includes.c',
- ],
- },
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/include_dirs/src/shadow1/shadow.h b/deps/npm/node_modules/node-gyp/gyp/test/include_dirs/src/shadow1/shadow.h
deleted file mode 100644
index 80f6de20b..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/include_dirs/src/shadow1/shadow.h
+++ /dev/null
@@ -1 +0,0 @@
-#define SHADOW_STRING "shadow1/shadow.h"
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/include_dirs/src/shadow2/shadow.h b/deps/npm/node_modules/node-gyp/gyp/test/include_dirs/src/shadow2/shadow.h
deleted file mode 100644
index fad5ccd08..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/include_dirs/src/shadow2/shadow.h
+++ /dev/null
@@ -1 +0,0 @@
-#define SHADOW_STRING "shadow2/shadow.h"
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/include_dirs/src/subdir/inc.h b/deps/npm/node_modules/node-gyp/gyp/test/include_dirs/src/subdir/inc.h
deleted file mode 100644
index 0a68d7b36..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/include_dirs/src/subdir/inc.h
+++ /dev/null
@@ -1 +0,0 @@
-#define INC_STRING "subdir/inc.h"
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/include_dirs/src/subdir/inc2/include2.h b/deps/npm/node_modules/node-gyp/gyp/test/include_dirs/src/subdir/inc2/include2.h
deleted file mode 100644
index 721577eff..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/include_dirs/src/subdir/inc2/include2.h
+++ /dev/null
@@ -1 +0,0 @@
-#define INCLUDE2_STRING "subdir/inc2/include2.h"
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/include_dirs/src/subdir/subdir_includes.c b/deps/npm/node_modules/node-gyp/gyp/test/include_dirs/src/subdir/subdir_includes.c
deleted file mode 100644
index 727f68220..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/include_dirs/src/subdir/subdir_includes.c
+++ /dev/null
@@ -1,14 +0,0 @@
-#include <stdio.h>
-
-#include "inc.h"
-#include "include1.h"
-#include "include2.h"
-
-int main(int argc, char *argv[])
-{
- printf("Hello from subdir/subdir_includes.c\n");
- printf("Hello from %s\n", INC_STRING);
- printf("Hello from %s\n", INCLUDE1_STRING);
- printf("Hello from %s\n", INCLUDE2_STRING);
- return 0;
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/include_dirs/src/subdir/subdir_includes.gyp b/deps/npm/node_modules/node-gyp/gyp/test/include_dirs/src/subdir/subdir_includes.gyp
deleted file mode 100644
index 257d052c3..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/include_dirs/src/subdir/subdir_includes.gyp
+++ /dev/null
@@ -1,20 +0,0 @@
-# Copyright (c) 2009 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'targets': [
- {
- 'target_name': 'subdir_includes',
- 'type': 'executable',
- 'include_dirs': [
- '.',
- '../inc1',
- 'inc2',
- ],
- 'sources': [
- 'subdir_includes.c',
- ],
- },
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/intermediate_dir/gyptest-intermediate-dir.py b/deps/npm/node_modules/node-gyp/gyp/test/intermediate_dir/gyptest-intermediate-dir.py
deleted file mode 100755
index 0e1020ef3..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/intermediate_dir/gyptest-intermediate-dir.py
+++ /dev/null
@@ -1,42 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Verifies that targets have independent INTERMEDIATE_DIRs.
-"""
-
-import TestGyp
-
-test = TestGyp.TestGyp()
-
-test.run_gyp('test.gyp', chdir='src')
-test.build('test.gyp', 'target1', chdir='src')
-# Check stuff exists.
-intermediate_file1 = test.read('src/outfile.txt')
-test.must_contain(intermediate_file1, 'target1')
-
-shared_intermediate_file1 = test.read('src/shared_outfile.txt')
-test.must_contain(shared_intermediate_file1, 'shared_target1')
-
-test.run_gyp('test2.gyp', chdir='src')
-# Force the shared intermediate to be rebuilt.
-test.sleep()
-test.touch('src/shared_infile.txt')
-test.build('test2.gyp', 'target2', chdir='src')
-# Check INTERMEDIATE_DIR file didn't get overwritten but SHARED_INTERMEDIATE_DIR
-# file did.
-intermediate_file2 = test.read('src/outfile.txt')
-test.must_contain(intermediate_file1, 'target1')
-test.must_contain(intermediate_file2, 'target2')
-
-shared_intermediate_file2 = test.read('src/shared_outfile.txt')
-if shared_intermediate_file1 != shared_intermediate_file2:
- test.fail_test(shared_intermediate_file1 + ' != ' + shared_intermediate_file2)
-
-test.must_contain(shared_intermediate_file1, 'shared_target2')
-test.must_contain(shared_intermediate_file2, 'shared_target2')
-
-test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/intermediate_dir/src/script.py b/deps/npm/node_modules/node-gyp/gyp/test/intermediate_dir/src/script.py
deleted file mode 100755
index 7abc7ee14..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/intermediate_dir/src/script.py
+++ /dev/null
@@ -1,24 +0,0 @@
-#!/usr/bin/env python
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-# Takes 3 arguments. Writes the 1st argument to the file in the 2nd argument,
-# and writes the absolute path to the file in the 2nd argument to the file in
-# the 3rd argument.
-
-import os
-import shlex
-import sys
-
-if len(sys.argv) == 3 and ' ' in sys.argv[2]:
- sys.argv[2], fourth = shlex.split(sys.argv[2].replace('\\', '\\\\'))
- sys.argv.append(fourth)
-
-#print >>sys.stderr, sys.argv
-
-with open(sys.argv[2], 'w') as f:
- f.write(sys.argv[1])
-
-with open(sys.argv[3], 'w') as f:
- f.write(os.path.abspath(sys.argv[2]))
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/intermediate_dir/src/shared_infile.txt b/deps/npm/node_modules/node-gyp/gyp/test/intermediate_dir/src/shared_infile.txt
deleted file mode 100644
index e2aba15d0..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/intermediate_dir/src/shared_infile.txt
+++ /dev/null
@@ -1 +0,0 @@
-dummy input
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/intermediate_dir/src/test.gyp b/deps/npm/node_modules/node-gyp/gyp/test/intermediate_dir/src/test.gyp
deleted file mode 100644
index b61e7e8ea..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/intermediate_dir/src/test.gyp
+++ /dev/null
@@ -1,42 +0,0 @@
-# Copyright (c) 2011 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'targets': [
- {
- 'target_name': 'target1',
- 'type': 'none',
- 'actions': [
- {
- 'action_name': 'intermediate',
- 'inputs': [],
- 'outputs': [
- '<(INTERMEDIATE_DIR)/intermediate_out.txt',
- 'outfile.txt',
- ],
- 'action': [
- 'python', 'script.py', 'target1', '<(_outputs)',
- ],
- # Allows the test to run without hermetic cygwin on windows.
- 'msvs_cygwin_shell': 0,
- },
- {
- 'action_name': 'shared_intermediate',
- 'inputs': [
- 'shared_infile.txt',
- ],
- 'outputs': [
- '<(SHARED_INTERMEDIATE_DIR)/intermediate_out.txt',
- 'shared_outfile.txt',
- ],
- 'action': [
- 'python', 'script.py', 'shared_target1', '<(_outputs)',
- ],
- # Allows the test to run without hermetic cygwin on windows.
- 'msvs_cygwin_shell': 0,
- },
- ],
- },
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/intermediate_dir/src/test2.gyp b/deps/npm/node_modules/node-gyp/gyp/test/intermediate_dir/src/test2.gyp
deleted file mode 100644
index 41f556466..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/intermediate_dir/src/test2.gyp
+++ /dev/null
@@ -1,42 +0,0 @@
-# Copyright (c) 2011 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'targets': [
- {
- 'target_name': 'target2',
- 'type': 'none',
- 'actions': [
- {
- 'action_name': 'intermediate',
- 'inputs': [],
- 'outputs': [
- '<(INTERMEDIATE_DIR)/intermediate_out.txt',
- 'outfile.txt',
- ],
- 'action': [
- 'python', 'script.py', 'target2', '<(_outputs)',
- ],
- # Allows the test to run without hermetic cygwin on windows.
- 'msvs_cygwin_shell': 0,
- },
- {
- 'action_name': 'shared_intermediate',
- 'inputs': [
- 'shared_infile.txt',
- ],
- 'outputs': [
- '<(SHARED_INTERMEDIATE_DIR)/intermediate_out.txt',
- 'shared_outfile.txt',
- ],
- 'action': [
- 'python', 'script.py', 'shared_target2', '<(_outputs)',
- ],
- # Allows the test to run without hermetic cygwin on windows.
- 'msvs_cygwin_shell': 0,
- },
- ],
- },
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/lib/README.txt b/deps/npm/node_modules/node-gyp/gyp/test/lib/README.txt
deleted file mode 100644
index b3d724574..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/lib/README.txt
+++ /dev/null
@@ -1,17 +0,0 @@
-Supporting modules for GYP testing.
-
- TestCmd.py
- TestCommon.py
-
- Modules for generic testing of command-line utilities,
- specifically including the ability to copy a test configuration
- to temporary directories (with default cleanup on exit) as part
- of running test scripts that invoke commands, compare actual
- against expected output, etc.
-
- Our copies of these come from the SCons project,
- http://www.scons.org/.
-
- TestGyp.py
-
- Modules for GYP-specific tests, of course.
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/lib/TestCmd.py b/deps/npm/node_modules/node-gyp/gyp/test/lib/TestCmd.py
deleted file mode 100644
index 71403614b..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/lib/TestCmd.py
+++ /dev/null
@@ -1,1597 +0,0 @@
-"""
-TestCmd.py: a testing framework for commands and scripts.
-
-The TestCmd module provides a framework for portable automated testing
-of executable commands and scripts (in any language, not just Python),
-especially commands and scripts that require file system interaction.
-
-In addition to running tests and evaluating conditions, the TestCmd
-module manages and cleans up one or more temporary workspace
-directories, and provides methods for creating files and directories in
-those workspace directories from in-line data, here-documents), allowing
-tests to be completely self-contained.
-
-A TestCmd environment object is created via the usual invocation:
-
- import TestCmd
- test = TestCmd.TestCmd()
-
-There are a bunch of keyword arguments available at instantiation:
-
- test = TestCmd.TestCmd(description = 'string',
- program = 'program_or_script_to_test',
- interpreter = 'script_interpreter',
- workdir = 'prefix',
- subdir = 'subdir',
- verbose = Boolean,
- match = default_match_function,
- diff = default_diff_function,
- combine = Boolean)
-
-There are a bunch of methods that let you do different things:
-
- test.verbose_set(1)
-
- test.description_set('string')
-
- test.program_set('program_or_script_to_test')
-
- test.interpreter_set('script_interpreter')
- test.interpreter_set(['script_interpreter', 'arg'])
-
- test.workdir_set('prefix')
- test.workdir_set('')
-
- test.workpath('file')
- test.workpath('subdir', 'file')
-
- test.subdir('subdir', ...)
-
- test.rmdir('subdir', ...)
-
- test.write('file', "contents\n")
- test.write(['subdir', 'file'], "contents\n")
-
- test.read('file')
- test.read(['subdir', 'file'])
- test.read('file', mode)
- test.read(['subdir', 'file'], mode)
-
- test.writable('dir', 1)
- test.writable('dir', None)
-
- test.preserve(condition, ...)
-
- test.cleanup(condition)
-
- test.command_args(program = 'program_or_script_to_run',
- interpreter = 'script_interpreter',
- arguments = 'arguments to pass to program')
-
- test.run(program = 'program_or_script_to_run',
- interpreter = 'script_interpreter',
- arguments = 'arguments to pass to program',
- chdir = 'directory_to_chdir_to',
- stdin = 'input to feed to the program\n')
- universal_newlines = True)
-
- p = test.start(program = 'program_or_script_to_run',
- interpreter = 'script_interpreter',
- arguments = 'arguments to pass to program',
- universal_newlines = None)
-
- test.finish(self, p)
-
- test.pass_test()
- test.pass_test(condition)
- test.pass_test(condition, function)
-
- test.fail_test()
- test.fail_test(condition)
- test.fail_test(condition, function)
- test.fail_test(condition, function, skip)
-
- test.no_result()
- test.no_result(condition)
- test.no_result(condition, function)
- test.no_result(condition, function, skip)
-
- test.stdout()
- test.stdout(run)
-
- test.stderr()
- test.stderr(run)
-
- test.symlink(target, link)
-
- test.banner(string)
- test.banner(string, width)
-
- test.diff(actual, expected)
-
- test.match(actual, expected)
-
- test.match_exact("actual 1\nactual 2\n", "expected 1\nexpected 2\n")
- test.match_exact(["actual 1\n", "actual 2\n"],
- ["expected 1\n", "expected 2\n"])
-
- test.match_re("actual 1\nactual 2\n", regex_string)
- test.match_re(["actual 1\n", "actual 2\n"], list_of_regexes)
-
- test.match_re_dotall("actual 1\nactual 2\n", regex_string)
- test.match_re_dotall(["actual 1\n", "actual 2\n"], list_of_regexes)
-
- test.tempdir()
- test.tempdir('temporary-directory')
-
- test.sleep()
- test.sleep(seconds)
-
- test.where_is('foo')
- test.where_is('foo', 'PATH1:PATH2')
- test.where_is('foo', 'PATH1;PATH2', '.suffix3;.suffix4')
-
- test.unlink('file')
- test.unlink('subdir', 'file')
-
-The TestCmd module provides pass_test(), fail_test(), and no_result()
-unbound functions that report test results for use with the Aegis change
-management system. These methods terminate the test immediately,
-reporting PASSED, FAILED, or NO RESULT respectively, and exiting with
-status 0 (success), 1 or 2 respectively. This allows for a distinction
-between an actual failed test and a test that could not be properly
-evaluated because of an external condition (such as a full file system
-or incorrect permissions).
-
- import TestCmd
-
- TestCmd.pass_test()
- TestCmd.pass_test(condition)
- TestCmd.pass_test(condition, function)
-
- TestCmd.fail_test()
- TestCmd.fail_test(condition)
- TestCmd.fail_test(condition, function)
- TestCmd.fail_test(condition, function, skip)
-
- TestCmd.no_result()
- TestCmd.no_result(condition)
- TestCmd.no_result(condition, function)
- TestCmd.no_result(condition, function, skip)
-
-The TestCmd module also provides unbound functions that handle matching
-in the same way as the match_*() methods described above.
-
- import TestCmd
-
- test = TestCmd.TestCmd(match = TestCmd.match_exact)
-
- test = TestCmd.TestCmd(match = TestCmd.match_re)
-
- test = TestCmd.TestCmd(match = TestCmd.match_re_dotall)
-
-The TestCmd module provides unbound functions that can be used for the
-"diff" argument to TestCmd.TestCmd instantiation:
-
- import TestCmd
-
- test = TestCmd.TestCmd(match = TestCmd.match_re,
- diff = TestCmd.diff_re)
-
- test = TestCmd.TestCmd(diff = TestCmd.simple_diff)
-
-The "diff" argument can also be used with standard difflib functions:
-
- import difflib
-
- test = TestCmd.TestCmd(diff = difflib.context_diff)
-
- test = TestCmd.TestCmd(diff = difflib.unified_diff)
-
-Lastly, the where_is() method also exists in an unbound function
-version.
-
- import TestCmd
-
- TestCmd.where_is('foo')
- TestCmd.where_is('foo', 'PATH1:PATH2')
- TestCmd.where_is('foo', 'PATH1;PATH2', '.suffix3;.suffix4')
-"""
-
-# Copyright 2000-2010 Steven Knight
-# This module is free software, and you may redistribute it and/or modify
-# it under the same terms as Python itself, so long as this copyright message
-# and disclaimer are retained in their original form.
-#
-# IN NO EVENT SHALL THE AUTHOR BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT,
-# SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OF
-# THIS CODE, EVEN IF THE AUTHOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
-# DAMAGE.
-#
-# THE AUTHOR SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, BUT NOT
-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
-# PARTICULAR PURPOSE. THE CODE PROVIDED HEREUNDER IS ON AN "AS IS" BASIS,
-# AND THERE IS NO OBLIGATION WHATSOEVER TO PROVIDE MAINTENANCE,
-# SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
-
-__author__ = "Steven Knight <knight at baldmt dot com>"
-__revision__ = "TestCmd.py 0.37.D001 2010/01/11 16:55:50 knight"
-__version__ = "0.37"
-
-import errno
-import os
-import os.path
-import re
-import shutil
-import stat
-import string
-import sys
-import tempfile
-import time
-import traceback
-import types
-import UserList
-
-__all__ = [
- 'diff_re',
- 'fail_test',
- 'no_result',
- 'pass_test',
- 'match_exact',
- 'match_re',
- 'match_re_dotall',
- 'python_executable',
- 'TestCmd'
-]
-
-try:
- import difflib
-except ImportError:
- __all__.append('simple_diff')
-
-def is_List(e):
- return type(e) is types.ListType \
- or isinstance(e, UserList.UserList)
-
-try:
- from UserString import UserString
-except ImportError:
- class UserString:
- pass
-
-if hasattr(types, 'UnicodeType'):
- def is_String(e):
- return type(e) is types.StringType \
- or type(e) is types.UnicodeType \
- or isinstance(e, UserString)
-else:
- def is_String(e):
- return type(e) is types.StringType or isinstance(e, UserString)
-
-tempfile.template = 'testcmd.'
-if os.name in ('posix', 'nt'):
- tempfile.template = 'testcmd.' + str(os.getpid()) + '.'
-else:
- tempfile.template = 'testcmd.'
-
-re_space = re.compile('\s')
-
-_Cleanup = []
-
-_chain_to_exitfunc = None
-
-def _clean():
- global _Cleanup
- cleanlist = filter(None, _Cleanup)
- del _Cleanup[:]
- cleanlist.reverse()
- for test in cleanlist:
- test.cleanup()
- if _chain_to_exitfunc:
- _chain_to_exitfunc()
-
-try:
- import atexit
-except ImportError:
- # TODO(1.5): atexit requires python 2.0, so chain sys.exitfunc
- try:
- _chain_to_exitfunc = sys.exitfunc
- except AttributeError:
- pass
- sys.exitfunc = _clean
-else:
- atexit.register(_clean)
-
-try:
- zip
-except NameError:
- def zip(*lists):
- result = []
- for i in xrange(min(map(len, lists))):
- result.append(tuple(map(lambda l, i=i: l[i], lists)))
- return result
-
-class Collector:
- def __init__(self, top):
- self.entries = [top]
- def __call__(self, arg, dirname, names):
- pathjoin = lambda n, d=dirname: os.path.join(d, n)
- self.entries.extend(map(pathjoin, names))
-
-def _caller(tblist, skip):
- string = ""
- arr = []
- for file, line, name, text in tblist:
- if file[-10:] == "TestCmd.py":
- break
- arr = [(file, line, name, text)] + arr
- atfrom = "at"
- for file, line, name, text in arr[skip:]:
- if name in ("?", "<module>"):
- name = ""
- else:
- name = " (" + name + ")"
- string = string + ("%s line %d of %s%s\n" % (atfrom, line, file, name))
- atfrom = "\tfrom"
- return string
-
-def fail_test(self = None, condition = 1, function = None, skip = 0):
- """Cause the test to fail.
-
- By default, the fail_test() method reports that the test FAILED
- and exits with a status of 1. If a condition argument is supplied,
- the test fails only if the condition is true.
- """
- if not condition:
- return
- if not function is None:
- function()
- of = ""
- desc = ""
- sep = " "
- if not self is None:
- if self.program:
- of = " of " + self.program
- sep = "\n\t"
- if self.description:
- desc = " [" + self.description + "]"
- sep = "\n\t"
-
- at = _caller(traceback.extract_stack(), skip)
- sys.stderr.write("FAILED test" + of + desc + sep + at)
-
- sys.exit(1)
-
-def no_result(self = None, condition = 1, function = None, skip = 0):
- """Causes a test to exit with no valid result.
-
- By default, the no_result() method reports NO RESULT for the test
- and exits with a status of 2. If a condition argument is supplied,
- the test fails only if the condition is true.
- """
- if not condition:
- return
- if not function is None:
- function()
- of = ""
- desc = ""
- sep = " "
- if not self is None:
- if self.program:
- of = " of " + self.program
- sep = "\n\t"
- if self.description:
- desc = " [" + self.description + "]"
- sep = "\n\t"
-
- if os.environ.get('TESTCMD_DEBUG_SKIPS'):
- at = _caller(traceback.extract_stack(), skip)
- sys.stderr.write("NO RESULT for test" + of + desc + sep + at)
- else:
- sys.stderr.write("NO RESULT\n")
-
- sys.exit(2)
-
-def pass_test(self = None, condition = 1, function = None):
- """Causes a test to pass.
-
- By default, the pass_test() method reports PASSED for the test
- and exits with a status of 0. If a condition argument is supplied,
- the test passes only if the condition is true.
- """
- if not condition:
- return
- if not function is None:
- function()
- sys.stderr.write("PASSED\n")
- sys.exit(0)
-
-def match_exact(lines = None, matches = None):
- """
- """
- if not is_List(lines):
- lines = string.split(lines, "\n")
- if not is_List(matches):
- matches = string.split(matches, "\n")
- if len(lines) != len(matches):
- return
- for i in range(len(lines)):
- if lines[i] != matches[i]:
- return
- return 1
-
-def match_re(lines = None, res = None):
- """
- """
- if not is_List(lines):
- lines = string.split(lines, "\n")
- if not is_List(res):
- res = string.split(res, "\n")
- if len(lines) != len(res):
- return
- for i in range(len(lines)):
- s = "^" + res[i] + "$"
- try:
- expr = re.compile(s)
- except re.error, e:
- msg = "Regular expression error in %s: %s"
- raise re.error, msg % (repr(s), e[0])
- if not expr.search(lines[i]):
- return
- return 1
-
-def match_re_dotall(lines = None, res = None):
- """
- """
- if not type(lines) is type(""):
- lines = string.join(lines, "\n")
- if not type(res) is type(""):
- res = string.join(res, "\n")
- s = "^" + res + "$"
- try:
- expr = re.compile(s, re.DOTALL)
- except re.error, e:
- msg = "Regular expression error in %s: %s"
- raise re.error, msg % (repr(s), e[0])
- if expr.match(lines):
- return 1
-
-try:
- import difflib
-except ImportError:
- pass
-else:
- def simple_diff(a, b, fromfile='', tofile='',
- fromfiledate='', tofiledate='', n=3, lineterm='\n'):
- """
- A function with the same calling signature as difflib.context_diff
- (diff -c) and difflib.unified_diff (diff -u) but which prints
- output like the simple, unadorned 'diff" command.
- """
- sm = difflib.SequenceMatcher(None, a, b)
- def comma(x1, x2):
- return x1+1 == x2 and str(x2) or '%s,%s' % (x1+1, x2)
- result = []
- for op, a1, a2, b1, b2 in sm.get_opcodes():
- if op == 'delete':
- result.append("%sd%d" % (comma(a1, a2), b1))
- result.extend(map(lambda l: '< ' + l, a[a1:a2]))
- elif op == 'insert':
- result.append("%da%s" % (a1, comma(b1, b2)))
- result.extend(map(lambda l: '> ' + l, b[b1:b2]))
- elif op == 'replace':
- result.append("%sc%s" % (comma(a1, a2), comma(b1, b2)))
- result.extend(map(lambda l: '< ' + l, a[a1:a2]))
- result.append('---')
- result.extend(map(lambda l: '> ' + l, b[b1:b2]))
- return result
-
-def diff_re(a, b, fromfile='', tofile='',
- fromfiledate='', tofiledate='', n=3, lineterm='\n'):
- """
- A simple "diff" of two sets of lines when the expected lines
- are regular expressions. This is a really dumb thing that
- just compares each line in turn, so it doesn't look for
- chunks of matching lines and the like--but at least it lets
- you know exactly which line first didn't compare correctl...
- """
- result = []
- diff = len(a) - len(b)
- if diff < 0:
- a = a + ['']*(-diff)
- elif diff > 0:
- b = b + ['']*diff
- i = 0
- for aline, bline in zip(a, b):
- s = "^" + aline + "$"
- try:
- expr = re.compile(s)
- except re.error, e:
- msg = "Regular expression error in %s: %s"
- raise re.error, msg % (repr(s), e[0])
- if not expr.search(bline):
- result.append("%sc%s" % (i+1, i+1))
- result.append('< ' + repr(a[i]))
- result.append('---')
- result.append('> ' + repr(b[i]))
- i = i+1
- return result
-
-if os.name == 'java':
-
- python_executable = os.path.join(sys.prefix, 'jython')
-
-else:
-
- python_executable = sys.executable
-
-if sys.platform == 'win32':
-
- default_sleep_seconds = 2
-
- def where_is(file, path=None, pathext=None):
- if path is None:
- path = os.environ['PATH']
- if is_String(path):
- path = string.split(path, os.pathsep)
- if pathext is None:
- pathext = os.environ['PATHEXT']
- if is_String(pathext):
- pathext = string.split(pathext, os.pathsep)
- for ext in pathext:
- if string.lower(ext) == string.lower(file[-len(ext):]):
- pathext = ['']
- break
- for dir in path:
- f = os.path.join(dir, file)
- for ext in pathext:
- fext = f + ext
- if os.path.isfile(fext):
- return fext
- return None
-
-else:
-
- def where_is(file, path=None, pathext=None):
- if path is None:
- path = os.environ['PATH']
- if is_String(path):
- path = string.split(path, os.pathsep)
- for dir in path:
- f = os.path.join(dir, file)
- if os.path.isfile(f):
- try:
- st = os.stat(f)
- except OSError:
- continue
- if stat.S_IMODE(st[stat.ST_MODE]) & 0111:
- return f
- return None
-
- default_sleep_seconds = 1
-
-
-
-try:
- import subprocess
-except ImportError:
- # The subprocess module doesn't exist in this version of Python,
- # so we're going to cobble up something that looks just enough
- # like its API for our purposes below.
- import new
-
- subprocess = new.module('subprocess')
-
- subprocess.PIPE = 'PIPE'
- subprocess.STDOUT = 'STDOUT'
- subprocess.mswindows = (sys.platform == 'win32')
-
- try:
- import popen2
- popen2.Popen3
- except AttributeError:
- class Popen3:
- universal_newlines = 1
- def __init__(self, command, **kw):
- if sys.platform == 'win32' and command[0] == '"':
- command = '"' + command + '"'
- (stdin, stdout, stderr) = os.popen3(' ' + command)
- self.stdin = stdin
- self.stdout = stdout
- self.stderr = stderr
- def close_output(self):
- self.stdout.close()
- self.resultcode = self.stderr.close()
- def wait(self):
- resultcode = self.resultcode
- if os.WIFEXITED(resultcode):
- return os.WEXITSTATUS(resultcode)
- elif os.WIFSIGNALED(resultcode):
- return os.WTERMSIG(resultcode)
- else:
- return None
-
- else:
- try:
- popen2.Popen4
- except AttributeError:
- # A cribbed Popen4 class, with some retrofitted code from
- # the Python 1.5 Popen3 class methods to do certain things
- # by hand.
- class Popen4(popen2.Popen3):
- childerr = None
-
- def __init__(self, cmd, bufsize=-1):
- p2cread, p2cwrite = os.pipe()
- c2pread, c2pwrite = os.pipe()
- self.pid = os.fork()
- if self.pid == 0:
- # Child
- os.dup2(p2cread, 0)
- os.dup2(c2pwrite, 1)
- os.dup2(c2pwrite, 2)
- for i in range(3, popen2.MAXFD):
- try:
- os.close(i)
- except: pass
- try:
- os.execvp(cmd[0], cmd)
- finally:
- os._exit(1)
- # Shouldn't come here, I guess
- os._exit(1)
- os.close(p2cread)
- self.tochild = os.fdopen(p2cwrite, 'w', bufsize)
- os.close(c2pwrite)
- self.fromchild = os.fdopen(c2pread, 'r', bufsize)
- popen2._active.append(self)
-
- popen2.Popen4 = Popen4
-
- class Popen3(popen2.Popen3, popen2.Popen4):
- universal_newlines = 1
- def __init__(self, command, **kw):
- if kw.get('stderr') == 'STDOUT':
- apply(popen2.Popen4.__init__, (self, command, 1))
- else:
- apply(popen2.Popen3.__init__, (self, command, 1))
- self.stdin = self.tochild
- self.stdout = self.fromchild
- self.stderr = self.childerr
- def wait(self, *args, **kw):
- resultcode = apply(popen2.Popen3.wait, (self,)+args, kw)
- if os.WIFEXITED(resultcode):
- return os.WEXITSTATUS(resultcode)
- elif os.WIFSIGNALED(resultcode):
- return os.WTERMSIG(resultcode)
- else:
- return None
-
- subprocess.Popen = Popen3
-
-
-
-# From Josiah Carlson,
-# ASPN : Python Cookbook : Module to allow Asynchronous subprocess use on Windows and Posix platforms
-# http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/440554
-
-PIPE = subprocess.PIPE
-
-if subprocess.mswindows:
- from win32file import ReadFile, WriteFile
- from win32pipe import PeekNamedPipe
- import msvcrt
-else:
- import select
- import fcntl
-
- try: fcntl.F_GETFL
- except AttributeError: fcntl.F_GETFL = 3
-
- try: fcntl.F_SETFL
- except AttributeError: fcntl.F_SETFL = 4
-
-class Popen(subprocess.Popen):
- def recv(self, maxsize=None):
- return self._recv('stdout', maxsize)
-
- def recv_err(self, maxsize=None):
- return self._recv('stderr', maxsize)
-
- def send_recv(self, input='', maxsize=None):
- return self.send(input), self.recv(maxsize), self.recv_err(maxsize)
-
- def get_conn_maxsize(self, which, maxsize):
- if maxsize is None:
- maxsize = 1024
- elif maxsize < 1:
- maxsize = 1
- return getattr(self, which), maxsize
-
- def _close(self, which):
- getattr(self, which).close()
- setattr(self, which, None)
-
- if subprocess.mswindows:
- def send(self, input):
- if not self.stdin:
- return None
-
- try:
- x = msvcrt.get_osfhandle(self.stdin.fileno())
- (errCode, written) = WriteFile(x, input)
- except ValueError:
- return self._close('stdin')
- except (subprocess.pywintypes.error, Exception), why:
- if why[0] in (109, errno.ESHUTDOWN):
- return self._close('stdin')
- raise
-
- return written
-
- def _recv(self, which, maxsize):
- conn, maxsize = self.get_conn_maxsize(which, maxsize)
- if conn is None:
- return None
-
- try:
- x = msvcrt.get_osfhandle(conn.fileno())
- (read, nAvail, nMessage) = PeekNamedPipe(x, 0)
- if maxsize < nAvail:
- nAvail = maxsize
- if nAvail > 0:
- (errCode, read) = ReadFile(x, nAvail, None)
- except ValueError:
- return self._close(which)
- except (subprocess.pywintypes.error, Exception), why:
- if why[0] in (109, errno.ESHUTDOWN):
- return self._close(which)
- raise
-
- #if self.universal_newlines:
- # read = self._translate_newlines(read)
- return read
-
- else:
- def send(self, input):
- if not self.stdin:
- return None
-
- if not select.select([], [self.stdin], [], 0)[1]:
- return 0
-
- try:
- written = os.write(self.stdin.fileno(), input)
- except OSError, why:
- if why[0] == errno.EPIPE: #broken pipe
- return self._close('stdin')
- raise
-
- return written
-
- def _recv(self, which, maxsize):
- conn, maxsize = self.get_conn_maxsize(which, maxsize)
- if conn is None:
- return None
-
- try:
- flags = fcntl.fcntl(conn, fcntl.F_GETFL)
- except TypeError:
- flags = None
- else:
- if not conn.closed:
- fcntl.fcntl(conn, fcntl.F_SETFL, flags| os.O_NONBLOCK)
-
- try:
- if not select.select([conn], [], [], 0)[0]:
- return ''
-
- r = conn.read(maxsize)
- if not r:
- return self._close(which)
-
- #if self.universal_newlines:
- # r = self._translate_newlines(r)
- return r
- finally:
- if not conn.closed and not flags is None:
- fcntl.fcntl(conn, fcntl.F_SETFL, flags)
-
-disconnect_message = "Other end disconnected!"
-
-def recv_some(p, t=.1, e=1, tr=5, stderr=0):
- if tr < 1:
- tr = 1
- x = time.time()+t
- y = []
- r = ''
- pr = p.recv
- if stderr:
- pr = p.recv_err
- while time.time() < x or r:
- r = pr()
- if r is None:
- if e:
- raise Exception(disconnect_message)
- else:
- break
- elif r:
- y.append(r)
- else:
- time.sleep(max((x-time.time())/tr, 0))
- return ''.join(y)
-
-# TODO(3.0: rewrite to use memoryview()
-def send_all(p, data):
- while len(data):
- sent = p.send(data)
- if sent is None:
- raise Exception(disconnect_message)
- data = buffer(data, sent)
-
-
-
-try:
- object
-except NameError:
- class object:
- pass
-
-
-
-class TestCmd(object):
- """Class TestCmd
- """
-
- def __init__(self, description = None,
- program = None,
- interpreter = None,
- workdir = None,
- subdir = None,
- verbose = None,
- match = None,
- diff = None,
- combine = 0,
- universal_newlines = 1):
- self._cwd = os.getcwd()
- self.description_set(description)
- self.program_set(program)
- self.interpreter_set(interpreter)
- if verbose is None:
- try:
- verbose = max( 0, int(os.environ.get('TESTCMD_VERBOSE', 0)) )
- except ValueError:
- verbose = 0
- self.verbose_set(verbose)
- self.combine = combine
- self.universal_newlines = universal_newlines
- if match is not None:
- self.match_function = match
- else:
- self.match_function = match_re
- if diff is not None:
- self.diff_function = diff
- else:
- try:
- difflib
- except NameError:
- pass
- else:
- self.diff_function = simple_diff
- #self.diff_function = difflib.context_diff
- #self.diff_function = difflib.unified_diff
- self._dirlist = []
- self._preserve = {'pass_test': 0, 'fail_test': 0, 'no_result': 0}
- if os.environ.has_key('PRESERVE') and not os.environ['PRESERVE'] is '':
- self._preserve['pass_test'] = os.environ['PRESERVE']
- self._preserve['fail_test'] = os.environ['PRESERVE']
- self._preserve['no_result'] = os.environ['PRESERVE']
- else:
- try:
- self._preserve['pass_test'] = os.environ['PRESERVE_PASS']
- except KeyError:
- pass
- try:
- self._preserve['fail_test'] = os.environ['PRESERVE_FAIL']
- except KeyError:
- pass
- try:
- self._preserve['no_result'] = os.environ['PRESERVE_NO_RESULT']
- except KeyError:
- pass
- self._stdout = []
- self._stderr = []
- self.status = None
- self.condition = 'no_result'
- self.workdir_set(workdir)
- self.subdir(subdir)
-
- def __del__(self):
- self.cleanup()
-
- def __repr__(self):
- return "%x" % id(self)
-
- banner_char = '='
- banner_width = 80
-
- def banner(self, s, width=None):
- if width is None:
- width = self.banner_width
- return s + self.banner_char * (width - len(s))
-
- if os.name == 'posix':
-
- def escape(self, arg):
- "escape shell special characters"
- slash = '\\'
- special = '"$'
-
- arg = string.replace(arg, slash, slash+slash)
- for c in special:
- arg = string.replace(arg, c, slash+c)
-
- if re_space.search(arg):
- arg = '"' + arg + '"'
- return arg
-
- else:
-
- # Windows does not allow special characters in file names
- # anyway, so no need for an escape function, we will just quote
- # the arg.
- def escape(self, arg):
- if re_space.search(arg):
- arg = '"' + arg + '"'
- return arg
-
- def canonicalize(self, path):
- if is_List(path):
- path = apply(os.path.join, tuple(path))
- if not os.path.isabs(path):
- path = os.path.join(self.workdir, path)
- return path
-
- def chmod(self, path, mode):
- """Changes permissions on the specified file or directory
- path name."""
- path = self.canonicalize(path)
- os.chmod(path, mode)
-
- def cleanup(self, condition = None):
- """Removes any temporary working directories for the specified
- TestCmd environment. If the environment variable PRESERVE was
- set when the TestCmd environment was created, temporary working
- directories are not removed. If any of the environment variables
- PRESERVE_PASS, PRESERVE_FAIL, or PRESERVE_NO_RESULT were set
- when the TestCmd environment was created, then temporary working
- directories are not removed if the test passed, failed, or had
- no result, respectively. Temporary working directories are also
- preserved for conditions specified via the preserve method.
-
- Typically, this method is not called directly, but is used when
- the script exits to clean up temporary working directories as
- appropriate for the exit status.
- """
- if not self._dirlist:
- return
- os.chdir(self._cwd)
- self.workdir = None
- if condition is None:
- condition = self.condition
- if self._preserve[condition]:
- for dir in self._dirlist:
- print "Preserved directory", dir
- else:
- list = self._dirlist[:]
- list.reverse()
- for dir in list:
- self.writable(dir, 1)
- shutil.rmtree(dir, ignore_errors = 1)
- self._dirlist = []
-
- try:
- global _Cleanup
- _Cleanup.remove(self)
- except (AttributeError, ValueError):
- pass
-
- def command_args(self, program = None,
- interpreter = None,
- arguments = None):
- if program:
- if type(program) == type('') and not os.path.isabs(program):
- program = os.path.join(self._cwd, program)
- else:
- program = self.program
- if not interpreter:
- interpreter = self.interpreter
- if not type(program) in [type([]), type(())]:
- program = [program]
- cmd = list(program)
- if interpreter:
- if not type(interpreter) in [type([]), type(())]:
- interpreter = [interpreter]
- cmd = list(interpreter) + cmd
- if arguments:
- if type(arguments) == type(''):
- arguments = string.split(arguments)
- cmd.extend(arguments)
- return cmd
-
- def description_set(self, description):
- """Set the description of the functionality being tested.
- """
- self.description = description
-
- try:
- difflib
- except NameError:
- def diff(self, a, b, name, *args, **kw):
- print self.banner('Expected %s' % name)
- print a
- print self.banner('Actual %s' % name)
- print b
- else:
- def diff(self, a, b, name, *args, **kw):
- print self.banner(name)
- args = (a.splitlines(), b.splitlines()) + args
- lines = apply(self.diff_function, args, kw)
- for l in lines:
- print l
-
- def fail_test(self, condition = 1, function = None, skip = 0):
- """Cause the test to fail.
- """
- if not condition:
- return
- self.condition = 'fail_test'
- fail_test(self = self,
- condition = condition,
- function = function,
- skip = skip)
-
- def interpreter_set(self, interpreter):
- """Set the program to be used to interpret the program
- under test as a script.
- """
- self.interpreter = interpreter
-
- def match(self, lines, matches):
- """Compare actual and expected file contents.
- """
- return self.match_function(lines, matches)
-
- def match_exact(self, lines, matches):
- """Compare actual and expected file contents.
- """
- return match_exact(lines, matches)
-
- def match_re(self, lines, res):
- """Compare actual and expected file contents.
- """
- return match_re(lines, res)
-
- def match_re_dotall(self, lines, res):
- """Compare actual and expected file contents.
- """
- return match_re_dotall(lines, res)
-
- def no_result(self, condition = 1, function = None, skip = 0):
- """Report that the test could not be run.
- """
- if not condition:
- return
- self.condition = 'no_result'
- no_result(self = self,
- condition = condition,
- function = function,
- skip = skip)
-
- def pass_test(self, condition = 1, function = None):
- """Cause the test to pass.
- """
- if not condition:
- return
- self.condition = 'pass_test'
- pass_test(self = self, condition = condition, function = function)
-
- def preserve(self, *conditions):
- """Arrange for the temporary working directories for the
- specified TestCmd environment to be preserved for one or more
- conditions. If no conditions are specified, arranges for
- the temporary working directories to be preserved for all
- conditions.
- """
- if conditions is ():
- conditions = ('pass_test', 'fail_test', 'no_result')
- for cond in conditions:
- self._preserve[cond] = 1
-
- def program_set(self, program):
- """Set the executable program or script to be tested.
- """
- if program and not os.path.isabs(program):
- program = os.path.join(self._cwd, program)
- self.program = program
-
- def read(self, file, mode = 'rb'):
- """Reads and returns the contents of the specified file name.
- The file name may be a list, in which case the elements are
- concatenated with the os.path.join() method. The file is
- assumed to be under the temporary working directory unless it
- is an absolute path name. The I/O mode for the file may
- be specified; it must begin with an 'r'. The default is
- 'rb' (binary read).
- """
- file = self.canonicalize(file)
- if mode[0] != 'r':
- raise ValueError, "mode must begin with 'r'"
- with open(file, mode) as f:
- result = f.read()
- return result
-
- def rmdir(self, dir):
- """Removes the specified dir name.
- The dir name may be a list, in which case the elements are
- concatenated with the os.path.join() method. The dir is
- assumed to be under the temporary working directory unless it
- is an absolute path name.
- The dir must be empty.
- """
- dir = self.canonicalize(dir)
- os.rmdir(dir)
-
- def start(self, program = None,
- interpreter = None,
- arguments = None,
- universal_newlines = None,
- **kw):
- """
- Starts a program or script for the test environment.
-
- The specified program will have the original directory
- prepended unless it is enclosed in a [list].
- """
- cmd = self.command_args(program, interpreter, arguments)
- cmd_string = string.join(map(self.escape, cmd), ' ')
- if self.verbose:
- sys.stderr.write(cmd_string + "\n")
- if universal_newlines is None:
- universal_newlines = self.universal_newlines
-
- # On Windows, if we make stdin a pipe when we plan to send
- # no input, and the test program exits before
- # Popen calls msvcrt.open_osfhandle, that call will fail.
- # So don't use a pipe for stdin if we don't need one.
- stdin = kw.get('stdin', None)
- if stdin is not None:
- stdin = subprocess.PIPE
-
- combine = kw.get('combine', self.combine)
- if combine:
- stderr_value = subprocess.STDOUT
- else:
- stderr_value = subprocess.PIPE
-
- return Popen(cmd,
- stdin=stdin,
- stdout=subprocess.PIPE,
- stderr=stderr_value,
- universal_newlines=universal_newlines)
-
- def finish(self, popen, **kw):
- """
- Finishes and waits for the process being run under control of
- the specified popen argument, recording the exit status,
- standard output and error output.
- """
- popen.stdin.close()
- self.status = popen.wait()
- if not self.status:
- self.status = 0
- self._stdout.append(popen.stdout.read())
- if popen.stderr:
- stderr = popen.stderr.read()
- else:
- stderr = ''
- self._stderr.append(stderr)
-
- def run(self, program = None,
- interpreter = None,
- arguments = None,
- chdir = None,
- stdin = None,
- universal_newlines = None):
- """Runs a test of the program or script for the test
- environment. Standard output and error output are saved for
- future retrieval via the stdout() and stderr() methods.
-
- The specified program will have the original directory
- prepended unless it is enclosed in a [list].
- """
- if chdir:
- oldcwd = os.getcwd()
- if not os.path.isabs(chdir):
- chdir = os.path.join(self.workpath(chdir))
- if self.verbose:
- sys.stderr.write("chdir(" + chdir + ")\n")
- os.chdir(chdir)
- p = self.start(program,
- interpreter,
- arguments,
- universal_newlines,
- stdin=stdin)
- if stdin:
- if is_List(stdin):
- for line in stdin:
- p.stdin.write(line)
- else:
- p.stdin.write(stdin)
- p.stdin.close()
-
- out = p.stdout.read()
- if p.stderr is None:
- err = ''
- else:
- err = p.stderr.read()
- try:
- close_output = p.close_output
- except AttributeError:
- p.stdout.close()
- if not p.stderr is None:
- p.stderr.close()
- else:
- close_output()
-
- self._stdout.append(out)
- self._stderr.append(err)
-
- self.status = p.wait()
- if not self.status:
- self.status = 0
-
- if chdir:
- os.chdir(oldcwd)
- if self.verbose >= 2:
- write = sys.stdout.write
- write('============ STATUS: %d\n' % self.status)
- out = self.stdout()
- if out or self.verbose >= 3:
- write('============ BEGIN STDOUT (len=%d):\n' % len(out))
- write(out)
- write('============ END STDOUT\n')
- err = self.stderr()
- if err or self.verbose >= 3:
- write('============ BEGIN STDERR (len=%d)\n' % len(err))
- write(err)
- write('============ END STDERR\n')
-
- def sleep(self, seconds = default_sleep_seconds):
- """Sleeps at least the specified number of seconds. If no
- number is specified, sleeps at least the minimum number of
- seconds necessary to advance file time stamps on the current
- system. Sleeping more seconds is all right.
- """
- time.sleep(seconds)
-
- def stderr(self, run = None):
- """Returns the error output from the specified run number.
- If there is no specified run number, then returns the error
- output of the last run. If the run number is less than zero,
- then returns the error output from that many runs back from the
- current run.
- """
- if not run:
- run = len(self._stderr)
- elif run < 0:
- run = len(self._stderr) + run
- run = run - 1
- return self._stderr[run]
-
- def stdout(self, run = None):
- """Returns the standard output from the specified run number.
- If there is no specified run number, then returns the standard
- output of the last run. If the run number is less than zero,
- then returns the standard output from that many runs back from
- the current run.
- """
- if not run:
- run = len(self._stdout)
- elif run < 0:
- run = len(self._stdout) + run
- run = run - 1
- return self._stdout[run]
-
- def subdir(self, *subdirs):
- """Create new subdirectories under the temporary working
- directory, one for each argument. An argument may be a list,
- in which case the list elements are concatenated using the
- os.path.join() method. Subdirectories multiple levels deep
- must be created using a separate argument for each level:
-
- test.subdir('sub', ['sub', 'dir'], ['sub', 'dir', 'ectory'])
-
- Returns the number of subdirectories actually created.
- """
- count = 0
- for sub in subdirs:
- if sub is None:
- continue
- if is_List(sub):
- sub = apply(os.path.join, tuple(sub))
- new = os.path.join(self.workdir, sub)
- try:
- os.mkdir(new)
- except OSError:
- pass
- else:
- count = count + 1
- return count
-
- def symlink(self, target, link):
- """Creates a symlink to the specified target.
- The link name may be a list, in which case the elements are
- concatenated with the os.path.join() method. The link is
- assumed to be under the temporary working directory unless it
- is an absolute path name. The target is *not* assumed to be
- under the temporary working directory.
- """
- link = self.canonicalize(link)
- os.symlink(target, link)
-
- def tempdir(self, path=None):
- """Creates a temporary directory.
- A unique directory name is generated if no path name is specified.
- The directory is created, and will be removed when the TestCmd
- object is destroyed.
- """
- if path is None:
- try:
- path = tempfile.mktemp(prefix=tempfile.template)
- except TypeError:
- path = tempfile.mktemp()
- os.mkdir(path)
-
- # Symlinks in the path will report things
- # differently from os.getcwd(), so chdir there
- # and back to fetch the canonical path.
- cwd = os.getcwd()
- try:
- os.chdir(path)
- path = os.getcwd()
- finally:
- os.chdir(cwd)
-
- # Uppercase the drive letter since the case of drive
- # letters is pretty much random on win32:
- drive,rest = os.path.splitdrive(path)
- if drive:
- path = string.upper(drive) + rest
-
- #
- self._dirlist.append(path)
- global _Cleanup
- try:
- _Cleanup.index(self)
- except ValueError:
- _Cleanup.append(self)
-
- return path
-
- def touch(self, path, mtime=None):
- """Updates the modification time on the specified file or
- directory path name. The default is to update to the
- current time if no explicit modification time is specified.
- """
- path = self.canonicalize(path)
- atime = os.path.getatime(path)
- if mtime is None:
- mtime = time.time()
- os.utime(path, (atime, mtime))
-
- def unlink(self, file):
- """Unlinks the specified file name.
- The file name may be a list, in which case the elements are
- concatenated with the os.path.join() method. The file is
- assumed to be under the temporary working directory unless it
- is an absolute path name.
- """
- file = self.canonicalize(file)
- os.unlink(file)
-
- def verbose_set(self, verbose):
- """Set the verbose level.
- """
- self.verbose = verbose
-
- def where_is(self, file, path=None, pathext=None):
- """Find an executable file.
- """
- if is_List(file):
- file = apply(os.path.join, tuple(file))
- if not os.path.isabs(file):
- file = where_is(file, path, pathext)
- return file
-
- def workdir_set(self, path):
- """Creates a temporary working directory with the specified
- path name. If the path is a null string (''), a unique
- directory name is created.
- """
- if (path != None):
- if path == '':
- path = None
- path = self.tempdir(path)
- self.workdir = path
-
- def workpath(self, *args):
- """Returns the absolute path name to a subdirectory or file
- within the current temporary working directory. Concatenates
- the temporary working directory name with the specified
- arguments using the os.path.join() method.
- """
- return apply(os.path.join, (self.workdir,) + tuple(args))
-
- def readable(self, top, read=1):
- """Make the specified directory tree readable (read == 1)
- or not (read == None).
-
- This method has no effect on Windows systems, which use a
- completely different mechanism to control file readability.
- """
-
- if sys.platform == 'win32':
- return
-
- if read:
- def do_chmod(fname):
- try: st = os.stat(fname)
- except OSError: pass
- else: os.chmod(fname, stat.S_IMODE(st[stat.ST_MODE]|stat.S_IREAD))
- else:
- def do_chmod(fname):
- try: st = os.stat(fname)
- except OSError: pass
- else: os.chmod(fname, stat.S_IMODE(st[stat.ST_MODE]&~stat.S_IREAD))
-
- if os.path.isfile(top):
- # If it's a file, that's easy, just chmod it.
- do_chmod(top)
- elif read:
- # It's a directory and we're trying to turn on read
- # permission, so it's also pretty easy, just chmod the
- # directory and then chmod every entry on our walk down the
- # tree. Because os.path.walk() is top-down, we'll enable
- # read permission on any directories that have it disabled
- # before os.path.walk() tries to list their contents.
- do_chmod(top)
-
- def chmod_entries(arg, dirname, names, do_chmod=do_chmod):
- for n in names:
- do_chmod(os.path.join(dirname, n))
-
- os.path.walk(top, chmod_entries, None)
- else:
- # It's a directory and we're trying to turn off read
- # permission, which means we have to chmod the directoreis
- # in the tree bottom-up, lest disabling read permission from
- # the top down get in the way of being able to get at lower
- # parts of the tree. But os.path.walk() visits things top
- # down, so we just use an object to collect a list of all
- # of the entries in the tree, reverse the list, and then
- # chmod the reversed (bottom-up) list.
- col = Collector(top)
- os.path.walk(top, col, None)
- col.entries.reverse()
- for d in col.entries: do_chmod(d)
-
- def writable(self, top, write=1):
- """Make the specified directory tree writable (write == 1)
- or not (write == None).
- """
-
- if sys.platform == 'win32':
-
- if write:
- def do_chmod(fname):
- try: os.chmod(fname, stat.S_IWRITE)
- except OSError: pass
- else:
- def do_chmod(fname):
- try: os.chmod(fname, stat.S_IREAD)
- except OSError: pass
-
- else:
-
- if write:
- def do_chmod(fname):
- try: st = os.stat(fname)
- except OSError: pass
- else: os.chmod(fname, stat.S_IMODE(st[stat.ST_MODE]|0200))
- else:
- def do_chmod(fname):
- try: st = os.stat(fname)
- except OSError: pass
- else: os.chmod(fname, stat.S_IMODE(st[stat.ST_MODE]&~0200))
-
- if os.path.isfile(top):
- do_chmod(top)
- else:
- col = Collector(top)
- os.path.walk(top, col, None)
- for d in col.entries: do_chmod(d)
-
- def executable(self, top, execute=1):
- """Make the specified directory tree executable (execute == 1)
- or not (execute == None).
-
- This method has no effect on Windows systems, which use a
- completely different mechanism to control file executability.
- """
-
- if sys.platform == 'win32':
- return
-
- if execute:
- def do_chmod(fname):
- try: st = os.stat(fname)
- except OSError: pass
- else: os.chmod(fname, stat.S_IMODE(st[stat.ST_MODE]|stat.S_IEXEC))
- else:
- def do_chmod(fname):
- try: st = os.stat(fname)
- except OSError: pass
- else: os.chmod(fname, stat.S_IMODE(st[stat.ST_MODE]&~stat.S_IEXEC))
-
- if os.path.isfile(top):
- # If it's a file, that's easy, just chmod it.
- do_chmod(top)
- elif execute:
- # It's a directory and we're trying to turn on execute
- # permission, so it's also pretty easy, just chmod the
- # directory and then chmod every entry on our walk down the
- # tree. Because os.path.walk() is top-down, we'll enable
- # execute permission on any directories that have it disabled
- # before os.path.walk() tries to list their contents.
- do_chmod(top)
-
- def chmod_entries(arg, dirname, names, do_chmod=do_chmod):
- for n in names:
- do_chmod(os.path.join(dirname, n))
-
- os.path.walk(top, chmod_entries, None)
- else:
- # It's a directory and we're trying to turn off execute
- # permission, which means we have to chmod the directories
- # in the tree bottom-up, lest disabling execute permission from
- # the top down get in the way of being able to get at lower
- # parts of the tree. But os.path.walk() visits things top
- # down, so we just use an object to collect a list of all
- # of the entries in the tree, reverse the list, and then
- # chmod the reversed (bottom-up) list.
- col = Collector(top)
- os.path.walk(top, col, None)
- col.entries.reverse()
- for d in col.entries: do_chmod(d)
-
- def write(self, file, content, mode = 'wb'):
- """Writes the specified content text (second argument) to the
- specified file name (first argument). The file name may be
- a list, in which case the elements are concatenated with the
- os.path.join() method. The file is created under the temporary
- working directory. Any subdirectories in the path must already
- exist. The I/O mode for the file may be specified; it must
- begin with a 'w'. The default is 'wb' (binary write).
- """
- file = self.canonicalize(file)
- if mode[0] != 'w':
- raise ValueError, "mode must begin with 'w'"
- with open(file, mode) as f:
- f.write(content)
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/lib/TestCommon.py b/deps/npm/node_modules/node-gyp/gyp/test/lib/TestCommon.py
deleted file mode 100644
index c54530c98..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/lib/TestCommon.py
+++ /dev/null
@@ -1,570 +0,0 @@
-"""
-TestCommon.py: a testing framework for commands and scripts
- with commonly useful error handling
-
-The TestCommon module provides a simple, high-level interface for writing
-tests of executable commands and scripts, especially commands and scripts
-that interact with the file system. All methods throw exceptions and
-exit on failure, with useful error messages. This makes a number of
-explicit checks unnecessary, making the test scripts themselves simpler
-to write and easier to read.
-
-The TestCommon class is a subclass of the TestCmd class. In essence,
-TestCommon is a wrapper that handles common TestCmd error conditions in
-useful ways. You can use TestCommon directly, or subclass it for your
-program and add additional (or override) methods to tailor it to your
-program's specific needs. Alternatively, the TestCommon class serves
-as a useful example of how to define your own TestCmd subclass.
-
-As a subclass of TestCmd, TestCommon provides access to all of the
-variables and methods from the TestCmd module. Consequently, you can
-use any variable or method documented in the TestCmd module without
-having to explicitly import TestCmd.
-
-A TestCommon environment object is created via the usual invocation:
-
- import TestCommon
- test = TestCommon.TestCommon()
-
-You can use all of the TestCmd keyword arguments when instantiating a
-TestCommon object; see the TestCmd documentation for details.
-
-Here is an overview of the methods and keyword arguments that are
-provided by the TestCommon class:
-
- test.must_be_writable('file1', ['file2', ...])
-
- test.must_contain('file', 'required text\n')
-
- test.must_contain_all_lines(output, lines, ['title', find])
-
- test.must_contain_any_line(output, lines, ['title', find])
-
- test.must_exist('file1', ['file2', ...])
-
- test.must_match('file', "expected contents\n")
-
- test.must_not_be_writable('file1', ['file2', ...])
-
- test.must_not_contain('file', 'banned text\n')
-
- test.must_not_contain_any_line(output, lines, ['title', find])
-
- test.must_not_exist('file1', ['file2', ...])
-
- test.run(options = "options to be prepended to arguments",
- stdout = "expected standard output from the program",
- stderr = "expected error output from the program",
- status = expected_status,
- match = match_function)
-
-The TestCommon module also provides the following variables
-
- TestCommon.python_executable
- TestCommon.exe_suffix
- TestCommon.obj_suffix
- TestCommon.shobj_prefix
- TestCommon.shobj_suffix
- TestCommon.lib_prefix
- TestCommon.lib_suffix
- TestCommon.dll_prefix
- TestCommon.dll_suffix
-
-"""
-
-# Copyright 2000-2010 Steven Knight
-# This module is free software, and you may redistribute it and/or modify
-# it under the same terms as Python itself, so long as this copyright message
-# and disclaimer are retained in their original form.
-#
-# IN NO EVENT SHALL THE AUTHOR BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT,
-# SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OF
-# THIS CODE, EVEN IF THE AUTHOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
-# DAMAGE.
-#
-# THE AUTHOR SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, BUT NOT
-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
-# PARTICULAR PURPOSE. THE CODE PROVIDED HEREUNDER IS ON AN "AS IS" BASIS,
-# AND THERE IS NO OBLIGATION WHATSOEVER TO PROVIDE MAINTENANCE,
-# SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
-
-__author__ = "Steven Knight <knight at baldmt dot com>"
-__revision__ = "TestCommon.py 0.37.D001 2010/01/11 16:55:50 knight"
-__version__ = "0.37"
-
-import copy
-import os
-import os.path
-import stat
-import string
-import sys
-import types
-import UserList
-
-from TestCmd import *
-from TestCmd import __all__
-
-__all__.extend([ 'TestCommon',
- 'exe_suffix',
- 'obj_suffix',
- 'shobj_prefix',
- 'shobj_suffix',
- 'lib_prefix',
- 'lib_suffix',
- 'dll_prefix',
- 'dll_suffix',
- ])
-
-# Variables that describe the prefixes and suffixes on this system.
-if sys.platform == 'win32':
- exe_suffix = '.exe'
- obj_suffix = '.obj'
- shobj_suffix = '.obj'
- shobj_prefix = ''
- lib_prefix = ''
- lib_suffix = '.lib'
- dll_prefix = ''
- dll_suffix = '.dll'
-elif sys.platform == 'cygwin':
- exe_suffix = '.exe'
- obj_suffix = '.o'
- shobj_suffix = '.os'
- shobj_prefix = ''
- lib_prefix = 'lib'
- lib_suffix = '.a'
- dll_prefix = ''
- dll_suffix = '.dll'
-elif string.find(sys.platform, 'irix') != -1:
- exe_suffix = ''
- obj_suffix = '.o'
- shobj_suffix = '.o'
- shobj_prefix = ''
- lib_prefix = 'lib'
- lib_suffix = '.a'
- dll_prefix = 'lib'
- dll_suffix = '.so'
-elif string.find(sys.platform, 'darwin') != -1:
- exe_suffix = ''
- obj_suffix = '.o'
- shobj_suffix = '.os'
- shobj_prefix = ''
- lib_prefix = 'lib'
- lib_suffix = '.a'
- dll_prefix = 'lib'
- dll_suffix = '.dylib'
-elif string.find(sys.platform, 'sunos') != -1:
- exe_suffix = ''
- obj_suffix = '.o'
- shobj_suffix = '.os'
- shobj_prefix = 'so_'
- lib_prefix = 'lib'
- lib_suffix = '.a'
- dll_prefix = 'lib'
- dll_suffix = '.dylib'
-else:
- exe_suffix = ''
- obj_suffix = '.o'
- shobj_suffix = '.os'
- shobj_prefix = ''
- lib_prefix = 'lib'
- lib_suffix = '.a'
- dll_prefix = 'lib'
- dll_suffix = '.so'
-
-def is_List(e):
- return type(e) is types.ListType \
- or isinstance(e, UserList.UserList)
-
-def is_writable(f):
- mode = os.stat(f)[stat.ST_MODE]
- return mode & stat.S_IWUSR
-
-def separate_files(flist):
- existing = []
- missing = []
- for f in flist:
- if os.path.exists(f):
- existing.append(f)
- else:
- missing.append(f)
- return existing, missing
-
-def _failed(self, status = 0):
- if self.status is None or status is None:
- return None
- try:
- return _status(self) not in status
- except TypeError:
- # status wasn't an iterable
- return _status(self) != status
-
-def _status(self):
- return self.status
-
-class TestCommon(TestCmd):
-
- # Additional methods from the Perl Test::Cmd::Common module
- # that we may wish to add in the future:
- #
- # $test->subdir('subdir', ...);
- #
- # $test->copy('src_file', 'dst_file');
-
- def __init__(self, **kw):
- """Initialize a new TestCommon instance. This involves just
- calling the base class initialization, and then changing directory
- to the workdir.
- """
- apply(TestCmd.__init__, [self], kw)
- os.chdir(self.workdir)
-
- def must_be_writable(self, *files):
- """Ensures that the specified file(s) exist and are writable.
- An individual file can be specified as a list of directory names,
- in which case the pathname will be constructed by concatenating
- them. Exits FAILED if any of the files does not exist or is
- not writable.
- """
- files = map(lambda x: is_List(x) and apply(os.path.join, x) or x, files)
- existing, missing = separate_files(files)
- unwritable = filter(lambda x, iw=is_writable: not iw(x), existing)
- if missing:
- print "Missing files: `%s'" % string.join(missing, "', `")
- if unwritable:
- print "Unwritable files: `%s'" % string.join(unwritable, "', `")
- self.fail_test(missing + unwritable)
-
- def must_contain(self, file, required, mode = 'rb'):
- """Ensures that the specified file contains the required text.
- """
- file_contents = self.read(file, mode)
- contains = (string.find(file_contents, required) != -1)
- if not contains:
- print "File `%s' does not contain required string." % file
- print self.banner('Required string ')
- print required
- print self.banner('%s contents ' % file)
- print file_contents
- self.fail_test(not contains)
-
- def must_contain_all_lines(self, output, lines, title=None, find=None):
- """Ensures that the specified output string (first argument)
- contains all of the specified lines (second argument).
-
- An optional third argument can be used to describe the type
- of output being searched, and only shows up in failure output.
-
- An optional fourth argument can be used to supply a different
- function, of the form "find(line, output), to use when searching
- for lines in the output.
- """
- if find is None:
- find = lambda o, l: string.find(o, l) != -1
- missing = []
- for line in lines:
- if not find(output, line):
- missing.append(line)
-
- if missing:
- if title is None:
- title = 'output'
- sys.stdout.write("Missing expected lines from %s:\n" % title)
- for line in missing:
- sys.stdout.write(' ' + repr(line) + '\n')
- sys.stdout.write(self.banner(title + ' '))
- sys.stdout.write(output)
- self.fail_test()
-
- def must_contain_any_line(self, output, lines, title=None, find=None):
- """Ensures that the specified output string (first argument)
- contains at least one of the specified lines (second argument).
-
- An optional third argument can be used to describe the type
- of output being searched, and only shows up in failure output.
-
- An optional fourth argument can be used to supply a different
- function, of the form "find(line, output), to use when searching
- for lines in the output.
- """
- if find is None:
- find = lambda o, l: string.find(o, l) != -1
- for line in lines:
- if find(output, line):
- return
-
- if title is None:
- title = 'output'
- sys.stdout.write("Missing any expected line from %s:\n" % title)
- for line in lines:
- sys.stdout.write(' ' + repr(line) + '\n')
- sys.stdout.write(self.banner(title + ' '))
- sys.stdout.write(output)
- self.fail_test()
-
- def must_contain_lines(self, lines, output, title=None):
- # Deprecated; retain for backwards compatibility.
- return self.must_contain_all_lines(output, lines, title)
-
- def must_exist(self, *files):
- """Ensures that the specified file(s) must exist. An individual
- file be specified as a list of directory names, in which case the
- pathname will be constructed by concatenating them. Exits FAILED
- if any of the files does not exist.
- """
- files = map(lambda x: is_List(x) and apply(os.path.join, x) or x, files)
- missing = filter(lambda x: not os.path.exists(x), files)
- if missing:
- print "Missing files: `%s'" % string.join(missing, "', `")
- self.fail_test(missing)
-
- def must_match(self, file, expect, mode = 'rb'):
- """Matches the contents of the specified file (first argument)
- against the expected contents (second argument). The expected
- contents are a list of lines or a string which will be split
- on newlines.
- """
- file_contents = self.read(file, mode)
- try:
- self.fail_test(not self.match(file_contents, expect))
- except KeyboardInterrupt:
- raise
- except:
- print "Unexpected contents of `%s'" % file
- self.diff(expect, file_contents, 'contents ')
- raise
-
- def must_not_contain(self, file, banned, mode = 'rb'):
- """Ensures that the specified file doesn't contain the banned text.
- """
- file_contents = self.read(file, mode)
- contains = (string.find(file_contents, banned) != -1)
- if contains:
- print "File `%s' contains banned string." % file
- print self.banner('Banned string ')
- print banned
- print self.banner('%s contents ' % file)
- print file_contents
- self.fail_test(contains)
-
- def must_not_contain_any_line(self, output, lines, title=None, find=None):
- """Ensures that the specified output string (first argument)
- does not contain any of the specified lines (second argument).
-
- An optional third argument can be used to describe the type
- of output being searched, and only shows up in failure output.
-
- An optional fourth argument can be used to supply a different
- function, of the form "find(line, output), to use when searching
- for lines in the output.
- """
- if find is None:
- find = lambda o, l: string.find(o, l) != -1
- unexpected = []
- for line in lines:
- if find(output, line):
- unexpected.append(line)
-
- if unexpected:
- if title is None:
- title = 'output'
- sys.stdout.write("Unexpected lines in %s:\n" % title)
- for line in unexpected:
- sys.stdout.write(' ' + repr(line) + '\n')
- sys.stdout.write(self.banner(title + ' '))
- sys.stdout.write(output)
- self.fail_test()
-
- def must_not_contain_lines(self, lines, output, title=None):
- return self.must_not_contain_any_line(output, lines, title)
-
- def must_not_exist(self, *files):
- """Ensures that the specified file(s) must not exist.
- An individual file be specified as a list of directory names, in
- which case the pathname will be constructed by concatenating them.
- Exits FAILED if any of the files exists.
- """
- files = map(lambda x: is_List(x) and apply(os.path.join, x) or x, files)
- existing = filter(os.path.exists, files)
- if existing:
- print "Unexpected files exist: `%s'" % string.join(existing, "', `")
- self.fail_test(existing)
-
- def must_not_be_writable(self, *files):
- """Ensures that the specified file(s) exist and are not writable.
- An individual file can be specified as a list of directory names,
- in which case the pathname will be constructed by concatenating
- them. Exits FAILED if any of the files does not exist or is
- writable.
- """
- files = map(lambda x: is_List(x) and apply(os.path.join, x) or x, files)
- existing, missing = separate_files(files)
- writable = filter(is_writable, existing)
- if missing:
- print "Missing files: `%s'" % string.join(missing, "', `")
- if writable:
- print "Writable files: `%s'" % string.join(writable, "', `")
- self.fail_test(missing + writable)
-
- def _complete(self, actual_stdout, expected_stdout,
- actual_stderr, expected_stderr, status, match):
- """
- Post-processes running a subcommand, checking for failure
- status and displaying output appropriately.
- """
- if _failed(self, status):
- expect = ''
- if status != 0:
- expect = " (expected %s)" % str(status)
- print "%s returned %s%s" % (self.program, str(_status(self)), expect)
- print self.banner('STDOUT ')
- print actual_stdout
- print self.banner('STDERR ')
- print actual_stderr
- self.fail_test()
- if not expected_stdout is None and not match(actual_stdout, expected_stdout):
- self.diff(expected_stdout, actual_stdout, 'STDOUT ')
- if actual_stderr:
- print self.banner('STDERR ')
- print actual_stderr
- self.fail_test()
- if not expected_stderr is None and not match(actual_stderr, expected_stderr):
- print self.banner('STDOUT ')
- print actual_stdout
- self.diff(expected_stderr, actual_stderr, 'STDERR ')
- self.fail_test()
-
- def start(self, program = None,
- interpreter = None,
- arguments = None,
- universal_newlines = None,
- **kw):
- """
- Starts a program or script for the test environment.
-
- This handles the "options" keyword argument and exceptions.
- """
- options = kw.pop('options', None)
- if options:
- if arguments is None:
- arguments = options
- else:
- arguments = options + " " + arguments
-
- try:
- return apply(TestCmd.start,
- (self, program, interpreter, arguments, universal_newlines),
- kw)
- except KeyboardInterrupt:
- raise
- except Exception, e:
- print self.banner('STDOUT ')
- try:
- print self.stdout()
- except IndexError:
- pass
- print self.banner('STDERR ')
- try:
- print self.stderr()
- except IndexError:
- pass
- cmd_args = self.command_args(program, interpreter, arguments)
- sys.stderr.write('Exception trying to execute: %s\n' % cmd_args)
- raise e
-
- def finish(self, popen, stdout = None, stderr = '', status = 0, **kw):
- """
- Finishes and waits for the process being run under control of
- the specified popen argument. Additional arguments are similar
- to those of the run() method:
-
- stdout The expected standard output from
- the command. A value of None means
- don't test standard output.
-
- stderr The expected error output from
- the command. A value of None means
- don't test error output.
-
- status The expected exit status from the
- command. A value of None means don't
- test exit status.
- """
- apply(TestCmd.finish, (self, popen,), kw)
- match = kw.get('match', self.match)
- self._complete(self.stdout(), stdout,
- self.stderr(), stderr, status, match)
-
- def run(self, options = None, arguments = None,
- stdout = None, stderr = '', status = 0, **kw):
- """Runs the program under test, checking that the test succeeded.
-
- The arguments are the same as the base TestCmd.run() method,
- with the addition of:
-
- options Extra options that get appended to the beginning
- of the arguments.
-
- stdout The expected standard output from
- the command. A value of None means
- don't test standard output.
-
- stderr The expected error output from
- the command. A value of None means
- don't test error output.
-
- status The expected exit status from the
- command. A value of None means don't
- test exit status.
-
- By default, this expects a successful exit (status = 0), does
- not test standard output (stdout = None), and expects that error
- output is empty (stderr = "").
- """
- if options:
- if arguments is None:
- arguments = options
- else:
- arguments = options + " " + arguments
- kw['arguments'] = arguments
- match = kw.pop('match', self.match)
- apply(TestCmd.run, [self], kw)
- self._complete(self.stdout(), stdout,
- self.stderr(), stderr, status, match)
-
- def skip_test(self, message="Skipping test.\n"):
- """Skips a test.
-
- Proper test-skipping behavior is dependent on the external
- TESTCOMMON_PASS_SKIPS environment variable. If set, we treat
- the skip as a PASS (exit 0), and otherwise treat it as NO RESULT.
- In either case, we print the specified message as an indication
- that the substance of the test was skipped.
-
- (This was originally added to support development under Aegis.
- Technically, skipping a test is a NO RESULT, but Aegis would
- treat that as a test failure and prevent the change from going to
- the next step. Since we ddn't want to force anyone using Aegis
- to have to install absolutely every tool used by the tests, we
- would actually report to Aegis that a skipped test has PASSED
- so that the workflow isn't held up.)
- """
- if message:
- sys.stdout.write(message)
- sys.stdout.flush()
- pass_skips = os.environ.get('TESTCOMMON_PASS_SKIPS')
- if pass_skips in [None, 0, '0']:
- # skip=1 means skip this function when showing where this
- # result came from. They only care about the line where the
- # script called test.skip_test(), not the line number where
- # we call test.no_result().
- self.no_result(skip=1)
- else:
- # We're under the development directory for this change,
- # so this is an Aegis invocation; pass the test (exit 0).
- self.pass_test()
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/lib/TestGyp.py b/deps/npm/node_modules/node-gyp/gyp/test/lib/TestGyp.py
deleted file mode 100644
index b0002f5c3..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/lib/TestGyp.py
+++ /dev/null
@@ -1,1050 +0,0 @@
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-TestGyp.py: a testing framework for GYP integration tests.
-"""
-
-import os
-import re
-import shutil
-import stat
-import subprocess
-import sys
-import tempfile
-
-import TestCommon
-from TestCommon import __all__
-
-__all__.extend([
- 'TestGyp',
-])
-
-def remove_debug_line_numbers(contents):
- """Function to remove the line numbers from the debug output
- of gyp and thus remove the exremem fragility of the stdout
- comparison tests.
- """
- lines = contents.splitlines()
- # split each line on ":"
- lines = [l.split(":", 3) for l in lines]
- # join each line back together while ignoring the
- # 3rd column which is the line number
- lines = [len(l) > 3 and ":".join(l[3:]) or l for l in lines]
- return "\n".join(lines)
-
-def match_modulo_line_numbers(contents_a, contents_b):
- """File contents matcher that ignores line numbers."""
- contents_a = remove_debug_line_numbers(contents_a)
- contents_b = remove_debug_line_numbers(contents_b)
- return TestCommon.match_exact(contents_a, contents_b)
-
-class TestGypBase(TestCommon.TestCommon):
- """
- Class for controlling end-to-end tests of gyp generators.
-
- Instantiating this class will create a temporary directory and
- arrange for its destruction (via the TestCmd superclass) and
- copy all of the non-gyptest files in the directory hierarchy of the
- executing script.
-
- The default behavior is to test the 'gyp' or 'gyp.bat' file in the
- current directory. An alternative may be specified explicitly on
- instantiation, or by setting the TESTGYP_GYP environment variable.
-
- This class should be subclassed for each supported gyp generator
- (format). Various abstract methods below define calling signatures
- used by the test scripts to invoke builds on the generated build
- configuration and to run executables generated by those builds.
- """
-
- build_tool = None
- build_tool_list = []
-
- _exe = TestCommon.exe_suffix
- _obj = TestCommon.obj_suffix
- shobj_ = TestCommon.shobj_prefix
- _shobj = TestCommon.shobj_suffix
- lib_ = TestCommon.lib_prefix
- _lib = TestCommon.lib_suffix
- dll_ = TestCommon.dll_prefix
- _dll = TestCommon.dll_suffix
-
- # Constants to represent different targets.
- ALL = '__all__'
- DEFAULT = '__default__'
-
- # Constants for different target types.
- EXECUTABLE = '__executable__'
- STATIC_LIB = '__static_lib__'
- SHARED_LIB = '__shared_lib__'
-
- def __init__(self, gyp=None, *args, **kw):
- self.origin_cwd = os.path.abspath(os.path.dirname(sys.argv[0]))
- self.extra_args = sys.argv[1:]
-
- if not gyp:
- gyp = os.environ.get('TESTGYP_GYP')
- if not gyp:
- if sys.platform == 'win32':
- gyp = 'gyp.bat'
- else:
- gyp = 'gyp'
- self.gyp = os.path.abspath(gyp)
-
- self.initialize_build_tool()
-
- kw.setdefault('match', TestCommon.match_exact)
-
- # Put test output in out/testworkarea by default.
- # Use temporary names so there are no collisions.
- workdir = os.path.join('out', kw.get('workdir', 'testworkarea'))
- # Create work area if it doesn't already exist.
- if not os.path.isdir(workdir):
- os.makedirs(workdir)
-
- kw['workdir'] = tempfile.mktemp(prefix='testgyp.', dir=workdir)
-
- formats = kw.pop('formats', [])
-
- super(TestGypBase, self).__init__(*args, **kw)
-
- excluded_formats = set([f for f in formats if f[0] == '!'])
- included_formats = set(formats) - excluded_formats
- if ('!'+self.format in excluded_formats or
- included_formats and self.format not in included_formats):
- msg = 'Invalid test for %r format; skipping test.\n'
- self.skip_test(msg % self.format)
-
- self.copy_test_configuration(self.origin_cwd, self.workdir)
- self.set_configuration(None)
-
- # Set $HOME so that gyp doesn't read the user's actual
- # ~/.gyp/include.gypi file, which may contain variables
- # and other settings that would change the output.
- os.environ['HOME'] = self.workpath()
- # Clear $GYP_DEFINES for the same reason.
- if 'GYP_DEFINES' in os.environ:
- del os.environ['GYP_DEFINES']
-
- def built_file_must_exist(self, name, type=None, **kw):
- """
- Fails the test if the specified built file name does not exist.
- """
- return self.must_exist(self.built_file_path(name, type, **kw))
-
- def built_file_must_not_exist(self, name, type=None, **kw):
- """
- Fails the test if the specified built file name exists.
- """
- return self.must_not_exist(self.built_file_path(name, type, **kw))
-
- def built_file_must_match(self, name, contents, **kw):
- """
- Fails the test if the contents of the specified built file name
- do not match the specified contents.
- """
- return self.must_match(self.built_file_path(name, **kw), contents)
-
- def built_file_must_not_match(self, name, contents, **kw):
- """
- Fails the test if the contents of the specified built file name
- match the specified contents.
- """
- return self.must_not_match(self.built_file_path(name, **kw), contents)
-
- def copy_test_configuration(self, source_dir, dest_dir):
- """
- Copies the test configuration from the specified source_dir
- (the directory in which the test script lives) to the
- specified dest_dir (a temporary working directory).
-
- This ignores all files and directories that begin with
- the string 'gyptest', and all '.svn' subdirectories.
- """
- for root, dirs, files in os.walk(source_dir):
- if '.svn' in dirs:
- dirs.remove('.svn')
- dirs = [ d for d in dirs if not d.startswith('gyptest') ]
- files = [ f for f in files if not f.startswith('gyptest') ]
- for dirname in dirs:
- source = os.path.join(root, dirname)
- destination = source.replace(source_dir, dest_dir)
- os.mkdir(destination)
- if sys.platform != 'win32':
- shutil.copystat(source, destination)
- for filename in files:
- source = os.path.join(root, filename)
- destination = source.replace(source_dir, dest_dir)
- shutil.copy2(source, destination)
-
- def initialize_build_tool(self):
- """
- Initializes the .build_tool attribute.
-
- Searches the .build_tool_list for an executable name on the user's
- $PATH. The first tool on the list is used as-is if nothing is found
- on the current $PATH.
- """
- for build_tool in self.build_tool_list:
- if not build_tool:
- continue
- if os.path.isabs(build_tool):
- self.build_tool = build_tool
- return
- build_tool = self.where_is(build_tool)
- if build_tool:
- self.build_tool = build_tool
- return
-
- if self.build_tool_list:
- self.build_tool = self.build_tool_list[0]
-
- def relocate(self, source, destination):
- """
- Renames (relocates) the specified source (usually a directory)
- to the specified destination, creating the destination directory
- first if necessary.
-
- Note: Don't use this as a generic "rename" operation. In the
- future, "relocating" parts of a GYP tree may affect the state of
- the test to modify the behavior of later method calls.
- """
- destination_dir = os.path.dirname(destination)
- if not os.path.exists(destination_dir):
- self.subdir(destination_dir)
- os.rename(source, destination)
-
- def report_not_up_to_date(self):
- """
- Reports that a build is not up-to-date.
-
- This provides common reporting for formats that have complicated
- conditions for checking whether a build is up-to-date. Formats
- that expect exact output from the command (make, scons) can
- just set stdout= when they call the run_build() method.
- """
- print "Build is not up-to-date:"
- print self.banner('STDOUT ')
- print self.stdout()
- stderr = self.stderr()
- if stderr:
- print self.banner('STDERR ')
- print stderr
-
- def run_gyp(self, gyp_file, *args, **kw):
- """
- Runs gyp against the specified gyp_file with the specified args.
- """
-
- # When running gyp, and comparing its output we use a comparitor
- # that ignores the line numbers that gyp logs in its debug output.
- if kw.pop('ignore_line_numbers', False):
- kw.setdefault('match', match_modulo_line_numbers)
-
- # TODO: --depth=. works around Chromium-specific tree climbing.
- depth = kw.pop('depth', '.')
- run_args = ['--depth='+depth, '--format='+self.format, gyp_file]
- run_args.extend(self.extra_args)
- run_args.extend(args)
- return self.run(program=self.gyp, arguments=run_args, **kw)
-
- def run(self, *args, **kw):
- """
- Executes a program by calling the superclass .run() method.
-
- This exists to provide a common place to filter out keyword
- arguments implemented in this layer, without having to update
- the tool-specific subclasses or clutter the tests themselves
- with platform-specific code.
- """
- if kw.has_key('SYMROOT'):
- del kw['SYMROOT']
- super(TestGypBase, self).run(*args, **kw)
-
- def set_configuration(self, configuration):
- """
- Sets the configuration, to be used for invoking the build
- tool and testing potential built output.
- """
- self.configuration = configuration
-
- def configuration_dirname(self):
- if self.configuration:
- return self.configuration.split('|')[0]
- else:
- return 'Default'
-
- def configuration_buildname(self):
- if self.configuration:
- return self.configuration
- else:
- return 'Default'
-
- #
- # Abstract methods to be defined by format-specific subclasses.
- #
-
- def build(self, gyp_file, target=None, **kw):
- """
- Runs a build of the specified target against the configuration
- generated from the specified gyp_file.
-
- A 'target' argument of None or the special value TestGyp.DEFAULT
- specifies the default argument for the underlying build tool.
- A 'target' argument of TestGyp.ALL specifies the 'all' target
- (if any) of the underlying build tool.
- """
- raise NotImplementedError
-
- def built_file_path(self, name, type=None, **kw):
- """
- Returns a path to the specified file name, of the specified type.
- """
- raise NotImplementedError
-
- def built_file_basename(self, name, type=None, **kw):
- """
- Returns the base name of the specified file name, of the specified type.
-
- A bare=True keyword argument specifies that prefixes and suffixes shouldn't
- be applied.
- """
- if not kw.get('bare'):
- if type == self.EXECUTABLE:
- name = name + self._exe
- elif type == self.STATIC_LIB:
- name = self.lib_ + name + self._lib
- elif type == self.SHARED_LIB:
- name = self.dll_ + name + self._dll
- return name
-
- def run_built_executable(self, name, *args, **kw):
- """
- Runs an executable program built from a gyp-generated configuration.
-
- The specified name should be independent of any particular generator.
- Subclasses should find the output executable in the appropriate
- output build directory, tack on any necessary executable suffix, etc.
- """
- raise NotImplementedError
-
- def up_to_date(self, gyp_file, target=None, **kw):
- """
- Verifies that a build of the specified target is up to date.
-
- The subclass should implement this by calling build()
- (or a reasonable equivalent), checking whatever conditions
- will tell it the build was an "up to date" null build, and
- failing if it isn't.
- """
- raise NotImplementedError
-
-
-class TestGypGypd(TestGypBase):
- """
- Subclass for testing the GYP 'gypd' generator (spit out the
- internal data structure as pretty-printed Python).
- """
- format = 'gypd'
-
-
-class TestGypCustom(TestGypBase):
- """
- Subclass for testing the GYP with custom generator
- """
-
- def __init__(self, gyp=None, *args, **kw):
- self.format = kw.pop("format")
- super(TestGypCustom, self).__init__(*args, **kw)
-
-
-class TestGypAndroid(TestGypBase):
- """
- Subclass for testing the GYP Android makefile generator. Note that
- build/envsetup.sh and lunch must have been run before running tests.
-
- TODO: This is currently an incomplete implementation. We do not support
- run_built_executable(), so we pass only tests which do not use this. As a
- result, support for host targets is not properly tested.
- """
- format = 'android'
-
- # Note that we can't use mmm as the build tool because ...
- # - it builds all targets, whereas we need to pass a target
- # - it is a function, whereas the test runner assumes the build tool is a file
- # Instead we use make and duplicate the logic from mmm.
- build_tool_list = ['make']
-
- # We use our custom target 'gyp_all_modules', as opposed to the 'all_modules'
- # target used by mmm, to build only those targets which are part of the gyp
- # target 'all'.
- ALL = 'gyp_all_modules'
-
- def __init__(self, gyp=None, *args, **kw):
- # Android requires build and test output to be outside its source tree.
- # We use the following working directory for the test's source, but the
- # test's build output still goes to $ANDROID_PRODUCT_OUT.
- # Note that some tests explicitly set format='gypd' to invoke the gypd
- # backend. This writes to the source tree, but there's no way around this.
- kw['workdir'] = os.path.join('/tmp', 'gyptest',
- kw.get('workdir', 'testworkarea'))
- # We need to remove all gyp outputs from out/. Ths is because some tests
- # don't have rules to regenerate output, so they will simply re-use stale
- # output if present. Since the test working directory gets regenerated for
- # each test run, this can confuse things.
- # We don't have a list of build outputs because we don't know which
- # dependent targets were built. Instead we delete all gyp-generated output.
- # This may be excessive, but should be safe.
- out_dir = os.environ['ANDROID_PRODUCT_OUT']
- obj_dir = os.path.join(out_dir, 'obj')
- shutil.rmtree(os.path.join(obj_dir, 'GYP'), ignore_errors = True)
- for x in ['EXECUTABLES', 'STATIC_LIBRARIES', 'SHARED_LIBRARIES']:
- for d in os.listdir(os.path.join(obj_dir, x)):
- if d.endswith('_gyp_intermediates'):
- shutil.rmtree(os.path.join(obj_dir, x, d), ignore_errors = True)
- for x in [os.path.join('obj', 'lib'), os.path.join('system', 'lib')]:
- for d in os.listdir(os.path.join(out_dir, x)):
- if d.endswith('_gyp.so'):
- os.remove(os.path.join(out_dir, x, d))
-
- super(TestGypAndroid, self).__init__(*args, **kw)
-
- def target_name(self, target):
- if target == self.ALL:
- return self.ALL
- # The default target is 'droid'. However, we want to use our special target
- # to build only the gyp target 'all'.
- if target in (None, self.DEFAULT):
- return self.ALL
- return target
-
- def build(self, gyp_file, target=None, **kw):
- """
- Runs a build using the Android makefiles generated from the specified
- gyp_file. This logic is taken from Android's mmm.
- """
- arguments = kw.get('arguments', [])[:]
- arguments.append(self.target_name(target))
- arguments.append('-C')
- arguments.append(os.environ['ANDROID_BUILD_TOP'])
- kw['arguments'] = arguments
- chdir = kw.get('chdir', '')
- makefile = os.path.join(self.workdir, chdir, 'GypAndroid.mk')
- os.environ['ONE_SHOT_MAKEFILE'] = makefile
- result = self.run(program=self.build_tool, **kw)
- del os.environ['ONE_SHOT_MAKEFILE']
- return result
-
- def android_module(self, group, name, subdir):
- if subdir:
- name = '%s_%s' % (subdir, name)
- if group == 'SHARED_LIBRARIES':
- name = 'lib_%s' % name
- return '%s_gyp' % name
-
- def intermediates_dir(self, group, module_name):
- return os.path.join(os.environ['ANDROID_PRODUCT_OUT'], 'obj', group,
- '%s_intermediates' % module_name)
-
- def built_file_path(self, name, type=None, **kw):
- """
- Returns a path to the specified file name, of the specified type,
- as built by Android. Note that we don't support the configuration
- parameter.
- """
- # Built files are in $ANDROID_PRODUCT_OUT. This requires copying logic from
- # the Android build system.
- if type == None:
- return os.path.join(os.environ['ANDROID_PRODUCT_OUT'], 'obj', 'GYP',
- 'shared_intermediates', name)
- subdir = kw.get('subdir')
- if type == self.EXECUTABLE:
- # We don't install executables
- group = 'EXECUTABLES'
- module_name = self.android_module(group, name, subdir)
- return os.path.join(self.intermediates_dir(group, module_name), name)
- if type == self.STATIC_LIB:
- group = 'STATIC_LIBRARIES'
- module_name = self.android_module(group, name, subdir)
- return os.path.join(self.intermediates_dir(group, module_name),
- '%s.a' % module_name)
- if type == self.SHARED_LIB:
- group = 'SHARED_LIBRARIES'
- module_name = self.android_module(group, name, subdir)
- return os.path.join(self.intermediates_dir(group, module_name), 'LINKED',
- '%s.so' % module_name)
- assert False, 'Unhandled type'
-
- def run_built_executable(self, name, *args, **kw):
- """
- Runs an executable program built from a gyp-generated configuration.
-
- This is not correctly implemented for Android. For now, we simply check
- that the executable file exists.
- """
- # Running executables requires a device. Even if we build for target x86,
- # the binary is not built with the correct toolchain options to actually
- # run on the host.
-
- # Copied from TestCommon.run()
- match = kw.pop('match', self.match)
- status = None
- if os.path.exists(self.built_file_path(name)):
- status = 1
- self._complete(None, None, None, None, status, self.match)
-
- def match_single_line(self, lines = None, expected_line = None):
- """
- Checks that specified line appears in the text.
- """
- for line in lines.split('\n'):
- if line == expected_line:
- return 1
- return
-
- def up_to_date(self, gyp_file, target=None, **kw):
- """
- Verifies that a build of the specified target is up to date.
- """
- kw['stdout'] = ("make: Nothing to be done for `%s'." %
- self.target_name(target))
-
- # We need to supply a custom matcher, since we don't want to depend on the
- # exact stdout string.
- kw['match'] = self.match_single_line
- return self.build(gyp_file, target, **kw)
-
-class TestGypMake(TestGypBase):
- """
- Subclass for testing the GYP Make generator.
- """
- format = 'make'
- build_tool_list = ['make']
- ALL = 'all'
- def build(self, gyp_file, target=None, **kw):
- """
- Runs a Make build using the Makefiles generated from the specified
- gyp_file.
- """
- arguments = kw.get('arguments', [])[:]
- if self.configuration:
- arguments.append('BUILDTYPE=' + self.configuration)
- if target not in (None, self.DEFAULT):
- arguments.append(target)
- # Sub-directory builds provide per-gyp Makefiles (i.e.
- # Makefile.gyp_filename), so use that if there is no Makefile.
- chdir = kw.get('chdir', '')
- if not os.path.exists(os.path.join(chdir, 'Makefile')):
- print "NO Makefile in " + os.path.join(chdir, 'Makefile')
- arguments.insert(0, '-f')
- arguments.insert(1, os.path.splitext(gyp_file)[0] + '.Makefile')
- kw['arguments'] = arguments
- return self.run(program=self.build_tool, **kw)
- def up_to_date(self, gyp_file, target=None, **kw):
- """
- Verifies that a build of the specified Make target is up to date.
- """
- if target in (None, self.DEFAULT):
- message_target = 'all'
- else:
- message_target = target
- kw['stdout'] = "make: Nothing to be done for `%s'.\n" % message_target
- return self.build(gyp_file, target, **kw)
- def run_built_executable(self, name, *args, **kw):
- """
- Runs an executable built by Make.
- """
- configuration = self.configuration_dirname()
- libdir = os.path.join('out', configuration, 'lib')
- # TODO(piman): when everything is cross-compile safe, remove lib.target
- if sys.platform == 'darwin':
- # Mac puts target shared libraries right in the product directory.
- configuration = self.configuration_dirname()
- os.environ['DYLD_LIBRARY_PATH'] = (
- libdir + '.host:' + os.path.join('out', configuration))
- else:
- os.environ['LD_LIBRARY_PATH'] = libdir + '.host:' + libdir + '.target'
- # Enclosing the name in a list avoids prepending the original dir.
- program = [self.built_file_path(name, type=self.EXECUTABLE, **kw)]
- return self.run(program=program, *args, **kw)
- def built_file_path(self, name, type=None, **kw):
- """
- Returns a path to the specified file name, of the specified type,
- as built by Make.
-
- Built files are in the subdirectory 'out/{configuration}'.
- The default is 'out/Default'.
-
- A chdir= keyword argument specifies the source directory
- relative to which the output subdirectory can be found.
-
- "type" values of STATIC_LIB or SHARED_LIB append the necessary
- prefixes and suffixes to a platform-independent library base name.
-
- A subdir= keyword argument specifies a library subdirectory within
- the default 'obj.target'.
- """
- result = []
- chdir = kw.get('chdir')
- if chdir:
- result.append(chdir)
- configuration = self.configuration_dirname()
- result.extend(['out', configuration])
- if type == self.STATIC_LIB and sys.platform != 'darwin':
- result.append('obj.target')
- elif type == self.SHARED_LIB and sys.platform != 'darwin':
- result.append('lib.target')
- subdir = kw.get('subdir')
- if subdir and type != self.SHARED_LIB:
- result.append(subdir)
- result.append(self.built_file_basename(name, type, **kw))
- return self.workpath(*result)
-
-
-def ConvertToCygpath(path):
- """Convert to cygwin path if we are using cygwin."""
- if sys.platform == 'cygwin':
- p = subprocess.Popen(['cygpath', path], stdout=subprocess.PIPE)
- path = p.communicate()[0].strip()
- return path
-
-
-def FindVisualStudioInstallation():
- """Returns appropriate values for .build_tool and .uses_msbuild fields
- of TestGypBase for Visual Studio.
-
- We use the value specified by GYP_MSVS_VERSION. If not specified, we
- search %PATH% and %PATHEXT% for a devenv.{exe,bat,...} executable.
- Failing that, we search for likely deployment paths.
- """
- possible_roots = ['%s:\\Program Files%s' % (chr(drive), suffix)
- for drive in range(ord('C'), ord('Z') + 1)
- for suffix in ['', ' (x86)']]
- possible_paths = {
- '2012': r'Microsoft Visual Studio 11.0\Common7\IDE\devenv.com',
- '2010': r'Microsoft Visual Studio 10.0\Common7\IDE\devenv.com',
- '2008': r'Microsoft Visual Studio 9.0\Common7\IDE\devenv.com',
- '2005': r'Microsoft Visual Studio 8\Common7\IDE\devenv.com'}
-
- possible_roots = [ConvertToCygpath(r) for r in possible_roots]
-
- msvs_version = 'auto'
- for flag in (f for f in sys.argv if f.startswith('msvs_version=')):
- msvs_version = flag.split('=')[-1]
- msvs_version = os.environ.get('GYP_MSVS_VERSION', msvs_version)
-
- build_tool = None
- if msvs_version in possible_paths:
- # Check that the path to the specified GYP_MSVS_VERSION exists.
- path = possible_paths[msvs_version]
- for r in possible_roots:
- bt = os.path.join(r, path)
- if os.path.exists(bt):
- build_tool = bt
- uses_msbuild = msvs_version >= '2010'
- return build_tool, uses_msbuild
- else:
- print ('Warning: Environment variable GYP_MSVS_VERSION specifies "%s" '
- 'but corresponding "%s" was not found.' % (msvs_version, path))
- if build_tool:
- # We found 'devenv' on the path, use that and try to guess the version.
- for version, path in possible_paths.iteritems():
- if build_tool.find(path) >= 0:
- uses_msbuild = version >= '2010'
- return build_tool, uses_msbuild
- else:
- # If not, assume not MSBuild.
- uses_msbuild = False
- return build_tool, uses_msbuild
- # Neither GYP_MSVS_VERSION nor the path help us out. Iterate through
- # the choices looking for a match.
- for version in sorted(possible_paths, reverse=True):
- path = possible_paths[version]
- for r in possible_roots:
- bt = os.path.join(r, path)
- if os.path.exists(bt):
- build_tool = bt
- uses_msbuild = msvs_version >= '2010'
- return build_tool, uses_msbuild
- print 'Error: could not find devenv'
- sys.exit(1)
-
-class TestGypOnMSToolchain(TestGypBase):
- """
- Common subclass for testing generators that target the Microsoft Visual
- Studio toolchain (cl, link, dumpbin, etc.)
- """
- @staticmethod
- def _ComputeVsvarsPath(devenv_path):
- devenv_dir = os.path.split(devenv_path)[0]
- vsvars_path = os.path.join(devenv_path, '../../Tools/vsvars32.bat')
- return vsvars_path
-
- def initialize_build_tool(self):
- super(TestGypOnMSToolchain, self).initialize_build_tool()
- if sys.platform in ('win32', 'cygwin'):
- self.devenv_path, self.uses_msbuild = FindVisualStudioInstallation()
- self.vsvars_path = TestGypOnMSToolchain._ComputeVsvarsPath(
- self.devenv_path)
-
- def run_dumpbin(self, *dumpbin_args):
- """Run the dumpbin tool with the specified arguments, and capturing and
- returning stdout."""
- assert sys.platform in ('win32', 'cygwin')
- cmd = os.environ.get('COMSPEC', 'cmd.exe')
- arguments = [cmd, '/c', self.vsvars_path, '&&', 'dumpbin']
- arguments.extend(dumpbin_args)
- proc = subprocess.Popen(arguments, stdout=subprocess.PIPE)
- output = proc.communicate()[0]
- assert not proc.returncode
- return output
-
-class TestGypNinja(TestGypOnMSToolchain):
- """
- Subclass for testing the GYP Ninja generator.
- """
- format = 'ninja'
- build_tool_list = ['ninja']
- ALL = 'all'
- DEFAULT = 'all'
-
- def run_gyp(self, gyp_file, *args, **kw):
- TestGypBase.run_gyp(self, gyp_file, *args, **kw)
-
- def build(self, gyp_file, target=None, **kw):
- arguments = kw.get('arguments', [])[:]
-
- # Add a -C output/path to the command line.
- arguments.append('-C')
- arguments.append(os.path.join('out', self.configuration_dirname()))
-
- if target is None:
- target = 'all'
- arguments.append(target)
-
- kw['arguments'] = arguments
- return self.run(program=self.build_tool, **kw)
-
- def run_built_executable(self, name, *args, **kw):
- # Enclosing the name in a list avoids prepending the original dir.
- program = [self.built_file_path(name, type=self.EXECUTABLE, **kw)]
- if sys.platform == 'darwin':
- configuration = self.configuration_dirname()
- os.environ['DYLD_LIBRARY_PATH'] = os.path.join('out', configuration)
- return self.run(program=program, *args, **kw)
-
- def built_file_path(self, name, type=None, **kw):
- result = []
- chdir = kw.get('chdir')
- if chdir:
- result.append(chdir)
- result.append('out')
- result.append(self.configuration_dirname())
- if type == self.STATIC_LIB:
- if sys.platform != 'darwin':
- result.append('obj')
- elif type == self.SHARED_LIB:
- if sys.platform != 'darwin' and sys.platform != 'win32':
- result.append('lib')
- subdir = kw.get('subdir')
- if subdir and type != self.SHARED_LIB:
- result.append(subdir)
- result.append(self.built_file_basename(name, type, **kw))
- return self.workpath(*result)
-
- def up_to_date(self, gyp_file, target=None, **kw):
- result = self.build(gyp_file, target, **kw)
- if not result:
- stdout = self.stdout()
- if 'ninja: no work to do' not in stdout:
- self.report_not_up_to_date()
- self.fail_test()
- return result
-
-
-class TestGypMSVS(TestGypOnMSToolchain):
- """
- Subclass for testing the GYP Visual Studio generator.
- """
- format = 'msvs'
-
- u = r'=== Build: 0 succeeded, 0 failed, (\d+) up-to-date, 0 skipped ==='
- up_to_date_re = re.compile(u, re.M)
-
- # Initial None element will indicate to our .initialize_build_tool()
- # method below that 'devenv' was not found on %PATH%.
- #
- # Note: we must use devenv.com to be able to capture build output.
- # Directly executing devenv.exe only sends output to BuildLog.htm.
- build_tool_list = [None, 'devenv.com']
-
- def initialize_build_tool(self):
- super(TestGypMSVS, self).initialize_build_tool()
- self.build_tool = self.devenv_path
-
- def build(self, gyp_file, target=None, rebuild=False, **kw):
- """
- Runs a Visual Studio build using the configuration generated
- from the specified gyp_file.
- """
- configuration = self.configuration_buildname()
- if rebuild:
- build = '/Rebuild'
- else:
- build = '/Build'
- arguments = kw.get('arguments', [])[:]
- arguments.extend([gyp_file.replace('.gyp', '.sln'),
- build, configuration])
- # Note: the Visual Studio generator doesn't add an explicit 'all'
- # target, so we just treat it the same as the default.
- if target not in (None, self.ALL, self.DEFAULT):
- arguments.extend(['/Project', target])
- if self.configuration:
- arguments.extend(['/ProjectConfig', self.configuration])
- kw['arguments'] = arguments
- return self.run(program=self.build_tool, **kw)
- def up_to_date(self, gyp_file, target=None, **kw):
- """
- Verifies that a build of the specified Visual Studio target is up to date.
-
- Beware that VS2010 will behave strangely if you build under
- C:\USERS\yourname\AppData\Local. It will cause needless work. The ouptut
- will be "1 succeeded and 0 up to date". MSBuild tracing reveals that:
- "Project 'C:\Users\...\AppData\Local\...vcxproj' not up to date because
- 'C:\PROGRAM FILES (X86)\MICROSOFT VISUAL STUDIO 10.0\VC\BIN\1033\CLUI.DLL'
- was modified at 02/21/2011 17:03:30, which is newer than '' which was
- modified at 01/01/0001 00:00:00.
-
- The workaround is to specify a workdir when instantiating the test, e.g.
- test = TestGyp.TestGyp(workdir='workarea')
- """
- result = self.build(gyp_file, target, **kw)
- if not result:
- stdout = self.stdout()
-
- m = self.up_to_date_re.search(stdout)
- up_to_date = m and int(m.group(1)) > 0
- if not up_to_date:
- self.report_not_up_to_date()
- self.fail_test()
- return result
- def run_built_executable(self, name, *args, **kw):
- """
- Runs an executable built by Visual Studio.
- """
- configuration = self.configuration_dirname()
- # Enclosing the name in a list avoids prepending the original dir.
- program = [self.built_file_path(name, type=self.EXECUTABLE, **kw)]
- return self.run(program=program, *args, **kw)
- def built_file_path(self, name, type=None, **kw):
- """
- Returns a path to the specified file name, of the specified type,
- as built by Visual Studio.
-
- Built files are in a subdirectory that matches the configuration
- name. The default is 'Default'.
-
- A chdir= keyword argument specifies the source directory
- relative to which the output subdirectory can be found.
-
- "type" values of STATIC_LIB or SHARED_LIB append the necessary
- prefixes and suffixes to a platform-independent library base name.
- """
- result = []
- chdir = kw.get('chdir')
- if chdir:
- result.append(chdir)
- result.append(self.configuration_dirname())
- if type == self.STATIC_LIB:
- result.append('lib')
- result.append(self.built_file_basename(name, type, **kw))
- return self.workpath(*result)
-
-
-class TestGypSCons(TestGypBase):
- """
- Subclass for testing the GYP SCons generator.
- """
- format = 'scons'
- build_tool_list = ['scons', 'scons.py']
- ALL = 'all'
- def build(self, gyp_file, target=None, **kw):
- """
- Runs a scons build using the SCons configuration generated from the
- specified gyp_file.
- """
- arguments = kw.get('arguments', [])[:]
- dirname = os.path.dirname(gyp_file)
- if dirname:
- arguments.extend(['-C', dirname])
- if self.configuration:
- arguments.append('--mode=' + self.configuration)
- if target not in (None, self.DEFAULT):
- arguments.append(target)
- kw['arguments'] = arguments
- return self.run(program=self.build_tool, **kw)
- def up_to_date(self, gyp_file, target=None, **kw):
- """
- Verifies that a build of the specified SCons target is up to date.
- """
- if target in (None, self.DEFAULT):
- up_to_date_targets = 'all'
- else:
- up_to_date_targets = target
- up_to_date_lines = []
- for arg in up_to_date_targets.split():
- up_to_date_lines.append("scons: `%s' is up to date.\n" % arg)
- kw['stdout'] = ''.join(up_to_date_lines)
- arguments = kw.get('arguments', [])[:]
- arguments.append('-Q')
- kw['arguments'] = arguments
- return self.build(gyp_file, target, **kw)
- def run_built_executable(self, name, *args, **kw):
- """
- Runs an executable built by scons.
- """
- configuration = self.configuration_dirname()
- os.environ['LD_LIBRARY_PATH'] = os.path.join(configuration, 'lib')
- # Enclosing the name in a list avoids prepending the original dir.
- program = [self.built_file_path(name, type=self.EXECUTABLE, **kw)]
- return self.run(program=program, *args, **kw)
- def built_file_path(self, name, type=None, **kw):
- """
- Returns a path to the specified file name, of the specified type,
- as built by Scons.
-
- Built files are in a subdirectory that matches the configuration
- name. The default is 'Default'.
-
- A chdir= keyword argument specifies the source directory
- relative to which the output subdirectory can be found.
-
- "type" values of STATIC_LIB or SHARED_LIB append the necessary
- prefixes and suffixes to a platform-independent library base name.
- """
- result = []
- chdir = kw.get('chdir')
- if chdir:
- result.append(chdir)
- result.append(self.configuration_dirname())
- if type in (self.STATIC_LIB, self.SHARED_LIB):
- result.append('lib')
- result.append(self.built_file_basename(name, type, **kw))
- return self.workpath(*result)
-
-
-class TestGypXcode(TestGypBase):
- """
- Subclass for testing the GYP Xcode generator.
- """
- format = 'xcode'
- build_tool_list = ['xcodebuild']
-
- phase_script_execution = ("\n"
- "PhaseScriptExecution /\\S+/Script-[0-9A-F]+\\.sh\n"
- " cd /\\S+\n"
- " /bin/sh -c /\\S+/Script-[0-9A-F]+\\.sh\n"
- "(make: Nothing to be done for `all'\\.\n)?")
-
- strip_up_to_date_expressions = [
- # Various actions or rules can run even when the overall build target
- # is up to date. Strip those phases' GYP-generated output.
- re.compile(phase_script_execution, re.S),
-
- # The message from distcc_pump can trail the "BUILD SUCCEEDED"
- # message, so strip that, too.
- re.compile('__________Shutting down distcc-pump include server\n', re.S),
- ]
-
- up_to_date_endings = (
- 'Checking Dependencies...\n** BUILD SUCCEEDED **\n', # Xcode 3.0/3.1
- 'Check dependencies\n** BUILD SUCCEEDED **\n\n', # Xcode 3.2
- )
-
- def build(self, gyp_file, target=None, **kw):
- """
- Runs an xcodebuild using the .xcodeproj generated from the specified
- gyp_file.
- """
- # Be sure we're working with a copy of 'arguments' since we modify it.
- # The caller may not be expecting it to be modified.
- arguments = kw.get('arguments', [])[:]
- arguments.extend(['-project', gyp_file.replace('.gyp', '.xcodeproj')])
- if target == self.ALL:
- arguments.append('-alltargets',)
- elif target not in (None, self.DEFAULT):
- arguments.extend(['-target', target])
- if self.configuration:
- arguments.extend(['-configuration', self.configuration])
- symroot = kw.get('SYMROOT', '$SRCROOT/build')
- if symroot:
- arguments.append('SYMROOT='+symroot)
- kw['arguments'] = arguments
- return self.run(program=self.build_tool, **kw)
- def up_to_date(self, gyp_file, target=None, **kw):
- """
- Verifies that a build of the specified Xcode target is up to date.
- """
- result = self.build(gyp_file, target, **kw)
- if not result:
- output = self.stdout()
- for expression in self.strip_up_to_date_expressions:
- output = expression.sub('', output)
- if not output.endswith(self.up_to_date_endings):
- self.report_not_up_to_date()
- self.fail_test()
- return result
- def run_built_executable(self, name, *args, **kw):
- """
- Runs an executable built by xcodebuild.
- """
- configuration = self.configuration_dirname()
- os.environ['DYLD_LIBRARY_PATH'] = os.path.join('build', configuration)
- # Enclosing the name in a list avoids prepending the original dir.
- program = [self.built_file_path(name, type=self.EXECUTABLE, **kw)]
- return self.run(program=program, *args, **kw)
- def built_file_path(self, name, type=None, **kw):
- """
- Returns a path to the specified file name, of the specified type,
- as built by Xcode.
-
- Built files are in the subdirectory 'build/{configuration}'.
- The default is 'build/Default'.
-
- A chdir= keyword argument specifies the source directory
- relative to which the output subdirectory can be found.
-
- "type" values of STATIC_LIB or SHARED_LIB append the necessary
- prefixes and suffixes to a platform-independent library base name.
- """
- result = []
- chdir = kw.get('chdir')
- if chdir:
- result.append(chdir)
- configuration = self.configuration_dirname()
- result.extend(['build', configuration])
- result.append(self.built_file_basename(name, type, **kw))
- return self.workpath(*result)
-
-
-format_class_list = [
- TestGypGypd,
- TestGypAndroid,
- TestGypMake,
- TestGypMSVS,
- TestGypNinja,
- TestGypSCons,
- TestGypXcode,
-]
-
-def TestGyp(*args, **kw):
- """
- Returns an appropriate TestGyp* instance for a specified GYP format.
- """
- format = kw.pop('format', os.environ.get('TESTGYP_FORMAT'))
- for format_class in format_class_list:
- if format == format_class.format:
- return format_class(*args, **kw)
- raise Exception, "unknown format %r" % format
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/library/gyptest-shared-obj-install-path.py b/deps/npm/node_modules/node-gyp/gyp/test/library/gyptest-shared-obj-install-path.py
deleted file mode 100755
index 04f32e501..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/library/gyptest-shared-obj-install-path.py
+++ /dev/null
@@ -1,42 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Verifies that .so files that are order only dependencies are specified by
-their install location rather than by their alias.
-"""
-
-# Python 2.5 needs this for the with statement.
-from __future__ import with_statement
-
-import os
-import TestGyp
-
-test = TestGyp.TestGyp(formats=['make'])
-
-test.run_gyp('shared_dependency.gyp',
- chdir='src')
-test.relocate('src', 'relocate/src')
-
-test.build('shared_dependency.gyp', test.ALL, chdir='relocate/src')
-
-if test.format=='android':
- makefile_path = 'relocate/src/GypAndroid.mk'
-else:
- makefile_path = 'relocate/src/Makefile'
-
-with open(makefile_path) as makefile:
- make_contents = makefile.read()
-
-# If we remove the code to generate lib1, Make should still be able
-# to build lib2 since lib1.so already exists.
-make_contents = make_contents.replace('include lib1.target.mk', '')
-with open(makefile_path, 'w') as makefile:
- makefile.write(make_contents)
-
-test.build('shared_dependency.gyp', test.ALL, chdir='relocate/src')
-
-test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/library/gyptest-shared.py b/deps/npm/node_modules/node-gyp/gyp/test/library/gyptest-shared.py
deleted file mode 100755
index a1d2985d9..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/library/gyptest-shared.py
+++ /dev/null
@@ -1,84 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2009 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Verifies simple build of a "Hello, world!" program with shared libraries,
-including verifying that libraries are rebuilt correctly when functions
-move between libraries.
-"""
-
-import TestGyp
-
-test = TestGyp.TestGyp()
-
-test.run_gyp('library.gyp',
- '-Dlibrary=shared_library',
- '-Dmoveable_function=lib1',
- chdir='src')
-
-test.relocate('src', 'relocate/src')
-
-test.build('library.gyp', test.ALL, chdir='relocate/src')
-
-expect = """\
-Hello from program.c
-Hello from lib1.c
-Hello from lib2.c
-Hello from lib1_moveable.c
-"""
-test.run_built_executable('program', chdir='relocate/src', stdout=expect)
-
-
-test.run_gyp('library.gyp',
- '-Dlibrary=shared_library',
- '-Dmoveable_function=lib2',
- chdir='relocate/src')
-
-# Update program.c to force a rebuild.
-test.sleep()
-contents = test.read('relocate/src/program.c')
-contents = contents.replace('Hello', 'Hello again')
-test.write('relocate/src/program.c', contents)
-
-test.build('library.gyp', test.ALL, chdir='relocate/src')
-
-expect = """\
-Hello again from program.c
-Hello from lib1.c
-Hello from lib2.c
-Hello from lib2_moveable.c
-"""
-test.run_built_executable('program', chdir='relocate/src', stdout=expect)
-
-
-test.run_gyp('library.gyp',
- '-Dlibrary=shared_library',
- '-Dmoveable_function=lib1',
- chdir='relocate/src')
-
-# Update program.c to force a rebuild.
-test.sleep()
-contents = test.read('relocate/src/program.c')
-contents = contents.replace('again', 'again again')
-test.write('relocate/src/program.c', contents)
-
-# TODO(sgk): we have to force a rebuild of lib2 so that it weeds out
-# the "moved" module. This should be done in gyp by adding a dependency
-# on the generated .vcproj file itself.
-test.touch('relocate/src/lib2.c')
-
-test.build('library.gyp', test.ALL, chdir='relocate/src')
-
-expect = """\
-Hello again again from program.c
-Hello from lib1.c
-Hello from lib2.c
-Hello from lib1_moveable.c
-"""
-test.run_built_executable('program', chdir='relocate/src', stdout=expect)
-
-
-test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/library/gyptest-static.py b/deps/npm/node_modules/node-gyp/gyp/test/library/gyptest-static.py
deleted file mode 100755
index 4bc71c496..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/library/gyptest-static.py
+++ /dev/null
@@ -1,84 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2009 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Verifies simple build of a "Hello, world!" program with static libraries,
-including verifying that libraries are rebuilt correctly when functions
-move between libraries.
-"""
-
-import TestGyp
-
-test = TestGyp.TestGyp()
-
-test.run_gyp('library.gyp',
- '-Dlibrary=static_library',
- '-Dmoveable_function=lib1',
- chdir='src')
-
-test.relocate('src', 'relocate/src')
-
-test.build('library.gyp', test.ALL, chdir='relocate/src')
-
-expect = """\
-Hello from program.c
-Hello from lib1.c
-Hello from lib2.c
-Hello from lib1_moveable.c
-"""
-test.run_built_executable('program', chdir='relocate/src', stdout=expect)
-
-
-test.run_gyp('library.gyp',
- '-Dlibrary=static_library',
- '-Dmoveable_function=lib2',
- chdir='relocate/src')
-
-# Update program.c to force a rebuild.
-test.sleep()
-contents = test.read('relocate/src/program.c')
-contents = contents.replace('Hello', 'Hello again')
-test.write('relocate/src/program.c', contents)
-
-test.build('library.gyp', test.ALL, chdir='relocate/src')
-
-expect = """\
-Hello again from program.c
-Hello from lib1.c
-Hello from lib2.c
-Hello from lib2_moveable.c
-"""
-test.run_built_executable('program', chdir='relocate/src', stdout=expect)
-
-
-test.run_gyp('library.gyp',
- '-Dlibrary=static_library',
- '-Dmoveable_function=lib1',
- chdir='relocate/src')
-
-# Update program.c and lib2.c to force a rebuild.
-test.sleep()
-contents = test.read('relocate/src/program.c')
-contents = contents.replace('again', 'again again')
-test.write('relocate/src/program.c', contents)
-
-# TODO(sgk): we have to force a rebuild of lib2 so that it weeds out
-# the "moved" module. This should be done in gyp by adding a dependency
-# on the generated .vcproj file itself.
-test.touch('relocate/src/lib2.c')
-
-test.build('library.gyp', test.ALL, chdir='relocate/src')
-
-expect = """\
-Hello again again from program.c
-Hello from lib1.c
-Hello from lib2.c
-Hello from lib1_moveable.c
-"""
-test.run_built_executable('program', chdir='relocate/src', stdout=expect)
-
-
-test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/library/src/lib1.c b/deps/npm/node_modules/node-gyp/gyp/test/library/src/lib1.c
deleted file mode 100644
index 3866b1b84..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/library/src/lib1.c
+++ /dev/null
@@ -1,10 +0,0 @@
-#include <stdio.h>
-
-#ifdef _WIN32
-__declspec(dllexport)
-#endif
-void lib1_function(void)
-{
- fprintf(stdout, "Hello from lib1.c\n");
- fflush(stdout);
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/library/src/lib1_moveable.c b/deps/npm/node_modules/node-gyp/gyp/test/library/src/lib1_moveable.c
deleted file mode 100644
index 5d3cc1d9a..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/library/src/lib1_moveable.c
+++ /dev/null
@@ -1,10 +0,0 @@
-#include <stdio.h>
-
-#ifdef _WIN32
-__declspec(dllexport)
-#endif
-void moveable_function(void)
-{
- fprintf(stdout, "Hello from lib1_moveable.c\n");
- fflush(stdout);
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/library/src/lib2.c b/deps/npm/node_modules/node-gyp/gyp/test/library/src/lib2.c
deleted file mode 100644
index 21dda7265..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/library/src/lib2.c
+++ /dev/null
@@ -1,10 +0,0 @@
-#include <stdio.h>
-
-#ifdef _WIN32
-__declspec(dllexport)
-#endif
-void lib2_function(void)
-{
- fprintf(stdout, "Hello from lib2.c\n");
- fflush(stdout);
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/library/src/lib2_moveable.c b/deps/npm/node_modules/node-gyp/gyp/test/library/src/lib2_moveable.c
deleted file mode 100644
index f645071d1..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/library/src/lib2_moveable.c
+++ /dev/null
@@ -1,10 +0,0 @@
-#include <stdio.h>
-
-#ifdef _WIN32
-__declspec(dllexport)
-#endif
-void moveable_function(void)
-{
- fprintf(stdout, "Hello from lib2_moveable.c\n");
- fflush(stdout);
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/library/src/library.gyp b/deps/npm/node_modules/node-gyp/gyp/test/library/src/library.gyp
deleted file mode 100644
index bc3551642..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/library/src/library.gyp
+++ /dev/null
@@ -1,58 +0,0 @@
-# Copyright (c) 2009 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'variables': {
- 'moveable_function%': 0,
- },
- 'targets': [
- {
- 'target_name': 'program',
- 'type': 'executable',
- 'dependencies': [
- 'lib1',
- 'lib2',
- ],
- 'sources': [
- 'program.c',
- ],
- },
- {
- 'target_name': 'lib1',
- 'type': '<(library)',
- 'sources': [
- 'lib1.c',
- ],
- 'conditions': [
- ['moveable_function=="lib1"', {
- 'sources': [
- 'lib1_moveable.c',
- ],
- }],
- ],
- },
- {
- 'target_name': 'lib2',
- 'type': '<(library)',
- 'sources': [
- 'lib2.c',
- ],
- 'conditions': [
- ['moveable_function=="lib2"', {
- 'sources': [
- 'lib2_moveable.c',
- ],
- }],
- ],
- },
- ],
- 'conditions': [
- ['OS=="linux"', {
- 'target_defaults': {
- # Support 64-bit shared libs (also works fine for 32-bit).
- 'cflags': ['-fPIC'],
- },
- }],
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/library/src/program.c b/deps/npm/node_modules/node-gyp/gyp/test/library/src/program.c
deleted file mode 100644
index d7712cced..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/library/src/program.c
+++ /dev/null
@@ -1,15 +0,0 @@
-#include <stdio.h>
-
-extern void lib1_function(void);
-extern void lib2_function(void);
-extern void moveable_function(void);
-
-int main(int argc, char *argv[])
-{
- fprintf(stdout, "Hello from program.c\n");
- fflush(stdout);
- lib1_function();
- lib2_function();
- moveable_function();
- return 0;
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/library/src/shared_dependency.gyp b/deps/npm/node_modules/node-gyp/gyp/test/library/src/shared_dependency.gyp
deleted file mode 100644
index 7d29f5de5..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/library/src/shared_dependency.gyp
+++ /dev/null
@@ -1,33 +0,0 @@
-# Copyright (c) 2009 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'targets': [
- {
- 'target_name': 'lib1',
- 'type': 'shared_library',
- 'sources': [
- 'lib1.c',
- ],
- },
- {
- 'target_name': 'lib2',
- 'type': 'shared_library',
- 'sources': [
- 'lib2.c',
- ],
- 'dependencies': [
- 'lib1',
- ],
- },
- ],
- 'conditions': [
- ['OS=="linux"', {
- 'target_defaults': {
- # Support 64-bit shared libs (also works fine for 32-bit).
- 'cflags': ['-fPIC'],
- },
- }],
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/link-objects/base.c b/deps/npm/node_modules/node-gyp/gyp/test/link-objects/base.c
deleted file mode 100644
index 2bc29a1b1..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/link-objects/base.c
+++ /dev/null
@@ -1,6 +0,0 @@
-void extra();
-
-int main(int argc, char** argv) {
- extra();
- return 0;
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/link-objects/extra.c b/deps/npm/node_modules/node-gyp/gyp/test/link-objects/extra.c
deleted file mode 100644
index 1d7ee09b1..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/link-objects/extra.c
+++ /dev/null
@@ -1,5 +0,0 @@
-#include <stdio.h>
-
-void extra() {
- printf("PASS\n");
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/link-objects/gyptest-all.py b/deps/npm/node_modules/node-gyp/gyp/test/link-objects/gyptest-all.py
deleted file mode 100755
index 45bd6e189..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/link-objects/gyptest-all.py
+++ /dev/null
@@ -1,28 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2011 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Put an object file on the sources list.
-Expect the result to link ok.
-"""
-
-import TestGyp
-
-import sys
-
-if sys.platform != 'darwin':
- # Currently only works under the linux make build.
- test = TestGyp.TestGyp(formats=['make'])
-
- test.run_gyp('link-objects.gyp')
-
- test.build('link-objects.gyp', test.ALL)
-
- test.run_built_executable('link-objects', stdout="PASS\n")
-
- test.up_to_date('link-objects.gyp', test.ALL)
-
- test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/link-objects/link-objects.gyp b/deps/npm/node_modules/node-gyp/gyp/test/link-objects/link-objects.gyp
deleted file mode 100644
index ab7285553..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/link-objects/link-objects.gyp
+++ /dev/null
@@ -1,24 +0,0 @@
-# Copyright (c) 2009 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'targets': [
- {
- 'target_name': 'link-objects',
- 'type': 'executable',
- 'actions': [
- {
- 'action_name': 'build extra object',
- 'inputs': ['extra.c'],
- 'outputs': ['extra.o'],
- 'action': ['gcc', '-o', 'extra.o', '-c', 'extra.c'],
- 'process_outputs_as_sources': 1,
- },
- ],
- 'sources': [
- 'base.c',
- ],
- },
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/action-envvars/action/action.gyp b/deps/npm/node_modules/node-gyp/gyp/test/mac/action-envvars/action/action.gyp
deleted file mode 100644
index d9d65745c..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/action-envvars/action/action.gyp
+++ /dev/null
@@ -1,34 +0,0 @@
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-{
- 'targets': [
- {
- 'target_name': 'action',
- 'type': 'none',
- 'actions': [
- {
- 'inputs': [ ],
- 'outputs': [
- '<(PRODUCT_DIR)/result',
- '<(SHARED_INTERMEDIATE_DIR)/tempfile',
- ],
- 'action_name': 'Test action',
- 'action': ['./action.sh', '<(SHARED_INTERMEDIATE_DIR)/tempfile' ],
- },
- {
- 'inputs': [
- '<(SHARED_INTERMEDIATE_DIR)/tempfile',
- ],
- 'outputs': [
- '<(PRODUCT_DIR)/other_result',
- ],
- 'action_name': 'Other test action',
- 'action': ['cp', '<(SHARED_INTERMEDIATE_DIR)/tempfile',
- '<(PRODUCT_DIR)/other_result' ],
- },
- ],
- },
- ],
-}
-
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/action-envvars/action/action.sh b/deps/npm/node_modules/node-gyp/gyp/test/mac/action-envvars/action/action.sh
deleted file mode 100755
index 48d5f6bf8..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/action-envvars/action/action.sh
+++ /dev/null
@@ -1,8 +0,0 @@
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-set -e
-
-echo 'Test output' > "${BUILT_PRODUCTS_DIR}/result"
-echo 'Other output' > "$1"
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/app-bundle/TestApp/English.lproj/InfoPlist.strings b/deps/npm/node_modules/node-gyp/gyp/test/mac/app-bundle/TestApp/English.lproj/InfoPlist.strings
deleted file mode 100644
index 452e7fabf..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/app-bundle/TestApp/English.lproj/InfoPlist.strings
+++ /dev/null
@@ -1,3 +0,0 @@
-/* Localized versions of Info.plist keys */
-
-NSHumanReadableCopyright = "Copyright ©2011 Google Inc."
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/app-bundle/TestApp/English.lproj/MainMenu.xib b/deps/npm/node_modules/node-gyp/gyp/test/mac/app-bundle/TestApp/English.lproj/MainMenu.xib
deleted file mode 100644
index 452459678..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/app-bundle/TestApp/English.lproj/MainMenu.xib
+++ /dev/null
@@ -1,4119 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<archive type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="7.10">
- <data>
- <int key="IBDocument.SystemTarget">1060</int>
- <string key="IBDocument.SystemVersion">10A324</string>
- <string key="IBDocument.InterfaceBuilderVersion">719</string>
- <string key="IBDocument.AppKitVersion">1015</string>
- <string key="IBDocument.HIToolboxVersion">418.00</string>
- <object class="NSMutableDictionary" key="IBDocument.PluginVersions">
- <string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string key="NS.object.0">719</string>
- </object>
- <object class="NSMutableArray" key="IBDocument.EditedObjectIDs">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <integer value="371"/>
- <integer value="29"/>
- </object>
- <object class="NSArray" key="IBDocument.PluginDependencies">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- </object>
- <object class="NSMutableDictionary" key="IBDocument.Metadata">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <object class="NSArray" key="dict.sortedKeys" id="0">
- <bool key="EncodedWithXMLCoder">YES</bool>
- </object>
- <object class="NSMutableArray" key="dict.values">
- <bool key="EncodedWithXMLCoder">YES</bool>
- </object>
- </object>
- <object class="NSMutableArray" key="IBDocument.RootObjects" id="1048">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <object class="NSCustomObject" id="1021">
- <string key="NSClassName">NSApplication</string>
- </object>
- <object class="NSCustomObject" id="1014">
- <string key="NSClassName">FirstResponder</string>
- </object>
- <object class="NSCustomObject" id="1050">
- <string key="NSClassName">NSApplication</string>
- </object>
- <object class="NSMenu" id="649796088">
- <string key="NSTitle">AMainMenu</string>
- <object class="NSMutableArray" key="NSMenuItems">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <object class="NSMenuItem" id="694149608">
- <reference key="NSMenu" ref="649796088"/>
- <string key="NSTitle">TestApp</string>
- <string key="NSKeyEquiv"/>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <object class="NSCustomResource" key="NSOnImage" id="35465992">
- <string key="NSClassName">NSImage</string>
- <string key="NSResourceName">NSMenuCheckmark</string>
- </object>
- <object class="NSCustomResource" key="NSMixedImage" id="502551668">
- <string key="NSClassName">NSImage</string>
- <string key="NSResourceName">NSMenuMixedState</string>
- </object>
- <string key="NSAction">submenuAction:</string>
- <object class="NSMenu" key="NSSubmenu" id="110575045">
- <string key="NSTitle">TestApp</string>
- <object class="NSMutableArray" key="NSMenuItems">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <object class="NSMenuItem" id="238522557">
- <reference key="NSMenu" ref="110575045"/>
- <string key="NSTitle">About TestApp</string>
- <string key="NSKeyEquiv"/>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- </object>
- <object class="NSMenuItem" id="304266470">
- <reference key="NSMenu" ref="110575045"/>
- <bool key="NSIsDisabled">YES</bool>
- <bool key="NSIsSeparator">YES</bool>
- <string key="NSTitle"/>
- <string key="NSKeyEquiv"/>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- </object>
- <object class="NSMenuItem" id="609285721">
- <reference key="NSMenu" ref="110575045"/>
- <string key="NSTitle">Preferences…</string>
- <string key="NSKeyEquiv">,</string>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- </object>
- <object class="NSMenuItem" id="481834944">
- <reference key="NSMenu" ref="110575045"/>
- <bool key="NSIsDisabled">YES</bool>
- <bool key="NSIsSeparator">YES</bool>
- <string key="NSTitle"/>
- <string key="NSKeyEquiv"/>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- </object>
- <object class="NSMenuItem" id="1046388886">
- <reference key="NSMenu" ref="110575045"/>
- <string key="NSTitle">Services</string>
- <string key="NSKeyEquiv"/>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- <string key="NSAction">submenuAction:</string>
- <object class="NSMenu" key="NSSubmenu" id="752062318">
- <string key="NSTitle">Services</string>
- <object class="NSMutableArray" key="NSMenuItems">
- <bool key="EncodedWithXMLCoder">YES</bool>
- </object>
- <string key="NSName">_NSServicesMenu</string>
- </object>
- </object>
- <object class="NSMenuItem" id="646227648">
- <reference key="NSMenu" ref="110575045"/>
- <bool key="NSIsDisabled">YES</bool>
- <bool key="NSIsSeparator">YES</bool>
- <string key="NSTitle"/>
- <string key="NSKeyEquiv"/>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- </object>
- <object class="NSMenuItem" id="755159360">
- <reference key="NSMenu" ref="110575045"/>
- <string key="NSTitle">Hide TestApp</string>
- <string key="NSKeyEquiv">h</string>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- </object>
- <object class="NSMenuItem" id="342932134">
- <reference key="NSMenu" ref="110575045"/>
- <string key="NSTitle">Hide Others</string>
- <string key="NSKeyEquiv">h</string>
- <int key="NSKeyEquivModMask">1572864</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- </object>
- <object class="NSMenuItem" id="908899353">
- <reference key="NSMenu" ref="110575045"/>
- <string key="NSTitle">Show All</string>
- <string key="NSKeyEquiv"/>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- </object>
- <object class="NSMenuItem" id="1056857174">
- <reference key="NSMenu" ref="110575045"/>
- <bool key="NSIsDisabled">YES</bool>
- <bool key="NSIsSeparator">YES</bool>
- <string key="NSTitle"/>
- <string key="NSKeyEquiv"/>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- </object>
- <object class="NSMenuItem" id="632727374">
- <reference key="NSMenu" ref="110575045"/>
- <string key="NSTitle">Quit TestApp</string>
- <string key="NSKeyEquiv">q</string>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- </object>
- </object>
- <string key="NSName">_NSAppleMenu</string>
- </object>
- </object>
- <object class="NSMenuItem" id="379814623">
- <reference key="NSMenu" ref="649796088"/>
- <string key="NSTitle">File</string>
- <string key="NSKeyEquiv"/>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- <string key="NSAction">submenuAction:</string>
- <object class="NSMenu" key="NSSubmenu" id="720053764">
- <string key="NSTitle">File</string>
- <object class="NSMutableArray" key="NSMenuItems">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <object class="NSMenuItem" id="705341025">
- <reference key="NSMenu" ref="720053764"/>
- <string key="NSTitle">New</string>
- <string key="NSKeyEquiv">n</string>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- </object>
- <object class="NSMenuItem" id="722745758">
- <reference key="NSMenu" ref="720053764"/>
- <string key="NSTitle">Open…</string>
- <string key="NSKeyEquiv">o</string>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- </object>
- <object class="NSMenuItem" id="1025936716">
- <reference key="NSMenu" ref="720053764"/>
- <string key="NSTitle">Open Recent</string>
- <string key="NSKeyEquiv"/>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- <string key="NSAction">submenuAction:</string>
- <object class="NSMenu" key="NSSubmenu" id="1065607017">
- <string key="NSTitle">Open Recent</string>
- <object class="NSMutableArray" key="NSMenuItems">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <object class="NSMenuItem" id="759406840">
- <reference key="NSMenu" ref="1065607017"/>
- <string key="NSTitle">Clear Menu</string>
- <string key="NSKeyEquiv"/>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- </object>
- </object>
- <string key="NSName">_NSRecentDocumentsMenu</string>
- </object>
- </object>
- <object class="NSMenuItem" id="425164168">
- <reference key="NSMenu" ref="720053764"/>
- <bool key="NSIsDisabled">YES</bool>
- <bool key="NSIsSeparator">YES</bool>
- <string key="NSTitle"/>
- <string key="NSKeyEquiv"/>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- </object>
- <object class="NSMenuItem" id="776162233">
- <reference key="NSMenu" ref="720053764"/>
- <string key="NSTitle">Close</string>
- <string key="NSKeyEquiv">w</string>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- </object>
- <object class="NSMenuItem" id="1023925487">
- <reference key="NSMenu" ref="720053764"/>
- <string key="NSTitle">Save</string>
- <string key="NSKeyEquiv">s</string>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- </object>
- <object class="NSMenuItem" id="117038363">
- <reference key="NSMenu" ref="720053764"/>
- <string key="NSTitle">Save As…</string>
- <string key="NSKeyEquiv">S</string>
- <int key="NSKeyEquivModMask">1179648</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- </object>
- <object class="NSMenuItem" id="579971712">
- <reference key="NSMenu" ref="720053764"/>
- <string key="NSTitle">Revert to Saved</string>
- <string key="NSKeyEquiv"/>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- </object>
- <object class="NSMenuItem" id="1010469920">
- <reference key="NSMenu" ref="720053764"/>
- <bool key="NSIsDisabled">YES</bool>
- <bool key="NSIsSeparator">YES</bool>
- <string key="NSTitle"/>
- <string key="NSKeyEquiv"/>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- </object>
- <object class="NSMenuItem" id="294629803">
- <reference key="NSMenu" ref="720053764"/>
- <string key="NSTitle">Page Setup...</string>
- <string key="NSKeyEquiv">P</string>
- <int key="NSKeyEquivModMask">1179648</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- <string key="NSToolTip"/>
- </object>
- <object class="NSMenuItem" id="49223823">
- <reference key="NSMenu" ref="720053764"/>
- <string key="NSTitle">Print…</string>
- <string key="NSKeyEquiv">p</string>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- </object>
- </object>
- </object>
- </object>
- <object class="NSMenuItem" id="952259628">
- <reference key="NSMenu" ref="649796088"/>
- <string key="NSTitle">Edit</string>
- <string key="NSKeyEquiv"/>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- <string key="NSAction">submenuAction:</string>
- <object class="NSMenu" key="NSSubmenu" id="789758025">
- <string key="NSTitle">Edit</string>
- <object class="NSMutableArray" key="NSMenuItems">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <object class="NSMenuItem" id="1058277027">
- <reference key="NSMenu" ref="789758025"/>
- <string key="NSTitle">Undo</string>
- <string key="NSKeyEquiv">z</string>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- </object>
- <object class="NSMenuItem" id="790794224">
- <reference key="NSMenu" ref="789758025"/>
- <string key="NSTitle">Redo</string>
- <string key="NSKeyEquiv">Z</string>
- <int key="NSKeyEquivModMask">1179648</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- </object>
- <object class="NSMenuItem" id="1040322652">
- <reference key="NSMenu" ref="789758025"/>
- <bool key="NSIsDisabled">YES</bool>
- <bool key="NSIsSeparator">YES</bool>
- <string key="NSTitle"/>
- <string key="NSKeyEquiv"/>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- </object>
- <object class="NSMenuItem" id="296257095">
- <reference key="NSMenu" ref="789758025"/>
- <string key="NSTitle">Cut</string>
- <string key="NSKeyEquiv">x</string>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- </object>
- <object class="NSMenuItem" id="860595796">
- <reference key="NSMenu" ref="789758025"/>
- <string key="NSTitle">Copy</string>
- <string key="NSKeyEquiv">c</string>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- </object>
- <object class="NSMenuItem" id="29853731">
- <reference key="NSMenu" ref="789758025"/>
- <string key="NSTitle">Paste</string>
- <string key="NSKeyEquiv">v</string>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- </object>
- <object class="NSMenuItem" id="82994268">
- <reference key="NSMenu" ref="789758025"/>
- <string key="NSTitle">Paste and Match Style</string>
- <string key="NSKeyEquiv">V</string>
- <int key="NSKeyEquivModMask">1572864</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- </object>
- <object class="NSMenuItem" id="437104165">
- <reference key="NSMenu" ref="789758025"/>
- <string key="NSTitle">Delete</string>
- <string key="NSKeyEquiv"/>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- </object>
- <object class="NSMenuItem" id="583158037">
- <reference key="NSMenu" ref="789758025"/>
- <string key="NSTitle">Select All</string>
- <string key="NSKeyEquiv">a</string>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- </object>
- <object class="NSMenuItem" id="212016141">
- <reference key="NSMenu" ref="789758025"/>
- <bool key="NSIsDisabled">YES</bool>
- <bool key="NSIsSeparator">YES</bool>
- <string key="NSTitle"/>
- <string key="NSKeyEquiv"/>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- </object>
- <object class="NSMenuItem" id="892235320">
- <reference key="NSMenu" ref="789758025"/>
- <string key="NSTitle">Find</string>
- <string key="NSKeyEquiv"/>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- <string key="NSAction">submenuAction:</string>
- <object class="NSMenu" key="NSSubmenu" id="963351320">
- <string key="NSTitle">Find</string>
- <object class="NSMutableArray" key="NSMenuItems">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <object class="NSMenuItem" id="447796847">
- <reference key="NSMenu" ref="963351320"/>
- <string key="NSTitle">Find…</string>
- <string key="NSKeyEquiv">f</string>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- <int key="NSTag">1</int>
- </object>
- <object class="NSMenuItem" id="326711663">
- <reference key="NSMenu" ref="963351320"/>
- <string key="NSTitle">Find Next</string>
- <string key="NSKeyEquiv">g</string>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- <int key="NSTag">2</int>
- </object>
- <object class="NSMenuItem" id="270902937">
- <reference key="NSMenu" ref="963351320"/>
- <string key="NSTitle">Find Previous</string>
- <string key="NSKeyEquiv">G</string>
- <int key="NSKeyEquivModMask">1179648</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- <int key="NSTag">3</int>
- </object>
- <object class="NSMenuItem" id="159080638">
- <reference key="NSMenu" ref="963351320"/>
- <string key="NSTitle">Use Selection for Find</string>
- <string key="NSKeyEquiv">e</string>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- <int key="NSTag">7</int>
- </object>
- <object class="NSMenuItem" id="88285865">
- <reference key="NSMenu" ref="963351320"/>
- <string key="NSTitle">Jump to Selection</string>
- <string key="NSKeyEquiv">j</string>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- </object>
- </object>
- </object>
- </object>
- <object class="NSMenuItem" id="972420730">
- <reference key="NSMenu" ref="789758025"/>
- <string key="NSTitle">Spelling and Grammar</string>
- <string key="NSKeyEquiv"/>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- <string key="NSAction">submenuAction:</string>
- <object class="NSMenu" key="NSSubmenu" id="769623530">
- <string key="NSTitle">Spelling and Grammar</string>
- <object class="NSMutableArray" key="NSMenuItems">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <object class="NSMenuItem" id="679648819">
- <reference key="NSMenu" ref="769623530"/>
- <string key="NSTitle">Show Spelling and Grammar</string>
- <string key="NSKeyEquiv">:</string>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- </object>
- <object class="NSMenuItem" id="96193923">
- <reference key="NSMenu" ref="769623530"/>
- <string key="NSTitle">Check Document Now</string>
- <string key="NSKeyEquiv">;</string>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- </object>
- <object class="NSMenuItem" id="859480356">
- <reference key="NSMenu" ref="769623530"/>
- <bool key="NSIsDisabled">YES</bool>
- <bool key="NSIsSeparator">YES</bool>
- <string key="NSTitle"/>
- <string key="NSKeyEquiv"/>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- </object>
- <object class="NSMenuItem" id="948374510">
- <reference key="NSMenu" ref="769623530"/>
- <string key="NSTitle">Check Spelling While Typing</string>
- <string key="NSKeyEquiv"/>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- </object>
- <object class="NSMenuItem" id="967646866">
- <reference key="NSMenu" ref="769623530"/>
- <string key="NSTitle">Check Grammar With Spelling</string>
- <string key="NSKeyEquiv"/>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- </object>
- <object class="NSMenuItem" id="795346622">
- <reference key="NSMenu" ref="769623530"/>
- <string key="NSTitle">Correct Spelling Automatically</string>
- <string key="NSKeyEquiv"/>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- </object>
- </object>
- </object>
- </object>
- <object class="NSMenuItem" id="507821607">
- <reference key="NSMenu" ref="789758025"/>
- <string key="NSTitle">Substitutions</string>
- <string key="NSKeyEquiv"/>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- <string key="NSAction">submenuAction:</string>
- <object class="NSMenu" key="NSSubmenu" id="698887838">
- <string key="NSTitle">Substitutions</string>
- <object class="NSMutableArray" key="NSMenuItems">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <object class="NSMenuItem" id="65139061">
- <reference key="NSMenu" ref="698887838"/>
- <string key="NSTitle">Show Substitutions</string>
- <string key="NSKeyEquiv"/>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- </object>
- <object class="NSMenuItem" id="19036812">
- <reference key="NSMenu" ref="698887838"/>
- <bool key="NSIsDisabled">YES</bool>
- <bool key="NSIsSeparator">YES</bool>
- <string key="NSTitle"/>
- <string key="NSKeyEquiv"/>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- </object>
- <object class="NSMenuItem" id="605118523">
- <reference key="NSMenu" ref="698887838"/>
- <string key="NSTitle">Smart Copy/Paste</string>
- <string key="NSKeyEquiv">f</string>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- <int key="NSTag">1</int>
- </object>
- <object class="NSMenuItem" id="197661976">
- <reference key="NSMenu" ref="698887838"/>
- <string key="NSTitle">Smart Quotes</string>
- <string key="NSKeyEquiv">g</string>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- <int key="NSTag">2</int>
- </object>
- <object class="NSMenuItem" id="672708820">
- <reference key="NSMenu" ref="698887838"/>
- <string key="NSTitle">Smart Dashes</string>
- <string key="NSKeyEquiv"/>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- </object>
- <object class="NSMenuItem" id="708854459">
- <reference key="NSMenu" ref="698887838"/>
- <string key="NSTitle">Smart Links</string>
- <string key="NSKeyEquiv">G</string>
- <int key="NSKeyEquivModMask">1179648</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- <int key="NSTag">3</int>
- </object>
- <object class="NSMenuItem" id="537092702">
- <reference key="NSMenu" ref="698887838"/>
- <string key="NSTitle">Text Replacement</string>
- <string key="NSKeyEquiv"/>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- </object>
- </object>
- </object>
- </object>
- <object class="NSMenuItem" id="288088188">
- <reference key="NSMenu" ref="789758025"/>
- <string key="NSTitle">Transformations</string>
- <string key="NSKeyEquiv"/>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- <string key="NSAction">submenuAction:</string>
- <object class="NSMenu" key="NSSubmenu" id="579392910">
- <string key="NSTitle">Transformations</string>
- <object class="NSMutableArray" key="NSMenuItems">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <object class="NSMenuItem" id="1060694897">
- <reference key="NSMenu" ref="579392910"/>
- <string key="NSTitle">Make Upper Case</string>
- <string key="NSKeyEquiv"/>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- </object>
- <object class="NSMenuItem" id="879586729">
- <reference key="NSMenu" ref="579392910"/>
- <string key="NSTitle">Make Lower Case</string>
- <string key="NSKeyEquiv"/>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- </object>
- <object class="NSMenuItem" id="56570060">
- <reference key="NSMenu" ref="579392910"/>
- <string key="NSTitle">Capitalize</string>
- <string key="NSKeyEquiv"/>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- </object>
- </object>
- </object>
- </object>
- <object class="NSMenuItem" id="676164635">
- <reference key="NSMenu" ref="789758025"/>
- <string key="NSTitle">Speech</string>
- <string key="NSKeyEquiv"/>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- <string key="NSAction">submenuAction:</string>
- <object class="NSMenu" key="NSSubmenu" id="785027613">
- <string key="NSTitle">Speech</string>
- <object class="NSMutableArray" key="NSMenuItems">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <object class="NSMenuItem" id="731782645">
- <reference key="NSMenu" ref="785027613"/>
- <string key="NSTitle">Start Speaking</string>
- <string key="NSKeyEquiv"/>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- </object>
- <object class="NSMenuItem" id="680220178">
- <reference key="NSMenu" ref="785027613"/>
- <string key="NSTitle">Stop Speaking</string>
- <string key="NSKeyEquiv"/>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- </object>
- </object>
- </object>
- </object>
- </object>
- </object>
- </object>
- <object class="NSMenuItem" id="302598603">
- <reference key="NSMenu" ref="649796088"/>
- <string key="NSTitle">Format</string>
- <string key="NSKeyEquiv"/>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- <string key="NSAction">submenuAction:</string>
- <object class="NSMenu" key="NSSubmenu" id="941447902">
- <string key="NSTitle">Format</string>
- <object class="NSMutableArray" key="NSMenuItems">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <object class="NSMenuItem" id="792887677">
- <reference key="NSMenu" ref="941447902"/>
- <string key="NSTitle">Font</string>
- <string key="NSKeyEquiv"/>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- <string key="NSAction">submenuAction:</string>
- <object class="NSMenu" key="NSSubmenu" id="786677654">
- <string key="NSTitle">Font</string>
- <object class="NSMutableArray" key="NSMenuItems">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <object class="NSMenuItem" id="159677712">
- <reference key="NSMenu" ref="786677654"/>
- <string key="NSTitle">Show Fonts</string>
- <string key="NSKeyEquiv">t</string>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- </object>
- <object class="NSMenuItem" id="305399458">
- <reference key="NSMenu" ref="786677654"/>
- <string key="NSTitle">Bold</string>
- <string key="NSKeyEquiv">b</string>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- <int key="NSTag">2</int>
- </object>
- <object class="NSMenuItem" id="814362025">
- <reference key="NSMenu" ref="786677654"/>
- <string key="NSTitle">Italic</string>
- <string key="NSKeyEquiv">i</string>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- <int key="NSTag">1</int>
- </object>
- <object class="NSMenuItem" id="330926929">
- <reference key="NSMenu" ref="786677654"/>
- <string key="NSTitle">Underline</string>
- <string key="NSKeyEquiv">u</string>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- </object>
- <object class="NSMenuItem" id="533507878">
- <reference key="NSMenu" ref="786677654"/>
- <bool key="NSIsDisabled">YES</bool>
- <bool key="NSIsSeparator">YES</bool>
- <string key="NSTitle"/>
- <string key="NSKeyEquiv"/>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- </object>
- <object class="NSMenuItem" id="158063935">
- <reference key="NSMenu" ref="786677654"/>
- <string key="NSTitle">Bigger</string>
- <string key="NSKeyEquiv">+</string>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- <int key="NSTag">3</int>
- </object>
- <object class="NSMenuItem" id="885547335">
- <reference key="NSMenu" ref="786677654"/>
- <string key="NSTitle">Smaller</string>
- <string key="NSKeyEquiv">-</string>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- <int key="NSTag">4</int>
- </object>
- <object class="NSMenuItem" id="901062459">
- <reference key="NSMenu" ref="786677654"/>
- <bool key="NSIsDisabled">YES</bool>
- <bool key="NSIsSeparator">YES</bool>
- <string key="NSTitle"/>
- <string key="NSKeyEquiv"/>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- </object>
- <object class="NSMenuItem" id="767671776">
- <reference key="NSMenu" ref="786677654"/>
- <string key="NSTitle">Kern</string>
- <string key="NSKeyEquiv"/>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- <string key="NSAction">submenuAction:</string>
- <object class="NSMenu" key="NSSubmenu" id="175441468">
- <string key="NSTitle">Kern</string>
- <object class="NSMutableArray" key="NSMenuItems">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <object class="NSMenuItem" id="252969304">
- <reference key="NSMenu" ref="175441468"/>
- <string key="NSTitle">Use Default</string>
- <string key="NSKeyEquiv"/>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- </object>
- <object class="NSMenuItem" id="766922938">
- <reference key="NSMenu" ref="175441468"/>
- <string key="NSTitle">Use None</string>
- <string key="NSKeyEquiv"/>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- </object>
- <object class="NSMenuItem" id="677519740">
- <reference key="NSMenu" ref="175441468"/>
- <string key="NSTitle">Tighten</string>
- <string key="NSKeyEquiv"/>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- </object>
- <object class="NSMenuItem" id="238351151">
- <reference key="NSMenu" ref="175441468"/>
- <string key="NSTitle">Loosen</string>
- <string key="NSKeyEquiv"/>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- </object>
- </object>
- </object>
- </object>
- <object class="NSMenuItem" id="691570813">
- <reference key="NSMenu" ref="786677654"/>
- <string key="NSTitle">Ligature</string>
- <string key="NSKeyEquiv"/>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- <string key="NSAction">submenuAction:</string>
- <object class="NSMenu" key="NSSubmenu" id="1058217995">
- <string key="NSTitle">Ligature</string>
- <object class="NSMutableArray" key="NSMenuItems">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <object class="NSMenuItem" id="706297211">
- <reference key="NSMenu" ref="1058217995"/>
- <string key="NSTitle">Use Default</string>
- <string key="NSKeyEquiv"/>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- </object>
- <object class="NSMenuItem" id="568384683">
- <reference key="NSMenu" ref="1058217995"/>
- <string key="NSTitle">Use None</string>
- <string key="NSKeyEquiv"/>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- </object>
- <object class="NSMenuItem" id="663508465">
- <reference key="NSMenu" ref="1058217995"/>
- <string key="NSTitle">Use All</string>
- <string key="NSKeyEquiv"/>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- </object>
- </object>
- </object>
- </object>
- <object class="NSMenuItem" id="769124883">
- <reference key="NSMenu" ref="786677654"/>
- <string key="NSTitle">Baseline</string>
- <string key="NSKeyEquiv"/>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- <string key="NSAction">submenuAction:</string>
- <object class="NSMenu" key="NSSubmenu" id="18263474">
- <string key="NSTitle">Baseline</string>
- <object class="NSMutableArray" key="NSMenuItems">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <object class="NSMenuItem" id="257962622">
- <reference key="NSMenu" ref="18263474"/>
- <string key="NSTitle">Use Default</string>
- <string key="NSKeyEquiv"/>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- </object>
- <object class="NSMenuItem" id="644725453">
- <reference key="NSMenu" ref="18263474"/>
- <string key="NSTitle">Superscript</string>
- <string key="NSKeyEquiv"/>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- </object>
- <object class="NSMenuItem" id="1037576581">
- <reference key="NSMenu" ref="18263474"/>
- <string key="NSTitle">Subscript</string>
- <string key="NSKeyEquiv"/>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- </object>
- <object class="NSMenuItem" id="941806246">
- <reference key="NSMenu" ref="18263474"/>
- <string key="NSTitle">Raise</string>
- <string key="NSKeyEquiv"/>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- </object>
- <object class="NSMenuItem" id="1045724900">
- <reference key="NSMenu" ref="18263474"/>
- <string key="NSTitle">Lower</string>
- <string key="NSKeyEquiv"/>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- </object>
- </object>
- </object>
- </object>
- <object class="NSMenuItem" id="739652853">
- <reference key="NSMenu" ref="786677654"/>
- <bool key="NSIsDisabled">YES</bool>
- <bool key="NSIsSeparator">YES</bool>
- <string key="NSTitle"/>
- <string key="NSKeyEquiv"/>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- </object>
- <object class="NSMenuItem" id="1012600125">
- <reference key="NSMenu" ref="786677654"/>
- <string key="NSTitle">Show Colors</string>
- <string key="NSKeyEquiv">C</string>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- </object>
- <object class="NSMenuItem" id="214559597">
- <reference key="NSMenu" ref="786677654"/>
- <bool key="NSIsDisabled">YES</bool>
- <bool key="NSIsSeparator">YES</bool>
- <string key="NSTitle"/>
- <string key="NSKeyEquiv"/>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- </object>
- <object class="NSMenuItem" id="596732606">
- <reference key="NSMenu" ref="786677654"/>
- <string key="NSTitle">Copy Style</string>
- <string key="NSKeyEquiv">c</string>
- <int key="NSKeyEquivModMask">1572864</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- </object>
- <object class="NSMenuItem" id="393423671">
- <reference key="NSMenu" ref="786677654"/>
- <string key="NSTitle">Paste Style</string>
- <string key="NSKeyEquiv">v</string>
- <int key="NSKeyEquivModMask">1572864</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- </object>
- </object>
- <string key="NSName">_NSFontMenu</string>
- </object>
- </object>
- <object class="NSMenuItem" id="215659978">
- <reference key="NSMenu" ref="941447902"/>
- <string key="NSTitle">Text</string>
- <string key="NSKeyEquiv"/>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- <string key="NSAction">submenuAction:</string>
- <object class="NSMenu" key="NSSubmenu" id="446991534">
- <string key="NSTitle">Text</string>
- <object class="NSMutableArray" key="NSMenuItems">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <object class="NSMenuItem" id="875092757">
- <reference key="NSMenu" ref="446991534"/>
- <string key="NSTitle">Align Left</string>
- <string key="NSKeyEquiv">{</string>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- </object>
- <object class="NSMenuItem" id="630155264">
- <reference key="NSMenu" ref="446991534"/>
- <string key="NSTitle">Center</string>
- <string key="NSKeyEquiv">|</string>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- </object>
- <object class="NSMenuItem" id="945678886">
- <reference key="NSMenu" ref="446991534"/>
- <string key="NSTitle">Justify</string>
- <string key="NSKeyEquiv"/>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- </object>
- <object class="NSMenuItem" id="512868991">
- <reference key="NSMenu" ref="446991534"/>
- <string key="NSTitle">Align Right</string>
- <string key="NSKeyEquiv">}</string>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- </object>
- <object class="NSMenuItem" id="163117631">
- <reference key="NSMenu" ref="446991534"/>
- <bool key="NSIsDisabled">YES</bool>
- <bool key="NSIsSeparator">YES</bool>
- <string key="NSTitle"/>
- <string key="NSKeyEquiv"/>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- </object>
- <object class="NSMenuItem" id="31516759">
- <reference key="NSMenu" ref="446991534"/>
- <string key="NSTitle">Writing Direction</string>
- <string key="NSKeyEquiv"/>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- <string key="NSAction">submenuAction:</string>
- <object class="NSMenu" key="NSSubmenu" id="956096989">
- <string key="NSTitle">Writing Direction</string>
- <object class="NSMutableArray" key="NSMenuItems">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <object class="NSMenuItem" id="257099033">
- <reference key="NSMenu" ref="956096989"/>
- <bool key="NSIsDisabled">YES</bool>
- <string key="NSTitle">Paragraph</string>
- <string key="NSKeyEquiv"/>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- </object>
- <object class="NSMenuItem" id="551969625">
- <reference key="NSMenu" ref="956096989"/>
- <string type="base64-UTF8" key="NSTitle">CURlZmF1bHQ</string>
- <string key="NSKeyEquiv"/>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- </object>
- <object class="NSMenuItem" id="249532473">
- <reference key="NSMenu" ref="956096989"/>
- <string type="base64-UTF8" key="NSTitle">CUxlZnQgdG8gUmlnaHQ</string>
- <string key="NSKeyEquiv"/>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- </object>
- <object class="NSMenuItem" id="607364498">
- <reference key="NSMenu" ref="956096989"/>
- <string type="base64-UTF8" key="NSTitle">CVJpZ2h0IHRvIExlZnQ</string>
- <string key="NSKeyEquiv"/>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- </object>
- <object class="NSMenuItem" id="508151438">
- <reference key="NSMenu" ref="956096989"/>
- <bool key="NSIsDisabled">YES</bool>
- <bool key="NSIsSeparator">YES</bool>
- <string key="NSTitle"/>
- <string key="NSKeyEquiv"/>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- </object>
- <object class="NSMenuItem" id="981751889">
- <reference key="NSMenu" ref="956096989"/>
- <bool key="NSIsDisabled">YES</bool>
- <string key="NSTitle">Selection</string>
- <string key="NSKeyEquiv"/>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- </object>
- <object class="NSMenuItem" id="380031999">
- <reference key="NSMenu" ref="956096989"/>
- <string type="base64-UTF8" key="NSTitle">CURlZmF1bHQ</string>
- <string key="NSKeyEquiv"/>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- </object>
- <object class="NSMenuItem" id="825984362">
- <reference key="NSMenu" ref="956096989"/>
- <string type="base64-UTF8" key="NSTitle">CUxlZnQgdG8gUmlnaHQ</string>
- <string key="NSKeyEquiv"/>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- </object>
- <object class="NSMenuItem" id="560145579">
- <reference key="NSMenu" ref="956096989"/>
- <string type="base64-UTF8" key="NSTitle">CVJpZ2h0IHRvIExlZnQ</string>
- <string key="NSKeyEquiv"/>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- </object>
- </object>
- </object>
- </object>
- <object class="NSMenuItem" id="908105787">
- <reference key="NSMenu" ref="446991534"/>
- <bool key="NSIsDisabled">YES</bool>
- <bool key="NSIsSeparator">YES</bool>
- <string key="NSTitle"/>
- <string key="NSKeyEquiv"/>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- </object>
- <object class="NSMenuItem" id="644046920">
- <reference key="NSMenu" ref="446991534"/>
- <string key="NSTitle">Show Ruler</string>
- <string key="NSKeyEquiv"/>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- </object>
- <object class="NSMenuItem" id="231811626">
- <reference key="NSMenu" ref="446991534"/>
- <string key="NSTitle">Copy Ruler</string>
- <string key="NSKeyEquiv">c</string>
- <int key="NSKeyEquivModMask">1310720</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- </object>
- <object class="NSMenuItem" id="883618387">
- <reference key="NSMenu" ref="446991534"/>
- <string key="NSTitle">Paste Ruler</string>
- <string key="NSKeyEquiv">v</string>
- <int key="NSKeyEquivModMask">1310720</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- </object>
- </object>
- </object>
- </object>
- </object>
- </object>
- </object>
- <object class="NSMenuItem" id="586577488">
- <reference key="NSMenu" ref="649796088"/>
- <string key="NSTitle">View</string>
- <string key="NSKeyEquiv"/>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- <string key="NSAction">submenuAction:</string>
- <object class="NSMenu" key="NSSubmenu" id="466310130">
- <string key="NSTitle">View</string>
- <object class="NSMutableArray" key="NSMenuItems">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <object class="NSMenuItem" id="102151532">
- <reference key="NSMenu" ref="466310130"/>
- <string key="NSTitle">Show Toolbar</string>
- <string key="NSKeyEquiv">t</string>
- <int key="NSKeyEquivModMask">1572864</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- </object>
- <object class="NSMenuItem" id="237841660">
- <reference key="NSMenu" ref="466310130"/>
- <string key="NSTitle">Customize Toolbar…</string>
- <string key="NSKeyEquiv"/>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- </object>
- </object>
- </object>
- </object>
- <object class="NSMenuItem" id="713487014">
- <reference key="NSMenu" ref="649796088"/>
- <string key="NSTitle">Window</string>
- <string key="NSKeyEquiv"/>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- <string key="NSAction">submenuAction:</string>
- <object class="NSMenu" key="NSSubmenu" id="835318025">
- <string key="NSTitle">Window</string>
- <object class="NSMutableArray" key="NSMenuItems">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <object class="NSMenuItem" id="1011231497">
- <reference key="NSMenu" ref="835318025"/>
- <string key="NSTitle">Minimize</string>
- <string key="NSKeyEquiv">m</string>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- </object>
- <object class="NSMenuItem" id="575023229">
- <reference key="NSMenu" ref="835318025"/>
- <string key="NSTitle">Zoom</string>
- <string key="NSKeyEquiv"/>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- </object>
- <object class="NSMenuItem" id="299356726">
- <reference key="NSMenu" ref="835318025"/>
- <bool key="NSIsDisabled">YES</bool>
- <bool key="NSIsSeparator">YES</bool>
- <string key="NSTitle"/>
- <string key="NSKeyEquiv"/>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- </object>
- <object class="NSMenuItem" id="625202149">
- <reference key="NSMenu" ref="835318025"/>
- <string key="NSTitle">Bring All to Front</string>
- <string key="NSKeyEquiv"/>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- </object>
- </object>
- <string key="NSName">_NSWindowsMenu</string>
- </object>
- </object>
- <object class="NSMenuItem" id="448692316">
- <reference key="NSMenu" ref="649796088"/>
- <string key="NSTitle">Help</string>
- <string key="NSKeyEquiv"/>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- <string key="NSAction">submenuAction:</string>
- <object class="NSMenu" key="NSSubmenu" id="992780483">
- <string key="NSTitle">Help</string>
- <object class="NSMutableArray" key="NSMenuItems">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <object class="NSMenuItem" id="105068016">
- <reference key="NSMenu" ref="992780483"/>
- <string key="NSTitle">TestApp Help</string>
- <string key="NSKeyEquiv">?</string>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="35465992"/>
- <reference key="NSMixedImage" ref="502551668"/>
- </object>
- </object>
- <string key="NSName">_NSHelpMenu</string>
- </object>
- </object>
- </object>
- <string key="NSName">_NSMainMenu</string>
- </object>
- <object class="NSWindowTemplate" id="972006081">
- <int key="NSWindowStyleMask">15</int>
- <int key="NSWindowBacking">2</int>
- <string key="NSWindowRect">{{335, 390}, {480, 360}}</string>
- <int key="NSWTFlags">1954021376</int>
- <string key="NSWindowTitle">TestApp</string>
- <string key="NSWindowClass">NSWindow</string>
- <nil key="NSViewClass"/>
- <string key="NSWindowContentMaxSize">{1.79769e+308, 1.79769e+308}</string>
- <object class="NSView" key="NSWindowView" id="439893737">
- <reference key="NSNextResponder"/>
- <int key="NSvFlags">256</int>
- <string key="NSFrameSize">{480, 360}</string>
- <reference key="NSSuperview"/>
- </object>
- <string key="NSScreenRect">{{0, 0}, {1920, 1178}}</string>
- <string key="NSMaxSize">{1.79769e+308, 1.79769e+308}</string>
- </object>
- <object class="NSCustomObject" id="976324537">
- <string key="NSClassName">TestAppAppDelegate</string>
- </object>
- <object class="NSCustomObject" id="755631768">
- <string key="NSClassName">NSFontManager</string>
- </object>
- </object>
- <object class="IBObjectContainer" key="IBDocument.Objects">
- <object class="NSMutableArray" key="connectionRecords">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">performMiniaturize:</string>
- <reference key="source" ref="1014"/>
- <reference key="destination" ref="1011231497"/>
- </object>
- <int key="connectionID">37</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">arrangeInFront:</string>
- <reference key="source" ref="1014"/>
- <reference key="destination" ref="625202149"/>
- </object>
- <int key="connectionID">39</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">print:</string>
- <reference key="source" ref="1014"/>
- <reference key="destination" ref="49223823"/>
- </object>
- <int key="connectionID">86</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">runPageLayout:</string>
- <reference key="source" ref="1014"/>
- <reference key="destination" ref="294629803"/>
- </object>
- <int key="connectionID">87</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">clearRecentDocuments:</string>
- <reference key="source" ref="1014"/>
- <reference key="destination" ref="759406840"/>
- </object>
- <int key="connectionID">127</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">orderFrontStandardAboutPanel:</string>
- <reference key="source" ref="1021"/>
- <reference key="destination" ref="238522557"/>
- </object>
- <int key="connectionID">142</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">performClose:</string>
- <reference key="source" ref="1014"/>
- <reference key="destination" ref="776162233"/>
- </object>
- <int key="connectionID">193</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">toggleContinuousSpellChecking:</string>
- <reference key="source" ref="1014"/>
- <reference key="destination" ref="948374510"/>
- </object>
- <int key="connectionID">222</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">undo:</string>
- <reference key="source" ref="1014"/>
- <reference key="destination" ref="1058277027"/>
- </object>
- <int key="connectionID">223</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">copy:</string>
- <reference key="source" ref="1014"/>
- <reference key="destination" ref="860595796"/>
- </object>
- <int key="connectionID">224</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">checkSpelling:</string>
- <reference key="source" ref="1014"/>
- <reference key="destination" ref="96193923"/>
- </object>
- <int key="connectionID">225</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">paste:</string>
- <reference key="source" ref="1014"/>
- <reference key="destination" ref="29853731"/>
- </object>
- <int key="connectionID">226</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">stopSpeaking:</string>
- <reference key="source" ref="1014"/>
- <reference key="destination" ref="680220178"/>
- </object>
- <int key="connectionID">227</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">cut:</string>
- <reference key="source" ref="1014"/>
- <reference key="destination" ref="296257095"/>
- </object>
- <int key="connectionID">228</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">showGuessPanel:</string>
- <reference key="source" ref="1014"/>
- <reference key="destination" ref="679648819"/>
- </object>
- <int key="connectionID">230</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">redo:</string>
- <reference key="source" ref="1014"/>
- <reference key="destination" ref="790794224"/>
- </object>
- <int key="connectionID">231</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">selectAll:</string>
- <reference key="source" ref="1014"/>
- <reference key="destination" ref="583158037"/>
- </object>
- <int key="connectionID">232</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">startSpeaking:</string>
- <reference key="source" ref="1014"/>
- <reference key="destination" ref="731782645"/>
- </object>
- <int key="connectionID">233</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">delete:</string>
- <reference key="source" ref="1014"/>
- <reference key="destination" ref="437104165"/>
- </object>
- <int key="connectionID">235</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">performZoom:</string>
- <reference key="source" ref="1014"/>
- <reference key="destination" ref="575023229"/>
- </object>
- <int key="connectionID">240</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">performFindPanelAction:</string>
- <reference key="source" ref="1014"/>
- <reference key="destination" ref="447796847"/>
- </object>
- <int key="connectionID">241</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">centerSelectionInVisibleArea:</string>
- <reference key="source" ref="1014"/>
- <reference key="destination" ref="88285865"/>
- </object>
- <int key="connectionID">245</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">toggleGrammarChecking:</string>
- <reference key="source" ref="1014"/>
- <reference key="destination" ref="967646866"/>
- </object>
- <int key="connectionID">347</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">toggleSmartInsertDelete:</string>
- <reference key="source" ref="1014"/>
- <reference key="destination" ref="605118523"/>
- </object>
- <int key="connectionID">355</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">toggleAutomaticQuoteSubstitution:</string>
- <reference key="source" ref="1014"/>
- <reference key="destination" ref="197661976"/>
- </object>
- <int key="connectionID">356</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">toggleAutomaticLinkDetection:</string>
- <reference key="source" ref="1014"/>
- <reference key="destination" ref="708854459"/>
- </object>
- <int key="connectionID">357</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">saveDocument:</string>
- <reference key="source" ref="1014"/>
- <reference key="destination" ref="1023925487"/>
- </object>
- <int key="connectionID">362</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">saveDocumentAs:</string>
- <reference key="source" ref="1014"/>
- <reference key="destination" ref="117038363"/>
- </object>
- <int key="connectionID">363</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">revertDocumentToSaved:</string>
- <reference key="source" ref="1014"/>
- <reference key="destination" ref="579971712"/>
- </object>
- <int key="connectionID">364</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">runToolbarCustomizationPalette:</string>
- <reference key="source" ref="1014"/>
- <reference key="destination" ref="237841660"/>
- </object>
- <int key="connectionID">365</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">toggleToolbarShown:</string>
- <reference key="source" ref="1014"/>
- <reference key="destination" ref="102151532"/>
- </object>
- <int key="connectionID">366</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">hide:</string>
- <reference key="source" ref="1014"/>
- <reference key="destination" ref="755159360"/>
- </object>
- <int key="connectionID">367</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">hideOtherApplications:</string>
- <reference key="source" ref="1014"/>
- <reference key="destination" ref="342932134"/>
- </object>
- <int key="connectionID">368</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">unhideAllApplications:</string>
- <reference key="source" ref="1014"/>
- <reference key="destination" ref="908899353"/>
- </object>
- <int key="connectionID">370</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">newDocument:</string>
- <reference key="source" ref="1014"/>
- <reference key="destination" ref="705341025"/>
- </object>
- <int key="connectionID">373</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">openDocument:</string>
- <reference key="source" ref="1014"/>
- <reference key="destination" ref="722745758"/>
- </object>
- <int key="connectionID">374</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">addFontTrait:</string>
- <reference key="source" ref="755631768"/>
- <reference key="destination" ref="305399458"/>
- </object>
- <int key="connectionID">421</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">addFontTrait:</string>
- <reference key="source" ref="755631768"/>
- <reference key="destination" ref="814362025"/>
- </object>
- <int key="connectionID">422</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">modifyFont:</string>
- <reference key="source" ref="755631768"/>
- <reference key="destination" ref="885547335"/>
- </object>
- <int key="connectionID">423</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">orderFrontFontPanel:</string>
- <reference key="source" ref="755631768"/>
- <reference key="destination" ref="159677712"/>
- </object>
- <int key="connectionID">424</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">modifyFont:</string>
- <reference key="source" ref="755631768"/>
- <reference key="destination" ref="158063935"/>
- </object>
- <int key="connectionID">425</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">raiseBaseline:</string>
- <reference key="source" ref="1014"/>
- <reference key="destination" ref="941806246"/>
- </object>
- <int key="connectionID">426</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">lowerBaseline:</string>
- <reference key="source" ref="1014"/>
- <reference key="destination" ref="1045724900"/>
- </object>
- <int key="connectionID">427</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">copyFont:</string>
- <reference key="source" ref="1014"/>
- <reference key="destination" ref="596732606"/>
- </object>
- <int key="connectionID">428</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">subscript:</string>
- <reference key="source" ref="1014"/>
- <reference key="destination" ref="1037576581"/>
- </object>
- <int key="connectionID">429</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">superscript:</string>
- <reference key="source" ref="1014"/>
- <reference key="destination" ref="644725453"/>
- </object>
- <int key="connectionID">430</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">tightenKerning:</string>
- <reference key="source" ref="1014"/>
- <reference key="destination" ref="677519740"/>
- </object>
- <int key="connectionID">431</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">underline:</string>
- <reference key="source" ref="1014"/>
- <reference key="destination" ref="330926929"/>
- </object>
- <int key="connectionID">432</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">orderFrontColorPanel:</string>
- <reference key="source" ref="1014"/>
- <reference key="destination" ref="1012600125"/>
- </object>
- <int key="connectionID">433</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">useAllLigatures:</string>
- <reference key="source" ref="1014"/>
- <reference key="destination" ref="663508465"/>
- </object>
- <int key="connectionID">434</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">loosenKerning:</string>
- <reference key="source" ref="1014"/>
- <reference key="destination" ref="238351151"/>
- </object>
- <int key="connectionID">435</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">pasteFont:</string>
- <reference key="source" ref="1014"/>
- <reference key="destination" ref="393423671"/>
- </object>
- <int key="connectionID">436</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">unscript:</string>
- <reference key="source" ref="1014"/>
- <reference key="destination" ref="257962622"/>
- </object>
- <int key="connectionID">437</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">useStandardKerning:</string>
- <reference key="source" ref="1014"/>
- <reference key="destination" ref="252969304"/>
- </object>
- <int key="connectionID">438</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">useStandardLigatures:</string>
- <reference key="source" ref="1014"/>
- <reference key="destination" ref="706297211"/>
- </object>
- <int key="connectionID">439</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">turnOffLigatures:</string>
- <reference key="source" ref="1014"/>
- <reference key="destination" ref="568384683"/>
- </object>
- <int key="connectionID">440</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">turnOffKerning:</string>
- <reference key="source" ref="1014"/>
- <reference key="destination" ref="766922938"/>
- </object>
- <int key="connectionID">441</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">terminate:</string>
- <reference key="source" ref="1050"/>
- <reference key="destination" ref="632727374"/>
- </object>
- <int key="connectionID">449</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">toggleAutomaticSpellingCorrection:</string>
- <reference key="source" ref="1014"/>
- <reference key="destination" ref="795346622"/>
- </object>
- <int key="connectionID">456</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">orderFrontSubstitutionsPanel:</string>
- <reference key="source" ref="1014"/>
- <reference key="destination" ref="65139061"/>
- </object>
- <int key="connectionID">458</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">toggleAutomaticDashSubstitution:</string>
- <reference key="source" ref="1014"/>
- <reference key="destination" ref="672708820"/>
- </object>
- <int key="connectionID">461</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">toggleAutomaticTextReplacement:</string>
- <reference key="source" ref="1014"/>
- <reference key="destination" ref="537092702"/>
- </object>
- <int key="connectionID">463</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">uppercaseWord:</string>
- <reference key="source" ref="1014"/>
- <reference key="destination" ref="1060694897"/>
- </object>
- <int key="connectionID">464</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">capitalizeWord:</string>
- <reference key="source" ref="1014"/>
- <reference key="destination" ref="56570060"/>
- </object>
- <int key="connectionID">467</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">lowercaseWord:</string>
- <reference key="source" ref="1014"/>
- <reference key="destination" ref="879586729"/>
- </object>
- <int key="connectionID">468</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">pasteAsPlainText:</string>
- <reference key="source" ref="1014"/>
- <reference key="destination" ref="82994268"/>
- </object>
- <int key="connectionID">486</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">performFindPanelAction:</string>
- <reference key="source" ref="1014"/>
- <reference key="destination" ref="326711663"/>
- </object>
- <int key="connectionID">487</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">performFindPanelAction:</string>
- <reference key="source" ref="1014"/>
- <reference key="destination" ref="270902937"/>
- </object>
- <int key="connectionID">488</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">performFindPanelAction:</string>
- <reference key="source" ref="1014"/>
- <reference key="destination" ref="159080638"/>
- </object>
- <int key="connectionID">489</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">showHelp:</string>
- <reference key="source" ref="1014"/>
- <reference key="destination" ref="105068016"/>
- </object>
- <int key="connectionID">493</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBOutletConnection" key="connection">
- <string key="label">delegate</string>
- <reference key="source" ref="1021"/>
- <reference key="destination" ref="976324537"/>
- </object>
- <int key="connectionID">495</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">alignCenter:</string>
- <reference key="source" ref="1014"/>
- <reference key="destination" ref="630155264"/>
- </object>
- <int key="connectionID">518</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">pasteRuler:</string>
- <reference key="source" ref="1014"/>
- <reference key="destination" ref="883618387"/>
- </object>
- <int key="connectionID">519</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">toggleRuler:</string>
- <reference key="source" ref="1014"/>
- <reference key="destination" ref="644046920"/>
- </object>
- <int key="connectionID">520</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">alignRight:</string>
- <reference key="source" ref="1014"/>
- <reference key="destination" ref="512868991"/>
- </object>
- <int key="connectionID">521</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">copyRuler:</string>
- <reference key="source" ref="1014"/>
- <reference key="destination" ref="231811626"/>
- </object>
- <int key="connectionID">522</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">alignJustified:</string>
- <reference key="source" ref="1014"/>
- <reference key="destination" ref="945678886"/>
- </object>
- <int key="connectionID">523</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">alignLeft:</string>
- <reference key="source" ref="1014"/>
- <reference key="destination" ref="875092757"/>
- </object>
- <int key="connectionID">524</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">makeBaseWritingDirectionNatural:</string>
- <reference key="source" ref="1014"/>
- <reference key="destination" ref="551969625"/>
- </object>
- <int key="connectionID">525</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">makeBaseWritingDirectionLeftToRight:</string>
- <reference key="source" ref="1014"/>
- <reference key="destination" ref="249532473"/>
- </object>
- <int key="connectionID">526</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">makeBaseWritingDirectionRightToLeft:</string>
- <reference key="source" ref="1014"/>
- <reference key="destination" ref="607364498"/>
- </object>
- <int key="connectionID">527</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">makeTextWritingDirectionNatural:</string>
- <reference key="source" ref="1014"/>
- <reference key="destination" ref="380031999"/>
- </object>
- <int key="connectionID">528</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">makeTextWritingDirectionLeftToRight:</string>
- <reference key="source" ref="1014"/>
- <reference key="destination" ref="825984362"/>
- </object>
- <int key="connectionID">529</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">makeTextWritingDirectionRightToLeft:</string>
- <reference key="source" ref="1014"/>
- <reference key="destination" ref="560145579"/>
- </object>
- <int key="connectionID">530</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBOutletConnection" key="connection">
- <string key="label">window</string>
- <reference key="source" ref="976324537"/>
- <reference key="destination" ref="972006081"/>
- </object>
- <int key="connectionID">532</int>
- </object>
- </object>
- <object class="IBMutableOrderedSet" key="objectRecords">
- <object class="NSArray" key="orderedObjects">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <object class="IBObjectRecord">
- <int key="objectID">0</int>
- <reference key="object" ref="0"/>
- <reference key="children" ref="1048"/>
- <nil key="parent"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">-2</int>
- <reference key="object" ref="1021"/>
- <reference key="parent" ref="0"/>
- <string key="objectName">File's Owner</string>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">-1</int>
- <reference key="object" ref="1014"/>
- <reference key="parent" ref="0"/>
- <string key="objectName">First Responder</string>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">-3</int>
- <reference key="object" ref="1050"/>
- <reference key="parent" ref="0"/>
- <string key="objectName">Application</string>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">29</int>
- <reference key="object" ref="649796088"/>
- <object class="NSMutableArray" key="children">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <reference ref="713487014"/>
- <reference ref="694149608"/>
- <reference ref="952259628"/>
- <reference ref="379814623"/>
- <reference ref="586577488"/>
- <reference ref="302598603"/>
- <reference ref="448692316"/>
- </object>
- <reference key="parent" ref="0"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">19</int>
- <reference key="object" ref="713487014"/>
- <object class="NSMutableArray" key="children">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <reference ref="835318025"/>
- </object>
- <reference key="parent" ref="649796088"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">56</int>
- <reference key="object" ref="694149608"/>
- <object class="NSMutableArray" key="children">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <reference ref="110575045"/>
- </object>
- <reference key="parent" ref="649796088"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">217</int>
- <reference key="object" ref="952259628"/>
- <object class="NSMutableArray" key="children">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <reference ref="789758025"/>
- </object>
- <reference key="parent" ref="649796088"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">83</int>
- <reference key="object" ref="379814623"/>
- <object class="NSMutableArray" key="children">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <reference ref="720053764"/>
- </object>
- <reference key="parent" ref="649796088"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">81</int>
- <reference key="object" ref="720053764"/>
- <object class="NSMutableArray" key="children">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <reference ref="1023925487"/>
- <reference ref="117038363"/>
- <reference ref="49223823"/>
- <reference ref="722745758"/>
- <reference ref="705341025"/>
- <reference ref="1025936716"/>
- <reference ref="294629803"/>
- <reference ref="776162233"/>
- <reference ref="425164168"/>
- <reference ref="579971712"/>
- <reference ref="1010469920"/>
- </object>
- <reference key="parent" ref="379814623"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">75</int>
- <reference key="object" ref="1023925487"/>
- <reference key="parent" ref="720053764"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">80</int>
- <reference key="object" ref="117038363"/>
- <reference key="parent" ref="720053764"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">78</int>
- <reference key="object" ref="49223823"/>
- <reference key="parent" ref="720053764"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">72</int>
- <reference key="object" ref="722745758"/>
- <reference key="parent" ref="720053764"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">82</int>
- <reference key="object" ref="705341025"/>
- <reference key="parent" ref="720053764"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">124</int>
- <reference key="object" ref="1025936716"/>
- <object class="NSMutableArray" key="children">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <reference ref="1065607017"/>
- </object>
- <reference key="parent" ref="720053764"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">77</int>
- <reference key="object" ref="294629803"/>
- <reference key="parent" ref="720053764"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">73</int>
- <reference key="object" ref="776162233"/>
- <reference key="parent" ref="720053764"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">79</int>
- <reference key="object" ref="425164168"/>
- <reference key="parent" ref="720053764"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">112</int>
- <reference key="object" ref="579971712"/>
- <reference key="parent" ref="720053764"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">74</int>
- <reference key="object" ref="1010469920"/>
- <reference key="parent" ref="720053764"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">125</int>
- <reference key="object" ref="1065607017"/>
- <object class="NSMutableArray" key="children">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <reference ref="759406840"/>
- </object>
- <reference key="parent" ref="1025936716"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">126</int>
- <reference key="object" ref="759406840"/>
- <reference key="parent" ref="1065607017"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">205</int>
- <reference key="object" ref="789758025"/>
- <object class="NSMutableArray" key="children">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <reference ref="437104165"/>
- <reference ref="583158037"/>
- <reference ref="1058277027"/>
- <reference ref="212016141"/>
- <reference ref="296257095"/>
- <reference ref="29853731"/>
- <reference ref="860595796"/>
- <reference ref="1040322652"/>
- <reference ref="790794224"/>
- <reference ref="892235320"/>
- <reference ref="972420730"/>
- <reference ref="676164635"/>
- <reference ref="507821607"/>
- <reference ref="288088188"/>
- <reference ref="82994268"/>
- </object>
- <reference key="parent" ref="952259628"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">202</int>
- <reference key="object" ref="437104165"/>
- <reference key="parent" ref="789758025"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">198</int>
- <reference key="object" ref="583158037"/>
- <reference key="parent" ref="789758025"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">207</int>
- <reference key="object" ref="1058277027"/>
- <reference key="parent" ref="789758025"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">214</int>
- <reference key="object" ref="212016141"/>
- <reference key="parent" ref="789758025"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">199</int>
- <reference key="object" ref="296257095"/>
- <reference key="parent" ref="789758025"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">203</int>
- <reference key="object" ref="29853731"/>
- <reference key="parent" ref="789758025"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">197</int>
- <reference key="object" ref="860595796"/>
- <reference key="parent" ref="789758025"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">206</int>
- <reference key="object" ref="1040322652"/>
- <reference key="parent" ref="789758025"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">215</int>
- <reference key="object" ref="790794224"/>
- <reference key="parent" ref="789758025"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">218</int>
- <reference key="object" ref="892235320"/>
- <object class="NSMutableArray" key="children">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <reference ref="963351320"/>
- </object>
- <reference key="parent" ref="789758025"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">216</int>
- <reference key="object" ref="972420730"/>
- <object class="NSMutableArray" key="children">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <reference ref="769623530"/>
- </object>
- <reference key="parent" ref="789758025"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">200</int>
- <reference key="object" ref="769623530"/>
- <object class="NSMutableArray" key="children">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <reference ref="948374510"/>
- <reference ref="96193923"/>
- <reference ref="679648819"/>
- <reference ref="967646866"/>
- <reference ref="859480356"/>
- <reference ref="795346622"/>
- </object>
- <reference key="parent" ref="972420730"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">219</int>
- <reference key="object" ref="948374510"/>
- <reference key="parent" ref="769623530"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">201</int>
- <reference key="object" ref="96193923"/>
- <reference key="parent" ref="769623530"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">204</int>
- <reference key="object" ref="679648819"/>
- <reference key="parent" ref="769623530"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">220</int>
- <reference key="object" ref="963351320"/>
- <object class="NSMutableArray" key="children">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <reference ref="270902937"/>
- <reference ref="88285865"/>
- <reference ref="159080638"/>
- <reference ref="326711663"/>
- <reference ref="447796847"/>
- </object>
- <reference key="parent" ref="892235320"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">213</int>
- <reference key="object" ref="270902937"/>
- <reference key="parent" ref="963351320"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">210</int>
- <reference key="object" ref="88285865"/>
- <reference key="parent" ref="963351320"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">221</int>
- <reference key="object" ref="159080638"/>
- <reference key="parent" ref="963351320"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">208</int>
- <reference key="object" ref="326711663"/>
- <reference key="parent" ref="963351320"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">209</int>
- <reference key="object" ref="447796847"/>
- <reference key="parent" ref="963351320"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">57</int>
- <reference key="object" ref="110575045"/>
- <object class="NSMutableArray" key="children">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <reference ref="238522557"/>
- <reference ref="755159360"/>
- <reference ref="908899353"/>
- <reference ref="632727374"/>
- <reference ref="646227648"/>
- <reference ref="609285721"/>
- <reference ref="481834944"/>
- <reference ref="304266470"/>
- <reference ref="1046388886"/>
- <reference ref="1056857174"/>
- <reference ref="342932134"/>
- </object>
- <reference key="parent" ref="694149608"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">58</int>
- <reference key="object" ref="238522557"/>
- <reference key="parent" ref="110575045"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">134</int>
- <reference key="object" ref="755159360"/>
- <reference key="parent" ref="110575045"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">150</int>
- <reference key="object" ref="908899353"/>
- <reference key="parent" ref="110575045"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">136</int>
- <reference key="object" ref="632727374"/>
- <reference key="parent" ref="110575045"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">144</int>
- <reference key="object" ref="646227648"/>
- <reference key="parent" ref="110575045"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">129</int>
- <reference key="object" ref="609285721"/>
- <reference key="parent" ref="110575045"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">143</int>
- <reference key="object" ref="481834944"/>
- <reference key="parent" ref="110575045"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">236</int>
- <reference key="object" ref="304266470"/>
- <reference key="parent" ref="110575045"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">131</int>
- <reference key="object" ref="1046388886"/>
- <object class="NSMutableArray" key="children">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <reference ref="752062318"/>
- </object>
- <reference key="parent" ref="110575045"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">149</int>
- <reference key="object" ref="1056857174"/>
- <reference key="parent" ref="110575045"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">145</int>
- <reference key="object" ref="342932134"/>
- <reference key="parent" ref="110575045"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">130</int>
- <reference key="object" ref="752062318"/>
- <reference key="parent" ref="1046388886"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">24</int>
- <reference key="object" ref="835318025"/>
- <object class="NSMutableArray" key="children">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <reference ref="299356726"/>
- <reference ref="625202149"/>
- <reference ref="575023229"/>
- <reference ref="1011231497"/>
- </object>
- <reference key="parent" ref="713487014"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">92</int>
- <reference key="object" ref="299356726"/>
- <reference key="parent" ref="835318025"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">5</int>
- <reference key="object" ref="625202149"/>
- <reference key="parent" ref="835318025"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">239</int>
- <reference key="object" ref="575023229"/>
- <reference key="parent" ref="835318025"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">23</int>
- <reference key="object" ref="1011231497"/>
- <reference key="parent" ref="835318025"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">295</int>
- <reference key="object" ref="586577488"/>
- <object class="NSMutableArray" key="children">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <reference ref="466310130"/>
- </object>
- <reference key="parent" ref="649796088"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">296</int>
- <reference key="object" ref="466310130"/>
- <object class="NSMutableArray" key="children">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <reference ref="102151532"/>
- <reference ref="237841660"/>
- </object>
- <reference key="parent" ref="586577488"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">297</int>
- <reference key="object" ref="102151532"/>
- <reference key="parent" ref="466310130"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">298</int>
- <reference key="object" ref="237841660"/>
- <reference key="parent" ref="466310130"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">211</int>
- <reference key="object" ref="676164635"/>
- <object class="NSMutableArray" key="children">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <reference ref="785027613"/>
- </object>
- <reference key="parent" ref="789758025"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">212</int>
- <reference key="object" ref="785027613"/>
- <object class="NSMutableArray" key="children">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <reference ref="680220178"/>
- <reference ref="731782645"/>
- </object>
- <reference key="parent" ref="676164635"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">195</int>
- <reference key="object" ref="680220178"/>
- <reference key="parent" ref="785027613"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">196</int>
- <reference key="object" ref="731782645"/>
- <reference key="parent" ref="785027613"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">346</int>
- <reference key="object" ref="967646866"/>
- <reference key="parent" ref="769623530"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">348</int>
- <reference key="object" ref="507821607"/>
- <object class="NSMutableArray" key="children">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <reference ref="698887838"/>
- </object>
- <reference key="parent" ref="789758025"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">349</int>
- <reference key="object" ref="698887838"/>
- <object class="NSMutableArray" key="children">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <reference ref="605118523"/>
- <reference ref="197661976"/>
- <reference ref="708854459"/>
- <reference ref="65139061"/>
- <reference ref="19036812"/>
- <reference ref="672708820"/>
- <reference ref="537092702"/>
- </object>
- <reference key="parent" ref="507821607"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">350</int>
- <reference key="object" ref="605118523"/>
- <reference key="parent" ref="698887838"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">351</int>
- <reference key="object" ref="197661976"/>
- <reference key="parent" ref="698887838"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">354</int>
- <reference key="object" ref="708854459"/>
- <reference key="parent" ref="698887838"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">371</int>
- <reference key="object" ref="972006081"/>
- <object class="NSMutableArray" key="children">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <reference ref="439893737"/>
- </object>
- <reference key="parent" ref="0"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">372</int>
- <reference key="object" ref="439893737"/>
- <reference key="parent" ref="972006081"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">375</int>
- <reference key="object" ref="302598603"/>
- <object class="NSMutableArray" key="children">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <reference ref="941447902"/>
- </object>
- <reference key="parent" ref="649796088"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">376</int>
- <reference key="object" ref="941447902"/>
- <object class="NSMutableArray" key="children">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <reference ref="792887677"/>
- <reference ref="215659978"/>
- </object>
- <reference key="parent" ref="302598603"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">377</int>
- <reference key="object" ref="792887677"/>
- <object class="NSMutableArray" key="children">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <reference ref="786677654"/>
- </object>
- <reference key="parent" ref="941447902"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">388</int>
- <reference key="object" ref="786677654"/>
- <object class="NSMutableArray" key="children">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <reference ref="159677712"/>
- <reference ref="305399458"/>
- <reference ref="814362025"/>
- <reference ref="330926929"/>
- <reference ref="533507878"/>
- <reference ref="158063935"/>
- <reference ref="885547335"/>
- <reference ref="901062459"/>
- <reference ref="767671776"/>
- <reference ref="691570813"/>
- <reference ref="769124883"/>
- <reference ref="739652853"/>
- <reference ref="1012600125"/>
- <reference ref="214559597"/>
- <reference ref="596732606"/>
- <reference ref="393423671"/>
- </object>
- <reference key="parent" ref="792887677"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">389</int>
- <reference key="object" ref="159677712"/>
- <reference key="parent" ref="786677654"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">390</int>
- <reference key="object" ref="305399458"/>
- <reference key="parent" ref="786677654"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">391</int>
- <reference key="object" ref="814362025"/>
- <reference key="parent" ref="786677654"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">392</int>
- <reference key="object" ref="330926929"/>
- <reference key="parent" ref="786677654"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">393</int>
- <reference key="object" ref="533507878"/>
- <reference key="parent" ref="786677654"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">394</int>
- <reference key="object" ref="158063935"/>
- <reference key="parent" ref="786677654"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">395</int>
- <reference key="object" ref="885547335"/>
- <reference key="parent" ref="786677654"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">396</int>
- <reference key="object" ref="901062459"/>
- <reference key="parent" ref="786677654"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">397</int>
- <reference key="object" ref="767671776"/>
- <object class="NSMutableArray" key="children">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <reference ref="175441468"/>
- </object>
- <reference key="parent" ref="786677654"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">398</int>
- <reference key="object" ref="691570813"/>
- <object class="NSMutableArray" key="children">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <reference ref="1058217995"/>
- </object>
- <reference key="parent" ref="786677654"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">399</int>
- <reference key="object" ref="769124883"/>
- <object class="NSMutableArray" key="children">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <reference ref="18263474"/>
- </object>
- <reference key="parent" ref="786677654"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">400</int>
- <reference key="object" ref="739652853"/>
- <reference key="parent" ref="786677654"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">401</int>
- <reference key="object" ref="1012600125"/>
- <reference key="parent" ref="786677654"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">402</int>
- <reference key="object" ref="214559597"/>
- <reference key="parent" ref="786677654"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">403</int>
- <reference key="object" ref="596732606"/>
- <reference key="parent" ref="786677654"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">404</int>
- <reference key="object" ref="393423671"/>
- <reference key="parent" ref="786677654"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">405</int>
- <reference key="object" ref="18263474"/>
- <object class="NSMutableArray" key="children">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <reference ref="257962622"/>
- <reference ref="644725453"/>
- <reference ref="1037576581"/>
- <reference ref="941806246"/>
- <reference ref="1045724900"/>
- </object>
- <reference key="parent" ref="769124883"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">406</int>
- <reference key="object" ref="257962622"/>
- <reference key="parent" ref="18263474"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">407</int>
- <reference key="object" ref="644725453"/>
- <reference key="parent" ref="18263474"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">408</int>
- <reference key="object" ref="1037576581"/>
- <reference key="parent" ref="18263474"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">409</int>
- <reference key="object" ref="941806246"/>
- <reference key="parent" ref="18263474"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">410</int>
- <reference key="object" ref="1045724900"/>
- <reference key="parent" ref="18263474"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">411</int>
- <reference key="object" ref="1058217995"/>
- <object class="NSMutableArray" key="children">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <reference ref="706297211"/>
- <reference ref="568384683"/>
- <reference ref="663508465"/>
- </object>
- <reference key="parent" ref="691570813"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">412</int>
- <reference key="object" ref="706297211"/>
- <reference key="parent" ref="1058217995"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">413</int>
- <reference key="object" ref="568384683"/>
- <reference key="parent" ref="1058217995"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">414</int>
- <reference key="object" ref="663508465"/>
- <reference key="parent" ref="1058217995"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">415</int>
- <reference key="object" ref="175441468"/>
- <object class="NSMutableArray" key="children">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <reference ref="252969304"/>
- <reference ref="766922938"/>
- <reference ref="677519740"/>
- <reference ref="238351151"/>
- </object>
- <reference key="parent" ref="767671776"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">416</int>
- <reference key="object" ref="252969304"/>
- <reference key="parent" ref="175441468"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">417</int>
- <reference key="object" ref="766922938"/>
- <reference key="parent" ref="175441468"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">418</int>
- <reference key="object" ref="677519740"/>
- <reference key="parent" ref="175441468"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">419</int>
- <reference key="object" ref="238351151"/>
- <reference key="parent" ref="175441468"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">420</int>
- <reference key="object" ref="755631768"/>
- <reference key="parent" ref="0"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">450</int>
- <reference key="object" ref="288088188"/>
- <object class="NSMutableArray" key="children">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <reference ref="579392910"/>
- </object>
- <reference key="parent" ref="789758025"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">451</int>
- <reference key="object" ref="579392910"/>
- <object class="NSMutableArray" key="children">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <reference ref="1060694897"/>
- <reference ref="879586729"/>
- <reference ref="56570060"/>
- </object>
- <reference key="parent" ref="288088188"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">452</int>
- <reference key="object" ref="1060694897"/>
- <reference key="parent" ref="579392910"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">453</int>
- <reference key="object" ref="859480356"/>
- <reference key="parent" ref="769623530"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">454</int>
- <reference key="object" ref="795346622"/>
- <reference key="parent" ref="769623530"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">457</int>
- <reference key="object" ref="65139061"/>
- <reference key="parent" ref="698887838"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">459</int>
- <reference key="object" ref="19036812"/>
- <reference key="parent" ref="698887838"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">460</int>
- <reference key="object" ref="672708820"/>
- <reference key="parent" ref="698887838"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">462</int>
- <reference key="object" ref="537092702"/>
- <reference key="parent" ref="698887838"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">465</int>
- <reference key="object" ref="879586729"/>
- <reference key="parent" ref="579392910"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">466</int>
- <reference key="object" ref="56570060"/>
- <reference key="parent" ref="579392910"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">485</int>
- <reference key="object" ref="82994268"/>
- <reference key="parent" ref="789758025"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">490</int>
- <reference key="object" ref="448692316"/>
- <object class="NSMutableArray" key="children">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <reference ref="992780483"/>
- </object>
- <reference key="parent" ref="649796088"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">491</int>
- <reference key="object" ref="992780483"/>
- <object class="NSMutableArray" key="children">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <reference ref="105068016"/>
- </object>
- <reference key="parent" ref="448692316"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">492</int>
- <reference key="object" ref="105068016"/>
- <reference key="parent" ref="992780483"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">494</int>
- <reference key="object" ref="976324537"/>
- <reference key="parent" ref="0"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">496</int>
- <reference key="object" ref="215659978"/>
- <object class="NSMutableArray" key="children">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <reference ref="446991534"/>
- </object>
- <reference key="parent" ref="941447902"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">497</int>
- <reference key="object" ref="446991534"/>
- <object class="NSMutableArray" key="children">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <reference ref="875092757"/>
- <reference ref="630155264"/>
- <reference ref="945678886"/>
- <reference ref="512868991"/>
- <reference ref="163117631"/>
- <reference ref="31516759"/>
- <reference ref="908105787"/>
- <reference ref="644046920"/>
- <reference ref="231811626"/>
- <reference ref="883618387"/>
- </object>
- <reference key="parent" ref="215659978"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">498</int>
- <reference key="object" ref="875092757"/>
- <reference key="parent" ref="446991534"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">499</int>
- <reference key="object" ref="630155264"/>
- <reference key="parent" ref="446991534"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">500</int>
- <reference key="object" ref="945678886"/>
- <reference key="parent" ref="446991534"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">501</int>
- <reference key="object" ref="512868991"/>
- <reference key="parent" ref="446991534"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">502</int>
- <reference key="object" ref="163117631"/>
- <reference key="parent" ref="446991534"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">503</int>
- <reference key="object" ref="31516759"/>
- <object class="NSMutableArray" key="children">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <reference ref="956096989"/>
- </object>
- <reference key="parent" ref="446991534"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">504</int>
- <reference key="object" ref="908105787"/>
- <reference key="parent" ref="446991534"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">505</int>
- <reference key="object" ref="644046920"/>
- <reference key="parent" ref="446991534"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">506</int>
- <reference key="object" ref="231811626"/>
- <reference key="parent" ref="446991534"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">507</int>
- <reference key="object" ref="883618387"/>
- <reference key="parent" ref="446991534"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">508</int>
- <reference key="object" ref="956096989"/>
- <object class="NSMutableArray" key="children">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <reference ref="257099033"/>
- <reference ref="551969625"/>
- <reference ref="249532473"/>
- <reference ref="607364498"/>
- <reference ref="508151438"/>
- <reference ref="981751889"/>
- <reference ref="380031999"/>
- <reference ref="825984362"/>
- <reference ref="560145579"/>
- </object>
- <reference key="parent" ref="31516759"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">509</int>
- <reference key="object" ref="257099033"/>
- <reference key="parent" ref="956096989"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">510</int>
- <reference key="object" ref="551969625"/>
- <reference key="parent" ref="956096989"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">511</int>
- <reference key="object" ref="249532473"/>
- <reference key="parent" ref="956096989"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">512</int>
- <reference key="object" ref="607364498"/>
- <reference key="parent" ref="956096989"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">513</int>
- <reference key="object" ref="508151438"/>
- <reference key="parent" ref="956096989"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">514</int>
- <reference key="object" ref="981751889"/>
- <reference key="parent" ref="956096989"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">515</int>
- <reference key="object" ref="380031999"/>
- <reference key="parent" ref="956096989"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">516</int>
- <reference key="object" ref="825984362"/>
- <reference key="parent" ref="956096989"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">517</int>
- <reference key="object" ref="560145579"/>
- <reference key="parent" ref="956096989"/>
- </object>
- </object>
- </object>
- <object class="NSMutableDictionary" key="flattenedProperties">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <object class="NSArray" key="dict.sortedKeys">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <string>-3.IBPluginDependency</string>
- <string>112.IBPluginDependency</string>
- <string>112.ImportedFromIB2</string>
- <string>124.IBPluginDependency</string>
- <string>124.ImportedFromIB2</string>
- <string>125.IBPluginDependency</string>
- <string>125.ImportedFromIB2</string>
- <string>125.editorWindowContentRectSynchronizationRect</string>
- <string>126.IBPluginDependency</string>
- <string>126.ImportedFromIB2</string>
- <string>129.IBPluginDependency</string>
- <string>129.ImportedFromIB2</string>
- <string>130.IBPluginDependency</string>
- <string>130.ImportedFromIB2</string>
- <string>130.editorWindowContentRectSynchronizationRect</string>
- <string>131.IBPluginDependency</string>
- <string>131.ImportedFromIB2</string>
- <string>134.IBPluginDependency</string>
- <string>134.ImportedFromIB2</string>
- <string>136.IBPluginDependency</string>
- <string>136.ImportedFromIB2</string>
- <string>143.IBPluginDependency</string>
- <string>143.ImportedFromIB2</string>
- <string>144.IBPluginDependency</string>
- <string>144.ImportedFromIB2</string>
- <string>145.IBPluginDependency</string>
- <string>145.ImportedFromIB2</string>
- <string>149.IBPluginDependency</string>
- <string>149.ImportedFromIB2</string>
- <string>150.IBPluginDependency</string>
- <string>150.ImportedFromIB2</string>
- <string>19.IBPluginDependency</string>
- <string>19.ImportedFromIB2</string>
- <string>195.IBPluginDependency</string>
- <string>195.ImportedFromIB2</string>
- <string>196.IBPluginDependency</string>
- <string>196.ImportedFromIB2</string>
- <string>197.IBPluginDependency</string>
- <string>197.ImportedFromIB2</string>
- <string>198.IBPluginDependency</string>
- <string>198.ImportedFromIB2</string>
- <string>199.IBPluginDependency</string>
- <string>199.ImportedFromIB2</string>
- <string>200.IBEditorWindowLastContentRect</string>
- <string>200.IBPluginDependency</string>
- <string>200.ImportedFromIB2</string>
- <string>200.editorWindowContentRectSynchronizationRect</string>
- <string>201.IBPluginDependency</string>
- <string>201.ImportedFromIB2</string>
- <string>202.IBPluginDependency</string>
- <string>202.ImportedFromIB2</string>
- <string>203.IBPluginDependency</string>
- <string>203.ImportedFromIB2</string>
- <string>204.IBPluginDependency</string>
- <string>204.ImportedFromIB2</string>
- <string>205.IBEditorWindowLastContentRect</string>
- <string>205.IBPluginDependency</string>
- <string>205.ImportedFromIB2</string>
- <string>205.editorWindowContentRectSynchronizationRect</string>
- <string>206.IBPluginDependency</string>
- <string>206.ImportedFromIB2</string>
- <string>207.IBPluginDependency</string>
- <string>207.ImportedFromIB2</string>
- <string>208.IBPluginDependency</string>
- <string>208.ImportedFromIB2</string>
- <string>209.IBPluginDependency</string>
- <string>209.ImportedFromIB2</string>
- <string>210.IBPluginDependency</string>
- <string>210.ImportedFromIB2</string>
- <string>211.IBPluginDependency</string>
- <string>211.ImportedFromIB2</string>
- <string>212.IBPluginDependency</string>
- <string>212.ImportedFromIB2</string>
- <string>212.editorWindowContentRectSynchronizationRect</string>
- <string>213.IBPluginDependency</string>
- <string>213.ImportedFromIB2</string>
- <string>214.IBPluginDependency</string>
- <string>214.ImportedFromIB2</string>
- <string>215.IBPluginDependency</string>
- <string>215.ImportedFromIB2</string>
- <string>216.IBPluginDependency</string>
- <string>216.ImportedFromIB2</string>
- <string>217.IBPluginDependency</string>
- <string>217.ImportedFromIB2</string>
- <string>218.IBPluginDependency</string>
- <string>218.ImportedFromIB2</string>
- <string>219.IBPluginDependency</string>
- <string>219.ImportedFromIB2</string>
- <string>220.IBEditorWindowLastContentRect</string>
- <string>220.IBPluginDependency</string>
- <string>220.ImportedFromIB2</string>
- <string>220.editorWindowContentRectSynchronizationRect</string>
- <string>221.IBPluginDependency</string>
- <string>221.ImportedFromIB2</string>
- <string>23.IBPluginDependency</string>
- <string>23.ImportedFromIB2</string>
- <string>236.IBPluginDependency</string>
- <string>236.ImportedFromIB2</string>
- <string>239.IBPluginDependency</string>
- <string>239.ImportedFromIB2</string>
- <string>24.IBEditorWindowLastContentRect</string>
- <string>24.IBPluginDependency</string>
- <string>24.ImportedFromIB2</string>
- <string>24.editorWindowContentRectSynchronizationRect</string>
- <string>29.IBEditorWindowLastContentRect</string>
- <string>29.IBPluginDependency</string>
- <string>29.ImportedFromIB2</string>
- <string>29.WindowOrigin</string>
- <string>29.editorWindowContentRectSynchronizationRect</string>
- <string>295.IBPluginDependency</string>
- <string>296.IBEditorWindowLastContentRect</string>
- <string>296.IBPluginDependency</string>
- <string>296.editorWindowContentRectSynchronizationRect</string>
- <string>297.IBPluginDependency</string>
- <string>298.IBPluginDependency</string>
- <string>346.IBPluginDependency</string>
- <string>346.ImportedFromIB2</string>
- <string>348.IBPluginDependency</string>
- <string>348.ImportedFromIB2</string>
- <string>349.IBEditorWindowLastContentRect</string>
- <string>349.IBPluginDependency</string>
- <string>349.ImportedFromIB2</string>
- <string>349.editorWindowContentRectSynchronizationRect</string>
- <string>350.IBPluginDependency</string>
- <string>350.ImportedFromIB2</string>
- <string>351.IBPluginDependency</string>
- <string>351.ImportedFromIB2</string>
- <string>354.IBPluginDependency</string>
- <string>354.ImportedFromIB2</string>
- <string>371.IBEditorWindowLastContentRect</string>
- <string>371.IBPluginDependency</string>
- <string>371.IBWindowTemplateEditedContentRect</string>
- <string>371.NSWindowTemplate.visibleAtLaunch</string>
- <string>371.editorWindowContentRectSynchronizationRect</string>
- <string>371.windowTemplate.maxSize</string>
- <string>372.IBPluginDependency</string>
- <string>375.IBPluginDependency</string>
- <string>376.IBEditorWindowLastContentRect</string>
- <string>376.IBPluginDependency</string>
- <string>377.IBPluginDependency</string>
- <string>388.IBEditorWindowLastContentRect</string>
- <string>388.IBPluginDependency</string>
- <string>389.IBPluginDependency</string>
- <string>390.IBPluginDependency</string>
- <string>391.IBPluginDependency</string>
- <string>392.IBPluginDependency</string>
- <string>393.IBPluginDependency</string>
- <string>394.IBPluginDependency</string>
- <string>395.IBPluginDependency</string>
- <string>396.IBPluginDependency</string>
- <string>397.IBPluginDependency</string>
- <string>398.IBPluginDependency</string>
- <string>399.IBPluginDependency</string>
- <string>400.IBPluginDependency</string>
- <string>401.IBPluginDependency</string>
- <string>402.IBPluginDependency</string>
- <string>403.IBPluginDependency</string>
- <string>404.IBPluginDependency</string>
- <string>405.IBPluginDependency</string>
- <string>406.IBPluginDependency</string>
- <string>407.IBPluginDependency</string>
- <string>408.IBPluginDependency</string>
- <string>409.IBPluginDependency</string>
- <string>410.IBPluginDependency</string>
- <string>411.IBPluginDependency</string>
- <string>412.IBPluginDependency</string>
- <string>413.IBPluginDependency</string>
- <string>414.IBPluginDependency</string>
- <string>415.IBPluginDependency</string>
- <string>416.IBPluginDependency</string>
- <string>417.IBPluginDependency</string>
- <string>418.IBPluginDependency</string>
- <string>419.IBPluginDependency</string>
- <string>450.IBPluginDependency</string>
- <string>451.IBEditorWindowLastContentRect</string>
- <string>451.IBPluginDependency</string>
- <string>452.IBPluginDependency</string>
- <string>453.IBPluginDependency</string>
- <string>454.IBPluginDependency</string>
- <string>457.IBPluginDependency</string>
- <string>459.IBPluginDependency</string>
- <string>460.IBPluginDependency</string>
- <string>462.IBPluginDependency</string>
- <string>465.IBPluginDependency</string>
- <string>466.IBPluginDependency</string>
- <string>485.IBPluginDependency</string>
- <string>490.IBPluginDependency</string>
- <string>491.IBEditorWindowLastContentRect</string>
- <string>491.IBPluginDependency</string>
- <string>492.IBPluginDependency</string>
- <string>496.IBPluginDependency</string>
- <string>497.IBEditorWindowLastContentRect</string>
- <string>497.IBPluginDependency</string>
- <string>498.IBPluginDependency</string>
- <string>499.IBPluginDependency</string>
- <string>5.IBPluginDependency</string>
- <string>5.ImportedFromIB2</string>
- <string>500.IBPluginDependency</string>
- <string>501.IBPluginDependency</string>
- <string>502.IBPluginDependency</string>
- <string>503.IBPluginDependency</string>
- <string>504.IBPluginDependency</string>
- <string>505.IBPluginDependency</string>
- <string>506.IBPluginDependency</string>
- <string>507.IBPluginDependency</string>
- <string>508.IBEditorWindowLastContentRect</string>
- <string>508.IBPluginDependency</string>
- <string>509.IBPluginDependency</string>
- <string>510.IBPluginDependency</string>
- <string>511.IBPluginDependency</string>
- <string>512.IBPluginDependency</string>
- <string>513.IBPluginDependency</string>
- <string>514.IBPluginDependency</string>
- <string>515.IBPluginDependency</string>
- <string>516.IBPluginDependency</string>
- <string>517.IBPluginDependency</string>
- <string>56.IBPluginDependency</string>
- <string>56.ImportedFromIB2</string>
- <string>57.IBEditorWindowLastContentRect</string>
- <string>57.IBPluginDependency</string>
- <string>57.ImportedFromIB2</string>
- <string>57.editorWindowContentRectSynchronizationRect</string>
- <string>58.IBPluginDependency</string>
- <string>58.ImportedFromIB2</string>
- <string>72.IBPluginDependency</string>
- <string>72.ImportedFromIB2</string>
- <string>73.IBPluginDependency</string>
- <string>73.ImportedFromIB2</string>
- <string>74.IBPluginDependency</string>
- <string>74.ImportedFromIB2</string>
- <string>75.IBPluginDependency</string>
- <string>75.ImportedFromIB2</string>
- <string>77.IBPluginDependency</string>
- <string>77.ImportedFromIB2</string>
- <string>78.IBPluginDependency</string>
- <string>78.ImportedFromIB2</string>
- <string>79.IBPluginDependency</string>
- <string>79.ImportedFromIB2</string>
- <string>80.IBPluginDependency</string>
- <string>80.ImportedFromIB2</string>
- <string>81.IBEditorWindowLastContentRect</string>
- <string>81.IBPluginDependency</string>
- <string>81.ImportedFromIB2</string>
- <string>81.editorWindowContentRectSynchronizationRect</string>
- <string>82.IBPluginDependency</string>
- <string>82.ImportedFromIB2</string>
- <string>83.IBPluginDependency</string>
- <string>83.ImportedFromIB2</string>
- <string>92.IBPluginDependency</string>
- <string>92.ImportedFromIB2</string>
- </object>
- <object class="NSMutableArray" key="dict.values">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <integer value="1"/>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <integer value="1"/>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <integer value="1"/>
- <string>{{522, 812}, {146, 23}}</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <integer value="1"/>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <integer value="1"/>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <integer value="1"/>
- <string>{{436, 809}, {64, 6}}</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <integer value="1"/>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <integer value="1"/>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <integer value="1"/>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <integer value="1"/>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <integer value="1"/>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <integer value="1"/>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <integer value="1"/>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <integer value="1"/>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <integer value="1"/>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <integer value="1"/>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <integer value="1"/>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <integer value="1"/>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <integer value="1"/>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <integer value="1"/>
- <string>{{753, 187}, {275, 113}}</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <integer value="1"/>
- <string>{{608, 612}, {275, 83}}</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <integer value="1"/>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <integer value="1"/>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <integer value="1"/>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <integer value="1"/>
- <string>{{547, 180}, {254, 283}}</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <integer value="1"/>
- <string>{{187, 434}, {243, 243}}</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <integer value="1"/>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <integer value="1"/>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <integer value="1"/>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <integer value="1"/>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <integer value="1"/>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <integer value="1"/>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <integer value="1"/>
- <string>{{608, 612}, {167, 43}}</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <integer value="1"/>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <integer value="1"/>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <integer value="1"/>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <integer value="1"/>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <integer value="1"/>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <integer value="1"/>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <integer value="1"/>
- <string>{{753, 217}, {238, 103}}</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <integer value="1"/>
- <string>{{608, 612}, {241, 103}}</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <integer value="1"/>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <integer value="1"/>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <integer value="1"/>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <integer value="1"/>
- <string>{{654, 239}, {194, 73}}</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <integer value="1"/>
- <string>{{525, 802}, {197, 73}}</string>
- <string>{{380, 836}, {512, 20}}</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <integer value="1"/>
- <string>{74, 862}</string>
- <string>{{6, 978}, {478, 20}}</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>{{604, 269}, {231, 43}}</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>{{475, 832}, {234, 43}}</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <integer value="1"/>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <integer value="1"/>
- <string>{{746, 287}, {220, 133}}</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <integer value="1"/>
- <string>{{608, 612}, {215, 63}}</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <integer value="1"/>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <integer value="1"/>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <integer value="1"/>
- <string>{{380, 496}, {480, 360}}</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>{{380, 496}, {480, 360}}</string>
- <integer value="1"/>
- <string>{{33, 99}, {480, 360}}</string>
- <string>{3.40282e+38, 3.40282e+38}</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>{{591, 420}, {83, 43}}</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>{{523, 2}, {178, 283}}</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>{{753, 197}, {170, 63}}</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>{{725, 289}, {246, 23}}</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>{{674, 260}, {204, 183}}</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <integer value="1"/>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>{{878, 180}, {164, 173}}</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <integer value="1"/>
- <string>{{286, 129}, {275, 183}}</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <integer value="1"/>
- <string>{{23, 794}, {245, 183}}</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <integer value="1"/>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <integer value="1"/>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <integer value="1"/>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <integer value="1"/>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <integer value="1"/>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <integer value="1"/>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <integer value="1"/>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <integer value="1"/>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <integer value="1"/>
- <string>{{452, 109}, {196, 203}}</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <integer value="1"/>
- <string>{{145, 474}, {199, 203}}</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <integer value="1"/>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <integer value="1"/>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <integer value="1"/>
- </object>
- </object>
- <object class="NSMutableDictionary" key="unlocalizedProperties">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <reference key="dict.sortedKeys" ref="0"/>
- <object class="NSMutableArray" key="dict.values">
- <bool key="EncodedWithXMLCoder">YES</bool>
- </object>
- </object>
- <nil key="activeLocalization"/>
- <object class="NSMutableDictionary" key="localizations">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <reference key="dict.sortedKeys" ref="0"/>
- <object class="NSMutableArray" key="dict.values">
- <bool key="EncodedWithXMLCoder">YES</bool>
- </object>
- </object>
- <nil key="sourceID"/>
- <int key="maxID">532</int>
- </object>
- <object class="IBClassDescriber" key="IBDocument.Classes">
- <object class="NSMutableArray" key="referencedPartialClassDescriptions">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <object class="IBPartialClassDescription">
- <string key="className">TestAppAppDelegate</string>
- <string key="superclassName">NSObject</string>
- <object class="NSMutableDictionary" key="outlets">
- <string key="NS.key.0">window</string>
- <string key="NS.object.0">NSWindow</string>
- </object>
- <object class="IBClassDescriptionSource" key="sourceIdentifier">
- <string key="majorKey">IBProjectSource</string>
- <string key="minorKey">TestAppAppDelegate.h</string>
- </object>
- </object>
- </object>
- <object class="NSMutableArray" key="referencedPartialClassDescriptionsV3.2+">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <object class="IBPartialClassDescription">
- <string key="className">NSApplication</string>
- <string key="superclassName">NSResponder</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier" id="822405504">
- <string key="majorKey">IBFrameworkSource</string>
- <string key="minorKey">AppKit.framework/Headers/NSApplication.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSApplication</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier" id="850738725">
- <string key="majorKey">IBFrameworkSource</string>
- <string key="minorKey">AppKit.framework/Headers/NSApplicationScripting.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSApplication</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier" id="624831158">
- <string key="majorKey">IBFrameworkSource</string>
- <string key="minorKey">AppKit.framework/Headers/NSColorPanel.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSApplication</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier">
- <string key="majorKey">IBFrameworkSource</string>
- <string key="minorKey">AppKit.framework/Headers/NSHelpManager.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSApplication</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier">
- <string key="majorKey">IBFrameworkSource</string>
- <string key="minorKey">AppKit.framework/Headers/NSPageLayout.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSApplication</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier">
- <string key="majorKey">IBFrameworkSource</string>
- <string key="minorKey">AppKit.framework/Headers/NSUserInterfaceItemSearching.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSBrowser</string>
- <string key="superclassName">NSControl</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier">
- <string key="majorKey">IBFrameworkSource</string>
- <string key="minorKey">AppKit.framework/Headers/NSBrowser.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSControl</string>
- <string key="superclassName">NSView</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier" id="310914472">
- <string key="majorKey">IBFrameworkSource</string>
- <string key="minorKey">AppKit.framework/Headers/NSControl.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSDocument</string>
- <string key="superclassName">NSObject</string>
- <object class="NSMutableDictionary" key="actions">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <object class="NSArray" key="dict.sortedKeys">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <string>printDocument:</string>
- <string>revertDocumentToSaved:</string>
- <string>runPageLayout:</string>
- <string>saveDocument:</string>
- <string>saveDocumentAs:</string>
- <string>saveDocumentTo:</string>
- </object>
- <object class="NSMutableArray" key="dict.values">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <string>id</string>
- <string>id</string>
- <string>id</string>
- <string>id</string>
- <string>id</string>
- <string>id</string>
- </object>
- </object>
- <object class="IBClassDescriptionSource" key="sourceIdentifier">
- <string key="majorKey">IBFrameworkSource</string>
- <string key="minorKey">AppKit.framework/Headers/NSDocument.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSDocument</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier">
- <string key="majorKey">IBFrameworkSource</string>
- <string key="minorKey">AppKit.framework/Headers/NSDocumentScripting.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSDocumentController</string>
- <string key="superclassName">NSObject</string>
- <object class="NSMutableDictionary" key="actions">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <object class="NSArray" key="dict.sortedKeys">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <string>clearRecentDocuments:</string>
- <string>newDocument:</string>
- <string>openDocument:</string>
- <string>saveAllDocuments:</string>
- </object>
- <object class="NSMutableArray" key="dict.values">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <string>id</string>
- <string>id</string>
- <string>id</string>
- <string>id</string>
- </object>
- </object>
- <object class="IBClassDescriptionSource" key="sourceIdentifier">
- <string key="majorKey">IBFrameworkSource</string>
- <string key="minorKey">AppKit.framework/Headers/NSDocumentController.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSFontManager</string>
- <string key="superclassName">NSObject</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier" id="946436764">
- <string key="majorKey">IBFrameworkSource</string>
- <string key="minorKey">AppKit.framework/Headers/NSFontManager.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSFormatter</string>
- <string key="superclassName">NSObject</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier">
- <string key="majorKey">IBFrameworkSource</string>
- <string key="minorKey">Foundation.framework/Headers/NSFormatter.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSMatrix</string>
- <string key="superclassName">NSControl</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier">
- <string key="majorKey">IBFrameworkSource</string>
- <string key="minorKey">AppKit.framework/Headers/NSMatrix.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSMenu</string>
- <string key="superclassName">NSObject</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier" id="1056362899">
- <string key="majorKey">IBFrameworkSource</string>
- <string key="minorKey">AppKit.framework/Headers/NSMenu.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSMenuItem</string>
- <string key="superclassName">NSObject</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier" id="472958451">
- <string key="majorKey">IBFrameworkSource</string>
- <string key="minorKey">AppKit.framework/Headers/NSMenuItem.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSMovieView</string>
- <string key="superclassName">NSView</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier">
- <string key="majorKey">IBFrameworkSource</string>
- <string key="minorKey">AppKit.framework/Headers/NSMovieView.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSObject</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier">
- <string key="majorKey">IBFrameworkSource</string>
- <string key="minorKey">AppKit.framework/Headers/NSAccessibility.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSObject</string>
- <reference key="sourceIdentifier" ref="822405504"/>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSObject</string>
- <reference key="sourceIdentifier" ref="850738725"/>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSObject</string>
- <reference key="sourceIdentifier" ref="624831158"/>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSObject</string>
- <reference key="sourceIdentifier" ref="310914472"/>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSObject</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier">
- <string key="majorKey">IBFrameworkSource</string>
- <string key="minorKey">AppKit.framework/Headers/NSDictionaryController.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSObject</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier">
- <string key="majorKey">IBFrameworkSource</string>
- <string key="minorKey">AppKit.framework/Headers/NSDragging.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSObject</string>
- <reference key="sourceIdentifier" ref="946436764"/>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSObject</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier">
- <string key="majorKey">IBFrameworkSource</string>
- <string key="minorKey">AppKit.framework/Headers/NSFontPanel.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSObject</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier">
- <string key="majorKey">IBFrameworkSource</string>
- <string key="minorKey">AppKit.framework/Headers/NSKeyValueBinding.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSObject</string>
- <reference key="sourceIdentifier" ref="1056362899"/>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSObject</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier">
- <string key="majorKey">IBFrameworkSource</string>
- <string key="minorKey">AppKit.framework/Headers/NSNibLoading.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSObject</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier">
- <string key="majorKey">IBFrameworkSource</string>
- <string key="minorKey">AppKit.framework/Headers/NSOutlineView.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSObject</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier">
- <string key="majorKey">IBFrameworkSource</string>
- <string key="minorKey">AppKit.framework/Headers/NSPasteboard.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSObject</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier">
- <string key="majorKey">IBFrameworkSource</string>
- <string key="minorKey">AppKit.framework/Headers/NSSavePanel.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSObject</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier" id="809545482">
- <string key="majorKey">IBFrameworkSource</string>
- <string key="minorKey">AppKit.framework/Headers/NSTableView.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSObject</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier">
- <string key="majorKey">IBFrameworkSource</string>
- <string key="minorKey">AppKit.framework/Headers/NSToolbarItem.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSObject</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier" id="260078765">
- <string key="majorKey">IBFrameworkSource</string>
- <string key="minorKey">AppKit.framework/Headers/NSView.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSObject</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier">
- <string key="majorKey">IBFrameworkSource</string>
- <string key="minorKey">Foundation.framework/Headers/NSArchiver.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSObject</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier">
- <string key="majorKey">IBFrameworkSource</string>
- <string key="minorKey">Foundation.framework/Headers/NSClassDescription.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSObject</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier">
- <string key="majorKey">IBFrameworkSource</string>
- <string key="minorKey">Foundation.framework/Headers/NSError.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSObject</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier">
- <string key="majorKey">IBFrameworkSource</string>
- <string key="minorKey">Foundation.framework/Headers/NSFileManager.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSObject</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier">
- <string key="majorKey">IBFrameworkSource</string>
- <string key="minorKey">Foundation.framework/Headers/NSKeyValueCoding.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSObject</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier">
- <string key="majorKey">IBFrameworkSource</string>
- <string key="minorKey">Foundation.framework/Headers/NSKeyValueObserving.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSObject</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier">
- <string key="majorKey">IBFrameworkSource</string>
- <string key="minorKey">Foundation.framework/Headers/NSKeyedArchiver.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSObject</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier">
- <string key="majorKey">IBFrameworkSource</string>
- <string key="minorKey">Foundation.framework/Headers/NSObject.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSObject</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier">
- <string key="majorKey">IBFrameworkSource</string>
- <string key="minorKey">Foundation.framework/Headers/NSObjectScripting.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSObject</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier">
- <string key="majorKey">IBFrameworkSource</string>
- <string key="minorKey">Foundation.framework/Headers/NSPortCoder.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSObject</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier">
- <string key="majorKey">IBFrameworkSource</string>
- <string key="minorKey">Foundation.framework/Headers/NSRunLoop.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSObject</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier">
- <string key="majorKey">IBFrameworkSource</string>
- <string key="minorKey">Foundation.framework/Headers/NSScriptClassDescription.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSObject</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier">
- <string key="majorKey">IBFrameworkSource</string>
- <string key="minorKey">Foundation.framework/Headers/NSScriptKeyValueCoding.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSObject</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier">
- <string key="majorKey">IBFrameworkSource</string>
- <string key="minorKey">Foundation.framework/Headers/NSScriptObjectSpecifiers.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSObject</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier">
- <string key="majorKey">IBFrameworkSource</string>
- <string key="minorKey">Foundation.framework/Headers/NSScriptWhoseTests.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSObject</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier">
- <string key="majorKey">IBFrameworkSource</string>
- <string key="minorKey">Foundation.framework/Headers/NSThread.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSObject</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier">
- <string key="majorKey">IBFrameworkSource</string>
- <string key="minorKey">Foundation.framework/Headers/NSURL.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSObject</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier">
- <string key="majorKey">IBFrameworkSource</string>
- <string key="minorKey">Foundation.framework/Headers/NSURLConnection.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSObject</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier">
- <string key="majorKey">IBFrameworkSource</string>
- <string key="minorKey">Foundation.framework/Headers/NSURLDownload.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSResponder</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier">
- <string key="majorKey">IBFrameworkSource</string>
- <string key="minorKey">AppKit.framework/Headers/NSInterfaceStyle.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSResponder</string>
- <string key="superclassName">NSObject</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier">
- <string key="majorKey">IBFrameworkSource</string>
- <string key="minorKey">AppKit.framework/Headers/NSResponder.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSTableView</string>
- <string key="superclassName">NSControl</string>
- <reference key="sourceIdentifier" ref="809545482"/>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSText</string>
- <string key="superclassName">NSView</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier">
- <string key="majorKey">IBFrameworkSource</string>
- <string key="minorKey">AppKit.framework/Headers/NSText.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSTextView</string>
- <string key="superclassName">NSText</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier">
- <string key="majorKey">IBFrameworkSource</string>
- <string key="minorKey">AppKit.framework/Headers/NSTextView.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSView</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier">
- <string key="majorKey">IBFrameworkSource</string>
- <string key="minorKey">AppKit.framework/Headers/NSClipView.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSView</string>
- <reference key="sourceIdentifier" ref="472958451"/>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSView</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier">
- <string key="majorKey">IBFrameworkSource</string>
- <string key="minorKey">AppKit.framework/Headers/NSRulerView.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSView</string>
- <string key="superclassName">NSResponder</string>
- <reference key="sourceIdentifier" ref="260078765"/>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSWindow</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier">
- <string key="majorKey">IBFrameworkSource</string>
- <string key="minorKey">AppKit.framework/Headers/NSDrawer.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSWindow</string>
- <string key="superclassName">NSResponder</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier">
- <string key="majorKey">IBFrameworkSource</string>
- <string key="minorKey">AppKit.framework/Headers/NSWindow.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSWindow</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier">
- <string key="majorKey">IBFrameworkSource</string>
- <string key="minorKey">AppKit.framework/Headers/NSWindowScripting.h</string>
- </object>
- </object>
- </object>
- </object>
- <int key="IBDocument.localizationMode">0</int>
- <object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDependencyDefaults">
- <string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin.macosx</string>
- <integer value="1060" key="NS.object.0"/>
- </object>
- <object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDevelopmentDependencies">
- <string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin.InterfaceBuilder3</string>
- <integer value="3000" key="NS.object.0"/>
- </object>
- <bool key="IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion">YES</bool>
- <string key="IBDocument.LastKnownRelativeProjectPath">../TestApp.xcodeproj</string>
- <int key="IBDocument.defaultPropertyAccessControl">3</int>
- </data>
-</archive>
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/app-bundle/TestApp/TestApp-Info.plist b/deps/npm/node_modules/node-gyp/gyp/test/mac/app-bundle/TestApp/TestApp-Info.plist
deleted file mode 100644
index 8cb142e9f..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/app-bundle/TestApp/TestApp-Info.plist
+++ /dev/null
@@ -1,32 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
- <key>CFBundleDevelopmentRegion</key>
- <string>English</string>
- <key>CFBundleExecutable</key>
- <string>${EXECUTABLE_NAME}</string>
- <key>CFBundleIconFile</key>
- <string></string>
- <key>CFBundleIdentifier</key>
- <string>com.google.${PRODUCT_NAME}</string>
- <key>CFBundleInfoDictionaryVersion</key>
- <string>6.0</string>
- <key>CFBundleName</key>
- <string>${PRODUCT_NAME}</string>
- <key>CFBundlePackageType</key>
- <string>APPL</string>
- <key>CFBundleShortVersionString</key>
- <string>1.0</string>
- <key>CFBundleSignature</key>
- <string>ause</string>
- <key>CFBundleVersion</key>
- <string>1</string>
- <key>LSMinimumSystemVersion</key>
- <string>${MACOSX_DEPLOYMENT_TARGET}</string>
- <key>NSMainNibFile</key>
- <string>MainMenu</string>
- <key>NSPrincipalClass</key>
- <string>NSApplication</string>
-</dict>
-</plist>
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/app-bundle/TestApp/TestAppAppDelegate.h b/deps/npm/node_modules/node-gyp/gyp/test/mac/app-bundle/TestApp/TestAppAppDelegate.h
deleted file mode 100644
index 518645eae..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/app-bundle/TestApp/TestAppAppDelegate.h
+++ /dev/null
@@ -1,13 +0,0 @@
-// Copyright (c) 2011 Google Inc. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#import <Cocoa/Cocoa.h>
-
-@interface TestAppAppDelegate : NSObject <NSApplicationDelegate> {
- NSWindow *window;
-}
-
-@property (assign) IBOutlet NSWindow *window;
-
-@end
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/app-bundle/TestApp/TestAppAppDelegate.m b/deps/npm/node_modules/node-gyp/gyp/test/mac/app-bundle/TestApp/TestAppAppDelegate.m
deleted file mode 100644
index 9aafa4200..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/app-bundle/TestApp/TestAppAppDelegate.m
+++ /dev/null
@@ -1,15 +0,0 @@
-// Copyright (c) 2011 Google Inc. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#import "TestAppAppDelegate.h"
-
-@implementation TestAppAppDelegate
-
-@synthesize window;
-
-- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
- // Insert code here to initialize your application
-}
-
-@end
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/app-bundle/TestApp/main.m b/deps/npm/node_modules/node-gyp/gyp/test/mac/app-bundle/TestApp/main.m
deleted file mode 100644
index df6a12d06..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/app-bundle/TestApp/main.m
+++ /dev/null
@@ -1,10 +0,0 @@
-// Copyright (c) 2011 Google Inc. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#import <Cocoa/Cocoa.h>
-
-int main(int argc, char *argv[])
-{
- return NSApplicationMain(argc, (const char **) argv);
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/app-bundle/empty.c b/deps/npm/node_modules/node-gyp/gyp/test/mac/app-bundle/empty.c
deleted file mode 100644
index e69de29bb..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/app-bundle/empty.c
+++ /dev/null
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/app-bundle/test.gyp b/deps/npm/node_modules/node-gyp/gyp/test/mac/app-bundle/test.gyp
deleted file mode 100644
index f51c7b4b6..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/app-bundle/test.gyp
+++ /dev/null
@@ -1,39 +0,0 @@
-# Copyright (c) 2011 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-{
- 'targets': [
- {
- 'target_name': 'dep_framework',
- 'product_name': 'Dependency Framework',
- 'type': 'shared_library',
- 'mac_bundle': 1,
- 'sources': [ 'empty.c', ],
- },
- {
- 'target_name': 'test_app',
- 'product_name': 'Test App Gyp',
- 'type': 'executable',
- 'mac_bundle': 1,
- 'dependencies': [ 'dep_framework', ],
- 'sources': [
- 'TestApp/main.m',
- 'TestApp/TestApp_Prefix.pch',
- 'TestApp/TestAppAppDelegate.h',
- 'TestApp/TestAppAppDelegate.m',
- ],
- 'mac_bundle_resources': [
- 'TestApp/English.lproj/InfoPlist.strings',
- 'TestApp/English.lproj/MainMenu.xib',
- ],
- 'link_settings': {
- 'libraries': [
- '$(SDKROOT)/System/Library/Frameworks/Cocoa.framework',
- ],
- },
- 'xcode_settings': {
- 'INFOPLIST_FILE': 'TestApp/TestApp-Info.plist',
- },
- },
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/archs/my_file.cc b/deps/npm/node_modules/node-gyp/gyp/test/mac/archs/my_file.cc
deleted file mode 100644
index 94216a74d..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/archs/my_file.cc
+++ /dev/null
@@ -1,4 +0,0 @@
-/* Copyright (c) 2012 Google Inc. All rights reserved.
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file. */
-int x = 1;
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/archs/my_main_file.cc b/deps/npm/node_modules/node-gyp/gyp/test/mac/archs/my_main_file.cc
deleted file mode 100644
index f1fa06f27..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/archs/my_main_file.cc
+++ /dev/null
@@ -1,9 +0,0 @@
-/* Copyright (c) 2012 Google Inc. All rights reserved.
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file. */
-#include <stdio.h>
-extern int x;
-int main() {
- printf("hello, world %d\n", x);
-}
-
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/archs/test-archs-x86_64.gyp b/deps/npm/node_modules/node-gyp/gyp/test/mac/archs/test-archs-x86_64.gyp
deleted file mode 100644
index d11a89627..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/archs/test-archs-x86_64.gyp
+++ /dev/null
@@ -1,27 +0,0 @@
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'targets': [
- {
- 'target_name': 'lib',
- 'product_name': 'Test64',
- 'type': 'static_library',
- 'sources': [ 'my_file.cc' ],
- 'xcode_settings': {
- 'ARCHS': [ 'x86_64' ],
- },
- },
- {
- 'target_name': 'exe',
- 'product_name': 'Test64',
- 'type': 'executable',
- 'dependencies': [ 'lib' ],
- 'sources': [ 'my_main_file.cc' ],
- 'xcode_settings': {
- 'ARCHS': [ 'x86_64' ],
- },
- },
- ]
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/archs/test-no-archs.gyp b/deps/npm/node_modules/node-gyp/gyp/test/mac/archs/test-no-archs.gyp
deleted file mode 100644
index 8f3b6b47c..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/archs/test-no-archs.gyp
+++ /dev/null
@@ -1,21 +0,0 @@
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'targets': [
- {
- 'target_name': 'lib',
- 'product_name': 'Test',
- 'type': 'static_library',
- 'sources': [ 'my_file.cc' ],
- },
- {
- 'target_name': 'exe',
- 'product_name': 'Test',
- 'type': 'executable',
- 'dependencies': [ 'lib' ],
- 'sources': [ 'my_main_file.cc' ],
- },
- ]
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/cflags/ccfile.cc b/deps/npm/node_modules/node-gyp/gyp/test/mac/cflags/ccfile.cc
deleted file mode 100644
index 1a54d18ee..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/cflags/ccfile.cc
+++ /dev/null
@@ -1,7 +0,0 @@
-#ifdef CFLAG
-#error CFLAG should not be set
-#endif
-
-#ifndef CCFLAG
-#error CCFLAG should be set
-#endif
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/cflags/ccfile_withcflags.cc b/deps/npm/node_modules/node-gyp/gyp/test/mac/cflags/ccfile_withcflags.cc
deleted file mode 100644
index de078a064..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/cflags/ccfile_withcflags.cc
+++ /dev/null
@@ -1,7 +0,0 @@
-#ifndef CFLAG
-#error CFLAG should be set
-#endif
-
-#ifndef CCFLAG
-#error CCFLAG should be set
-#endif
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/cflags/cfile.c b/deps/npm/node_modules/node-gyp/gyp/test/mac/cflags/cfile.c
deleted file mode 100644
index 0af9d0af5..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/cflags/cfile.c
+++ /dev/null
@@ -1,7 +0,0 @@
-#ifndef CFLAG
-#error CFLAG should be set
-#endif
-
-#ifdef CCFLAG
-#error CCFLAG should not be set
-#endif
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/cflags/cppfile.cpp b/deps/npm/node_modules/node-gyp/gyp/test/mac/cflags/cppfile.cpp
deleted file mode 100644
index 1a54d18ee..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/cflags/cppfile.cpp
+++ /dev/null
@@ -1,7 +0,0 @@
-#ifdef CFLAG
-#error CFLAG should not be set
-#endif
-
-#ifndef CCFLAG
-#error CCFLAG should be set
-#endif
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/cflags/cppfile_withcflags.cpp b/deps/npm/node_modules/node-gyp/gyp/test/mac/cflags/cppfile_withcflags.cpp
deleted file mode 100644
index de078a064..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/cflags/cppfile_withcflags.cpp
+++ /dev/null
@@ -1,7 +0,0 @@
-#ifndef CFLAG
-#error CFLAG should be set
-#endif
-
-#ifndef CCFLAG
-#error CCFLAG should be set
-#endif
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/cflags/cxxfile.cxx b/deps/npm/node_modules/node-gyp/gyp/test/mac/cflags/cxxfile.cxx
deleted file mode 100644
index 1a54d18ee..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/cflags/cxxfile.cxx
+++ /dev/null
@@ -1,7 +0,0 @@
-#ifdef CFLAG
-#error CFLAG should not be set
-#endif
-
-#ifndef CCFLAG
-#error CCFLAG should be set
-#endif
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/cflags/cxxfile_withcflags.cxx b/deps/npm/node_modules/node-gyp/gyp/test/mac/cflags/cxxfile_withcflags.cxx
deleted file mode 100644
index de078a064..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/cflags/cxxfile_withcflags.cxx
+++ /dev/null
@@ -1,7 +0,0 @@
-#ifndef CFLAG
-#error CFLAG should be set
-#endif
-
-#ifndef CCFLAG
-#error CCFLAG should be set
-#endif
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/cflags/mfile.m b/deps/npm/node_modules/node-gyp/gyp/test/mac/cflags/mfile.m
deleted file mode 100644
index 0af9d0af5..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/cflags/mfile.m
+++ /dev/null
@@ -1,7 +0,0 @@
-#ifndef CFLAG
-#error CFLAG should be set
-#endif
-
-#ifdef CCFLAG
-#error CCFLAG should not be set
-#endif
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/cflags/mmfile.mm b/deps/npm/node_modules/node-gyp/gyp/test/mac/cflags/mmfile.mm
deleted file mode 100644
index 1a54d18ee..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/cflags/mmfile.mm
+++ /dev/null
@@ -1,7 +0,0 @@
-#ifdef CFLAG
-#error CFLAG should not be set
-#endif
-
-#ifndef CCFLAG
-#error CCFLAG should be set
-#endif
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/cflags/mmfile_withcflags.mm b/deps/npm/node_modules/node-gyp/gyp/test/mac/cflags/mmfile_withcflags.mm
deleted file mode 100644
index de078a064..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/cflags/mmfile_withcflags.mm
+++ /dev/null
@@ -1,7 +0,0 @@
-#ifndef CFLAG
-#error CFLAG should be set
-#endif
-
-#ifndef CCFLAG
-#error CCFLAG should be set
-#endif
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/cflags/test.gyp b/deps/npm/node_modules/node-gyp/gyp/test/mac/cflags/test.gyp
deleted file mode 100644
index 6b04b5f2f..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/cflags/test.gyp
+++ /dev/null
@@ -1,119 +0,0 @@
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-{
- 'targets': [
- {
- 'target_name': 'mytarget',
- 'type': 'shared_library',
- 'sources': [
- 'cfile.c',
- 'mfile.m',
- 'ccfile.cc',
- 'cppfile.cpp',
- 'cxxfile.cxx',
- 'mmfile.mm',
- ],
- 'xcode_settings': {
- # Normally, defines would go in 'defines' instead. This is just for
- # testing.
- 'OTHER_CFLAGS': [
- '-DCFLAG',
- ],
- 'OTHER_CPLUSPLUSFLAGS': [
- '-DCCFLAG',
- ],
- 'GCC_C_LANGUAGE_STANDARD': 'c99',
- },
- },
- {
- 'target_name': 'mytarget_reuse_cflags',
- 'type': 'shared_library',
- 'sources': [
- 'cfile.c',
- 'mfile.m',
- 'ccfile_withcflags.cc',
- 'cppfile_withcflags.cpp',
- 'cxxfile_withcflags.cxx',
- 'mmfile_withcflags.mm',
- ],
- 'xcode_settings': {
- 'OTHER_CFLAGS': [
- '-DCFLAG',
- ],
- 'OTHER_CPLUSPLUSFLAGS': [
- '$OTHER_CFLAGS',
- '-DCCFLAG',
- ],
- # This is a C-only flag, to check these don't get added to C++ files.
- 'GCC_C_LANGUAGE_STANDARD': 'c99',
- },
- },
- {
- 'target_name': 'mytarget_inherit_cflags',
- 'type': 'shared_library',
- 'sources': [
- 'cfile.c',
- 'mfile.m',
- 'ccfile_withcflags.cc',
- 'cppfile_withcflags.cpp',
- 'cxxfile_withcflags.cxx',
- 'mmfile_withcflags.mm',
- ],
- 'xcode_settings': {
- 'OTHER_CFLAGS': [
- '-DCFLAG',
- ],
- 'OTHER_CPLUSPLUSFLAGS': [
- '$inherited',
- '-DCCFLAG',
- ],
- 'GCC_C_LANGUAGE_STANDARD': 'c99',
- },
- },
- {
- 'target_name': 'mytarget_inherit_cflags_parens',
- 'type': 'shared_library',
- 'sources': [
- 'cfile.c',
- 'mfile.m',
- 'ccfile_withcflags.cc',
- 'cppfile_withcflags.cpp',
- 'cxxfile_withcflags.cxx',
- 'mmfile_withcflags.mm',
- ],
- 'xcode_settings': {
- 'OTHER_CFLAGS': [
- '-DCFLAG',
- ],
- 'OTHER_CPLUSPLUSFLAGS': [
- '$(inherited)',
- '-DCCFLAG',
- ],
- 'GCC_C_LANGUAGE_STANDARD': 'c99',
- },
- },
- {
- 'target_name': 'mytarget_inherit_cflags_braces',
- 'type': 'shared_library',
- 'sources': [
- 'cfile.c',
- 'mfile.m',
- 'ccfile_withcflags.cc',
- 'cppfile_withcflags.cpp',
- 'cxxfile_withcflags.cxx',
- 'mmfile_withcflags.mm',
- ],
- 'xcode_settings': {
- 'OTHER_CFLAGS': [
- '-DCFLAG',
- ],
- 'OTHER_CPLUSPLUSFLAGS': [
- '${inherited}',
- '-DCCFLAG',
- ],
- 'GCC_C_LANGUAGE_STANDARD': 'c99',
- },
- },
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/copy-dylib/empty.c b/deps/npm/node_modules/node-gyp/gyp/test/mac/copy-dylib/empty.c
deleted file mode 100644
index 237c8ce18..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/copy-dylib/empty.c
+++ /dev/null
@@ -1 +0,0 @@
-int main() {}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/copy-dylib/test.gyp b/deps/npm/node_modules/node-gyp/gyp/test/mac/copy-dylib/test.gyp
deleted file mode 100644
index 4210c5146..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/copy-dylib/test.gyp
+++ /dev/null
@@ -1,31 +0,0 @@
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-{
- 'targets': [
- {
- 'target_name': 'my_dylib',
- 'type': 'shared_library',
- 'sources': [ 'empty.c', ],
- },
- {
- 'target_name': 'test_app',
- 'product_name': 'Test App',
- 'type': 'executable',
- 'mac_bundle': 1,
- 'dependencies': [ 'my_dylib', ],
- 'sources': [
- 'empty.c',
- ],
- 'copies': [
- {
- 'destination': '<(PRODUCT_DIR)/Test App.app/Contents/Resources',
- 'files': [
- '<(PRODUCT_DIR)/libmy_dylib.dylib',
- ],
- },
- ],
- },
- ],
-}
-
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/debuginfo/file.c b/deps/npm/node_modules/node-gyp/gyp/test/mac/debuginfo/file.c
deleted file mode 100644
index 9cddaf1b0..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/debuginfo/file.c
+++ /dev/null
@@ -1,6 +0,0 @@
-// Copyright (c) 2011 Google Inc. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-void f() {}
-int main() {}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/debuginfo/test.gyp b/deps/npm/node_modules/node-gyp/gyp/test/mac/debuginfo/test.gyp
deleted file mode 100644
index 3faf6b5c7..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/debuginfo/test.gyp
+++ /dev/null
@@ -1,82 +0,0 @@
-# Copyright (c) 2011 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-{
- 'targets': [
- {
- 'target_name': 'nonbundle_static_library',
- 'type': 'static_library',
- 'sources': [ 'file.c', ],
- 'xcode_settings': {
- 'DEBUG_INFORMATION_FORMAT': 'dwarf-with-dsym',
- 'DEPLOYMENT_POSTPROCESSING': 'YES',
- 'STRIP_INSTALLED_PRODUCT': 'YES',
- },
- },
- {
- 'target_name': 'nonbundle_shared_library',
- 'type': 'shared_library',
- 'sources': [ 'file.c', ],
- 'xcode_settings': {
- 'DEBUG_INFORMATION_FORMAT': 'dwarf-with-dsym',
- 'DEPLOYMENT_POSTPROCESSING': 'YES',
- 'STRIP_INSTALLED_PRODUCT': 'YES',
- },
- },
- {
- 'target_name': 'nonbundle_loadable_module',
- 'type': 'loadable_module',
- 'sources': [ 'file.c', ],
- 'xcode_settings': {
- 'DEBUG_INFORMATION_FORMAT': 'dwarf-with-dsym',
- 'DEPLOYMENT_POSTPROCESSING': 'YES',
- 'STRIP_INSTALLED_PRODUCT': 'YES',
- },
- },
- {
- 'target_name': 'nonbundle_executable',
- 'type': 'executable',
- 'sources': [ 'file.c', ],
- 'xcode_settings': {
- 'DEBUG_INFORMATION_FORMAT': 'dwarf-with-dsym',
- 'DEPLOYMENT_POSTPROCESSING': 'YES',
- 'STRIP_INSTALLED_PRODUCT': 'YES',
- },
- },
-
- {
- 'target_name': 'bundle_shared_library',
- 'type': 'shared_library',
- 'mac_bundle': 1,
- 'sources': [ 'file.c', ],
- 'xcode_settings': {
- 'DEBUG_INFORMATION_FORMAT': 'dwarf-with-dsym',
- 'DEPLOYMENT_POSTPROCESSING': 'YES',
- 'STRIP_INSTALLED_PRODUCT': 'YES',
- },
- },
- {
- 'target_name': 'bundle_loadable_module',
- 'type': 'loadable_module',
- 'mac_bundle': 1,
- 'sources': [ 'file.c', ],
- 'xcode_settings': {
- 'DEBUG_INFORMATION_FORMAT': 'dwarf-with-dsym',
- 'DEPLOYMENT_POSTPROCESSING': 'YES',
- 'STRIP_INSTALLED_PRODUCT': 'YES',
- },
- },
- {
- 'target_name': 'my_app',
- 'product_name': 'My App',
- 'type': 'executable',
- 'mac_bundle': 1,
- 'sources': [ 'file.c', ],
- 'xcode_settings': {
- 'DEBUG_INFORMATION_FORMAT': 'dwarf-with-dsym',
- 'DEPLOYMENT_POSTPROCESSING': 'YES',
- 'STRIP_INSTALLED_PRODUCT': 'YES',
- },
- },
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/depend-on-bundle/English.lproj/InfoPlist.strings b/deps/npm/node_modules/node-gyp/gyp/test/mac/depend-on-bundle/English.lproj/InfoPlist.strings
deleted file mode 100644
index b92732c79..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/depend-on-bundle/English.lproj/InfoPlist.strings
+++ /dev/null
@@ -1 +0,0 @@
-/* Localized versions of Info.plist keys */
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/depend-on-bundle/Info.plist b/deps/npm/node_modules/node-gyp/gyp/test/mac/depend-on-bundle/Info.plist
deleted file mode 100644
index 5e05a5190..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/depend-on-bundle/Info.plist
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
- <key>CFBundleDevelopmentRegion</key>
- <string>English</string>
- <key>CFBundleExecutable</key>
- <string>${EXECUTABLE_NAME}</string>
- <key>CFBundleIconFile</key>
- <string></string>
- <key>CFBundleIdentifier</key>
- <string>com.yourcompany.${PRODUCT_NAME}</string>
- <key>CFBundleInfoDictionaryVersion</key>
- <string>6.0</string>
- <key>CFBundleName</key>
- <string>${PRODUCT_NAME}</string>
- <key>CFBundlePackageType</key>
- <string>FMWK</string>
- <key>CFBundleShortVersionString</key>
- <string>1.0</string>
- <key>CFBundleSignature</key>
- <string>????</string>
- <key>CFBundleVersion</key>
- <string>1</string>
- <key>NSPrincipalClass</key>
- <string></string>
-</dict>
-</plist>
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/depend-on-bundle/bundle.c b/deps/npm/node_modules/node-gyp/gyp/test/mac/depend-on-bundle/bundle.c
deleted file mode 100644
index d64ff8ca2..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/depend-on-bundle/bundle.c
+++ /dev/null
@@ -1 +0,0 @@
-int f() { return 42; }
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/depend-on-bundle/executable.c b/deps/npm/node_modules/node-gyp/gyp/test/mac/depend-on-bundle/executable.c
deleted file mode 100644
index 931bce637..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/depend-on-bundle/executable.c
+++ /dev/null
@@ -1,4 +0,0 @@
-int f();
-int main() {
- return f();
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/depend-on-bundle/test.gyp b/deps/npm/node_modules/node-gyp/gyp/test/mac/depend-on-bundle/test.gyp
deleted file mode 100644
index e00b10541..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/depend-on-bundle/test.gyp
+++ /dev/null
@@ -1,28 +0,0 @@
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-{
- 'targets': [
- {
- 'target_name': 'my_bundle',
- 'type': 'shared_library',
- 'mac_bundle': 1,
- 'sources': [ 'bundle.c' ],
- 'mac_bundle_resources': [
- 'English.lproj/InfoPlist.strings',
- ],
- 'xcode_settings': {
- 'INFOPLIST_FILE': 'Info.plist',
- }
- },
- {
- 'target_name': 'dependent_on_bundle',
- 'type': 'executable',
- 'sources': [ 'executable.c' ],
- 'dependencies': [
- 'my_bundle',
- ],
- },
- ],
-}
-
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/framework-dirs/calculate.c b/deps/npm/node_modules/node-gyp/gyp/test/mac/framework-dirs/calculate.c
deleted file mode 100644
index 7dc9d2d8b..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/framework-dirs/calculate.c
+++ /dev/null
@@ -1,15 +0,0 @@
-/* Copyright (c) 2012 Google Inc. All rights reserved.
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-int CalculatePerformExpression(char* expr,
- int significantDigits,
- int flags,
- char* answer);
-
-int main() {
- char buffer[1024];
- return CalculatePerformExpression("42", 1, 0, buffer);
-}
-
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/framework-dirs/framework-dirs.gyp b/deps/npm/node_modules/node-gyp/gyp/test/mac/framework-dirs/framework-dirs.gyp
deleted file mode 100644
index bf1cbde4d..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/framework-dirs/framework-dirs.gyp
+++ /dev/null
@@ -1,21 +0,0 @@
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'targets': [
- {
- 'target_name': 'calculate',
- 'type': 'executable',
- 'sources': [
- 'calculate.c',
- ],
- 'libraries': [
- '/System/Library/PrivateFrameworks/Calculate.framework',
- ],
- 'mac_framework_dirs': [
- '/System/Library/PrivateFrameworks',
- ],
- },
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/framework-headers/myframework.h b/deps/npm/node_modules/node-gyp/gyp/test/mac/framework-headers/myframework.h
deleted file mode 100644
index 961fc701b..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/framework-headers/myframework.h
+++ /dev/null
@@ -1,8 +0,0 @@
-// Copyright (c) 2012 Google Inc. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#import <Foundation/Foundation.h>
-
-@interface TestObject : NSObject
-@end
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/framework-headers/myframework.m b/deps/npm/node_modules/node-gyp/gyp/test/mac/framework-headers/myframework.m
deleted file mode 100644
index 13d53a37a..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/framework-headers/myframework.m
+++ /dev/null
@@ -1,8 +0,0 @@
-// Copyright (c) 2012 Google Inc. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#import "myframework.h"
-
-@implementation TestObject
-@end
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/framework-headers/test.gyp b/deps/npm/node_modules/node-gyp/gyp/test/mac/framework-headers/test.gyp
deleted file mode 100644
index 70ed00715..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/framework-headers/test.gyp
+++ /dev/null
@@ -1,44 +0,0 @@
-# Copyright (c) 2011 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-{
- 'targets': [
- {
- 'target_name': 'test_framework_headers_framework',
- 'product_name': 'TestFramework',
- 'type': 'shared_library',
- 'mac_bundle': 1,
- 'sources': [
- 'myframework.h',
- 'myframework.m',
- ],
- 'mac_framework_headers': [
- 'myframework.h',
- ],
- 'link_settings': {
- 'libraries': [
- '$(SDKROOT)/System/Library/Frameworks/Foundation.framework',
- ],
- },
- },{
- 'target_name': 'test_framework_headers_static',
- 'product_name': 'TestLibrary',
- 'type': 'static_library',
- 'xcode_settings': {
- 'PUBLIC_HEADERS_FOLDER_PATH': 'include',
- },
- 'sources': [
- 'myframework.h',
- 'myframework.m',
- ],
- 'mac_framework_headers': [
- 'myframework.h',
- ],
- 'link_settings': {
- 'libraries': [
- '$(SDKROOT)/System/Library/Frameworks/Foundation.framework',
- ],
- },
- },
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/framework/TestFramework/English.lproj/InfoPlist.strings b/deps/npm/node_modules/node-gyp/gyp/test/mac/framework/TestFramework/English.lproj/InfoPlist.strings
deleted file mode 100644
index 88f65cf6e..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/framework/TestFramework/English.lproj/InfoPlist.strings
+++ /dev/null
@@ -1,2 +0,0 @@
-/* Localized versions of Info.plist keys */
-
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/framework/TestFramework/Info.plist b/deps/npm/node_modules/node-gyp/gyp/test/mac/framework/TestFramework/Info.plist
deleted file mode 100644
index 5e05a5190..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/framework/TestFramework/Info.plist
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
- <key>CFBundleDevelopmentRegion</key>
- <string>English</string>
- <key>CFBundleExecutable</key>
- <string>${EXECUTABLE_NAME}</string>
- <key>CFBundleIconFile</key>
- <string></string>
- <key>CFBundleIdentifier</key>
- <string>com.yourcompany.${PRODUCT_NAME}</string>
- <key>CFBundleInfoDictionaryVersion</key>
- <string>6.0</string>
- <key>CFBundleName</key>
- <string>${PRODUCT_NAME}</string>
- <key>CFBundlePackageType</key>
- <string>FMWK</string>
- <key>CFBundleShortVersionString</key>
- <string>1.0</string>
- <key>CFBundleSignature</key>
- <string>????</string>
- <key>CFBundleVersion</key>
- <string>1</string>
- <key>NSPrincipalClass</key>
- <string></string>
-</dict>
-</plist>
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/framework/TestFramework/ObjCVector.h b/deps/npm/node_modules/node-gyp/gyp/test/mac/framework/TestFramework/ObjCVector.h
deleted file mode 100644
index c2450960c..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/framework/TestFramework/ObjCVector.h
+++ /dev/null
@@ -1,28 +0,0 @@
-// Copyright (c) 2011 Google Inc. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#import <Cocoa/Cocoa.h>
-
-#ifdef __cplusplus
-struct ObjCVectorImp;
-#else
-typedef struct _ObjCVectorImpT ObjCVectorImp;
-#endif
-
-@interface ObjCVector : NSObject {
- @private
- ObjCVectorImp* imp_;
-}
-
-- (id)init;
-
-- (void)addObject:(id)obj;
-- (void)addObject:(id)obj atIndex:(NSUInteger)index;
-
-- (void)removeObject:(id)obj;
-- (void)removeObjectAtIndex:(NSUInteger)index;
-
-- (id)objectAtIndex:(NSUInteger)index;
-
-@end
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/framework/TestFramework/ObjCVector.mm b/deps/npm/node_modules/node-gyp/gyp/test/mac/framework/TestFramework/ObjCVector.mm
deleted file mode 100644
index cbf431f28..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/framework/TestFramework/ObjCVector.mm
+++ /dev/null
@@ -1,63 +0,0 @@
-// Copyright (c) 2011 Google Inc. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#import "ObjCVectorInternal.h"
-#import "ObjCVector.h"
-
-#include <vector>
-
-@interface ObjCVector (Private)
-- (std::vector<id>::iterator)makeIterator:(NSUInteger)index;
-@end
-
-@implementation ObjCVector
-
-- (id)init {
- if ((self = [super init])) {
- imp_ = new ObjCVectorImp();
- }
- return self;
-}
-
-- (void)dealloc {
- delete imp_;
- [super dealloc];
-}
-
-- (void)addObject:(id)obj {
- imp_->v.push_back([obj retain]);
-}
-
-- (void)addObject:(id)obj atIndex:(NSUInteger)index {
- imp_->v.insert([self makeIterator:index], [obj retain]);
-}
-
-- (void)removeObject:(id)obj {
- for (std::vector<id>::iterator it = imp_->v.begin();
- it != imp_->v.end();
- ++it) {
- if ([*it isEqual:obj]) {
- [*it autorelease];
- imp_->v.erase(it);
- return;
- }
- }
-}
-
-- (void)removeObjectAtIndex:(NSUInteger)index {
- [imp_->v[index] autorelease];
- imp_->v.erase([self makeIterator:index]);
-}
-
-- (id)objectAtIndex:(NSUInteger)index {
- return imp_->v[index];
-}
-
-- (std::vector<id>::iterator)makeIterator:(NSUInteger)index {
- std::vector<id>::iterator it = imp_->v.begin();
- it += index;
- return it;
-}
-
-@end
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/framework/TestFramework/ObjCVectorInternal.h b/deps/npm/node_modules/node-gyp/gyp/test/mac/framework/TestFramework/ObjCVectorInternal.h
deleted file mode 100644
index fb6c98258..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/framework/TestFramework/ObjCVectorInternal.h
+++ /dev/null
@@ -1,9 +0,0 @@
-// Copyright (c) 2011 Google Inc. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include <vector>
-
-struct ObjCVectorImp {
- std::vector<id> v;
-};
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/framework/TestFramework/TestFramework_Prefix.pch b/deps/npm/node_modules/node-gyp/gyp/test/mac/framework/TestFramework/TestFramework_Prefix.pch
deleted file mode 100644
index 394f41d95..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/framework/TestFramework/TestFramework_Prefix.pch
+++ /dev/null
@@ -1,7 +0,0 @@
-//
-// Prefix header for all source files of the 'TestFramework' target in the 'TestFramework' project.
-//
-
-#ifdef __OBJC__
- #import <Cocoa/Cocoa.h>
-#endif
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/framework/empty.c b/deps/npm/node_modules/node-gyp/gyp/test/mac/framework/empty.c
deleted file mode 100644
index e69de29bb..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/framework/empty.c
+++ /dev/null
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/framework/framework.gyp b/deps/npm/node_modules/node-gyp/gyp/test/mac/framework/framework.gyp
deleted file mode 100644
index 7480e526c..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/framework/framework.gyp
+++ /dev/null
@@ -1,74 +0,0 @@
-# Copyright (c) 2011 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-{
- 'targets': [
- {
- 'target_name': 'dep_framework',
- 'product_name': 'Dependency Bundle',
- 'type': 'shared_library',
- 'mac_bundle': 1,
- 'sources': [ 'empty.c', ],
- },
- {
- 'target_name': 'test_framework',
- 'product_name': 'Test Framework',
- 'type': 'shared_library',
- 'mac_bundle': 1,
- 'dependencies': [ 'dep_framework', ],
- 'sources': [
- 'TestFramework/ObjCVector.h',
- 'TestFramework/ObjCVectorInternal.h',
- 'TestFramework/ObjCVector.mm',
- ],
- 'mac_framework_headers': [
- 'TestFramework/ObjCVector.h',
- ],
- 'mac_bundle_resources': [
- 'TestFramework/English.lproj/InfoPlist.strings',
- ],
- 'link_settings': {
- 'libraries': [
- '$(SDKROOT)/System/Library/Frameworks/Cocoa.framework',
- ],
- },
- 'xcode_settings': {
- 'INFOPLIST_FILE': 'TestFramework/Info.plist',
- 'GCC_DYNAMIC_NO_PIC': 'NO',
- },
- 'copies': [
- # Test copying to a file that has envvars in its dest path.
- # Needs to be in a mac_bundle target, else CONTENTS_FOLDER_PATH isn't
- # set.
- {
- 'destination': '<(PRODUCT_DIR)/$(CONTENTS_FOLDER_PATH)/Libraries',
- 'files': [
- 'empty.c',
- ],
- },
- ],
- },
- {
- 'target_name': 'copy_target',
- 'type': 'none',
- 'dependencies': [ 'test_framework', 'dep_framework', ],
- 'copies': [
- # Test copying directories with spaces in src and dest paths.
- {
- 'destination': '<(PRODUCT_DIR)/Test Framework.framework/foo',
- 'files': [
- '<(PRODUCT_DIR)/Dependency Bundle.framework',
- ],
- },
- ],
- 'actions': [
- {
- 'action_name': 'aektschn',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/touched_file'],
- 'action': ['touch', '${BUILT_PRODUCTS_DIR}/action_file'],
- },
- ],
- },
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/global-settings/src/dir1/dir1.gyp b/deps/npm/node_modules/node-gyp/gyp/test/mac/global-settings/src/dir1/dir1.gyp
deleted file mode 100644
index 153e34ddd..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/global-settings/src/dir1/dir1.gyp
+++ /dev/null
@@ -1,11 +0,0 @@
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-{
- 'targets': [
- {
- 'target_name': 'dir1_target',
- 'type': 'none',
- },
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/global-settings/src/dir2/dir2.gyp b/deps/npm/node_modules/node-gyp/gyp/test/mac/global-settings/src/dir2/dir2.gyp
deleted file mode 100644
index cda46c839..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/global-settings/src/dir2/dir2.gyp
+++ /dev/null
@@ -1,22 +0,0 @@
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-{
- 'targets': [
- {
- 'target_name': 'dir2_target',
- 'type': 'none',
- 'dependencies': [
- '../dir1/dir1.gyp:dir1_target',
- ],
- 'actions': [
- {
- 'inputs': [ ],
- 'outputs': [ '<(PRODUCT_DIR)/file.txt' ],
- 'action_name': 'Test action',
- 'action': ['cp', 'file.txt', '${BUILT_PRODUCTS_DIR}/file.txt' ],
- },
- ],
- },
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/global-settings/src/dir2/file.txt b/deps/npm/node_modules/node-gyp/gyp/test/mac/global-settings/src/dir2/file.txt
deleted file mode 100644
index 58da2d8e9..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/global-settings/src/dir2/file.txt
+++ /dev/null
@@ -1 +0,0 @@
-File.
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/gyptest-action-envvars.py b/deps/npm/node_modules/node-gyp/gyp/test/mac/gyptest-action-envvars.py
deleted file mode 100644
index b4f37c43a..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/gyptest-action-envvars.py
+++ /dev/null
@@ -1,30 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Verifies that env vars work with actions, with relative directory paths.
-"""
-
-import TestGyp
-
-import sys
-
-if sys.platform == 'darwin':
- test = TestGyp.TestGyp(formats=['ninja', 'make', 'xcode'])
-
- CHDIR = 'action-envvars'
- test.run_gyp('action/action.gyp', chdir=CHDIR)
- test.build('action/action.gyp', 'action', chdir=CHDIR, SYMROOT='../build')
-
- result_file = test.built_file_path('result', chdir=CHDIR)
- test.must_exist(result_file)
- test.must_contain(result_file, 'Test output')
-
- other_result_file = test.built_file_path('other_result', chdir=CHDIR)
- test.must_exist(other_result_file)
- test.must_contain(other_result_file, 'Other output')
-
- test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/gyptest-app.py b/deps/npm/node_modules/node-gyp/gyp/test/mac/gyptest-app.py
deleted file mode 100755
index a93b156a7..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/gyptest-app.py
+++ /dev/null
@@ -1,47 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Verifies that app bundles are built correctly.
-"""
-
-import TestGyp
-
-import sys
-
-if sys.platform == 'darwin':
- test = TestGyp.TestGyp(formats=['ninja', 'make', 'xcode'])
-
- test.run_gyp('test.gyp', chdir='app-bundle')
-
- test.build('test.gyp', test.ALL, chdir='app-bundle')
-
- # Binary
- test.built_file_must_exist('Test App Gyp.app/Contents/MacOS/Test App Gyp',
- chdir='app-bundle')
-
- # Info.plist
- info_plist = test.built_file_path('Test App Gyp.app/Contents/Info.plist',
- chdir='app-bundle')
- test.must_exist(info_plist)
- test.must_contain(info_plist, 'com.google.Test App Gyp') # Variable expansion
-
- # Resources
- test.built_file_must_exist(
- 'Test App Gyp.app/Contents/Resources/English.lproj/InfoPlist.strings',
- chdir='app-bundle')
- test.built_file_must_exist(
- 'Test App Gyp.app/Contents/Resources/English.lproj/MainMenu.nib',
- chdir='app-bundle')
-
- # Packaging
- test.built_file_must_exist('Test App Gyp.app/Contents/PkgInfo',
- chdir='app-bundle')
- test.built_file_must_match('Test App Gyp.app/Contents/PkgInfo', 'APPLause',
- chdir='app-bundle')
-
-
- test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/gyptest-archs.py b/deps/npm/node_modules/node-gyp/gyp/test/mac/gyptest-archs.py
deleted file mode 100644
index 781e9ef16..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/gyptest-archs.py
+++ /dev/null
@@ -1,37 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Tests things related to ARCHS.
-"""
-
-import TestGyp
-
-import subprocess
-import sys
-
-if sys.platform == 'darwin':
- test = TestGyp.TestGyp(formats=['ninja', 'make', 'xcode'])
-
- def CheckFileType(file, expected):
- proc = subprocess.Popen(['file', '-b', file], stdout=subprocess.PIPE)
- o = proc.communicate()[0].strip()
- assert not proc.returncode
- if o != expected:
- print 'File: Expected %s, got %s' % (expected, o)
- test.fail_test()
-
- test.run_gyp('test-no-archs.gyp', chdir='archs')
- test.build('test-no-archs.gyp', test.ALL, chdir='archs')
- result_file = test.built_file_path('Test', chdir='archs')
- test.must_exist(result_file)
- CheckFileType(result_file, 'Mach-O executable i386')
-
- test.run_gyp('test-archs-x86_64.gyp', chdir='archs')
- test.build('test-archs-x86_64.gyp', test.ALL, chdir='archs')
- result_file = test.built_file_path('Test64', chdir='archs')
- test.must_exist(result_file)
- CheckFileType(result_file, 'Mach-O 64-bit executable x86_64')
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/gyptest-cflags.py b/deps/npm/node_modules/node-gyp/gyp/test/mac/gyptest-cflags.py
deleted file mode 100644
index 388832298..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/gyptest-cflags.py
+++ /dev/null
@@ -1,21 +0,0 @@
-
-#!/usr/bin/env python
-
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Verifies that compile-time flags work.
-"""
-
-import TestGyp
-
-import sys
-
-if sys.platform == 'darwin':
- test = TestGyp.TestGyp(formats=['ninja', 'make', 'xcode'])
- CHDIR = 'cflags'
- test.run_gyp('test.gyp', chdir=CHDIR)
- test.build('test.gyp', test.ALL, chdir=CHDIR)
- test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/gyptest-copies.py b/deps/npm/node_modules/node-gyp/gyp/test/mac/gyptest-copies.py
deleted file mode 100755
index c88065ead..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/gyptest-copies.py
+++ /dev/null
@@ -1,49 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Verifies that 'copies' with app bundles are handled correctly.
-"""
-
-import TestGyp
-
-import os
-import sys
-import time
-
-if sys.platform == 'darwin':
- test = TestGyp.TestGyp(formats=['ninja', 'make', 'xcode'])
-
- test.run_gyp('framework.gyp', chdir='framework')
-
- test.build('framework.gyp', 'copy_target', chdir='framework')
-
- # Check that the copy succeeded.
- test.built_file_must_exist(
- 'Test Framework.framework/foo/Dependency Bundle.framework',
- chdir='framework')
- test.built_file_must_exist(
- 'Test Framework.framework/foo/Dependency Bundle.framework/Versions/A',
- chdir='framework')
- test.built_file_must_exist(
- 'Test Framework.framework/Versions/A/Libraries/empty.c',
- chdir='framework')
-
-
- # Check that rebuilding the target a few times works.
- dep_bundle = test.built_file_path('Dependency Bundle.framework',
- chdir='framework')
- mtime = os.path.getmtime(dep_bundle)
- atime = os.path.getatime(dep_bundle)
- for i in range(3):
- os.utime(dep_bundle, (atime + i * 1000, mtime + i * 1000))
- test.build('framework.gyp', 'copy_target', chdir='framework')
-
-
- # Check that actions ran.
- test.built_file_must_exist('action_file', chdir='framework')
-
- test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/gyptest-copy-dylib.py b/deps/npm/node_modules/node-gyp/gyp/test/mac/gyptest-copy-dylib.py
deleted file mode 100644
index 253623d1c..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/gyptest-copy-dylib.py
+++ /dev/null
@@ -1,25 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Verifies that dylibs can be copied into app bundles.
-"""
-
-import TestGyp
-
-import sys
-
-if sys.platform == 'darwin':
- test = TestGyp.TestGyp(formats=['ninja', 'make', 'xcode'])
-
- test.run_gyp('test.gyp', chdir='copy-dylib')
-
- test.build('test.gyp', 'test_app', chdir='copy-dylib')
-
- test.built_file_must_exist(
- 'Test App.app/Contents/Resources/libmy_dylib.dylib', chdir='copy-dylib')
-
- test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/gyptest-debuginfo.py b/deps/npm/node_modules/node-gyp/gyp/test/mac/gyptest-debuginfo.py
deleted file mode 100755
index a0e9438e2..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/gyptest-debuginfo.py
+++ /dev/null
@@ -1,36 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2011 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Tests things related to debug information generation.
-"""
-
-import TestGyp
-
-import sys
-
-if sys.platform == 'darwin':
- test = TestGyp.TestGyp(formats=['ninja', 'make', 'xcode'])
-
- test.run_gyp('test.gyp', chdir='debuginfo')
-
- test.build('test.gyp', test.ALL, chdir='debuginfo')
-
- test.built_file_must_exist('libnonbundle_shared_library.dylib.dSYM',
- chdir='debuginfo')
- test.built_file_must_exist('nonbundle_loadable_module.so.dSYM',
- chdir='debuginfo')
- test.built_file_must_exist('nonbundle_executable.dSYM',
- chdir='debuginfo')
-
- test.built_file_must_exist('bundle_shared_library.framework.dSYM',
- chdir='debuginfo')
- test.built_file_must_exist('bundle_loadable_module.bundle.dSYM',
- chdir='debuginfo')
- test.built_file_must_exist('My App.app.dSYM',
- chdir='debuginfo')
-
- test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/gyptest-depend-on-bundle.py b/deps/npm/node_modules/node-gyp/gyp/test/mac/gyptest-depend-on-bundle.py
deleted file mode 100644
index 5cccb0322..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/gyptest-depend-on-bundle.py
+++ /dev/null
@@ -1,40 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Verifies that a dependency on a bundle causes the whole bundle to be built.
-"""
-
-import TestGyp
-
-import sys
-
-if sys.platform == 'darwin':
- test = TestGyp.TestGyp(formats=['ninja', 'make', 'xcode'])
-
- test.run_gyp('test.gyp', chdir='depend-on-bundle')
-
- test.build('test.gyp', 'dependent_on_bundle', chdir='depend-on-bundle')
-
- # Binary itself.
- test.built_file_must_exist('dependent_on_bundle', chdir='depend-on-bundle')
-
- # Bundle dependency.
- test.built_file_must_exist(
- 'my_bundle.framework/Versions/A/my_bundle',
- chdir='depend-on-bundle')
- test.built_file_must_exist( # package_framework
- 'my_bundle.framework/my_bundle',
- chdir='depend-on-bundle')
- test.built_file_must_exist( # plist
- 'my_bundle.framework/Versions/A/Resources/Info.plist',
- chdir='depend-on-bundle')
- test.built_file_must_exist(
- 'my_bundle.framework/Versions/A/Resources/English.lproj/' # Resources
- 'InfoPlist.strings',
- chdir='depend-on-bundle')
-
- test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/gyptest-framework-dirs.py b/deps/npm/node_modules/node-gyp/gyp/test/mac/gyptest-framework-dirs.py
deleted file mode 100644
index a1ae54c57..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/gyptest-framework-dirs.py
+++ /dev/null
@@ -1,23 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Verify that it is possible to build an object that depends on a
-PrivateFramework.
-"""
-
-import os
-import sys
-import TestGyp
-
-if sys.platform == 'darwin':
- test = TestGyp.TestGyp(formats=['ninja', 'make', 'xcode'])
-
- CHDIR = 'framework-dirs'
- test.run_gyp('framework-dirs.gyp', chdir=CHDIR)
- test.build('framework-dirs.gyp', 'calculate', chdir=CHDIR)
-
- test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/gyptest-framework-headers.py b/deps/npm/node_modules/node-gyp/gyp/test/mac/gyptest-framework-headers.py
deleted file mode 100644
index aa13a742c..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/gyptest-framework-headers.py
+++ /dev/null
@@ -1,38 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Verifies that mac_framework_headers works properly.
-"""
-
-import TestGyp
-
-import sys
-
-if sys.platform == 'darwin':
- # TODO(thakis): Make this work with ninja, make. http://crbug.com/129013
- test = TestGyp.TestGyp(formats=['xcode'])
-
- CHDIR = 'framework-headers'
- test.run_gyp('test.gyp', chdir=CHDIR)
-
- # Test that headers are installed for frameworks
- test.build('test.gyp', 'test_framework_headers_framework', chdir=CHDIR)
-
- test.built_file_must_exist(
- 'TestFramework.framework/Versions/A/TestFramework', chdir=CHDIR)
-
- test.built_file_must_exist(
- 'TestFramework.framework/Versions/A/Headers/myframework.h', chdir=CHDIR)
-
- # Test that headers are installed for static libraries.
- test.build('test.gyp', 'test_framework_headers_static', chdir=CHDIR)
-
- test.built_file_must_exist('libTestLibrary.a', chdir=CHDIR)
-
- test.built_file_must_exist('include/myframework.h', chdir=CHDIR)
-
- test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/gyptest-framework.py b/deps/npm/node_modules/node-gyp/gyp/test/mac/gyptest-framework.py
deleted file mode 100755
index e4342d842..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/gyptest-framework.py
+++ /dev/null
@@ -1,50 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Verifies that app bundles are built correctly.
-"""
-
-import TestGyp
-
-import sys
-
-if sys.platform == 'darwin':
- test = TestGyp.TestGyp(formats=['ninja', 'make', 'xcode'])
-
- test.run_gyp('framework.gyp', chdir='framework')
-
- test.build('framework.gyp', 'test_framework', chdir='framework')
-
- # Binary
- test.built_file_must_exist(
- 'Test Framework.framework/Versions/A/Test Framework',
- chdir='framework')
-
- # Info.plist
- test.built_file_must_exist(
- 'Test Framework.framework/Versions/A/Resources/Info.plist',
- chdir='framework')
-
- # Resources
- test.built_file_must_exist(
- 'Test Framework.framework/Versions/A/Resources/English.lproj/'
- 'InfoPlist.strings',
- chdir='framework')
-
- # Symlinks created by packaging process
- test.built_file_must_exist('Test Framework.framework/Versions/Current',
- chdir='framework')
- test.built_file_must_exist('Test Framework.framework/Resources',
- chdir='framework')
- test.built_file_must_exist('Test Framework.framework/Test Framework',
- chdir='framework')
- # PkgInfo.
- test.built_file_must_not_exist(
- 'Test Framework.framework/Versions/A/Resources/PkgInfo',
- chdir='framework')
-
- test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/gyptest-global-settings.py b/deps/npm/node_modules/node-gyp/gyp/test/mac/gyptest-global-settings.py
deleted file mode 100644
index 648d32cde..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/gyptest-global-settings.py
+++ /dev/null
@@ -1,26 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Verifies that the global xcode_settings processing doesn't throw.
-Regression test for http://crbug.com/109163
-"""
-
-import TestGyp
-
-import sys
-
-if sys.platform == 'darwin':
- test = TestGyp.TestGyp(formats=['ninja', 'make', 'xcode'])
- test.run_gyp('src/dir2/dir2.gyp', chdir='global-settings', depth='src')
- # run_gyp shouldn't throw.
-
- # Check that BUILT_PRODUCTS_DIR was set correctly, too.
- test.build('dir2/dir2.gyp', 'dir2_target', chdir='global-settings/src',
- SYMROOT='../build')
- test.built_file_must_exist('file.txt', chdir='global-settings/src')
-
- test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/gyptest-infoplist-process.py b/deps/npm/node_modules/node-gyp/gyp/test/mac/gyptest-infoplist-process.py
deleted file mode 100755
index 20874a398..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/gyptest-infoplist-process.py
+++ /dev/null
@@ -1,51 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Verifies the Info.plist preprocessor functionality.
-"""
-
-import TestGyp
-
-import sys
-
-if sys.platform == 'darwin':
- test = TestGyp.TestGyp(formats=['ninja', 'make', 'xcode'])
-
- CHDIR = 'infoplist-process'
- INFO_PLIST_PATH = 'Test.app/Contents/Info.plist'
-
- # First process both keys.
- test.set_configuration('One')
- test.run_gyp('test1.gyp', chdir=CHDIR)
- test.build('test1.gyp', test.ALL, chdir=CHDIR)
- info_plist = test.built_file_path(INFO_PLIST_PATH, chdir=CHDIR)
- test.must_exist(info_plist)
- test.must_contain(info_plist, 'Foo')
- test.must_contain(info_plist, 'Bar')
-
- # Then process a single key.
- test.set_configuration('Two')
- test.run_gyp('test2.gyp', chdir=CHDIR)
- test.build('test2.gyp', chdir=CHDIR)
- info_plist = test.built_file_path(INFO_PLIST_PATH, chdir=CHDIR)
- test.must_exist(info_plist)
- test.must_contain(info_plist, 'com.google.Test') # Normal expansion works.
- test.must_contain(info_plist, 'Foo (Bar)')
- test.must_contain(info_plist, 'PROCESSED_KEY2')
-
- # Then turn off the processor.
- test.set_configuration('Three')
- test.run_gyp('test3.gyp', chdir=CHDIR)
- test.build('test3.gyp', chdir=CHDIR)
- info_plist = test.built_file_path('Test App.app/Contents/Info.plist',
- chdir=CHDIR)
- test.must_exist(info_plist)
- test.must_contain(info_plist, 'com.google.Test') # Normal expansion works.
- test.must_contain(info_plist, 'PROCESSED_KEY1')
- test.must_contain(info_plist, 'PROCESSED_KEY2')
-
- test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/gyptest-installname.py b/deps/npm/node_modules/node-gyp/gyp/test/mac/gyptest-installname.py
deleted file mode 100644
index c300820f6..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/gyptest-installname.py
+++ /dev/null
@@ -1,79 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Verifies that LD_DYLIB_INSTALL_NAME and DYLIB_INSTALL_NAME_BASE are handled
-correctly.
-"""
-
-import TestGyp
-
-import re
-import subprocess
-import sys
-
-if sys.platform == 'darwin':
- test = TestGyp.TestGyp(formats=['ninja', 'make', 'xcode'])
-
- CHDIR = 'installname'
- test.run_gyp('test.gyp', chdir=CHDIR)
- test.build('test.gyp', test.ALL, chdir=CHDIR)
-
- def GetInstallname(p):
- p = test.built_file_path(p, chdir=CHDIR)
- r = re.compile(r'cmd LC_ID_DYLIB.*?name (.*?) \(offset \d+\)', re.DOTALL)
- proc = subprocess.Popen(['otool', '-l', p], stdout=subprocess.PIPE)
- o = proc.communicate()[0]
- assert not proc.returncode
- m = r.search(o)
- assert m
- return m.group(1)
-
- if (GetInstallname('libdefault_installname.dylib') !=
- '/usr/local/lib/libdefault_installname.dylib'):
- test.fail_test()
-
- if (GetInstallname('My Framework.framework/My Framework') !=
- '/Library/Frameworks/My Framework.framework/'
- 'Versions/A/My Framework'):
- test.fail_test()
-
- if (GetInstallname('libexplicit_installname.dylib') !=
- 'Trapped in a dynamiclib factory'):
- test.fail_test()
-
- if (GetInstallname('libexplicit_installname_base.dylib') !=
- '@executable_path/../../../libexplicit_installname_base.dylib'):
- test.fail_test()
-
- if (GetInstallname('My Other Framework.framework/My Other Framework') !=
- '@executable_path/../../../My Other Framework.framework/'
- 'Versions/A/My Other Framework'):
- test.fail_test()
-
- if (GetInstallname('libexplicit_installname_with_base.dylib') !=
- '/usr/local/lib/libexplicit_installname_with_base.dylib'):
- test.fail_test()
-
- if (GetInstallname('libexplicit_installname_with_explicit_base.dylib') !=
- '@executable_path/../libexplicit_installname_with_explicit_base.dylib'):
- test.fail_test()
-
- if (GetInstallname('libboth_base_and_installname.dylib') !=
- 'Still trapped in a dynamiclib factory'):
- test.fail_test()
-
- if (GetInstallname('install_name_with_info_plist.framework/'
- 'install_name_with_info_plist') !=
- '/Library/Frameworks/install_name_with_info_plist.framework/'
- 'Versions/A/install_name_with_info_plist'):
- test.fail_test()
-
- if ('DYLIB_INSTALL_NAME_BASE:standardizepath: command not found' in
- test.stdout()):
- test.fail_test()
-
- test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/gyptest-ldflags-passed-to-libtool.py b/deps/npm/node_modules/node-gyp/gyp/test/mac/gyptest-ldflags-passed-to-libtool.py
deleted file mode 100644
index ac6075f6c..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/gyptest-ldflags-passed-to-libtool.py
+++ /dev/null
@@ -1,31 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Verifies that OTHER_LDFLAGS is passed to libtool.
-"""
-
-import TestGyp
-
-import sys
-
-if sys.platform == 'darwin':
- test = TestGyp.TestGyp(formats=['ninja', 'make', 'xcode'],
- match = lambda a, b: True)
-
- build_error_code = {
- 'xcode': 1,
- 'make': 2,
- 'ninja': 1,
- }[test.format]
-
- CHDIR = 'ldflags-libtool'
- test.run_gyp('test.gyp', chdir=CHDIR)
-
- test.build('test.gyp', 'ldflags_passed_to_libtool', chdir=CHDIR,
- status=build_error_code)
-
- test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/gyptest-ldflags.py b/deps/npm/node_modules/node-gyp/gyp/test/mac/gyptest-ldflags.py
deleted file mode 100644
index 4da40490d..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/gyptest-ldflags.py
+++ /dev/null
@@ -1,68 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Verifies that filenames passed to various linker flags are converted into
-build-directory relative paths correctly.
-"""
-
-import TestGyp
-
-import sys
-
-if sys.platform == 'darwin':
- test = TestGyp.TestGyp(formats=['ninja', 'make', 'xcode'])
-
- CHDIR = 'ldflags'
- test.run_gyp('subdirectory/test.gyp', chdir=CHDIR)
-
- test.build('subdirectory/test.gyp', test.ALL, chdir=CHDIR)
-
- test.pass_test()
-
-
-# These flags from `man ld` couldl show up in OTHER_LDFLAGS and need path
-# translation.
-#
-# Done:
-# -exported_symbols_list filename
-# -unexported_symbols_list file
-# -reexported_symbols_list file
-# -sectcreate segname sectname file
-#
-# Will be done on demand:
-# -weak_library path_to_library
-# -reexport_library path_to_library
-# -lazy_library path_to_library
-# -upward_library path_to_library
-# -syslibroot rootdir
-# -framework name[,suffix]
-# -weak_framework name[,suffix]
-# -reexport_framework name[,suffix]
-# -lazy_framework name[,suffix]
-# -upward_framework name[,suffix]
-# -force_load path_to_archive
-# -filelist file[,dirname]
-# -dtrace file
-# -order_file file # should use ORDER_FILE
-# -exported_symbols_order file
-# -bundle_loader executable # should use BUNDLE_LOADER
-# -alias_list filename
-# -seg_addr_table filename
-# -dylib_file install_name:file_name
-# -interposable_list filename
-# -object_path_lto filename
-#
-#
-# obsolete:
-# -sectorder segname sectname orderfile
-# -seg_addr_table_filename path
-#
-#
-# ??:
-# -map map_file_path
-# -sub_library library_name
-# -sub_umbrella framework_name
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/gyptest-libraries.py b/deps/npm/node_modules/node-gyp/gyp/test/mac/gyptest-libraries.py
deleted file mode 100755
index 46814d65a..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/gyptest-libraries.py
+++ /dev/null
@@ -1,22 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Verifies libraries (in link_settings) are properly found.
-"""
-
-import TestGyp
-
-import sys
-
-if sys.platform == 'darwin':
- test = TestGyp.TestGyp(formats=['ninja', 'make', 'xcode'])
-
- test.run_gyp('subdir/test.gyp', chdir='libraries')
-
- test.build('subdir/test.gyp', test.ALL, chdir='libraries')
-
- test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/gyptest-loadable-module.py b/deps/npm/node_modules/node-gyp/gyp/test/mac/gyptest-loadable-module.py
deleted file mode 100755
index e5e022c9f..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/gyptest-loadable-module.py
+++ /dev/null
@@ -1,45 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Tests that a loadable_module target is built correctly.
-"""
-
-import TestGyp
-
-import os
-import sys
-
-if sys.platform == 'darwin':
- test = TestGyp.TestGyp(formats=['ninja', 'make', 'xcode'])
-
- test.run_gyp('test.gyp', chdir='loadable-module')
- test.build('test.gyp', test.ALL, chdir='loadable-module')
-
- # Binary.
- test.built_file_must_exist(
- 'test_loadable_module.plugin/Contents/MacOS/test_loadable_module',
- chdir='loadable-module')
-
- # Info.plist.
- info_plist = test.built_file_path(
- 'test_loadable_module.plugin/Contents/Info.plist',
- chdir='loadable-module')
- test.must_exist(info_plist)
- test.must_contain(info_plist, """
- <key>CFBundleExecutable</key>
- <string>test_loadable_module</string>
-""")
-
- # PkgInfo.
- test.built_file_must_not_exist(
- 'test_loadable_module.plugin/Contents/PkgInfo',
- chdir='loadable-module')
- test.built_file_must_not_exist(
- 'test_loadable_module.plugin/Contents/Resources',
- chdir='loadable-module')
-
- test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/gyptest-missing-cfbundlesignature.py b/deps/npm/node_modules/node-gyp/gyp/test/mac/gyptest-missing-cfbundlesignature.py
deleted file mode 100644
index ef7a8d1bd..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/gyptest-missing-cfbundlesignature.py
+++ /dev/null
@@ -1,29 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Verifies that an Info.plist with CFBundleSignature works.
-"""
-
-import TestGyp
-
-import sys
-
-if sys.platform == 'darwin':
- test = TestGyp.TestGyp(formats=['ninja', 'make', 'xcode'])
-
- test.run_gyp('test.gyp', chdir='missing-cfbundlesignature')
- test.build('test.gyp', test.ALL, chdir='missing-cfbundlesignature')
-
- test.built_file_must_match('mytarget.app/Contents/PkgInfo', 'APPL????',
- chdir='missing-cfbundlesignature')
-
- test.built_file_must_match('myothertarget.app/Contents/PkgInfo', 'APPL????',
- chdir='missing-cfbundlesignature')
-
- test.built_file_must_match('thirdtarget.app/Contents/PkgInfo', 'APPL????',
- chdir='missing-cfbundlesignature')
- test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/gyptest-non-strs-flattened-to-env.py b/deps/npm/node_modules/node-gyp/gyp/test/mac/gyptest-non-strs-flattened-to-env.py
deleted file mode 100644
index 504dcd589..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/gyptest-non-strs-flattened-to-env.py
+++ /dev/null
@@ -1,33 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Verifies that list xcode_settings are flattened before being exported to the
-environment.
-"""
-
-import TestGyp
-
-import sys
-
-if sys.platform == 'darwin':
- test = TestGyp.TestGyp(formats=['ninja', 'make', 'xcode'])
-
- CHDIR = 'non-strs-flattened-to-env'
- INFO_PLIST_PATH = 'Test.app/Contents/Info.plist'
-
- test.run_gyp('test.gyp', chdir=CHDIR)
- test.build('test.gyp', test.ALL, chdir=CHDIR)
- info_plist = test.built_file_path(INFO_PLIST_PATH, chdir=CHDIR)
- test.must_exist(info_plist)
- test.must_contain(info_plist, '''\
-\t<key>My Variable</key>
-\t<string>some expansion</string>''')
- test.must_contain(info_plist, '''\
-\t<key>CFlags</key>
-\t<string>-fstack-protector-all -fno-strict-aliasing -DS="A Space"</string>''')
-
- test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/gyptest-objc-gc.py b/deps/npm/node_modules/node-gyp/gyp/test/mac/gyptest-objc-gc.py
deleted file mode 100644
index 45df99a75..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/gyptest-objc-gc.py
+++ /dev/null
@@ -1,45 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Verifies that objc settings are handled correctly.
-"""
-
-import TestGyp
-
-import sys
-
-if sys.platform == 'darwin':
- # set |match| to ignore build stderr output.
- test = TestGyp.TestGyp(formats=['ninja', 'make', 'xcode'],
- match = lambda a, b: True)
-
- CHDIR = 'objc-gc'
- test.run_gyp('test.gyp', chdir=CHDIR)
-
- build_error_code = {
- 'xcode': [1, 65], # Linker error code. 1 on Xcode 3, 65 on Xcode 4
- 'make': 2,
- 'ninja': 1,
- }[test.format]
-
- test.build('test.gyp', 'gc_exe_fails', chdir=CHDIR, status=build_error_code)
- test.build(
- 'test.gyp', 'gc_off_exe_req_lib', chdir=CHDIR, status=build_error_code)
-
- test.build('test.gyp', 'gc_req_exe', chdir=CHDIR)
- test.run_built_executable('gc_req_exe', chdir=CHDIR, stdout="gc on: 1\n")
-
- test.build('test.gyp', 'gc_exe_req_lib', chdir=CHDIR)
- test.run_built_executable('gc_exe_req_lib', chdir=CHDIR, stdout="gc on: 1\n")
-
- test.build('test.gyp', 'gc_exe', chdir=CHDIR)
- test.run_built_executable('gc_exe', chdir=CHDIR, stdout="gc on: 1\n")
-
- test.build('test.gyp', 'gc_off_exe', chdir=CHDIR)
- test.run_built_executable('gc_off_exe', chdir=CHDIR, stdout="gc on: 0\n")
-
- test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/gyptest-postbuild-copy-bundle.py b/deps/npm/node_modules/node-gyp/gyp/test/mac/gyptest-postbuild-copy-bundle.py
deleted file mode 100644
index 0f63ad524..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/gyptest-postbuild-copy-bundle.py
+++ /dev/null
@@ -1,62 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Verifies that a postbuild copying a dependend framework into an app bundle is
-rerun if the resources in the framework change.
-"""
-
-import TestGyp
-
-import os.path
-import sys
-
-if sys.platform == 'darwin':
- # TODO(thakis): Make this pass with the make generator, http://crbug.com/95529
- test = TestGyp.TestGyp(formats=['ninja', 'xcode'])
-
- CHDIR = 'postbuild-copy-bundle'
- test.run_gyp('test.gyp', chdir=CHDIR)
-
- app_bundle_dir = test.built_file_path('Test app.app', chdir=CHDIR)
- bundled_framework_dir = os.path.join(
- app_bundle_dir, 'Contents', 'My Framework.framework', 'Resources')
- final_plist_path = os.path.join(bundled_framework_dir, 'Info.plist')
- final_resource_path = os.path.join(bundled_framework_dir, 'resource_file.sb')
-
- # Check that the dependency was built and copied into the app bundle:
- test.build('test.gyp', 'test_app', chdir=CHDIR)
- test.must_exist(final_resource_path)
- test.must_match(final_resource_path,
- 'This is included in the framework bundle.\n')
-
- test.must_exist(final_plist_path)
- test.must_contain(final_plist_path, '''\
-\t<key>RandomKey</key>
-\t<string>RandomValue</string>''')
-
- # Touch the dependency's bundle resource, and check that the modification
- # makes it all the way into the app bundle:
- test.sleep()
- test.write('postbuild-copy-bundle/resource_file.sb', 'New text\n')
- test.build('test.gyp', 'test_app', chdir=CHDIR)
-
- test.must_exist(final_resource_path)
- test.must_match(final_resource_path, 'New text\n')
-
- # Check the same for the plist file.
- test.sleep()
- contents = test.read('postbuild-copy-bundle/Framework-Info.plist')
- contents = contents.replace('RandomValue', 'NewRandomValue')
- test.write('postbuild-copy-bundle/Framework-Info.plist', contents)
- test.build('test.gyp', 'test_app', chdir=CHDIR)
-
- test.must_exist(final_plist_path)
- test.must_contain(final_plist_path, '''\
-\t<key>RandomKey</key>
-\t<string>NewRandomValue</string>''')
-
- test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/gyptest-postbuild-defaults.py b/deps/npm/node_modules/node-gyp/gyp/test/mac/gyptest-postbuild-defaults.py
deleted file mode 100644
index 0560904c2..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/gyptest-postbuild-defaults.py
+++ /dev/null
@@ -1,29 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Verifies that a postbuild invoking |defaults| works.
-"""
-
-import TestGyp
-
-import sys
-
-if sys.platform == 'darwin':
- test = TestGyp.TestGyp(formats=['ninja', 'make', 'xcode'])
-
- CHDIR = 'postbuild-defaults'
- test.run_gyp('test.gyp', chdir=CHDIR)
- test.build('test.gyp', test.ALL, chdir=CHDIR)
-
- result_file = test.built_file_path('result', chdir=CHDIR)
- test.must_exist(result_file)
- test.must_contain(result_file, '''\
-Test
-${PRODUCT_NAME}
-''')
-
- test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/gyptest-postbuild-fail.py b/deps/npm/node_modules/node-gyp/gyp/test/mac/gyptest-postbuild-fail.py
deleted file mode 100755
index dba0d6f04..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/gyptest-postbuild-fail.py
+++ /dev/null
@@ -1,55 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2011 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Verifies that a failing postbuild step lets the build fail.
-"""
-
-import TestGyp
-
-import sys
-
-if sys.platform == 'darwin':
- # set |match| to ignore build stderr output.
- test = TestGyp.TestGyp(formats=['ninja', 'make', 'xcode'],
- match = lambda a, b: True)
-
- test.run_gyp('test.gyp', chdir='postbuild-fail')
-
- build_error_code = {
- 'xcode': 1,
- 'make': 2,
- 'ninja': 1,
- }[test.format]
-
-
- # If a postbuild fails, all postbuilds should be re-run on the next build.
- # However, even if the first postbuild fails the other postbuilds are still
- # executed.
-
-
- # Non-bundles
- test.build('test.gyp', 'nonbundle', chdir='postbuild-fail',
- status=build_error_code)
- test.built_file_must_exist('static_touch',
- chdir='postbuild-fail')
- # Check for non-up-to-date-ness by checking if building again produces an
- # error.
- test.build('test.gyp', 'nonbundle', chdir='postbuild-fail',
- status=build_error_code)
-
-
- # Bundles
- test.build('test.gyp', 'bundle', chdir='postbuild-fail',
- status=build_error_code)
- test.built_file_must_exist('dynamic_touch',
- chdir='postbuild-fail')
- # Check for non-up-to-date-ness by checking if building again produces an
- # error.
- test.build('test.gyp', 'bundle', chdir='postbuild-fail',
- status=build_error_code)
-
- test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/gyptest-postbuild-multiple-configurations.py b/deps/npm/node_modules/node-gyp/gyp/test/mac/gyptest-postbuild-multiple-configurations.py
deleted file mode 100644
index 84694f36c..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/gyptest-postbuild-multiple-configurations.py
+++ /dev/null
@@ -1,26 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Verifies that a postbuild work in projects with multiple configurations.
-"""
-
-import TestGyp
-
-import sys
-
-if sys.platform == 'darwin':
- test = TestGyp.TestGyp(formats=['ninja', 'make', 'xcode'])
-
- CHDIR = 'postbuild-multiple-configurations'
- test.run_gyp('test.gyp', chdir=CHDIR)
-
- for configuration in ['Debug', 'Release']:
- test.set_configuration(configuration)
- test.build('test.gyp', test.ALL, chdir=CHDIR)
- test.built_file_must_exist('postbuild-file', chdir=CHDIR)
-
- test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/gyptest-postbuild-static-library.gyp b/deps/npm/node_modules/node-gyp/gyp/test/mac/gyptest-postbuild-static-library.gyp
deleted file mode 100644
index 8f9a6ebcb..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/gyptest-postbuild-static-library.gyp
+++ /dev/null
@@ -1,28 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Verifies that a postbuilds on static libraries work, and that sourceless
-libraries don't cause failures at gyp time.
-"""
-
-import TestGyp
-
-import sys
-
-if sys.platform == 'darwin':
- test = TestGyp.TestGyp(formats=['make', 'xcode'])
-
- CHDIR = 'postbuild-static-library'
- test.run_gyp('test.gyp', chdir=CHDIR)
- test.build('test.gyp', 'my_lib', chdir=CHDIR)
- # Building my_sourceless_lib doesn't work with make. gyp should probably
- # forbid sourceless static libraries, since they're pretty pointless.
- # But they shouldn't cause gyp time exceptions.
-
- test.built_file_must_exist('postbuild-file', chdir=CHDIR)
-
- test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/gyptest-postbuild.py b/deps/npm/node_modules/node-gyp/gyp/test/mac/gyptest-postbuild.py
deleted file mode 100755
index 684e7b842..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/gyptest-postbuild.py
+++ /dev/null
@@ -1,53 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2011 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Verifies that postbuild steps work.
-"""
-
-import TestGyp
-
-import sys
-
-if sys.platform == 'darwin':
- test = TestGyp.TestGyp(formats=['ninja', 'make', 'xcode'])
-
- test.run_gyp('test.gyp', chdir='postbuilds')
-
- test.build('test.gyp', test.ALL, chdir='postbuilds')
-
- # See comment in test/subdirectory/gyptest-subdir-default.py
- if test.format == 'xcode':
- chdir = 'postbuilds/subdirectory'
- else:
- chdir = 'postbuilds'
-
- # Created by the postbuild scripts
- test.built_file_must_exist('el.a_touch',
- type=test.STATIC_LIB,
- chdir='postbuilds')
- test.built_file_must_exist('el.a_gyp_touch',
- type=test.STATIC_LIB,
- chdir='postbuilds')
- test.built_file_must_exist('nest_el.a_touch',
- type=test.STATIC_LIB,
- chdir=chdir)
- test.built_file_must_exist(
- 'dyna.framework/Versions/A/dyna_touch',
- chdir='postbuilds')
- test.built_file_must_exist(
- 'dyna.framework/Versions/A/dyna_gyp_touch',
- chdir='postbuilds')
- test.built_file_must_exist(
- 'nest_dyna.framework/Versions/A/nest_dyna_touch',
- chdir=chdir)
- test.built_file_must_exist('dyna_standalone.dylib_gyp_touch',
- type=test.SHARED_LIB,
- chdir='postbuilds')
- test.built_file_must_exist('copied_file.txt', chdir='postbuilds')
- test.built_file_must_exist('copied_file_2.txt', chdir=chdir)
-
- test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/gyptest-prefixheader.py b/deps/npm/node_modules/node-gyp/gyp/test/mac/gyptest-prefixheader.py
deleted file mode 100755
index 768551f9b..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/gyptest-prefixheader.py
+++ /dev/null
@@ -1,19 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Verifies that GCC_PREFIX_HEADER works.
-"""
-
-import TestGyp
-
-import sys
-
-if sys.platform == 'darwin':
- test = TestGyp.TestGyp(formats=['ninja', 'make', 'xcode'])
- test.run_gyp('test.gyp', chdir='prefixheader')
- test.build('test.gyp', test.ALL, chdir='prefixheader')
- test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/gyptest-rebuild.py b/deps/npm/node_modules/node-gyp/gyp/test/mac/gyptest-rebuild.py
deleted file mode 100755
index 0f26e9612..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/gyptest-rebuild.py
+++ /dev/null
@@ -1,41 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Verifies that app bundles are rebuilt correctly.
-"""
-
-import TestGyp
-
-import sys
-
-if sys.platform == 'darwin':
- test = TestGyp.TestGyp(formats=['ninja', 'make', 'xcode'])
-
- CHDIR = 'rebuild'
- test.run_gyp('test.gyp', chdir=CHDIR)
-
- test.build('test.gyp', 'test_app', chdir=CHDIR)
-
- # Touch a source file, rebuild, and check that the app target is up-to-date.
- test.touch('rebuild/main.c')
- test.build('test.gyp', 'test_app', chdir=CHDIR)
-
- test.up_to_date('test.gyp', 'test_app', chdir=CHDIR)
-
- # Xcode runs postbuilds on every build, so targets with postbuilds are
- # never marked as up_to_date.
- if test.format != 'xcode':
- # Same for a framework bundle.
- test.build('test.gyp', 'test_framework_postbuilds', chdir=CHDIR)
- test.up_to_date('test.gyp', 'test_framework_postbuilds', chdir=CHDIR)
-
- # Test that an app bundle with a postbuild that touches the app binary needs
- # to be built only once.
- test.build('test.gyp', 'test_app_postbuilds', chdir=CHDIR)
- test.up_to_date('test.gyp', 'test_app_postbuilds', chdir=CHDIR)
-
- test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/gyptest-rpath.py b/deps/npm/node_modules/node-gyp/gyp/test/mac/gyptest-rpath.py
deleted file mode 100644
index 2440d548e..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/gyptest-rpath.py
+++ /dev/null
@@ -1,49 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Verifies that LD_DYLIB_INSTALL_NAME and DYLIB_INSTALL_NAME_BASE are handled
-correctly.
-"""
-
-import TestGyp
-
-import re
-import subprocess
-import sys
-
-if sys.platform == 'darwin':
- test = TestGyp.TestGyp(formats=['ninja', 'make', 'xcode'])
-
- CHDIR = 'rpath'
- test.run_gyp('test.gyp', chdir=CHDIR)
- test.build('test.gyp', test.ALL, chdir=CHDIR)
-
- def GetRpaths(p):
- p = test.built_file_path(p, chdir=CHDIR)
- r = re.compile(r'cmd LC_RPATH.*?path (.*?) \(offset \d+\)', re.DOTALL)
- proc = subprocess.Popen(['otool', '-l', p], stdout=subprocess.PIPE)
- o = proc.communicate()[0]
- assert not proc.returncode
- return r.findall(o)
-
- if (GetRpaths('libdefault_rpath.dylib') != []):
- test.fail_test()
-
- if (GetRpaths('libexplicit_rpath.dylib') != ['@executable_path/.']):
- test.fail_test()
-
- if (GetRpaths('libexplicit_rpaths_escaped.dylib') !=
- ['First rpath', 'Second rpath']):
- test.fail_test()
-
- if (GetRpaths('My Framework.framework/My Framework') != ['@loader_path/.']):
- test.fail_test()
-
- if (GetRpaths('executable') != ['@executable_path/.']):
- test.fail_test()
-
- test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/gyptest-sdkroot.py b/deps/npm/node_modules/node-gyp/gyp/test/mac/gyptest-sdkroot.py
deleted file mode 100644
index b4bef3e92..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/gyptest-sdkroot.py
+++ /dev/null
@@ -1,20 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Verifies that setting SDKROOT works.
-"""
-
-import TestGyp
-
-import sys
-
-if sys.platform == 'darwin':
- test = TestGyp.TestGyp(formats=['ninja', 'make', 'xcode'])
-
- test.run_gyp('test.gyp', chdir='sdkroot')
- test.build('test.gyp', test.ALL, chdir='sdkroot')
- test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/gyptest-sourceless-module.gyp b/deps/npm/node_modules/node-gyp/gyp/test/mac/gyptest-sourceless-module.gyp
deleted file mode 100644
index c3ea73a17..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/gyptest-sourceless-module.gyp
+++ /dev/null
@@ -1,46 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Verifies that bundles that have no 'sources' (pure resource containers) work.
-"""
-
-import TestGyp
-
-import sys
-
-if sys.platform == 'darwin':
- test = TestGyp.TestGyp(formats=['ninja', 'make', 'xcode'])
-
- test.run_gyp('test.gyp', chdir='sourceless-module')
-
- # Just needs to build without errors.
- test.build('test.gyp', 'empty_bundle', chdir='sourceless-module')
- test.built_file_must_not_exist(
- 'empty_bundle.bundle', chdir='sourceless-module')
-
- # Needs to build, and contain a resource.
- test.build('test.gyp', 'resource_bundle', chdir='sourceless-module')
-
- test.built_file_must_exist(
- 'resource_bundle.bundle/Contents/Resources/foo.manifest',
- chdir='sourceless-module')
- test.built_file_must_not_exist(
- 'resource_bundle.bundle/Contents/MacOS/resource_bundle',
- chdir='sourceless-module')
-
- # Needs to build and cause the bundle to be built.
- test.build(
- 'test.gyp', 'dependent_on_resource_bundle', chdir='sourceless-module')
-
- test.built_file_must_exist(
- 'resource_bundle.bundle/Contents/Resources/foo.manifest',
- chdir='sourceless-module')
- test.built_file_must_not_exist(
- 'resource_bundle.bundle/Contents/MacOS/resource_bundle',
- chdir='sourceless-module')
-
- test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/gyptest-strip.py b/deps/npm/node_modules/node-gyp/gyp/test/mac/gyptest-strip.py
deleted file mode 100755
index 3a4683933..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/gyptest-strip.py
+++ /dev/null
@@ -1,53 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Verifies that stripping works.
-"""
-
-import TestGyp
-
-import re
-import subprocess
-import sys
-import time
-
-if sys.platform == 'darwin':
- test = TestGyp.TestGyp(formats=['ninja', 'make', 'xcode'])
-
- test.run_gyp('test.gyp', chdir='strip')
-
- test.build('test.gyp', test.ALL, chdir='strip')
-
- # Lightweight check if stripping was done.
- def OutPath(s):
- return test.built_file_path(s, type=test.SHARED_LIB, chdir='strip')
-
- def CheckNsyms(p, n_expected):
- r = re.compile(r'nsyms\s+(\d+)')
- proc = subprocess.Popen(['otool', '-l', p], stdout=subprocess.PIPE)
- o = proc.communicate()[0]
- assert not proc.returncode
- m = r.search(o)
- n = int(m.group(1))
- if n != n_expected:
- print 'Stripping: Expected %d symbols, got %d' % (n_expected, n)
- test.fail_test()
-
- # The actual numbers here are not interesting, they just need to be the same
- # in both the xcode and the make build.
- CheckNsyms(OutPath('no_postprocess'), 11)
- CheckNsyms(OutPath('no_strip'), 11)
- CheckNsyms(OutPath('strip_all'), 0)
- CheckNsyms(OutPath('strip_nonglobal'), 2)
- CheckNsyms(OutPath('strip_debugging'), 3)
- CheckNsyms(OutPath('strip_all_custom_flags'), 0)
- CheckNsyms(test.built_file_path(
- 'strip_all_bundle.framework/Versions/A/strip_all_bundle', chdir='strip'),
- 0)
- CheckNsyms(OutPath('strip_save'), 3)
-
- test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/gyptest-type-envvars.py b/deps/npm/node_modules/node-gyp/gyp/test/mac/gyptest-type-envvars.py
deleted file mode 100755
index 61596bae2..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/gyptest-type-envvars.py
+++ /dev/null
@@ -1,24 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Test that MACH_O_TYPE etc are set correctly.
-"""
-
-import TestGyp
-
-import sys
-
-if sys.platform == 'darwin':
- test = TestGyp.TestGyp(formats=['ninja', 'make', 'xcode'])
-
- test.run_gyp('test.gyp', chdir='type_envvars')
-
- test.build('test.gyp', test.ALL, chdir='type_envvars')
-
- # The actual test is done by postbuild scripts during |test.build()|.
-
- test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/gyptest-xcode-env-order.py b/deps/npm/node_modules/node-gyp/gyp/test/mac/gyptest-xcode-env-order.py
deleted file mode 100755
index 58b146c1a..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/gyptest-xcode-env-order.py
+++ /dev/null
@@ -1,83 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Verifies that dependent Xcode settings are processed correctly.
-"""
-
-import TestGyp
-
-import sys
-
-if sys.platform == 'darwin':
- test = TestGyp.TestGyp(formats=['ninja', 'make', 'xcode'])
-
- CHDIR = 'xcode-env-order'
- INFO_PLIST_PATH = 'Test.app/Contents/Info.plist'
-
- test.run_gyp('test.gyp', chdir=CHDIR)
- test.build('test.gyp', test.ALL, chdir=CHDIR)
-
- # Env vars in 'copies' filenames.
- test.built_file_must_exist('Test-copy-brace/main.c', chdir=CHDIR)
- test.built_file_must_exist('Test-copy-paren/main.c', chdir=CHDIR)
- test.built_file_must_exist('Test-copy-bare/main.c', chdir=CHDIR)
-
- # Env vars in 'actions' filenames and inline actions
- test.built_file_must_exist('action-copy-brace.txt', chdir=CHDIR)
- test.built_file_must_exist('action-copy-paren.txt', chdir=CHDIR)
- test.built_file_must_exist('action-copy-bare.txt', chdir=CHDIR)
-
- # Env vars in 'rules' filenames and inline actions
- test.built_file_must_exist('rule-copy-brace.txt', chdir=CHDIR)
- test.built_file_must_exist('rule-copy-paren.txt', chdir=CHDIR)
- # TODO: see comment in test.gyp for this file.
- #test.built_file_must_exist('rule-copy-bare.txt', chdir=CHDIR)
-
- # Env vars in Info.plist.
- info_plist = test.built_file_path(INFO_PLIST_PATH, chdir=CHDIR)
- test.must_exist(info_plist)
-
- test.must_contain(info_plist, '''\
-\t<key>BraceProcessedKey1</key>
-\t<string>D:/Source/Project/Test</string>''')
- test.must_contain(info_plist, '''\
-\t<key>BraceProcessedKey2</key>
-\t<string>/Source/Project/Test</string>''')
- test.must_contain(info_plist, '''\
-\t<key>BraceProcessedKey3</key>
-\t<string>com.apple.product-type.application:D:/Source/Project/Test</string>''')
-
- test.must_contain(info_plist, '''\
-\t<key>ParenProcessedKey1</key>
-\t<string>D:/Source/Project/Test</string>''')
- test.must_contain(info_plist, '''\
-\t<key>ParenProcessedKey2</key>
-\t<string>/Source/Project/Test</string>''')
- test.must_contain(info_plist, '''\
-\t<key>ParenProcessedKey3</key>
-\t<string>com.apple.product-type.application:D:/Source/Project/Test</string>''')
-
- test.must_contain(info_plist, '''\
-\t<key>BareProcessedKey1</key>
-\t<string>D:/Source/Project/Test</string>''')
- test.must_contain(info_plist, '''\
-\t<key>BareProcessedKey2</key>
-\t<string>/Source/Project/Test</string>''')
- # NOTE: For bare variables, $PRODUCT_TYPE is not replaced! It _is_ replaced
- # if it's not right at the start of the string (e.g. ':$PRODUCT_TYPE'), so
- # this looks like an Xcode bug. This bug isn't emulated (yet?), so check this
- # only for Xcode.
- if test.format == 'xcode':
- test.must_contain(info_plist, '''\
-\t<key>BareProcessedKey3</key>
-\t<string>$PRODUCT_TYPE:D:/Source/Project/Test</string>''')
-
- test.must_contain(info_plist, '''\
-\t<key>MixedProcessedKey</key>
-\t<string>/Source/Project:Test:mh_execute</string>''')
-
- test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/gyptest-xcode-gcc.py b/deps/npm/node_modules/node-gyp/gyp/test/mac/gyptest-xcode-gcc.py
deleted file mode 100644
index 5f5de7608..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/gyptest-xcode-gcc.py
+++ /dev/null
@@ -1,39 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Verifies that xcode-style GCC_... settings are handled properly.
-"""
-
-import TestGyp
-
-import sys
-
-def IgnoreOutput(string, expected_string):
- return True
-
-if sys.platform == 'darwin':
- test = TestGyp.TestGyp(formats=['ninja', 'make', 'xcode'])
-
- CHDIR = 'xcode-gcc'
- test.run_gyp('test.gyp', chdir=CHDIR)
-
- # List of targets that'll pass. It expects targets of the same name with
- # '-fail' appended that'll fail to build.
- targets = [
- 'warn_about_invalid_offsetof_macro',
- 'warn_about_missing_newline',
- ]
-
- for target in targets:
- test.build('test.gyp', target, chdir=CHDIR)
- test.built_file_must_exist(target, chdir=CHDIR)
- fail_target = target + '-fail'
- test.build('test.gyp', fail_target, chdir=CHDIR, status=None,
- stderr=None, match=IgnoreOutput)
- test.built_file_must_not_exist(fail_target, chdir=CHDIR)
-
- test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/infoplist-process/Info.plist b/deps/npm/node_modules/node-gyp/gyp/test/mac/infoplist-process/Info.plist
deleted file mode 100644
index cb65721f4..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/infoplist-process/Info.plist
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
- <key>CFBundleDevelopmentRegion</key>
- <string>English</string>
- <key>CFBundleExecutable</key>
- <string>${EXECUTABLE_NAME}</string>
- <key>CFBundleIconFile</key>
- <string></string>
- <key>CFBundleIdentifier</key>
- <string>com.google.${PRODUCT_NAME}</string>
- <key>CFBundleInfoDictionaryVersion</key>
- <string>6.0</string>
- <key>CFBundleName</key>
- <string>${PRODUCT_NAME}</string>
- <key>CFBundlePackageType</key>
- <string>APPL</string>
- <key>CFBundleShortVersionString</key>
- <string>1.0</string>
- <key>CFBundleSignature</key>
- <string>????</string>
- <key>CFBundleVersion</key>
- <string>1</string>
- <key>LSMinimumSystemVersion</key>
- <string>${MACOSX_DEPLOYMENT_TARGET}</string>
- <key>NSMainNibFile</key>
- <string>MainMenu</string>
- <key>NSPrincipalClass</key>
- <string>NSApplication</string>
- <key>ProcessedKey1</key>
- <string>PROCESSED_KEY1</string>
- <key>ProcessedKey2</key>
- <string>PROCESSED_KEY2</string>
-</dict>
-</plist>
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/infoplist-process/main.c b/deps/npm/node_modules/node-gyp/gyp/test/mac/infoplist-process/main.c
deleted file mode 100644
index 1bf4b2a11..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/infoplist-process/main.c
+++ /dev/null
@@ -1,7 +0,0 @@
-// Copyright (c) 2011 Google Inc. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-int main() {
- return 0;
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/infoplist-process/test1.gyp b/deps/npm/node_modules/node-gyp/gyp/test/mac/infoplist-process/test1.gyp
deleted file mode 100644
index bc625a968..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/infoplist-process/test1.gyp
+++ /dev/null
@@ -1,25 +0,0 @@
-# Copyright (c) 2011 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-{
- 'targets': [
- {
- 'target_name': 'test_app',
- 'product_name': 'Test',
- 'type': 'executable',
- 'mac_bundle': 1,
- 'sources': [
- 'main.c',
- ],
- 'configurations': {
- 'One': {
- },
- },
- 'xcode_settings': {
- 'INFOPLIST_FILE': 'Info.plist',
- 'INFOPLIST_PREPROCESS': 'YES',
- 'INFOPLIST_PREPROCESSOR_DEFINITIONS': 'PROCESSED_KEY1=Foo PROCESSED_KEY2=Bar',
- },
- },
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/infoplist-process/test2.gyp b/deps/npm/node_modules/node-gyp/gyp/test/mac/infoplist-process/test2.gyp
deleted file mode 100644
index ecfbc9f64..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/infoplist-process/test2.gyp
+++ /dev/null
@@ -1,25 +0,0 @@
-# Copyright (c) 2011 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-{
- 'targets': [
- {
- 'target_name': 'test_app',
- 'product_name': 'Test',
- 'type': 'executable',
- 'mac_bundle': 1,
- 'sources': [
- 'main.c',
- ],
- 'configurations': {
- 'Two': {
- },
- },
- 'xcode_settings': {
- 'INFOPLIST_FILE': 'Info.plist',
- 'INFOPLIST_PREPROCESS': 'YES',
- 'INFOPLIST_PREPROCESSOR_DEFINITIONS': 'PROCESSED_KEY1="Foo (Bar)"',
- },
- },
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/infoplist-process/test3.gyp b/deps/npm/node_modules/node-gyp/gyp/test/mac/infoplist-process/test3.gyp
deleted file mode 100644
index be8fe75a5..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/infoplist-process/test3.gyp
+++ /dev/null
@@ -1,25 +0,0 @@
-# Copyright (c) 2011 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-{
- 'targets': [
- {
- 'target_name': 'test_app',
- 'product_name': 'Test App',
- 'type': 'executable',
- 'mac_bundle': 1,
- 'sources': [
- 'main.c',
- ],
- 'configurations': {
- 'Three': {
- },
- },
- 'xcode_settings': {
- 'INFOPLIST_FILE': 'Info.plist',
- 'INFOPLIST_PREPROCESS': 'NO',
- 'INFOPLIST_PREPROCESSOR_DEFINITIONS': 'PROCESSED_KEY1=Foo',
- },
- },
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/installname/Info.plist b/deps/npm/node_modules/node-gyp/gyp/test/mac/installname/Info.plist
deleted file mode 100644
index 5e05a5190..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/installname/Info.plist
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
- <key>CFBundleDevelopmentRegion</key>
- <string>English</string>
- <key>CFBundleExecutable</key>
- <string>${EXECUTABLE_NAME}</string>
- <key>CFBundleIconFile</key>
- <string></string>
- <key>CFBundleIdentifier</key>
- <string>com.yourcompany.${PRODUCT_NAME}</string>
- <key>CFBundleInfoDictionaryVersion</key>
- <string>6.0</string>
- <key>CFBundleName</key>
- <string>${PRODUCT_NAME}</string>
- <key>CFBundlePackageType</key>
- <string>FMWK</string>
- <key>CFBundleShortVersionString</key>
- <string>1.0</string>
- <key>CFBundleSignature</key>
- <string>????</string>
- <key>CFBundleVersion</key>
- <string>1</string>
- <key>NSPrincipalClass</key>
- <string></string>
-</dict>
-</plist>
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/installname/file.c b/deps/npm/node_modules/node-gyp/gyp/test/mac/installname/file.c
deleted file mode 100644
index a39fce095..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/installname/file.c
+++ /dev/null
@@ -1 +0,0 @@
-int f() { return 0; }
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/installname/main.c b/deps/npm/node_modules/node-gyp/gyp/test/mac/installname/main.c
deleted file mode 100644
index 237c8ce18..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/installname/main.c
+++ /dev/null
@@ -1 +0,0 @@
-int main() {}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/installname/test.gyp b/deps/npm/node_modules/node-gyp/gyp/test/mac/installname/test.gyp
deleted file mode 100644
index 60c867ff1..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/installname/test.gyp
+++ /dev/null
@@ -1,93 +0,0 @@
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-{
- 'targets': [
- {
- 'target_name': 'default_installname',
- 'type': 'shared_library',
- 'sources': [ 'file.c' ],
- },
- {
- 'target_name': 'default_bundle_installname',
- 'product_name': 'My Framework',
- 'type': 'shared_library',
- 'mac_bundle': 1,
- 'sources': [ 'file.c' ],
- },
- {
- 'target_name': 'explicit_installname',
- 'type': 'shared_library',
- 'sources': [ 'file.c' ],
- 'xcode_settings': {
- 'LD_DYLIB_INSTALL_NAME': 'Trapped in a dynamiclib factory',
- },
- },
- {
- 'target_name': 'explicit_installname_base',
- 'type': 'shared_library',
- 'sources': [ 'file.c' ],
- 'xcode_settings': {
- 'DYLIB_INSTALL_NAME_BASE': '@executable_path/../../..',
-
- },
- },
- {
- 'target_name': 'explicit_installname_base_bundle',
- 'product_name': 'My Other Framework',
- 'type': 'shared_library',
- 'mac_bundle': 1,
- 'sources': [ 'file.c' ],
- 'xcode_settings': {
- 'DYLIB_INSTALL_NAME_BASE': '@executable_path/../../..',
-
- },
- },
- {
- 'target_name': 'both_base_and_installname',
- 'type': 'shared_library',
- 'sources': [ 'file.c' ],
- 'xcode_settings': {
- # LD_DYLIB_INSTALL_NAME wins.
- 'LD_DYLIB_INSTALL_NAME': 'Still trapped in a dynamiclib factory',
- 'DYLIB_INSTALL_NAME_BASE': '@executable_path/../../..',
- },
- },
- {
- 'target_name': 'explicit_installname_with_base',
- 'type': 'shared_library',
- 'sources': [ 'file.c' ],
- 'xcode_settings': {
- 'LD_DYLIB_INSTALL_NAME': '$(DYLIB_INSTALL_NAME_BASE:standardizepath)/$(EXECUTABLE_PATH)',
- },
- },
- {
- 'target_name': 'explicit_installname_with_explicit_base',
- 'type': 'shared_library',
- 'sources': [ 'file.c' ],
- 'xcode_settings': {
- 'DYLIB_INSTALL_NAME_BASE': '@executable_path/..',
- 'LD_DYLIB_INSTALL_NAME': '$(DYLIB_INSTALL_NAME_BASE:standardizepath)/$(EXECUTABLE_PATH)',
- },
- },
- {
- 'target_name': 'executable',
- 'type': 'executable',
- 'sources': [ 'main.c' ],
- 'xcode_settings': {
- 'LD_DYLIB_INSTALL_NAME': 'Should be ignored for not shared_lib',
- },
- },
- # Regression test for http://crbug.com/113918
- {
- 'target_name': 'install_name_with_info_plist',
- 'type': 'shared_library',
- 'mac_bundle': 1,
- 'sources': [ 'file.c' ],
- 'xcode_settings': {
- 'INFOPLIST_FILE': 'Info.plist',
- 'LD_DYLIB_INSTALL_NAME': '$(DYLIB_INSTALL_NAME_BASE:standardizepath)/$(EXECUTABLE_PATH)',
- },
- },
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/ldflags-libtool/file.c b/deps/npm/node_modules/node-gyp/gyp/test/mac/ldflags-libtool/file.c
deleted file mode 100644
index 56757a701..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/ldflags-libtool/file.c
+++ /dev/null
@@ -1 +0,0 @@
-void f() {}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/ldflags-libtool/test.gyp b/deps/npm/node_modules/node-gyp/gyp/test/mac/ldflags-libtool/test.gyp
deleted file mode 100644
index 4e7aa0710..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/ldflags-libtool/test.gyp
+++ /dev/null
@@ -1,17 +0,0 @@
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-{
- 'targets': [
- {
- 'target_name': 'ldflags_passed_to_libtool',
- 'type': 'static_library',
- 'sources': [ 'file.c', ],
- 'xcode_settings': {
- 'OTHER_LDFLAGS': [
- '-fblorfen-horf-does-not-exist',
- ],
- },
- },
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/ldflags/subdirectory/Info.plist b/deps/npm/node_modules/node-gyp/gyp/test/mac/ldflags/subdirectory/Info.plist
deleted file mode 100644
index 5f5e9abfb..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/ldflags/subdirectory/Info.plist
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
- <key>CFBundleSignature</key>
- <string>????</string>
-</dict>
-</plist>
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/ldflags/subdirectory/file.c b/deps/npm/node_modules/node-gyp/gyp/test/mac/ldflags/subdirectory/file.c
deleted file mode 100644
index 90c45543b..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/ldflags/subdirectory/file.c
+++ /dev/null
@@ -1,2 +0,0 @@
-void f() {}
-void g() {}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/ldflags/subdirectory/symbol_list.def b/deps/npm/node_modules/node-gyp/gyp/test/mac/ldflags/subdirectory/symbol_list.def
deleted file mode 100644
index 0ab7543b1..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/ldflags/subdirectory/symbol_list.def
+++ /dev/null
@@ -1 +0,0 @@
-_f
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/ldflags/subdirectory/test.gyp b/deps/npm/node_modules/node-gyp/gyp/test/mac/ldflags/subdirectory/test.gyp
deleted file mode 100644
index db00c7465..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/ldflags/subdirectory/test.gyp
+++ /dev/null
@@ -1,66 +0,0 @@
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-{
- 'targets': [
- {
- 'target_name': 'raw',
- 'type': 'shared_library',
- 'sources': [ 'file.c', ],
- 'xcode_settings': {
- 'OTHER_LDFLAGS': [
- '-exported_symbols_list symbol_list.def',
- '-sectcreate __TEXT __info_plist Info.plist',
- ],
- },
- },
- # TODO(thakis): This form should ideally be supported, too. (But
- # -Wlfoo,bar,baz is cleaner so people should use that anyway.)
- #{
- # 'target_name': 'raw_sep',
- # 'type': 'shared_library',
- # 'sources': [ 'file.c', ],
- # 'xcode_settings': {
- # 'OTHER_LDFLAGS': [
- # '-exported_symbols_list', 'symbol_list.def',
- # '-sectcreate', '__TEXT', '__info_plist', 'Info.plist',
- # ],
- # },
- #},
- {
- 'target_name': 'wl_space',
- 'type': 'shared_library',
- 'sources': [ 'file.c', ],
- 'xcode_settings': {
- 'OTHER_LDFLAGS': [
- # Works because clang passes unknown files on to the linker.
- '-Wl,-exported_symbols_list symbol_list.def',
- ],
- },
- },
- # TODO(thakis): This form should ideally be supported, too. (But
- # -Wlfoo,bar,baz is cleaner so people should use that anyway.)
- #{
- # 'target_name': 'wl_space_sep',
- # 'type': 'shared_library',
- # 'sources': [ 'file.c', ],
- # 'xcode_settings': {
- # 'OTHER_LDFLAGS': [
- # # Works because clang passes unknown files on to the linker.
- # '-Wl,-exported_symbols_list', 'symbol_list.def',
- # ],
- # },
- #},
- {
- 'target_name': 'wl_comma',
- 'type': 'shared_library',
- 'sources': [ 'file.c', ],
- 'xcode_settings': {
- 'OTHER_LDFLAGS': [
- '-Wl,-exported_symbols_list,symbol_list.def',
- '-Wl,-sectcreate,__TEXT,__info_plist,Info.plist',
- ],
- },
- },
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/libraries/subdir/README.txt b/deps/npm/node_modules/node-gyp/gyp/test/mac/libraries/subdir/README.txt
deleted file mode 100644
index 4031ded85..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/libraries/subdir/README.txt
+++ /dev/null
@@ -1 +0,0 @@
-Make things live in a subdirectory, to make sure that DEPTH works correctly.
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/libraries/subdir/hello.cc b/deps/npm/node_modules/node-gyp/gyp/test/mac/libraries/subdir/hello.cc
deleted file mode 100644
index a43554c8c..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/libraries/subdir/hello.cc
+++ /dev/null
@@ -1,10 +0,0 @@
-// Copyright (c) 2012 Google Inc. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include <iostream>
-
-int main() {
- std::cout << "Hello, world!" << std::endl;
- return 0;
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/libraries/subdir/mylib.c b/deps/npm/node_modules/node-gyp/gyp/test/mac/libraries/subdir/mylib.c
deleted file mode 100644
index e771991e8..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/libraries/subdir/mylib.c
+++ /dev/null
@@ -1,7 +0,0 @@
-// Copyright (c) 2012 Google Inc. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-int my_foo(int x) {
- return x + 1;
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/libraries/subdir/test.gyp b/deps/npm/node_modules/node-gyp/gyp/test/mac/libraries/subdir/test.gyp
deleted file mode 100644
index 80a026977..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/libraries/subdir/test.gyp
+++ /dev/null
@@ -1,66 +0,0 @@
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'targets': [
- {
- 'target_name': 'libraries-test',
- 'type': 'executable',
- 'sources': [
- 'hello.cc',
- ],
- 'link_settings': {
- 'libraries': [
- 'libcrypto.dylib',
- 'libfl.a',
- ],
- },
- },
- {
- # This creates a static library and puts it in a nonstandard location for
- # libraries-search-path-test.
- 'target_name': 'mylib',
- 'type': 'static_library',
- 'sources': [
- 'mylib.c',
- ],
- 'postbuilds': [
- {
- 'postbuild_name': 'Make a secret location',
- 'action': [
- 'mkdir',
- '-p',
- '${SRCROOT}/../secret_location',
- ],
- },
- {
- 'postbuild_name': 'Copy to secret location, with secret name',
- 'action': [
- 'cp',
- '${BUILT_PRODUCTS_DIR}/${EXECUTABLE_PATH}',
- '${SRCROOT}/../secret_location/libmysecretlib.a',
- ],
- },
- ],
- },
- {
- 'target_name': 'libraries-search-path-test',
- 'type': 'executable',
- 'dependencies': [ 'mylib' ],
- 'sources': [
- 'hello.cc',
- ],
- 'xcode_settings': {
- 'LIBRARY_SEARCH_PATHS': [
- '<(DEPTH)/secret_location',
- ],
- },
- 'link_settings': {
- 'libraries': [
- 'libmysecretlib.a',
- ],
- },
- },
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/loadable-module/Info.plist b/deps/npm/node_modules/node-gyp/gyp/test/mac/loadable-module/Info.plist
deleted file mode 100644
index f6607aebd..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/loadable-module/Info.plist
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
- <key>CFBundleExecutable</key>
- <string>${EXECUTABLE_NAME}</string>
- <key>CFBundleIdentifier</key>
- <string>com.google.test_loadable_module</string>
- <key>CFBundleInfoDictionaryVersion</key>
- <string>6.0</string>
- <key>CFBundleName</key>
- <string>${PRODUCT_NAME}</string>
- <key>CFBundlePackageType</key>
- <string>BRPL</string>
- <key>CFBundleShortVersionString</key>
- <string>1.0</string>
- <key>CFBundleSignature</key>
- <string>????</string>
- <key>CFBundleVersion</key>
- <string>1.0</string>
- <key>CFPlugInDynamicRegisterFunction</key>
- <string></string>
- <key>CFPlugInDynamicRegistration</key>
- <string>NO</string>
-</dict>
-</plist>
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/loadable-module/module.c b/deps/npm/node_modules/node-gyp/gyp/test/mac/loadable-module/module.c
deleted file mode 100644
index 958453834..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/loadable-module/module.c
+++ /dev/null
@@ -1,11 +0,0 @@
-// Copyright (c) 2011 Google Inc. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-int SuperFly() {
- return 42;
-}
-
-const char* SuperFoo() {
- return "Hello World";
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/loadable-module/test.gyp b/deps/npm/node_modules/node-gyp/gyp/test/mac/loadable-module/test.gyp
deleted file mode 100644
index 3c8a5309d..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/loadable-module/test.gyp
+++ /dev/null
@@ -1,18 +0,0 @@
-# Copyright (c) 2011 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'targets': [
- {
- 'target_name': 'test_loadable_module',
- 'type': 'loadable_module',
- 'mac_bundle': 1,
- 'sources': [ 'module.c' ],
- 'product_extension': 'plugin',
- 'xcode_settings': {
- 'INFOPLIST_FILE': 'Info.plist',
- },
- },
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/missing-cfbundlesignature/Info.plist b/deps/npm/node_modules/node-gyp/gyp/test/mac/missing-cfbundlesignature/Info.plist
deleted file mode 100644
index 0c3167488..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/missing-cfbundlesignature/Info.plist
+++ /dev/null
@@ -1,10 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
- <key>CFBundleExecutable</key>
- <string>${EXECUTABLE_NAME}</string>
- <key>CFBundlePackageType</key>
- <string>APPL</string>
-</dict>
-</plist>
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/missing-cfbundlesignature/Other-Info.plist b/deps/npm/node_modules/node-gyp/gyp/test/mac/missing-cfbundlesignature/Other-Info.plist
deleted file mode 100644
index 47095281c..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/missing-cfbundlesignature/Other-Info.plist
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
- <key>CFBundleExecutable</key>
- <string>${EXECUTABLE_NAME}</string>
- <key>CFBundlePackageType</key>
- <string>APPL</string>
- <key>CFBundleSignature</key>
- <string>F</string>
-</dict>
-</plist>
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/missing-cfbundlesignature/Third-Info.plist b/deps/npm/node_modules/node-gyp/gyp/test/mac/missing-cfbundlesignature/Third-Info.plist
deleted file mode 100644
index 5b61fe266..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/missing-cfbundlesignature/Third-Info.plist
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
- <key>CFBundleExecutable</key>
- <string>${EXECUTABLE_NAME}</string>
- <key>CFBundlePackageType</key>
- <string>APPL</string>
- <key>CFBundleSignature</key>
- <string>some really long string</string>
-</dict>
-</plist>
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/missing-cfbundlesignature/file.c b/deps/npm/node_modules/node-gyp/gyp/test/mac/missing-cfbundlesignature/file.c
deleted file mode 100644
index 237c8ce18..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/missing-cfbundlesignature/file.c
+++ /dev/null
@@ -1 +0,0 @@
-int main() {}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/missing-cfbundlesignature/test.gyp b/deps/npm/node_modules/node-gyp/gyp/test/mac/missing-cfbundlesignature/test.gyp
deleted file mode 100644
index b50cc2791..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/missing-cfbundlesignature/test.gyp
+++ /dev/null
@@ -1,34 +0,0 @@
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-{
- 'targets': [
- {
- 'target_name': 'mytarget',
- 'type': 'executable',
- 'mac_bundle': 1,
- 'sources': [ 'file.c', ],
- 'xcode_settings': {
- 'INFOPLIST_FILE': 'Info.plist',
- },
- },
- {
- 'target_name': 'myothertarget',
- 'type': 'executable',
- 'mac_bundle': 1,
- 'sources': [ 'file.c', ],
- 'xcode_settings': {
- 'INFOPLIST_FILE': 'Other-Info.plist',
- },
- },
- {
- 'target_name': 'thirdtarget',
- 'type': 'executable',
- 'mac_bundle': 1,
- 'sources': [ 'file.c', ],
- 'xcode_settings': {
- 'INFOPLIST_FILE': 'Third-Info.plist',
- },
- },
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/non-strs-flattened-to-env/Info.plist b/deps/npm/node_modules/node-gyp/gyp/test/mac/non-strs-flattened-to-env/Info.plist
deleted file mode 100644
index 11fc4b660..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/non-strs-flattened-to-env/Info.plist
+++ /dev/null
@@ -1,15 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
- <!-- Not a valid plist file since it's missing so much. That's fine. -->
- <key>CFBundlePackageType</key>
- <string>APPL</string>
- <key>CFBundleSignature</key>
- <string>????</string>
- <key>My Variable</key>
- <string>${MY_VAR}</string>
- <key>CFlags</key>
- <string>${OTHER_CFLAGS}</string>
-</dict>
-</plist>
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/non-strs-flattened-to-env/main.c b/deps/npm/node_modules/node-gyp/gyp/test/mac/non-strs-flattened-to-env/main.c
deleted file mode 100644
index 1711567ef..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/non-strs-flattened-to-env/main.c
+++ /dev/null
@@ -1,7 +0,0 @@
-// Copyright (c) 2012 Google Inc. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-int main() {
- return 0;
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/non-strs-flattened-to-env/test.gyp b/deps/npm/node_modules/node-gyp/gyp/test/mac/non-strs-flattened-to-env/test.gyp
deleted file mode 100644
index 58814b73f..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/non-strs-flattened-to-env/test.gyp
+++ /dev/null
@@ -1,24 +0,0 @@
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-{
- 'targets': [
- {
- 'target_name': 'test_app',
- 'product_name': 'Test',
- 'type': 'executable',
- 'mac_bundle': 1,
- 'sources': [ 'main.c', ],
- 'xcode_settings': {
- 'INFOPLIST_FILE': 'Info.plist',
- 'MY_VAR': 'some expansion',
- 'OTHER_CFLAGS': [
- # Just some (more than one) random flags.
- '-fstack-protector-all',
- '-fno-strict-aliasing',
- '-DS="A Space"', # Would normally be in 'defines'
- ],
- },
- },
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/objc-gc/c-file.c b/deps/npm/node_modules/node-gyp/gyp/test/mac/objc-gc/c-file.c
deleted file mode 100644
index 2855a00ea..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/objc-gc/c-file.c
+++ /dev/null
@@ -1 +0,0 @@
-void c_fun() {}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/objc-gc/cc-file.cc b/deps/npm/node_modules/node-gyp/gyp/test/mac/objc-gc/cc-file.cc
deleted file mode 100644
index 71e47a012..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/objc-gc/cc-file.cc
+++ /dev/null
@@ -1 +0,0 @@
-void cc_fun() {}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/objc-gc/main.m b/deps/npm/node_modules/node-gyp/gyp/test/mac/objc-gc/main.m
deleted file mode 100644
index 1a87f8e70..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/objc-gc/main.m
+++ /dev/null
@@ -1,6 +0,0 @@
-#import <Foundation/Foundation.h>
-
-int main() {
- printf("gc on: %d\n", [NSGarbageCollector defaultCollector] != NULL);
- return 0;
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/objc-gc/needs-gc-mm.mm b/deps/npm/node_modules/node-gyp/gyp/test/mac/objc-gc/needs-gc-mm.mm
deleted file mode 100644
index fc3fee9f3..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/objc-gc/needs-gc-mm.mm
+++ /dev/null
@@ -1 +0,0 @@
-void objcpp_fun() { }
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/objc-gc/needs-gc.m b/deps/npm/node_modules/node-gyp/gyp/test/mac/objc-gc/needs-gc.m
deleted file mode 100644
index ca77976b1..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/objc-gc/needs-gc.m
+++ /dev/null
@@ -1 +0,0 @@
-void objc_fun() { }
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/objc-gc/test.gyp b/deps/npm/node_modules/node-gyp/gyp/test/mac/objc-gc/test.gyp
deleted file mode 100644
index 4d827c1b3..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/objc-gc/test.gyp
+++ /dev/null
@@ -1,102 +0,0 @@
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-{
- 'targets': [
- # For some reason, static_library targets that are built with gc=required
- # and then linked to executables that don't use gc, the linker doesn't
- # complain. For shared_libraries it does, so use that.
- {
- 'target_name': 'no_gc_lib',
- 'type': 'shared_library',
- 'sources': [
- 'c-file.c',
- 'cc-file.cc',
- 'needs-gc-mm.mm',
- 'needs-gc.m',
- ],
- },
- {
- 'target_name': 'gc_lib',
- 'type': 'shared_library',
- 'sources': [
- 'c-file.c',
- 'cc-file.cc',
- 'needs-gc-mm.mm',
- 'needs-gc.m',
- ],
- 'xcode_settings': {
- 'GCC_ENABLE_OBJC_GC': 'supported',
- },
- },
- {
- 'target_name': 'gc_req_lib',
- 'type': 'shared_library',
- 'sources': [
- 'c-file.c',
- 'cc-file.cc',
- 'needs-gc-mm.mm',
- 'needs-gc.m',
- ],
- 'xcode_settings': {
- 'GCC_ENABLE_OBJC_GC': 'required',
- },
- },
-
- {
- 'target_name': 'gc_exe_fails',
- 'type': 'executable',
- 'sources': [ 'main.m' ],
- 'dependencies': [ 'no_gc_lib' ],
- 'xcode_settings': {
- 'GCC_ENABLE_OBJC_GC': 'required',
- },
- 'libraries': [ 'Foundation.framework' ],
- },
- {
- 'target_name': 'gc_req_exe',
- 'type': 'executable',
- 'sources': [ 'main.m' ],
- 'dependencies': [ 'gc_lib' ],
- 'xcode_settings': {
- 'GCC_ENABLE_OBJC_GC': 'required',
- },
- 'libraries': [ 'Foundation.framework' ],
- },
- {
- 'target_name': 'gc_exe_req_lib',
- 'type': 'executable',
- 'sources': [ 'main.m' ],
- 'dependencies': [ 'gc_req_lib' ],
- 'xcode_settings': {
- 'GCC_ENABLE_OBJC_GC': 'supported',
- },
- 'libraries': [ 'Foundation.framework' ],
- },
- {
- 'target_name': 'gc_exe',
- 'type': 'executable',
- 'sources': [ 'main.m' ],
- 'dependencies': [ 'gc_lib' ],
- 'xcode_settings': {
- 'GCC_ENABLE_OBJC_GC': 'supported',
- },
- 'libraries': [ 'Foundation.framework' ],
- },
- {
- 'target_name': 'gc_off_exe_req_lib',
- 'type': 'executable',
- 'sources': [ 'main.m' ],
- 'dependencies': [ 'gc_req_lib' ],
- 'libraries': [ 'Foundation.framework' ],
- },
- {
- 'target_name': 'gc_off_exe',
- 'type': 'executable',
- 'sources': [ 'main.m' ],
- 'dependencies': [ 'gc_lib' ],
- 'libraries': [ 'Foundation.framework' ],
- },
- ],
-}
-
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/postbuild-copy-bundle/Framework-Info.plist b/deps/npm/node_modules/node-gyp/gyp/test/mac/postbuild-copy-bundle/Framework-Info.plist
deleted file mode 100644
index ec36829c0..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/postbuild-copy-bundle/Framework-Info.plist
+++ /dev/null
@@ -1,30 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
- <key>CFBundleDevelopmentRegion</key>
- <string>English</string>
- <key>CFBundleExecutable</key>
- <string>${EXECUTABLE_NAME}</string>
- <key>CFBundleIconFile</key>
- <string></string>
- <key>CFBundleIdentifier</key>
- <string>com.yourcompany.${PRODUCT_NAME}</string>
- <key>CFBundleInfoDictionaryVersion</key>
- <string>6.0</string>
- <key>CFBundleName</key>
- <string>${PRODUCT_NAME}</string>
- <key>CFBundlePackageType</key>
- <string>FMWK</string>
- <key>CFBundleShortVersionString</key>
- <string>1.0</string>
- <key>CFBundleSignature</key>
- <string>????</string>
- <key>CFBundleVersion</key>
- <string>1</string>
- <key>NSPrincipalClass</key>
- <string></string>
- <key>RandomKey</key>
- <string>RandomValue</string>
-</dict>
-</plist>
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/postbuild-copy-bundle/TestApp-Info.plist b/deps/npm/node_modules/node-gyp/gyp/test/mac/postbuild-copy-bundle/TestApp-Info.plist
deleted file mode 100644
index 98fd51520..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/postbuild-copy-bundle/TestApp-Info.plist
+++ /dev/null
@@ -1,32 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
- <key>CFBundleDevelopmentRegion</key>
- <string>English</string>
- <key>CFBundleExecutable</key>
- <string>${EXECUTABLE_NAME}</string>
- <key>CFBundleIconFile</key>
- <string></string>
- <key>CFBundleIdentifier</key>
- <string>com.google.${PRODUCT_NAME}</string>
- <key>CFBundleInfoDictionaryVersion</key>
- <string>6.0</string>
- <key>CFBundleName</key>
- <string>${PRODUCT_NAME}</string>
- <key>CFBundlePackageType</key>
- <string>APPL</string>
- <key>CFBundleShortVersionString</key>
- <string>1.0</string>
- <key>CFBundleSignature</key>
- <string>????</string>
- <key>CFBundleVersion</key>
- <string>1</string>
- <key>LSMinimumSystemVersion</key>
- <string>${MACOSX_DEPLOYMENT_TARGET}</string>
- <key>NSMainNibFile</key>
- <string>MainMenu</string>
- <key>NSPrincipalClass</key>
- <string>NSApplication</string>
-</dict>
-</plist>
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/postbuild-copy-bundle/empty.c b/deps/npm/node_modules/node-gyp/gyp/test/mac/postbuild-copy-bundle/empty.c
deleted file mode 100644
index e69de29bb..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/postbuild-copy-bundle/empty.c
+++ /dev/null
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/postbuild-copy-bundle/main.c b/deps/npm/node_modules/node-gyp/gyp/test/mac/postbuild-copy-bundle/main.c
deleted file mode 100644
index 21c196352..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/postbuild-copy-bundle/main.c
+++ /dev/null
@@ -1,4 +0,0 @@
-// Copyright (c) 2012 Google Inc. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-int main() {}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/postbuild-copy-bundle/postbuild-copy-framework.sh b/deps/npm/node_modules/node-gyp/gyp/test/mac/postbuild-copy-bundle/postbuild-copy-framework.sh
deleted file mode 100755
index 930fec661..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/postbuild-copy-bundle/postbuild-copy-framework.sh
+++ /dev/null
@@ -1,9 +0,0 @@
-#!/bin/bash
-
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-set -e
-
-rsync -acC --delete "$1" "$2"
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/postbuild-copy-bundle/resource_file.sb b/deps/npm/node_modules/node-gyp/gyp/test/mac/postbuild-copy-bundle/resource_file.sb
deleted file mode 100644
index 42057fa23..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/postbuild-copy-bundle/resource_file.sb
+++ /dev/null
@@ -1 +0,0 @@
-This is included in the framework bundle.
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/postbuild-copy-bundle/test.gyp b/deps/npm/node_modules/node-gyp/gyp/test/mac/postbuild-copy-bundle/test.gyp
deleted file mode 100644
index 547737ce5..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/postbuild-copy-bundle/test.gyp
+++ /dev/null
@@ -1,43 +0,0 @@
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-{
- 'targets': [
- {
- 'target_name': 'test_bundle',
- 'product_name': 'My Framework',
- 'type': 'shared_library',
- 'mac_bundle': 1,
- 'sources': [ 'empty.c', ],
- 'xcode_settings': {
- 'INFOPLIST_FILE': 'Framework-Info.plist',
- },
- 'mac_bundle_resources': [
- 'resource_file.sb',
- ],
- },
- {
- 'target_name': 'test_app',
- 'product_name': 'Test App',
- 'type': 'executable',
- 'mac_bundle': 1,
- 'dependencies': [
- 'test_bundle',
- ],
- 'sources': [ 'main.c', ],
- 'xcode_settings': {
- 'INFOPLIST_FILE': 'TestApp-Info.plist',
- },
- 'postbuilds': [
- {
- 'postbuild_name': 'Copy dependent framework into app',
- 'action': [
- './postbuild-copy-framework.sh',
- '${BUILT_PRODUCTS_DIR}/My Framework.framework',
- '${BUILT_PRODUCTS_DIR}/${CONTENTS_FOLDER_PATH}/',
- ],
- },
- ],
- },
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/postbuild-defaults/Info.plist b/deps/npm/node_modules/node-gyp/gyp/test/mac/postbuild-defaults/Info.plist
deleted file mode 100644
index d3f54d76c..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/postbuild-defaults/Info.plist
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
- <!-- Not a valid plist file since it's missing so much. That's fine. -->
- <key>CFBundlePackageType</key>
- <string>APPL</string>
- <key>CFBundleSignature</key>
- <string>????</string>
- <key>CFBundleName</key>
- <string>${PRODUCT_NAME}</string>
-</dict>
-</plist>
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/postbuild-defaults/main.c b/deps/npm/node_modules/node-gyp/gyp/test/mac/postbuild-defaults/main.c
deleted file mode 100644
index 1711567ef..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/postbuild-defaults/main.c
+++ /dev/null
@@ -1,7 +0,0 @@
-// Copyright (c) 2012 Google Inc. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-int main() {
- return 0;
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/postbuild-defaults/postbuild-defaults.sh b/deps/npm/node_modules/node-gyp/gyp/test/mac/postbuild-defaults/postbuild-defaults.sh
deleted file mode 100755
index 56af2a832..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/postbuild-defaults/postbuild-defaults.sh
+++ /dev/null
@@ -1,15 +0,0 @@
-#!/bin/bash
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-set -e
-
-# This is the built Info.plist in the output directory.
-PLIST="${BUILT_PRODUCTS_DIR}"/Test.app/Contents/Info # No trailing .plist
-echo $(defaults read "${PLIST}" "CFBundleName") > "${BUILT_PRODUCTS_DIR}/result"
-
-# This is the source Info.plist next to this script file.
-PLIST="${SRCROOT}"/Info # No trailing .plist
-echo $(defaults read "${PLIST}" "CFBundleName") \
- >> "${BUILT_PRODUCTS_DIR}/result"
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/postbuild-defaults/test.gyp b/deps/npm/node_modules/node-gyp/gyp/test/mac/postbuild-defaults/test.gyp
deleted file mode 100644
index be0a075ef..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/postbuild-defaults/test.gyp
+++ /dev/null
@@ -1,26 +0,0 @@
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-{
- 'targets': [
- {
- 'target_name': 'test_app',
- 'product_name': 'Test',
- 'type': 'executable',
- 'mac_bundle': 1,
- 'sources': [ 'main.c', ],
- 'xcode_settings': {
- 'INFOPLIST_FILE': 'Info.plist',
- },
- 'postbuilds': [
- {
- 'postbuild_name': 'Postbuild that calls defaults',
- 'action': [
- './postbuild-defaults.sh',
- '${BUILT_PRODUCTS_DIR}/${EXECUTABLE_PATH}',
- ],
- },
- ],
- },
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/postbuild-fail/file.c b/deps/npm/node_modules/node-gyp/gyp/test/mac/postbuild-fail/file.c
deleted file mode 100644
index 91695b10c..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/postbuild-fail/file.c
+++ /dev/null
@@ -1,6 +0,0 @@
-// Copyright (c) 2011 Google Inc. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// That's right, this is copyrighted.
-void f() {}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/postbuild-fail/postbuild-fail.sh b/deps/npm/node_modules/node-gyp/gyp/test/mac/postbuild-fail/postbuild-fail.sh
deleted file mode 100755
index dc1a60d98..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/postbuild-fail/postbuild-fail.sh
+++ /dev/null
@@ -1,6 +0,0 @@
-#!/usr/bin/bash
-# Copyright (c) 2011 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-exit 1
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/postbuild-fail/test.gyp b/deps/npm/node_modules/node-gyp/gyp/test/mac/postbuild-fail/test.gyp
deleted file mode 100644
index e63283db0..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/postbuild-fail/test.gyp
+++ /dev/null
@@ -1,38 +0,0 @@
-# Copyright (c) 2011 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-{
- 'targets': [
- {
- 'target_name': 'nonbundle',
- 'type': 'static_library',
- 'sources': [ 'file.c', ],
- 'postbuilds': [
- {
- 'postbuild_name': 'Postbuild Fail',
- 'action': [ './postbuild-fail.sh', ],
- },
- {
- 'postbuild_name': 'Runs after failing postbuild',
- 'action': [ './touch-static.sh', ],
- },
- ],
- },
- {
- 'target_name': 'bundle',
- 'type': 'shared_library',
- 'mac_bundle': 1,
- 'sources': [ 'file.c', ],
- 'postbuilds': [
- {
- 'postbuild_name': 'Postbuild Fail',
- 'action': [ './postbuild-fail.sh', ],
- },
- {
- 'postbuild_name': 'Runs after failing postbuild',
- 'action': [ './touch-dynamic.sh', ],
- },
- ],
- },
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/postbuild-fail/touch-dynamic.sh b/deps/npm/node_modules/node-gyp/gyp/test/mac/postbuild-fail/touch-dynamic.sh
deleted file mode 100755
index a388a6410..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/postbuild-fail/touch-dynamic.sh
+++ /dev/null
@@ -1,7 +0,0 @@
-#!/bin/bash
-# Copyright (c) 2011 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-set -e
-touch "${BUILT_PRODUCTS_DIR}/dynamic_touch"
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/postbuild-fail/touch-static.sh b/deps/npm/node_modules/node-gyp/gyp/test/mac/postbuild-fail/touch-static.sh
deleted file mode 100755
index 97ecaa686..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/postbuild-fail/touch-static.sh
+++ /dev/null
@@ -1,7 +0,0 @@
-#!/bin/bash
-# Copyright (c) 2011 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-set -e
-touch "${BUILT_PRODUCTS_DIR}/static_touch"
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/postbuild-multiple-configurations/main.c b/deps/npm/node_modules/node-gyp/gyp/test/mac/postbuild-multiple-configurations/main.c
deleted file mode 100644
index 21c196352..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/postbuild-multiple-configurations/main.c
+++ /dev/null
@@ -1,4 +0,0 @@
-// Copyright (c) 2012 Google Inc. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-int main() {}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/postbuild-multiple-configurations/postbuild-touch-file.sh b/deps/npm/node_modules/node-gyp/gyp/test/mac/postbuild-multiple-configurations/postbuild-touch-file.sh
deleted file mode 100755
index b6170cf7a..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/postbuild-multiple-configurations/postbuild-touch-file.sh
+++ /dev/null
@@ -1,7 +0,0 @@
-#!/bin/bash
-
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-touch "${BUILT_PRODUCTS_DIR}/postbuild-file"
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/postbuild-multiple-configurations/test.gyp b/deps/npm/node_modules/node-gyp/gyp/test/mac/postbuild-multiple-configurations/test.gyp
deleted file mode 100644
index c350b20d6..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/postbuild-multiple-configurations/test.gyp
+++ /dev/null
@@ -1,26 +0,0 @@
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-{
- 'target_defaults': {
- 'configurations': {
- 'Debug': {},
- 'Release': {},
- },
- },
- 'targets': [
- {
- 'target_name': 'random_target',
- 'type': 'executable',
- 'sources': [ 'main.c', ],
- 'postbuilds': [
- {
- 'postbuild_name': 'Touch a file.',
- 'action': [
- './postbuild-touch-file.sh',
- ],
- },
- ],
- },
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/postbuild-static-library/empty.c b/deps/npm/node_modules/node-gyp/gyp/test/mac/postbuild-static-library/empty.c
deleted file mode 100644
index 9554336c0..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/postbuild-static-library/empty.c
+++ /dev/null
@@ -1,4 +0,0 @@
-// Copyright (c) 2012 Google Inc. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-void f() {}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/postbuild-static-library/postbuild-touch-file.sh b/deps/npm/node_modules/node-gyp/gyp/test/mac/postbuild-static-library/postbuild-touch-file.sh
deleted file mode 100755
index 37de4de4f..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/postbuild-static-library/postbuild-touch-file.sh
+++ /dev/null
@@ -1,7 +0,0 @@
-#!/bin/bash
-
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-touch "${BUILT_PRODUCTS_DIR}/$1"
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/postbuild-static-library/test.gyp b/deps/npm/node_modules/node-gyp/gyp/test/mac/postbuild-static-library/test.gyp
deleted file mode 100644
index 9ef55a0af..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/postbuild-static-library/test.gyp
+++ /dev/null
@@ -1,34 +0,0 @@
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-{
- 'targets': [
- {
- 'target_name': 'my_lib',
- 'type': 'static_library',
- 'sources': [ 'empty.c', ],
- 'postbuilds': [
- {
- 'postbuild_name': 'Postbuild that touches a file',
- 'action': [
- './postbuild-touch-file.sh', 'postbuild-file'
- ],
- },
- ],
- },
-
- {
- 'target_name': 'my_sourceless_lib',
- 'type': 'static_library',
- 'dependencies': [ 'my_lib' ],
- 'postbuilds': [
- {
- 'postbuild_name': 'Postbuild that touches a file',
- 'action': [
- './postbuild-touch-file.sh', 'postbuild-file-sourceless'
- ],
- },
- ],
- },
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/postbuilds/copy.sh b/deps/npm/node_modules/node-gyp/gyp/test/mac/postbuilds/copy.sh
deleted file mode 100755
index ecad0381d..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/postbuilds/copy.sh
+++ /dev/null
@@ -1,3 +0,0 @@
-#!/bin/bash
-
-cp "$@"
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/postbuilds/file.c b/deps/npm/node_modules/node-gyp/gyp/test/mac/postbuilds/file.c
deleted file mode 100644
index 653e71ff7..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/postbuilds/file.c
+++ /dev/null
@@ -1,4 +0,0 @@
-// Copyright (c) 2011 Google Inc. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-void f() {}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/postbuilds/file_g.c b/deps/npm/node_modules/node-gyp/gyp/test/mac/postbuilds/file_g.c
deleted file mode 100644
index 0f7849d20..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/postbuilds/file_g.c
+++ /dev/null
@@ -1,4 +0,0 @@
-// Copyright (c) 2012 Google Inc. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-void g() {}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/postbuilds/file_h.c b/deps/npm/node_modules/node-gyp/gyp/test/mac/postbuilds/file_h.c
deleted file mode 100644
index 521d1f4d5..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/postbuilds/file_h.c
+++ /dev/null
@@ -1,4 +0,0 @@
-// Copyright (c) 2012 Google Inc. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-void h() {}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/postbuilds/script/shared_library_postbuild.sh b/deps/npm/node_modules/node-gyp/gyp/test/mac/postbuilds/script/shared_library_postbuild.sh
deleted file mode 100755
index c623c8bf2..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/postbuilds/script/shared_library_postbuild.sh
+++ /dev/null
@@ -1,23 +0,0 @@
-#!/bin/bash
-# Copyright (c) 2011 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-set -e
-
-lib="${BUILT_PRODUCTS_DIR}/${EXECUTABLE_PATH}"
-nm ${lib} > /dev/null # Just make sure this works.
-
-pattern="${1}"
-
-if [ $pattern != "a|b" ]; then
- echo "Parameter quoting is broken"
- exit 1
-fi
-
-if [ "${2}" != "arg with spaces" ]; then
- echo "Parameter space escaping is broken"
- exit 1
-fi
-
-touch "${lib}"_touch
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/postbuilds/script/static_library_postbuild.sh b/deps/npm/node_modules/node-gyp/gyp/test/mac/postbuilds/script/static_library_postbuild.sh
deleted file mode 100755
index 2bf09b34e..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/postbuilds/script/static_library_postbuild.sh
+++ /dev/null
@@ -1,23 +0,0 @@
-#!/bin/bash
-# Copyright (c) 2011 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-set -e
-
-lib="${BUILT_PRODUCTS_DIR}/${FULL_PRODUCT_NAME}"
-nm ${lib} > /dev/null # Just make sure this works.
-
-pattern="${1}"
-
-if [ $pattern != "a|b" ]; then
- echo "Parameter quote escaping is broken"
- exit 1
-fi
-
-if [ "${2}" != "arg with spaces" ]; then
- echo "Parameter space escaping is broken"
- exit 1
-fi
-
-touch "${lib}"_touch.a
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/postbuilds/subdirectory/copied_file.txt b/deps/npm/node_modules/node-gyp/gyp/test/mac/postbuilds/subdirectory/copied_file.txt
deleted file mode 100644
index a634f85b6..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/postbuilds/subdirectory/copied_file.txt
+++ /dev/null
@@ -1 +0,0 @@
-This file should be copied to the products dir.
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/postbuilds/subdirectory/nested_target.gyp b/deps/npm/node_modules/node-gyp/gyp/test/mac/postbuilds/subdirectory/nested_target.gyp
deleted file mode 100644
index 6d4f2395e..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/postbuilds/subdirectory/nested_target.gyp
+++ /dev/null
@@ -1,53 +0,0 @@
-# Copyright (c) 2011 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-{
- 'targets': [
- {
- 'target_name': 'nest_el',
- 'type': 'static_library',
- 'sources': [ '../file_g.c', ],
- 'postbuilds': [
- {
- 'postbuild_name': 'Static library postbuild',
- 'variables': {
- 'some_regex': 'a|b',
- },
- 'action': [
- '../script/static_library_postbuild.sh',
- '<(some_regex)',
- 'arg with spaces',
- ],
- },
- ],
- },
- {
- 'target_name': 'nest_dyna',
- 'type': 'shared_library',
- 'mac_bundle': 1,
- 'sources': [ '../file_h.c', ],
- 'postbuilds': [
- {
- 'postbuild_name': 'Dynamic library postbuild',
- 'variables': {
- 'some_regex': 'a|b',
- },
- 'action': [
- '../script/shared_library_postbuild.sh',
- '<(some_regex)',
- 'arg with spaces',
- ],
- },
- {
- 'postbuild_name': 'Test paths relative to gyp file',
- 'action': [
- '../copy.sh',
- './copied_file.txt',
- '${BUILT_PRODUCTS_DIR}/copied_file_2.txt',
- ],
- },
- ],
- },
- ],
-}
-
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/postbuilds/test.gyp b/deps/npm/node_modules/node-gyp/gyp/test/mac/postbuilds/test.gyp
deleted file mode 100644
index 1f0eed8df..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/postbuilds/test.gyp
+++ /dev/null
@@ -1,87 +0,0 @@
-# Copyright (c) 2011 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-{
- 'targets': [
- {
- 'target_name': 'el',
- 'type': 'static_library',
- 'sources': [ 'file.c', ],
- 'postbuilds': [
- {
- 'postbuild_name': 'Static library postbuild',
- 'variables': {
- 'some_regex': 'a|b',
- },
- 'action': [
- 'script/static_library_postbuild.sh',
- '<(some_regex)',
- 'arg with spaces',
- ],
- },
- {
- 'postbuild_name': 'Test variable in gyp file',
- 'action': [
- 'cp',
- '${BUILT_PRODUCTS_DIR}/${EXECUTABLE_PATH}',
- '${BUILT_PRODUCTS_DIR}/${EXECUTABLE_PATH}_gyp_touch.a',
- ],
- },
- ],
- },
- {
- 'target_name': 'dyna',
- 'type': 'shared_library',
- 'mac_bundle': 1,
- 'sources': [ 'file.c', ],
- 'dependencies': [
- 'subdirectory/nested_target.gyp:nest_dyna',
- 'subdirectory/nested_target.gyp:nest_el',
- ],
- 'postbuilds': [
- {
- 'postbuild_name': 'Dynamic library postbuild',
- 'variables': {
- 'some_regex': 'a|b',
- },
- 'action': [
- 'script/shared_library_postbuild.sh',
- '<(some_regex)',
- 'arg with spaces',
- ],
- },
- {
- 'postbuild_name': 'Test variable in gyp file',
- 'action': [
- 'cp',
- '${BUILT_PRODUCTS_DIR}/${EXECUTABLE_PATH}',
- '${BUILT_PRODUCTS_DIR}/${EXECUTABLE_PATH}_gyp_touch',
- ],
- },
- {
- 'postbuild_name': 'Test paths relative to gyp file',
- 'action': [
- './copy.sh',
- 'subdirectory/copied_file.txt',
- '${BUILT_PRODUCTS_DIR}',
- ],
- },
- ],
- },
- {
- 'target_name': 'dyna_standalone',
- 'type': 'shared_library',
- 'sources': [ 'file.c', ],
- 'postbuilds': [
- {
- 'postbuild_name': 'Test variable in gyp file',
- 'action': [
- 'cp',
- '${BUILT_PRODUCTS_DIR}/${EXECUTABLE_PATH}',
- '${BUILT_PRODUCTS_DIR}/${EXECUTABLE_PATH}_gyp_touch.dylib',
- ],
- },
- ],
- },
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/prefixheader/file.c b/deps/npm/node_modules/node-gyp/gyp/test/mac/prefixheader/file.c
deleted file mode 100644
index d0b39d1f6..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/prefixheader/file.c
+++ /dev/null
@@ -1 +0,0 @@
-MyInt f() { return 0; }
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/prefixheader/file.cc b/deps/npm/node_modules/node-gyp/gyp/test/mac/prefixheader/file.cc
deleted file mode 100644
index d0b39d1f6..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/prefixheader/file.cc
+++ /dev/null
@@ -1 +0,0 @@
-MyInt f() { return 0; }
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/prefixheader/file.m b/deps/npm/node_modules/node-gyp/gyp/test/mac/prefixheader/file.m
deleted file mode 100644
index d0b39d1f6..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/prefixheader/file.m
+++ /dev/null
@@ -1 +0,0 @@
-MyInt f() { return 0; }
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/prefixheader/file.mm b/deps/npm/node_modules/node-gyp/gyp/test/mac/prefixheader/file.mm
deleted file mode 100644
index d0b39d1f6..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/prefixheader/file.mm
+++ /dev/null
@@ -1 +0,0 @@
-MyInt f() { return 0; }
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/prefixheader/header.h b/deps/npm/node_modules/node-gyp/gyp/test/mac/prefixheader/header.h
deleted file mode 100644
index 0716e500c..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/prefixheader/header.h
+++ /dev/null
@@ -1 +0,0 @@
-typedef int MyInt;
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/prefixheader/test.gyp b/deps/npm/node_modules/node-gyp/gyp/test/mac/prefixheader/test.gyp
deleted file mode 100644
index 7e6b1af80..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/prefixheader/test.gyp
+++ /dev/null
@@ -1,82 +0,0 @@
-# Copyright (c) 2011 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-{
- 'targets': [
- {
- 'target_name': 'prefix_header_c',
- 'type': 'static_library',
- 'sources': [ 'file.c', ],
- 'xcode_settings': {
- 'GCC_PREFIX_HEADER': 'header.h',
- },
- },
- {
- 'target_name': 'precompiled_prefix_header_c',
- 'type': 'shared_library',
- 'mac_bundle': 1,
- 'sources': [ 'file.c', ],
- 'xcode_settings': {
- 'GCC_PREFIX_HEADER': 'header.h',
- 'GCC_PRECOMPILE_PREFIX_HEADER': 'YES',
- },
- },
-
- {
- 'target_name': 'prefix_header_cc',
- 'type': 'static_library',
- 'sources': [ 'file.cc', ],
- 'xcode_settings': {
- 'GCC_PREFIX_HEADER': 'header.h',
- },
- },
- {
- 'target_name': 'precompiled_prefix_header_cc',
- 'type': 'shared_library',
- 'mac_bundle': 1,
- 'sources': [ 'file.cc', ],
- 'xcode_settings': {
- 'GCC_PREFIX_HEADER': 'header.h',
- 'GCC_PRECOMPILE_PREFIX_HEADER': 'YES',
- },
- },
-
- {
- 'target_name': 'prefix_header_m',
- 'type': 'static_library',
- 'sources': [ 'file.m', ],
- 'xcode_settings': {
- 'GCC_PREFIX_HEADER': 'header.h',
- },
- },
- {
- 'target_name': 'precompiled_prefix_header_m',
- 'type': 'shared_library',
- 'mac_bundle': 1,
- 'sources': [ 'file.m', ],
- 'xcode_settings': {
- 'GCC_PREFIX_HEADER': 'header.h',
- 'GCC_PRECOMPILE_PREFIX_HEADER': 'YES',
- },
- },
-
- {
- 'target_name': 'prefix_header_mm',
- 'type': 'static_library',
- 'sources': [ 'file.mm', ],
- 'xcode_settings': {
- 'GCC_PREFIX_HEADER': 'header.h',
- },
- },
- {
- 'target_name': 'precompiled_prefix_header_mm',
- 'type': 'shared_library',
- 'mac_bundle': 1,
- 'sources': [ 'file.mm', ],
- 'xcode_settings': {
- 'GCC_PREFIX_HEADER': 'header.h',
- 'GCC_PRECOMPILE_PREFIX_HEADER': 'YES',
- },
- },
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/rebuild/TestApp-Info.plist b/deps/npm/node_modules/node-gyp/gyp/test/mac/rebuild/TestApp-Info.plist
deleted file mode 100644
index 98fd51520..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/rebuild/TestApp-Info.plist
+++ /dev/null
@@ -1,32 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
- <key>CFBundleDevelopmentRegion</key>
- <string>English</string>
- <key>CFBundleExecutable</key>
- <string>${EXECUTABLE_NAME}</string>
- <key>CFBundleIconFile</key>
- <string></string>
- <key>CFBundleIdentifier</key>
- <string>com.google.${PRODUCT_NAME}</string>
- <key>CFBundleInfoDictionaryVersion</key>
- <string>6.0</string>
- <key>CFBundleName</key>
- <string>${PRODUCT_NAME}</string>
- <key>CFBundlePackageType</key>
- <string>APPL</string>
- <key>CFBundleShortVersionString</key>
- <string>1.0</string>
- <key>CFBundleSignature</key>
- <string>????</string>
- <key>CFBundleVersion</key>
- <string>1</string>
- <key>LSMinimumSystemVersion</key>
- <string>${MACOSX_DEPLOYMENT_TARGET}</string>
- <key>NSMainNibFile</key>
- <string>MainMenu</string>
- <key>NSPrincipalClass</key>
- <string>NSApplication</string>
-</dict>
-</plist>
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/rebuild/delay-touch.sh b/deps/npm/node_modules/node-gyp/gyp/test/mac/rebuild/delay-touch.sh
deleted file mode 100755
index 7caf105b6..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/rebuild/delay-touch.sh
+++ /dev/null
@@ -1,6 +0,0 @@
-#!/bin/bash
-
-set -e
-
-sleep 1 # mtime resolution is 1 sec on unix.
-touch "$1"
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/rebuild/empty.c b/deps/npm/node_modules/node-gyp/gyp/test/mac/rebuild/empty.c
deleted file mode 100644
index e69de29bb..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/rebuild/empty.c
+++ /dev/null
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/rebuild/main.c b/deps/npm/node_modules/node-gyp/gyp/test/mac/rebuild/main.c
deleted file mode 100644
index 237c8ce18..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/rebuild/main.c
+++ /dev/null
@@ -1 +0,0 @@
-int main() {}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/rebuild/test.gyp b/deps/npm/node_modules/node-gyp/gyp/test/mac/rebuild/test.gyp
deleted file mode 100644
index 15b4e4ef2..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/rebuild/test.gyp
+++ /dev/null
@@ -1,56 +0,0 @@
-# Copyright (c) 2011 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-{
- 'targets': [
- {
- 'target_name': 'test_app',
- 'product_name': 'Test App',
- 'type': 'executable',
- 'mac_bundle': 1,
- 'sources': [
- 'main.c',
- ],
- 'xcode_settings': {
- 'INFOPLIST_FILE': 'TestApp-Info.plist',
- },
- },
- {
- 'target_name': 'test_app_postbuilds',
- 'product_name': 'Test App 2',
- 'type': 'executable',
- 'mac_bundle': 1,
- 'sources': [
- 'main.c',
- ],
- 'xcode_settings': {
- 'INFOPLIST_FILE': 'TestApp-Info.plist',
- },
- 'postbuilds': [
- {
- 'postbuild_name': 'Postbuild that touches the app binary',
- 'action': [
- './delay-touch.sh', '${BUILT_PRODUCTS_DIR}/${EXECUTABLE_PATH}',
- ],
- },
- ],
- },
- {
- 'target_name': 'test_framework_postbuilds',
- 'product_name': 'Test Framework',
- 'type': 'shared_library',
- 'mac_bundle': 1,
- 'sources': [
- 'empty.c',
- ],
- 'postbuilds': [
- {
- 'postbuild_name': 'Postbuild that touches the framework binary',
- 'action': [
- './delay-touch.sh', '${BUILT_PRODUCTS_DIR}/${EXECUTABLE_PATH}',
- ],
- },
- ],
- },
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/rpath/file.c b/deps/npm/node_modules/node-gyp/gyp/test/mac/rpath/file.c
deleted file mode 100644
index 56757a701..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/rpath/file.c
+++ /dev/null
@@ -1 +0,0 @@
-void f() {}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/rpath/main.c b/deps/npm/node_modules/node-gyp/gyp/test/mac/rpath/main.c
deleted file mode 100644
index 237c8ce18..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/rpath/main.c
+++ /dev/null
@@ -1 +0,0 @@
-int main() {}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/rpath/test.gyp b/deps/npm/node_modules/node-gyp/gyp/test/mac/rpath/test.gyp
deleted file mode 100644
index 7255cb7cd..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/rpath/test.gyp
+++ /dev/null
@@ -1,48 +0,0 @@
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-{
- 'targets': [
- {
- 'target_name': 'default_rpath',
- 'type': 'shared_library',
- 'sources': [ 'file.c' ],
- },
- {
- 'target_name': 'explicit_rpath',
- 'type': 'shared_library',
- 'sources': [ 'file.c' ],
- 'xcode_settings': {
- 'LD_RUNPATH_SEARCH_PATHS': ['@executable_path/.'],
- },
- },
- {
- 'target_name': 'explicit_rpaths_escaped',
- 'type': 'shared_library',
- 'sources': [ 'file.c' ],
- 'xcode_settings': {
- # Xcode requires spaces to be escaped, else it ends up adding two
- # independent rpaths.
- 'LD_RUNPATH_SEARCH_PATHS': ['First\\ rpath', 'Second\\ rpath'],
- },
- },
- {
- 'target_name': 'explicit_rpaths_bundle',
- 'product_name': 'My Framework',
- 'type': 'shared_library',
- 'mac_bundle': 1,
- 'sources': [ 'file.c' ],
- 'xcode_settings': {
- 'LD_RUNPATH_SEARCH_PATHS': ['@loader_path/.'],
- },
- },
- {
- 'target_name': 'executable',
- 'type': 'executable',
- 'sources': [ 'main.c' ],
- 'xcode_settings': {
- 'LD_RUNPATH_SEARCH_PATHS': ['@executable_path/.'],
- },
- },
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/sdkroot/file.cc b/deps/npm/node_modules/node-gyp/gyp/test/mac/sdkroot/file.cc
deleted file mode 100644
index 13ae97104..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/sdkroot/file.cc
+++ /dev/null
@@ -1,5 +0,0 @@
-#include <map>
-using std::map;
-
-int main() {
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/sdkroot/test.gyp b/deps/npm/node_modules/node-gyp/gyp/test/mac/sdkroot/test.gyp
deleted file mode 100644
index 3049d8493..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/sdkroot/test.gyp
+++ /dev/null
@@ -1,21 +0,0 @@
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-{
- 'targets': [
- {
- 'target_name': 'mytarget',
- 'type': 'executable',
- 'sources': [ 'file.cc', ],
- 'xcode_settings': {
- 'SDKROOT': 'macosx10.6',
- },
- 'postbuilds': [
- {
- 'postbuild_name': 'envtest',
- 'action': [ './test_shorthand.sh', ],
- },
- ],
- },
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/sdkroot/test_shorthand.sh b/deps/npm/node_modules/node-gyp/gyp/test/mac/sdkroot/test_shorthand.sh
deleted file mode 100755
index e8fb38ac1..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/sdkroot/test_shorthand.sh
+++ /dev/null
@@ -1,8 +0,0 @@
-#!/bin/bash
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-set -e
-
-test $SDKROOT = /Developer/SDKs/MacOSX10.6.sdk
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/sourceless-module/empty.c b/deps/npm/node_modules/node-gyp/gyp/test/mac/sourceless-module/empty.c
deleted file mode 100644
index 237c8ce18..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/sourceless-module/empty.c
+++ /dev/null
@@ -1 +0,0 @@
-int main() {}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/sourceless-module/test.gyp b/deps/npm/node_modules/node-gyp/gyp/test/mac/sourceless-module/test.gyp
deleted file mode 100644
index 49dc2af9c..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/sourceless-module/test.gyp
+++ /dev/null
@@ -1,39 +0,0 @@
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-{
- 'targets': [
- {
- 'target_name': 'empty_bundle',
- 'type': 'loadable_module',
- 'mac_bundle': 1,
- },
- {
- 'target_name': 'resource_bundle',
- 'type': 'loadable_module',
- 'mac_bundle': 1,
- 'actions': [
- {
- 'action_name': 'Add Resource',
- 'inputs': [],
- 'outputs': [
- '<(INTERMEDIATE_DIR)/app_manifest/foo.manifest',
- ],
- 'action': [
- 'touch', '<(INTERMEDIATE_DIR)/app_manifest/foo.manifest',
- ],
- 'process_outputs_as_mac_bundle_resources': 1,
- },
- ],
- },
- {
- 'target_name': 'dependent_on_resource_bundle',
- 'type': 'executable',
- 'sources': [ 'empty.c' ],
- 'dependencies': [
- 'resource_bundle',
- ],
- },
- ],
-}
-
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/strip/file.c b/deps/npm/node_modules/node-gyp/gyp/test/mac/strip/file.c
deleted file mode 100644
index 421f0405f..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/strip/file.c
+++ /dev/null
@@ -1,9 +0,0 @@
-// Copyright (c) 2011 Google Inc. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-static void the_static_function() {}
-
-void the_function() {
- the_static_function();
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/strip/strip.saves b/deps/npm/node_modules/node-gyp/gyp/test/mac/strip/strip.saves
deleted file mode 100644
index b60ca6285..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/strip/strip.saves
+++ /dev/null
@@ -1,5 +0,0 @@
-# Copyright (c) 2011 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-# This file would list symbols that should not be stripped.
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/strip/subdirectory/nested_file.c b/deps/npm/node_modules/node-gyp/gyp/test/mac/strip/subdirectory/nested_file.c
deleted file mode 100644
index 50daa6c13..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/strip/subdirectory/nested_file.c
+++ /dev/null
@@ -1 +0,0 @@
-void nested_f() {}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/strip/subdirectory/nested_strip.saves b/deps/npm/node_modules/node-gyp/gyp/test/mac/strip/subdirectory/nested_strip.saves
deleted file mode 100644
index d434c0ef4..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/strip/subdirectory/nested_strip.saves
+++ /dev/null
@@ -1,5 +0,0 @@
-# Copyright (c) 2012 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-# This file would list symbols that should not be stripped.
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/strip/subdirectory/subdirectory.gyp b/deps/npm/node_modules/node-gyp/gyp/test/mac/strip/subdirectory/subdirectory.gyp
deleted file mode 100644
index 5d0d19091..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/strip/subdirectory/subdirectory.gyp
+++ /dev/null
@@ -1,38 +0,0 @@
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-{
- 'targets': [
- {
- 'target_name': 'nested_strip_save',
- 'type': 'shared_library',
- 'sources': [ 'nested_file.c', ],
- 'xcode_settings': {
- 'DEPLOYMENT_POSTPROCESSING': 'YES',
- 'STRIP_INSTALLED_PRODUCT': 'YES',
- 'STRIPFLAGS': '-s $(CHROMIUM_STRIP_SAVE_FILE)',
- 'CHROMIUM_STRIP_SAVE_FILE': 'nested_strip.saves',
- },
- },
- {
- 'target_name': 'nested_strip_save_postbuild',
- 'type': 'shared_library',
- 'sources': [ 'nested_file.c', ],
- 'xcode_settings': {
- 'DEPLOYMENT_POSTPROCESSING': 'YES',
- 'STRIP_INSTALLED_PRODUCT': 'YES',
- 'STRIPFLAGS': '-s $(CHROMIUM_STRIP_SAVE_FILE)',
- 'CHROMIUM_STRIP_SAVE_FILE': 'nested_strip.saves',
- },
- 'postbuilds': [
- {
- 'postbuild_name': 'Action that reads CHROMIUM_STRIP_SAVE_FILE',
- 'action': [
- './test_reading_save_file_from_postbuild.sh',
- ],
- },
- ],
- },
- ],
-}
-
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/strip/subdirectory/test_reading_save_file_from_postbuild.sh b/deps/npm/node_modules/node-gyp/gyp/test/mac/strip/subdirectory/test_reading_save_file_from_postbuild.sh
deleted file mode 100755
index 976943680..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/strip/subdirectory/test_reading_save_file_from_postbuild.sh
+++ /dev/null
@@ -1,5 +0,0 @@
-#!/bin/bash
-
-set -e
-
-test -f ${CHROMIUM_STRIP_SAVE_FILE}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/strip/test.gyp b/deps/npm/node_modules/node-gyp/gyp/test/mac/strip/test.gyp
deleted file mode 100644
index 2558aa91b..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/strip/test.gyp
+++ /dev/null
@@ -1,119 +0,0 @@
-# Copyright (c) 2011 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-# These xcode_settings affect stripping:
-# "Deployment postprocessing involves stripping the binary, and setting
-# its file mode, owner, and group."
-#'DEPLOYMENT_POSTPROCESSING': 'YES',
-
-# "Specifies whether to strip symbol information from the binary.
-# Prerequisite: $DEPLOYMENT_POSTPROCESSING = YES" "Default Value: 'NO'"
-#'STRIP_INSTALLED_PRODUCT': 'YES',
-
-# "Values:
-# * all: Strips the binary completely, removing the symbol table and
-# relocation information
-# * non-global: Strips nonglobal symbols but saves external symbols.
-# * debugging: Strips debugging symbols but saves local and global
-# symbols."
-# (maps to no flag, -x, -S in that order)
-#'STRIP_STYLE': 'non-global',
-
-# "Additional strip flags"
-#'STRIPFLAGS': '-c',
-
-# "YES: Copied binaries are stripped of debugging symbols. This does
-# not cause the binary produced by the linker to be stripped. Use
-# 'STRIP_INSTALLED_PRODUCT (Strip Linked Product)' to have the linker
-# strip the binary."
-#'COPY_PHASE_STRIP': 'NO',
-{
- 'targets': [
- {
- 'target_name': 'no_postprocess',
- 'type': 'shared_library',
- 'sources': [ 'file.c', ],
- 'xcode_settings': {
- 'DEPLOYMENT_POSTPROCESSING': 'NO',
- 'STRIP_INSTALLED_PRODUCT': 'YES',
- },
- },
- {
- 'target_name': 'no_strip',
- 'type': 'shared_library',
- 'sources': [ 'file.c', ],
- 'xcode_settings': {
- 'DEPLOYMENT_POSTPROCESSING': 'YES',
- 'STRIP_INSTALLED_PRODUCT': 'NO',
- },
- },
- {
- 'target_name': 'strip_all',
- 'type': 'shared_library',
- 'sources': [ 'file.c', ],
- 'xcode_settings': {
- 'DEPLOYMENT_POSTPROCESSING': 'YES',
- 'STRIP_INSTALLED_PRODUCT': 'YES',
- 'STRIP_STYLE': 'all',
- },
- },
- {
- 'target_name': 'strip_nonglobal',
- 'type': 'shared_library',
- 'sources': [ 'file.c', ],
- 'xcode_settings': {
- 'DEPLOYMENT_POSTPROCESSING': 'YES',
- 'STRIP_INSTALLED_PRODUCT': 'YES',
- 'STRIP_STYLE': 'non-global',
- },
- },
- {
- 'target_name': 'strip_debugging',
- 'type': 'shared_library',
- 'sources': [ 'file.c', ],
- 'xcode_settings': {
- 'DEPLOYMENT_POSTPROCESSING': 'YES',
- 'STRIP_INSTALLED_PRODUCT': 'YES',
- 'STRIP_STYLE': 'debugging',
- },
- },
- {
- 'target_name': 'strip_all_custom_flags',
- 'type': 'shared_library',
- 'sources': [ 'file.c', ],
- 'xcode_settings': {
- 'DEPLOYMENT_POSTPROCESSING': 'YES',
- 'STRIP_INSTALLED_PRODUCT': 'YES',
- 'STRIP_STYLE': 'all',
- 'STRIPFLAGS': '-c',
- },
- },
- {
- 'target_name': 'strip_all_bundle',
- 'type': 'shared_library',
- 'mac_bundle': '1',
- 'sources': [ 'file.c', ],
- 'xcode_settings': {
- 'DEPLOYMENT_POSTPROCESSING': 'YES',
- 'STRIP_INSTALLED_PRODUCT': 'YES',
- 'STRIP_STYLE': 'all',
- },
- },
- {
- 'target_name': 'strip_save',
- 'type': 'shared_library',
- 'sources': [ 'file.c', ],
- 'dependencies': [
- 'subdirectory/subdirectory.gyp:nested_strip_save',
- 'subdirectory/subdirectory.gyp:nested_strip_save_postbuild',
- ],
- 'xcode_settings': {
- 'DEPLOYMENT_POSTPROCESSING': 'YES',
- 'STRIP_INSTALLED_PRODUCT': 'YES',
- 'STRIPFLAGS': '-s $(CHROMIUM_STRIP_SAVE_FILE)',
- 'CHROMIUM_STRIP_SAVE_FILE': 'strip.saves',
- },
- },
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/type_envvars/file.c b/deps/npm/node_modules/node-gyp/gyp/test/mac/type_envvars/file.c
deleted file mode 100644
index 9cddaf1b0..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/type_envvars/file.c
+++ /dev/null
@@ -1,6 +0,0 @@
-// Copyright (c) 2011 Google Inc. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-void f() {}
-int main() {}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/type_envvars/test.gyp b/deps/npm/node_modules/node-gyp/gyp/test/mac/type_envvars/test.gyp
deleted file mode 100644
index 465670056..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/type_envvars/test.gyp
+++ /dev/null
@@ -1,100 +0,0 @@
-# Copyright (c) 2011 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-{
- 'targets': [
- {
- 'target_name': 'my_app',
- 'product_name': 'My App',
- 'type': 'executable',
- 'mac_bundle': 1,
- 'sources': [ 'file.c', ],
- 'postbuilds': [
- {
- 'postbuild_name': 'envtest',
- 'action': [ './test_bundle_executable.sh', ],
- },
- ],
- },
- {
- 'target_name': 'bundle_loadable_module',
- 'type': 'loadable_module',
- 'mac_bundle': 1,
- 'sources': [ 'file.c', ],
- 'postbuilds': [
- {
- 'postbuild_name': 'envtest',
- 'action': [ './test_bundle_loadable_module.sh', ],
- },
- ],
- },
- {
- 'target_name': 'bundle_shared_library',
- 'type': 'shared_library',
- 'mac_bundle': 1,
- 'sources': [ 'file.c', ],
- 'postbuilds': [
- {
- 'postbuild_name': 'envtest',
- 'action': [ './test_bundle_shared_library.sh', ],
- },
- ],
- },
- # Types 'static_library' and 'none' can't exist as bundles.
-
- {
- 'target_name': 'nonbundle_executable',
- 'type': 'executable',
- 'sources': [ 'file.c', ],
- 'postbuilds': [
- {
- 'postbuild_name': 'envtest',
- 'action': [ './test_nonbundle_executable.sh', ],
- },
- ],
- },
- {
- 'target_name': 'nonbundle_loadable_module',
- 'type': 'loadable_module',
- 'sources': [ 'file.c', ],
- 'postbuilds': [
- {
- 'postbuild_name': 'envtest',
- 'action': [ './test_nonbundle_loadable_module.sh', ],
- },
- ],
- },
- {
- 'target_name': 'nonbundle_shared_library',
- 'type': 'shared_library',
- 'sources': [ 'file.c', ],
- 'postbuilds': [
- {
- 'postbuild_name': 'envtest',
- 'action': [ './test_nonbundle_shared_library.sh', ],
- },
- ],
- },
- {
- 'target_name': 'nonbundle_static_library',
- 'type': 'static_library',
- 'sources': [ 'file.c', ],
- 'postbuilds': [
- {
- 'postbuild_name': 'envtest',
- 'action': [ './test_nonbundle_static_library.sh', ],
- },
- ],
- },
- {
- 'target_name': 'nonbundle_none',
- 'type': 'none',
- 'postbuilds': [
- {
- 'postbuild_name': 'envtest',
- 'action': [ './test_nonbundle_none.sh', ],
- },
- ],
- },
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/type_envvars/test_bundle_executable.sh b/deps/npm/node_modules/node-gyp/gyp/test/mac/type_envvars/test_bundle_executable.sh
deleted file mode 100755
index c66ce28f2..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/type_envvars/test_bundle_executable.sh
+++ /dev/null
@@ -1,21 +0,0 @@
-#!/bin/bash
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-set -e
-
-test $MACH_O_TYPE = mh_execute
-test $PRODUCT_TYPE = com.apple.product-type.application
-test "${PRODUCT_NAME}" = "My App"
-test "${FULL_PRODUCT_NAME}" = "My App.app"
-
-test "${EXECUTABLE_NAME}" = "My App"
-test "${EXECUTABLE_PATH}" = "My App.app/Contents/MacOS/My App"
-test "${WRAPPER_NAME}" = "My App.app"
-
-[[ ! $DYLIB_INSTALL_NAME_BASE && ${DYLIB_INSTALL_NAME_BASE-_} ]]
-[[ ! $LD_DYLIB_INSTALL_NAME && ${LD_DYLIB_INSTALL_NAME-_} ]]
-
-# Should be set, but empty.
-[[ ! $SDKROOT && ! ${SDKROOT-_} ]]
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/type_envvars/test_bundle_loadable_module.sh b/deps/npm/node_modules/node-gyp/gyp/test/mac/type_envvars/test_bundle_loadable_module.sh
deleted file mode 100755
index 79c11c0fe..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/type_envvars/test_bundle_loadable_module.sh
+++ /dev/null
@@ -1,22 +0,0 @@
-#!/bin/bash
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-set -e
-
-test $MACH_O_TYPE = mh_bundle
-test $PRODUCT_TYPE = com.apple.product-type.bundle
-test $PRODUCT_NAME = bundle_loadable_module
-test $FULL_PRODUCT_NAME = bundle_loadable_module.bundle
-
-test $EXECUTABLE_NAME = bundle_loadable_module
-test $EXECUTABLE_PATH = \
- "bundle_loadable_module.bundle/Contents/MacOS/bundle_loadable_module"
-test $WRAPPER_NAME = bundle_loadable_module.bundle
-
-[[ ! $DYLIB_INSTALL_NAME_BASE && ${DYLIB_INSTALL_NAME_BASE-_} ]]
-[[ ! $LD_DYLIB_INSTALL_NAME && ${LD_DYLIB_INSTALL_NAME-_} ]]
-
-# Should be set, but empty.
-[[ ! $SDKROOT && ! ${SDKROOT-_} ]]
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/type_envvars/test_bundle_shared_library.sh b/deps/npm/node_modules/node-gyp/gyp/test/mac/type_envvars/test_bundle_shared_library.sh
deleted file mode 100755
index 9980327e8..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/type_envvars/test_bundle_shared_library.sh
+++ /dev/null
@@ -1,23 +0,0 @@
-#!/bin/bash
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-set -e
-
-test $MACH_O_TYPE = mh_dylib
-test $PRODUCT_TYPE = com.apple.product-type.framework
-test $PRODUCT_NAME = bundle_shared_library
-test $FULL_PRODUCT_NAME = bundle_shared_library.framework
-
-test $EXECUTABLE_NAME = bundle_shared_library
-test $EXECUTABLE_PATH = \
- "bundle_shared_library.framework/Versions/A/bundle_shared_library"
-test $WRAPPER_NAME = bundle_shared_library.framework
-
-test $DYLIB_INSTALL_NAME_BASE = "/Library/Frameworks"
-test $LD_DYLIB_INSTALL_NAME = \
- "/Library/Frameworks/bundle_shared_library.framework/Versions/A/bundle_shared_library"
-
-# Should be set, but empty.
-[[ ! $SDKROOT && ! ${SDKROOT-_} ]]
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/type_envvars/test_nonbundle_executable.sh b/deps/npm/node_modules/node-gyp/gyp/test/mac/type_envvars/test_nonbundle_executable.sh
deleted file mode 100755
index 5758595d8..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/type_envvars/test_nonbundle_executable.sh
+++ /dev/null
@@ -1,22 +0,0 @@
-#!/bin/bash
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-set -e
-# For some reason, Xcode doesn't set MACH_O_TYPE for non-bundle executables.
-# Check for "not set", not just "empty":
-[[ ! $MACH_O_TYPE && ${MACH_O_TYPE-_} ]]
-test $PRODUCT_TYPE = com.apple.product-type.tool
-test $PRODUCT_NAME = nonbundle_executable
-test $FULL_PRODUCT_NAME = nonbundle_executable
-
-test $EXECUTABLE_NAME = nonbundle_executable
-test $EXECUTABLE_PATH = nonbundle_executable
-[[ ! $WRAPPER_NAME && ${WRAPPER_NAME-_} ]]
-
-[[ ! $DYLIB_INSTALL_NAME_BASE && ${DYLIB_INSTALL_NAME_BASE-_} ]]
-[[ ! $LD_DYLIB_INSTALL_NAME && ${LD_DYLIB_INSTALL_NAME-_} ]]
-
-# Should be set, but empty.
-[[ ! $SDKROOT && ! ${SDKROOT-_} ]]
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/type_envvars/test_nonbundle_loadable_module.sh b/deps/npm/node_modules/node-gyp/gyp/test/mac/type_envvars/test_nonbundle_loadable_module.sh
deleted file mode 100755
index 6a668177f..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/type_envvars/test_nonbundle_loadable_module.sh
+++ /dev/null
@@ -1,21 +0,0 @@
-#!/bin/bash
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-set -e
-
-test $MACH_O_TYPE = mh_bundle
-test $PRODUCT_TYPE = com.apple.product-type.library.dynamic
-test $PRODUCT_NAME = nonbundle_loadable_module
-test $FULL_PRODUCT_NAME = nonbundle_loadable_module.so
-
-test $EXECUTABLE_NAME = nonbundle_loadable_module.so
-test $EXECUTABLE_PATH = nonbundle_loadable_module.so
-[[ ! $WRAPPER_NAME && ${WRAPPER_NAME-_} ]]
-
-test $DYLIB_INSTALL_NAME_BASE = "/usr/local/lib"
-test $LD_DYLIB_INSTALL_NAME = "/usr/local/lib/nonbundle_loadable_module.so"
-
-# Should be set, but empty.
-[[ ! $SDKROOT && ! ${SDKROOT-_} ]]
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/type_envvars/test_nonbundle_none.sh b/deps/npm/node_modules/node-gyp/gyp/test/mac/type_envvars/test_nonbundle_none.sh
deleted file mode 100755
index a901b9897..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/type_envvars/test_nonbundle_none.sh
+++ /dev/null
@@ -1,22 +0,0 @@
-#!/bin/bash
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-set -e
-
-# Check for "not set", not just "empty":
-[[ ! $MACH_O_TYPE && ${MACH_O_TYPE-_} ]]
-[[ ! $PRODUCT_TYPE && ${PRODUCT_TYPE-_} ]]
-test $PRODUCT_NAME = nonbundle_none
-[[ ! $FULL_PRODUCT_NAME && ${FULL_PRODUCT_NAME-_} ]]
-
-[[ ! $EXECUTABLE_NAME && ${EXECUTABLE_NAME-_} ]]
-[[ ! $EXECUTABLE_PATH && ${EXECUTABLE_PATH-_} ]]
-[[ ! $WRAPPER_NAME && ${WRAPPER_NAME-_} ]]
-
-[[ ! $DYLIB_INSTALL_NAME_BASE && ${DYLIB_INSTALL_NAME_BASE-_} ]]
-[[ ! $LD_DYLIB_INSTALL_NAME && ${LD_DYLIB_INSTALL_NAME-_} ]]
-
-# Should be set, but empty.
-[[ ! $SDKROOT && ! ${SDKROOT-_} ]]
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/type_envvars/test_nonbundle_shared_library.sh b/deps/npm/node_modules/node-gyp/gyp/test/mac/type_envvars/test_nonbundle_shared_library.sh
deleted file mode 100755
index d721047fb..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/type_envvars/test_nonbundle_shared_library.sh
+++ /dev/null
@@ -1,21 +0,0 @@
-#!/bin/bash
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-set -e
-
-test $MACH_O_TYPE = mh_dylib
-test $PRODUCT_TYPE = com.apple.product-type.library.dynamic
-test $PRODUCT_NAME = nonbundle_shared_library
-test $FULL_PRODUCT_NAME = libnonbundle_shared_library.dylib
-
-test $EXECUTABLE_NAME = libnonbundle_shared_library.dylib
-test $EXECUTABLE_PATH = libnonbundle_shared_library.dylib
-[[ ! $WRAPPER_NAME && ${WRAPPER_NAME-_} ]]
-
-test $DYLIB_INSTALL_NAME_BASE = "/usr/local/lib"
-test $LD_DYLIB_INSTALL_NAME = "/usr/local/lib/libnonbundle_shared_library.dylib"
-
-# Should be set, but empty.
-[[ ! $SDKROOT && ! ${SDKROOT-_} ]]
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/type_envvars/test_nonbundle_static_library.sh b/deps/npm/node_modules/node-gyp/gyp/test/mac/type_envvars/test_nonbundle_static_library.sh
deleted file mode 100755
index 39e4c8c6d..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/type_envvars/test_nonbundle_static_library.sh
+++ /dev/null
@@ -1,21 +0,0 @@
-#!/bin/bash
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-set -e
-
-test $MACH_O_TYPE = staticlib
-test $PRODUCT_TYPE = com.apple.product-type.library.static
-test $PRODUCT_NAME = nonbundle_static_library
-test $FULL_PRODUCT_NAME = libnonbundle_static_library.a
-
-test $EXECUTABLE_NAME = libnonbundle_static_library.a
-test $EXECUTABLE_PATH = libnonbundle_static_library.a
-[[ ! $WRAPPER_NAME && ${WRAPPER_NAME-_} ]]
-
-[[ ! $DYLIB_INSTALL_NAME_BASE && ${DYLIB_INSTALL_NAME_BASE-_} ]]
-[[ ! $LD_DYLIB_INSTALL_NAME && ${LD_DYLIB_INSTALL_NAME-_} ]]
-
-# Should be set, but empty.
-[[ ! $SDKROOT && ! ${SDKROOT-_} ]]
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/xcode-env-order/Info.plist b/deps/npm/node_modules/node-gyp/gyp/test/mac/xcode-env-order/Info.plist
deleted file mode 100644
index e11f21e52..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/xcode-env-order/Info.plist
+++ /dev/null
@@ -1,56 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
- <key>CFBundleDevelopmentRegion</key>
- <string>English</string>
- <key>CFBundleExecutable</key>
- <string>${EXECUTABLE_NAME}</string>
- <key>CFBundleIconFile</key>
- <string></string>
- <key>CFBundleIdentifier</key>
- <string>com.google.${PRODUCT_NAME}</string>
- <key>CFBundleInfoDictionaryVersion</key>
- <string>6.0</string>
- <key>CFBundleName</key>
- <string>${PRODUCT_NAME}</string>
- <key>CFBundlePackageType</key>
- <string>APPL</string>
- <key>CFBundleShortVersionString</key>
- <string>1.0</string>
- <key>CFBundleSignature</key>
- <string>????</string>
- <key>CFBundleVersion</key>
- <string>1</string>
- <key>LSMinimumSystemVersion</key>
- <string>${MACOSX_DEPLOYMENT_TARGET}</string>
- <key>NSMainNibFile</key>
- <string>MainMenu</string>
- <key>NSPrincipalClass</key>
- <string>NSApplication</string>
-
- <key>BraceProcessedKey1</key>
- <string>${BRACE_DEPENDENT_KEY1}</string>
- <key>BraceProcessedKey2</key>
- <string>${BRACE_DEPENDENT_KEY2}</string>
- <key>BraceProcessedKey3</key>
- <string>${BRACE_DEPENDENT_KEY3}</string>
-
- <key>ParenProcessedKey1</key>
- <string>${PAREN_DEPENDENT_KEY1}</string>
- <key>ParenProcessedKey2</key>
- <string>${PAREN_DEPENDENT_KEY2}</string>
- <key>ParenProcessedKey3</key>
- <string>${PAREN_DEPENDENT_KEY3}</string>
-
- <key>BareProcessedKey1</key>
- <string>${BARE_DEPENDENT_KEY1}</string>
- <key>BareProcessedKey2</key>
- <string>${BARE_DEPENDENT_KEY2}</string>
- <key>BareProcessedKey3</key>
- <string>${BARE_DEPENDENT_KEY3}</string>
-
- <key>MixedProcessedKey</key>
- <string>${MIXED_DEPENDENT_KEY}</string>
-</dict>
-</plist>
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/xcode-env-order/file.ext1 b/deps/npm/node_modules/node-gyp/gyp/test/mac/xcode-env-order/file.ext1
deleted file mode 100644
index e69de29bb..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/xcode-env-order/file.ext1
+++ /dev/null
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/xcode-env-order/file.ext2 b/deps/npm/node_modules/node-gyp/gyp/test/mac/xcode-env-order/file.ext2
deleted file mode 100644
index e69de29bb..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/xcode-env-order/file.ext2
+++ /dev/null
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/xcode-env-order/file.ext3 b/deps/npm/node_modules/node-gyp/gyp/test/mac/xcode-env-order/file.ext3
deleted file mode 100644
index e69de29bb..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/xcode-env-order/file.ext3
+++ /dev/null
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/xcode-env-order/main.c b/deps/npm/node_modules/node-gyp/gyp/test/mac/xcode-env-order/main.c
deleted file mode 100644
index 1bf4b2a11..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/xcode-env-order/main.c
+++ /dev/null
@@ -1,7 +0,0 @@
-// Copyright (c) 2011 Google Inc. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-int main() {
- return 0;
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/xcode-env-order/test.gyp b/deps/npm/node_modules/node-gyp/gyp/test/mac/xcode-env-order/test.gyp
deleted file mode 100644
index 8f975f7d6..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/xcode-env-order/test.gyp
+++ /dev/null
@@ -1,121 +0,0 @@
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-{
- 'targets': [
- {
- 'target_name': 'test_app',
- 'product_name': 'Test',
- 'type': 'executable',
- 'mac_bundle': 1,
- 'sources': [
- 'main.c',
- 'file.ext1',
- 'file.ext2',
- 'file.ext3',
- ],
- # Env vars in copies.
- 'copies': [
- {
- 'destination': '<(PRODUCT_DIR)/${PRODUCT_NAME}-copy-brace',
- 'files': [ 'main.c', ], # ${SOURCE_ROOT} doesn't work with xcode
- },
- {
- 'destination': '<(PRODUCT_DIR)/$(PRODUCT_NAME)-copy-paren',
- 'files': [ '$(SOURCE_ROOT)/main.c', ],
- },
- {
- 'destination': '<(PRODUCT_DIR)/$PRODUCT_NAME-copy-bare',
- 'files': [ 'main.c', ], # $SOURCE_ROOT doesn't work with xcode
- },
- ],
- # Env vars in actions. The $FOO's are here to test that env vars that
- # aren't defined are handled in some way that doesn't break the build.
- 'actions': [
- {
- 'action_name': 'Action copy braces ${PRODUCT_NAME} ${FOO}',
- 'description': 'Action copy braces ${PRODUCT_NAME} ${FOO}',
- 'inputs': [ '${SOURCE_ROOT}/main.c' ],
- # Referencing ${PRODUCT_NAME} in action outputs doesn't work with
- # the Xcode generator (PRODUCT_NAME expands to "Test Support").
- 'outputs': [ '<(PRODUCT_DIR)/action-copy-brace.txt' ],
- 'action': [ 'cp', '${SOURCE_ROOT}/main.c',
- '<(PRODUCT_DIR)/action-copy-brace.txt' ],
- },
- {
- 'action_name': 'Action copy parens $(PRODUCT_NAME) $(FOO)',
- 'description': 'Action copy parens $(PRODUCT_NAME) $(FOO)',
- 'inputs': [ '$(SOURCE_ROOT)/main.c' ],
- # Referencing $(PRODUCT_NAME) in action outputs doesn't work with
- # the Xcode generator (PRODUCT_NAME expands to "Test Support").
- 'outputs': [ '<(PRODUCT_DIR)/action-copy-paren.txt' ],
- 'action': [ 'cp', '$(SOURCE_ROOT)/main.c',
- '<(PRODUCT_DIR)/action-copy-paren.txt' ],
- },
- {
- 'action_name': 'Action copy bare $PRODUCT_NAME $FOO',
- 'description': 'Action copy bare $PRODUCT_NAME $FOO',
- 'inputs': [ '$SOURCE_ROOT/main.c' ],
- # Referencing $PRODUCT_NAME in action outputs doesn't work with
- # the Xcode generator (PRODUCT_NAME expands to "Test Support").
- 'outputs': [ '<(PRODUCT_DIR)/action-copy-bare.txt' ],
- 'action': [ 'cp', '$SOURCE_ROOT/main.c',
- '<(PRODUCT_DIR)/action-copy-bare.txt' ],
- },
- ],
- # Env vars in xcode_settings.
- 'xcode_settings': {
- 'INFOPLIST_FILE': 'Info.plist',
- 'STRING_KEY': '/Source/Project',
-
- 'BRACE_DEPENDENT_KEY2': '${STRING_KEY}/${PRODUCT_NAME}',
- 'BRACE_DEPENDENT_KEY1': 'D:${BRACE_DEPENDENT_KEY2}',
- 'BRACE_DEPENDENT_KEY3': '${PRODUCT_TYPE}:${BRACE_DEPENDENT_KEY1}',
-
- 'PAREN_DEPENDENT_KEY2': '$(STRING_KEY)/$(PRODUCT_NAME)',
- 'PAREN_DEPENDENT_KEY1': 'D:$(PAREN_DEPENDENT_KEY2)',
- 'PAREN_DEPENDENT_KEY3': '$(PRODUCT_TYPE):$(PAREN_DEPENDENT_KEY1)',
-
- 'BARE_DEPENDENT_KEY2': '$STRING_KEY/$PRODUCT_NAME',
- 'BARE_DEPENDENT_KEY1': 'D:$BARE_DEPENDENT_KEY2',
- 'BARE_DEPENDENT_KEY3': '$PRODUCT_TYPE:$BARE_DEPENDENT_KEY1',
-
- 'MIXED_DEPENDENT_KEY': '${STRING_KEY}:$(PRODUCT_NAME):$MACH_O_TYPE',
- },
- # Env vars in rules. The $FOO's are here to test that env vars that
- # aren't defined are handled in some way that doesn't break the build.
- 'rules': [
- {
- 'rule_name': 'brace_rule',
- 'message': 'Rule braces ${PRODUCT_NAME} ${FOO} <(RULE_INPUT_NAME)',
- 'extension': 'ext1',
- 'inputs': [ '${SOURCE_ROOT}/main.c' ],
- 'outputs': [ '<(PRODUCT_DIR)/rule-copy-brace.txt' ],
- 'action': [ 'cp', '${SOURCE_ROOT}/main.c',
- '<(PRODUCT_DIR)/rule-copy-brace.txt' ],
- },
- {
- 'rule_name': 'paren_rule',
- 'message': 'Rule parens $(PRODUCT_NAME) $(FOO) <(RULE_INPUT_NAME)',
- 'extension': 'ext2',
- 'inputs': [ '$(SOURCE_ROOT)/main.c' ],
- 'outputs': [ '<(PRODUCT_DIR)/rule-copy-paren.txt' ],
- 'action': [ 'cp', '$(SOURCE_ROOT)/main.c',
- '<(PRODUCT_DIR)/rule-copy-paren.txt' ],
- },
- # TODO: Fails in xcode. Looks like a bug in the xcode generator though
- # (which uses makefiles for rules, and thinks $PRODUCT_NAME is
- # $(P)RODUCT_NAME).
- #{
- # 'rule_name': 'bare_rule',
- # 'message': 'Rule copy bare $PRODUCT_NAME $FOO',
- # 'extension': 'ext3',
- # 'inputs': [ '$SOURCE_ROOT/main.c' ],
- # 'outputs': [ '<(PRODUCT_DIR)/rule-copy-bare.txt' ],
- # 'action': [ 'cp', '$SOURCE_ROOT/main.c',
- # '<(PRODUCT_DIR)/rule-copy-bare.txt' ],
- #},
- ],
- },
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/xcode-gcc/test.gyp b/deps/npm/node_modules/node-gyp/gyp/test/mac/xcode-gcc/test.gyp
deleted file mode 100644
index 1ca8b215d..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/xcode-gcc/test.gyp
+++ /dev/null
@@ -1,60 +0,0 @@
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-{
- 'target_defaults': {
- 'xcode_settings': {
- 'GCC_TREAT_WARNINGS_AS_ERRORS': 'YES',
- },
- },
-
- 'variables': {
- # Non-failing tests should check that these trivial files in every language
- # still compile correctly.
- 'valid_sources': [
- 'valid_c.c',
- 'valid_cc.cc',
- 'valid_m.m',
- 'valid_mm.mm',
- ],
- },
-
- # Targets come in pairs: 'foo' and 'foo-fail', with the former building with
- # no warnings and the latter not.
- 'targets': [
- # GCC_WARN_ABOUT_INVALID_OFFSETOF_MACRO (default: YES):
- {
- 'target_name': 'warn_about_invalid_offsetof_macro',
- 'type': 'executable',
- 'sources': [
- 'warn_about_invalid_offsetof_macro.cc',
- '<@(valid_sources)',
- ],
- 'xcode_settings': {
- 'GCC_WARN_ABOUT_INVALID_OFFSETOF_MACRO': 'NO',
- },
- },
- {
- 'target_name': 'warn_about_invalid_offsetof_macro-fail',
- 'type': 'executable',
- 'sources': [ 'warn_about_invalid_offsetof_macro.cc', ],
- },
- # GCC_WARN_ABOUT_MISSING_NEWLINE (default: NO):
- {
- 'target_name': 'warn_about_missing_newline',
- 'type': 'executable',
- 'sources': [
- 'warn_about_missing_newline.c',
- '<@(valid_sources)',
- ],
- },
- {
- 'target_name': 'warn_about_missing_newline-fail',
- 'type': 'executable',
- 'sources': [ 'warn_about_missing_newline.c', ],
- 'xcode_settings': {
- 'GCC_WARN_ABOUT_MISSING_NEWLINE': 'YES',
- },
- },
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/xcode-gcc/valid_c.c b/deps/npm/node_modules/node-gyp/gyp/test/mac/xcode-gcc/valid_c.c
deleted file mode 100644
index 2b10ac3ed..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/xcode-gcc/valid_c.c
+++ /dev/null
@@ -1,8 +0,0 @@
-// Copyright (c) 2012 Google Inc. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// This file exists to test that valid C files compile correctly.
-
-void FunctionInCFile(void) {
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/xcode-gcc/valid_cc.cc b/deps/npm/node_modules/node-gyp/gyp/test/mac/xcode-gcc/valid_cc.cc
deleted file mode 100644
index 31cddc3c9..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/xcode-gcc/valid_cc.cc
+++ /dev/null
@@ -1,8 +0,0 @@
-// Copyright (c) 2012 Google Inc. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// This file exists to test that valid C++ files compile correctly.
-
-void FunctionInCCFile() {
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/xcode-gcc/valid_m.m b/deps/npm/node_modules/node-gyp/gyp/test/mac/xcode-gcc/valid_m.m
deleted file mode 100644
index 95bddb272..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/xcode-gcc/valid_m.m
+++ /dev/null
@@ -1,8 +0,0 @@
-// Copyright (c) 2012 Google Inc. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// This file exists to test that valid Objective-C files compile correctly.
-
-void FunctionInMFile(void) {
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/xcode-gcc/valid_mm.mm b/deps/npm/node_modules/node-gyp/gyp/test/mac/xcode-gcc/valid_mm.mm
deleted file mode 100644
index a7db7e3ad..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/xcode-gcc/valid_mm.mm
+++ /dev/null
@@ -1,8 +0,0 @@
-// Copyright (c) 2012 Google Inc. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// This file exists to test that valid Objective-C++ files compile correctly.
-
-void FunctionInMMFile() {
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/xcode-gcc/warn_about_invalid_offsetof_macro.cc b/deps/npm/node_modules/node-gyp/gyp/test/mac/xcode-gcc/warn_about_invalid_offsetof_macro.cc
deleted file mode 100644
index 4a4612be0..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/xcode-gcc/warn_about_invalid_offsetof_macro.cc
+++ /dev/null
@@ -1,15 +0,0 @@
-// Copyright (c) 2012 Google Inc. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#define offsetof(st, m) ((unsigned)((char*)&((st*)0)->m - (char*)0))
-
-struct MyStruct {
- virtual void MyFunc() = 0;
- int my_member;
-};
-
-int main() {
- unsigned x = offsetof(MyStruct, my_member);
- return x ? 0 : 1;
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/mac/xcode-gcc/warn_about_missing_newline.c b/deps/npm/node_modules/node-gyp/gyp/test/mac/xcode-gcc/warn_about_missing_newline.c
deleted file mode 100644
index 6faf0895d..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/mac/xcode-gcc/warn_about_missing_newline.c
+++ /dev/null
@@ -1,8 +0,0 @@
-// Copyright (c) 2012 Google Inc. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Important: Don't terminate this file with a newline.
-int main() {
- return 0;
-} \ No newline at end of file
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/make/dependencies.gyp b/deps/npm/node_modules/node-gyp/gyp/test/make/dependencies.gyp
deleted file mode 100644
index e2bee24fc..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/make/dependencies.gyp
+++ /dev/null
@@ -1,15 +0,0 @@
-# Copyright (c) 2009 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'targets': [
- {
- 'target_name': 'main',
- 'type': 'executable',
- 'sources': [
- 'main.cc',
- ],
- },
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/make/gyptest-dependencies.py b/deps/npm/node_modules/node-gyp/gyp/test/make/gyptest-dependencies.py
deleted file mode 100755
index d215f7678..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/make/gyptest-dependencies.py
+++ /dev/null
@@ -1,26 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Verifies that .d files and all.deps are properly generated.
-"""
-
-import TestGyp
-
-# .d files are only used by the make build.
-test = TestGyp.TestGyp(formats=['make'])
-
-test.run_gyp('dependencies.gyp')
-
-test.build('dependencies.gyp', test.ALL)
-
-deps_file = test.built_file_path(".deps/out/Default/obj.target/main/main.o.d")
-test.must_contain(deps_file, "main.h")
-
-# Build a second time to make sure we generate all.deps.
-test.build('dependencies.gyp', test.ALL)
-
-test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/make/gyptest-noload.py b/deps/npm/node_modules/node-gyp/gyp/test/make/gyptest-noload.py
deleted file mode 100755
index 1f5103315..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/make/gyptest-noload.py
+++ /dev/null
@@ -1,57 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2010 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Tests the use of the NO_LOAD flag which makes loading sub .mk files
-optional.
-"""
-
-# Python 2.5 needs this for the with statement.
-from __future__ import with_statement
-
-import os
-import TestGyp
-
-test = TestGyp.TestGyp(formats=['make'])
-
-test.run_gyp('all.gyp', chdir='noload')
-
-test.relocate('noload', 'relocate/noload')
-
-test.build('build/all.gyp', test.ALL, chdir='relocate/noload')
-test.run_built_executable('exe', chdir='relocate/noload',
- stdout='Hello from shared.c.\n')
-
-# Just sanity test that NO_LOAD=lib doesn't break anything.
-test.build('build/all.gyp', test.ALL, chdir='relocate/noload',
- arguments=['NO_LOAD=lib'])
-test.run_built_executable('exe', chdir='relocate/noload',
- stdout='Hello from shared.c.\n')
-test.build('build/all.gyp', test.ALL, chdir='relocate/noload',
- arguments=['NO_LOAD=z'])
-test.run_built_executable('exe', chdir='relocate/noload',
- stdout='Hello from shared.c.\n')
-
-# Make sure we can rebuild without reloading the sub .mk file.
-with open('relocate/noload/main.c', 'a') as src_file:
- src_file.write("\n")
-test.build('build/all.gyp', test.ALL, chdir='relocate/noload',
- arguments=['NO_LOAD=lib'])
-test.run_built_executable('exe', chdir='relocate/noload',
- stdout='Hello from shared.c.\n')
-
-# Change shared.c, but verify that it doesn't get rebuild if we don't load it.
-with open('relocate/noload/lib/shared.c', 'w') as shared_file:
- shared_file.write(
- '#include "shared.h"\n'
- 'const char kSharedStr[] = "modified";\n'
- )
-test.build('build/all.gyp', test.ALL, chdir='relocate/noload',
- arguments=['NO_LOAD=lib'])
-test.run_built_executable('exe', chdir='relocate/noload',
- stdout='Hello from shared.c.\n')
-
-test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/make/main.cc b/deps/npm/node_modules/node-gyp/gyp/test/make/main.cc
deleted file mode 100644
index 70ac6e46a..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/make/main.cc
+++ /dev/null
@@ -1,12 +0,0 @@
-/* Copyright (c) 2009 Google Inc. All rights reserved.
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file. */
-
-#include <stdio.h>
-
-#include "main.h"
-
-int main(int argc, char *argv[]) {
- printf("hello world\n");
- return 0;
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/make/main.h b/deps/npm/node_modules/node-gyp/gyp/test/make/main.h
deleted file mode 100644
index e69de29bb..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/make/main.h
+++ /dev/null
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/make/noload/all.gyp b/deps/npm/node_modules/node-gyp/gyp/test/make/noload/all.gyp
deleted file mode 100644
index 1617a9e97..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/make/noload/all.gyp
+++ /dev/null
@@ -1,18 +0,0 @@
-# Copyright (c) 2010 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'targets': [
- {
- 'target_name': 'exe',
- 'type': 'executable',
- 'sources': [
- 'main.c',
- ],
- 'dependencies': [
- 'lib/shared.gyp:shared',
- ],
- },
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/make/noload/lib/shared.c b/deps/npm/node_modules/node-gyp/gyp/test/make/noload/lib/shared.c
deleted file mode 100644
index 51776c5ac..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/make/noload/lib/shared.c
+++ /dev/null
@@ -1,3 +0,0 @@
-#include "shared.h"
-
-const char kSharedStr[] = "shared.c";
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/make/noload/lib/shared.gyp b/deps/npm/node_modules/node-gyp/gyp/test/make/noload/lib/shared.gyp
deleted file mode 100644
index 8a8841b3a..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/make/noload/lib/shared.gyp
+++ /dev/null
@@ -1,16 +0,0 @@
-# Copyright (c) 2009 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'targets': [
- {
- 'target_name': 'shared',
- 'type': 'shared_library',
- 'sources': [
- 'shared.c',
- 'shared.h',
- ],
- },
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/make/noload/lib/shared.h b/deps/npm/node_modules/node-gyp/gyp/test/make/noload/lib/shared.h
deleted file mode 100644
index a21da7538..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/make/noload/lib/shared.h
+++ /dev/null
@@ -1 +0,0 @@
-extern const char kSharedStr[];
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/make/noload/main.c b/deps/npm/node_modules/node-gyp/gyp/test/make/noload/main.c
deleted file mode 100644
index 46d3c52c2..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/make/noload/main.c
+++ /dev/null
@@ -1,9 +0,0 @@
-#include <stdio.h>
-
-#include "lib/shared.h"
-
-int main(int argc, char *argv[])
-{
- printf("Hello from %s.\n", kSharedStr);
- return 0;
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/many-actions/file0 b/deps/npm/node_modules/node-gyp/gyp/test/many-actions/file0
deleted file mode 100644
index e69de29bb..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/many-actions/file0
+++ /dev/null
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/many-actions/file1 b/deps/npm/node_modules/node-gyp/gyp/test/many-actions/file1
deleted file mode 100644
index e69de29bb..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/many-actions/file1
+++ /dev/null
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/many-actions/file2 b/deps/npm/node_modules/node-gyp/gyp/test/many-actions/file2
deleted file mode 100644
index e69de29bb..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/many-actions/file2
+++ /dev/null
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/many-actions/file3 b/deps/npm/node_modules/node-gyp/gyp/test/many-actions/file3
deleted file mode 100644
index e69de29bb..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/many-actions/file3
+++ /dev/null
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/many-actions/file4 b/deps/npm/node_modules/node-gyp/gyp/test/many-actions/file4
deleted file mode 100644
index e69de29bb..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/many-actions/file4
+++ /dev/null
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/many-actions/gyptest-many-actions-unsorted.py b/deps/npm/node_modules/node-gyp/gyp/test/many-actions/gyptest-many-actions-unsorted.py
deleted file mode 100644
index 5cb033878..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/many-actions/gyptest-many-actions-unsorted.py
+++ /dev/null
@@ -1,34 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Make sure lots of actions in the same target don't cause exceeding command
-line length.
-"""
-
-import TestGyp
-
-test = TestGyp.TestGyp()
-
-test.run_gyp('many-actions-unsorted.gyp')
-test.build('many-actions-unsorted.gyp', test.ALL)
-for i in range(15):
- test.built_file_must_exist('generated_%d.h' % i)
-
-# Make sure the optimized cygwin setup doesn't cause problems for incremental
-# builds.
-test.touch('file1')
-test.build('many-actions-unsorted.gyp', test.ALL)
-
-test.touch('file0')
-test.build('many-actions-unsorted.gyp', test.ALL)
-
-test.touch('file2')
-test.touch('file3')
-test.touch('file4')
-test.build('many-actions-unsorted.gyp', test.ALL)
-
-test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/many-actions/gyptest-many-actions.py b/deps/npm/node_modules/node-gyp/gyp/test/many-actions/gyptest-many-actions.py
deleted file mode 100644
index 9c71641f3..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/many-actions/gyptest-many-actions.py
+++ /dev/null
@@ -1,20 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Make sure lots of actions in the same target don't cause exceeding command
-line length.
-"""
-
-import TestGyp
-
-test = TestGyp.TestGyp()
-
-test.run_gyp('many-actions.gyp')
-test.build('many-actions.gyp', test.ALL)
-for i in range(200):
- test.built_file_must_exist('generated_%d.h' % i)
-test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/many-actions/many-actions-unsorted.gyp b/deps/npm/node_modules/node-gyp/gyp/test/many-actions/many-actions-unsorted.gyp
deleted file mode 100644
index eec79fe8d..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/many-actions/many-actions-unsorted.gyp
+++ /dev/null
@@ -1,154 +0,0 @@
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'target_defaults': {
- 'msvs_cygwin_dirs': ['../../../../<(DEPTH)/third_party/cygwin'],
- },
- 'targets': [
- {
- 'target_name': 'a',
- 'type': 'none',
- 'actions': [
- # Notice that the inputs go 0, 1, ..., 0, 1, .... This is to test
- # a regression in the msvs generator in _AddActions.
- {
- 'action_name': 'do_0',
- 'inputs': ['file0'],
- 'outputs': ['<(PRODUCT_DIR)/generated_0.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_0.h',
- ],
- },
- {
- 'action_name': 'do_1',
- 'inputs': ['file1'],
- 'outputs': ['<(PRODUCT_DIR)/generated_1.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_1.h',
- ],
- },
- {
- 'action_name': 'do_2',
- 'inputs': ['file2'],
- 'outputs': ['<(PRODUCT_DIR)/generated_2.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_2.h',
- ],
- },
- {
- 'action_name': 'do_3',
- 'inputs': ['file3'],
- 'outputs': ['<(PRODUCT_DIR)/generated_3.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_3.h',
- ],
- },
- {
- 'action_name': 'do_4',
- 'inputs': ['file4'],
- 'outputs': ['<(PRODUCT_DIR)/generated_4.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_4.h',
- ],
- },
- {
- 'action_name': 'do_5',
- 'inputs': ['file0'],
- 'outputs': ['<(PRODUCT_DIR)/generated_5.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_5.h',
- ],
- },
- {
- 'action_name': 'do_6',
- 'inputs': ['file1'],
- 'outputs': ['<(PRODUCT_DIR)/generated_6.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_6.h',
- ],
- },
- {
- 'action_name': 'do_7',
- 'inputs': ['file2'],
- 'outputs': ['<(PRODUCT_DIR)/generated_7.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_7.h',
- ],
- },
- {
- 'action_name': 'do_8',
- 'inputs': ['file3'],
- 'outputs': ['<(PRODUCT_DIR)/generated_8.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_8.h',
- ],
- },
- {
- 'action_name': 'do_9',
- 'inputs': ['file4'],
- 'outputs': ['<(PRODUCT_DIR)/generated_9.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_9.h',
- ],
- },
- {
- 'action_name': 'do_10',
- 'inputs': ['file0'],
- 'outputs': ['<(PRODUCT_DIR)/generated_10.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_10.h',
- ],
- },
- {
- 'action_name': 'do_11',
- 'inputs': ['file1'],
- 'outputs': ['<(PRODUCT_DIR)/generated_11.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_11.h',
- ],
- },
- {
- 'action_name': 'do_12',
- 'inputs': ['file2'],
- 'outputs': ['<(PRODUCT_DIR)/generated_12.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_12.h',
- ],
- },
- {
- 'action_name': 'do_13',
- 'inputs': ['file3'],
- 'outputs': ['<(PRODUCT_DIR)/generated_13.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_13.h',
- ],
- },
- {
- 'action_name': 'do_14',
- 'inputs': ['file4'],
- 'outputs': ['<(PRODUCT_DIR)/generated_14.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_14.h',
- ],
- },
- ],
- },
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/many-actions/many-actions.gyp b/deps/npm/node_modules/node-gyp/gyp/test/many-actions/many-actions.gyp
deleted file mode 100644
index 38545d2d8..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/many-actions/many-actions.gyp
+++ /dev/null
@@ -1,1817 +0,0 @@
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'target_defaults': {
- 'msvs_cygwin_dirs': ['../../../../<(DEPTH)/third_party/cygwin'],
- },
- 'targets': [
- {
- 'target_name': 'a',
- 'type': 'none',
- 'actions': [
- {
- 'action_name': 'do_0',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_0.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_0.h',
- ],
- },
- {
- 'action_name': 'do_1',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_1.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_1.h',
- ],
- },
- {
- 'action_name': 'do_2',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_2.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_2.h',
- ],
- },
- {
- 'action_name': 'do_3',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_3.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_3.h',
- ],
- },
- {
- 'action_name': 'do_4',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_4.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_4.h',
- ],
- },
- {
- 'action_name': 'do_5',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_5.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_5.h',
- ],
- },
- {
- 'action_name': 'do_6',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_6.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_6.h',
- ],
- },
- {
- 'action_name': 'do_7',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_7.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_7.h',
- ],
- },
- {
- 'action_name': 'do_8',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_8.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_8.h',
- ],
- },
- {
- 'action_name': 'do_9',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_9.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_9.h',
- ],
- },
- {
- 'action_name': 'do_10',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_10.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_10.h',
- ],
- },
- {
- 'action_name': 'do_11',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_11.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_11.h',
- ],
- },
- {
- 'action_name': 'do_12',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_12.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_12.h',
- ],
- },
- {
- 'action_name': 'do_13',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_13.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_13.h',
- ],
- },
- {
- 'action_name': 'do_14',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_14.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_14.h',
- ],
- },
- {
- 'action_name': 'do_15',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_15.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_15.h',
- ],
- },
- {
- 'action_name': 'do_16',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_16.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_16.h',
- ],
- },
- {
- 'action_name': 'do_17',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_17.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_17.h',
- ],
- },
- {
- 'action_name': 'do_18',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_18.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_18.h',
- ],
- },
- {
- 'action_name': 'do_19',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_19.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_19.h',
- ],
- },
- {
- 'action_name': 'do_20',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_20.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_20.h',
- ],
- },
- {
- 'action_name': 'do_21',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_21.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_21.h',
- ],
- },
- {
- 'action_name': 'do_22',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_22.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_22.h',
- ],
- },
- {
- 'action_name': 'do_23',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_23.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_23.h',
- ],
- },
- {
- 'action_name': 'do_24',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_24.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_24.h',
- ],
- },
- {
- 'action_name': 'do_25',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_25.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_25.h',
- ],
- },
- {
- 'action_name': 'do_26',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_26.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_26.h',
- ],
- },
- {
- 'action_name': 'do_27',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_27.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_27.h',
- ],
- },
- {
- 'action_name': 'do_28',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_28.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_28.h',
- ],
- },
- {
- 'action_name': 'do_29',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_29.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_29.h',
- ],
- },
- {
- 'action_name': 'do_30',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_30.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_30.h',
- ],
- },
- {
- 'action_name': 'do_31',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_31.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_31.h',
- ],
- },
- {
- 'action_name': 'do_32',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_32.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_32.h',
- ],
- },
- {
- 'action_name': 'do_33',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_33.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_33.h',
- ],
- },
- {
- 'action_name': 'do_34',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_34.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_34.h',
- ],
- },
- {
- 'action_name': 'do_35',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_35.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_35.h',
- ],
- },
- {
- 'action_name': 'do_36',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_36.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_36.h',
- ],
- },
- {
- 'action_name': 'do_37',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_37.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_37.h',
- ],
- },
- {
- 'action_name': 'do_38',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_38.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_38.h',
- ],
- },
- {
- 'action_name': 'do_39',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_39.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_39.h',
- ],
- },
- {
- 'action_name': 'do_40',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_40.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_40.h',
- ],
- },
- {
- 'action_name': 'do_41',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_41.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_41.h',
- ],
- },
- {
- 'action_name': 'do_42',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_42.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_42.h',
- ],
- },
- {
- 'action_name': 'do_43',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_43.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_43.h',
- ],
- },
- {
- 'action_name': 'do_44',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_44.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_44.h',
- ],
- },
- {
- 'action_name': 'do_45',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_45.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_45.h',
- ],
- },
- {
- 'action_name': 'do_46',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_46.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_46.h',
- ],
- },
- {
- 'action_name': 'do_47',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_47.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_47.h',
- ],
- },
- {
- 'action_name': 'do_48',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_48.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_48.h',
- ],
- },
- {
- 'action_name': 'do_49',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_49.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_49.h',
- ],
- },
- {
- 'action_name': 'do_50',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_50.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_50.h',
- ],
- },
- {
- 'action_name': 'do_51',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_51.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_51.h',
- ],
- },
- {
- 'action_name': 'do_52',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_52.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_52.h',
- ],
- },
- {
- 'action_name': 'do_53',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_53.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_53.h',
- ],
- },
- {
- 'action_name': 'do_54',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_54.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_54.h',
- ],
- },
- {
- 'action_name': 'do_55',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_55.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_55.h',
- ],
- },
- {
- 'action_name': 'do_56',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_56.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_56.h',
- ],
- },
- {
- 'action_name': 'do_57',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_57.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_57.h',
- ],
- },
- {
- 'action_name': 'do_58',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_58.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_58.h',
- ],
- },
- {
- 'action_name': 'do_59',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_59.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_59.h',
- ],
- },
- {
- 'action_name': 'do_60',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_60.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_60.h',
- ],
- },
- {
- 'action_name': 'do_61',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_61.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_61.h',
- ],
- },
- {
- 'action_name': 'do_62',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_62.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_62.h',
- ],
- },
- {
- 'action_name': 'do_63',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_63.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_63.h',
- ],
- },
- {
- 'action_name': 'do_64',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_64.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_64.h',
- ],
- },
- {
- 'action_name': 'do_65',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_65.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_65.h',
- ],
- },
- {
- 'action_name': 'do_66',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_66.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_66.h',
- ],
- },
- {
- 'action_name': 'do_67',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_67.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_67.h',
- ],
- },
- {
- 'action_name': 'do_68',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_68.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_68.h',
- ],
- },
- {
- 'action_name': 'do_69',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_69.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_69.h',
- ],
- },
- {
- 'action_name': 'do_70',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_70.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_70.h',
- ],
- },
- {
- 'action_name': 'do_71',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_71.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_71.h',
- ],
- },
- {
- 'action_name': 'do_72',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_72.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_72.h',
- ],
- },
- {
- 'action_name': 'do_73',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_73.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_73.h',
- ],
- },
- {
- 'action_name': 'do_74',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_74.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_74.h',
- ],
- },
- {
- 'action_name': 'do_75',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_75.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_75.h',
- ],
- },
- {
- 'action_name': 'do_76',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_76.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_76.h',
- ],
- },
- {
- 'action_name': 'do_77',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_77.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_77.h',
- ],
- },
- {
- 'action_name': 'do_78',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_78.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_78.h',
- ],
- },
- {
- 'action_name': 'do_79',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_79.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_79.h',
- ],
- },
- {
- 'action_name': 'do_80',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_80.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_80.h',
- ],
- },
- {
- 'action_name': 'do_81',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_81.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_81.h',
- ],
- },
- {
- 'action_name': 'do_82',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_82.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_82.h',
- ],
- },
- {
- 'action_name': 'do_83',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_83.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_83.h',
- ],
- },
- {
- 'action_name': 'do_84',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_84.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_84.h',
- ],
- },
- {
- 'action_name': 'do_85',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_85.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_85.h',
- ],
- },
- {
- 'action_name': 'do_86',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_86.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_86.h',
- ],
- },
- {
- 'action_name': 'do_87',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_87.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_87.h',
- ],
- },
- {
- 'action_name': 'do_88',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_88.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_88.h',
- ],
- },
- {
- 'action_name': 'do_89',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_89.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_89.h',
- ],
- },
- {
- 'action_name': 'do_90',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_90.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_90.h',
- ],
- },
- {
- 'action_name': 'do_91',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_91.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_91.h',
- ],
- },
- {
- 'action_name': 'do_92',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_92.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_92.h',
- ],
- },
- {
- 'action_name': 'do_93',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_93.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_93.h',
- ],
- },
- {
- 'action_name': 'do_94',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_94.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_94.h',
- ],
- },
- {
- 'action_name': 'do_95',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_95.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_95.h',
- ],
- },
- {
- 'action_name': 'do_96',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_96.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_96.h',
- ],
- },
- {
- 'action_name': 'do_97',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_97.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_97.h',
- ],
- },
- {
- 'action_name': 'do_98',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_98.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_98.h',
- ],
- },
- {
- 'action_name': 'do_99',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_99.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_99.h',
- ],
- },
- {
- 'action_name': 'do_100',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_100.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_100.h',
- ],
- },
- {
- 'action_name': 'do_101',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_101.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_101.h',
- ],
- },
- {
- 'action_name': 'do_102',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_102.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_102.h',
- ],
- },
- {
- 'action_name': 'do_103',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_103.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_103.h',
- ],
- },
- {
- 'action_name': 'do_104',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_104.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_104.h',
- ],
- },
- {
- 'action_name': 'do_105',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_105.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_105.h',
- ],
- },
- {
- 'action_name': 'do_106',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_106.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_106.h',
- ],
- },
- {
- 'action_name': 'do_107',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_107.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_107.h',
- ],
- },
- {
- 'action_name': 'do_108',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_108.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_108.h',
- ],
- },
- {
- 'action_name': 'do_109',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_109.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_109.h',
- ],
- },
- {
- 'action_name': 'do_110',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_110.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_110.h',
- ],
- },
- {
- 'action_name': 'do_111',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_111.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_111.h',
- ],
- },
- {
- 'action_name': 'do_112',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_112.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_112.h',
- ],
- },
- {
- 'action_name': 'do_113',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_113.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_113.h',
- ],
- },
- {
- 'action_name': 'do_114',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_114.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_114.h',
- ],
- },
- {
- 'action_name': 'do_115',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_115.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_115.h',
- ],
- },
- {
- 'action_name': 'do_116',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_116.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_116.h',
- ],
- },
- {
- 'action_name': 'do_117',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_117.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_117.h',
- ],
- },
- {
- 'action_name': 'do_118',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_118.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_118.h',
- ],
- },
- {
- 'action_name': 'do_119',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_119.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_119.h',
- ],
- },
- {
- 'action_name': 'do_120',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_120.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_120.h',
- ],
- },
- {
- 'action_name': 'do_121',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_121.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_121.h',
- ],
- },
- {
- 'action_name': 'do_122',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_122.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_122.h',
- ],
- },
- {
- 'action_name': 'do_123',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_123.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_123.h',
- ],
- },
- {
- 'action_name': 'do_124',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_124.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_124.h',
- ],
- },
- {
- 'action_name': 'do_125',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_125.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_125.h',
- ],
- },
- {
- 'action_name': 'do_126',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_126.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_126.h',
- ],
- },
- {
- 'action_name': 'do_127',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_127.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_127.h',
- ],
- },
- {
- 'action_name': 'do_128',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_128.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_128.h',
- ],
- },
- {
- 'action_name': 'do_129',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_129.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_129.h',
- ],
- },
- {
- 'action_name': 'do_130',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_130.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_130.h',
- ],
- },
- {
- 'action_name': 'do_131',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_131.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_131.h',
- ],
- },
- {
- 'action_name': 'do_132',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_132.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_132.h',
- ],
- },
- {
- 'action_name': 'do_133',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_133.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_133.h',
- ],
- },
- {
- 'action_name': 'do_134',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_134.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_134.h',
- ],
- },
- {
- 'action_name': 'do_135',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_135.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_135.h',
- ],
- },
- {
- 'action_name': 'do_136',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_136.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_136.h',
- ],
- },
- {
- 'action_name': 'do_137',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_137.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_137.h',
- ],
- },
- {
- 'action_name': 'do_138',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_138.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_138.h',
- ],
- },
- {
- 'action_name': 'do_139',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_139.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_139.h',
- ],
- },
- {
- 'action_name': 'do_140',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_140.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_140.h',
- ],
- },
- {
- 'action_name': 'do_141',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_141.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_141.h',
- ],
- },
- {
- 'action_name': 'do_142',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_142.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_142.h',
- ],
- },
- {
- 'action_name': 'do_143',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_143.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_143.h',
- ],
- },
- {
- 'action_name': 'do_144',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_144.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_144.h',
- ],
- },
- {
- 'action_name': 'do_145',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_145.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_145.h',
- ],
- },
- {
- 'action_name': 'do_146',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_146.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_146.h',
- ],
- },
- {
- 'action_name': 'do_147',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_147.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_147.h',
- ],
- },
- {
- 'action_name': 'do_148',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_148.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_148.h',
- ],
- },
- {
- 'action_name': 'do_149',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_149.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_149.h',
- ],
- },
- {
- 'action_name': 'do_150',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_150.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_150.h',
- ],
- },
- {
- 'action_name': 'do_151',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_151.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_151.h',
- ],
- },
- {
- 'action_name': 'do_152',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_152.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_152.h',
- ],
- },
- {
- 'action_name': 'do_153',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_153.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_153.h',
- ],
- },
- {
- 'action_name': 'do_154',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_154.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_154.h',
- ],
- },
- {
- 'action_name': 'do_155',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_155.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_155.h',
- ],
- },
- {
- 'action_name': 'do_156',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_156.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_156.h',
- ],
- },
- {
- 'action_name': 'do_157',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_157.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_157.h',
- ],
- },
- {
- 'action_name': 'do_158',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_158.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_158.h',
- ],
- },
- {
- 'action_name': 'do_159',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_159.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_159.h',
- ],
- },
- {
- 'action_name': 'do_160',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_160.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_160.h',
- ],
- },
- {
- 'action_name': 'do_161',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_161.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_161.h',
- ],
- },
- {
- 'action_name': 'do_162',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_162.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_162.h',
- ],
- },
- {
- 'action_name': 'do_163',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_163.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_163.h',
- ],
- },
- {
- 'action_name': 'do_164',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_164.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_164.h',
- ],
- },
- {
- 'action_name': 'do_165',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_165.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_165.h',
- ],
- },
- {
- 'action_name': 'do_166',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_166.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_166.h',
- ],
- },
- {
- 'action_name': 'do_167',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_167.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_167.h',
- ],
- },
- {
- 'action_name': 'do_168',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_168.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_168.h',
- ],
- },
- {
- 'action_name': 'do_169',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_169.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_169.h',
- ],
- },
- {
- 'action_name': 'do_170',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_170.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_170.h',
- ],
- },
- {
- 'action_name': 'do_171',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_171.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_171.h',
- ],
- },
- {
- 'action_name': 'do_172',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_172.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_172.h',
- ],
- },
- {
- 'action_name': 'do_173',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_173.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_173.h',
- ],
- },
- {
- 'action_name': 'do_174',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_174.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_174.h',
- ],
- },
- {
- 'action_name': 'do_175',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_175.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_175.h',
- ],
- },
- {
- 'action_name': 'do_176',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_176.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_176.h',
- ],
- },
- {
- 'action_name': 'do_177',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_177.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_177.h',
- ],
- },
- {
- 'action_name': 'do_178',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_178.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_178.h',
- ],
- },
- {
- 'action_name': 'do_179',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_179.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_179.h',
- ],
- },
- {
- 'action_name': 'do_180',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_180.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_180.h',
- ],
- },
- {
- 'action_name': 'do_181',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_181.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_181.h',
- ],
- },
- {
- 'action_name': 'do_182',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_182.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_182.h',
- ],
- },
- {
- 'action_name': 'do_183',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_183.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_183.h',
- ],
- },
- {
- 'action_name': 'do_184',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_184.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_184.h',
- ],
- },
- {
- 'action_name': 'do_185',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_185.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_185.h',
- ],
- },
- {
- 'action_name': 'do_186',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_186.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_186.h',
- ],
- },
- {
- 'action_name': 'do_187',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_187.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_187.h',
- ],
- },
- {
- 'action_name': 'do_188',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_188.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_188.h',
- ],
- },
- {
- 'action_name': 'do_189',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_189.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_189.h',
- ],
- },
- {
- 'action_name': 'do_190',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_190.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_190.h',
- ],
- },
- {
- 'action_name': 'do_191',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_191.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_191.h',
- ],
- },
- {
- 'action_name': 'do_192',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_192.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_192.h',
- ],
- },
- {
- 'action_name': 'do_193',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_193.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_193.h',
- ],
- },
- {
- 'action_name': 'do_194',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_194.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_194.h',
- ],
- },
- {
- 'action_name': 'do_195',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_195.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_195.h',
- ],
- },
- {
- 'action_name': 'do_196',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_196.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_196.h',
- ],
- },
- {
- 'action_name': 'do_197',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_197.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_197.h',
- ],
- },
- {
- 'action_name': 'do_198',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_198.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_198.h',
- ],
- },
- {
- 'action_name': 'do_199',
- 'inputs': [],
- 'outputs': ['<(PRODUCT_DIR)/generated_199.h'],
- 'action': [
- 'touch',
- '<(PRODUCT_DIR)/generated_199.h',
- ],
- },
- ],
- },
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/module/gyptest-default.py b/deps/npm/node_modules/node-gyp/gyp/test/module/gyptest-default.py
deleted file mode 100755
index 7be5a7234..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/module/gyptest-default.py
+++ /dev/null
@@ -1,29 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Verifies simple build of a "Hello, world!" program with loadable modules. The
-default for all platforms should be to output the loadable modules to the same
-path as the executable.
-"""
-
-import TestGyp
-
-# Android doesn't support loadable modules
-test = TestGyp.TestGyp(formats=['!android'])
-
-test.run_gyp('module.gyp', chdir='src')
-
-test.build('module.gyp', test.ALL, chdir='src')
-
-expect = """\
-Hello from program.c
-Hello from lib1.c
-Hello from lib2.c
-"""
-test.run_built_executable('program', chdir='src', stdout=expect)
-
-test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/module/src/lib1.c b/deps/npm/node_modules/node-gyp/gyp/test/module/src/lib1.c
deleted file mode 100644
index 8de0e94be..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/module/src/lib1.c
+++ /dev/null
@@ -1,10 +0,0 @@
-#include <stdio.h>
-
-#ifdef _WIN32
-__declspec(dllexport)
-#endif
-void module_main(void)
-{
- fprintf(stdout, "Hello from lib1.c\n");
- fflush(stdout);
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/module/src/lib2.c b/deps/npm/node_modules/node-gyp/gyp/test/module/src/lib2.c
deleted file mode 100644
index 266396dc9..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/module/src/lib2.c
+++ /dev/null
@@ -1,10 +0,0 @@
-#include <stdio.h>
-
-#ifdef _WIN32
-__declspec(dllexport)
-#endif
-void module_main(void)
-{
- fprintf(stdout, "Hello from lib2.c\n");
- fflush(stdout);
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/module/src/module.gyp b/deps/npm/node_modules/node-gyp/gyp/test/module/src/module.gyp
deleted file mode 100644
index cc567ef7b..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/module/src/module.gyp
+++ /dev/null
@@ -1,55 +0,0 @@
-# Copyright (c) 2009 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'target_defaults': {
- 'conditions': [
- ['OS=="win"', {
- 'defines': ['PLATFORM_WIN'],
- }],
- ['OS=="mac"', {
- 'defines': ['PLATFORM_MAC'],
- }],
- ['OS=="linux"', {
- 'defines': ['PLATFORM_LINUX'],
- # Support 64-bit shared libs (also works fine for 32-bit).
- 'cflags': ['-fPIC'],
- 'libraries': ['-ldl'],
- }],
- ],
- },
- 'targets': [
- {
- 'target_name': 'program',
- 'type': 'executable',
- 'dependencies': [
- 'lib1',
- 'lib2',
- ],
- 'sources': [
- 'program.c',
- ],
- },
- {
- 'target_name': 'lib1',
- 'type': 'loadable_module',
- 'product_name': 'lib1',
- 'product_prefix': '',
- 'xcode_settings': {'OTHER_LDFLAGS': ['-dynamiclib'], 'MACH_O_TYPE': ''},
- 'sources': [
- 'lib1.c',
- ],
- },
- {
- 'target_name': 'lib2',
- 'product_name': 'lib2',
- 'product_prefix': '',
- 'type': 'loadable_module',
- 'xcode_settings': {'OTHER_LDFLAGS': ['-dynamiclib'], 'MACH_O_TYPE': ''},
- 'sources': [
- 'lib2.c',
- ],
- },
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/module/src/program.c b/deps/npm/node_modules/node-gyp/gyp/test/module/src/program.c
deleted file mode 100644
index b2f332091..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/module/src/program.c
+++ /dev/null
@@ -1,111 +0,0 @@
-#include <stdio.h>
-#include <stdlib.h>
-
-#if defined(PLATFORM_WIN)
-#include <windows.h>
-#elif defined(PLATFORM_MAC) || defined(PLATFORM_LINUX)
-#include <dlfcn.h>
-#include <libgen.h>
-#include <string.h>
-#include <sys/param.h>
-#define MAX_PATH PATH_MAX
-#endif
-
-#if defined(PLATFORM_WIN)
-#define MODULE_SUFFIX ".dll"
-#elif defined(PLATFORM_MAC)
-#define MODULE_SUFFIX ".so"
-#elif defined(PLATFORM_LINUX)
-#define MODULE_SUFFIX ".so"
-#endif
-
-typedef void (*module_symbol)(void);
-char bin_path[MAX_PATH + 1];
-
-
-void CallModule(const char* module) {
- char module_path[MAX_PATH + 1];
- const char* module_function = "module_main";
- module_symbol funcptr;
-#if defined(PLATFORM_WIN)
- HMODULE dl;
- char drive[_MAX_DRIVE];
- char dir[_MAX_DIR];
-
- if (_splitpath_s(bin_path, drive, _MAX_DRIVE, dir, _MAX_DIR,
- NULL, 0, NULL, 0)) {
- fprintf(stderr, "Failed to split executable path.\n");
- return;
- }
- if (_makepath_s(module_path, MAX_PATH, drive, dir, module, MODULE_SUFFIX)) {
- fprintf(stderr, "Failed to calculate module path.\n");
- return;
- }
-
- dl = LoadLibrary(module_path);
- if (!dl) {
- fprintf(stderr, "Failed to open module: %s\n", module_path);
- return;
- }
-
- funcptr = (module_symbol) GetProcAddress(dl, module_function);
- if (!funcptr) {
- fprintf(stderr, "Failed to find symbol: %s\n", module_function);
- return;
- }
- funcptr();
-
- FreeLibrary(dl);
-#elif defined(PLATFORM_MAC) || defined(PLATFORM_LINUX)
- void* dl;
- char* path_copy = strdup(bin_path);
- char* bin_dir = dirname(path_copy);
- int path_size = snprintf(module_path, MAX_PATH, "%s/%s%s", bin_dir, module,
- MODULE_SUFFIX);
- free(path_copy);
- if (path_size < 0 || path_size > MAX_PATH) {
- fprintf(stderr, "Failed to calculate module path.\n");
- return;
- }
- module_path[path_size] = 0;
-
- dl = dlopen(module_path, RTLD_LAZY);
- if (!dl) {
- fprintf(stderr, "Failed to open module: %s\n", module_path);
- return;
- }
-
- funcptr = dlsym(dl, module_function);
- if (!funcptr) {
- fprintf(stderr, "Failed to find symbol: %s\n", module_function);
- return;
- }
- funcptr();
-
- dlclose(dl);
-#endif
-}
-
-int main(int argc, char *argv[])
-{
- fprintf(stdout, "Hello from program.c\n");
- fflush(stdout);
-
-#if defined(PLATFORM_WIN)
- if (!GetModuleFileName(NULL, bin_path, MAX_PATH)) {
- fprintf(stderr, "Failed to determine executable path.\n");
- return;
- }
-#elif defined(PLATFORM_MAC) || defined(PLATFORM_LINUX)
- // Using argv[0] should be OK here since we control how the tests run, and
- // can avoid exec and such issues that make it unreliable.
- if (!realpath(argv[0], bin_path)) {
- fprintf(stderr, "Failed to determine executable path (%s).\n", argv[0]);
- return;
- }
-#endif
-
- CallModule("lib1");
- CallModule("lib2");
- return 0;
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/msvs/config_attrs/gyptest-config_attrs.py b/deps/npm/node_modules/node-gyp/gyp/test/msvs/config_attrs/gyptest-config_attrs.py
deleted file mode 100644
index 15f4b4ef2..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/msvs/config_attrs/gyptest-config_attrs.py
+++ /dev/null
@@ -1,31 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Verifies that msvs_configuration_attributes and
-msbuild_configuration_attributes are applied by using
-them to set the OutputDirectory.
-"""
-
-import TestGyp
-import os
-
-test = TestGyp.TestGyp(workdir='workarea_all',formats=['msvs'])
-
-vc_version = 'VC90'
-
-if os.getenv('GYP_MSVS_VERSION'):
- vc_version = ['VC90','VC100'][int(os.getenv('GYP_MSVS_VERSION')) >= 2010]
-
-expected_exe_file = os.path.join(test.workdir, vc_version, 'hello.exe')
-
-test.run_gyp('hello.gyp')
-
-test.build('hello.gyp')
-
-test.must_exist(expected_exe_file)
-
-test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/msvs/config_attrs/hello.c b/deps/npm/node_modules/node-gyp/gyp/test/msvs/config_attrs/hello.c
deleted file mode 100644
index 5a8072db8..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/msvs/config_attrs/hello.c
+++ /dev/null
@@ -1,11 +0,0 @@
-/* Copyright (c) 2012 Google Inc. All rights reserved.
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file. */
-
-#include <stdio.h>
-
-int main(int argc, char *argv[])
-{
- printf("Hello, world!\n");
- return 0;
-} \ No newline at end of file
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/msvs/config_attrs/hello.gyp b/deps/npm/node_modules/node-gyp/gyp/test/msvs/config_attrs/hello.gyp
deleted file mode 100644
index 810a80edd..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/msvs/config_attrs/hello.gyp
+++ /dev/null
@@ -1,21 +0,0 @@
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'targets': [
- {
- 'target_name': 'hello',
- 'type': 'executable',
- 'sources': [
- 'hello.c',
- ],
- 'msvs_configuration_attributes': {
- 'OutputDirectory':'$(SolutionDir)VC90/'
- },
- 'msbuild_configuration_attributes': {
- 'OutputDirectory':'$(SolutionDir)VC100/',
- },
- },
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/msvs/express/base/base.gyp b/deps/npm/node_modules/node-gyp/gyp/test/msvs/express/base/base.gyp
deleted file mode 100644
index b7c9fc6d8..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/msvs/express/base/base.gyp
+++ /dev/null
@@ -1,22 +0,0 @@
-# Copyright (c) 2009 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'targets': [
- {
- 'target_name': 'a',
- 'type': 'static_library',
- 'sources': [
- 'a.c',
- ],
- },
- {
- 'target_name': 'b',
- 'type': 'static_library',
- 'sources': [
- 'b.c',
- ],
- },
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/msvs/express/express.gyp b/deps/npm/node_modules/node-gyp/gyp/test/msvs/express/express.gyp
deleted file mode 100644
index 917abe2cc..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/msvs/express/express.gyp
+++ /dev/null
@@ -1,19 +0,0 @@
-# Copyright (c) 2009 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'targets': [
- {
- 'target_name': 'express',
- 'type': 'executable',
- 'dependencies': [
- 'base/base.gyp:a',
- 'base/base.gyp:b',
- ],
- 'sources': [
- 'main.c',
- ],
- },
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/msvs/express/gyptest-express.py b/deps/npm/node_modules/node-gyp/gyp/test/msvs/express/gyptest-express.py
deleted file mode 100755
index 54c06f664..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/msvs/express/gyptest-express.py
+++ /dev/null
@@ -1,29 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2009 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Verifies that flat solutions get generated for Express versions of
-Visual Studio.
-"""
-
-import TestGyp
-
-test = TestGyp.TestGyp(formats=['msvs'])
-
-test.run_gyp('express.gyp', '-G', 'msvs_version=2005')
-test.must_contain('express.sln', '(base)')
-
-test.run_gyp('express.gyp', '-G', 'msvs_version=2008')
-test.must_contain('express.sln', '(base)')
-
-test.run_gyp('express.gyp', '-G', 'msvs_version=2005e')
-test.must_not_contain('express.sln', '(base)')
-
-test.run_gyp('express.gyp', '-G', 'msvs_version=2008e')
-test.must_not_contain('express.sln', '(base)')
-
-
-test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/msvs/list_excluded/gyptest-all.py b/deps/npm/node_modules/node-gyp/gyp/test/msvs/list_excluded/gyptest-all.py
deleted file mode 100644
index 5a370f6b4..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/msvs/list_excluded/gyptest-all.py
+++ /dev/null
@@ -1,51 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Verifies that msvs_list_excluded_files=0 doesn't list files that would
-normally be in _excluded_files, and that if that flag is not set, then they
-are still listed.
-"""
-
-import os
-import TestGyp
-
-test = TestGyp.TestGyp(formats=['msvs'], workdir='workarea_all')
-
-
-# with the flag set to 0
-try:
- os.environ['GYP_GENERATOR_FLAGS'] = 'msvs_list_excluded_files=0'
- test.run_gyp('hello_exclude.gyp')
-finally:
- del os.environ['GYP_GENERATOR_FLAGS']
-if test.uses_msbuild:
- test.must_not_contain('hello.vcxproj', 'hello_mac')
-else:
- test.must_not_contain('hello.vcproj', 'hello_mac')
-
-
-# with the flag not set
-test.run_gyp('hello_exclude.gyp')
-if test.uses_msbuild:
- test.must_contain('hello.vcxproj', 'hello_mac')
-else:
- test.must_contain('hello.vcproj', 'hello_mac')
-
-
-# with the flag explicitly set to 1
-try:
- os.environ['GYP_GENERATOR_FLAGS'] = 'msvs_list_excluded_files=1'
- test.run_gyp('hello_exclude.gyp')
-finally:
- del os.environ['GYP_GENERATOR_FLAGS']
-if test.uses_msbuild:
- test.must_contain('hello.vcxproj', 'hello_mac')
-else:
- test.must_contain('hello.vcproj', 'hello_mac')
-
-
-test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/msvs/list_excluded/hello.cpp b/deps/npm/node_modules/node-gyp/gyp/test/msvs/list_excluded/hello.cpp
deleted file mode 100644
index 69acc38bd..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/msvs/list_excluded/hello.cpp
+++ /dev/null
@@ -1,10 +0,0 @@
-// Copyright (c) 2012 Google Inc. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include <stdio.h>
-
-int main(int argc, char *argv[]) {
- printf("Hello, world!\n");
- return 0;
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/msvs/list_excluded/hello_exclude.gyp b/deps/npm/node_modules/node-gyp/gyp/test/msvs/list_excluded/hello_exclude.gyp
deleted file mode 100644
index aa160f236..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/msvs/list_excluded/hello_exclude.gyp
+++ /dev/null
@@ -1,19 +0,0 @@
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'targets': [
- {
- 'target_name': 'hello',
- 'type': 'executable',
- 'sources': [
- 'hello.cpp',
- 'hello_mac.cpp',
- ],
- 'conditions': [
- ['OS!="mac"', {'sources!': ['hello_mac.cpp']}],
- ]
- },
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/msvs/list_excluded/hello_mac.cpp b/deps/npm/node_modules/node-gyp/gyp/test/msvs/list_excluded/hello_mac.cpp
deleted file mode 100644
index b9f6242c4..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/msvs/list_excluded/hello_mac.cpp
+++ /dev/null
@@ -1,10 +0,0 @@
-// Copyright (c) 2012 Google Inc. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include <stdio.h>
-
-int hello2() {
- printf("Hello, two!\n");
- return 0;
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/msvs/missing_sources/gyptest-missing.py b/deps/npm/node_modules/node-gyp/gyp/test/msvs/missing_sources/gyptest-missing.py
deleted file mode 100644
index 62a99ef0f..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/msvs/missing_sources/gyptest-missing.py
+++ /dev/null
@@ -1,43 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Verifies that missing 'sources' files are treated as fatal errors when the
-the generator flag 'msvs_error_on_missing_sources' is set.
-"""
-
-import TestGyp
-import os
-import sys
-
-if sys.platform == 'win32':
- test = TestGyp.TestGyp(formats=['msvs', 'ninja'], workdir='workarea_all')
-
- # With the flag not set
- test.run_gyp('hello_missing.gyp')
-
- # With the flag explicitly set to 0
- try:
- os.environ['GYP_GENERATOR_FLAGS'] = 'msvs_error_on_missing_sources=0'
- test.run_gyp('hello_missing.gyp')
- finally:
- del os.environ['GYP_GENERATOR_FLAGS']
-
- # With the flag explicitly set to 1
- try:
- os.environ['GYP_GENERATOR_FLAGS'] = 'msvs_error_on_missing_sources=1'
- # Test to make sure GYP raises an exception (exit status 1). Since this will
- # also print a backtrace, ensure that TestGyp is not checking that stderr is
- # empty by specifying None, which means do not perform any checking.
- # Instead, stderr is checked below to ensure it contains the expected
- # output.
- test.run_gyp('hello_missing.gyp', status=1, stderr=None)
- finally:
- del os.environ['GYP_GENERATOR_FLAGS']
- test.must_contain_any_line(test.stderr(),
- ["Missing input files:"])
-
- test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/msvs/missing_sources/hello_missing.gyp b/deps/npm/node_modules/node-gyp/gyp/test/msvs/missing_sources/hello_missing.gyp
deleted file mode 100644
index c08926bbf..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/msvs/missing_sources/hello_missing.gyp
+++ /dev/null
@@ -1,15 +0,0 @@
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'targets': [
- {
- 'target_name': 'hello',
- 'type': 'executable',
- 'sources': [
- 'hello_missing.cpp',
- ],
- },
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/msvs/props/AppName.props b/deps/npm/node_modules/node-gyp/gyp/test/msvs/props/AppName.props
deleted file mode 100644
index b688f663d..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/msvs/props/AppName.props
+++ /dev/null
@@ -1,14 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <PropertyGroup Label="UserMacros">
- <AppName>Greet</AppName>
- </PropertyGroup>
- <PropertyGroup>
- <_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>
- </PropertyGroup>
- <ItemGroup>
- <BuildMacro Include="AppName">
- <Value>$(AppName)</Value>
- </BuildMacro>
- </ItemGroup>
-</Project>
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/msvs/props/AppName.vsprops b/deps/npm/node_modules/node-gyp/gyp/test/msvs/props/AppName.vsprops
deleted file mode 100644
index 84b9af380..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/msvs/props/AppName.vsprops
+++ /dev/null
@@ -1,11 +0,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioPropertySheet
- ProjectType="Visual C++"
- Version="8.00"
- Name="Common"
- >
- <UserMacro
- Name="AppName"
- Value="Greet"
- />
-</VisualStudioPropertySheet>
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/msvs/props/gyptest-props.py b/deps/npm/node_modules/node-gyp/gyp/test/msvs/props/gyptest-props.py
deleted file mode 100644
index abd4df224..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/msvs/props/gyptest-props.py
+++ /dev/null
@@ -1,22 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Verifies props files are added by using a
-props file to set the name of the built executable.
-"""
-
-import TestGyp
-
-test = TestGyp.TestGyp(workdir='workarea_all', formats=['msvs'])
-
-test.run_gyp('hello.gyp')
-
-test.build('hello.gyp')
-
-test.built_file_must_exist('Greet.exe')
-
-test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/msvs/props/hello.c b/deps/npm/node_modules/node-gyp/gyp/test/msvs/props/hello.c
deleted file mode 100644
index b41318dc0..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/msvs/props/hello.c
+++ /dev/null
@@ -1,11 +0,0 @@
-/* Copyright (c) 2012 Google Inc. All rights reserved.
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file. */
-
-#include <stdio.h>
-
-int main(int argc, char *argv[])
-{
- printf("Hello, world!\n");
- return 0;
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/msvs/props/hello.gyp b/deps/npm/node_modules/node-gyp/gyp/test/msvs/props/hello.gyp
deleted file mode 100644
index 5a58317fa..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/msvs/props/hello.gyp
+++ /dev/null
@@ -1,22 +0,0 @@
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-{
- 'targets': [
- {
- 'target_name': 'hello',
- 'product_name': '$(AppName)',
- 'type': 'executable',
- 'sources': [
- 'hello.c',
- ],
- 'msvs_props': [
- '$(SolutionDir)AppName.vsprops'
- ],
- 'msbuild_props': [
- '$(SolutionDir)AppName.props'
- ],
- },
- ],
-}
-
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/msvs/shared_output/common.gypi b/deps/npm/node_modules/node-gyp/gyp/test/msvs/shared_output/common.gypi
deleted file mode 100644
index c6fa341d6..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/msvs/shared_output/common.gypi
+++ /dev/null
@@ -1,17 +0,0 @@
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'target_defaults': {
- 'default_configuration': 'Baz',
- 'configurations': {
- 'Baz': {
- 'msvs_configuration_attributes': {
- 'OutputDirectory': '<(DEPTH)/foo',
- 'IntermediateDirectory': '$(OutDir)/bar',
- },
- },
- },
- },
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/msvs/shared_output/gyptest-shared_output.py b/deps/npm/node_modules/node-gyp/gyp/test/msvs/shared_output/gyptest-shared_output.py
deleted file mode 100644
index 270b280e6..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/msvs/shared_output/gyptest-shared_output.py
+++ /dev/null
@@ -1,41 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Test checking that IntermediateDirectory can be defined in terms of
-OutputDirectory. We previously had emitted the definition of
-IntermediateDirectory before the definition of OutputDirectory.
-This is required so that $(IntDir) can be based on $(OutDir).
-"""
-
-import TestGyp
-import os
-
-# NOTE: This test really is vcbuild/msbuild specific (not applicable to windows
-# ninja), as it is testing the msvs output location when opening an .sln
-# other than all.sln.
-test = TestGyp.TestGyp(workdir='workarea_shared_output', formats=['msvs'])
-
-test.run_gyp('hello.gyp')
-test.set_configuration('Baz')
-
-test.build('there/there.gyp', test.ALL)
-test.must_exist(os.path.join(test.workdir, 'foo', 'there.exe'))
-test.must_exist(os.path.join(test.workdir, 'foo', 'bar', 'there.obj'))
-
-test.build('hello.gyp', test.ALL)
-test.must_exist(os.path.join(test.workdir, 'foo', 'hello.exe'))
-test.must_exist(os.path.join(test.workdir, 'foo', 'bar', 'hello.obj'))
-
-if test.format == 'msvs':
- if test.uses_msbuild:
- test.must_contain('pull_in_there.vcxproj',
- '<IntDir>$(OutDir)bar\\</IntDir>')
- else:
- test.must_contain('pull_in_there.vcproj',
- 'IntermediateDirectory="$(OutDir)bar\\"')
-
-test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/msvs/shared_output/hello.c b/deps/npm/node_modules/node-gyp/gyp/test/msvs/shared_output/hello.c
deleted file mode 100644
index 44d1b0dc9..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/msvs/shared_output/hello.c
+++ /dev/null
@@ -1,12 +0,0 @@
-/*
- * Copyright (c) 2012 Google Inc. All rights reserved.
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-#include <stdio.h>
-
-int main(int argc, char *argv[]) {
- printf("Hello, world!\n");
- return 0;
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/msvs/shared_output/hello.gyp b/deps/npm/node_modules/node-gyp/gyp/test/msvs/shared_output/hello.gyp
deleted file mode 100644
index f80e5cfca..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/msvs/shared_output/hello.gyp
+++ /dev/null
@@ -1,21 +0,0 @@
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'includes': ['common.gypi'],
- 'targets': [
- {
- 'target_name': 'pull_in_there',
- 'type': 'none',
- 'dependencies': ['there/there.gyp:*'],
- },
- {
- 'target_name': 'hello',
- 'type': 'executable',
- 'sources': [
- 'hello.c',
- ],
- },
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/msvs/shared_output/there/there.c b/deps/npm/node_modules/node-gyp/gyp/test/msvs/shared_output/there/there.c
deleted file mode 100644
index 44d1b0dc9..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/msvs/shared_output/there/there.c
+++ /dev/null
@@ -1,12 +0,0 @@
-/*
- * Copyright (c) 2012 Google Inc. All rights reserved.
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-#include <stdio.h>
-
-int main(int argc, char *argv[]) {
- printf("Hello, world!\n");
- return 0;
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/msvs/shared_output/there/there.gyp b/deps/npm/node_modules/node-gyp/gyp/test/msvs/shared_output/there/there.gyp
deleted file mode 100644
index 56feff326..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/msvs/shared_output/there/there.gyp
+++ /dev/null
@@ -1,16 +0,0 @@
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'includes': ['../common.gypi'],
- 'targets': [
- {
- 'target_name': 'there',
- 'type': 'executable',
- 'sources': [
- 'there.c',
- ],
- },
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/msvs/uldi2010/gyptest-all.py b/deps/npm/node_modules/node-gyp/gyp/test/msvs/uldi2010/gyptest-all.py
deleted file mode 100644
index cc248fbd6..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/msvs/uldi2010/gyptest-all.py
+++ /dev/null
@@ -1,20 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Verifies that uldi can be disabled on a per-project-reference basis in vs2010.
-"""
-
-import TestGyp
-
-test = TestGyp.TestGyp(formats=['msvs'], workdir='workarea_all')
-
-test.run_gyp('hello.gyp')
-
-if test.uses_msbuild:
- test.must_contain('hello.vcxproj', '<UseLibraryDependencyInputs>false')
-
-test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/msvs/uldi2010/hello.c b/deps/npm/node_modules/node-gyp/gyp/test/msvs/uldi2010/hello.c
deleted file mode 100644
index 276909369..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/msvs/uldi2010/hello.c
+++ /dev/null
@@ -1,13 +0,0 @@
-/* Copyright (c) 2012 Google Inc. All rights reserved.
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file. */
-
-#include <stdio.h>
-
-extern int hello2();
-
-int main(int argc, char *argv[]) {
- printf("Hello, world!\n");
- hello2();
- return 0;
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/msvs/uldi2010/hello.gyp b/deps/npm/node_modules/node-gyp/gyp/test/msvs/uldi2010/hello.gyp
deleted file mode 100644
index a2bf2badb..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/msvs/uldi2010/hello.gyp
+++ /dev/null
@@ -1,26 +0,0 @@
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'targets': [
- {
- 'target_name': 'hello',
- 'type': 'executable',
- 'sources': [
- 'hello.c',
- ],
- 'dependencies': [
- 'hellolib',
- ]
- },
- {
- 'target_name': 'hellolib',
- 'type': 'static_library',
- 'sources': [
- 'hello2.c',
- ],
- 'msvs_2010_disable_uldi_when_referenced': 1,
- },
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/msvs/uldi2010/hello2.c b/deps/npm/node_modules/node-gyp/gyp/test/msvs/uldi2010/hello2.c
deleted file mode 100644
index e2f23238d..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/msvs/uldi2010/hello2.c
+++ /dev/null
@@ -1,10 +0,0 @@
-/* Copyright (c) 2012 Google Inc. All rights reserved.
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file. */
-
-#include <stdio.h>
-
-int hello2() {
- printf("Hello, two!\n");
- return 0;
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/multiple-targets/gyptest-all.py b/deps/npm/node_modules/node-gyp/gyp/test/multiple-targets/gyptest-all.py
deleted file mode 100755
index 9f157c4f8..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/multiple-targets/gyptest-all.py
+++ /dev/null
@@ -1,35 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2009 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-"""
-
-import TestGyp
-
-test = TestGyp.TestGyp()
-
-test.run_gyp('multiple.gyp', chdir='src')
-
-test.relocate('src', 'relocate/src')
-
-# TODO(sgk): remove stderr=None when the --generator-output= support
-# gets rid of the scons warning
-test.build('multiple.gyp', test.ALL, chdir='relocate/src', stderr=None)
-
-expect1 = """\
-hello from prog1.c
-hello from common.c
-"""
-
-expect2 = """\
-hello from prog2.c
-hello from common.c
-"""
-
-test.run_built_executable('prog1', stdout=expect1, chdir='relocate/src')
-test.run_built_executable('prog2', stdout=expect2, chdir='relocate/src')
-
-test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/multiple-targets/gyptest-default.py b/deps/npm/node_modules/node-gyp/gyp/test/multiple-targets/gyptest-default.py
deleted file mode 100755
index 8d5072d23..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/multiple-targets/gyptest-default.py
+++ /dev/null
@@ -1,35 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2009 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-"""
-
-import TestGyp
-
-test = TestGyp.TestGyp()
-
-test.run_gyp('multiple.gyp', chdir='src')
-
-test.relocate('src', 'relocate/src')
-
-# TODO(sgk): remove stderr=None when the --generator-output= support
-# gets rid of the scons warning
-test.build('multiple.gyp', chdir='relocate/src', stderr=None)
-
-expect1 = """\
-hello from prog1.c
-hello from common.c
-"""
-
-expect2 = """\
-hello from prog2.c
-hello from common.c
-"""
-
-test.run_built_executable('prog1', stdout=expect1, chdir='relocate/src')
-test.run_built_executable('prog2', stdout=expect2, chdir='relocate/src')
-
-test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/multiple-targets/src/common.c b/deps/npm/node_modules/node-gyp/gyp/test/multiple-targets/src/common.c
deleted file mode 100644
index f1df7c143..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/multiple-targets/src/common.c
+++ /dev/null
@@ -1,7 +0,0 @@
-#include <stdio.h>
-
-void common(void)
-{
- printf("hello from common.c\n");
- return;
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/multiple-targets/src/multiple.gyp b/deps/npm/node_modules/node-gyp/gyp/test/multiple-targets/src/multiple.gyp
deleted file mode 100644
index 3db4ea30c..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/multiple-targets/src/multiple.gyp
+++ /dev/null
@@ -1,24 +0,0 @@
-# Copyright (c) 2009 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'targets': [
- {
- 'target_name': 'prog1',
- 'type': 'executable',
- 'sources': [
- 'prog1.c',
- 'common.c',
- ],
- },
- {
- 'target_name': 'prog2',
- 'type': 'executable',
- 'sources': [
- 'prog2.c',
- 'common.c',
- ],
- },
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/multiple-targets/src/prog1.c b/deps/npm/node_modules/node-gyp/gyp/test/multiple-targets/src/prog1.c
deleted file mode 100644
index d55f8af1d..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/multiple-targets/src/prog1.c
+++ /dev/null
@@ -1,10 +0,0 @@
-#include <stdio.h>
-
-extern void common(void);
-
-int main(int argc, char *argv[])
-{
- printf("hello from prog1.c\n");
- common();
- return 0;
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/multiple-targets/src/prog2.c b/deps/npm/node_modules/node-gyp/gyp/test/multiple-targets/src/prog2.c
deleted file mode 100644
index 760590eb6..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/multiple-targets/src/prog2.c
+++ /dev/null
@@ -1,10 +0,0 @@
-#include <stdio.h>
-
-extern void common(void);
-
-int main(int argc, char *argv[])
-{
- printf("hello from prog2.c\n");
- common();
- return 0;
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/ninja/action_dependencies/gyptest-action-dependencies.py b/deps/npm/node_modules/node-gyp/gyp/test/ninja/action_dependencies/gyptest-action-dependencies.py
deleted file mode 100755
index 9c5acea8c..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/ninja/action_dependencies/gyptest-action-dependencies.py
+++ /dev/null
@@ -1,53 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Verify that building an object file correctly depends on running actions in
-dependent targets, but not the targets themselves.
-"""
-
-import os
-import sys
-import TestGyp
-
-# NOTE(piman): This test will not work with other generators because:
-# - it explicitly tests the optimization, which is not implemented (yet?) on
-# other generators
-# - it relies on the exact path to output object files, which is generator
-# dependent, and actually, relies on the ability to build only that object file,
-# which I don't think is available on all generators.
-# TODO(piman): Extend to other generators when possible.
-test = TestGyp.TestGyp(formats=['ninja'])
-
-test.run_gyp('action_dependencies.gyp', chdir='src')
-
-chdir = 'relocate/src'
-test.relocate('src', chdir)
-
-objext = '.obj' if sys.platform == 'win32' else '.o'
-
-test.build('action_dependencies.gyp',
- os.path.join('obj', 'b.b' + objext),
- chdir=chdir)
-
-# The 'a' actions should be run (letting b.c compile), but the a static library
-# should not be built.
-test.built_file_must_not_exist('a', type=test.STATIC_LIB, chdir=chdir)
-test.built_file_must_not_exist('b', type=test.STATIC_LIB, chdir=chdir)
-test.built_file_must_exist(os.path.join('obj', 'b.b' + objext), chdir=chdir)
-
-test.build('action_dependencies.gyp',
- os.path.join('obj', 'c.c' + objext),
- chdir=chdir)
-
-# 'a' and 'b' should be built, so that the 'c' action succeeds, letting c.c
-# compile
-test.built_file_must_exist('a', type=test.STATIC_LIB, chdir=chdir)
-test.built_file_must_exist('b', type=test.EXECUTABLE, chdir=chdir)
-test.built_file_must_exist(os.path.join('obj', 'c.c' + objext), chdir=chdir)
-
-
-test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/ninja/action_dependencies/src/a.c b/deps/npm/node_modules/node-gyp/gyp/test/ninja/action_dependencies/src/a.c
deleted file mode 100644
index 4d7af9b26..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/ninja/action_dependencies/src/a.c
+++ /dev/null
@@ -1,10 +0,0 @@
-/* Copyright (c) 2011 Google Inc. All rights reserved.
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-#include "a.h"
-
-int funcA() {
- return 42;
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/ninja/action_dependencies/src/a.h b/deps/npm/node_modules/node-gyp/gyp/test/ninja/action_dependencies/src/a.h
deleted file mode 100644
index 335db5673..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/ninja/action_dependencies/src/a.h
+++ /dev/null
@@ -1,13 +0,0 @@
-/* Copyright (c) 2011 Google Inc. All rights reserved.
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-#ifndef A_H_
-#define A_H_
-
-#include "a/generated.h"
-
-int funcA();
-
-#endif // A_H_
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/ninja/action_dependencies/src/action_dependencies.gyp b/deps/npm/node_modules/node-gyp/gyp/test/ninja/action_dependencies/src/action_dependencies.gyp
deleted file mode 100644
index 5baa7a7d4..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/ninja/action_dependencies/src/action_dependencies.gyp
+++ /dev/null
@@ -1,88 +0,0 @@
-# Copyright (c) 2011 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'targets': [
- {
- 'target_name': 'a',
- 'type': 'static_library',
- 'sources': [
- 'a.c',
- 'a.h',
- ],
- 'actions': [
- {
- 'action_name': 'generate_headers',
- 'inputs': [
- 'emit.py'
- ],
- 'outputs': [
- '<(SHARED_INTERMEDIATE_DIR)/a/generated.h'
- ],
- 'action': [
- 'python',
- 'emit.py',
- '<(SHARED_INTERMEDIATE_DIR)/a/generated.h',
- ],
- # Allows the test to run without hermetic cygwin on windows.
- 'msvs_cygwin_shell': 0,
- },
- ],
- 'include_dirs': [
- '<(SHARED_INTERMEDIATE_DIR)',
- ],
- 'direct_dependent_settings': {
- 'include_dirs': [
- '<(SHARED_INTERMEDIATE_DIR)',
- ],
- },
- },
- {
- 'target_name': 'b',
- 'type': 'executable',
- 'sources': [
- 'b.c',
- 'b.h',
- ],
- 'dependencies': [
- 'a',
- ],
- },
- {
- 'target_name': 'c',
- 'type': 'static_library',
- 'sources': [
- 'c.c',
- 'c.h',
- ],
- 'dependencies': [
- 'b',
- ],
- 'actions': [
- {
- 'action_name': 'generate_headers',
- 'inputs': [
- ],
- 'outputs': [
- '<(SHARED_INTERMEDIATE_DIR)/c/generated.h'
- ],
- 'action': [
- '<(PRODUCT_DIR)/b',
- '<(SHARED_INTERMEDIATE_DIR)/c/generated.h',
- ],
- # Allows the test to run without hermetic cygwin on windows.
- 'msvs_cygwin_shell': 0,
- },
- ],
- 'include_dirs': [
- '<(SHARED_INTERMEDIATE_DIR)',
- ],
- 'direct_dependent_settings': {
- 'include_dirs': [
- '<(SHARED_INTERMEDIATE_DIR)',
- ],
- },
- },
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/ninja/action_dependencies/src/b.c b/deps/npm/node_modules/node-gyp/gyp/test/ninja/action_dependencies/src/b.c
deleted file mode 100644
index 824464695..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/ninja/action_dependencies/src/b.c
+++ /dev/null
@@ -1,18 +0,0 @@
-/* Copyright (c) 2012 Google Inc. All rights reserved.
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-#include <stdio.h>
-
-#include "b.h"
-
-int main(int argc, char** argv) {
- FILE* f;
- if (argc < 2)
- return 1;
- f = fopen(argv[1], "wt");
- fprintf(f, "#define VALUE %d\n", funcA());
- fclose(f);
- return 0;
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/ninja/action_dependencies/src/b.h b/deps/npm/node_modules/node-gyp/gyp/test/ninja/action_dependencies/src/b.h
deleted file mode 100644
index 91362cd89..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/ninja/action_dependencies/src/b.h
+++ /dev/null
@@ -1,13 +0,0 @@
-/* Copyright (c) 2011 Google Inc. All rights reserved.
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-#ifndef B_H_
-#define B_H_
-
-#include "a.h"
-
-int funcB();
-
-#endif // B_H_
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/ninja/action_dependencies/src/c.c b/deps/npm/node_modules/node-gyp/gyp/test/ninja/action_dependencies/src/c.c
deleted file mode 100644
index b412087ec..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/ninja/action_dependencies/src/c.c
+++ /dev/null
@@ -1,10 +0,0 @@
-/* Copyright (c) 2011 Google Inc. All rights reserved.
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-#include "c.h"
-
-int funcC() {
- return VALUE;
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/ninja/action_dependencies/src/c.h b/deps/npm/node_modules/node-gyp/gyp/test/ninja/action_dependencies/src/c.h
deleted file mode 100644
index c81a45bbe..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/ninja/action_dependencies/src/c.h
+++ /dev/null
@@ -1,13 +0,0 @@
-/* Copyright (c) 2011 Google Inc. All rights reserved.
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-#ifndef C_H_
-#define C_H_
-
-#include "c/generated.h"
-
-int funcC();
-
-#endif // C_H_
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/ninja/action_dependencies/src/emit.py b/deps/npm/node_modules/node-gyp/gyp/test/ninja/action_dependencies/src/emit.py
deleted file mode 100755
index 2df74b79a..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/ninja/action_dependencies/src/emit.py
+++ /dev/null
@@ -1,11 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2011 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import sys
-
-f = open(sys.argv[1], 'wb')
-f.write('/* Hello World */\n')
-f.close()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/ninja/chained-dependency/chained-dependency.gyp b/deps/npm/node_modules/node-gyp/gyp/test/ninja/chained-dependency/chained-dependency.gyp
deleted file mode 100644
index 3fe68ae85..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/ninja/chained-dependency/chained-dependency.gyp
+++ /dev/null
@@ -1,53 +0,0 @@
-# Copyright (c) 2010 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'targets': [
- # This first target generates a header.
- {
- 'target_name': 'generate_header',
- 'type': 'none',
- 'msvs_cygwin_shell': '0',
- 'actions': [
- {
- 'action_name': 'generate header',
- 'inputs': [],
- 'outputs': ['<(SHARED_INTERMEDIATE_DIR)/generated/header.h'],
- 'action': [
- 'python', '-c', 'open(<(_outputs), "w")'
- ]
- },
- ],
- 'all_dependent_settings': {
- 'include_dirs': [
- '<(SHARED_INTERMEDIATE_DIR)',
- ],
- },
- },
-
- # This intermediate target does nothing other than pull in a
- # dependency on the above generated target.
- {
- 'target_name': 'chain',
- 'type': 'none',
- 'dependencies': [
- 'generate_header',
- ],
- },
-
- # This final target is:
- # - a static library (so gyp doesn't transitively pull in dependencies);
- # - that relies on the generated file two dependencies away.
- {
- 'target_name': 'chained',
- 'type': 'static_library',
- 'dependencies': [
- 'chain',
- ],
- 'sources': [
- 'chained.c',
- ],
- },
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/ninja/chained-dependency/chained.c b/deps/npm/node_modules/node-gyp/gyp/test/ninja/chained-dependency/chained.c
deleted file mode 100644
index e4eb5e861..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/ninja/chained-dependency/chained.c
+++ /dev/null
@@ -1,5 +0,0 @@
-#include "generated/header.h"
-
-int main(int argc, char** argv) {
- return 0;
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/ninja/chained-dependency/gyptest-chained-dependency.py b/deps/npm/node_modules/node-gyp/gyp/test/ninja/chained-dependency/gyptest-chained-dependency.py
deleted file mode 100755
index 9fcd9a45d..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/ninja/chained-dependency/gyptest-chained-dependency.py
+++ /dev/null
@@ -1,26 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Verifies that files generated by two-steps-removed actions are built before
-dependent compile steps.
-"""
-
-import os
-import sys
-import TestGyp
-
-# This test is Ninja-specific in that:
-# - the bug only showed nondeterministically in parallel builds;
-# - it relies on a ninja-specific output file path.
-
-test = TestGyp.TestGyp(formats=['ninja'])
-test.run_gyp('chained-dependency.gyp')
-objext = '.obj' if sys.platform == 'win32' else '.o'
-test.build('chained-dependency.gyp',
- os.path.join('obj', 'chained.chained' + objext))
-# The test passes if the .o file builds successfully.
-test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/ninja/normalize-paths-win/gyptest-normalize-paths.py b/deps/npm/node_modules/node-gyp/gyp/test/ninja/normalize-paths-win/gyptest-normalize-paths.py
deleted file mode 100644
index af48d071c..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/ninja/normalize-paths-win/gyptest-normalize-paths.py
+++ /dev/null
@@ -1,42 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Make sure paths are normalized with VS macros properly expanded on Windows.
-"""
-
-import TestGyp
-
-import sys
-
-if sys.platform == 'win32':
- test = TestGyp.TestGyp(formats=['ninja'])
-
- test.run_gyp('normalize-paths.gyp')
-
- # We can't use existence tests because any case will pass, so we check the
- # contents of ninja files directly since that's what we're most concerned
- # with anyway.
- subninja = open(test.built_file_path('obj/some_target.ninja')).read()
- if '$!product_dir' in subninja:
- test.fail_test()
- if 'out\\Default' in subninja:
- test.fail_test()
-
- second = open(test.built_file_path('obj/second.ninja')).read()
- if ('..\\..\\things\\AnotherName.exe' in second or
- 'AnotherName.exe' not in second):
- test.fail_test()
-
- action = open(test.built_file_path('obj/action.ninja')).read()
- if '..\\..\\out\\Default' in action:
- test.fail_test()
- if '..\\..\\SomethingElse' in action or 'SomethingElse' not in action:
- test.fail_test()
- if '..\\..\\SomeOtherInput' in action or 'SomeOtherInput' not in action:
- test.fail_test()
-
- test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/ninja/normalize-paths-win/hello.cc b/deps/npm/node_modules/node-gyp/gyp/test/ninja/normalize-paths-win/hello.cc
deleted file mode 100644
index 1711567ef..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/ninja/normalize-paths-win/hello.cc
+++ /dev/null
@@ -1,7 +0,0 @@
-// Copyright (c) 2012 Google Inc. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-int main() {
- return 0;
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/ninja/normalize-paths-win/normalize-paths.gyp b/deps/npm/node_modules/node-gyp/gyp/test/ninja/normalize-paths-win/normalize-paths.gyp
deleted file mode 100644
index ba0ee2815..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/ninja/normalize-paths-win/normalize-paths.gyp
+++ /dev/null
@@ -1,56 +0,0 @@
-# Copyright (c) 2010 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'targets': [
- {
- 'target_name': 'Some_Target',
- 'type': 'executable',
- 'msvs_settings': {
- 'VCLinkerTool': {
- 'OutputFile': '<(PRODUCT_DIR)/stuff/AnotherName.exe',
- },
- },
- 'sources': [
- 'HeLLo.cc',
- 'blOrP.idl',
- ],
- },
- {
- 'target_name': 'second',
- 'type': 'executable',
- 'msvs_settings': {
- 'VCLinkerTool': {
- 'OutputFile': '$(OutDir)\\things\\AnotherName.exe',
- },
- },
- 'sources': [
- 'HeLLo.cc',
- ],
- },
- {
- 'target_name': 'action',
- 'type': 'none',
- 'msvs_cygwin_shell': '0',
- 'actions': [
- {
- 'inputs': [
- '$(IntDir)\\SomeInput',
- '$(OutDir)\\SomeOtherInput',
- ],
- 'outputs': [
- '<(PRODUCT_DIR)/ReSuLt',
- '<(SHARED_INTERMEDIATE_DIR)/TempFile',
- '$(OutDir)\SomethingElse',
- ],
- 'action_name': 'Test action',
- # Unfortunately, we can't normalize this field because it's
- # free-form. Fortunately, ninja doesn't inspect it at all (only the
- # inputs and outputs) so it's not mandatory.
- 'action': [],
- },
- ],
- },
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/ninja/s-needs-no-depfiles/empty.s b/deps/npm/node_modules/node-gyp/gyp/test/ninja/s-needs-no-depfiles/empty.s
deleted file mode 100644
index 218d8921e..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/ninja/s-needs-no-depfiles/empty.s
+++ /dev/null
@@ -1 +0,0 @@
-# This file intentionally left blank.
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/ninja/s-needs-no-depfiles/gyptest-s-needs-no-depfiles.py b/deps/npm/node_modules/node-gyp/gyp/test/ninja/s-needs-no-depfiles/gyptest-s-needs-no-depfiles.py
deleted file mode 100755
index 77a3245d4..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/ninja/s-needs-no-depfiles/gyptest-s-needs-no-depfiles.py
+++ /dev/null
@@ -1,42 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Verify that .s files don't always trigger a rebuild, as would happen if depfiles
-were used for them (since clang & gcc ignore -MMD when building .s->.o on
-linux).
-"""
-
-import os
-import sys
-import TestCommon
-import TestGyp
-
-# NOTE(fischman): Each generator uses depfiles (or not) differently, so this is
-# a ninja-specific test.
-test = TestGyp.TestGyp(formats=['ninja'])
-
-if sys.platform == 'win32' or sys.platform == 'win64':
- # This test is about clang/gcc vs. depfiles; VS gets a pass.
- test.pass_test()
- sys.exit(0)
-
-test.run_gyp('s-needs-no-depfiles.gyp')
-
-# Build the library, grab its timestamp, rebuild the library, ensure timestamp
-# hasn't changed.
-test.build('s-needs-no-depfiles.gyp', 'empty')
-empty_dll = test.built_file_path('empty', test.SHARED_LIB)
-test.built_file_must_exist(empty_dll)
-pre_stat = os.stat(test.built_file_path(empty_dll))
-test.sleep()
-test.build('s-needs-no-depfiles.gyp', 'empty')
-post_stat = os.stat(test.built_file_path(empty_dll))
-
-if pre_stat.st_mtime != post_stat.st_mtime:
- test.fail_test()
-else:
- test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/ninja/s-needs-no-depfiles/s-needs-no-depfiles.gyp b/deps/npm/node_modules/node-gyp/gyp/test/ninja/s-needs-no-depfiles/s-needs-no-depfiles.gyp
deleted file mode 100644
index bd66b1a70..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/ninja/s-needs-no-depfiles/s-needs-no-depfiles.gyp
+++ /dev/null
@@ -1,13 +0,0 @@
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'targets': [
- {
- 'target_name': 'empty',
- 'type': 'shared_library',
- 'sources': [ 'empty.s' ],
- },
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/ninja/solibs_avoid_relinking/gyptest-solibs-avoid-relinking.py b/deps/npm/node_modules/node-gyp/gyp/test/ninja/solibs_avoid_relinking/gyptest-solibs-avoid-relinking.py
deleted file mode 100755
index b81e8917a..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/ninja/solibs_avoid_relinking/gyptest-solibs-avoid-relinking.py
+++ /dev/null
@@ -1,41 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Verify that relinking a solib doesn't relink a dependent executable if the
-solib's public API hasn't changed.
-"""
-
-import os
-import sys
-import TestCommon
-import TestGyp
-
-# NOTE(fischman): This test will not work with other generators because the
-# API-hash-based-mtime-preservation optimization is only implemented in
-# ninja.py. It could be extended to the make.py generator as well pretty
-# easily, probably.
-# (also, it tests ninja-specific out paths, which would have to be generalized
-# if this was extended to other generators).
-test = TestGyp.TestGyp(formats=['ninja'])
-
-test.run_gyp('solibs_avoid_relinking.gyp')
-
-# Build the executable, grab its timestamp, touch the solib's source, rebuild
-# executable, ensure timestamp hasn't changed.
-test.build('solibs_avoid_relinking.gyp', 'b')
-test.built_file_must_exist('b' + TestCommon.exe_suffix)
-pre_stat = os.stat(test.built_file_path('b' + TestCommon.exe_suffix))
-os.utime(os.path.join(test.workdir, 'solib.cc'),
- (pre_stat.st_atime, pre_stat.st_mtime + 100))
-test.sleep()
-test.build('solibs_avoid_relinking.gyp', 'b')
-post_stat = os.stat(test.built_file_path('b' + TestCommon.exe_suffix))
-
-if pre_stat.st_mtime != post_stat.st_mtime:
- test.fail_test()
-else:
- test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/ninja/solibs_avoid_relinking/main.cc b/deps/npm/node_modules/node-gyp/gyp/test/ninja/solibs_avoid_relinking/main.cc
deleted file mode 100644
index 2cd74d3c7..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/ninja/solibs_avoid_relinking/main.cc
+++ /dev/null
@@ -1,5 +0,0 @@
-extern int foo();
-
-int main() {
- return foo();
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/ninja/solibs_avoid_relinking/solib.cc b/deps/npm/node_modules/node-gyp/gyp/test/ninja/solibs_avoid_relinking/solib.cc
deleted file mode 100644
index 0856cd4e0..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/ninja/solibs_avoid_relinking/solib.cc
+++ /dev/null
@@ -1,8 +0,0 @@
-#ifdef _MSC_VER
-__declspec(dllexport)
-#else
-__attribute__((visibility("default")))
-#endif
-int foo() {
- return 42;
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/ninja/solibs_avoid_relinking/solibs_avoid_relinking.gyp b/deps/npm/node_modules/node-gyp/gyp/test/ninja/solibs_avoid_relinking/solibs_avoid_relinking.gyp
deleted file mode 100644
index e816351d6..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/ninja/solibs_avoid_relinking/solibs_avoid_relinking.gyp
+++ /dev/null
@@ -1,38 +0,0 @@
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'targets': [
- {
- 'target_name': 'a',
- 'type': 'shared_library',
- 'sources': [ 'solib.cc' ],
- # Incremental linking enabled so that .lib timestamp is maintained when
- # exports are unchanged.
- 'msvs_settings': {
- 'VCLinkerTool': {
- 'LinkIncremental': '2',
- }
- },
- },
- {
- 'target_name': 'b',
- 'type': 'executable',
- 'sources': [ 'main.cc' ],
- 'dependencies': [ 'a' ],
- 'msvs_settings': {
- 'VCLinkerTool': {
- 'LinkIncremental': '2',
- }
- },
- },
- ],
- 'conditions': [
- ['OS=="linux"', {
- 'target_defaults': {
- 'cflags': ['-fPIC'],
- },
- }],
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/no-output/gyptest-no-output.py b/deps/npm/node_modules/node-gyp/gyp/test/no-output/gyptest-no-output.py
deleted file mode 100755
index bf9a0b5aa..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/no-output/gyptest-no-output.py
+++ /dev/null
@@ -1,21 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2009 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Verified things don't explode when there are targets without outputs.
-"""
-
-import TestGyp
-
-# TODO(evan): in ninja when there are no targets, there is no 'all'
-# target either. Disabling this test for now.
-test = TestGyp.TestGyp(formats=['!ninja'])
-
-test.run_gyp('nooutput.gyp', chdir='src')
-test.relocate('src', 'relocate/src')
-test.build('nooutput.gyp', chdir='relocate/src')
-
-test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/no-output/src/nooutput.gyp b/deps/npm/node_modules/node-gyp/gyp/test/no-output/src/nooutput.gyp
deleted file mode 100644
index c40124efc..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/no-output/src/nooutput.gyp
+++ /dev/null
@@ -1,17 +0,0 @@
-# Copyright (c) 2009 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'targets': [
- {
- 'target_name': 'no_output',
- 'type': 'none',
- 'direct_dependent_settings': {
- 'defines': [
- 'NADA',
- ],
- },
- },
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/product/gyptest-product.py b/deps/npm/node_modules/node-gyp/gyp/test/product/gyptest-product.py
deleted file mode 100755
index 955295d71..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/product/gyptest-product.py
+++ /dev/null
@@ -1,44 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Verifies simplest-possible build of a "Hello, world!" program
-using the default build target.
-"""
-
-import TestGyp
-
-# Android does not support setting the build directory.
-test = TestGyp.TestGyp(formats=['!android'])
-
-test.run_gyp('product.gyp')
-test.build('product.gyp')
-
-# executables
-test.built_file_must_exist('alt1' + test._exe, test.EXECUTABLE, bare=True)
-test.built_file_must_exist('hello2.stuff', test.EXECUTABLE, bare=True)
-test.built_file_must_exist('yoalt3.stuff', test.EXECUTABLE, bare=True)
-
-# shared libraries
-test.built_file_must_exist(test.dll_ + 'alt4' + test._dll,
- test.SHARED_LIB, bare=True)
-test.built_file_must_exist(test.dll_ + 'hello5.stuff',
- test.SHARED_LIB, bare=True)
-test.built_file_must_exist('yoalt6.stuff', test.SHARED_LIB, bare=True)
-
-# static libraries
-test.built_file_must_exist(test.lib_ + 'alt7' + test._lib,
- test.STATIC_LIB, bare=True)
-test.built_file_must_exist(test.lib_ + 'hello8.stuff',
- test.STATIC_LIB, bare=True)
-test.built_file_must_exist('yoalt9.stuff', test.STATIC_LIB, bare=True)
-
-# alternate product_dir
-test.built_file_must_exist('bob/yoalt10.stuff', test.EXECUTABLE, bare=True)
-test.built_file_must_exist('bob/yoalt11.stuff', test.EXECUTABLE, bare=True)
-test.built_file_must_exist('bob/yoalt12.stuff', test.EXECUTABLE, bare=True)
-
-test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/product/hello.c b/deps/npm/node_modules/node-gyp/gyp/test/product/hello.c
deleted file mode 100644
index 94798f3e7..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/product/hello.c
+++ /dev/null
@@ -1,15 +0,0 @@
-/* Copyright (c) 2009 Google Inc. All rights reserved.
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file. */
-
-#include <stdio.h>
-
-int func1(void) {
- return 42;
-}
-
-int main(int argc, char *argv[]) {
- printf("Hello, world!\n");
- printf("%d\n", func1());
- return 0;
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/product/product.gyp b/deps/npm/node_modules/node-gyp/gyp/test/product/product.gyp
deleted file mode 100644
index c25eaaacb..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/product/product.gyp
+++ /dev/null
@@ -1,128 +0,0 @@
-# Copyright (c) 2009 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'targets': [
- {
- 'target_name': 'hello1',
- 'product_name': 'alt1',
- 'type': 'executable',
- 'sources': [
- 'hello.c',
- ],
- },
- {
- 'target_name': 'hello2',
- 'product_extension': 'stuff',
- 'type': 'executable',
- 'sources': [
- 'hello.c',
- ],
- },
- {
- 'target_name': 'hello3',
- 'product_name': 'alt3',
- 'product_extension': 'stuff',
- 'product_prefix': 'yo',
- 'type': 'executable',
- 'sources': [
- 'hello.c',
- ],
- },
-
- {
- 'target_name': 'hello4',
- 'product_name': 'alt4',
- 'type': 'shared_library',
- 'sources': [
- 'hello.c',
- ],
- },
- {
- 'target_name': 'hello5',
- 'product_extension': 'stuff',
- 'type': 'shared_library',
- 'sources': [
- 'hello.c',
- ],
- },
- {
- 'target_name': 'hello6',
- 'product_name': 'alt6',
- 'product_extension': 'stuff',
- 'product_prefix': 'yo',
- 'type': 'shared_library',
- 'sources': [
- 'hello.c',
- ],
- },
-
- {
- 'target_name': 'hello7',
- 'product_name': 'alt7',
- 'type': 'static_library',
- 'sources': [
- 'hello.c',
- ],
- },
- {
- 'target_name': 'hello8',
- 'product_extension': 'stuff',
- 'type': 'static_library',
- 'sources': [
- 'hello.c',
- ],
- },
- {
- 'target_name': 'hello9',
- 'product_name': 'alt9',
- 'product_extension': 'stuff',
- 'product_prefix': 'yo',
- 'type': 'static_library',
- 'sources': [
- 'hello.c',
- ],
- },
- {
- 'target_name': 'hello10',
- 'product_name': 'alt10',
- 'product_extension': 'stuff',
- 'product_prefix': 'yo',
- 'product_dir': '<(PRODUCT_DIR)/bob',
- 'type': 'executable',
- 'sources': [
- 'hello.c',
- ],
- },
- {
- 'target_name': 'hello11',
- 'product_name': 'alt11',
- 'product_extension': 'stuff',
- 'product_prefix': 'yo',
- 'product_dir': '<(PRODUCT_DIR)/bob',
- 'type': 'shared_library',
- 'sources': [
- 'hello.c',
- ],
- },
- {
- 'target_name': 'hello12',
- 'product_name': 'alt12',
- 'product_extension': 'stuff',
- 'product_prefix': 'yo',
- 'product_dir': '<(PRODUCT_DIR)/bob',
- 'type': 'static_library',
- 'sources': [
- 'hello.c',
- ],
- },
- ],
- 'conditions': [
- ['OS=="linux"', {
- 'target_defaults': {
- 'cflags': ['-fPIC'],
- },
- }],
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/relative/foo/a/a.cc b/deps/npm/node_modules/node-gyp/gyp/test/relative/foo/a/a.cc
deleted file mode 100644
index 7d1c95344..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/relative/foo/a/a.cc
+++ /dev/null
@@ -1,9 +0,0 @@
-/*
- * Copyright (c) 2011 Google Inc. All rights reserved.
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-int main() {
- return 0;
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/relative/foo/a/a.gyp b/deps/npm/node_modules/node-gyp/gyp/test/relative/foo/a/a.gyp
deleted file mode 100644
index 66316ac68..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/relative/foo/a/a.gyp
+++ /dev/null
@@ -1,13 +0,0 @@
-{
- 'targets': [
- {
- 'target_name': 'a',
- 'type': 'executable',
- 'sources': ['a.cc'],
- 'dependencies': [
- '../../foo/b/b.gyp:b',
- 'c/c.gyp:c',
- ],
- },
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/relative/foo/a/c/c.cc b/deps/npm/node_modules/node-gyp/gyp/test/relative/foo/a/c/c.cc
deleted file mode 100644
index 9d2247168..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/relative/foo/a/c/c.cc
+++ /dev/null
@@ -1,9 +0,0 @@
-/*
- * Copyright (c) 2011 Google Inc. All rights reserved.
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-int func() {
- return 0;
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/relative/foo/a/c/c.gyp b/deps/npm/node_modules/node-gyp/gyp/test/relative/foo/a/c/c.gyp
deleted file mode 100644
index c1f087db9..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/relative/foo/a/c/c.gyp
+++ /dev/null
@@ -1,12 +0,0 @@
-{
- 'targets': [
- {
- 'target_name': 'c',
- 'type': 'static_library',
- 'sources': ['c.cc'],
- 'dependencies': [
- '../../b/b.gyp:b',
- ],
- },
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/relative/foo/b/b.cc b/deps/npm/node_modules/node-gyp/gyp/test/relative/foo/b/b.cc
deleted file mode 100644
index 011d59ceb..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/relative/foo/b/b.cc
+++ /dev/null
@@ -1,9 +0,0 @@
-/*
- * Copyright (c) 2011 Google Inc. All rights reserved.
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-int func2() {
- return 0;
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/relative/foo/b/b.gyp b/deps/npm/node_modules/node-gyp/gyp/test/relative/foo/b/b.gyp
deleted file mode 100644
index 0ebe4533d..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/relative/foo/b/b.gyp
+++ /dev/null
@@ -1,9 +0,0 @@
-{
- 'targets': [
- {
- 'target_name': 'b',
- 'type': 'static_library',
- 'sources': ['b.cc'],
- },
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/relative/gyptest-default.py b/deps/npm/node_modules/node-gyp/gyp/test/relative/gyptest-default.py
deleted file mode 100755
index 2d657aa67..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/relative/gyptest-default.py
+++ /dev/null
@@ -1,25 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2011 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Verifies simplest-possible build of a "Hello, world!" program
-using the default build target.
-"""
-
-import TestGyp
-
-test = TestGyp.TestGyp(workdir='workarea_default', formats=['msvs'])
-
-# Run from down in foo.
-test.run_gyp('a.gyp', chdir='foo/a')
-sln = test.workpath('foo/a/a.sln')
-sln_data = open(sln, 'rb').read()
-vcproj = sln_data.count('b.vcproj')
-vcxproj = sln_data.count('b.vcxproj')
-if (vcproj, vcxproj) not in [(1, 0), (0, 1)]:
- test.fail_test()
-
-test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/rename/filecase/file.c b/deps/npm/node_modules/node-gyp/gyp/test/rename/filecase/file.c
deleted file mode 100644
index 237c8ce18..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/rename/filecase/file.c
+++ /dev/null
@@ -1 +0,0 @@
-int main() {}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/rename/filecase/test-casesensitive.gyp b/deps/npm/node_modules/node-gyp/gyp/test/rename/filecase/test-casesensitive.gyp
deleted file mode 100644
index 48eaa6eb6..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/rename/filecase/test-casesensitive.gyp
+++ /dev/null
@@ -1,15 +0,0 @@
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-{
- 'targets': [
- {
- 'target_name': 'filecaserename_sensitive',
- 'type': 'executable',
- 'sources': [
- 'FiLe.c',
- 'fIlE.c',
- ],
- },
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/rename/filecase/test.gyp b/deps/npm/node_modules/node-gyp/gyp/test/rename/filecase/test.gyp
deleted file mode 100644
index eaee9337b..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/rename/filecase/test.gyp
+++ /dev/null
@@ -1,14 +0,0 @@
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-{
- 'targets': [
- {
- 'target_name': 'filecaserename',
- 'type': 'executable',
- 'sources': [
- 'file.c',
- ],
- },
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/rename/gyptest-filecase.py b/deps/npm/node_modules/node-gyp/gyp/test/rename/gyptest-filecase.py
deleted file mode 100644
index daed5180d..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/rename/gyptest-filecase.py
+++ /dev/null
@@ -1,35 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Checks that files whose file case changes get rebuilt correctly.
-"""
-
-import os
-import TestGyp
-
-test = TestGyp.TestGyp()
-CHDIR = 'filecase'
-test.run_gyp('test.gyp', chdir=CHDIR)
-test.build('test.gyp', test.ALL, chdir=CHDIR)
-
-os.rename('filecase/file.c', 'filecase/fIlE.c')
-test.write('filecase/test.gyp',
- test.read('filecase/test.gyp').replace('file.c', 'fIlE.c'))
-test.run_gyp('test.gyp', chdir=CHDIR)
-test.build('test.gyp', test.ALL, chdir=CHDIR)
-
-
-# Check that having files that differ just in their case still work on
-# case-sensitive file systems.
-test.write('filecase/FiLe.c', 'int f(); int main() { return f(); }')
-test.write('filecase/fIlE.c', 'int f() { return 42; }')
-is_case_sensitive = test.read('filecase/FiLe.c') != test.read('filecase/fIlE.c')
-if is_case_sensitive:
- test.run_gyp('test-casesensitive.gyp', chdir=CHDIR)
- test.build('test-casesensitive.gyp', test.ALL, chdir=CHDIR)
-
-test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/restat/gyptest-restat.py b/deps/npm/node_modules/node-gyp/gyp/test/restat/gyptest-restat.py
deleted file mode 100644
index 87379044d..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/restat/gyptest-restat.py
+++ /dev/null
@@ -1,31 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Verify that dependent rules are executed iff a dependency action modifies its
-outputs.
-"""
-
-import TestGyp
-import os
-
-test = TestGyp.TestGyp(formats=['ninja', 'make', 'xcode'])
-
-test.run_gyp('restat.gyp', chdir='src')
-
-chdir = 'relocate/src'
-test.relocate('src', chdir)
-
-# Building 'dependent' the first time generates 'side_effect', but building it
-# the second time doesn't, because 'create_intermediate' doesn't update its
-# output.
-test.build('restat.gyp', 'dependent', chdir=chdir)
-test.built_file_must_exist('side_effect', chdir=chdir)
-os.remove(test.built_file_path('side_effect', chdir=chdir))
-test.build('restat.gyp', 'dependent', chdir=chdir)
-test.built_file_must_not_exist('side_effect', chdir=chdir)
-
-test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/restat/src/create_intermediate.py b/deps/npm/node_modules/node-gyp/gyp/test/restat/src/create_intermediate.py
deleted file mode 100644
index a4d745037..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/restat/src/create_intermediate.py
+++ /dev/null
@@ -1,17 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import os
-import sys
-
-"""
-Create argv[1] iff it doesn't already exist.
-"""
-
-outfile = sys.argv[1]
-if os.path.exists(outfile):
- sys.exit()
-open(outfile, "wb").close()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/restat/src/restat.gyp b/deps/npm/node_modules/node-gyp/gyp/test/restat/src/restat.gyp
deleted file mode 100644
index ff020e0ce..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/restat/src/restat.gyp
+++ /dev/null
@@ -1,50 +0,0 @@
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'targets': [
- {
- 'target_name': 'create_intermediate',
- 'type': 'none',
- 'msvs_cygwin_shell': '0',
- 'actions': [
- {
- 'action_name': 'create_intermediate',
- 'inputs': [
- 'create_intermediate.py',
- ],
- 'outputs': [
- '<(PRODUCT_DIR)/intermediate',
- 'ALWAYS.run.ALWAYS',
- ],
- 'action': [
- 'python', 'create_intermediate.py', '<(PRODUCT_DIR)/intermediate',
- ],
- },
- ],
- },
- {
- 'target_name': 'dependent',
- 'type': 'none',
- 'msvs_cygwin_shell': '0',
- 'dependencies': [
- 'create_intermediate',
- ],
- 'actions': [
- {
- 'action_name': 'dependent',
- 'inputs': [
- '<(PRODUCT_DIR)/intermediate',
- ],
- 'outputs': [
- '<(PRODUCT_DIR)/dependent'
- ],
- 'action': [
- 'python', 'touch.py', '<(PRODUCT_DIR)/dependent', '<(PRODUCT_DIR)/side_effect',
- ],
- },
- ],
- },
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/restat/src/touch.py b/deps/npm/node_modules/node-gyp/gyp/test/restat/src/touch.py
deleted file mode 100644
index 7cd781a90..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/restat/src/touch.py
+++ /dev/null
@@ -1,16 +0,0 @@
-#!/usr/bin/env python
-#
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import os
-import sys
-
-"""Cross-platform touch."""
-
-for fname in sys.argv[1:]:
- if os.path.exists(fname):
- os.utime(fname, None)
- else:
- open(fname, 'w').close()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/rules-dirname/gyptest-dirname.py b/deps/npm/node_modules/node-gyp/gyp/test/rules-dirname/gyptest-dirname.py
deleted file mode 100755
index 6e684a4c4..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/rules-dirname/gyptest-dirname.py
+++ /dev/null
@@ -1,38 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2011 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Verifies simple rules when using an explicit build target of 'all'.
-"""
-
-import TestGyp
-
-test = TestGyp.TestGyp(formats=['make', 'ninja', 'xcode'])
-
-test.run_gyp('actions.gyp', chdir='src')
-
-test.relocate('src', 'relocate/src')
-
-test.build('actions.gyp', chdir='relocate/src')
-
-expect = """\
-hi c
-hello baz
-"""
-if test.format == 'xcode':
- chdir = 'relocate/src/subdir'
-else:
- chdir = 'relocate/src'
-test.run_built_executable('gencc_int_output', chdir=chdir, stdout=expect)
-
-if test.format == 'msvs':
- test.must_exist('relocate/src/subdir/foo/bar/baz.printed')
- test.must_exist('relocate/src/subdir/a/b/c.printed')
-else:
- test.must_match('relocate/src/subdir/foo/bar/baz.printed', 'foo/bar')
- test.must_match('relocate/src/subdir/a/b/c.printed', 'a/b')
-
-test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/rules-dirname/src/actions.gyp b/deps/npm/node_modules/node-gyp/gyp/test/rules-dirname/src/actions.gyp
deleted file mode 100644
index c5693c6c9..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/rules-dirname/src/actions.gyp
+++ /dev/null
@@ -1,15 +0,0 @@
-# Copyright (c) 2011 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'targets': [
- {
- 'target_name': 'pull_in_all_actions',
- 'type': 'none',
- 'dependencies': [
- 'subdir/input-rule-dirname.gyp:*',
- ],
- },
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/rules-dirname/src/copy-file.py b/deps/npm/node_modules/node-gyp/gyp/test/rules-dirname/src/copy-file.py
deleted file mode 100755
index 9774ccc96..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/rules-dirname/src/copy-file.py
+++ /dev/null
@@ -1,11 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2011 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-import sys
-
-contents = open(sys.argv[1], 'r').read()
-open(sys.argv[2], 'wb').write(contents)
-
-sys.exit(0)
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/rules-dirname/src/subdir/a/b/c.gencc b/deps/npm/node_modules/node-gyp/gyp/test/rules-dirname/src/subdir/a/b/c.gencc
deleted file mode 100644
index a4c8eea95..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/rules-dirname/src/subdir/a/b/c.gencc
+++ /dev/null
@@ -1,11 +0,0 @@
-// -*- mode: c++ -*-
-#include <iostream>
-
-using std::cout;
-using std::endl;
-
-namespace gen {
- void c() {
- cout << "hi c" << endl;
- }
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/rules-dirname/src/subdir/a/b/c.printvars b/deps/npm/node_modules/node-gyp/gyp/test/rules-dirname/src/subdir/a/b/c.printvars
deleted file mode 100644
index cc4561dc4..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/rules-dirname/src/subdir/a/b/c.printvars
+++ /dev/null
@@ -1 +0,0 @@
-# Empty file for testing build rules
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/rules-dirname/src/subdir/foo/bar/baz.gencc b/deps/npm/node_modules/node-gyp/gyp/test/rules-dirname/src/subdir/foo/bar/baz.gencc
deleted file mode 100644
index ff01c2ee5..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/rules-dirname/src/subdir/foo/bar/baz.gencc
+++ /dev/null
@@ -1,11 +0,0 @@
-// -*- mode: c++ -*-
-#include <iostream>
-
-using std::cout;
-using std::endl;
-
-namespace gen {
- void baz() {
- cout << "hello baz" << endl;
- }
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/rules-dirname/src/subdir/foo/bar/baz.printvars b/deps/npm/node_modules/node-gyp/gyp/test/rules-dirname/src/subdir/foo/bar/baz.printvars
deleted file mode 100644
index cc4561dc4..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/rules-dirname/src/subdir/foo/bar/baz.printvars
+++ /dev/null
@@ -1 +0,0 @@
-# Empty file for testing build rules
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/rules-dirname/src/subdir/input-rule-dirname.gyp b/deps/npm/node_modules/node-gyp/gyp/test/rules-dirname/src/subdir/input-rule-dirname.gyp
deleted file mode 100644
index 6f41d4f48..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/rules-dirname/src/subdir/input-rule-dirname.gyp
+++ /dev/null
@@ -1,92 +0,0 @@
-# Copyright (c) 2011 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'targets': [
- {
- 'target_name': 'print_rule_input_path',
- 'type': 'none',
- 'msvs_cygwin_shell': 0,
- 'sources': [
- 'foo/bar/baz.printvars',
- 'a/b/c.printvars',
- ],
- 'rules': [
- {
- 'rule_name': 'printvars',
- 'extension': 'printvars',
- 'inputs': [
- 'printvars.py',
- ],
- 'outputs': [
- '<(RULE_INPUT_DIRNAME)/<(RULE_INPUT_ROOT).printed',
- ],
- 'action': [
- 'python', '<@(_inputs)', '<(RULE_INPUT_DIRNAME)', '<@(_outputs)',
- ],
- },
- ],
- },
- {
- 'target_name': 'gencc_int_output',
- 'type': 'executable',
- 'msvs_cygwin_shell': 0,
- 'msvs_cygwin_dirs': ['../../../../../../<(DEPTH)/third_party/cygwin'],
- 'sources': [
- 'foo/bar/baz.gencc',
- 'a/b/c.gencc',
- 'main.cc',
- ],
- 'conditions': [
- ['OS=="win"', {
- 'dependencies': [
- 'cygwin',
- ],
- }],
- ],
- 'rules': [
- {
- 'rule_name': 'gencc',
- 'extension': 'gencc',
- 'msvs_external_rule': 1,
- 'inputs': [
- '<(DEPTH)/copy-file.py',
- ],
- 'outputs': [
- '<(INTERMEDIATE_DIR)/<(RULE_INPUT_DIRNAME)/<(RULE_INPUT_ROOT).cc',
- ],
- 'action': [
- 'python', '<@(_inputs)', '<(RULE_INPUT_PATH)', '<@(_outputs)',
- ],
- 'process_outputs_as_sources': 1,
- },
- ],
- },
- ],
- 'conditions': [
- ['OS=="win"', {
- 'targets': [
- {
- 'target_name': 'cygwin',
- 'type': 'none',
- 'actions': [
- {
- 'action_name': 'setup_mount',
- 'msvs_cygwin_shell': 0,
- 'inputs': [
- '../../../../../../<(DEPTH)/third_party/cygwin/setup_mount.bat',
- ],
- # Visual Studio requires an output file, or else the
- # custom build step won't run.
- 'outputs': [
- '<(INTERMEDIATE_DIR)/_always_run_setup_mount.marker',
- ],
- 'action': ['<@(_inputs)'],
- },
- ],
- },
- ],
- }],
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/rules-dirname/src/subdir/main.cc b/deps/npm/node_modules/node-gyp/gyp/test/rules-dirname/src/subdir/main.cc
deleted file mode 100644
index bacc568ad..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/rules-dirname/src/subdir/main.cc
+++ /dev/null
@@ -1,12 +0,0 @@
-// Copyright (c) 2011 Google Inc. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-namespace gen {
- extern void c();
- extern void baz();
-}
-
-int main() {
- gen::c();
- gen::baz();
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/rules-dirname/src/subdir/printvars.py b/deps/npm/node_modules/node-gyp/gyp/test/rules-dirname/src/subdir/printvars.py
deleted file mode 100755
index ef3d92e8c..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/rules-dirname/src/subdir/printvars.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2011 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Prints interesting vars
-"""
-
-import sys;
-
-out = open(sys.argv[2], 'w')
-out.write(sys.argv[1]);
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/rules-rebuild/gyptest-all.py b/deps/npm/node_modules/node-gyp/gyp/test/rules-rebuild/gyptest-all.py
deleted file mode 100755
index aaaa2a6e6..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/rules-rebuild/gyptest-all.py
+++ /dev/null
@@ -1,70 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2009 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Verifies that a rule that generates multiple outputs rebuilds
-correctly when the inputs change.
-"""
-
-import TestGyp
-
-test = TestGyp.TestGyp(workdir='workarea_all')
-
-test.run_gyp('same_target.gyp', chdir='src')
-
-test.relocate('src', 'relocate/src')
-
-
-test.build('same_target.gyp', test.ALL, chdir='relocate/src')
-
-expect = """\
-Hello from main.c
-Hello from prog1.in!
-Hello from prog2.in!
-"""
-
-test.run_built_executable('program', chdir='relocate/src', stdout=expect)
-
-test.up_to_date('same_target.gyp', 'program', chdir='relocate/src')
-
-
-test.sleep()
-contents = test.read(['relocate', 'src', 'prog1.in'])
-contents = contents.replace('!', ' AGAIN!')
-test.write(['relocate', 'src', 'prog1.in'], contents)
-
-test.build('same_target.gyp', test.ALL, chdir='relocate/src')
-
-expect = """\
-Hello from main.c
-Hello from prog1.in AGAIN!
-Hello from prog2.in!
-"""
-
-test.run_built_executable('program', chdir='relocate/src', stdout=expect)
-
-test.up_to_date('same_target.gyp', 'program', chdir='relocate/src')
-
-
-test.sleep()
-contents = test.read(['relocate', 'src', 'prog2.in'])
-contents = contents.replace('!', ' AGAIN!')
-test.write(['relocate', 'src', 'prog2.in'], contents)
-
-test.build('same_target.gyp', test.ALL, chdir='relocate/src')
-
-expect = """\
-Hello from main.c
-Hello from prog1.in AGAIN!
-Hello from prog2.in AGAIN!
-"""
-
-test.run_built_executable('program', chdir='relocate/src', stdout=expect)
-
-test.up_to_date('same_target.gyp', 'program', chdir='relocate/src')
-
-
-test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/rules-rebuild/gyptest-default.py b/deps/npm/node_modules/node-gyp/gyp/test/rules-rebuild/gyptest-default.py
deleted file mode 100755
index ac3f0209a..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/rules-rebuild/gyptest-default.py
+++ /dev/null
@@ -1,91 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Verifies that a rule that generates multiple outputs rebuilds
-correctly when the inputs change.
-"""
-
-import TestGyp
-
-test = TestGyp.TestGyp(workdir='workarea_default')
-
-test.run_gyp('same_target.gyp', chdir='src')
-
-test.relocate('src', 'relocate/src')
-
-
-test.build('same_target.gyp', chdir='relocate/src')
-
-expect = """\
-Hello from main.c
-Hello from prog1.in!
-Hello from prog2.in!
-"""
-
-test.run_built_executable('program', chdir='relocate/src', stdout=expect)
-
-test.up_to_date('same_target.gyp', 'program', chdir='relocate/src')
-
-
-test.sleep()
-contents = test.read(['relocate', 'src', 'prog1.in'])
-contents = contents.replace('!', ' AGAIN!')
-test.write(['relocate', 'src', 'prog1.in'], contents)
-
-test.build('same_target.gyp', chdir='relocate/src')
-
-expect = """\
-Hello from main.c
-Hello from prog1.in AGAIN!
-Hello from prog2.in!
-"""
-
-test.run_built_executable('program', chdir='relocate/src', stdout=expect)
-
-test.up_to_date('same_target.gyp', 'program', chdir='relocate/src')
-
-
-test.sleep()
-contents = test.read(['relocate', 'src', 'prog2.in'])
-contents = contents.replace('!', ' AGAIN!')
-test.write(['relocate', 'src', 'prog2.in'], contents)
-
-test.build('same_target.gyp', chdir='relocate/src')
-
-expect = """\
-Hello from main.c
-Hello from prog1.in AGAIN!
-Hello from prog2.in AGAIN!
-"""
-
-test.run_built_executable('program', chdir='relocate/src', stdout=expect)
-
-test.up_to_date('same_target.gyp', 'program', chdir='relocate/src')
-
-
-# Test that modifying a rule's inputs (specifically, make-sources.py) causes
-# the targets to be built.
-
-test.sleep()
-contents = test.read(['relocate', 'src', 'make-sources.py'])
-contents = contents.replace('%s', 'the amazing %s')
-test.write(['relocate', 'src', 'make-sources.py'], contents)
-
-test.build('same_target.gyp', chdir='relocate/src')
-
-expect = """\
-Hello from main.c
-Hello from the amazing prog1.in AGAIN!
-Hello from the amazing prog2.in AGAIN!
-"""
-
-test.run_built_executable('program', chdir='relocate/src', stdout=expect)
-
-test.up_to_date('same_target.gyp', 'program', chdir='relocate/src')
-
-
-test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/rules-rebuild/src/main.c b/deps/npm/node_modules/node-gyp/gyp/test/rules-rebuild/src/main.c
deleted file mode 100644
index bdc5ec875..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/rules-rebuild/src/main.c
+++ /dev/null
@@ -1,12 +0,0 @@
-#include <stdio.h>
-
-extern void prog1(void);
-extern void prog2(void);
-
-int main(int argc, char *argv[])
-{
- printf("Hello from main.c\n");
- prog1();
- prog2();
- return 0;
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/rules-rebuild/src/make-sources.py b/deps/npm/node_modules/node-gyp/gyp/test/rules-rebuild/src/make-sources.py
deleted file mode 100755
index 7ec022780..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/rules-rebuild/src/make-sources.py
+++ /dev/null
@@ -1,19 +0,0 @@
-#!/usr/bin/env python
-# Copyright (c) 2011 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import sys
-
-assert len(sys.argv) == 4, sys.argv
-
-(in_file, c_file, h_file) = sys.argv[1:]
-
-def write_file(filename, contents):
- open(filename, 'wb').write(contents)
-
-write_file(c_file, open(in_file, 'rb').read())
-
-write_file(h_file, '#define NAME "%s"\n' % in_file)
-
-sys.exit(0)
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/rules-rebuild/src/prog1.in b/deps/npm/node_modules/node-gyp/gyp/test/rules-rebuild/src/prog1.in
deleted file mode 100644
index 191b00ef1..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/rules-rebuild/src/prog1.in
+++ /dev/null
@@ -1,7 +0,0 @@
-#include <stdio.h>
-#include "prog1.h"
-
-void prog1(void)
-{
- printf("Hello from %s!\n", NAME);
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/rules-rebuild/src/prog2.in b/deps/npm/node_modules/node-gyp/gyp/test/rules-rebuild/src/prog2.in
deleted file mode 100644
index 7bfac5104..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/rules-rebuild/src/prog2.in
+++ /dev/null
@@ -1,7 +0,0 @@
-#include <stdio.h>
-#include "prog2.h"
-
-void prog2(void)
-{
- printf("Hello from %s!\n", NAME);
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/rules-rebuild/src/same_target.gyp b/deps/npm/node_modules/node-gyp/gyp/test/rules-rebuild/src/same_target.gyp
deleted file mode 100644
index 22ba56056..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/rules-rebuild/src/same_target.gyp
+++ /dev/null
@@ -1,31 +0,0 @@
-{
- 'targets': [
- {
- 'target_name': 'program',
- 'type': 'executable',
- 'msvs_cygwin_shell': 0,
- 'sources': [
- 'main.c',
- 'prog1.in',
- 'prog2.in',
- ],
- 'rules': [
- {
- 'rule_name': 'make_sources',
- 'extension': 'in',
- 'inputs': [
- 'make-sources.py',
- ],
- 'outputs': [
- '<(INTERMEDIATE_DIR)/<(RULE_INPUT_ROOT).c',
- '<(INTERMEDIATE_DIR)/<(RULE_INPUT_ROOT).h',
- ],
- 'action': [
- 'python', '<(_inputs)', '<(RULE_INPUT_NAME)', '<@(_outputs)',
- ],
- 'process_outputs_as_sources': 1,
- },
- ],
- },
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/rules-variables/gyptest-rules-variables.py b/deps/npm/node_modules/node-gyp/gyp/test/rules-variables/gyptest-rules-variables.py
deleted file mode 100755
index 06ee5ca83..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/rules-variables/gyptest-rules-variables.py
+++ /dev/null
@@ -1,26 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2011 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Verifies rules related variables are expanded.
-"""
-
-import TestGyp
-
-test = TestGyp.TestGyp(formats=['ninja'])
-
-test.relocate('src', 'relocate/src')
-
-test.run_gyp('variables.gyp', chdir='relocate/src')
-
-test.build('variables.gyp', chdir='relocate/src')
-
-test.run_built_executable('all_rule_variables',
- chdir='relocate/src',
- stdout="input_root\ninput_dirname\ninput_path\n" +
- "input_ext\ninput_name\n")
-
-test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/rules-variables/src/input_ext.c b/deps/npm/node_modules/node-gyp/gyp/test/rules-variables/src/input_ext.c
deleted file mode 100644
index f41e73ef8..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/rules-variables/src/input_ext.c
+++ /dev/null
@@ -1,9 +0,0 @@
-// Copyright (c) 2011 Google Inc. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include <stdio.h>
-
-void input_ext() {
- printf("input_ext\n");
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/rules-variables/src/input_name/test.c b/deps/npm/node_modules/node-gyp/gyp/test/rules-variables/src/input_name/test.c
deleted file mode 100644
index e28b74d11..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/rules-variables/src/input_name/test.c
+++ /dev/null
@@ -1,9 +0,0 @@
-// Copyright (c) 2011 Google Inc. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include <stdio.h>
-
-void input_name() {
- printf("input_name\n");
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/rules-variables/src/input_path/subdir/test.c b/deps/npm/node_modules/node-gyp/gyp/test/rules-variables/src/input_path/subdir/test.c
deleted file mode 100644
index 403dbbda4..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/rules-variables/src/input_path/subdir/test.c
+++ /dev/null
@@ -1,9 +0,0 @@
-// Copyright (c) 2011 Google Inc. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include <stdio.h>
-
-void input_path() {
- printf("input_path\n");
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/rules-variables/src/subdir/input_dirname.c b/deps/npm/node_modules/node-gyp/gyp/test/rules-variables/src/subdir/input_dirname.c
deleted file mode 100644
index 40cecd87d..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/rules-variables/src/subdir/input_dirname.c
+++ /dev/null
@@ -1,9 +0,0 @@
-// Copyright (c) 2011 Google Inc. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include <stdio.h>
-
-void input_dirname() {
- printf("input_dirname\n");
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/rules-variables/src/subdir/test.c b/deps/npm/node_modules/node-gyp/gyp/test/rules-variables/src/subdir/test.c
deleted file mode 100644
index 6c0280b8a..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/rules-variables/src/subdir/test.c
+++ /dev/null
@@ -1,18 +0,0 @@
-// Copyright (c) 2011 Google Inc. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-extern void input_root();
-extern void input_dirname();
-extern void input_path();
-extern void input_ext();
-extern void input_name();
-
-int main() {
- input_root();
- input_dirname();
- input_path();
- input_ext();
- input_name();
- return 0;
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/rules-variables/src/test.input_root.c b/deps/npm/node_modules/node-gyp/gyp/test/rules-variables/src/test.input_root.c
deleted file mode 100644
index 33a7740a5..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/rules-variables/src/test.input_root.c
+++ /dev/null
@@ -1,9 +0,0 @@
-// Copyright (c) 2011 Google Inc. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include <stdio.h>
-
-void input_root() {
- printf("input_root\n");
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/rules-variables/src/variables.gyp b/deps/npm/node_modules/node-gyp/gyp/test/rules-variables/src/variables.gyp
deleted file mode 100644
index 6debba12e..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/rules-variables/src/variables.gyp
+++ /dev/null
@@ -1,40 +0,0 @@
-# Copyright (c) 2011 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'target_defaults': {
- # This test shouldn't ever actually need to execute its rules: there's no
- # command line that generates any output anyway. However, there's something
- # slightly broken in either ninja or (maybe more likely?) on the win32 VM
- # gypbots that breaks dependency checking and causes this rule to want to
- # run. When it does run, the cygwin path is wrong, so the do-nothing step
- # fails.
- # TODO: Investigate and fix whatever's actually failing and remove this.
- 'msvs_cygwin_dirs': ['../../../../../../<(DEPTH)/third_party/cygwin'],
- },
- 'targets': [
- {
- 'target_name': 'all_rule_variables',
- 'type': 'executable',
- 'sources': [
- 'subdir/test.c',
- ],
- 'rules': [
- {
- 'rule_name': 'rule_variable',
- 'extension': 'c',
- 'outputs': [
- '<(RULE_INPUT_ROOT).input_root.c',
- '<(RULE_INPUT_DIRNAME)/input_dirname.c',
- 'input_path/<(RULE_INPUT_PATH)',
- 'input_ext<(RULE_INPUT_EXT)',
- 'input_name/<(RULE_INPUT_NAME)',
- ],
- 'action': [],
- 'process_outputs_as_sources': 1,
- },
- ],
- },
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/rules/gyptest-all.py b/deps/npm/node_modules/node-gyp/gyp/test/rules/gyptest-all.py
deleted file mode 100755
index d869fd3a8..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/rules/gyptest-all.py
+++ /dev/null
@@ -1,69 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2011 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Verifies simple rules when using an explicit build target of 'all'.
-"""
-
-import TestGyp
-
-test = TestGyp.TestGyp()
-
-test.run_gyp('no_action_with_rules_fails.gyp', chdir='src/noaction', status=1,
- stderr=None)
-
-test.run_gyp('actions.gyp', chdir='src')
-
-test.relocate('src', 'relocate/src')
-
-test.build('actions.gyp', test.ALL, chdir='relocate/src')
-
-expect = """\
-Hello from program.c
-Hello from function1.in
-Hello from function2.in
-"""
-
-if test.format == 'xcode':
- chdir = 'relocate/src/subdir1'
-else:
- chdir = 'relocate/src'
-test.run_built_executable('program', chdir=chdir, stdout=expect)
-
-expect = """\
-Hello from program.c
-Hello from function3.in
-"""
-
-if test.format == 'xcode':
- chdir = 'relocate/src/subdir3'
-else:
- chdir = 'relocate/src'
-test.run_built_executable('program2', chdir=chdir, stdout=expect)
-
-test.must_match('relocate/src/subdir2/file1.out', 'Hello from file1.in\n')
-test.must_match('relocate/src/subdir2/file2.out', 'Hello from file2.in\n')
-
-test.must_match('relocate/src/subdir2/file1.out2', 'Hello from file1.in\n')
-test.must_match('relocate/src/subdir2/file2.out2', 'Hello from file2.in\n')
-
-test.must_match('relocate/src/external/file1.external_rules.out',
- 'Hello from file1.in\n')
-test.must_match('relocate/src/external/file2.external_rules.out',
- 'Hello from file2.in\n')
-
-expect = """\
-Hello from program.c
-Got 41.
-"""
-
-if test.format == 'xcode':
- chdir = 'relocate/src/subdir4'
-else:
- chdir = 'relocate/src'
-test.run_built_executable('program4', chdir=chdir, stdout=expect)
-
-test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/rules/gyptest-default.py b/deps/npm/node_modules/node-gyp/gyp/test/rules/gyptest-default.py
deleted file mode 100755
index 117c53db0..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/rules/gyptest-default.py
+++ /dev/null
@@ -1,55 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2011 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Verifies simple rules when using an explicit build target of 'all'.
-"""
-
-import TestGyp
-
-test = TestGyp.TestGyp()
-
-test.run_gyp('actions.gyp', chdir='src')
-
-test.relocate('src', 'relocate/src')
-
-test.build('actions.gyp', chdir='relocate/src')
-
-expect = """\
-Hello from program.c
-Hello from function1.in
-Hello from function2.in
-"""
-
-if test.format == 'xcode':
- chdir = 'relocate/src/subdir1'
-else:
- chdir = 'relocate/src'
-test.run_built_executable('program', chdir=chdir, stdout=expect)
-
-expect = """\
-Hello from program.c
-Hello from function3.in
-"""
-
-if test.format == 'xcode':
- chdir = 'relocate/src/subdir3'
-else:
- chdir = 'relocate/src'
-test.run_built_executable('program2', chdir=chdir, stdout=expect)
-
-test.must_match('relocate/src/subdir2/file1.out', 'Hello from file1.in\n')
-test.must_match('relocate/src/subdir2/file2.out', 'Hello from file2.in\n')
-
-test.must_match('relocate/src/subdir2/file1.out2', 'Hello from file1.in\n')
-test.must_match('relocate/src/subdir2/file2.out2', 'Hello from file2.in\n')
-
-test.must_match('relocate/src/external/file1.external_rules.out',
- 'Hello from file1.in\n')
-test.must_match('relocate/src/external/file2.external_rules.out',
- 'Hello from file2.in\n')
-
-test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/rules/gyptest-input-root.py b/deps/npm/node_modules/node-gyp/gyp/test/rules/gyptest-input-root.py
deleted file mode 100755
index 92bade6d4..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/rules/gyptest-input-root.py
+++ /dev/null
@@ -1,26 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2011 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Verifies that RULE_INPUT_ROOT isn't turned into a path in rule actions
-"""
-
-import TestGyp
-
-test = TestGyp.TestGyp()
-
-test.run_gyp('input-root.gyp', chdir='src')
-
-test.relocate('src', 'relocate/src')
-
-test.build('input-root.gyp', target='test', chdir='relocate/src')
-
-expect = """\
-Hello somefile
-"""
-
-test.run_built_executable('test', chdir='relocate/src', stdout=expect)
-test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/rules/gyptest-special-variables.py b/deps/npm/node_modules/node-gyp/gyp/test/rules/gyptest-special-variables.py
deleted file mode 100644
index 05ea7cee1..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/rules/gyptest-special-variables.py
+++ /dev/null
@@ -1,18 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-""" Verifies that VS variables that require special variables are expanded
-correctly. """
-
-import sys
-import TestGyp
-
-if sys.platform == 'win32':
- test = TestGyp.TestGyp()
-
- test.run_gyp('special-variables.gyp', chdir='src')
- test.build('special-variables.gyp', test.ALL, chdir='src')
- test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/rules/src/actions.gyp b/deps/npm/node_modules/node-gyp/gyp/test/rules/src/actions.gyp
deleted file mode 100644
index 5c0a40b0c..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/rules/src/actions.gyp
+++ /dev/null
@@ -1,22 +0,0 @@
-# Copyright (c) 2011 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'targets': [
- {
- 'target_name': 'pull_in_all_actions',
- 'type': 'none',
- 'dependencies': [
- 'subdir1/executable.gyp:*',
- 'subdir2/never_used.gyp:*',
- 'subdir2/no_inputs.gyp:*',
- 'subdir2/no_action.gyp:*',
- 'subdir2/none.gyp:*',
- 'subdir3/executable2.gyp:*',
- 'subdir4/build-asm.gyp:*',
- 'external/external.gyp:*',
- ],
- },
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/rules/src/an_asm.S b/deps/npm/node_modules/node-gyp/gyp/test/rules/src/an_asm.S
deleted file mode 100644
index eeb134555..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/rules/src/an_asm.S
+++ /dev/null
@@ -1,6 +0,0 @@
-// Copyright (c) 2012 Google Inc. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Fake asm file.
-int main() {}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/rules/src/as.bat b/deps/npm/node_modules/node-gyp/gyp/test/rules/src/as.bat
deleted file mode 100644
index 903c31a72..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/rules/src/as.bat
+++ /dev/null
@@ -1,7 +0,0 @@
-@echo off
-:: Copyright (c) 2011 Google Inc. All rights reserved.
-:: Use of this source code is governed by a BSD-style license that can be
-:: found in the LICENSE file.
-
-:: Fake assembler for Windows
-cl /TP /c %1 /Fo%2
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/rules/src/copy-file.py b/deps/npm/node_modules/node-gyp/gyp/test/rules/src/copy-file.py
deleted file mode 100755
index 5a5feae1f..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/rules/src/copy-file.py
+++ /dev/null
@@ -1,11 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2009 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-import sys
-
-contents = open(sys.argv[1], 'r').read()
-open(sys.argv[2], 'wb').write(contents)
-
-sys.exit(0)
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/rules/src/external/external.gyp b/deps/npm/node_modules/node-gyp/gyp/test/rules/src/external/external.gyp
deleted file mode 100644
index b28174f57..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/rules/src/external/external.gyp
+++ /dev/null
@@ -1,66 +0,0 @@
-# Copyright (c) 2009 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-# Test that the case where there are no inputs (other than the
-# file the rule applies to).
-{
- 'target_defaults': {
- 'msvs_cygwin_dirs': ['../../../../../../<(DEPTH)/third_party/cygwin'],
- },
- 'targets': [
- {
- 'target_name': 'external_rules',
- 'type': 'none',
- 'sources': [
- 'file1.in',
- 'file2.in',
- ],
- 'conditions': [
- ['OS=="win"', {
- 'dependencies': [
- 'cygwin',
- ],
- }],
- ],
- 'rules': [
- {
- 'rule_name': 'copy_file',
- 'extension': 'in',
- 'msvs_external_rule': 1,
- 'outputs': [
- '<(RULE_INPUT_ROOT).external_rules.out',
- ],
- 'action': [
- 'python', '../copy-file.py', '<(RULE_INPUT_PATH)', '<@(_outputs)',
- ],
- },
- ],
- },
- ],
- 'conditions': [
- ['OS=="win"', {
- 'targets': [
- {
- 'target_name': 'cygwin',
- 'type': 'none',
- 'actions': [
- {
- 'action_name': 'setup_mount',
- 'msvs_cygwin_shell': 0,
- 'inputs': [
- '../../../../../../<(DEPTH)/third_party/cygwin/setup_mount.bat',
- ],
- # Visual Studio requires an output file, or else the
- # custom build step won't run.
- 'outputs': [
- '<(INTERMEDIATE_DIR)/_always_run_setup_mount.marker',
- ],
- 'action': ['<@(_inputs)'],
- },
- ],
- },
- ],
- }],
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/rules/src/external/file1.in b/deps/npm/node_modules/node-gyp/gyp/test/rules/src/external/file1.in
deleted file mode 100644
index 86ac3ad38..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/rules/src/external/file1.in
+++ /dev/null
@@ -1 +0,0 @@
-Hello from file1.in
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/rules/src/external/file2.in b/deps/npm/node_modules/node-gyp/gyp/test/rules/src/external/file2.in
deleted file mode 100644
index bf83d8ece..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/rules/src/external/file2.in
+++ /dev/null
@@ -1 +0,0 @@
-Hello from file2.in
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/rules/src/input-root.gyp b/deps/npm/node_modules/node-gyp/gyp/test/rules/src/input-root.gyp
deleted file mode 100644
index b6600e767..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/rules/src/input-root.gyp
+++ /dev/null
@@ -1,24 +0,0 @@
-# Copyright (c) 2011 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'targets': [
- {
- 'target_name': 'test',
- 'type': 'executable',
- 'sources': [ 'somefile.ext', ],
- 'rules': [{
- 'rule_name': 'rule',
- 'extension': 'ext',
- 'inputs': [ 'rule.py', ],
- 'outputs': [ '<(RULE_INPUT_ROOT).cc', ],
- 'action': [ 'python', 'rule.py', '<(RULE_INPUT_ROOT)', ],
- 'message': 'Processing <(RULE_INPUT_PATH)',
- 'process_outputs_as_sources': 1,
- # Allows the test to run without hermetic cygwin on windows.
- 'msvs_cygwin_shell': 0,
- }],
- },
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/rules/src/noaction/file1.in b/deps/npm/node_modules/node-gyp/gyp/test/rules/src/noaction/file1.in
deleted file mode 100644
index 86ac3ad38..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/rules/src/noaction/file1.in
+++ /dev/null
@@ -1 +0,0 @@
-Hello from file1.in
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/rules/src/noaction/no_action_with_rules_fails.gyp b/deps/npm/node_modules/node-gyp/gyp/test/rules/src/noaction/no_action_with_rules_fails.gyp
deleted file mode 100644
index 9b6a65629..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/rules/src/noaction/no_action_with_rules_fails.gyp
+++ /dev/null
@@ -1,37 +0,0 @@
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-# Test the case where there's no action but there are input rules that should
-# be processed results in a gyp failure.
-{
- 'targets': [
- {
- 'target_name': 'extension_does_match_sources_but_no_action',
- 'type': 'none',
- 'msvs_cygwin_shell': 0,
- 'sources': [
- 'file1.in',
- ],
- 'rules': [
- {
- 'rule_name': 'assembled',
- 'extension': 'in',
- 'outputs': [
- '<(RULE_INPUT_ROOT).in',
- ],
- 'conditions': [
- # Always fails.
- [ '"true"=="false"', {
- 'action': [
- 'python', '../copy-file.py', '<(RULE_INPUT_PATH)', '<@(_outputs)',
- ],
- 'process_outputs_as_sources': 1,
- 'message': 'test_rule',
- }],
- ],
- },
- ],
- },
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/rules/src/rule.py b/deps/npm/node_modules/node-gyp/gyp/test/rules/src/rule.py
deleted file mode 100755
index 8a1f36ded..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/rules/src/rule.py
+++ /dev/null
@@ -1,17 +0,0 @@
-#!/usr/bin/env python
-# Copyright (c) 2011 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import sys
-
-f = open(sys.argv[1] + ".cc", "w")
-f.write("""\
-#include <stdio.h>
-
-int main() {
- puts("Hello %s");
- return 0;
-}
-""" % sys.argv[1])
-f.close()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/rules/src/somefile.ext b/deps/npm/node_modules/node-gyp/gyp/test/rules/src/somefile.ext
deleted file mode 100644
index e69de29bb..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/rules/src/somefile.ext
+++ /dev/null
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/rules/src/special-variables.gyp b/deps/npm/node_modules/node-gyp/gyp/test/rules/src/special-variables.gyp
deleted file mode 100644
index fc55665e7..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/rules/src/special-variables.gyp
+++ /dev/null
@@ -1,35 +0,0 @@
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'targets': [
- {
- 'rules': [
- {
- 'rule_name': 'assembler (gnu-compatible)',
- 'msvs_cygwin_shell': 0,
- 'msvs_quote_cmd': 0,
- 'extension': 'S',
- 'inputs': [
- 'as.bat',
- '$(InputPath)'
- ],
- 'outputs': [
- '$(IntDir)/$(InputName).obj',
- ],
- 'action': [
- 'as.bat',
- '$(InputPath)',
- '$(IntDir)/$(InputName).obj',
- ],
- 'message': 'Building assembly language file $(InputPath)',
- 'process_outputs_as_sources': 1,
- },
- ],
- 'target_name': 'test',
- 'type': 'static_library',
- 'sources': [ 'an_asm.S' ],
- },
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/rules/src/subdir1/executable.gyp b/deps/npm/node_modules/node-gyp/gyp/test/rules/src/subdir1/executable.gyp
deleted file mode 100644
index 302857789..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/rules/src/subdir1/executable.gyp
+++ /dev/null
@@ -1,37 +0,0 @@
-# Copyright (c) 2009 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'targets': [
- {
- 'target_name': 'program',
- 'type': 'executable',
- 'msvs_cygwin_shell': 0,
- 'sources': [
- 'program.c',
- 'function1.in',
- 'function2.in',
- ],
- 'rules': [
- {
- 'rule_name': 'copy_file',
- 'extension': 'in',
- 'inputs': [
- '../copy-file.py',
- ],
- 'outputs': [
- # TODO: fix SCons and Make to support generated files not
- # in a variable-named path like <(INTERMEDIATE_DIR)
- #'<(RULE_INPUT_ROOT).c',
- '<(INTERMEDIATE_DIR)/<(RULE_INPUT_ROOT).c',
- ],
- 'action': [
- 'python', '<(_inputs)', '<(RULE_INPUT_PATH)', '<@(_outputs)',
- ],
- 'process_outputs_as_sources': 1,
- },
- ],
- },
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/rules/src/subdir1/function1.in b/deps/npm/node_modules/node-gyp/gyp/test/rules/src/subdir1/function1.in
deleted file mode 100644
index 60ff28949..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/rules/src/subdir1/function1.in
+++ /dev/null
@@ -1,6 +0,0 @@
-#include <stdio.h>
-
-void function1(void)
-{
- printf("Hello from function1.in\n");
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/rules/src/subdir1/function2.in b/deps/npm/node_modules/node-gyp/gyp/test/rules/src/subdir1/function2.in
deleted file mode 100644
index 0fcfc03fd..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/rules/src/subdir1/function2.in
+++ /dev/null
@@ -1,6 +0,0 @@
-#include <stdio.h>
-
-void function2(void)
-{
- printf("Hello from function2.in\n");
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/rules/src/subdir1/program.c b/deps/npm/node_modules/node-gyp/gyp/test/rules/src/subdir1/program.c
deleted file mode 100644
index 258d7f99e..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/rules/src/subdir1/program.c
+++ /dev/null
@@ -1,12 +0,0 @@
-#include <stdio.h>
-
-extern void function1(void);
-extern void function2(void);
-
-int main(int argc, char *argv[])
-{
- printf("Hello from program.c\n");
- function1();
- function2();
- return 0;
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/rules/src/subdir2/file1.in b/deps/npm/node_modules/node-gyp/gyp/test/rules/src/subdir2/file1.in
deleted file mode 100644
index 86ac3ad38..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/rules/src/subdir2/file1.in
+++ /dev/null
@@ -1 +0,0 @@
-Hello from file1.in
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/rules/src/subdir2/file2.in b/deps/npm/node_modules/node-gyp/gyp/test/rules/src/subdir2/file2.in
deleted file mode 100644
index bf83d8ece..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/rules/src/subdir2/file2.in
+++ /dev/null
@@ -1 +0,0 @@
-Hello from file2.in
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/rules/src/subdir2/never_used.gyp b/deps/npm/node_modules/node-gyp/gyp/test/rules/src/subdir2/never_used.gyp
deleted file mode 100644
index 17f6f5537..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/rules/src/subdir2/never_used.gyp
+++ /dev/null
@@ -1,31 +0,0 @@
-# Copyright (c) 2009 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-# Test that the case where there is a rule that doesn't apply to anything.
-{
- 'targets': [
- {
- 'target_name': 'files_no_input2',
- 'type': 'none',
- 'msvs_cygwin_shell': 0,
- 'sources': [
- 'file1.in',
- 'file2.in',
- ],
- 'rules': [
- {
- 'rule_name': 'copy_file3',
- 'extension': 'in2',
- 'outputs': [
- '<(RULE_INPUT_ROOT).out3',
- ],
- 'action': [
- 'python', '../copy-file.py', '<(RULE_INPUT_PATH)', '<@(_outputs)',
- ],
- 'process_outputs_as_sources': 1,
- },
- ],
- },
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/rules/src/subdir2/no_action.gyp b/deps/npm/node_modules/node-gyp/gyp/test/rules/src/subdir2/no_action.gyp
deleted file mode 100644
index ffa1cefe1..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/rules/src/subdir2/no_action.gyp
+++ /dev/null
@@ -1,38 +0,0 @@
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-# Test that the case where an action is only specified under a conditional is
-# evaluated appropriately.
-{
- 'targets': [
- {
- 'target_name': 'extension_does_not_match_sources_and_no_action',
- 'type': 'none',
- 'msvs_cygwin_shell': 0,
- 'sources': [
- 'file1.in',
- 'file2.in',
- ],
- 'rules': [
- {
- 'rule_name': 'assemble',
- 'extension': 'asm',
- 'outputs': [
- '<(RULE_INPUT_ROOT).fail',
- ],
- 'conditions': [
- # Always fails.
- [ '"true"=="false"', {
- 'action': [
- 'python', '../copy-file.py', '<(RULE_INPUT_PATH)', '<@(_outputs)',
- ],
- 'process_outputs_as_sources': 1,
- 'message': 'test_rule',
- }],
- ],
- },
- ],
- },
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/rules/src/subdir2/no_inputs.gyp b/deps/npm/node_modules/node-gyp/gyp/test/rules/src/subdir2/no_inputs.gyp
deleted file mode 100644
index e61a1a3ff..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/rules/src/subdir2/no_inputs.gyp
+++ /dev/null
@@ -1,32 +0,0 @@
-# Copyright (c) 2009 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-# Test that the case where there are no inputs (other than the
-# file the rule applies to).
-{
- 'targets': [
- {
- 'target_name': 'files_no_input',
- 'type': 'none',
- 'msvs_cygwin_shell': 0,
- 'sources': [
- 'file1.in',
- 'file2.in',
- ],
- 'rules': [
- {
- 'rule_name': 'copy_file2',
- 'extension': 'in',
- 'outputs': [
- '<(RULE_INPUT_ROOT).out2',
- ],
- 'action': [
- 'python', '../copy-file.py', '<(RULE_INPUT_PATH)', '<@(_outputs)',
- ],
- 'process_outputs_as_sources': 1,
- },
- ],
- },
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/rules/src/subdir2/none.gyp b/deps/npm/node_modules/node-gyp/gyp/test/rules/src/subdir2/none.gyp
deleted file mode 100644
index 38bcdabdf..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/rules/src/subdir2/none.gyp
+++ /dev/null
@@ -1,33 +0,0 @@
-# Copyright (c) 2009 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'targets': [
- {
- 'target_name': 'files',
- 'type': 'none',
- 'msvs_cygwin_shell': 0,
- 'sources': [
- 'file1.in',
- 'file2.in',
- ],
- 'rules': [
- {
- 'rule_name': 'copy_file',
- 'extension': 'in',
- 'inputs': [
- '../copy-file.py',
- ],
- 'outputs': [
- '<(RULE_INPUT_ROOT).out',
- ],
- 'action': [
- 'python', '<(_inputs)', '<(RULE_INPUT_PATH)', '<@(_outputs)',
- ],
- 'process_outputs_as_sources': 1,
- },
- ],
- },
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/rules/src/subdir3/executable2.gyp b/deps/npm/node_modules/node-gyp/gyp/test/rules/src/subdir3/executable2.gyp
deleted file mode 100644
index a2a528fc7..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/rules/src/subdir3/executable2.gyp
+++ /dev/null
@@ -1,37 +0,0 @@
-# Copyright (c) 2009 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-# This one tests that rules are properly written if extensions are different
-# between the target's sources (program.c) and the generated files
-# (function3.cc)
-
-{
- 'targets': [
- {
- 'target_name': 'program2',
- 'type': 'executable',
- 'msvs_cygwin_shell': 0,
- 'sources': [
- 'program.c',
- 'function3.in',
- ],
- 'rules': [
- {
- 'rule_name': 'copy_file',
- 'extension': 'in',
- 'inputs': [
- '../copy-file.py',
- ],
- 'outputs': [
- '<(SHARED_INTERMEDIATE_DIR)/<(RULE_INPUT_ROOT).cc',
- ],
- 'action': [
- 'python', '<(_inputs)', '<(RULE_INPUT_PATH)', '<@(_outputs)',
- ],
- 'process_outputs_as_sources': 1,
- },
- ],
- },
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/rules/src/subdir3/function3.in b/deps/npm/node_modules/node-gyp/gyp/test/rules/src/subdir3/function3.in
deleted file mode 100644
index 99f46ab05..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/rules/src/subdir3/function3.in
+++ /dev/null
@@ -1,6 +0,0 @@
-#include <stdio.h>
-
-extern "C" void function3(void)
-{
- printf("Hello from function3.in\n");
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/rules/src/subdir3/program.c b/deps/npm/node_modules/node-gyp/gyp/test/rules/src/subdir3/program.c
deleted file mode 100644
index 94f6c5091..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/rules/src/subdir3/program.c
+++ /dev/null
@@ -1,10 +0,0 @@
-#include <stdio.h>
-
-extern void function3(void);
-
-int main(int argc, char *argv[])
-{
- printf("Hello from program.c\n");
- function3();
- return 0;
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/rules/src/subdir4/asm-function.asm b/deps/npm/node_modules/node-gyp/gyp/test/rules/src/subdir4/asm-function.asm
deleted file mode 100644
index ed47cade9..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/rules/src/subdir4/asm-function.asm
+++ /dev/null
@@ -1,10 +0,0 @@
-#if PLATFORM_WINDOWS || PLATFORM_MAC
-# define IDENTIFIER(n) _##n
-#else /* Linux */
-# define IDENTIFIER(n) n
-#endif
-
-.globl IDENTIFIER(asm_function)
-IDENTIFIER(asm_function):
- movl $41, %eax
- ret
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/rules/src/subdir4/build-asm.gyp b/deps/npm/node_modules/node-gyp/gyp/test/rules/src/subdir4/build-asm.gyp
deleted file mode 100644
index be4a612d1..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/rules/src/subdir4/build-asm.gyp
+++ /dev/null
@@ -1,49 +0,0 @@
-# Copyright (c) 2009 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-# This one tests that assembly files ended as .s and .S are compiled.
-
-{
- 'target_defaults': {
- 'conditions': [
- ['OS=="win"', {
- 'defines': ['PLATFORM_WIN'],
- }],
- ['OS=="mac"', {
- 'defines': ['PLATFORM_MAC'],
- }],
- ['OS=="linux"', {
- 'defines': ['PLATFORM_LINUX'],
- }],
- ],
- },
- 'targets': [
- {
- 'target_name': 'program4',
- 'type': 'executable',
- 'sources': [
- 'asm-function.asm',
- 'program.c',
- ],
- 'conditions': [
- ['OS=="linux" or OS=="mac"', {
- 'rules': [
- {
- 'rule_name': 'convert_asm',
- 'extension': 'asm',
- 'inputs': [],
- 'outputs': [
- '<(SHARED_INTERMEDIATE_DIR)/<(RULE_INPUT_ROOT).S',
- ],
- 'action': [
- 'bash', '-c', 'mv <(RULE_INPUT_PATH) <@(_outputs)',
- ],
- 'process_outputs_as_sources': 1,
- },
- ],
- }],
- ],
- },
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/rules/src/subdir4/program.c b/deps/npm/node_modules/node-gyp/gyp/test/rules/src/subdir4/program.c
deleted file mode 100644
index 424759062..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/rules/src/subdir4/program.c
+++ /dev/null
@@ -1,19 +0,0 @@
-#include <stdio.h>
-
-// Use the assembly function in linux and mac where it is built.
-#if PLATFORM_LINUX || PLATFORM_MAC
-extern int asm_function(void);
-#else
-int asm_function() {
- return 41;
-}
-#endif
-
-int main(int argc, char *argv[])
-{
- fprintf(stdout, "Hello from program.c\n");
- fflush(stdout);
- fprintf(stdout, "Got %d.\n", asm_function());
- fflush(stdout);
- return 0;
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/same-gyp-name/gyptest-all.py b/deps/npm/node_modules/node-gyp/gyp/test/same-gyp-name/gyptest-all.py
deleted file mode 100755
index cda1a72d4..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/same-gyp-name/gyptest-all.py
+++ /dev/null
@@ -1,38 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Build a .gyp that depends on 2 gyp files with the same name.
-"""
-
-import TestGyp
-
-test = TestGyp.TestGyp()
-
-test.run_gyp('all.gyp', chdir='src')
-
-test.relocate('src', 'relocate/src')
-
-test.build('all.gyp', test.ALL, chdir='relocate/src')
-
-expect1 = """\
-Hello from main1.cc
-"""
-
-expect2 = """\
-Hello from main2.cc
-"""
-
-if test.format == 'xcode':
- chdir1 = 'relocate/src/subdir1'
- chdir2 = 'relocate/src/subdir2'
-else:
- chdir1 = chdir2 = 'relocate/src'
-
-test.run_built_executable('program1', chdir=chdir1, stdout=expect1)
-test.run_built_executable('program2', chdir=chdir2, stdout=expect2)
-
-test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/same-gyp-name/gyptest-default.py b/deps/npm/node_modules/node-gyp/gyp/test/same-gyp-name/gyptest-default.py
deleted file mode 100755
index 5e4bba001..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/same-gyp-name/gyptest-default.py
+++ /dev/null
@@ -1,38 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Build a .gyp that depends on 2 gyp files with the same name.
-"""
-
-import TestGyp
-
-test = TestGyp.TestGyp()
-
-test.run_gyp('all.gyp', chdir='src')
-
-test.relocate('src', 'relocate/src')
-
-test.build('all.gyp', chdir='relocate/src')
-
-expect1 = """\
-Hello from main1.cc
-"""
-
-expect2 = """\
-Hello from main2.cc
-"""
-
-if test.format == 'xcode':
- chdir1 = 'relocate/src/subdir1'
- chdir2 = 'relocate/src/subdir2'
-else:
- chdir1 = chdir2 = 'relocate/src'
-
-test.run_built_executable('program1', chdir=chdir1, stdout=expect1)
-test.run_built_executable('program2', chdir=chdir2, stdout=expect2)
-
-test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/same-gyp-name/gyptest-library.py b/deps/npm/node_modules/node-gyp/gyp/test/same-gyp-name/gyptest-library.py
deleted file mode 100644
index 957a4a52d..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/same-gyp-name/gyptest-library.py
+++ /dev/null
@@ -1,20 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Verifies that a dependency on two gyp files with the same name do not create a
-uid collision in the resulting generated xcode file.
-"""
-
-import TestGyp
-
-import sys
-
-test = TestGyp.TestGyp()
-
-test.run_gyp('test.gyp', chdir='library')
-
-test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/same-gyp-name/library/one/sub.gyp b/deps/npm/node_modules/node-gyp/gyp/test/same-gyp-name/library/one/sub.gyp
deleted file mode 100644
index 1bed941e5..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/same-gyp-name/library/one/sub.gyp
+++ /dev/null
@@ -1,11 +0,0 @@
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-{
- 'targets': [
- {
- 'target_name': 'one',
- 'type': 'static_library',
- },
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/same-gyp-name/library/test.gyp b/deps/npm/node_modules/node-gyp/gyp/test/same-gyp-name/library/test.gyp
deleted file mode 100644
index 552a77ed7..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/same-gyp-name/library/test.gyp
+++ /dev/null
@@ -1,15 +0,0 @@
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-{
- 'targets': [
- {
- 'target_name': 'duplicate_names',
- 'type': 'shared_library',
- 'dependencies': [
- 'one/sub.gyp:one',
- 'two/sub.gyp:two',
- ],
- },
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/same-gyp-name/library/two/sub.gyp b/deps/npm/node_modules/node-gyp/gyp/test/same-gyp-name/library/two/sub.gyp
deleted file mode 100644
index 934c98a49..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/same-gyp-name/library/two/sub.gyp
+++ /dev/null
@@ -1,11 +0,0 @@
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-{
- 'targets': [
- {
- 'target_name': 'two',
- 'type': 'static_library',
- },
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/same-gyp-name/src/all.gyp b/deps/npm/node_modules/node-gyp/gyp/test/same-gyp-name/src/all.gyp
deleted file mode 100644
index 229f02ea8..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/same-gyp-name/src/all.gyp
+++ /dev/null
@@ -1,16 +0,0 @@
-# Copyright (c) 2009 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'targets': [
- {
- 'target_name': 'all_exes',
- 'type': 'none',
- 'dependencies': [
- 'subdir1/executable.gyp:*',
- 'subdir2/executable.gyp:*',
- ],
- },
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/same-gyp-name/src/subdir1/executable.gyp b/deps/npm/node_modules/node-gyp/gyp/test/same-gyp-name/src/subdir1/executable.gyp
deleted file mode 100644
index 82483b4c6..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/same-gyp-name/src/subdir1/executable.gyp
+++ /dev/null
@@ -1,15 +0,0 @@
-# Copyright (c) 2009 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'targets': [
- {
- 'target_name': 'program1',
- 'type': 'executable',
- 'sources': [
- 'main1.cc',
- ],
- },
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/same-gyp-name/src/subdir1/main1.cc b/deps/npm/node_modules/node-gyp/gyp/test/same-gyp-name/src/subdir1/main1.cc
deleted file mode 100644
index 364555832..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/same-gyp-name/src/subdir1/main1.cc
+++ /dev/null
@@ -1,6 +0,0 @@
-#include <stdio.h>
-
-int main() {
- printf("Hello from main1.cc\n");
- return 0;
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/same-gyp-name/src/subdir2/executable.gyp b/deps/npm/node_modules/node-gyp/gyp/test/same-gyp-name/src/subdir2/executable.gyp
deleted file mode 100644
index e3537013e..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/same-gyp-name/src/subdir2/executable.gyp
+++ /dev/null
@@ -1,15 +0,0 @@
-# Copyright (c) 2009 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'targets': [
- {
- 'target_name': 'program2',
- 'type': 'executable',
- 'sources': [
- 'main2.cc',
- ],
- },
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/same-gyp-name/src/subdir2/main2.cc b/deps/npm/node_modules/node-gyp/gyp/test/same-gyp-name/src/subdir2/main2.cc
deleted file mode 100644
index 0c724dee3..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/same-gyp-name/src/subdir2/main2.cc
+++ /dev/null
@@ -1,6 +0,0 @@
-#include <stdio.h>
-
-int main() {
- printf("Hello from main2.cc\n");
- return 0;
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/same-rule-output-file-name/gyptest-all.py b/deps/npm/node_modules/node-gyp/gyp/test/same-rule-output-file-name/gyptest-all.py
deleted file mode 100644
index 964e6b772..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/same-rule-output-file-name/gyptest-all.py
+++ /dev/null
@@ -1,23 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Tests the use of rules with the same output file name.
-"""
-
-import TestGyp
-
-test = TestGyp.TestGyp()
-
-test.run_gyp('subdirs.gyp', chdir='src')
-
-test.relocate('src', 'relocate/src')
-
-test.build('subdirs.gyp', test.ALL, chdir='relocate/src')
-test.must_exist('relocate/src/subdir1/rule.txt')
-test.must_exist('relocate/src/subdir2/rule.txt')
-
-test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/same-rule-output-file-name/src/subdir1/subdir1.gyp b/deps/npm/node_modules/node-gyp/gyp/test/same-rule-output-file-name/src/subdir1/subdir1.gyp
deleted file mode 100644
index bff381a5a..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/same-rule-output-file-name/src/subdir1/subdir1.gyp
+++ /dev/null
@@ -1,30 +0,0 @@
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'targets': [
- {
- 'target_name': 'target1',
- 'type': 'none',
- 'sources': [
- '../touch.py'
- ],
- 'rules': [
- {
- 'rule_name': 'rule1',
- 'extension': 'py',
- 'inputs': [],
- 'outputs': [
- 'rule.txt',
- ],
- 'action': [
- 'python', '../touch.py', '<(_outputs)',
- ],
- # Allows the test to run without hermetic cygwin on windows.
- 'msvs_cygwin_shell': 0,
- },
- ],
- },
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/same-rule-output-file-name/src/subdir2/subdir2.gyp b/deps/npm/node_modules/node-gyp/gyp/test/same-rule-output-file-name/src/subdir2/subdir2.gyp
deleted file mode 100644
index 12a35600a..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/same-rule-output-file-name/src/subdir2/subdir2.gyp
+++ /dev/null
@@ -1,30 +0,0 @@
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'targets': [
- {
- 'target_name': 'target2',
- 'type': 'none',
- 'sources': [
- '../touch.py'
- ],
- 'rules': [
- {
- 'rule_name': 'rule2',
- 'extension': 'py',
- 'inputs': [],
- 'outputs': [
- 'rule.txt',
- ],
- 'action': [
- 'python', '../touch.py', '<(_outputs)',
- ],
- # Allows the test to run without hermetic cygwin on windows.
- 'msvs_cygwin_shell': 0,
- },
- ],
- },
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/same-rule-output-file-name/src/subdirs.gyp b/deps/npm/node_modules/node-gyp/gyp/test/same-rule-output-file-name/src/subdirs.gyp
deleted file mode 100644
index 25259a38f..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/same-rule-output-file-name/src/subdirs.gyp
+++ /dev/null
@@ -1,16 +0,0 @@
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'targets': [
- {
- 'target_name': 'subdirs',
- 'type': 'none',
- 'dependencies': [
- 'subdir1/subdir1.gyp:*',
- 'subdir2/subdir2.gyp:*',
- ],
- },
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/same-rule-output-file-name/src/touch.py b/deps/npm/node_modules/node-gyp/gyp/test/same-rule-output-file-name/src/touch.py
deleted file mode 100644
index 2291e9cc5..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/same-rule-output-file-name/src/touch.py
+++ /dev/null
@@ -1,11 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import sys
-
-f = open(sys.argv[1], 'w+')
-f.write('Hello from touch.py\n')
-f.close()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/same-source-file-name/gyptest-all.py b/deps/npm/node_modules/node-gyp/gyp/test/same-source-file-name/gyptest-all.py
deleted file mode 100755
index 4c215027c..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/same-source-file-name/gyptest-all.py
+++ /dev/null
@@ -1,34 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2009 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Build a .gyp with two targets that share a common .c source file.
-"""
-
-import TestGyp
-
-test = TestGyp.TestGyp()
-
-test.run_gyp('all.gyp', chdir='src')
-
-test.relocate('src', 'relocate/src')
-
-test.build('all.gyp', test.ALL, chdir='relocate/src')
-
-expect1 = """\
-Hello from prog1.c
-Hello prog1 from func.c
-"""
-
-expect2 = """\
-Hello from prog2.c
-Hello prog2 from func.c
-"""
-
-test.run_built_executable('prog1', chdir='relocate/src', stdout=expect1)
-test.run_built_executable('prog2', chdir='relocate/src', stdout=expect2)
-
-test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/same-source-file-name/gyptest-default.py b/deps/npm/node_modules/node-gyp/gyp/test/same-source-file-name/gyptest-default.py
deleted file mode 100755
index 98757c269..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/same-source-file-name/gyptest-default.py
+++ /dev/null
@@ -1,34 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2009 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Build a .gyp with two targets that share a common .c source file.
-"""
-
-import TestGyp
-
-test = TestGyp.TestGyp()
-
-test.run_gyp('all.gyp', chdir='src')
-
-test.relocate('src', 'relocate/src')
-
-test.build('all.gyp', chdir='relocate/src')
-
-expect1 = """\
-Hello from prog1.c
-Hello prog1 from func.c
-"""
-
-expect2 = """\
-Hello from prog2.c
-Hello prog2 from func.c
-"""
-
-test.run_built_executable('prog1', chdir='relocate/src', stdout=expect1)
-test.run_built_executable('prog2', chdir='relocate/src', stdout=expect2)
-
-test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/same-source-file-name/gyptest-fail.py b/deps/npm/node_modules/node-gyp/gyp/test/same-source-file-name/gyptest-fail.py
deleted file mode 100644
index e69de29bb..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/same-source-file-name/gyptest-fail.py
+++ /dev/null
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/same-source-file-name/src/all.gyp b/deps/npm/node_modules/node-gyp/gyp/test/same-source-file-name/src/all.gyp
deleted file mode 100644
index 4fe052c66..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/same-source-file-name/src/all.gyp
+++ /dev/null
@@ -1,30 +0,0 @@
-# Copyright (c) 2009 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'targets': [
- {
- 'target_name': 'prog1',
- 'type': 'executable',
- 'defines': [
- 'PROG="prog1"',
- ],
- 'sources': [
- 'prog1.c',
- 'func.c',
- ],
- },
- {
- 'target_name': 'prog2',
- 'type': 'executable',
- 'defines': [
- 'PROG="prog2"',
- ],
- 'sources': [
- 'prog2.c',
- 'func.c',
- ],
- },
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/same-source-file-name/src/double.gyp b/deps/npm/node_modules/node-gyp/gyp/test/same-source-file-name/src/double.gyp
deleted file mode 100644
index e69de29bb..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/same-source-file-name/src/double.gyp
+++ /dev/null
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/same-source-file-name/src/func.c b/deps/npm/node_modules/node-gyp/gyp/test/same-source-file-name/src/func.c
deleted file mode 100644
index e069c692a..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/same-source-file-name/src/func.c
+++ /dev/null
@@ -1,6 +0,0 @@
-#include <stdio.h>
-
-void func(void)
-{
- printf("Hello %s from func.c\n", PROG);
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/same-source-file-name/src/prog1.c b/deps/npm/node_modules/node-gyp/gyp/test/same-source-file-name/src/prog1.c
deleted file mode 100644
index c8940fedc..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/same-source-file-name/src/prog1.c
+++ /dev/null
@@ -1,16 +0,0 @@
-#include <stdio.h>
-
-extern void func(void);
-
-int main(int argc, char *argv[])
-{
- printf("Hello from prog1.c\n");
- func();
- /*
- * Uncomment to test same-named files in different directories,
- * which Visual Studio doesn't support.
- subdir1_func();
- subdir2_func();
- */
- return 0;
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/same-source-file-name/src/prog2.c b/deps/npm/node_modules/node-gyp/gyp/test/same-source-file-name/src/prog2.c
deleted file mode 100644
index e6605c2bd..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/same-source-file-name/src/prog2.c
+++ /dev/null
@@ -1,16 +0,0 @@
-#include <stdio.h>
-
-extern void func(void);
-
-int main(int argc, char *argv[])
-{
- printf("Hello from prog2.c\n");
- func();
- /*
- * Uncomment to test same-named files in different directories,
- * which Visual Studio doesn't support.
- subdir1_func();
- subdir2_func();
- */
- return 0;
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/same-source-file-name/src/subdir1/func.c b/deps/npm/node_modules/node-gyp/gyp/test/same-source-file-name/src/subdir1/func.c
deleted file mode 100644
index b73450d10..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/same-source-file-name/src/subdir1/func.c
+++ /dev/null
@@ -1,6 +0,0 @@
-#include <stdio.h>
-
-void subdir1_func(void)
-{
- printf("Hello %s from subdir1/func.c\n", PROG);
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/same-source-file-name/src/subdir2/func.c b/deps/npm/node_modules/node-gyp/gyp/test/same-source-file-name/src/subdir2/func.c
deleted file mode 100644
index 0248b5720..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/same-source-file-name/src/subdir2/func.c
+++ /dev/null
@@ -1,6 +0,0 @@
-#include <stdio.h>
-
-void subdir2_func(void)
-{
- printf("Hello %s from subdir2/func.c\n", PROG);
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/same-target-name-different-directory/gyptest-all.py b/deps/npm/node_modules/node-gyp/gyp/test/same-target-name-different-directory/gyptest-all.py
deleted file mode 100644
index bc4f46696..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/same-target-name-different-directory/gyptest-all.py
+++ /dev/null
@@ -1,36 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Test cases when multiple targets in different directories have the same name.
-"""
-
-import TestGyp
-
-test = TestGyp.TestGyp(formats=['android', 'ninja', 'make'])
-
-test.run_gyp('subdirs.gyp', chdir='src')
-
-test.relocate('src', 'relocate/src')
-
-# Test that we build all targets.
-test.build('subdirs.gyp', 'target', chdir='relocate/src')
-test.must_exist('relocate/src/subdir1/action1.txt')
-test.must_exist('relocate/src/subdir2/action2.txt')
-
-# Test that we build all targets using the correct actions, even if they have
-# the same names.
-test.build('subdirs.gyp', 'target_same_action_name', chdir='relocate/src')
-test.must_exist('relocate/src/subdir1/action.txt')
-test.must_exist('relocate/src/subdir2/action.txt')
-
-# Test that we build all targets using the correct rules, even if they have
-# the same names.
-test.build('subdirs.gyp', 'target_same_rule_name', chdir='relocate/src')
-test.must_exist('relocate/src/subdir1/rule.txt')
-test.must_exist('relocate/src/subdir2/rule.txt')
-
-test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/same-target-name-different-directory/src/subdir1/subdir1.gyp b/deps/npm/node_modules/node-gyp/gyp/test/same-target-name-different-directory/src/subdir1/subdir1.gyp
deleted file mode 100644
index d4ec2e679..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/same-target-name-different-directory/src/subdir1/subdir1.gyp
+++ /dev/null
@@ -1,66 +0,0 @@
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'targets': [
- {
- 'target_name': 'target',
- 'type': 'none',
- 'actions': [
- {
- 'action_name': 'action1',
- 'inputs': [],
- 'outputs': [
- 'action1.txt',
- ],
- 'action': [
- 'python', '../touch.py', '<(_outputs)',
- ],
- # Allows the test to run without hermetic cygwin on windows.
- 'msvs_cygwin_shell': 0,
- },
- ],
- },
- {
- 'target_name': 'target_same_action_name',
- 'type': 'none',
- 'actions': [
- {
- 'action_name': 'action',
- 'inputs': [],
- 'outputs': [
- 'action.txt',
- ],
- 'action': [
- 'python', '../touch.py', '<(_outputs)',
- ],
- # Allows the test to run without hermetic cygwin on windows.
- 'msvs_cygwin_shell': 0,
- },
- ],
- },
- {
- 'target_name': 'target_same_rule_name',
- 'type': 'none',
- 'sources': [
- '../touch.py'
- ],
- 'rules': [
- {
- 'rule_name': 'rule',
- 'extension': 'py',
- 'inputs': [],
- 'outputs': [
- 'rule.txt',
- ],
- 'action': [
- 'python', '../touch.py', '<(_outputs)',
- ],
- # Allows the test to run without hermetic cygwin on windows.
- 'msvs_cygwin_shell': 0,
- },
- ],
- },
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/same-target-name-different-directory/src/subdir2/subdir2.gyp b/deps/npm/node_modules/node-gyp/gyp/test/same-target-name-different-directory/src/subdir2/subdir2.gyp
deleted file mode 100644
index 9006d450b..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/same-target-name-different-directory/src/subdir2/subdir2.gyp
+++ /dev/null
@@ -1,66 +0,0 @@
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'targets': [
- {
- 'target_name': 'target',
- 'type': 'none',
- 'actions': [
- {
- 'action_name': 'action2',
- 'inputs': [],
- 'outputs': [
- 'action2.txt',
- ],
- 'action': [
- 'python', '../touch.py', '<(_outputs)',
- ],
- # Allows the test to run without hermetic cygwin on windows.
- 'msvs_cygwin_shell': 0,
- },
- ],
- },
- {
- 'target_name': 'target_same_action_name',
- 'type': 'none',
- 'actions': [
- {
- 'action_name': 'action',
- 'inputs': [],
- 'outputs': [
- 'action.txt',
- ],
- 'action': [
- 'python', '../touch.py', '<(_outputs)',
- ],
- # Allows the test to run without hermetic cygwin on windows.
- 'msvs_cygwin_shell': 0,
- },
- ],
- },
- {
- 'target_name': 'target_same_rule_name',
- 'type': 'none',
- 'sources': [
- '../touch.py'
- ],
- 'rules': [
- {
- 'rule_name': 'rule',
- 'extension': 'py',
- 'inputs': [],
- 'outputs': [
- 'rule.txt',
- ],
- 'action': [
- 'python', '../touch.py', '<(_outputs)',
- ],
- # Allows the test to run without hermetic cygwin on windows.
- 'msvs_cygwin_shell': 0,
- },
- ],
- },
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/same-target-name-different-directory/src/subdirs.gyp b/deps/npm/node_modules/node-gyp/gyp/test/same-target-name-different-directory/src/subdirs.gyp
deleted file mode 100644
index 65413e73b..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/same-target-name-different-directory/src/subdirs.gyp
+++ /dev/null
@@ -1,16 +0,0 @@
-# Copyright (c) 2010 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'targets': [
- {
- 'target_name': 'subdirs',
- 'type': 'none',
- 'dependencies': [
- 'subdir1/subdir1.gyp:*',
- 'subdir2/subdir2.gyp:*',
- ],
- },
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/same-target-name-different-directory/src/touch.py b/deps/npm/node_modules/node-gyp/gyp/test/same-target-name-different-directory/src/touch.py
deleted file mode 100644
index 2291e9cc5..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/same-target-name-different-directory/src/touch.py
+++ /dev/null
@@ -1,11 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import sys
-
-f = open(sys.argv[1], 'w+')
-f.write('Hello from touch.py\n')
-f.close()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/same-target-name/gyptest-same-target-name.py b/deps/npm/node_modules/node-gyp/gyp/test/same-target-name/gyptest-same-target-name.py
deleted file mode 100755
index bfe5540f3..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/same-target-name/gyptest-same-target-name.py
+++ /dev/null
@@ -1,18 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2010 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Check that duplicate targets in a directory gives an error.
-"""
-
-import TestGyp
-
-test = TestGyp.TestGyp()
-
-# Require that gyp files with duplicate targets spit out an error.
-test.run_gyp('all.gyp', chdir='src', status=1, stderr=None)
-
-test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/same-target-name/src/all.gyp b/deps/npm/node_modules/node-gyp/gyp/test/same-target-name/src/all.gyp
deleted file mode 100644
index ac16976da..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/same-target-name/src/all.gyp
+++ /dev/null
@@ -1,16 +0,0 @@
-# Copyright (c) 2010 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'targets': [
- {
- 'target_name': 'all_exes',
- 'type': 'none',
- 'dependencies': [
- 'executable1.gyp:*',
- 'executable2.gyp:*',
- ],
- },
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/same-target-name/src/executable1.gyp b/deps/npm/node_modules/node-gyp/gyp/test/same-target-name/src/executable1.gyp
deleted file mode 100644
index 3c492c1b3..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/same-target-name/src/executable1.gyp
+++ /dev/null
@@ -1,15 +0,0 @@
-# Copyright (c) 2010 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'targets': [
- {
- 'target_name': 'program',
- 'type': 'executable',
- 'sources': [
- 'main1.cc',
- ],
- },
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/same-target-name/src/executable2.gyp b/deps/npm/node_modules/node-gyp/gyp/test/same-target-name/src/executable2.gyp
deleted file mode 100644
index 41e84a61c..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/same-target-name/src/executable2.gyp
+++ /dev/null
@@ -1,15 +0,0 @@
-# Copyright (c) 2010 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'targets': [
- {
- 'target_name': 'program',
- 'type': 'executable',
- 'sources': [
- 'main2.cc',
- ],
- },
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/sanitize-rule-names/blah.S b/deps/npm/node_modules/node-gyp/gyp/test/sanitize-rule-names/blah.S
deleted file mode 100644
index e69de29bb..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/sanitize-rule-names/blah.S
+++ /dev/null
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/sanitize-rule-names/gyptest-sanitize-rule-names.py b/deps/npm/node_modules/node-gyp/gyp/test/sanitize-rule-names/gyptest-sanitize-rule-names.py
deleted file mode 100644
index 968a0ce5c..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/sanitize-rule-names/gyptest-sanitize-rule-names.py
+++ /dev/null
@@ -1,17 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Make sure rule names with non-"normal" characters in them don't cause
-broken build files. This test was originally causing broken .ninja files.
-"""
-
-import TestGyp
-
-test = TestGyp.TestGyp()
-test.run_gyp('sanitize-rule-names.gyp')
-test.build('sanitize-rule-names.gyp', test.ALL)
-test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/sanitize-rule-names/hello.cc b/deps/npm/node_modules/node-gyp/gyp/test/sanitize-rule-names/hello.cc
deleted file mode 100644
index 1711567ef..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/sanitize-rule-names/hello.cc
+++ /dev/null
@@ -1,7 +0,0 @@
-// Copyright (c) 2012 Google Inc. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-int main() {
- return 0;
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/sanitize-rule-names/sanitize-rule-names.gyp b/deps/npm/node_modules/node-gyp/gyp/test/sanitize-rule-names/sanitize-rule-names.gyp
deleted file mode 100644
index 184253e96..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/sanitize-rule-names/sanitize-rule-names.gyp
+++ /dev/null
@@ -1,27 +0,0 @@
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'targets': [
- {
- 'target_name': 's_test',
- 'type': 'executable',
- 'rules': [
- {
- # Make sure this rule name doesn't cause an invalid ninja file.
- 'rule_name': 'rule name with odd characters ()/',
- 'extension': 'S',
- 'outputs': ['outfile'],
- 'msvs_cygwin_shell': 0,
- 'msvs_quote_cmd': 0,
- 'action': ['python', 'script.py', '<(RULE_INPUT_PATH)', 'outfile'],
- },
- ],
- 'sources': [
- 'blah.S',
- 'hello.cc',
- ],
- },
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/sanitize-rule-names/script.py b/deps/npm/node_modules/node-gyp/gyp/test/sanitize-rule-names/script.py
deleted file mode 100644
index ae2efa1df..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/sanitize-rule-names/script.py
+++ /dev/null
@@ -1,10 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import shutil
-import sys
-
-shutil.copyfile(*sys.argv[1:])
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/scons_tools/gyptest-tools.py b/deps/npm/node_modules/node-gyp/gyp/test/scons_tools/gyptest-tools.py
deleted file mode 100755
index e97f5e631..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/scons_tools/gyptest-tools.py
+++ /dev/null
@@ -1,26 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2009 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Verifies that a scons build picks up tools modules specified
-via 'scons_tools' in the 'scons_settings' dictionary.
-"""
-
-import TestGyp
-
-test = TestGyp.TestGyp()
-
-test.run_gyp('tools.gyp')
-
-test.build('tools.gyp', test.ALL)
-
-if test.format == 'scons':
- expect = "Hello, world!\n"
-else:
- expect = ""
-test.run_built_executable('tools', stdout=expect)
-
-test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/scons_tools/site_scons/site_tools/this_tool.py b/deps/npm/node_modules/node-gyp/gyp/test/scons_tools/site_scons/site_tools/this_tool.py
deleted file mode 100644
index 10c89476d..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/scons_tools/site_scons/site_tools/this_tool.py
+++ /dev/null
@@ -1,10 +0,0 @@
-# Copyright (c) 2009 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-# SCons "tool" module that simply sets a -D value.
-def generate(env):
- env['CPPDEFINES'] = ['THIS_TOOL']
-
-def exists(env):
- pass
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/scons_tools/tools.c b/deps/npm/node_modules/node-gyp/gyp/test/scons_tools/tools.c
deleted file mode 100644
index 78dc0e31e..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/scons_tools/tools.c
+++ /dev/null
@@ -1,13 +0,0 @@
-/* Copyright (c) 2009 Google Inc. All rights reserved.
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file. */
-
-#include <stdio.h>
-
-int main(int argc, char *argv[])
-{
-#ifdef THIS_TOOL
- printf("Hello, world!\n");
-#endif
- return 0;
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/scons_tools/tools.gyp b/deps/npm/node_modules/node-gyp/gyp/test/scons_tools/tools.gyp
deleted file mode 100644
index 736ba3f22..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/scons_tools/tools.gyp
+++ /dev/null
@@ -1,18 +0,0 @@
-# Copyright (c) 2009 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'targets': [
- {
- 'target_name': 'tools',
- 'type': 'executable',
- 'sources': [
- 'tools.c',
- ],
- },
- ],
- 'scons_settings': {
- 'tools': ['default', 'this_tool'],
- },
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/sibling/gyptest-all.py b/deps/npm/node_modules/node-gyp/gyp/test/sibling/gyptest-all.py
deleted file mode 100755
index f858c317d..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/sibling/gyptest-all.py
+++ /dev/null
@@ -1,39 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-"""
-
-import TestGyp
-
-test = TestGyp.TestGyp()
-
-test.run_gyp('build/all.gyp', chdir='src')
-
-test.build('build/all.gyp', test.ALL, chdir='src')
-
-chdir = 'src/build'
-
-# The top-level Makefile is in the directory where gyp was run.
-# TODO(mmoss) Should the Makefile go in the directory of the passed in .gyp
-# file? What about when passing in multiple .gyp files? Would sub-project
-# Makefiles (see http://codereview.chromium.org/340008 comments) solve this?
-if test.format in ('make', 'ninja'):
- chdir = 'src'
-
-if test.format == 'xcode':
- chdir = 'src/prog1'
-test.run_built_executable('program1',
- chdir=chdir,
- stdout="Hello from prog1.c\n")
-
-if test.format == 'xcode':
- chdir = 'src/prog2'
-test.run_built_executable('program2',
- chdir=chdir,
- stdout="Hello from prog2.c\n")
-
-test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/sibling/gyptest-relocate.py b/deps/npm/node_modules/node-gyp/gyp/test/sibling/gyptest-relocate.py
deleted file mode 100755
index b1b3a3d3e..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/sibling/gyptest-relocate.py
+++ /dev/null
@@ -1,41 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-"""
-
-import TestGyp
-
-test = TestGyp.TestGyp()
-
-test.run_gyp('build/all.gyp', chdir='src')
-
-test.relocate('src', 'relocate/src')
-
-test.build('build/all.gyp', test.ALL, chdir='relocate/src')
-
-chdir = 'relocate/src/build'
-
-# The top-level Makefile is in the directory where gyp was run.
-# TODO(mmoss) Should the Makefile go in the directory of the passed in .gyp
-# file? What about when passing in multiple .gyp files? Would sub-project
-# Makefiles (see http://codereview.chromium.org/340008 comments) solve this?
-if test.format in ('make', 'ninja'):
- chdir = 'relocate/src'
-
-if test.format == 'xcode':
- chdir = 'relocate/src/prog1'
-test.run_built_executable('program1',
- chdir=chdir,
- stdout="Hello from prog1.c\n")
-
-if test.format == 'xcode':
- chdir = 'relocate/src/prog2'
-test.run_built_executable('program2',
- chdir=chdir,
- stdout="Hello from prog2.c\n")
-
-test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/sibling/src/build/all.gyp b/deps/npm/node_modules/node-gyp/gyp/test/sibling/src/build/all.gyp
deleted file mode 100644
index 6eafdf99b..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/sibling/src/build/all.gyp
+++ /dev/null
@@ -1,17 +0,0 @@
-# Copyright (c) 2009 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'targets': [
- {
- # TODO(sgk): a target name of 'all' leads to a scons dependency cycle
- 'target_name': 'All',
- 'type': 'none',
- 'dependencies': [
- '../prog1/prog1.gyp:*',
- '../prog2/prog2.gyp:*',
- ],
- },
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/sibling/src/prog1/prog1.c b/deps/npm/node_modules/node-gyp/gyp/test/sibling/src/prog1/prog1.c
deleted file mode 100644
index 161ae8a38..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/sibling/src/prog1/prog1.c
+++ /dev/null
@@ -1,7 +0,0 @@
-#include <stdio.h>
-
-int main(int argc, char *argv[])
-{
- printf("Hello from prog1.c\n");
- return 0;
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/sibling/src/prog1/prog1.gyp b/deps/npm/node_modules/node-gyp/gyp/test/sibling/src/prog1/prog1.gyp
deleted file mode 100644
index 4532e4be1..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/sibling/src/prog1/prog1.gyp
+++ /dev/null
@@ -1,15 +0,0 @@
-# Copyright (c) 2009 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'targets': [
- {
- 'target_name': 'program1',
- 'type': 'executable',
- 'sources': [
- 'prog1.c',
- ],
- },
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/sibling/src/prog2/prog2.c b/deps/npm/node_modules/node-gyp/gyp/test/sibling/src/prog2/prog2.c
deleted file mode 100644
index 7635ae8c1..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/sibling/src/prog2/prog2.c
+++ /dev/null
@@ -1,7 +0,0 @@
-#include <stdio.h>
-
-int main(int argc, char *argv[])
-{
- printf("Hello from prog2.c\n");
- return 0;
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/sibling/src/prog2/prog2.gyp b/deps/npm/node_modules/node-gyp/gyp/test/sibling/src/prog2/prog2.gyp
deleted file mode 100644
index 4cf7f6eb2..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/sibling/src/prog2/prog2.gyp
+++ /dev/null
@@ -1,15 +0,0 @@
-# Copyright (c) 2009 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'targets': [
- {
- 'target_name': 'program2',
- 'type': 'executable',
- 'sources': [
- 'prog2.c',
- ],
- },
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/small/gyptest-small.py b/deps/npm/node_modules/node-gyp/gyp/test/small/gyptest-small.py
deleted file mode 100755
index 3ed9d26f4..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/small/gyptest-small.py
+++ /dev/null
@@ -1,53 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Runs small tests.
-"""
-
-import imp
-import os
-import sys
-import unittest
-
-import TestGyp
-
-
-test = TestGyp.TestGyp()
-
-# Add pylib to the import path (so tests can import their dependencies).
-# This is consistant with the path.append done in the top file "gyp".
-sys.path.append(os.path.join(test._cwd, 'pylib'))
-
-# Add new test suites here.
-files_to_test = [
- 'pylib/gyp/MSVSSettings_test.py',
- 'pylib/gyp/easy_xml_test.py',
- 'pylib/gyp/generator/msvs_test.py',
- 'pylib/gyp/generator/ninja_test.py',
- 'pylib/gyp/common_test.py',
-]
-
-# Collect all the suites from the above files.
-suites = []
-for filename in files_to_test:
- # Carve the module name out of the path.
- name = os.path.splitext(os.path.split(filename)[1])[0]
- # Find the complete module path.
- full_filename = os.path.join(test._cwd, filename)
- # Load the module.
- module = imp.load_source(name, full_filename)
- # Add it to the list of test suites.
- suites.append(unittest.defaultTestLoader.loadTestsFromModule(module))
-# Create combined suite.
-all_tests = unittest.TestSuite(suites)
-
-# Run all the tests.
-result = unittest.TextTestRunner(verbosity=2).run(all_tests)
-if result.failures or result.errors:
- test.fail_test()
-
-test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/standalone-static-library/gyptest-standalone-static-library.py b/deps/npm/node_modules/node-gyp/gyp/test/standalone-static-library/gyptest-standalone-static-library.py
deleted file mode 100644
index 89f5cbea9..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/standalone-static-library/gyptest-standalone-static-library.py
+++ /dev/null
@@ -1,53 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Verifies build of a static_library with the standalone_static_library flag set.
-"""
-
-import os
-import subprocess
-import sys
-import TestGyp
-
-test = TestGyp.TestGyp()
-
-# Verify that types other than static_library cause a failure.
-test.run_gyp('invalid.gyp', status=1, stderr=None)
-target_str = 'invalid.gyp:bad#target'
-if test.format == 'scons':
- target_str = os.path.join(os.path.realpath(os.curdir), target_str)
-err = ['gyp: Target %s has type executable but standalone_static_library flag '
- 'is only valid for static_library type.' % target_str]
-test.must_contain_all_lines(test.stderr(), err)
-
-# Build a valid standalone_static_library.
-test.run_gyp('mylib.gyp')
-test.build('mylib.gyp', target='prog')
-
-# Verify that the static library is copied to the correct location.
-if test.format == 'scons':
- # For scons, we expect the library to be copied to the shared lib dir.
- standalone_static_library_dir = test.SHARED_LIB
-else:
- # Otherwise, we expect the library to be copied to $PRODUCT_DIR.
- standalone_static_library_dir = test.EXECUTABLE
-path_to_lib = os.path.split(
- test.built_file_path('mylib', type=standalone_static_library_dir))[0]
-lib_name = test.built_file_basename('mylib', type=test.STATIC_LIB)
-path = os.path.join(path_to_lib, lib_name)
-test.must_exist(path)
-
-# Verify that the program runs properly.
-expect = 'hello from mylib.c\n'
-test.run_built_executable('prog', stdout=expect)
-
-# Verify that libmylib.a contains symbols. "ar -x" fails on a 'thin' archive.
-if test.format in ('make', 'ninja') and sys.platform.startswith('linux'):
- retcode = subprocess.call(['ar', '-x', path])
- assert retcode == 0
-
-test.pass_test() \ No newline at end of file
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/standalone-static-library/invalid.gyp b/deps/npm/node_modules/node-gyp/gyp/test/standalone-static-library/invalid.gyp
deleted file mode 100644
index 54b32117e..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/standalone-static-library/invalid.gyp
+++ /dev/null
@@ -1,16 +0,0 @@
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'targets': [
- {
- 'target_name': 'bad',
- 'type': 'executable',
- 'standalone_static_library': 1,
- 'sources': [
- 'prog.c',
- ],
- },
- ],
-} \ No newline at end of file
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/standalone-static-library/mylib.c b/deps/npm/node_modules/node-gyp/gyp/test/standalone-static-library/mylib.c
deleted file mode 100644
index 108be618c..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/standalone-static-library/mylib.c
+++ /dev/null
@@ -1,7 +0,0 @@
-#include <stdio.h>
-
-void print(void)
-{
- printf("hello from mylib.c\n");
- return;
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/standalone-static-library/mylib.gyp b/deps/npm/node_modules/node-gyp/gyp/test/standalone-static-library/mylib.gyp
deleted file mode 100644
index 2d191de31..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/standalone-static-library/mylib.gyp
+++ /dev/null
@@ -1,26 +0,0 @@
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'targets': [
- {
- 'target_name': 'mylib',
- 'type': 'static_library',
- 'standalone_static_library': 1,
- 'sources': [
- 'mylib.c',
- ],
- },
- {
- 'target_name': 'prog',
- 'type': 'executable',
- 'sources': [
- 'prog.c',
- ],
- 'dependencies': [
- 'mylib',
- ],
- },
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/standalone-static-library/prog.c b/deps/npm/node_modules/node-gyp/gyp/test/standalone-static-library/prog.c
deleted file mode 100644
index dc12b6894..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/standalone-static-library/prog.c
+++ /dev/null
@@ -1,7 +0,0 @@
-extern void print(void);
-
-int main(int argc, char *argv[])
-{
- print();
- return 0;
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/standalone/gyptest-standalone.py b/deps/npm/node_modules/node-gyp/gyp/test/standalone/gyptest-standalone.py
deleted file mode 100644
index 87143706a..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/standalone/gyptest-standalone.py
+++ /dev/null
@@ -1,33 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Verifies that a project hierarchy created with the --generator-output=
-option can be built even when it's relocated to a different path.
-"""
-
-import TestGyp
-import os
-
-test = TestGyp.TestGyp()
-
-test.run_gyp('standalone.gyp', '-Gstandalone')
-
-# Look at all the files in the tree to make sure none
-# of them reference the gyp file.
-for root, dirs, files in os.walk("."):
- for file in files:
- # ignore ourself
- if os.path.splitext(__file__)[0] in file:
- continue
- file = os.path.join(root, file)
- contents = open(file).read()
- if 'standalone.gyp' in contents:
- print 'gyp file referenced in generated output: %s' % file
- test.fail_test()
-
-
-test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/standalone/standalone.gyp b/deps/npm/node_modules/node-gyp/gyp/test/standalone/standalone.gyp
deleted file mode 100644
index b2a678543..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/standalone/standalone.gyp
+++ /dev/null
@@ -1,12 +0,0 @@
-# Copyright (c) 2009 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'targets': [
- {
- 'target_name' : 'foo',
- 'type' : 'executable'
- },
- ]
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/subdirectory/gyptest-SYMROOT-all.py b/deps/npm/node_modules/node-gyp/gyp/test/subdirectory/gyptest-SYMROOT-all.py
deleted file mode 100755
index b7509041a..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/subdirectory/gyptest-SYMROOT-all.py
+++ /dev/null
@@ -1,36 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2009 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Verifies building a target and a subsidiary dependent target from a
-.gyp file in a subdirectory, without specifying an explicit output build
-directory, and using the generated solution or project file at the top
-of the tree as the entry point.
-
-The configuration sets the Xcode SYMROOT variable and uses --depth=
-to make Xcode behave like the other build tools--that is, put all
-built targets in a single output build directory at the top of the tree.
-"""
-
-import TestGyp
-
-test = TestGyp.TestGyp()
-
-test.run_gyp('prog1.gyp', '-Dset_symroot=1', '--depth=.', chdir='src')
-
-test.relocate('src', 'relocate/src')
-
-# Suppress the test infrastructure's setting SYMROOT on the command line.
-test.build('prog1.gyp', test.ALL, SYMROOT=None, chdir='relocate/src')
-
-test.run_built_executable('prog1',
- stdout="Hello from prog1.c\n",
- chdir='relocate/src')
-test.run_built_executable('prog2',
- stdout="Hello from prog2.c\n",
- chdir='relocate/src')
-
-test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/subdirectory/gyptest-SYMROOT-default.py b/deps/npm/node_modules/node-gyp/gyp/test/subdirectory/gyptest-SYMROOT-default.py
deleted file mode 100755
index c64ae7da3..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/subdirectory/gyptest-SYMROOT-default.py
+++ /dev/null
@@ -1,37 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2009 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Verifies building a target and a subsidiary dependent target from a
-.gyp file in a subdirectory, without specifying an explicit output build
-directory, and using the generated solution or project file at the top
-of the tree as the entry point.
-
-The configuration sets the Xcode SYMROOT variable and uses --depth=
-to make Xcode behave like the other build tools--that is, put all
-built targets in a single output build directory at the top of the tree.
-"""
-
-import TestGyp
-
-test = TestGyp.TestGyp()
-
-test.run_gyp('prog1.gyp', '-Dset_symroot=1', '--depth=.', chdir='src')
-
-test.relocate('src', 'relocate/src')
-
-# Suppress the test infrastructure's setting SYMROOT on the command line.
-test.build('prog1.gyp', SYMROOT=None, chdir='relocate/src')
-
-test.run_built_executable('prog1',
- stdout="Hello from prog1.c\n",
- chdir='relocate/src')
-
-test.run_built_executable('prog2',
- stdout="Hello from prog2.c\n",
- chdir='relocate/src')
-
-test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/subdirectory/gyptest-subdir-all.py b/deps/npm/node_modules/node-gyp/gyp/test/subdirectory/gyptest-subdir-all.py
deleted file mode 100755
index 3433d4174..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/subdirectory/gyptest-subdir-all.py
+++ /dev/null
@@ -1,33 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Verifies building a subsidiary dependent target from a .gyp file in a
-subdirectory, without specifying an explicit output build directory,
-and using the subdirectory's solution or project file as the entry point.
-"""
-
-import TestGyp
-
-# Ninja and Android don't support running from subdirectories.
-test = TestGyp.TestGyp(formats=['!ninja', '!android'])
-
-test.run_gyp('prog1.gyp', chdir='src')
-
-test.relocate('src', 'relocate/src')
-
-chdir = 'relocate/src/subdir'
-target = test.ALL
-
-test.build('prog2.gyp', target, chdir=chdir)
-
-test.built_file_must_not_exist('prog1', type=test.EXECUTABLE, chdir=chdir)
-
-test.run_built_executable('prog2',
- chdir=chdir,
- stdout="Hello from prog2.c\n")
-
-test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/subdirectory/gyptest-subdir-default.py b/deps/npm/node_modules/node-gyp/gyp/test/subdirectory/gyptest-subdir-default.py
deleted file mode 100755
index d4a2f3f48..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/subdirectory/gyptest-subdir-default.py
+++ /dev/null
@@ -1,33 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Verifies building a subsidiary dependent target from a .gyp file in a
-subdirectory, without specifying an explicit output build directory,
-and using the subdirectory's solution or project file as the entry point.
-"""
-
-import TestGyp
-import errno
-
-# Ninja and Android don't support running from subdirectories.
-test = TestGyp.TestGyp(formats=['!ninja', '!android'])
-
-test.run_gyp('prog1.gyp', chdir='src')
-
-test.relocate('src', 'relocate/src')
-
-chdir = 'relocate/src/subdir'
-
-test.build('prog2.gyp', chdir=chdir)
-
-test.built_file_must_not_exist('prog1', type=test.EXECUTABLE, chdir=chdir)
-
-test.run_built_executable('prog2',
- chdir=chdir,
- stdout="Hello from prog2.c\n")
-
-test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/subdirectory/gyptest-subdir2-deep.py b/deps/npm/node_modules/node-gyp/gyp/test/subdirectory/gyptest-subdir2-deep.py
deleted file mode 100755
index 48548982f..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/subdirectory/gyptest-subdir2-deep.py
+++ /dev/null
@@ -1,25 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2009 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Verifies building a project rooted several layers under src_dir works.
-"""
-
-import TestGyp
-
-test = TestGyp.TestGyp()
-
-test.run_gyp('prog3.gyp', chdir='src/subdir/subdir2')
-
-test.relocate('src', 'relocate/src')
-
-test.build('prog3.gyp', test.ALL, chdir='relocate/src/subdir/subdir2')
-
-test.run_built_executable('prog3',
- chdir='relocate/src/subdir/subdir2',
- stdout="Hello from prog3.c\n")
-
-test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/subdirectory/gyptest-top-all.py b/deps/npm/node_modules/node-gyp/gyp/test/subdirectory/gyptest-top-all.py
deleted file mode 100755
index a29a41b4d..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/subdirectory/gyptest-top-all.py
+++ /dev/null
@@ -1,43 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2009 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Verifies building a target and a subsidiary dependent target from a
-.gyp file in a subdirectory, without specifying an explicit output build
-directory, and using the generated solution or project file at the top
-of the tree as the entry point.
-
-There is a difference here in the default behavior of the underlying
-build tools. Specifically, when building the entire "solution", Xcode
-puts the output of each project relative to the .xcodeproj directory,
-while Visual Studio (and our implementations of SCons and Make) put it
-in a build directory relative to the "solution"--that is, the entry-point
-from which you built the entire tree.
-"""
-
-import TestGyp
-
-test = TestGyp.TestGyp()
-
-test.run_gyp('prog1.gyp', chdir='src')
-
-test.relocate('src', 'relocate/src')
-
-test.build('prog1.gyp', test.ALL, chdir='relocate/src')
-
-test.run_built_executable('prog1',
- stdout="Hello from prog1.c\n",
- chdir='relocate/src')
-
-if test.format == 'xcode':
- chdir = 'relocate/src/subdir'
-else:
- chdir = 'relocate/src'
-test.run_built_executable('prog2',
- chdir=chdir,
- stdout="Hello from prog2.c\n")
-
-test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/subdirectory/gyptest-top-default.py b/deps/npm/node_modules/node-gyp/gyp/test/subdirectory/gyptest-top-default.py
deleted file mode 100755
index ac5f60dbc..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/subdirectory/gyptest-top-default.py
+++ /dev/null
@@ -1,43 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2009 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Verifies building a target and a subsidiary dependent target from a
-.gyp file in a subdirectory, without specifying an explicit output build
-directory, and using the generated solution or project file at the top
-of the tree as the entry point.
-
-There is a difference here in the default behavior of the underlying
-build tools. Specifically, when building the entire "solution", Xcode
-puts the output of each project relative to the .xcodeproj directory,
-while Visual Studio (and our implementations of SCons and Make) put it
-in a build directory relative to the "solution"--that is, the entry-point
-from which you built the entire tree.
-"""
-
-import TestGyp
-
-test = TestGyp.TestGyp()
-
-test.run_gyp('prog1.gyp', chdir='src')
-
-test.relocate('src', 'relocate/src')
-
-test.build('prog1.gyp', chdir='relocate/src')
-
-test.run_built_executable('prog1',
- stdout="Hello from prog1.c\n",
- chdir='relocate/src')
-
-if test.format == 'xcode':
- chdir = 'relocate/src/subdir'
-else:
- chdir = 'relocate/src'
-test.run_built_executable('prog2',
- chdir=chdir,
- stdout="Hello from prog2.c\n")
-
-test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/subdirectory/src/prog1.c b/deps/npm/node_modules/node-gyp/gyp/test/subdirectory/src/prog1.c
deleted file mode 100644
index 161ae8a38..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/subdirectory/src/prog1.c
+++ /dev/null
@@ -1,7 +0,0 @@
-#include <stdio.h>
-
-int main(int argc, char *argv[])
-{
- printf("Hello from prog1.c\n");
- return 0;
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/subdirectory/src/prog1.gyp b/deps/npm/node_modules/node-gyp/gyp/test/subdirectory/src/prog1.gyp
deleted file mode 100644
index 2aa66ce7d..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/subdirectory/src/prog1.gyp
+++ /dev/null
@@ -1,21 +0,0 @@
-# Copyright (c) 2009 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'includes': [
- 'symroot.gypi',
- ],
- 'targets': [
- {
- 'target_name': 'prog1',
- 'type': 'executable',
- 'dependencies': [
- 'subdir/prog2.gyp:prog2',
- ],
- 'sources': [
- 'prog1.c',
- ],
- },
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/subdirectory/src/subdir/prog2.c b/deps/npm/node_modules/node-gyp/gyp/test/subdirectory/src/subdir/prog2.c
deleted file mode 100644
index 7635ae8c1..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/subdirectory/src/subdir/prog2.c
+++ /dev/null
@@ -1,7 +0,0 @@
-#include <stdio.h>
-
-int main(int argc, char *argv[])
-{
- printf("Hello from prog2.c\n");
- return 0;
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/subdirectory/src/subdir/prog2.gyp b/deps/npm/node_modules/node-gyp/gyp/test/subdirectory/src/subdir/prog2.gyp
deleted file mode 100644
index c6cd35f7f..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/subdirectory/src/subdir/prog2.gyp
+++ /dev/null
@@ -1,18 +0,0 @@
-# Copyright (c) 2009 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'includes': [
- '../symroot.gypi',
- ],
- 'targets': [
- {
- 'target_name': 'prog2',
- 'type': 'executable',
- 'sources': [
- 'prog2.c',
- ],
- },
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/subdirectory/src/subdir/subdir2/prog3.c b/deps/npm/node_modules/node-gyp/gyp/test/subdirectory/src/subdir/subdir2/prog3.c
deleted file mode 100644
index 7cfb0fa94..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/subdirectory/src/subdir/subdir2/prog3.c
+++ /dev/null
@@ -1,7 +0,0 @@
-#include <stdio.h>
-
-int main(int argc, char *argv[])
-{
- printf("Hello from prog3.c\n");
- return 0;
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/subdirectory/src/subdir/subdir2/prog3.gyp b/deps/npm/node_modules/node-gyp/gyp/test/subdirectory/src/subdir/subdir2/prog3.gyp
deleted file mode 100644
index b49fb5911..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/subdirectory/src/subdir/subdir2/prog3.gyp
+++ /dev/null
@@ -1,18 +0,0 @@
-# Copyright (c) 2009 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'includes': [
- '../../symroot.gypi',
- ],
- 'targets': [
- {
- 'target_name': 'prog3',
- 'type': 'executable',
- 'sources': [
- 'prog3.c',
- ],
- },
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/subdirectory/src/symroot.gypi b/deps/npm/node_modules/node-gyp/gyp/test/subdirectory/src/symroot.gypi
deleted file mode 100644
index 519916427..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/subdirectory/src/symroot.gypi
+++ /dev/null
@@ -1,16 +0,0 @@
-# Copyright (c) 2009 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'variables': {
- 'set_symroot%': 0,
- },
- 'conditions': [
- ['set_symroot == 1', {
- 'xcode_settings': {
- 'SYMROOT': '<(DEPTH)/build',
- },
- }],
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/toolsets/gyptest-toolsets.py b/deps/npm/node_modules/node-gyp/gyp/test/toolsets/gyptest-toolsets.py
deleted file mode 100755
index 19737f83d..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/toolsets/gyptest-toolsets.py
+++ /dev/null
@@ -1,23 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2009 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Verifies that toolsets are correctly applied
-"""
-
-import TestGyp
-
-# Multiple toolsets are currently only supported by the make generator.
-test = TestGyp.TestGyp(formats=['make'])
-
-test.run_gyp('toolsets.gyp')
-
-test.build('toolsets.gyp', test.ALL)
-
-test.run_built_executable('host-main', stdout="Host\n")
-test.run_built_executable('target-main', stdout="Target\n")
-
-test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/toolsets/main.cc b/deps/npm/node_modules/node-gyp/gyp/test/toolsets/main.cc
deleted file mode 100644
index 0f353ae54..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/toolsets/main.cc
+++ /dev/null
@@ -1,11 +0,0 @@
-/* Copyright (c) 2009 Google Inc. All rights reserved.
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file. */
-
-#include <stdio.h>
-
-const char *GetToolset();
-
-int main(int argc, char *argv[]) {
- printf("%s\n", GetToolset());
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/toolsets/toolsets.cc b/deps/npm/node_modules/node-gyp/gyp/test/toolsets/toolsets.cc
deleted file mode 100644
index a45fa029c..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/toolsets/toolsets.cc
+++ /dev/null
@@ -1,11 +0,0 @@
-/* Copyright (c) 2009 Google Inc. All rights reserved.
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file. */
-
-const char *GetToolset() {
-#ifdef TARGET
- return "Target";
-#else
- return "Host";
-#endif
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/toolsets/toolsets.gyp b/deps/npm/node_modules/node-gyp/gyp/test/toolsets/toolsets.gyp
deleted file mode 100644
index 6afa7ecec..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/toolsets/toolsets.gyp
+++ /dev/null
@@ -1,49 +0,0 @@
-# Copyright (c) 2009 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'target_defaults': {
- 'target_conditions': [
- ['_toolset=="target"', {'defines': ['TARGET']}]
- ]
- },
- 'targets': [
- {
- 'target_name': 'toolsets',
- 'type': 'static_library',
- 'toolsets': ['target', 'host'],
- 'sources': [
- 'toolsets.cc',
- ],
- },
- {
- 'target_name': 'host-main',
- 'type': 'executable',
- 'toolsets': ['host'],
- 'dependencies': ['toolsets'],
- 'sources': [
- 'main.cc',
- ],
- },
- {
- 'target_name': 'target-main',
- 'type': 'executable',
- 'dependencies': ['toolsets'],
- 'sources': [
- 'main.cc',
- ],
- },
- # This tests that build systems can handle a shared library being build for
- # both host and target.
- {
- 'target_name': 'janus',
- 'type': 'shared_library',
- 'toolsets': ['target', 'host'],
- 'sources': [
- 'toolsets.cc',
- ],
- 'cflags': [ '-fPIC' ],
- },
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/toplevel-dir/gyptest-toplevel-dir.py b/deps/npm/node_modules/node-gyp/gyp/test/toplevel-dir/gyptest-toplevel-dir.py
deleted file mode 100755
index 4daa6b2c1..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/toplevel-dir/gyptest-toplevel-dir.py
+++ /dev/null
@@ -1,31 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2009 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Verifies building a subsidiary dependent target from a .gyp file in a
-subdirectory, without specifying an explicit output build directory,
-and using the subdirectory's solution or project file as the entry point.
-"""
-
-import TestGyp
-import errno
-
-test = TestGyp.TestGyp(formats=['ninja', 'make'])
-
-# We want our Makefile to be one dir up from main.gyp.
-test.run_gyp('main.gyp', '--toplevel-dir=..', chdir='src/sub1')
-
-toplevel_dir = 'src'
-
-test.build('all', chdir=toplevel_dir)
-
-test.built_file_must_exist('prog1', type=test.EXECUTABLE, chdir=toplevel_dir)
-
-test.run_built_executable('prog1',
- chdir=toplevel_dir,
- stdout="Hello from prog1.c\n")
-
-test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/toplevel-dir/src/sub1/main.gyp b/deps/npm/node_modules/node-gyp/gyp/test/toplevel-dir/src/sub1/main.gyp
deleted file mode 100644
index 33219010e..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/toplevel-dir/src/sub1/main.gyp
+++ /dev/null
@@ -1,18 +0,0 @@
-# Copyright (c) 2009 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'targets': [
- {
- 'target_name': 'prog1',
- 'type': 'executable',
- 'dependencies': [
- '<(DEPTH)/../sub2/prog2.gyp:prog2',
- ],
- 'sources': [
- 'prog1.c',
- ],
- },
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/toplevel-dir/src/sub1/prog1.c b/deps/npm/node_modules/node-gyp/gyp/test/toplevel-dir/src/sub1/prog1.c
deleted file mode 100644
index 161ae8a38..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/toplevel-dir/src/sub1/prog1.c
+++ /dev/null
@@ -1,7 +0,0 @@
-#include <stdio.h>
-
-int main(int argc, char *argv[])
-{
- printf("Hello from prog1.c\n");
- return 0;
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/toplevel-dir/src/sub2/prog2.c b/deps/npm/node_modules/node-gyp/gyp/test/toplevel-dir/src/sub2/prog2.c
deleted file mode 100644
index 7635ae8c1..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/toplevel-dir/src/sub2/prog2.c
+++ /dev/null
@@ -1,7 +0,0 @@
-#include <stdio.h>
-
-int main(int argc, char *argv[])
-{
- printf("Hello from prog2.c\n");
- return 0;
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/toplevel-dir/src/sub2/prog2.gyp b/deps/npm/node_modules/node-gyp/gyp/test/toplevel-dir/src/sub2/prog2.gyp
deleted file mode 100644
index 593454836..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/toplevel-dir/src/sub2/prog2.gyp
+++ /dev/null
@@ -1,15 +0,0 @@
-# Copyright (c) 2009 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'targets': [
- {
- 'target_name': 'prog2',
- 'type': 'executable',
- 'sources': [
- 'prog2.c',
- ],
- },
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/variables/commands/commands-repeated.gyp b/deps/npm/node_modules/node-gyp/gyp/test/variables/commands/commands-repeated.gyp
deleted file mode 100644
index 822ae4f05..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/variables/commands/commands-repeated.gyp
+++ /dev/null
@@ -1,128 +0,0 @@
-# Copyright (c) 2009 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-# This is a simple test file to make sure that variable substitution
-# happens correctly. Run "run_tests.py" using python to generate the
-# output from this gyp file.
-
-{
- 'variables': {
- 'pi': 'import math; print math.pi',
- 'third_letters': "<(other_letters)HIJK",
- 'letters_list': 'ABCD',
- 'other_letters': '<(letters_list)EFG',
- 'check_included': '<(included_variable)',
- 'check_lists': [
- '<(included_variable)',
- '<(third_letters)',
- ],
- 'check_int': 5,
- 'check_str_int': '6',
- 'check_list_int': [
- 7,
- '8',
- 9,
- ],
- 'not_int_1': ' 10',
- 'not_int_2': '11 ',
- 'not_int_3': '012',
- 'not_int_4': '13.0',
- 'not_int_5': '+14',
- 'negative_int': '-15',
- 'zero_int': '0',
- },
- 'includes': [
- 'commands.gypi',
- ],
- 'targets': [
- {
- 'target_name': 'foo',
- 'type': 'none',
- 'variables': {
- 'var1': '<!(["python", "-c", "<(pi)"])',
- 'var2': '<!(python -c "print \'<!(python -c "<(pi)") <(letters_list)\'")',
- 'var3': '<!(python -c "print \'<(letters_list)\'")',
- 'var4': '<(<!(python -c "print \'letters_list\'"))',
- 'var5': 'letters_',
- 'var6': 'list',
- 'var7': '<(check_int)',
- 'var8': '<(check_int)blah',
- 'var9': '<(check_str_int)',
- 'var10': '<(check_list_int)',
- 'var11': ['<@(check_list_int)'],
- 'var12': '<(not_int_1)',
- 'var13': '<(not_int_2)',
- 'var14': '<(not_int_3)',
- 'var15': '<(not_int_4)',
- 'var16': '<(not_int_5)',
- 'var17': '<(negative_int)',
- 'var18': '<(zero_int)',
- # A second set with different names to make sure they only execute the
- # commands once.
- 'var1prime': '<!(["python", "-c", "<(pi)"])',
- 'var2prime': '<!(python -c "print \'<!(python -c "<(pi)") <(letters_list)\'")',
- 'var3prime': '<!(python -c "print \'<(letters_list)\'")',
- 'var4prime': '<(<!(python -c "print \'letters_list\'"))',
- },
- 'actions': [
- {
- 'action_name': 'test_action',
- 'variables': {
- 'var7': '<!(echo <(var5)<(var6))',
- },
- 'inputs' : [
- '<(var2)',
- ],
- 'outputs': [
- '<(var4)',
- '<(var7)',
- ],
- 'action': [
- 'echo',
- '<(_inputs)',
- '<(_outputs)',
- ],
- },
- # Again with the same vars to make sure the right things happened.
- {
- 'action_name': 'test_action_prime',
- 'variables': {
- 'var7': '<!(echo <(var5)<(var6))',
- },
- 'inputs' : [
- '<(var2)',
- ],
- 'outputs': [
- '<(var4)',
- '<(var7)',
- ],
- 'action': [
- 'echo',
- '<(_inputs)',
- '<(_outputs)',
- ],
- },
- # And one more time with the other vars...
- {
- 'action_name': 'test_action_prime_prime',
- 'variables': {
- 'var7': '<!(echo <(var5)<(var6))',
- },
- 'inputs' : [
- '<(var2prime)',
- ],
- 'outputs': [
- '<(var4prime)',
- '<(var7)',
- ],
- 'action': [
- 'echo',
- '<(_inputs)',
- '<(_outputs)',
- ],
- },
- ],
- },
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/variables/commands/commands-repeated.gyp.stdout b/deps/npm/node_modules/node-gyp/gyp/test/variables/commands/commands-repeated.gyp.stdout
deleted file mode 100644
index 7f386af7c..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/variables/commands/commands-repeated.gyp.stdout
+++ /dev/null
@@ -1,136 +0,0 @@
-VARIABLES:input.py:562:ExpandVariables Matches: {'content': 'letters_list', 'is_array': '', 'replace': '<(letters_list)', 'type': '<', 'command_string': None}
-VARIABLES:input.py:797:ExpandVariables Found output 'ABCDEFG', recursing.
-VARIABLES:input.py:562:ExpandVariables Matches: {'content': 'other_letters', 'is_array': '', 'replace': '<(other_letters)', 'type': '<', 'command_string': None}
-VARIABLES:input.py:797:ExpandVariables Found output '<(letters_list)EFGHIJK', recursing.
-VARIABLES:input.py:562:ExpandVariables Matches: {'content': 'letters_list', 'is_array': '', 'replace': '<(letters_list)', 'type': '<', 'command_string': None}
-VARIABLES:input.py:797:ExpandVariables Found output 'ABCDEFGHIJK', recursing.
-VARIABLES:input.py:562:ExpandVariables Matches: {'content': 'included_variable', 'is_array': '', 'replace': '<(included_variable)', 'type': '<', 'command_string': None}
-VARIABLES:input.py:797:ExpandVariables Found output 'XYZ', recursing.
-VARIABLES:input.py:562:ExpandVariables Matches: {'content': 'included_variable', 'is_array': '', 'replace': '<(included_variable)', 'type': '<', 'command_string': None}
-VARIABLES:input.py:797:ExpandVariables Found output 'XYZ', recursing.
-VARIABLES:input.py:562:ExpandVariables Matches: {'content': 'third_letters', 'is_array': '', 'replace': '<(third_letters)', 'type': '<', 'command_string': None}
-VARIABLES:input.py:797:ExpandVariables Found output '<(other_letters)HIJK', recursing.
-VARIABLES:input.py:562:ExpandVariables Matches: {'content': 'other_letters', 'is_array': '', 'replace': '<(other_letters)', 'type': '<', 'command_string': None}
-VARIABLES:input.py:797:ExpandVariables Found output '<(letters_list)EFGHIJK', recursing.
-VARIABLES:input.py:562:ExpandVariables Matches: {'content': 'letters_list', 'is_array': '', 'replace': '<(letters_list)', 'type': '<', 'command_string': None}
-VARIABLES:input.py:797:ExpandVariables Found output 'ABCDEFGHIJK', recursing.
-VARIABLES:input.py:562:ExpandVariables Matches: {'content': 'letters_list', 'is_array': '', 'replace': '<(letters_list)', 'type': '<', 'command_string': None}
-VARIABLES:input.py:562:ExpandVariables Matches: {'content': 'python -c "print \'<!(python -c "<(pi', 'is_array': '', 'replace': '<!(python -c "print \'<!(python -c "<(pi)', 'type': '<!', 'command_string': None}
-VARIABLES:input.py:562:ExpandVariables Matches: {'content': 'python -c "<(pi', 'is_array': '', 'replace': '<!(python -c "<(pi)', 'type': '<!', 'command_string': None}
-VARIABLES:input.py:562:ExpandVariables Matches: {'content': 'pi', 'is_array': '', 'replace': '<(pi)', 'type': '<', 'command_string': None}
-VARIABLES:input.py:797:ExpandVariables Found output 'python -c "import math; print math.pi"', recursing.
-VARIABLES:input.py:676:ExpandVariables Executing command 'python -c "import math; print math.pi"' in directory 'None'
-VARIABLES:input.py:797:ExpandVariables Found output 'python -c "print \'3.14159265359 ABCD\'"', recursing.
-VARIABLES:input.py:676:ExpandVariables Executing command 'python -c "print '3.14159265359 ABCD'"' in directory 'None'
-VARIABLES:input.py:797:ExpandVariables Found output '3.14159265359 ABCD', recursing.
-VARIABLES:input.py:562:ExpandVariables Matches: {'content': '"python", "-c", "<(pi', 'is_array': '[', 'replace': '<!(["python", "-c", "<(pi)', 'type': '<!', 'command_string': None}
-VARIABLES:input.py:562:ExpandVariables Matches: {'content': 'pi', 'is_array': '', 'replace': '<(pi)', 'type': '<', 'command_string': None}
-VARIABLES:input.py:797:ExpandVariables Found output '["python", "-c", "import math; print math.pi"]', recursing.
-VARIABLES:input.py:676:ExpandVariables Executing command '['python', '-c', 'import math; print math.pi']' in directory 'None'
-VARIABLES:input.py:797:ExpandVariables Found output '3.14159265359', recursing.
-VARIABLES:input.py:562:ExpandVariables Matches: {'content': '<!(python -c "print \'letters_list\'"', 'is_array': '', 'replace': '<(<!(python -c "print \'letters_list\'")', 'type': '<', 'command_string': None}
-VARIABLES:input.py:562:ExpandVariables Matches: {'content': 'python -c "print \'letters_list\'"', 'is_array': '', 'replace': '<!(python -c "print \'letters_list\'")', 'type': '<!', 'command_string': None}
-VARIABLES:input.py:676:ExpandVariables Executing command 'python -c "print 'letters_list'"' in directory 'None'
-VARIABLES:input.py:797:ExpandVariables Found output 'letters_list', recursing.
-VARIABLES:input.py:797:ExpandVariables Found output 'ABCD', recursing.
-VARIABLES:input.py:562:ExpandVariables Matches: {'content': 'check_int', 'is_array': '', 'replace': '<(check_int)', 'type': '<', 'command_string': None}
-VARIABLES:input.py:797:ExpandVariables Found output '5', recursing.
-VARIABLES:input.py:562:ExpandVariables Matches: {'content': '"python", "-c", "<(pi', 'is_array': '[', 'replace': '<!(["python", "-c", "<(pi)', 'type': '<!', 'command_string': None}
-VARIABLES:input.py:562:ExpandVariables Matches: {'content': 'pi', 'is_array': '', 'replace': '<(pi)', 'type': '<', 'command_string': None}
-VARIABLES:input.py:797:ExpandVariables Found output '["python", "-c", "import math; print math.pi"]', recursing.
-VARIABLES:input.py:721:ExpandVariables Had cache value for command '['python', '-c', 'import math; print math.pi']' in directory 'None'
-VARIABLES:input.py:797:ExpandVariables Found output '3.14159265359', recursing.
-VARIABLES:input.py:562:ExpandVariables Matches: {'content': 'python -c "print \'<(letters_list', 'is_array': '', 'replace': '<!(python -c "print \'<(letters_list)', 'type': '<!', 'command_string': None}
-VARIABLES:input.py:562:ExpandVariables Matches: {'content': 'letters_list', 'is_array': '', 'replace': '<(letters_list)', 'type': '<', 'command_string': None}
-VARIABLES:input.py:797:ExpandVariables Found output 'python -c "print \'ABCD\'"', recursing.
-VARIABLES:input.py:676:ExpandVariables Executing command 'python -c "print 'ABCD'"' in directory 'None'
-VARIABLES:input.py:797:ExpandVariables Found output 'ABCD', recursing.
-VARIABLES:input.py:562:ExpandVariables Matches: {'content': 'letters_list', 'is_array': '', 'replace': '<(letters_list)', 'type': '<', 'command_string': None}
-VARIABLES:input.py:562:ExpandVariables Matches: {'content': 'python -c "print \'<!(python -c "<(pi', 'is_array': '', 'replace': '<!(python -c "print \'<!(python -c "<(pi)', 'type': '<!', 'command_string': None}
-VARIABLES:input.py:562:ExpandVariables Matches: {'content': 'python -c "<(pi', 'is_array': '', 'replace': '<!(python -c "<(pi)', 'type': '<!', 'command_string': None}
-VARIABLES:input.py:562:ExpandVariables Matches: {'content': 'pi', 'is_array': '', 'replace': '<(pi)', 'type': '<', 'command_string': None}
-VARIABLES:input.py:797:ExpandVariables Found output 'python -c "import math; print math.pi"', recursing.
-VARIABLES:input.py:721:ExpandVariables Had cache value for command 'python -c "import math; print math.pi"' in directory 'None'
-VARIABLES:input.py:797:ExpandVariables Found output 'python -c "print \'3.14159265359 ABCD\'"', recursing.
-VARIABLES:input.py:721:ExpandVariables Had cache value for command 'python -c "print '3.14159265359 ABCD'"' in directory 'None'
-VARIABLES:input.py:797:ExpandVariables Found output '3.14159265359 ABCD', recursing.
-VARIABLES:input.py:562:ExpandVariables Matches: {'content': 'check_str_int', 'is_array': '', 'replace': '<(check_str_int)', 'type': '<', 'command_string': None}
-VARIABLES:input.py:797:ExpandVariables Found output '6', recursing.
-VARIABLES:input.py:562:ExpandVariables Matches: {'content': 'check_int', 'is_array': '', 'replace': '<(check_int)', 'type': '<', 'command_string': None}
-VARIABLES:input.py:797:ExpandVariables Found output '5blah', recursing.
-VARIABLES:input.py:562:ExpandVariables Matches: {'content': '<!(python -c "print \'letters_list\'"', 'is_array': '', 'replace': '<(<!(python -c "print \'letters_list\'")', 'type': '<', 'command_string': None}
-VARIABLES:input.py:562:ExpandVariables Matches: {'content': 'python -c "print \'letters_list\'"', 'is_array': '', 'replace': '<!(python -c "print \'letters_list\'")', 'type': '<!', 'command_string': None}
-VARIABLES:input.py:721:ExpandVariables Had cache value for command 'python -c "print 'letters_list'"' in directory 'None'
-VARIABLES:input.py:797:ExpandVariables Found output 'letters_list', recursing.
-VARIABLES:input.py:797:ExpandVariables Found output 'ABCD', recursing.
-VARIABLES:input.py:562:ExpandVariables Matches: {'content': 'python -c "print \'<(letters_list', 'is_array': '', 'replace': '<!(python -c "print \'<(letters_list)', 'type': '<!', 'command_string': None}
-VARIABLES:input.py:562:ExpandVariables Matches: {'content': 'letters_list', 'is_array': '', 'replace': '<(letters_list)', 'type': '<', 'command_string': None}
-VARIABLES:input.py:797:ExpandVariables Found output 'python -c "print \'ABCD\'"', recursing.
-VARIABLES:input.py:721:ExpandVariables Had cache value for command 'python -c "print 'ABCD'"' in directory 'None'
-VARIABLES:input.py:797:ExpandVariables Found output 'ABCD', recursing.
-VARIABLES:input.py:562:ExpandVariables Matches: {'content': 'not_int_4', 'is_array': '', 'replace': '<(not_int_4)', 'type': '<', 'command_string': None}
-VARIABLES:input.py:797:ExpandVariables Found output '13.0', recursing.
-VARIABLES:input.py:562:ExpandVariables Matches: {'content': 'not_int_3', 'is_array': '', 'replace': '<(not_int_3)', 'type': '<', 'command_string': None}
-VARIABLES:input.py:797:ExpandVariables Found output '012', recursing.
-VARIABLES:input.py:562:ExpandVariables Matches: {'content': 'negative_int', 'is_array': '', 'replace': '<(negative_int)', 'type': '<', 'command_string': None}
-VARIABLES:input.py:797:ExpandVariables Found output '-15', recursing.
-VARIABLES:input.py:562:ExpandVariables Matches: {'content': 'not_int_5', 'is_array': '', 'replace': '<(not_int_5)', 'type': '<', 'command_string': None}
-VARIABLES:input.py:797:ExpandVariables Found output '+14', recursing.
-VARIABLES:input.py:562:ExpandVariables Matches: {'content': 'check_list_int', 'is_array': '', 'replace': '<(check_list_int)', 'type': '<', 'command_string': None}
-VARIABLES:input.py:797:ExpandVariables Found output '7 8 9', recursing.
-VARIABLES:input.py:562:ExpandVariables Matches: {'content': 'not_int_2', 'is_array': '', 'replace': '<(not_int_2)', 'type': '<', 'command_string': None}
-VARIABLES:input.py:797:ExpandVariables Found output '11 ', recursing.
-VARIABLES:input.py:562:ExpandVariables Matches: {'content': 'not_int_1', 'is_array': '', 'replace': '<(not_int_1)', 'type': '<', 'command_string': None}
-VARIABLES:input.py:797:ExpandVariables Found output ' 10', recursing.
-VARIABLES:input.py:562:ExpandVariables Matches: {'content': 'zero_int', 'is_array': '', 'replace': '<(zero_int)', 'type': '<', 'command_string': None}
-VARIABLES:input.py:797:ExpandVariables Found output '0', recursing.
-VARIABLES:input.py:562:ExpandVariables Matches: {'content': 'check_list_int', 'is_array': '', 'replace': '<@(check_list_int)', 'type': '<@', 'command_string': None}
-VARIABLES:input.py:797:ExpandVariables Found output [7, 8, 9], recursing.
-VARIABLES:input.py:562:ExpandVariables Matches: {'content': 'var6', 'is_array': '', 'replace': '<(var6)', 'type': '<', 'command_string': None}
-VARIABLES:input.py:562:ExpandVariables Matches: {'content': 'echo <(var5', 'is_array': '', 'replace': '<!(echo <(var5)', 'type': '<!', 'command_string': None}
-VARIABLES:input.py:562:ExpandVariables Matches: {'content': 'var5', 'is_array': '', 'replace': '<(var5)', 'type': '<', 'command_string': None}
-VARIABLES:input.py:797:ExpandVariables Found output 'echo letters_list', recursing.
-VARIABLES:input.py:676:ExpandVariables Executing command 'echo letters_list' in directory 'None'
-VARIABLES:input.py:797:ExpandVariables Found output 'letters_list', recursing.
-VARIABLES:input.py:562:ExpandVariables Matches: {'content': '_inputs', 'is_array': '', 'replace': '<(_inputs)', 'type': '<', 'command_string': None}
-VARIABLES:input.py:562:ExpandVariables Matches: {'content': 'var2', 'is_array': '', 'replace': '<(var2)', 'type': '<', 'command_string': None}
-VARIABLES:input.py:797:ExpandVariables Found output '3.14159265359 ABCD', recursing.
-VARIABLES:input.py:797:ExpandVariables Found output '"3.14159265359 ABCD"', recursing.
-VARIABLES:input.py:562:ExpandVariables Matches: {'content': '_outputs', 'is_array': '', 'replace': '<(_outputs)', 'type': '<', 'command_string': None}
-VARIABLES:input.py:562:ExpandVariables Matches: {'content': 'var4', 'is_array': '', 'replace': '<(var4)', 'type': '<', 'command_string': None}
-VARIABLES:input.py:797:ExpandVariables Found output 'ABCD', recursing.
-VARIABLES:input.py:562:ExpandVariables Matches: {'content': 'var7', 'is_array': '', 'replace': '<(var7)', 'type': '<', 'command_string': None}
-VARIABLES:input.py:797:ExpandVariables Found output 'letters_list', recursing.
-VARIABLES:input.py:797:ExpandVariables Found output 'ABCD letters_list', recursing.
-VARIABLES:input.py:562:ExpandVariables Matches: {'content': 'var6', 'is_array': '', 'replace': '<(var6)', 'type': '<', 'command_string': None}
-VARIABLES:input.py:562:ExpandVariables Matches: {'content': 'echo <(var5', 'is_array': '', 'replace': '<!(echo <(var5)', 'type': '<!', 'command_string': None}
-VARIABLES:input.py:562:ExpandVariables Matches: {'content': 'var5', 'is_array': '', 'replace': '<(var5)', 'type': '<', 'command_string': None}
-VARIABLES:input.py:797:ExpandVariables Found output 'echo letters_list', recursing.
-VARIABLES:input.py:721:ExpandVariables Had cache value for command 'echo letters_list' in directory 'None'
-VARIABLES:input.py:797:ExpandVariables Found output 'letters_list', recursing.
-VARIABLES:input.py:562:ExpandVariables Matches: {'content': '_inputs', 'is_array': '', 'replace': '<(_inputs)', 'type': '<', 'command_string': None}
-VARIABLES:input.py:562:ExpandVariables Matches: {'content': 'var2', 'is_array': '', 'replace': '<(var2)', 'type': '<', 'command_string': None}
-VARIABLES:input.py:797:ExpandVariables Found output '3.14159265359 ABCD', recursing.
-VARIABLES:input.py:797:ExpandVariables Found output '"3.14159265359 ABCD"', recursing.
-VARIABLES:input.py:562:ExpandVariables Matches: {'content': '_outputs', 'is_array': '', 'replace': '<(_outputs)', 'type': '<', 'command_string': None}
-VARIABLES:input.py:562:ExpandVariables Matches: {'content': 'var4', 'is_array': '', 'replace': '<(var4)', 'type': '<', 'command_string': None}
-VARIABLES:input.py:797:ExpandVariables Found output 'ABCD', recursing.
-VARIABLES:input.py:562:ExpandVariables Matches: {'content': 'var7', 'is_array': '', 'replace': '<(var7)', 'type': '<', 'command_string': None}
-VARIABLES:input.py:797:ExpandVariables Found output 'letters_list', recursing.
-VARIABLES:input.py:797:ExpandVariables Found output 'ABCD letters_list', recursing.
-VARIABLES:input.py:562:ExpandVariables Matches: {'content': 'var6', 'is_array': '', 'replace': '<(var6)', 'type': '<', 'command_string': None}
-VARIABLES:input.py:562:ExpandVariables Matches: {'content': 'echo <(var5', 'is_array': '', 'replace': '<!(echo <(var5)', 'type': '<!', 'command_string': None}
-VARIABLES:input.py:562:ExpandVariables Matches: {'content': 'var5', 'is_array': '', 'replace': '<(var5)', 'type': '<', 'command_string': None}
-VARIABLES:input.py:797:ExpandVariables Found output 'echo letters_list', recursing.
-VARIABLES:input.py:721:ExpandVariables Had cache value for command 'echo letters_list' in directory 'None'
-VARIABLES:input.py:797:ExpandVariables Found output 'letters_list', recursing.
-VARIABLES:input.py:562:ExpandVariables Matches: {'content': '_inputs', 'is_array': '', 'replace': '<(_inputs)', 'type': '<', 'command_string': None}
-VARIABLES:input.py:562:ExpandVariables Matches: {'content': 'var2prime', 'is_array': '', 'replace': '<(var2prime)', 'type': '<', 'command_string': None}
-VARIABLES:input.py:797:ExpandVariables Found output '3.14159265359 ABCD', recursing.
-VARIABLES:input.py:797:ExpandVariables Found output '"3.14159265359 ABCD"', recursing.
-VARIABLES:input.py:562:ExpandVariables Matches: {'content': '_outputs', 'is_array': '', 'replace': '<(_outputs)', 'type': '<', 'command_string': None}
-VARIABLES:input.py:562:ExpandVariables Matches: {'content': 'var4prime', 'is_array': '', 'replace': '<(var4prime)', 'type': '<', 'command_string': None}
-VARIABLES:input.py:797:ExpandVariables Found output 'ABCD', recursing.
-VARIABLES:input.py:562:ExpandVariables Matches: {'content': 'var7', 'is_array': '', 'replace': '<(var7)', 'type': '<', 'command_string': None}
-VARIABLES:input.py:797:ExpandVariables Found output 'letters_list', recursing.
-VARIABLES:input.py:797:ExpandVariables Found output 'ABCD letters_list', recursing.
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/variables/commands/commands-repeated.gypd.golden b/deps/npm/node_modules/node-gyp/gyp/test/variables/commands/commands-repeated.gypd.golden
deleted file mode 100644
index 96615b663..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/variables/commands/commands-repeated.gypd.golden
+++ /dev/null
@@ -1,72 +0,0 @@
-{'_DEPTH': '.',
- 'included_files': ['commands-repeated.gyp', 'commands.gypi'],
- 'targets': [{'actions': [{'action': ['echo',
- '"3.14159265359 ABCD"',
- 'ABCD letters_list'],
- 'action_name': 'test_action',
- 'inputs': ['3.14159265359 ABCD'],
- 'outputs': ['ABCD', 'letters_list'],
- 'variables': {'var7': 'letters_list'}},
- {'action': ['echo',
- '"3.14159265359 ABCD"',
- 'ABCD letters_list'],
- 'action_name': 'test_action_prime',
- 'inputs': ['3.14159265359 ABCD'],
- 'outputs': ['ABCD', 'letters_list'],
- 'variables': {'var7': 'letters_list'}},
- {'action': ['echo',
- '"3.14159265359 ABCD"',
- 'ABCD letters_list'],
- 'action_name': 'test_action_prime_prime',
- 'inputs': ['3.14159265359 ABCD'],
- 'outputs': ['ABCD', 'letters_list'],
- 'variables': {'var7': 'letters_list'}}],
- 'configurations': {'Default': {}},
- 'default_configuration': 'Default',
- 'target_name': 'foo',
- 'toolset': 'target',
- 'type': 'none',
- 'variables': {'var1': '3.14159265359',
- 'var10': '7 8 9',
- 'var11': ['7', '8', '9'],
- 'var12': ' 10',
- 'var13': '11 ',
- 'var14': '012',
- 'var15': '13.0',
- 'var16': '+14',
- 'var17': '-15',
- 'var18': '0',
- 'var1prime': '3.14159265359',
- 'var2': '3.14159265359 ABCD',
- 'var2prime': '3.14159265359 ABCD',
- 'var3': 'ABCD',
- 'var3prime': 'ABCD',
- 'var4': 'ABCD',
- 'var4prime': 'ABCD',
- 'var5': 'letters_',
- 'var6': 'list',
- 'var7': '5',
- 'var8': '5blah',
- 'var9': '6'}},
- {'configurations': {'Default': {}},
- 'default_configuration': 'Default',
- 'target_name': 'dummy',
- 'toolset': 'target',
- 'type': 'none'}],
- 'variables': {'check_included': 'XYZ',
- 'check_int': '5',
- 'check_list_int': ['7', '8', '9'],
- 'check_lists': ['XYZ', 'ABCDEFGHIJK'],
- 'check_str_int': '6',
- 'included_variable': 'XYZ',
- 'letters_list': 'ABCD',
- 'negative_int': '-15',
- 'not_int_1': ' 10',
- 'not_int_2': '11 ',
- 'not_int_3': '012',
- 'not_int_4': '13.0',
- 'not_int_5': '+14',
- 'other_letters': 'ABCDEFG',
- 'pi': 'import math; print math.pi',
- 'third_letters': 'ABCDEFGHIJK',
- 'zero_int': '0'}}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/variables/commands/commands.gyp b/deps/npm/node_modules/node-gyp/gyp/test/variables/commands/commands.gyp
deleted file mode 100644
index 985f8bd49..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/variables/commands/commands.gyp
+++ /dev/null
@@ -1,86 +0,0 @@
-# Copyright (c) 2009 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-# This is a simple test file to make sure that variable substitution
-# happens correctly. Run "run_tests.py" using python to generate the
-# output from this gyp file.
-
-{
- 'variables': {
- 'pi': 'import math; print math.pi',
- 'third_letters': "<(other_letters)HIJK",
- 'letters_list': 'ABCD',
- 'other_letters': '<(letters_list)EFG',
- 'check_included': '<(included_variable)',
- 'check_lists': [
- '<(included_variable)',
- '<(third_letters)',
- ],
- 'check_int': 5,
- 'check_str_int': '6',
- 'check_list_int': [
- 7,
- '8',
- 9,
- ],
- 'not_int_1': ' 10',
- 'not_int_2': '11 ',
- 'not_int_3': '012',
- 'not_int_4': '13.0',
- 'not_int_5': '+14',
- 'negative_int': '-15',
- 'zero_int': '0',
- },
- 'includes': [
- 'commands.gypi',
- ],
- 'targets': [
- {
- 'target_name': 'foo',
- 'type': 'none',
- 'variables': {
- 'var1': '<!(["python", "-c", "<(pi)"])',
- 'var2': '<!(python -c "print \'<!(python -c "<(pi)") <(letters_list)\'")',
- 'var3': '<!(python -c "print \'<(letters_list)\'")',
- 'var4': '<(<!(python -c "print \'letters_list\'"))',
- 'var5': 'letters_',
- 'var6': 'list',
- 'var7': '<(check_int)',
- 'var8': '<(check_int)blah',
- 'var9': '<(check_str_int)',
- 'var10': '<(check_list_int)',
- 'var11': ['<@(check_list_int)'],
- 'var12': '<(not_int_1)',
- 'var13': '<(not_int_2)',
- 'var14': '<(not_int_3)',
- 'var15': '<(not_int_4)',
- 'var16': '<(not_int_5)',
- 'var17': '<(negative_int)',
- 'var18': '<(zero_int)',
- 'var19': ['<!@(python test.py)'],
- 'var20': '<!(python test.py)',
- },
- 'actions': [
- {
- 'action_name': 'test_action',
- 'variables': {
- 'var7': '<!(echo <(var5)<(var6))',
- },
- 'inputs' : [
- '<(var2)',
- ],
- 'outputs': [
- '<(var4)',
- '<(var7)',
- ],
- 'action': [
- 'echo',
- '<(_inputs)',
- '<(_outputs)',
- ],
- },
- ],
- },
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/variables/commands/commands.gyp.ignore-env.stdout b/deps/npm/node_modules/node-gyp/gyp/test/variables/commands/commands.gyp.ignore-env.stdout
deleted file mode 100644
index 9812b6936..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/variables/commands/commands.gyp.ignore-env.stdout
+++ /dev/null
@@ -1,86 +0,0 @@
-VARIABLES:input.py:562:ExpandVariables Matches: {'content': 'letters_list', 'is_array': '', 'replace': '<(letters_list)', 'type': '<', 'command_string': None}
-VARIABLES:input.py:797:ExpandVariables Found output 'ABCDEFG', recursing.
-VARIABLES:input.py:562:ExpandVariables Matches: {'content': 'other_letters', 'is_array': '', 'replace': '<(other_letters)', 'type': '<', 'command_string': None}
-VARIABLES:input.py:797:ExpandVariables Found output '<(letters_list)EFGHIJK', recursing.
-VARIABLES:input.py:562:ExpandVariables Matches: {'content': 'letters_list', 'is_array': '', 'replace': '<(letters_list)', 'type': '<', 'command_string': None}
-VARIABLES:input.py:797:ExpandVariables Found output 'ABCDEFGHIJK', recursing.
-VARIABLES:input.py:562:ExpandVariables Matches: {'content': 'included_variable', 'is_array': '', 'replace': '<(included_variable)', 'type': '<', 'command_string': None}
-VARIABLES:input.py:797:ExpandVariables Found output 'XYZ', recursing.
-VARIABLES:input.py:562:ExpandVariables Matches: {'content': 'included_variable', 'is_array': '', 'replace': '<(included_variable)', 'type': '<', 'command_string': None}
-VARIABLES:input.py:797:ExpandVariables Found output 'XYZ', recursing.
-VARIABLES:input.py:562:ExpandVariables Matches: {'content': 'third_letters', 'is_array': '', 'replace': '<(third_letters)', 'type': '<', 'command_string': None}
-VARIABLES:input.py:797:ExpandVariables Found output '<(other_letters)HIJK', recursing.
-VARIABLES:input.py:562:ExpandVariables Matches: {'content': 'other_letters', 'is_array': '', 'replace': '<(other_letters)', 'type': '<', 'command_string': None}
-VARIABLES:input.py:797:ExpandVariables Found output '<(letters_list)EFGHIJK', recursing.
-VARIABLES:input.py:562:ExpandVariables Matches: {'content': 'letters_list', 'is_array': '', 'replace': '<(letters_list)', 'type': '<', 'command_string': None}
-VARIABLES:input.py:797:ExpandVariables Found output 'ABCDEFGHIJK', recursing.
-VARIABLES:input.py:562:ExpandVariables Matches: {'content': '<!(python -c "print \'letters_list\'"', 'is_array': '', 'replace': '<(<!(python -c "print \'letters_list\'")', 'type': '<', 'command_string': None}
-VARIABLES:input.py:562:ExpandVariables Matches: {'content': 'python -c "print \'letters_list\'"', 'is_array': '', 'replace': '<!(python -c "print \'letters_list\'")', 'type': '<!', 'command_string': None}
-VARIABLES:input.py:676:ExpandVariables Executing command 'python -c "print 'letters_list'"' in directory 'None'
-VARIABLES:input.py:797:ExpandVariables Found output 'letters_list', recursing.
-VARIABLES:input.py:797:ExpandVariables Found output 'ABCD', recursing.
-VARIABLES:input.py:562:ExpandVariables Matches: {'content': 'check_int', 'is_array': '', 'replace': '<(check_int)', 'type': '<', 'command_string': None}
-VARIABLES:input.py:797:ExpandVariables Found output '5', recursing.
-VARIABLES:input.py:562:ExpandVariables Matches: {'content': '"python", "-c", "<(pi', 'is_array': '[', 'replace': '<!(["python", "-c", "<(pi)', 'type': '<!', 'command_string': None}
-VARIABLES:input.py:562:ExpandVariables Matches: {'content': 'pi', 'is_array': '', 'replace': '<(pi)', 'type': '<', 'command_string': None}
-VARIABLES:input.py:797:ExpandVariables Found output '["python", "-c", "import math; print math.pi"]', recursing.
-VARIABLES:input.py:676:ExpandVariables Executing command '['python', '-c', 'import math; print math.pi']' in directory 'None'
-VARIABLES:input.py:797:ExpandVariables Found output '3.14159265359', recursing.
-VARIABLES:input.py:562:ExpandVariables Matches: {'content': 'python -c "print \'<(letters_list', 'is_array': '', 'replace': '<!(python -c "print \'<(letters_list)', 'type': '<!', 'command_string': None}
-VARIABLES:input.py:562:ExpandVariables Matches: {'content': 'letters_list', 'is_array': '', 'replace': '<(letters_list)', 'type': '<', 'command_string': None}
-VARIABLES:input.py:797:ExpandVariables Found output 'python -c "print \'ABCD\'"', recursing.
-VARIABLES:input.py:676:ExpandVariables Executing command 'python -c "print 'ABCD'"' in directory 'None'
-VARIABLES:input.py:797:ExpandVariables Found output 'ABCD', recursing.
-VARIABLES:input.py:562:ExpandVariables Matches: {'content': 'letters_list', 'is_array': '', 'replace': '<(letters_list)', 'type': '<', 'command_string': None}
-VARIABLES:input.py:562:ExpandVariables Matches: {'content': 'python -c "print \'<!(python -c "<(pi', 'is_array': '', 'replace': '<!(python -c "print \'<!(python -c "<(pi)', 'type': '<!', 'command_string': None}
-VARIABLES:input.py:562:ExpandVariables Matches: {'content': 'python -c "<(pi', 'is_array': '', 'replace': '<!(python -c "<(pi)', 'type': '<!', 'command_string': None}
-VARIABLES:input.py:562:ExpandVariables Matches: {'content': 'pi', 'is_array': '', 'replace': '<(pi)', 'type': '<', 'command_string': None}
-VARIABLES:input.py:797:ExpandVariables Found output 'python -c "import math; print math.pi"', recursing.
-VARIABLES:input.py:676:ExpandVariables Executing command 'python -c "import math; print math.pi"' in directory 'None'
-VARIABLES:input.py:797:ExpandVariables Found output 'python -c "print \'3.14159265359 ABCD\'"', recursing.
-VARIABLES:input.py:676:ExpandVariables Executing command 'python -c "print '3.14159265359 ABCD'"' in directory 'None'
-VARIABLES:input.py:797:ExpandVariables Found output '3.14159265359 ABCD', recursing.
-VARIABLES:input.py:562:ExpandVariables Matches: {'content': 'python test.py', 'is_array': '', 'replace': '<!(python test.py)', 'type': '<!', 'command_string': None}
-VARIABLES:input.py:676:ExpandVariables Executing command 'python test.py' in directory 'None'
-VARIABLES:input.py:797:ExpandVariables Found output 'sample\\path\\foo.cpp', recursing.
-VARIABLES:input.py:562:ExpandVariables Matches: {'content': 'check_str_int', 'is_array': '', 'replace': '<(check_str_int)', 'type': '<', 'command_string': None}
-VARIABLES:input.py:797:ExpandVariables Found output '6', recursing.
-VARIABLES:input.py:562:ExpandVariables Matches: {'content': 'check_int', 'is_array': '', 'replace': '<(check_int)', 'type': '<', 'command_string': None}
-VARIABLES:input.py:797:ExpandVariables Found output '5blah', recursing.
-VARIABLES:input.py:562:ExpandVariables Matches: {'content': 'not_int_4', 'is_array': '', 'replace': '<(not_int_4)', 'type': '<', 'command_string': None}
-VARIABLES:input.py:797:ExpandVariables Found output '13.0', recursing.
-VARIABLES:input.py:562:ExpandVariables Matches: {'content': 'not_int_3', 'is_array': '', 'replace': '<(not_int_3)', 'type': '<', 'command_string': None}
-VARIABLES:input.py:797:ExpandVariables Found output '012', recursing.
-VARIABLES:input.py:562:ExpandVariables Matches: {'content': 'negative_int', 'is_array': '', 'replace': '<(negative_int)', 'type': '<', 'command_string': None}
-VARIABLES:input.py:797:ExpandVariables Found output '-15', recursing.
-VARIABLES:input.py:562:ExpandVariables Matches: {'content': 'not_int_5', 'is_array': '', 'replace': '<(not_int_5)', 'type': '<', 'command_string': None}
-VARIABLES:input.py:797:ExpandVariables Found output '+14', recursing.
-VARIABLES:input.py:562:ExpandVariables Matches: {'content': 'check_list_int', 'is_array': '', 'replace': '<(check_list_int)', 'type': '<', 'command_string': None}
-VARIABLES:input.py:797:ExpandVariables Found output '7 8 9', recursing.
-VARIABLES:input.py:562:ExpandVariables Matches: {'content': 'not_int_2', 'is_array': '', 'replace': '<(not_int_2)', 'type': '<', 'command_string': None}
-VARIABLES:input.py:797:ExpandVariables Found output '11 ', recursing.
-VARIABLES:input.py:562:ExpandVariables Matches: {'content': 'not_int_1', 'is_array': '', 'replace': '<(not_int_1)', 'type': '<', 'command_string': None}
-VARIABLES:input.py:797:ExpandVariables Found output ' 10', recursing.
-VARIABLES:input.py:562:ExpandVariables Matches: {'content': 'zero_int', 'is_array': '', 'replace': '<(zero_int)', 'type': '<', 'command_string': None}
-VARIABLES:input.py:797:ExpandVariables Found output '0', recursing.
-VARIABLES:input.py:562:ExpandVariables Matches: {'content': 'check_list_int', 'is_array': '', 'replace': '<@(check_list_int)', 'type': '<@', 'command_string': None}
-VARIABLES:input.py:797:ExpandVariables Found output [7, 8, 9], recursing.
-VARIABLES:input.py:562:ExpandVariables Matches: {'content': 'python test.py', 'is_array': '', 'replace': '<!@(python test.py)', 'type': '<!@', 'command_string': None}
-VARIABLES:input.py:721:ExpandVariables Had cache value for command 'python test.py' in directory 'None'
-VARIABLES:input.py:797:ExpandVariables Found output ['samplepathfoo.cpp'], recursing.
-VARIABLES:input.py:562:ExpandVariables Matches: {'content': 'var6', 'is_array': '', 'replace': '<(var6)', 'type': '<', 'command_string': None}
-VARIABLES:input.py:562:ExpandVariables Matches: {'content': 'echo <(var5', 'is_array': '', 'replace': '<!(echo <(var5)', 'type': '<!', 'command_string': None}
-VARIABLES:input.py:562:ExpandVariables Matches: {'content': 'var5', 'is_array': '', 'replace': '<(var5)', 'type': '<', 'command_string': None}
-VARIABLES:input.py:797:ExpandVariables Found output 'echo letters_list', recursing.
-VARIABLES:input.py:676:ExpandVariables Executing command 'echo letters_list' in directory 'None'
-VARIABLES:input.py:797:ExpandVariables Found output 'letters_list', recursing.
-VARIABLES:input.py:562:ExpandVariables Matches: {'content': '_inputs', 'is_array': '', 'replace': '<(_inputs)', 'type': '<', 'command_string': None}
-VARIABLES:input.py:562:ExpandVariables Matches: {'content': 'var2', 'is_array': '', 'replace': '<(var2)', 'type': '<', 'command_string': None}
-VARIABLES:input.py:797:ExpandVariables Found output '3.14159265359 ABCD', recursing.
-VARIABLES:input.py:797:ExpandVariables Found output '"3.14159265359 ABCD"', recursing.
-VARIABLES:input.py:562:ExpandVariables Matches: {'content': '_outputs', 'is_array': '', 'replace': '<(_outputs)', 'type': '<', 'command_string': None}
-VARIABLES:input.py:562:ExpandVariables Matches: {'content': 'var4', 'is_array': '', 'replace': '<(var4)', 'type': '<', 'command_string': None}
-VARIABLES:input.py:797:ExpandVariables Found output 'ABCD', recursing.
-VARIABLES:input.py:562:ExpandVariables Matches: {'content': 'var7', 'is_array': '', 'replace': '<(var7)', 'type': '<', 'command_string': None}
-VARIABLES:input.py:797:ExpandVariables Found output 'letters_list', recursing.
-VARIABLES:input.py:797:ExpandVariables Found output 'ABCD letters_list', recursing.
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/variables/commands/commands.gyp.stdout b/deps/npm/node_modules/node-gyp/gyp/test/variables/commands/commands.gyp.stdout
deleted file mode 100644
index 9812b6936..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/variables/commands/commands.gyp.stdout
+++ /dev/null
@@ -1,86 +0,0 @@
-VARIABLES:input.py:562:ExpandVariables Matches: {'content': 'letters_list', 'is_array': '', 'replace': '<(letters_list)', 'type': '<', 'command_string': None}
-VARIABLES:input.py:797:ExpandVariables Found output 'ABCDEFG', recursing.
-VARIABLES:input.py:562:ExpandVariables Matches: {'content': 'other_letters', 'is_array': '', 'replace': '<(other_letters)', 'type': '<', 'command_string': None}
-VARIABLES:input.py:797:ExpandVariables Found output '<(letters_list)EFGHIJK', recursing.
-VARIABLES:input.py:562:ExpandVariables Matches: {'content': 'letters_list', 'is_array': '', 'replace': '<(letters_list)', 'type': '<', 'command_string': None}
-VARIABLES:input.py:797:ExpandVariables Found output 'ABCDEFGHIJK', recursing.
-VARIABLES:input.py:562:ExpandVariables Matches: {'content': 'included_variable', 'is_array': '', 'replace': '<(included_variable)', 'type': '<', 'command_string': None}
-VARIABLES:input.py:797:ExpandVariables Found output 'XYZ', recursing.
-VARIABLES:input.py:562:ExpandVariables Matches: {'content': 'included_variable', 'is_array': '', 'replace': '<(included_variable)', 'type': '<', 'command_string': None}
-VARIABLES:input.py:797:ExpandVariables Found output 'XYZ', recursing.
-VARIABLES:input.py:562:ExpandVariables Matches: {'content': 'third_letters', 'is_array': '', 'replace': '<(third_letters)', 'type': '<', 'command_string': None}
-VARIABLES:input.py:797:ExpandVariables Found output '<(other_letters)HIJK', recursing.
-VARIABLES:input.py:562:ExpandVariables Matches: {'content': 'other_letters', 'is_array': '', 'replace': '<(other_letters)', 'type': '<', 'command_string': None}
-VARIABLES:input.py:797:ExpandVariables Found output '<(letters_list)EFGHIJK', recursing.
-VARIABLES:input.py:562:ExpandVariables Matches: {'content': 'letters_list', 'is_array': '', 'replace': '<(letters_list)', 'type': '<', 'command_string': None}
-VARIABLES:input.py:797:ExpandVariables Found output 'ABCDEFGHIJK', recursing.
-VARIABLES:input.py:562:ExpandVariables Matches: {'content': '<!(python -c "print \'letters_list\'"', 'is_array': '', 'replace': '<(<!(python -c "print \'letters_list\'")', 'type': '<', 'command_string': None}
-VARIABLES:input.py:562:ExpandVariables Matches: {'content': 'python -c "print \'letters_list\'"', 'is_array': '', 'replace': '<!(python -c "print \'letters_list\'")', 'type': '<!', 'command_string': None}
-VARIABLES:input.py:676:ExpandVariables Executing command 'python -c "print 'letters_list'"' in directory 'None'
-VARIABLES:input.py:797:ExpandVariables Found output 'letters_list', recursing.
-VARIABLES:input.py:797:ExpandVariables Found output 'ABCD', recursing.
-VARIABLES:input.py:562:ExpandVariables Matches: {'content': 'check_int', 'is_array': '', 'replace': '<(check_int)', 'type': '<', 'command_string': None}
-VARIABLES:input.py:797:ExpandVariables Found output '5', recursing.
-VARIABLES:input.py:562:ExpandVariables Matches: {'content': '"python", "-c", "<(pi', 'is_array': '[', 'replace': '<!(["python", "-c", "<(pi)', 'type': '<!', 'command_string': None}
-VARIABLES:input.py:562:ExpandVariables Matches: {'content': 'pi', 'is_array': '', 'replace': '<(pi)', 'type': '<', 'command_string': None}
-VARIABLES:input.py:797:ExpandVariables Found output '["python", "-c", "import math; print math.pi"]', recursing.
-VARIABLES:input.py:676:ExpandVariables Executing command '['python', '-c', 'import math; print math.pi']' in directory 'None'
-VARIABLES:input.py:797:ExpandVariables Found output '3.14159265359', recursing.
-VARIABLES:input.py:562:ExpandVariables Matches: {'content': 'python -c "print \'<(letters_list', 'is_array': '', 'replace': '<!(python -c "print \'<(letters_list)', 'type': '<!', 'command_string': None}
-VARIABLES:input.py:562:ExpandVariables Matches: {'content': 'letters_list', 'is_array': '', 'replace': '<(letters_list)', 'type': '<', 'command_string': None}
-VARIABLES:input.py:797:ExpandVariables Found output 'python -c "print \'ABCD\'"', recursing.
-VARIABLES:input.py:676:ExpandVariables Executing command 'python -c "print 'ABCD'"' in directory 'None'
-VARIABLES:input.py:797:ExpandVariables Found output 'ABCD', recursing.
-VARIABLES:input.py:562:ExpandVariables Matches: {'content': 'letters_list', 'is_array': '', 'replace': '<(letters_list)', 'type': '<', 'command_string': None}
-VARIABLES:input.py:562:ExpandVariables Matches: {'content': 'python -c "print \'<!(python -c "<(pi', 'is_array': '', 'replace': '<!(python -c "print \'<!(python -c "<(pi)', 'type': '<!', 'command_string': None}
-VARIABLES:input.py:562:ExpandVariables Matches: {'content': 'python -c "<(pi', 'is_array': '', 'replace': '<!(python -c "<(pi)', 'type': '<!', 'command_string': None}
-VARIABLES:input.py:562:ExpandVariables Matches: {'content': 'pi', 'is_array': '', 'replace': '<(pi)', 'type': '<', 'command_string': None}
-VARIABLES:input.py:797:ExpandVariables Found output 'python -c "import math; print math.pi"', recursing.
-VARIABLES:input.py:676:ExpandVariables Executing command 'python -c "import math; print math.pi"' in directory 'None'
-VARIABLES:input.py:797:ExpandVariables Found output 'python -c "print \'3.14159265359 ABCD\'"', recursing.
-VARIABLES:input.py:676:ExpandVariables Executing command 'python -c "print '3.14159265359 ABCD'"' in directory 'None'
-VARIABLES:input.py:797:ExpandVariables Found output '3.14159265359 ABCD', recursing.
-VARIABLES:input.py:562:ExpandVariables Matches: {'content': 'python test.py', 'is_array': '', 'replace': '<!(python test.py)', 'type': '<!', 'command_string': None}
-VARIABLES:input.py:676:ExpandVariables Executing command 'python test.py' in directory 'None'
-VARIABLES:input.py:797:ExpandVariables Found output 'sample\\path\\foo.cpp', recursing.
-VARIABLES:input.py:562:ExpandVariables Matches: {'content': 'check_str_int', 'is_array': '', 'replace': '<(check_str_int)', 'type': '<', 'command_string': None}
-VARIABLES:input.py:797:ExpandVariables Found output '6', recursing.
-VARIABLES:input.py:562:ExpandVariables Matches: {'content': 'check_int', 'is_array': '', 'replace': '<(check_int)', 'type': '<', 'command_string': None}
-VARIABLES:input.py:797:ExpandVariables Found output '5blah', recursing.
-VARIABLES:input.py:562:ExpandVariables Matches: {'content': 'not_int_4', 'is_array': '', 'replace': '<(not_int_4)', 'type': '<', 'command_string': None}
-VARIABLES:input.py:797:ExpandVariables Found output '13.0', recursing.
-VARIABLES:input.py:562:ExpandVariables Matches: {'content': 'not_int_3', 'is_array': '', 'replace': '<(not_int_3)', 'type': '<', 'command_string': None}
-VARIABLES:input.py:797:ExpandVariables Found output '012', recursing.
-VARIABLES:input.py:562:ExpandVariables Matches: {'content': 'negative_int', 'is_array': '', 'replace': '<(negative_int)', 'type': '<', 'command_string': None}
-VARIABLES:input.py:797:ExpandVariables Found output '-15', recursing.
-VARIABLES:input.py:562:ExpandVariables Matches: {'content': 'not_int_5', 'is_array': '', 'replace': '<(not_int_5)', 'type': '<', 'command_string': None}
-VARIABLES:input.py:797:ExpandVariables Found output '+14', recursing.
-VARIABLES:input.py:562:ExpandVariables Matches: {'content': 'check_list_int', 'is_array': '', 'replace': '<(check_list_int)', 'type': '<', 'command_string': None}
-VARIABLES:input.py:797:ExpandVariables Found output '7 8 9', recursing.
-VARIABLES:input.py:562:ExpandVariables Matches: {'content': 'not_int_2', 'is_array': '', 'replace': '<(not_int_2)', 'type': '<', 'command_string': None}
-VARIABLES:input.py:797:ExpandVariables Found output '11 ', recursing.
-VARIABLES:input.py:562:ExpandVariables Matches: {'content': 'not_int_1', 'is_array': '', 'replace': '<(not_int_1)', 'type': '<', 'command_string': None}
-VARIABLES:input.py:797:ExpandVariables Found output ' 10', recursing.
-VARIABLES:input.py:562:ExpandVariables Matches: {'content': 'zero_int', 'is_array': '', 'replace': '<(zero_int)', 'type': '<', 'command_string': None}
-VARIABLES:input.py:797:ExpandVariables Found output '0', recursing.
-VARIABLES:input.py:562:ExpandVariables Matches: {'content': 'check_list_int', 'is_array': '', 'replace': '<@(check_list_int)', 'type': '<@', 'command_string': None}
-VARIABLES:input.py:797:ExpandVariables Found output [7, 8, 9], recursing.
-VARIABLES:input.py:562:ExpandVariables Matches: {'content': 'python test.py', 'is_array': '', 'replace': '<!@(python test.py)', 'type': '<!@', 'command_string': None}
-VARIABLES:input.py:721:ExpandVariables Had cache value for command 'python test.py' in directory 'None'
-VARIABLES:input.py:797:ExpandVariables Found output ['samplepathfoo.cpp'], recursing.
-VARIABLES:input.py:562:ExpandVariables Matches: {'content': 'var6', 'is_array': '', 'replace': '<(var6)', 'type': '<', 'command_string': None}
-VARIABLES:input.py:562:ExpandVariables Matches: {'content': 'echo <(var5', 'is_array': '', 'replace': '<!(echo <(var5)', 'type': '<!', 'command_string': None}
-VARIABLES:input.py:562:ExpandVariables Matches: {'content': 'var5', 'is_array': '', 'replace': '<(var5)', 'type': '<', 'command_string': None}
-VARIABLES:input.py:797:ExpandVariables Found output 'echo letters_list', recursing.
-VARIABLES:input.py:676:ExpandVariables Executing command 'echo letters_list' in directory 'None'
-VARIABLES:input.py:797:ExpandVariables Found output 'letters_list', recursing.
-VARIABLES:input.py:562:ExpandVariables Matches: {'content': '_inputs', 'is_array': '', 'replace': '<(_inputs)', 'type': '<', 'command_string': None}
-VARIABLES:input.py:562:ExpandVariables Matches: {'content': 'var2', 'is_array': '', 'replace': '<(var2)', 'type': '<', 'command_string': None}
-VARIABLES:input.py:797:ExpandVariables Found output '3.14159265359 ABCD', recursing.
-VARIABLES:input.py:797:ExpandVariables Found output '"3.14159265359 ABCD"', recursing.
-VARIABLES:input.py:562:ExpandVariables Matches: {'content': '_outputs', 'is_array': '', 'replace': '<(_outputs)', 'type': '<', 'command_string': None}
-VARIABLES:input.py:562:ExpandVariables Matches: {'content': 'var4', 'is_array': '', 'replace': '<(var4)', 'type': '<', 'command_string': None}
-VARIABLES:input.py:797:ExpandVariables Found output 'ABCD', recursing.
-VARIABLES:input.py:562:ExpandVariables Matches: {'content': 'var7', 'is_array': '', 'replace': '<(var7)', 'type': '<', 'command_string': None}
-VARIABLES:input.py:797:ExpandVariables Found output 'letters_list', recursing.
-VARIABLES:input.py:797:ExpandVariables Found output 'ABCD letters_list', recursing.
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/variables/commands/commands.gypd.golden b/deps/npm/node_modules/node-gyp/gyp/test/variables/commands/commands.gypd.golden
deleted file mode 100644
index d5af8b864..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/variables/commands/commands.gypd.golden
+++ /dev/null
@@ -1,56 +0,0 @@
-{'_DEPTH': '.',
- 'included_files': ['commands.gyp', 'commands.gypi'],
- 'targets': [{'actions': [{'action': ['echo',
- '"3.14159265359 ABCD"',
- 'ABCD letters_list'],
- 'action_name': 'test_action',
- 'inputs': ['3.14159265359 ABCD'],
- 'outputs': ['ABCD', 'letters_list'],
- 'variables': {'var7': 'letters_list'}}],
- 'configurations': {'Default': {}},
- 'default_configuration': 'Default',
- 'target_name': 'foo',
- 'toolset': 'target',
- 'type': 'none',
- 'variables': {'var1': '3.14159265359',
- 'var10': '7 8 9',
- 'var11': ['7', '8', '9'],
- 'var12': ' 10',
- 'var13': '11 ',
- 'var14': '012',
- 'var15': '13.0',
- 'var16': '+14',
- 'var17': '-15',
- 'var18': '0',
- 'var19': ['samplepathfoo.cpp'],
- 'var2': '3.14159265359 ABCD',
- 'var20': 'sample\\path\\foo.cpp',
- 'var3': 'ABCD',
- 'var4': 'ABCD',
- 'var5': 'letters_',
- 'var6': 'list',
- 'var7': '5',
- 'var8': '5blah',
- 'var9': '6'}},
- {'configurations': {'Default': {}},
- 'default_configuration': 'Default',
- 'target_name': 'dummy',
- 'toolset': 'target',
- 'type': 'none'}],
- 'variables': {'check_included': 'XYZ',
- 'check_int': '5',
- 'check_list_int': ['7', '8', '9'],
- 'check_lists': ['XYZ', 'ABCDEFGHIJK'],
- 'check_str_int': '6',
- 'included_variable': 'XYZ',
- 'letters_list': 'ABCD',
- 'negative_int': '-15',
- 'not_int_1': ' 10',
- 'not_int_2': '11 ',
- 'not_int_3': '012',
- 'not_int_4': '13.0',
- 'not_int_5': '+14',
- 'other_letters': 'ABCDEFG',
- 'pi': 'import math; print math.pi',
- 'third_letters': 'ABCDEFGHIJK',
- 'zero_int': '0'}}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/variables/commands/commands.gypi b/deps/npm/node_modules/node-gyp/gyp/test/variables/commands/commands.gypi
deleted file mode 100644
index 6b2249715..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/variables/commands/commands.gypi
+++ /dev/null
@@ -1,16 +0,0 @@
-# Copyright (c) 2009 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-# This file is included from commands.gyp to test evaluation order of includes.
-{
- 'variables': {
- 'included_variable': 'XYZ',
- },
- 'targets': [
- {
- 'target_name': 'dummy',
- 'type': 'none',
- },
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/variables/commands/gyptest-commands-ignore-env.py b/deps/npm/node_modules/node-gyp/gyp/test/variables/commands/gyptest-commands-ignore-env.py
deleted file mode 100755
index 1cf3308dc..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/variables/commands/gyptest-commands-ignore-env.py
+++ /dev/null
@@ -1,46 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Test that environment variables are ignored when --ignore-environment is
-specified.
-"""
-
-import os
-
-import TestGyp
-
-test = TestGyp.TestGyp(format='gypd')
-
-os.environ['GYP_DEFINES'] = 'FOO=BAR'
-os.environ['GYP_GENERATORS'] = 'foo'
-os.environ['GYP_GENERATOR_FLAGS'] = 'genflag=foo'
-os.environ['GYP_GENERATOR_OUTPUT'] = 'somedir'
-
-expect = test.read('commands.gyp.ignore-env.stdout').replace('\r\n', '\n')
-
-test.run_gyp('commands.gyp',
- '--debug', 'variables',
- '--ignore-environment',
- stdout=expect, ignore_line_numbers=True)
-
-# Verify the commands.gypd against the checked-in expected contents.
-#
-# Normally, we should canonicalize line endings in the expected
-# contents file setting the Subversion svn:eol-style to native,
-# but that would still fail if multiple systems are sharing a single
-# workspace on a network-mounted file system. Consequently, we
-# massage the Windows line endings ('\r\n') in the output to the
-# checked-in UNIX endings ('\n').
-
-contents = test.read('commands.gypd').replace('\r', '')
-expect = test.read('commands.gypd.golden').replace('\r', '')
-if not test.match(contents, expect):
- print "Unexpected contents of `commands.gypd'"
- test.diff(expect, contents, 'commands.gypd ')
- test.fail_test()
-
-test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/variables/commands/gyptest-commands-repeated.py b/deps/npm/node_modules/node-gyp/gyp/test/variables/commands/gyptest-commands-repeated.py
deleted file mode 100755
index b95fe2d75..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/variables/commands/gyptest-commands-repeated.py
+++ /dev/null
@@ -1,38 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Test variable expansion of '<!()' syntax commands where they are evaluated
-more then once..
-"""
-
-import TestGyp
-
-test = TestGyp.TestGyp(format='gypd')
-
-expect = test.read('commands-repeated.gyp.stdout').replace('\r\n', '\n')
-
-test.run_gyp('commands-repeated.gyp',
- '--debug', 'variables',
- stdout=expect, ignore_line_numbers=True)
-
-# Verify the commands-repeated.gypd against the checked-in expected contents.
-#
-# Normally, we should canonicalize line endings in the expected
-# contents file setting the Subversion svn:eol-style to native,
-# but that would still fail if multiple systems are sharing a single
-# workspace on a network-mounted file system. Consequently, we
-# massage the Windows line endings ('\r\n') in the output to the
-# checked-in UNIX endings ('\n').
-
-contents = test.read('commands-repeated.gypd').replace('\r\n', '\n')
-expect = test.read('commands-repeated.gypd.golden').replace('\r\n', '\n')
-if not test.match(contents, expect):
- print "Unexpected contents of `commands-repeated.gypd'"
- test.diff(expect, contents, 'commands-repeated.gypd ')
- test.fail_test()
-
-test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/variables/commands/gyptest-commands.py b/deps/npm/node_modules/node-gyp/gyp/test/variables/commands/gyptest-commands.py
deleted file mode 100755
index ef1af8c52..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/variables/commands/gyptest-commands.py
+++ /dev/null
@@ -1,39 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Test variable expansion of '<!()' syntax commands.
-"""
-
-import os
-
-import TestGyp
-
-test = TestGyp.TestGyp(format='gypd')
-
-expect = test.read('commands.gyp.stdout').replace('\r', '')
-
-test.run_gyp('commands.gyp',
- '--debug', 'variables',
- stdout=expect, ignore_line_numbers=True)
-
-# Verify the commands.gypd against the checked-in expected contents.
-#
-# Normally, we should canonicalize line endings in the expected
-# contents file setting the Subversion svn:eol-style to native,
-# but that would still fail if multiple systems are sharing a single
-# workspace on a network-mounted file system. Consequently, we
-# massage the Windows line endings ('\r\n') in the output to the
-# checked-in UNIX endings ('\n').
-
-contents = test.read('commands.gypd').replace('\r', '')
-expect = test.read('commands.gypd.golden').replace('\r', '')
-if not test.match(contents, expect):
- print "Unexpected contents of `commands.gypd'"
- test.diff(expect, contents, 'commands.gypd ')
- test.fail_test()
-
-test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/variables/commands/test.py b/deps/npm/node_modules/node-gyp/gyp/test/variables/commands/test.py
deleted file mode 100644
index 4d9ca6d1a..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/variables/commands/test.py
+++ /dev/null
@@ -1 +0,0 @@
-print "sample\\path\\foo.cpp"
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/variables/commands/update_golden b/deps/npm/node_modules/node-gyp/gyp/test/variables/commands/update_golden
deleted file mode 100755
index e8da558a2..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/variables/commands/update_golden
+++ /dev/null
@@ -1,11 +0,0 @@
-#!/bin/bash
-
-# Copyright (c) 2009 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-python ../../../gyp --debug variables --debug general --format gypd --depth . commands.gyp > commands.gyp.stdout
-python ../../../gyp --ignore-environment --debug variables --debug general --format gypd --depth . commands.gyp > commands.gyp.ignore-env.stdout
-cp -f commands.gypd commands.gypd.golden
-python ../../../gyp --debug variables --debug general --format gypd --depth . commands-repeated.gyp > commands-repeated.gyp.stdout
-cp -f commands-repeated.gypd commands-repeated.gypd.golden
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/variables/filelist/filelist.gyp.stdout b/deps/npm/node_modules/node-gyp/gyp/test/variables/filelist/filelist.gyp.stdout
deleted file mode 100644
index 595a19c68..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/variables/filelist/filelist.gyp.stdout
+++ /dev/null
@@ -1,26 +0,0 @@
-VARIABLES:input.py:562:ExpandVariables Matches: {'content': 'names.txt <@(names', 'is_array': '', 'replace': '<|(names.txt <@(names)', 'type': '<|', 'command_string': None}
-VARIABLES:input.py:562:ExpandVariables Matches: {'content': 'names', 'is_array': '', 'replace': '<@(names)', 'type': '<@', 'command_string': None}
-VARIABLES:input.py:797:ExpandVariables Found output 'names.txt John Jacob Jingleheimer Schmidt', recursing.
-VARIABLES:input.py:797:ExpandVariables Found output 'names.txt', recursing.
-VARIABLES:input.py:562:ExpandVariables Matches: {'content': 'names_listfile', 'is_array': '', 'replace': '<(names_listfile)', 'type': '<', 'command_string': None}
-VARIABLES:input.py:797:ExpandVariables Found output 'names.txt', recursing.
-VARIABLES:input.py:562:ExpandVariables Matches: {'content': 'names_listfile', 'is_array': '', 'replace': '<(names_listfile)', 'type': '<', 'command_string': None}
-VARIABLES:input.py:797:ExpandVariables Found output 'names.txt', recursing.
-VARIABLES:input.py:562:ExpandVariables Matches: {'content': 'cat <(names_listfile', 'is_array': '', 'replace': '<!@(cat <(names_listfile)', 'type': '<!@', 'command_string': None}
-VARIABLES:input.py:562:ExpandVariables Matches: {'content': 'names_listfile', 'is_array': '', 'replace': '<(names_listfile)', 'type': '<', 'command_string': None}
-VARIABLES:input.py:797:ExpandVariables Found output 'cat names.txt', recursing.
-VARIABLES:input.py:676:ExpandVariables Executing command 'cat names.txt' in directory 'src'
-VARIABLES:input.py:797:ExpandVariables Found output ['John', 'Jacob', 'Jingleheimer', 'Schmidt'], recursing.
-VARIABLES:input.py:562:ExpandVariables Matches: {'content': 'sources.txt <@(_sources', 'is_array': '', 'replace': '<|(sources.txt <@(_sources)', 'type': '<|', 'command_string': None}
-VARIABLES:input.py:562:ExpandVariables Matches: {'content': '_sources', 'is_array': '', 'replace': '<@(_sources)', 'type': '<@', 'command_string': None}
-VARIABLES:input.py:797:ExpandVariables Found output 'sources.txt John Jacob Jingleheimer Schmidt', recursing.
-VARIABLES:input.py:797:ExpandVariables Found output 'sources.txt', recursing.
-VARIABLES:input.py:562:ExpandVariables Matches: {'content': 'sources_listfile', 'is_array': '', 'replace': '<(sources_listfile)', 'type': '<', 'command_string': None}
-VARIABLES:input.py:797:ExpandVariables Found output 'sources.txt', recursing.
-VARIABLES:input.py:562:ExpandVariables Matches: {'content': 'sources_listfile', 'is_array': '', 'replace': '<(sources_listfile)', 'type': '<', 'command_string': None}
-VARIABLES:input.py:797:ExpandVariables Found output 'sources.txt', recursing.
-VARIABLES:input.py:562:ExpandVariables Matches: {'content': 'cat <(sources_listfile', 'is_array': '', 'replace': '<!@(cat <(sources_listfile)', 'type': '<!@', 'command_string': None}
-VARIABLES:input.py:562:ExpandVariables Matches: {'content': 'sources_listfile', 'is_array': '', 'replace': '<(sources_listfile)', 'type': '<', 'command_string': None}
-VARIABLES:input.py:797:ExpandVariables Found output 'cat sources.txt', recursing.
-VARIABLES:input.py:676:ExpandVariables Executing command 'cat sources.txt' in directory 'src'
-VARIABLES:input.py:797:ExpandVariables Found output ['John', 'Jacob', 'Jingleheimer', 'Schmidt'], recursing.
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/variables/filelist/filelist.gypd.golden b/deps/npm/node_modules/node-gyp/gyp/test/variables/filelist/filelist.gypd.golden
deleted file mode 100644
index 09d911604..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/variables/filelist/filelist.gypd.golden
+++ /dev/null
@@ -1,43 +0,0 @@
-{'_DEPTH': '.',
- 'included_files': ['filelist.gyp'],
- 'targets': [{'actions': [{'action': ['python', 'dummy.py', 'names.txt'],
- 'action_name': 'test_action',
- 'inputs': ['names.txt',
- 'John',
- 'Jacob',
- 'Jingleheimer',
- 'Schmidt'],
- 'outputs': ['dummy_foo']}],
- 'configurations': {'Default': {}},
- 'default_configuration': 'Default',
- 'target_name': 'foo',
- 'toolset': 'target',
- 'type': 'none',
- 'variables': {'names_listfile': 'names.txt'}},
- {'actions': [{'action': ['python', 'dummy.py', 'sources.txt'],
- 'action_name': 'test_action',
- 'inputs': ['sources.txt',
- 'John',
- 'Jacob',
- 'Jingleheimer',
- 'Schmidt'],
- 'outputs': ['dummy_foo']}],
- 'configurations': {'Default': {}},
- 'default_configuration': 'Default',
- 'sources': ['John', 'Jacob', 'Jingleheimer', 'Schmidt'],
- 'sources_excluded': ['Astor', 'Jerome', 'Schultz'],
- 'target_name': 'bar',
- 'toolset': 'target',
- 'type': 'none',
- 'variables': {'sources_listfile': 'sources.txt'}}],
- 'variables': {'names': ['John',
- 'Jacob',
- 'Astor',
- 'Jingleheimer',
- 'Jerome',
- 'Schmidt',
- 'Schultz'],
- 'names!': ['Astor'],
- 'names/': [['exclude', 'Sch.*'],
- ['include', '.*dt'],
- ['exclude', 'Jer.*']]}}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/variables/filelist/gyptest-filelist.py b/deps/npm/node_modules/node-gyp/gyp/test/variables/filelist/gyptest-filelist.py
deleted file mode 100755
index 1606594d1..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/variables/filelist/gyptest-filelist.py
+++ /dev/null
@@ -1,50 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Test variable expansion of '<|(list.txt ...)' syntax commands.
-"""
-
-import os
-import sys
-
-import TestGyp
-
-test = TestGyp.TestGyp(format='gypd')
-
-expect = test.read('filelist.gyp.stdout')
-if sys.platform == 'win32':
- expect = expect.replace('/', r'\\').replace('\r\n', '\n')
-
-test.run_gyp('src/filelist.gyp',
- '--debug', 'variables',
- stdout=expect, ignore_line_numbers=True)
-
-# Verify the filelist.gypd against the checked-in expected contents.
-#
-# Normally, we should canonicalize line endings in the expected
-# contents file setting the Subversion svn:eol-style to native,
-# but that would still fail if multiple systems are sharing a single
-# workspace on a network-mounted file system. Consequently, we
-# massage the Windows line endings ('\r\n') in the output to the
-# checked-in UNIX endings ('\n').
-
-contents = test.read('src/filelist.gypd').replace(
- '\r', '').replace('\\\\', '/')
-expect = test.read('filelist.gypd.golden').replace('\r', '')
-if not test.match(contents, expect):
- print "Unexpected contents of `src/filelist.gypd'"
- test.diff(expect, contents, 'src/filelist.gypd ')
- test.fail_test()
-
-contents = test.read('src/names.txt')
-expect = 'John\nJacob\nJingleheimer\nSchmidt\n'
-if not test.match(contents, expect):
- print "Unexpected contents of `src/names.txt'"
- test.diff(expect, contents, 'src/names.txt ')
- test.fail_test()
-
-test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/variables/filelist/src/filelist.gyp b/deps/npm/node_modules/node-gyp/gyp/test/variables/filelist/src/filelist.gyp
deleted file mode 100644
index df48eb3e4..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/variables/filelist/src/filelist.gyp
+++ /dev/null
@@ -1,93 +0,0 @@
-# Copyright (c) 2009 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-# This is a test to make sure that <|(foo.txt a b c) generates
-# a pre-calculated file list at gyp time and returns foo.txt.
-# This feature is useful to work around limits in the number of arguments that
-# can be passed to rule/action.
-
-{
- 'variables': {
- 'names': [
- 'John',
- 'Jacob',
- 'Astor',
- 'Jingleheimer',
- 'Jerome',
- 'Schmidt',
- 'Schultz',
- ],
- 'names!': [
- 'Astor',
- ],
- 'names/': [
- ['exclude', 'Sch.*'],
- ['include', '.*dt'],
- ['exclude', 'Jer.*'],
- ],
- },
- 'targets': [
- {
- 'target_name': 'foo',
- 'type': 'none',
- 'variables': {
- 'names_listfile': '<|(names.txt <@(names))',
- },
- 'actions': [
- {
- 'action_name': 'test_action',
- 'inputs' : [
- '<(names_listfile)',
- '<!@(cat <(names_listfile))',
- ],
- 'outputs': [
- 'dummy_foo',
- ],
- 'action': [
- 'python', 'dummy.py', '<(names_listfile)',
- ],
- },
- ],
- },
- {
- 'target_name': 'bar',
- 'type': 'none',
- 'sources': [
- 'John',
- 'Jacob',
- 'Astor',
- 'Jingleheimer',
- 'Jerome',
- 'Schmidt',
- 'Schultz',
- ],
- 'sources!': [
- 'Astor',
- ],
- 'sources/': [
- ['exclude', 'Sch.*'],
- ['include', '.*dt'],
- ['exclude', 'Jer.*'],
- ],
- 'variables': {
- 'sources_listfile': '<|(sources.txt <@(_sources))',
- },
- 'actions': [
- {
- 'action_name': 'test_action',
- 'inputs' : [
- '<(sources_listfile)',
- '<!@(cat <(sources_listfile))',
- ],
- 'outputs': [
- 'dummy_foo',
- ],
- 'action': [
- 'python', 'dummy.py', '<(sources_listfile)',
- ],
- },
- ],
- },
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/variables/filelist/update_golden b/deps/npm/node_modules/node-gyp/gyp/test/variables/filelist/update_golden
deleted file mode 100755
index b4d489a34..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/variables/filelist/update_golden
+++ /dev/null
@@ -1,8 +0,0 @@
-#!/bin/bash
-
-# Copyright (c) 2009 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-python ../../../gyp --debug variables --debug general --format gypd --depth . src/filelist.gyp > filelist.gyp.stdout
-cp -f src/filelist.gypd filelist.gypd.golden
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/variables/latelate/gyptest-latelate.py b/deps/npm/node_modules/node-gyp/gyp/test/variables/latelate/gyptest-latelate.py
deleted file mode 100755
index 2d77dfec5..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/variables/latelate/gyptest-latelate.py
+++ /dev/null
@@ -1,25 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Verifies that ^(latelate) style variables work.
-"""
-
-import TestGyp
-
-test = TestGyp.TestGyp()
-
-test.run_gyp('latelate.gyp', chdir='src')
-
-test.relocate('src', 'relocate/src')
-
-test.build('latelate.gyp', test.ALL, chdir='relocate/src')
-
-test.run_built_executable(
- 'program', chdir='relocate/src', stdout='program.cc\n')
-
-
-test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/variables/latelate/src/latelate.gyp b/deps/npm/node_modules/node-gyp/gyp/test/variables/latelate/src/latelate.gyp
deleted file mode 100644
index 312f3765b..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/variables/latelate/src/latelate.gyp
+++ /dev/null
@@ -1,34 +0,0 @@
-# Copyright (c) 2009 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'target_defaults': {
- 'target_conditions': [
- ['has_lame==1', {
- 'sources/': [
- ['exclude', 'lame'],
- ],
- }],
- ],
- },
- 'targets': [
- {
- 'target_name': 'program',
- 'type': 'executable',
- 'variables': {
- 'has_lame': 1,
- },
- 'include_dirs': [
- '<(SHARED_INTERMEDIATE_DIR)',
- ],
- 'defines': [
- 'FOO="^(_sources)"',
- ],
- 'sources': [
- 'program.cc',
- 'this_is_lame.cc',
- ],
- },
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/variables/latelate/src/program.cc b/deps/npm/node_modules/node-gyp/gyp/test/variables/latelate/src/program.cc
deleted file mode 100644
index 4c6d6e048..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/variables/latelate/src/program.cc
+++ /dev/null
@@ -1,13 +0,0 @@
-/*
- * Copyright (c) 2012 Google Inc. All rights reserved.
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-#include <stdio.h>
-
-
-int main(int argc, char *argv[]) {
- printf(FOO "\n");
- return 0;
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/variables/variable-in-path/C1/hello.cc b/deps/npm/node_modules/node-gyp/gyp/test/variables/variable-in-path/C1/hello.cc
deleted file mode 100644
index 1711567ef..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/variables/variable-in-path/C1/hello.cc
+++ /dev/null
@@ -1,7 +0,0 @@
-// Copyright (c) 2012 Google Inc. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-int main() {
- return 0;
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/variables/variable-in-path/gyptest-variable-in-path.py b/deps/npm/node_modules/node-gyp/gyp/test/variables/variable-in-path/gyptest-variable-in-path.py
deleted file mode 100644
index b73a279da..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/variables/variable-in-path/gyptest-variable-in-path.py
+++ /dev/null
@@ -1,23 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Make sure <(CONFIGURATION_NAME) variable is correctly expanded.
-"""
-
-import TestGyp
-
-import sys
-
-test = TestGyp.TestGyp()
-test.set_configuration('C1')
-
-test.run_gyp('variable-in-path.gyp')
-test.build('variable-in-path.gyp', 'hello1')
-test.build('variable-in-path.gyp', 'hello2')
-
-
-test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/variables/variable-in-path/variable-in-path.gyp b/deps/npm/node_modules/node-gyp/gyp/test/variables/variable-in-path/variable-in-path.gyp
deleted file mode 100644
index 908d21eb6..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/variables/variable-in-path/variable-in-path.gyp
+++ /dev/null
@@ -1,31 +0,0 @@
-# Copyright (c) 2010 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'targets': [
- {
- 'target_name': 'hello1',
- 'type': 'executable',
- 'sources': [
- '<(CONFIGURATION_NAME)/hello.cc',
- ],
- },
- {
- 'target_name': 'hello2',
- 'type': 'executable',
- 'sources': [
- './<(CONFIGURATION_NAME)/hello.cc',
- ],
- },
- ],
- 'target_defaults': {
- 'default_configuration': 'C1',
- 'configurations': {
- 'C1': {
- },
- 'C2': {
- },
- },
- },
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/variants/gyptest-variants.py b/deps/npm/node_modules/node-gyp/gyp/test/variants/gyptest-variants.py
deleted file mode 100755
index ce2455f66..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/variants/gyptest-variants.py
+++ /dev/null
@@ -1,45 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2009 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Verify handling of build variants.
-
-TODO: Right now, only the SCons generator supports this, so the
-test case is SCons-specific. In particular, it relise on SCons'
-ability to rebuild in response to changes on the command line. It
-may be simpler to just drop this feature if the other generators
-can't be made to behave the same way.
-"""
-
-import TestGyp
-
-test = TestGyp.TestGyp(formats=['scons'])
-
-test.run_gyp('variants.gyp', chdir='src')
-
-test.relocate('src', 'relocate/src')
-
-test.build('variants.gyp', chdir='relocate/src')
-
-test.run_built_executable('variants',
- chdir='relocate/src',
- stdout="Hello, world!\n")
-
-test.sleep()
-test.build('variants.gyp', 'VARIANT1=1', chdir='relocate/src')
-
-test.run_built_executable('variants',
- chdir='relocate/src',
- stdout="Hello from VARIANT1\n")
-
-test.sleep()
-test.build('variants.gyp', 'VARIANT2=1', chdir='relocate/src')
-
-test.run_built_executable('variants',
- chdir='relocate/src',
- stdout="Hello from VARIANT2\n")
-
-test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/variants/src/variants.c b/deps/npm/node_modules/node-gyp/gyp/test/variants/src/variants.c
deleted file mode 100644
index 3018e40df..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/variants/src/variants.c
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <stdio.h>
-
-int main(int argc, char *argv[])
-{
-#if defined(VARIANT1)
- printf("Hello from VARIANT1\n");
-#elif defined(VARIANT2)
- printf("Hello from VARIANT2\n");
-#else
- printf("Hello, world!\n");
-#endif
- return 0;
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/variants/src/variants.gyp b/deps/npm/node_modules/node-gyp/gyp/test/variants/src/variants.gyp
deleted file mode 100644
index 0305ca747..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/variants/src/variants.gyp
+++ /dev/null
@@ -1,27 +0,0 @@
-# Copyright (c) 2009 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'targets': [
- {
- 'target_name': 'variants',
- 'type': 'executable',
- 'sources': [
- 'variants.c',
- ],
- 'variants': {
- 'variant1' : {
- 'defines': [
- 'VARIANT1',
- ],
- },
- 'variant2' : {
- 'defines': [
- 'VARIANT2',
- ],
- },
- },
- },
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/win/asm-files/asm-files.gyp b/deps/npm/node_modules/node-gyp/gyp/test/win/asm-files/asm-files.gyp
deleted file mode 100644
index b1f132cee..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/win/asm-files/asm-files.gyp
+++ /dev/null
@@ -1,17 +0,0 @@
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'targets': [
- {
- 'target_name': 'sources_with_asm',
- 'type': 'executable',
- 'sources': [
- 'hello.cc',
- 'b.s',
- 'c.S',
- ],
- },
- ]
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/win/asm-files/b.s b/deps/npm/node_modules/node-gyp/gyp/test/win/asm-files/b.s
deleted file mode 100644
index e69de29bb..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/win/asm-files/b.s
+++ /dev/null
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/win/asm-files/c.S b/deps/npm/node_modules/node-gyp/gyp/test/win/asm-files/c.S
deleted file mode 100644
index e69de29bb..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/win/asm-files/c.S
+++ /dev/null
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/win/asm-files/hello.cc b/deps/npm/node_modules/node-gyp/gyp/test/win/asm-files/hello.cc
deleted file mode 100644
index 1711567ef..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/win/asm-files/hello.cc
+++ /dev/null
@@ -1,7 +0,0 @@
-// Copyright (c) 2012 Google Inc. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-int main() {
- return 0;
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/win/batch-file-action/batch-file-action.gyp b/deps/npm/node_modules/node-gyp/gyp/test/win/batch-file-action/batch-file-action.gyp
deleted file mode 100644
index e4db9af9d..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/win/batch-file-action/batch-file-action.gyp
+++ /dev/null
@@ -1,21 +0,0 @@
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'targets': [
- {
- 'target_name': 'test_batch',
- 'type': 'none',
- 'actions': [
- {
- 'action_name': 'copy_to_output',
- 'inputs': ['infile'],
- 'outputs': ['outfile'],
- 'action': ['somecmd.bat', 'infile', 'outfile'],
- 'msvs_cygwin_shell': 0,
- }
- ],
- },
- ]
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/win/batch-file-action/infile b/deps/npm/node_modules/node-gyp/gyp/test/win/batch-file-action/infile
deleted file mode 100644
index 3f9177e45..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/win/batch-file-action/infile
+++ /dev/null
@@ -1 +0,0 @@
-input
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/win/batch-file-action/somecmd.bat b/deps/npm/node_modules/node-gyp/gyp/test/win/batch-file-action/somecmd.bat
deleted file mode 100644
index d48775374..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/win/batch-file-action/somecmd.bat
+++ /dev/null
@@ -1,5 +0,0 @@
-@echo off
-:: The redirs to nul are important. %2 can end up being an unterminated "'d
-:: string, so the remainder of the command line becomes the target file name,
-:: which in turn fails because it's a filename containing >, nul, etc.
-copy /y %1 %2 >nul 2>nul
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/win/command-quote/a.S b/deps/npm/node_modules/node-gyp/gyp/test/win/command-quote/a.S
deleted file mode 100644
index e69de29bb..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/win/command-quote/a.S
+++ /dev/null
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/win/command-quote/bat with spaces.bat b/deps/npm/node_modules/node-gyp/gyp/test/win/command-quote/bat with spaces.bat
deleted file mode 100644
index dc3508f9a..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/win/command-quote/bat with spaces.bat
+++ /dev/null
@@ -1,7 +0,0 @@
-@echo off
-
-:: Copyright (c) 2012 Google Inc. All rights reserved.
-:: Use of this source code is governed by a BSD-style license that can be
-:: found in the LICENSE file.
-
-copy %1 %2
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/win/command-quote/command-quote.gyp b/deps/npm/node_modules/node-gyp/gyp/test/win/command-quote/command-quote.gyp
deleted file mode 100644
index 8489c5040..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/win/command-quote/command-quote.gyp
+++ /dev/null
@@ -1,84 +0,0 @@
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'target_defaults': {
- 'msvs_cygwin_dirs': ['../../../../../<(DEPTH)/third_party/cygwin'],
- },
- 'targets': [
- {
- 'target_name': 'test_batch',
- 'type': 'none',
- 'rules': [
- {
- 'rule_name': 'build_with_batch',
- 'msvs_cygwin_shell': 0,
- 'extension': 'S',
- 'inputs': ['<(RULE_INPUT_PATH)'],
- 'outputs': ['output.obj'],
- 'action': ['call go.bat', '<(RULE_INPUT_PATH)', 'output.obj'],
- },],
- 'sources': ['a.S'],
- },
- {
- 'target_name': 'test_call_separate',
- 'type': 'none',
- 'rules': [
- {
- 'rule_name': 'build_with_batch2',
- 'msvs_cygwin_shell': 0,
- 'extension': 'S',
- 'inputs': ['<(RULE_INPUT_PATH)'],
- 'outputs': ['output2.obj'],
- 'action': ['call', 'go.bat', '<(RULE_INPUT_PATH)', 'output2.obj'],
- },],
- 'sources': ['a.S'],
- },
- {
- 'target_name': 'test_with_spaces',
- 'type': 'none',
- 'rules': [
- {
- 'rule_name': 'build_with_batch3',
- 'msvs_cygwin_shell': 0,
- 'extension': 'S',
- 'inputs': ['<(RULE_INPUT_PATH)'],
- 'outputs': ['output3.obj'],
- 'action': ['bat with spaces.bat', '<(RULE_INPUT_PATH)', 'output3.obj'],
- },],
- 'sources': ['a.S'],
- },
- {
- 'target_name': 'test_with_double_quotes',
- 'type': 'none',
- 'rules': [
- {
- 'rule_name': 'build_with_batch3',
- 'msvs_cygwin_shell': 1,
- 'extension': 'S',
- 'inputs': ['<(RULE_INPUT_PATH)'],
- 'outputs': ['output4.obj'],
- 'arguments': ['-v'],
- 'action': ['python', '-c', 'import shutil; '
- 'shutil.copy("<(RULE_INPUT_PATH)", "output4.obj")'],
- },],
- 'sources': ['a.S'],
- },
- {
- 'target_name': 'test_with_single_quotes',
- 'type': 'none',
- 'rules': [
- {
- 'rule_name': 'build_with_batch3',
- 'msvs_cygwin_shell': 1,
- 'extension': 'S',
- 'inputs': ['<(RULE_INPUT_PATH)'],
- 'outputs': ['output5.obj'],
- 'action': ['python', '-c', "import shutil; "
- "shutil.copy('<(RULE_INPUT_PATH)', 'output5.obj')"],
- },],
- 'sources': ['a.S'],
- },
- ]
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/win/command-quote/go.bat b/deps/npm/node_modules/node-gyp/gyp/test/win/command-quote/go.bat
deleted file mode 100644
index dc3508f9a..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/win/command-quote/go.bat
+++ /dev/null
@@ -1,7 +0,0 @@
-@echo off
-
-:: Copyright (c) 2012 Google Inc. All rights reserved.
-:: Use of this source code is governed by a BSD-style license that can be
-:: found in the LICENSE file.
-
-copy %1 %2
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/win/command-quote/subdir/and/another/in-subdir.gyp b/deps/npm/node_modules/node-gyp/gyp/test/win/command-quote/subdir/and/another/in-subdir.gyp
deleted file mode 100644
index be363bbc8..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/win/command-quote/subdir/and/another/in-subdir.gyp
+++ /dev/null
@@ -1,28 +0,0 @@
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'targets': [
- {
- 'target_name': 'test_batch_depth',
- 'type': 'none',
- 'variables': {
- # Taken from native_client/build/common.gypi. Seems unintentional (a
- # string in a 1 element list)? But since it works on other generators,
- # I guess it should work here too.
- 'filepath': [ 'call <(DEPTH)/../../../go.bat' ],
- },
- 'rules': [
- {
- 'rule_name': 'build_with_batch4',
- 'msvs_cygwin_shell': 0,
- 'extension': 'S',
- 'inputs': ['<(RULE_INPUT_PATH)'],
- 'outputs': ['output4.obj'],
- 'action': ['<@(filepath)', '<(RULE_INPUT_PATH)', 'output4.obj'],
- },],
- 'sources': ['<(DEPTH)\\..\\..\\..\\a.S'],
- },
- ]
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/win/compiler-flags/additional-include-dirs.cc b/deps/npm/node_modules/node-gyp/gyp/test/win/compiler-flags/additional-include-dirs.cc
deleted file mode 100644
index f1e11dd12..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/win/compiler-flags/additional-include-dirs.cc
+++ /dev/null
@@ -1,10 +0,0 @@
-// Copyright (c) 2012 Google Inc. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// No path qualification to test compiler include dir specification.
-#include "header.h"
-
-int main() {
- return 0;
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/win/compiler-flags/additional-include-dirs.gyp b/deps/npm/node_modules/node-gyp/gyp/test/win/compiler-flags/additional-include-dirs.gyp
deleted file mode 100644
index 42c7e849f..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/win/compiler-flags/additional-include-dirs.gyp
+++ /dev/null
@@ -1,20 +0,0 @@
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'targets': [
- {
- 'target_name': 'test_incs',
- 'type': 'executable',
- 'msvs_settings': {
- 'VCCLCompilerTool': {
- 'AdditionalIncludeDirectories': [
- 'subdir',
- ],
- }
- },
- 'sources': ['additional-include-dirs.cc'],
- },
- ]
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/win/compiler-flags/additional-options.cc b/deps/npm/node_modules/node-gyp/gyp/test/win/compiler-flags/additional-options.cc
deleted file mode 100644
index c79572baf..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/win/compiler-flags/additional-options.cc
+++ /dev/null
@@ -1,10 +0,0 @@
-// Copyright (c) 2012 Google Inc. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-int main() {
- // Generate a warning that will appear at level 4, but not level 1
- // (truncation and unused local).
- char c = 123456;
- return 0;
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/win/compiler-flags/additional-options.gyp b/deps/npm/node_modules/node-gyp/gyp/test/win/compiler-flags/additional-options.gyp
deleted file mode 100644
index 6a365a206..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/win/compiler-flags/additional-options.gyp
+++ /dev/null
@@ -1,31 +0,0 @@
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'targets': [
- {
- 'target_name': 'test_additional_none',
- 'type': 'executable',
- 'msvs_settings': {
- 'VCCLCompilerTool': {
- 'WarningLevel': '4',
- 'WarnAsError': 'true',
- }
- },
- 'sources': ['additional-options.cc'],
- },
- {
- 'target_name': 'test_additional_one',
- 'type': 'executable',
- 'msvs_settings': {
- 'VCCLCompilerTool': {
- 'WarningLevel': '4',
- 'WarnAsError': 'true',
- 'AdditionalOptions': [ '/W1' ],
- }
- },
- 'sources': ['additional-options.cc'],
- },
- ]
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/win/compiler-flags/analysis.gyp b/deps/npm/node_modules/node-gyp/gyp/test/win/compiler-flags/analysis.gyp
deleted file mode 100644
index 97e942258..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/win/compiler-flags/analysis.gyp
+++ /dev/null
@@ -1,40 +0,0 @@
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'targets': [
- {
- 'target_name': 'test_analysis_on',
- 'type': 'executable',
- 'msvs_settings': {
- 'VCCLCompilerTool': {
- 'EnablePREfast': 'true',
- 'WarnAsError': 'true',
- },
- },
- 'sources': ['uninit.cc'],
- },
- {
- 'target_name': 'test_analysis_off',
- 'type': 'executable',
- 'msvs_settings': {
- 'VCCLCompilerTool': {
- 'EnablePREfast': 'false',
- 'WarnAsError': 'true',
- },
- },
- 'sources': ['uninit.cc'],
- },
- {
- 'target_name': 'test_analysis_unspec',
- 'type': 'executable',
- 'sources': ['uninit.cc'],
- 'msvs_settings': {
- 'VCCLCompilerTool': {
- 'WarnAsError': 'true',
- },
- },
- },
- ]
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/win/compiler-flags/buffer-security-check.gyp b/deps/npm/node_modules/node-gyp/gyp/test/win/compiler-flags/buffer-security-check.gyp
deleted file mode 100644
index cc5a12b95..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/win/compiler-flags/buffer-security-check.gyp
+++ /dev/null
@@ -1,51 +0,0 @@
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'targets': [
- # Turn debug information on so that we can see the name of the buffer
- # security check cookie in the disassembly.
- {
- 'target_name': 'test_bsc_unset',
- 'type': 'executable',
- 'msvs_settings': {
- 'VCCLCompilerTool': {
- 'DebugInformationFormat': '3',
- },
- 'VCLinkerTool': {
- 'GenerateDebugInformation': 'true',
- },
- },
- 'sources': ['buffer-security.cc'],
- },
- {
- 'target_name': 'test_bsc_off',
- 'type': 'executable',
- 'msvs_settings': {
- 'VCCLCompilerTool': {
- 'BufferSecurityCheck': 'false',
- 'DebugInformationFormat': '3',
- },
- 'VCLinkerTool': {
- 'GenerateDebugInformation': 'true',
- },
- },
- 'sources': ['buffer-security.cc'],
- },
- {
- 'target_name': 'test_bsc_on',
- 'type': 'executable',
- 'msvs_settings': {
- 'VCCLCompilerTool': {
- 'BufferSecurityCheck': 'true',
- 'DebugInformationFormat': '3',
- },
- 'VCLinkerTool': {
- 'GenerateDebugInformation': 'true',
- },
- },
- 'sources': ['buffer-security.cc'],
- },
- ]
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/win/compiler-flags/buffer-security.cc b/deps/npm/node_modules/node-gyp/gyp/test/win/compiler-flags/buffer-security.cc
deleted file mode 100644
index e8a48a2a6..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/win/compiler-flags/buffer-security.cc
+++ /dev/null
@@ -1,12 +0,0 @@
-// Copyright (c) 2012 Google Inc. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include <malloc.h>
-#include <string.h>
-
-int main() {
- char* stuff = reinterpret_cast<char*>(_alloca(256));
- strcpy(stuff, "blah");
- return 0;
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/win/compiler-flags/character-set-mbcs.cc b/deps/npm/node_modules/node-gyp/gyp/test/win/compiler-flags/character-set-mbcs.cc
deleted file mode 100644
index 328630473..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/win/compiler-flags/character-set-mbcs.cc
+++ /dev/null
@@ -1,11 +0,0 @@
-// Copyright (c) 2012 Google Inc. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef _MBCS
-#error
-#endif
-
-int main() {
- return 0;
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/win/compiler-flags/character-set-unicode.cc b/deps/npm/node_modules/node-gyp/gyp/test/win/compiler-flags/character-set-unicode.cc
deleted file mode 100644
index 32e69724a..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/win/compiler-flags/character-set-unicode.cc
+++ /dev/null
@@ -1,15 +0,0 @@
-// Copyright (c) 2012 Google Inc. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef _UNICODE
-#error
-#endif
-
-#ifndef UNICODE
-#error
-#endif
-
-int main() {
- return 0;
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/win/compiler-flags/character-set.gyp b/deps/npm/node_modules/node-gyp/gyp/test/win/compiler-flags/character-set.gyp
deleted file mode 100644
index 3dc45557d..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/win/compiler-flags/character-set.gyp
+++ /dev/null
@@ -1,35 +0,0 @@
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'targets': [
- {
- 'target_name': 'test_cs_notset',
- 'product_name': 'test_cs_notset',
- 'type': 'executable',
- 'msvs_configuration_attributes': {
- 'CharacterSet': '0'
- },
- 'sources': ['hello.cc'],
- },
- {
- 'target_name': 'test_cs_unicode',
- 'product_name': 'test_cs_unicode',
- 'type': 'executable',
- 'msvs_configuration_attributes': {
- 'CharacterSet': '1'
- },
- 'sources': ['character-set-unicode.cc'],
- },
- {
- 'target_name': 'test_cs_mbcs',
- 'product_name': 'test_cs_mbcs',
- 'type': 'executable',
- 'msvs_configuration_attributes': {
- 'CharacterSet': '2'
- },
- 'sources': ['character-set-mbcs.cc'],
- },
- ]
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/win/compiler-flags/debug-format.gyp b/deps/npm/node_modules/node-gyp/gyp/test/win/compiler-flags/debug-format.gyp
deleted file mode 100644
index daaed23ff..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/win/compiler-flags/debug-format.gyp
+++ /dev/null
@@ -1,48 +0,0 @@
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'targets': [
- {
- 'target_name': 'test-debug-format-off',
- 'type': 'executable',
- 'msvs_settings': {
- 'VCCLCompilerTool': {
- 'DebugInformationFormat': '0'
- }
- },
- 'sources': ['hello.cc'],
- },
- {
- 'target_name': 'test-debug-format-oldstyle',
- 'type': 'executable',
- 'msvs_settings': {
- 'VCCLCompilerTool': {
- 'DebugInformationFormat': '1'
- }
- },
- 'sources': ['hello.cc'],
- },
- {
- 'target_name': 'test-debug-format-pdb',
- 'type': 'executable',
- 'msvs_settings': {
- 'VCCLCompilerTool': {
- 'DebugInformationFormat': '3'
- }
- },
- 'sources': ['hello.cc'],
- },
- {
- 'target_name': 'test-debug-format-editcontinue',
- 'type': 'executable',
- 'msvs_settings': {
- 'VCCLCompilerTool': {
- 'DebugInformationFormat': '4'
- }
- },
- 'sources': ['hello.cc'],
- },
- ]
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/win/compiler-flags/exception-handling-on.cc b/deps/npm/node_modules/node-gyp/gyp/test/win/compiler-flags/exception-handling-on.cc
deleted file mode 100644
index 5d9a3af77..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/win/compiler-flags/exception-handling-on.cc
+++ /dev/null
@@ -1,24 +0,0 @@
-// Copyright (c) 2012 Google Inc. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include <excpt.h>
-#include <stdlib.h>
-
-void fail() {
- try {
- int i = 0, j = 1;
- j /= i;
- } catch(...) {
- exit(1);
- }
-}
-
-int main() {
- __try {
- fail();
- } __except(EXCEPTION_EXECUTE_HANDLER) {
- return 2;
- }
- return 3;
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/win/compiler-flags/exception-handling.gyp b/deps/npm/node_modules/node-gyp/gyp/test/win/compiler-flags/exception-handling.gyp
deleted file mode 100644
index c266768dd..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/win/compiler-flags/exception-handling.gyp
+++ /dev/null
@@ -1,46 +0,0 @@
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'targets': [
- # Optimization disabled so that the exception-causing code is not removed
- # (divide by zero was getting optimized away in VS2010).
- {
- 'target_name': 'test_eh_off',
- 'type': 'executable',
- 'msvs_settings': {
- 'VCCLCompilerTool': {
- 'ExceptionHandling': '0',
- 'WarnAsError': 'true',
- 'Optimization': '0',
- }
- },
- 'sources': ['exception-handling-on.cc'],
- },
- {
- 'target_name': 'test_eh_s',
- 'type': 'executable',
- 'msvs_settings': {
- 'VCCLCompilerTool': {
- 'ExceptionHandling': '1',
- 'WarnAsError': 'true',
- 'Optimization': '0',
- }
- },
- 'sources': ['exception-handling-on.cc'],
- },
- {
- 'target_name': 'test_eh_a',
- 'type': 'executable',
- 'msvs_settings': {
- 'VCCLCompilerTool': {
- 'ExceptionHandling': '2',
- 'WarnAsError': 'true',
- 'Optimization': '0',
- }
- },
- 'sources': ['exception-handling-on.cc'],
- },
- ]
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/win/compiler-flags/function-level-linking.cc b/deps/npm/node_modules/node-gyp/gyp/test/win/compiler-flags/function-level-linking.cc
deleted file mode 100644
index 495227281..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/win/compiler-flags/function-level-linking.cc
+++ /dev/null
@@ -1,11 +0,0 @@
-// Copyright (c) 2012 Google Inc. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-int comdat_function() {
- return 1;
-}
-
-int main() {
- return 0;
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/win/compiler-flags/function-level-linking.gyp b/deps/npm/node_modules/node-gyp/gyp/test/win/compiler-flags/function-level-linking.gyp
deleted file mode 100644
index 5858586a2..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/win/compiler-flags/function-level-linking.gyp
+++ /dev/null
@@ -1,28 +0,0 @@
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'targets': [
- {
- 'target_name': 'test_fll_off',
- 'type': 'executable',
- 'msvs_settings': {
- 'VCCLCompilerTool': {
- 'EnableFunctionLevelLinking': 'false'
- }
- },
- 'sources': ['function-level-linking.cc'],
- },
- {
- 'target_name': 'test_fll_on',
- 'type': 'executable',
- 'msvs_settings': {
- 'VCCLCompilerTool': {
- 'EnableFunctionLevelLinking': 'true',
- }
- },
- 'sources': ['function-level-linking.cc'],
- },
- ]
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/win/compiler-flags/hello.cc b/deps/npm/node_modules/node-gyp/gyp/test/win/compiler-flags/hello.cc
deleted file mode 100644
index 1711567ef..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/win/compiler-flags/hello.cc
+++ /dev/null
@@ -1,7 +0,0 @@
-// Copyright (c) 2012 Google Inc. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-int main() {
- return 0;
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/win/compiler-flags/optimizations.gyp b/deps/npm/node_modules/node-gyp/gyp/test/win/compiler-flags/optimizations.gyp
deleted file mode 100644
index fd4b07005..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/win/compiler-flags/optimizations.gyp
+++ /dev/null
@@ -1,147 +0,0 @@
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'targets': [
- {
- 'target_name': 'test_opt_off',
- 'type': 'executable',
- 'msvs_settings': {
- 'VCCLCompilerTool': {
- 'Optimization': '0'
- }
- },
- 'sources': ['hello.cc'],
- },
- {
- 'target_name': 'test_opt_lev_size',
- 'type': 'executable',
- 'msvs_settings': {
- 'VCCLCompilerTool': {
- 'Optimization': '1'
- }
- },
- 'sources': ['hello.cc'],
- },
- {
- 'target_name': 'test_opt_lev_speed',
- 'type': 'executable',
- 'msvs_settings': {
- 'VCCLCompilerTool': {
- 'Optimization': '2'
- }
- },
- 'sources': ['hello.cc'],
- },
- {
- 'target_name': 'test_opt_lev_max',
- 'type': 'executable',
- 'msvs_settings': {
- 'VCCLCompilerTool': {
- 'Optimization': '3'
- }
- },
- 'sources': ['hello.cc'],
- },
- {
- 'target_name': 'test_opt_unset',
- 'type': 'executable',
- 'msvs_settings': {
- 'VCCLCompilerTool': {
- }
- },
- 'sources': ['hello.cc'],
- },
- {
- 'target_name': 'test_opt_fpo',
- 'type': 'executable',
- 'msvs_settings': {
- 'VCCLCompilerTool': {
- 'OmitFramePointers': 'true'
- }
- },
- 'sources': ['hello.cc'],
- },
- {
- 'target_name': 'test_opt_fpo_off',
- 'type': 'executable',
- 'msvs_settings': {
- 'VCCLCompilerTool': {
- 'OmitFramePointers': 'false'
- }
- },
- 'sources': ['hello.cc'],
- },
- {
- 'target_name': 'test_opt_inline_off',
- 'type': 'executable',
- 'msvs_settings': {
- 'VCCLCompilerTool': {
- 'InlineFunctionExpansion': '0'
- }
- },
- 'sources': ['hello.cc'],
- },
- {
- 'target_name': 'test_opt_inline_manual',
- 'type': 'executable',
- 'msvs_settings': {
- 'VCCLCompilerTool': {
- 'InlineFunctionExpansion': '1'
- }
- },
- 'sources': ['hello.cc'],
- },
- {
- 'target_name': 'test_opt_inline_auto',
- 'type': 'executable',
- 'msvs_settings': {
- 'VCCLCompilerTool': {
- 'InlineFunctionExpansion': '2'
- }
- },
- 'sources': ['hello.cc'],
- },
- {
- 'target_name': 'test_opt_neither',
- 'type': 'executable',
- 'msvs_settings': {
- 'VCCLCompilerTool': {
- 'FavorSizeOrSpeed': '0'
- }
- },
- 'sources': ['hello.cc'],
- },
- {
- 'target_name': 'test_opt_speed',
- 'type': 'executable',
- 'msvs_settings': {
- 'VCCLCompilerTool': {
- 'FavorSizeOrSpeed': '1'
- }
- },
- 'sources': ['hello.cc'],
- },
- {
- 'target_name': 'test_opt_size',
- 'type': 'executable',
- 'msvs_settings': {
- 'VCCLCompilerTool': {
- 'FavorSizeOrSpeed': '2'
- }
- },
- 'sources': ['hello.cc'],
- },
- {
- 'target_name': 'test_opt_wpo',
- 'type': 'executable',
- 'msvs_settings': {
- 'VCCLCompilerTool': {
- 'WholeProgramOptimization': 'true'
- }
- },
- 'sources': ['hello.cc'],
- },
- ]
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/win/compiler-flags/pdbname.cc b/deps/npm/node_modules/node-gyp/gyp/test/win/compiler-flags/pdbname.cc
deleted file mode 100644
index 0fe05d5af..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/win/compiler-flags/pdbname.cc
+++ /dev/null
@@ -1,7 +0,0 @@
-// Copyright (c) 2012 Google Inc. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-int some_function() {
- return 0;
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/win/compiler-flags/pdbname.gyp b/deps/npm/node_modules/node-gyp/gyp/test/win/compiler-flags/pdbname.gyp
deleted file mode 100644
index 8fcf75472..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/win/compiler-flags/pdbname.gyp
+++ /dev/null
@@ -1,24 +0,0 @@
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'targets': [
- {
- 'target_name': 'test_pdbname',
- 'type': 'executable',
- 'sources': [
- 'hello.cc',
- 'pdbname.cc',
- ],
- 'msvs_settings': {
- 'VCCLCompilerTool': {
- 'DebugInformationFormat': '3',
- },
- 'VCLinkerTool': {
- 'GenerateDebugInformation': 'true',
- },
- },
- },
- ]
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/win/compiler-flags/rtti-on.cc b/deps/npm/node_modules/node-gyp/gyp/test/win/compiler-flags/rtti-on.cc
deleted file mode 100644
index 2d3ad03ae..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/win/compiler-flags/rtti-on.cc
+++ /dev/null
@@ -1,11 +0,0 @@
-// Copyright (c) 2012 Google Inc. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef _CPPRTTI
-#error
-#endif
-
-int main() {
- return 0;
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/win/compiler-flags/rtti.gyp b/deps/npm/node_modules/node-gyp/gyp/test/win/compiler-flags/rtti.gyp
deleted file mode 100644
index 704cd58f5..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/win/compiler-flags/rtti.gyp
+++ /dev/null
@@ -1,37 +0,0 @@
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'targets': [
- {
- 'target_name': 'test_rtti_off',
- 'type': 'executable',
- 'msvs_settings': {
- 'VCCLCompilerTool': {
- 'RuntimeTypeInfo': 'false',
- 'WarnAsError': 'true'
- }
- },
- 'sources': ['rtti-on.cc'],
- },
- {
- 'target_name': 'test_rtti_on',
- 'type': 'executable',
- 'msvs_settings': {
- 'VCCLCompilerTool': {
- 'RuntimeTypeInfo': 'true',
- 'WarnAsError': 'true'
- }
- },
- 'sources': ['rtti-on.cc'],
- },
- {
- 'target_name': 'test_rtti_unset',
- 'type': 'executable',
- 'msvs_settings': {
- },
- 'sources': ['rtti-on.cc'],
- },
- ]
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/win/compiler-flags/runtime-checks.cc b/deps/npm/node_modules/node-gyp/gyp/test/win/compiler-flags/runtime-checks.cc
deleted file mode 100644
index fdb811da8..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/win/compiler-flags/runtime-checks.cc
+++ /dev/null
@@ -1,11 +0,0 @@
-// Copyright (c) 2012 Google Inc. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef __MSVC_RUNTIME_CHECKS
-#error
-#endif
-
-int main() {
- return 0;
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/win/compiler-flags/runtime-checks.gyp b/deps/npm/node_modules/node-gyp/gyp/test/win/compiler-flags/runtime-checks.gyp
deleted file mode 100644
index 8ea309205..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/win/compiler-flags/runtime-checks.gyp
+++ /dev/null
@@ -1,29 +0,0 @@
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'targets': [
- {
- 'target_name': 'test_brc_none',
- 'type': 'executable',
- 'msvs_settings': {
- 'VCCLCompilerTool': {
- 'Optimization': '0',
- }
- },
- 'sources': ['runtime-checks.cc'],
- },
- {
- 'target_name': 'test_brc_1',
- 'type': 'executable',
- 'msvs_settings': {
- 'VCCLCompilerTool': {
- 'Optimization': '0',
- 'BasicRuntimeChecks': '3'
- }
- },
- 'sources': ['runtime-checks.cc'],
- },
- ]
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/win/compiler-flags/runtime-library-md.cc b/deps/npm/node_modules/node-gyp/gyp/test/win/compiler-flags/runtime-library-md.cc
deleted file mode 100644
index 87c83021d..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/win/compiler-flags/runtime-library-md.cc
+++ /dev/null
@@ -1,19 +0,0 @@
-// Copyright (c) 2012 Google Inc. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef _MT
-#error
-#endif
-
-#ifdef _DEBUG
-#error
-#endif
-
-#ifndef _DLL
-#error
-#endif
-
-int main() {
- return 0;
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/win/compiler-flags/runtime-library-mdd.cc b/deps/npm/node_modules/node-gyp/gyp/test/win/compiler-flags/runtime-library-mdd.cc
deleted file mode 100644
index 9f175e493..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/win/compiler-flags/runtime-library-mdd.cc
+++ /dev/null
@@ -1,19 +0,0 @@
-// Copyright (c) 2012 Google Inc. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef _MT
-#error
-#endif
-
-#ifndef _DEBUG
-#error
-#endif
-
-#ifndef _DLL
-#error
-#endif
-
-int main() {
- return 0;
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/win/compiler-flags/runtime-library-mt.cc b/deps/npm/node_modules/node-gyp/gyp/test/win/compiler-flags/runtime-library-mt.cc
deleted file mode 100644
index 27e62b63d..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/win/compiler-flags/runtime-library-mt.cc
+++ /dev/null
@@ -1,19 +0,0 @@
-// Copyright (c) 2012 Google Inc. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef _MT
-#error
-#endif
-
-#ifdef _DEBUG
-#error
-#endif
-
-#ifdef _DLL
-#error
-#endif
-
-int main() {
- return 0;
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/win/compiler-flags/runtime-library-mtd.cc b/deps/npm/node_modules/node-gyp/gyp/test/win/compiler-flags/runtime-library-mtd.cc
deleted file mode 100644
index a9921db9e..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/win/compiler-flags/runtime-library-mtd.cc
+++ /dev/null
@@ -1,19 +0,0 @@
-// Copyright (c) 2012 Google Inc. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef _MT
-#error
-#endif
-
-#ifndef _DEBUG
-#error
-#endif
-
-#ifdef _DLL
-#error
-#endif
-
-int main() {
- return 0;
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/win/compiler-flags/runtime-library.gyp b/deps/npm/node_modules/node-gyp/gyp/test/win/compiler-flags/runtime-library.gyp
deleted file mode 100644
index 04afc391c..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/win/compiler-flags/runtime-library.gyp
+++ /dev/null
@@ -1,48 +0,0 @@
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'targets': [
- {
- 'target_name': 'test_rl_md',
- 'type': 'executable',
- 'msvs_settings': {
- 'VCCLCompilerTool': {
- 'RuntimeLibrary': '2'
- }
- },
- 'sources': ['runtime-library-md.cc'],
- },
- {
- 'target_name': 'test_rl_mdd',
- 'type': 'executable',
- 'msvs_settings': {
- 'VCCLCompilerTool': {
- 'RuntimeLibrary': '3'
- }
- },
- 'sources': ['runtime-library-mdd.cc'],
- },
- {
- 'target_name': 'test_rl_mt',
- 'type': 'executable',
- 'msvs_settings': {
- 'VCCLCompilerTool': {
- 'RuntimeLibrary': '0'
- }
- },
- 'sources': ['runtime-library-mt.cc'],
- },
- {
- 'target_name': 'test_rl_mtd',
- 'type': 'executable',
- 'msvs_settings': {
- 'VCCLCompilerTool': {
- 'RuntimeLibrary': '1'
- }
- },
- 'sources': ['runtime-library-mtd.cc'],
- },
- ]
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/win/compiler-flags/subdir/header.h b/deps/npm/node_modules/node-gyp/gyp/test/win/compiler-flags/subdir/header.h
deleted file mode 100644
index e69de29bb..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/win/compiler-flags/subdir/header.h
+++ /dev/null
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/win/compiler-flags/uninit.cc b/deps/npm/node_modules/node-gyp/gyp/test/win/compiler-flags/uninit.cc
deleted file mode 100644
index a9d5f5d48..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/win/compiler-flags/uninit.cc
+++ /dev/null
@@ -1,13 +0,0 @@
-// Copyright (c) 2012 Google Inc. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Should trigger C6001: using uninitialized memory <variable> for |i|.
-int f(bool b) {
- int i;
- if (b)
- i = 0;
- return i;
-}
-
-int main() {}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/win/compiler-flags/warning-as-error.cc b/deps/npm/node_modules/node-gyp/gyp/test/win/compiler-flags/warning-as-error.cc
deleted file mode 100644
index fd2130aca..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/win/compiler-flags/warning-as-error.cc
+++ /dev/null
@@ -1,9 +0,0 @@
-// Copyright (c) 2012 Google Inc. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-int main() {
- // Cause a warning, even at /W1
- int export;
- return 0;
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/win/compiler-flags/warning-as-error.gyp b/deps/npm/node_modules/node-gyp/gyp/test/win/compiler-flags/warning-as-error.gyp
deleted file mode 100644
index d71f26114..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/win/compiler-flags/warning-as-error.gyp
+++ /dev/null
@@ -1,37 +0,0 @@
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'targets': [
- {
- 'target_name': 'test_warn_as_error_false',
- 'type': 'executable',
- 'msvs_settings': {
- 'VCCLCompilerTool': {
- 'WarnAsError': 'false'
- }
- },
- 'sources': ['warning-as-error.cc']
- },
- {
- 'target_name': 'test_warn_as_error_true',
- 'type': 'executable',
- 'msvs_settings': {
- 'VCCLCompilerTool': {
- 'WarnAsError': 'true'
- }
- },
- 'sources': ['warning-as-error.cc']
- },
- {
- 'target_name': 'test_warn_as_error_unset',
- 'type': 'executable',
- 'msvs_settings': {
- 'VCCLCompilerTool': {
- }
- },
- 'sources': ['warning-as-error.cc']
- },
- ]
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/win/compiler-flags/warning-level.gyp b/deps/npm/node_modules/node-gyp/gyp/test/win/compiler-flags/warning-level.gyp
deleted file mode 100644
index 2297aa7ca..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/win/compiler-flags/warning-level.gyp
+++ /dev/null
@@ -1,115 +0,0 @@
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'targets': [
- # Level 1
- {
- 'target_name': 'test_wl1_fail',
- 'type': 'executable',
- 'msvs_settings': {
- 'VCCLCompilerTool': {
- 'WarningLevel': '1',
- 'WarnAsError': 'true',
- }
- },
- 'sources': ['warning-level1.cc'],
- },
- {
- 'target_name': 'test_wl1_pass',
- 'type': 'executable',
- 'msvs_settings': {
- 'VCCLCompilerTool': {
- 'WarningLevel': '1',
- 'WarnAsError': 'true',
- }
- },
- 'sources': ['warning-level2.cc'],
- },
-
- # Level 2
- {
- 'target_name': 'test_wl2_fail',
- 'type': 'executable',
- 'msvs_settings': {
- 'VCCLCompilerTool': {
- 'WarningLevel': '2',
- 'WarnAsError': 'true',
- }
- },
- 'sources': ['warning-level2.cc'],
- },
- {
- 'target_name': 'test_wl2_pass',
- 'type': 'executable',
- 'msvs_settings': {
- 'VCCLCompilerTool': {
- 'WarningLevel': '2',
- 'WarnAsError': 'true',
- }
- },
- 'sources': ['warning-level3.cc'],
- },
-
- # Level 3
- {
- 'target_name': 'test_wl3_fail',
- 'type': 'executable',
- 'msvs_settings': {
- 'VCCLCompilerTool': {
- 'WarningLevel': '3',
- 'WarnAsError': 'true',
- }
- },
- 'sources': ['warning-level3.cc'],
- },
- {
- 'target_name': 'test_wl3_pass',
- 'type': 'executable',
- 'msvs_settings': {
- 'VCCLCompilerTool': {
- 'WarningLevel': '3',
- 'WarnAsError': 'true',
- }
- },
- 'sources': ['warning-level4.cc'],
- },
-
-
- # Level 4
- {
- 'target_name': 'test_wl4_fail',
- 'type': 'executable',
- 'msvs_settings': {
- 'VCCLCompilerTool': {
- 'WarningLevel': '4',
- 'WarnAsError': 'true',
- }
- },
- 'sources': ['warning-level4.cc'],
- },
-
- # Default level
- {
- 'target_name': 'test_def_fail',
- 'type': 'executable',
- 'msvs_settings': {
- 'VCCLCompilerTool': {
- 'WarnAsError': 'true',
- }
- },
- 'sources': ['warning-level1.cc'],
- },
- {
- 'target_name': 'test_def_pass',
- 'type': 'executable',
- 'msvs_settings': {
- 'VCCLCompilerTool': {
- }
- },
- 'sources': ['warning-level2.cc'],
- },
-
- ]
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/win/compiler-flags/warning-level1.cc b/deps/npm/node_modules/node-gyp/gyp/test/win/compiler-flags/warning-level1.cc
deleted file mode 100644
index 119578d69..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/win/compiler-flags/warning-level1.cc
+++ /dev/null
@@ -1,8 +0,0 @@
-// Copyright (c) 2012 Google Inc. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-int main() {
- int export; // Cause a level 1 warning (C4237).
- return 0;
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/win/compiler-flags/warning-level2.cc b/deps/npm/node_modules/node-gyp/gyp/test/win/compiler-flags/warning-level2.cc
deleted file mode 100644
index 9a2670318..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/win/compiler-flags/warning-level2.cc
+++ /dev/null
@@ -1,14 +0,0 @@
-// Copyright (c) 2012 Google Inc. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-int f(int x) {
- return 0;
-}
-
-int main() {
- double x = 10.1;
- // Cause a level 2 warning (C4243).
- return f(x);
- return 0;
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/win/compiler-flags/warning-level3.cc b/deps/npm/node_modules/node-gyp/gyp/test/win/compiler-flags/warning-level3.cc
deleted file mode 100644
index e0a9f3cdd..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/win/compiler-flags/warning-level3.cc
+++ /dev/null
@@ -1,11 +0,0 @@
-// Copyright (c) 2012 Google Inc. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Cause a level 3 warning (C4359).
-struct __declspec(align(8)) C8 { __int64 i; };
-struct __declspec(align(4)) C4 { C8 m8; };
-
-int main() {
- return 0;
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/win/compiler-flags/warning-level4.cc b/deps/npm/node_modules/node-gyp/gyp/test/win/compiler-flags/warning-level4.cc
deleted file mode 100644
index 48a4fb701..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/win/compiler-flags/warning-level4.cc
+++ /dev/null
@@ -1,10 +0,0 @@
-// Copyright (c) 2012 Google Inc. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-int main() {
- const int i = -1;
- // Cause a level 4 warning (C4245).
- unsigned int j = i;
- return 0;
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-asm-files.py b/deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-asm-files.py
deleted file mode 100644
index 007b52eb2..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-asm-files.py
+++ /dev/null
@@ -1,26 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Make sure .s files aren't passed to cl.
-"""
-
-import TestGyp
-
-import sys
-
-if sys.platform == 'win32':
- test = TestGyp.TestGyp(formats=['msvs', 'ninja'])
-
- CHDIR = 'asm-files'
- test.run_gyp('asm-files.gyp', chdir=CHDIR)
- # The compiler will error out if it's passed the .s files, so just make sure
- # the build succeeds. The compiler doesn't directly support building
- # assembler files on Windows, they have to be built explicitly with a
- # third-party tool.
- test.build('asm-files.gyp', test.ALL, chdir=CHDIR)
-
- test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-cl-additional-include-dirs.py b/deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-cl-additional-include-dirs.py
deleted file mode 100644
index 1fabfa975..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-cl-additional-include-dirs.py
+++ /dev/null
@@ -1,22 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Make sure additional include dirs are extracted properly.
-"""
-
-import TestGyp
-
-import sys
-
-if sys.platform == 'win32':
- test = TestGyp.TestGyp(formats=['msvs', 'ninja'])
-
- CHDIR = 'compiler-flags'
- test.run_gyp('additional-include-dirs.gyp', chdir=CHDIR)
- test.build('additional-include-dirs.gyp', test.ALL, chdir=CHDIR)
-
- test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-cl-additional-options.py b/deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-cl-additional-options.py
deleted file mode 100644
index e9aea10dc..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-cl-additional-options.py
+++ /dev/null
@@ -1,28 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Make sure additional manual compiler flags are extracted properly.
-"""
-
-import TestGyp
-
-import sys
-
-if sys.platform == 'win32':
- test = TestGyp.TestGyp(formats=['msvs', 'ninja'])
-
- CHDIR = 'compiler-flags'
- test.run_gyp('additional-options.gyp', chdir=CHDIR)
-
- # Warning level not overidden, must fail.
- test.build('additional-options.gyp', 'test_additional_none', chdir=CHDIR,
- status=1)
-
- # Warning level is overridden, must succeed.
- test.build('additional-options.gyp', 'test_additional_one', chdir=CHDIR)
-
- test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-cl-analysis.py b/deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-cl-analysis.py
deleted file mode 100644
index 7b3b9897f..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-cl-analysis.py
+++ /dev/null
@@ -1,30 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Make sure PREfast (code analysis) setting is extracted properly.
-"""
-
-import TestGyp
-
-import os
-import sys
-
-if (sys.platform == 'win32' and
- int(os.environ.get('GYP_MSVS_VERSION', 0)) >= 2012):
- test = TestGyp.TestGyp(formats=['msvs', 'ninja'])
-
- CHDIR = 'compiler-flags'
- test.run_gyp('analysis.gyp', chdir=CHDIR)
-
- # Analysis enabled, should fail.
- test.build('analysis.gyp', 'test_analysis_on', chdir=CHDIR, status=1)
-
- # Analysis not enabled, or unspecified, should pass.
- test.build('analysis.gyp', 'test_analysis_off', chdir=CHDIR)
- test.build('analysis.gyp', 'test_analysis_unspec', chdir=CHDIR)
-
- test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-cl-buffer-security-check.py b/deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-cl-buffer-security-check.py
deleted file mode 100644
index e22869c3d..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-cl-buffer-security-check.py
+++ /dev/null
@@ -1,53 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Make sure buffer security check setting is extracted properly.
-"""
-
-import TestGyp
-
-import sys
-
-if sys.platform == 'win32':
- test = TestGyp.TestGyp(formats=['msvs', 'ninja'])
-
- CHDIR = 'compiler-flags'
- test.run_gyp('buffer-security-check.gyp', chdir=CHDIR)
- test.build('buffer-security-check.gyp', chdir=CHDIR)
-
- def GetDisassemblyOfMain(exe):
- # The standard library uses buffer security checks independent of our
- # buffer security settings, so we extract just our code (i.e. main()) to
- # check against.
- full_path = test.built_file_path(exe, chdir=CHDIR)
- output = test.run_dumpbin('/disasm', full_path)
- result = []
- in_main = False
- for line in output.splitlines():
- if line == '_main:':
- in_main = True
- elif in_main:
- # Disassembly of next function starts.
- if line.startswith('_'):
- break
- result.append(line)
- return '\n'.join(result)
-
- # Buffer security checks are on by default, make sure security_cookie
- # appears in the disassembly of our code.
- if 'security_cookie' not in GetDisassemblyOfMain('test_bsc_unset.exe'):
- test.fail_test()
-
- # Explicitly on.
- if 'security_cookie' not in GetDisassemblyOfMain('test_bsc_on.exe'):
- test.fail_test()
-
- # Explicitly off, shouldn't be a reference to the security cookie.
- if 'security_cookie' in GetDisassemblyOfMain('test_bsc_off.exe'):
- test.fail_test()
-
- test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-cl-character-set.py b/deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-cl-character-set.py
deleted file mode 100644
index 7fabb6722..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-cl-character-set.py
+++ /dev/null
@@ -1,22 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Make sure character set setting is extracted properly.
-"""
-
-import TestGyp
-
-import sys
-
-if sys.platform == 'win32':
- test = TestGyp.TestGyp(formats=['msvs', 'ninja'])
-
- CHDIR = 'compiler-flags'
- test.run_gyp('character-set.gyp', chdir=CHDIR)
- test.build('character-set.gyp', test.ALL, chdir=CHDIR)
-
- test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-cl-debug-format.py b/deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-cl-debug-format.py
deleted file mode 100644
index 6c68a619b..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-cl-debug-format.py
+++ /dev/null
@@ -1,43 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Make sure debug format settings are extracted properly.
-"""
-
-import TestGyp
-
-import sys
-
-if sys.platform == 'win32':
- test = TestGyp.TestGyp(formats=['ninja'])
-
- CHDIR = 'compiler-flags'
- test.run_gyp('debug-format.gyp', chdir=CHDIR)
-
- # While there's ways to via .pdb contents, the .pdb doesn't include
- # which style the debug information was created from, so we resort to just
- # verifying the flags are correct on the command line.
-
- ninja_file = test.built_file_path('obj/test-debug-format-off.ninja',
- chdir=CHDIR)
- test.must_not_contain(ninja_file, '/Z7')
- test.must_not_contain(ninja_file, '/Zi')
- test.must_not_contain(ninja_file, '/ZI')
-
- ninja_file = test.built_file_path('obj/test-debug-format-oldstyle.ninja',
- chdir=CHDIR)
- test.must_contain(ninja_file, '/Z7')
-
- ninja_file = test.built_file_path('obj/test-debug-format-pdb.ninja',
- chdir=CHDIR)
- test.must_contain(ninja_file, '/Zi')
-
- ninja_file = test.built_file_path('obj/test-debug-format-editcontinue.ninja',
- chdir=CHDIR)
- test.must_contain(ninja_file, '/ZI')
-
- test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-cl-exception-handling.py b/deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-cl-exception-handling.py
deleted file mode 100644
index 5738a5407..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-cl-exception-handling.py
+++ /dev/null
@@ -1,33 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Make sure exception handling settings are extracted properly.
-"""
-
-import TestGyp
-
-import sys
-
-if sys.platform == 'win32':
- test = TestGyp.TestGyp(formats=['msvs', 'ninja'])
-
- CHDIR = 'compiler-flags'
- test.run_gyp('exception-handling.gyp', chdir=CHDIR)
-
- # Must fail.
- test.build('exception-handling.gyp', 'test_eh_off', chdir=CHDIR,
- status=1)
-
- # Must succeed.
- test.build('exception-handling.gyp', 'test_eh_s', chdir=CHDIR)
- test.build('exception-handling.gyp', 'test_eh_a', chdir=CHDIR)
-
- # Error code must be 1 if EHa, and 2 if EHsc.
- test.run_built_executable('test_eh_a', chdir=CHDIR, status=1)
- test.run_built_executable('test_eh_s', chdir=CHDIR, status=2)
-
- test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-cl-function-level-linking.py b/deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-cl-function-level-linking.py
deleted file mode 100644
index 17c29e235..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-cl-function-level-linking.py
+++ /dev/null
@@ -1,52 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Make sure function-level linking setting is extracted properly.
-"""
-
-import TestGyp
-
-import sys
-
-if sys.platform == 'win32':
- test = TestGyp.TestGyp(formats=['msvs', 'ninja'])
-
- CHDIR = 'compiler-flags'
- test.run_gyp('function-level-linking.gyp', chdir=CHDIR)
- test.build('function-level-linking.gyp', test.ALL, chdir=CHDIR)
-
- def CheckForSectionString(binary, search_for, should_exist):
- output = test.run_dumpbin('/headers', binary)
- if should_exist and search_for not in output:
- print 'Did not find "%s" in %s' % (search_for, binary)
- test.fail_test()
- elif not should_exist and search_for in output:
- print 'Found "%s" in %s (and shouldn\'t have)' % (search_for, binary)
- test.fail_test()
-
- def Object(proj, obj):
- sep = '.' if test.format == 'ninja' else '\\'
- return 'obj\\%s%s%s' % (proj, sep, obj)
-
- look_for = '''COMDAT; sym= "int __cdecl comdat_function'''
-
- # When function level linking is on, the functions should be listed as
- # separate comdat entries.
-
- CheckForSectionString(
- test.built_file_path(Object('test_fll_on', 'function-level-linking.obj'),
- chdir=CHDIR),
- look_for,
- should_exist=True)
-
- CheckForSectionString(
- test.built_file_path(Object('test_fll_off', 'function-level-linking.obj'),
- chdir=CHDIR),
- look_for,
- should_exist=False)
-
- test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-cl-optimizations.py b/deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-cl-optimizations.py
deleted file mode 100644
index 9afd34423..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-cl-optimizations.py
+++ /dev/null
@@ -1,79 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Make sure optimization settings are extracted properly.
-"""
-
-import TestGyp
-
-import sys
-
-if sys.platform == 'win32':
- test = TestGyp.TestGyp(formats=['ninja'])
-
- CHDIR = 'compiler-flags'
- test.run_gyp('optimizations.gyp', chdir=CHDIR)
-
- # It's hard to map flags to output contents in a non-fragile way (especially
- # handling both 2008/2010), so just verify the correct ninja command line
- # contents.
-
- ninja_file = test.built_file_path('obj/test_opt_off.ninja', chdir=CHDIR)
- test.must_contain(ninja_file, 'cflags = /Od')
-
- ninja_file = test.built_file_path('obj/test_opt_lev_size.ninja', chdir=CHDIR)
- test.must_contain(ninja_file, 'cflags = /O1')
-
- ninja_file = test.built_file_path('obj/test_opt_lev_speed.ninja', chdir=CHDIR)
- test.must_contain(ninja_file, 'cflags = /O2')
-
- ninja_file = test.built_file_path('obj/test_opt_lev_max.ninja', chdir=CHDIR)
- test.must_contain(ninja_file, 'cflags = /Ox')
-
- ninja_file = test.built_file_path('obj/test_opt_unset.ninja', chdir=CHDIR)
- test.must_not_contain(ninja_file, '/Od')
- test.must_not_contain(ninja_file, '/O1')
- test.must_not_contain(ninja_file, '/O2')
- test.must_not_contain(ninja_file, '/Ox')
-
- ninja_file = test.built_file_path('obj/test_opt_fpo.ninja', chdir=CHDIR)
- test.must_contain(ninja_file, '/Oy')
- test.must_not_contain(ninja_file, '/Oy-')
-
- ninja_file = test.built_file_path('obj/test_opt_fpo_off.ninja', chdir=CHDIR)
- test.must_contain(ninja_file, '/Oy-')
-
- ninja_file = test.built_file_path('obj/test_opt_inline_off.ninja',
- chdir=CHDIR)
- test.must_contain(ninja_file, '/Ob0')
-
- ninja_file = test.built_file_path('obj/test_opt_inline_manual.ninja',
- chdir=CHDIR)
- test.must_contain(ninja_file, '/Ob1')
-
- ninja_file = test.built_file_path('obj/test_opt_inline_auto.ninja',
- chdir=CHDIR)
- test.must_contain(ninja_file, '/Ob2')
-
- ninja_file = test.built_file_path('obj/test_opt_neither.ninja',
- chdir=CHDIR)
- test.must_not_contain(ninja_file, '/Os')
- test.must_not_contain(ninja_file, '/Ot')
-
- ninja_file = test.built_file_path('obj/test_opt_size.ninja',
- chdir=CHDIR)
- test.must_contain(ninja_file, '/Os')
-
- ninja_file = test.built_file_path('obj/test_opt_speed.ninja',
- chdir=CHDIR)
- test.must_contain(ninja_file, '/Ot')
-
- ninja_file = test.built_file_path('obj/test_opt_wpo.ninja',
- chdir=CHDIR)
- test.must_contain(ninja_file, '/GL')
-
- test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-cl-pdbname.py b/deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-cl-pdbname.py
deleted file mode 100644
index 63bb37c87..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-cl-pdbname.py
+++ /dev/null
@@ -1,26 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Make sure pdb is named as expected (shared between .cc files).
-"""
-
-import TestGyp
-
-import sys
-
-if sys.platform == 'win32':
- test = TestGyp.TestGyp(formats=['ninja'])
-
- CHDIR = 'compiler-flags'
- test.run_gyp('pdbname.gyp', chdir=CHDIR)
- test.build('pdbname.gyp', test.ALL, chdir=CHDIR)
-
- # Confirm that the default behaviour is to name the .pdb per-target (rather
- # than per .cc file).
- test.built_file_must_exist('test_pdbname.pdb', chdir=CHDIR)
-
- test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-cl-rtti.py b/deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-cl-rtti.py
deleted file mode 100644
index d49a09437..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-cl-rtti.py
+++ /dev/null
@@ -1,30 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Make sure RTTI setting is extracted properly.
-"""
-
-import TestGyp
-
-import sys
-
-if sys.platform == 'win32':
- test = TestGyp.TestGyp(formats=['msvs', 'ninja'])
-
- CHDIR = 'compiler-flags'
- test.run_gyp('rtti.gyp', chdir=CHDIR)
-
- # Must fail.
- test.build('rtti.gyp', 'test_rtti_off', chdir=CHDIR, status=1)
-
- # Must succeed.
- test.build('rtti.gyp', 'test_rtti_on', chdir=CHDIR)
-
- # Must succeed.
- test.build('rtti.gyp', 'test_rtti_unset', chdir=CHDIR)
-
- test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-cl-runtime-checks.py b/deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-cl-runtime-checks.py
deleted file mode 100644
index 4fd529f89..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-cl-runtime-checks.py
+++ /dev/null
@@ -1,30 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Make sure RTC setting is extracted properly.
-"""
-
-import TestGyp
-
-import sys
-
-if sys.platform == 'win32':
- test = TestGyp.TestGyp(formats=['msvs', 'ninja'])
-
- CHDIR = 'compiler-flags'
- test.run_gyp('runtime-checks.gyp', chdir=CHDIR)
-
- # Runtime checks disabled, should fail.
- test.build('runtime-checks.gyp', 'test_brc_none', chdir=CHDIR, status=1)
-
- # Runtime checks enabled, should pass.
- test.build('runtime-checks.gyp', 'test_brc_1', chdir=CHDIR)
-
- # TODO(scottmg): There are other less frequently used/partial options, but
- # it's not clear how to verify them, so ignore for now.
-
- test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-cl-runtime-library.py b/deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-cl-runtime-library.py
deleted file mode 100644
index 53c149297..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-cl-runtime-library.py
+++ /dev/null
@@ -1,22 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Make sure runtime C library setting is extracted properly.
-"""
-
-import TestGyp
-
-import sys
-
-if sys.platform == 'win32':
- test = TestGyp.TestGyp(formats=['msvs', 'ninja'])
-
- CHDIR = 'compiler-flags'
- test.run_gyp('runtime-library.gyp', chdir=CHDIR)
- test.build('runtime-library.gyp', test.ALL, chdir=CHDIR)
-
- test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-cl-warning-as-error.py b/deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-cl-warning-as-error.py
deleted file mode 100644
index d4ef1b362..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-cl-warning-as-error.py
+++ /dev/null
@@ -1,30 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Make sure warning-as-error is extracted properly.
-"""
-
-import TestGyp
-
-import sys
-
-if sys.platform == 'win32':
- test = TestGyp.TestGyp(formats=['msvs', 'ninja'])
-
- CHDIR = 'compiler-flags'
- test.run_gyp('warning-as-error.gyp', chdir=CHDIR)
-
- # The source file contains a warning, so if WarnAsError is false (or
- # default, which is also false), then the build should succeed, otherwise it
- # must fail.
-
- test.build('warning-as-error.gyp', 'test_warn_as_error_false', chdir=CHDIR)
- test.build('warning-as-error.gyp', 'test_warn_as_error_unset', chdir=CHDIR)
- test.build('warning-as-error.gyp', 'test_warn_as_error_true', chdir=CHDIR,
- status=1)
-
- test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-cl-warning-level.py b/deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-cl-warning-level.py
deleted file mode 100644
index 62a5b39b6..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-cl-warning-level.py
+++ /dev/null
@@ -1,41 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Make sure warning level is extracted properly.
-"""
-
-import TestGyp
-
-import sys
-
-if sys.platform == 'win32':
- test = TestGyp.TestGyp(formats=['msvs', 'ninja'])
-
- CHDIR = 'compiler-flags'
- test.run_gyp('warning-level.gyp', chdir=CHDIR)
-
- # A separate target for each warning level: one pass (compiling a file
- # containing a warning that's above the specified level); and one fail
- # (compiling a file at the specified level). No pass for 4 of course,
- # because it would have to have no warnings. The default warning level is
- # equivalent to level 1.
-
- test.build('warning-level.gyp', 'test_wl1_fail', chdir=CHDIR, status=1)
- test.build('warning-level.gyp', 'test_wl1_pass', chdir=CHDIR)
-
- test.build('warning-level.gyp', 'test_wl2_fail', chdir=CHDIR, status=1)
- test.build('warning-level.gyp', 'test_wl2_pass', chdir=CHDIR)
-
- test.build('warning-level.gyp', 'test_wl3_fail', chdir=CHDIR, status=1)
- test.build('warning-level.gyp', 'test_wl3_pass', chdir=CHDIR)
-
- test.build('warning-level.gyp', 'test_wl4_fail', chdir=CHDIR, status=1)
-
- test.build('warning-level.gyp', 'test_def_fail', chdir=CHDIR, status=1)
- test.build('warning-level.gyp', 'test_def_pass', chdir=CHDIR)
-
- test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-command-quote.py b/deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-command-quote.py
deleted file mode 100644
index 652b05b9b..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-command-quote.py
+++ /dev/null
@@ -1,37 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-
-Make sure the program in a command can be a called batch file, or an
-application in the path. Specifically, this means not quoting something like
-"call x.bat", lest the shell look for a program named "call x.bat", rather
-than calling "x.bat".
-"""
-
-import TestGyp
-
-import sys
-
-if sys.platform == 'win32':
- test = TestGyp.TestGyp(formats=['msvs', 'ninja'])
- CHDIR = 'command-quote'
- test.run_gyp('command-quote.gyp', chdir=CHDIR)
-
- test.build('command-quote.gyp', 'test_batch', chdir=CHDIR)
- test.build('command-quote.gyp', 'test_call_separate', chdir=CHDIR)
- test.build('command-quote.gyp', 'test_with_double_quotes', chdir=CHDIR)
- test.build('command-quote.gyp', 'test_with_single_quotes', chdir=CHDIR)
-
- # We confirm that this fails because other generators don't handle spaces in
- # inputs so it's preferable to not have it work here.
- test.build('command-quote.gyp', 'test_with_spaces', chdir=CHDIR, status=1)
-
- CHDIR = 'command-quote/subdir/and/another'
- test.run_gyp('in-subdir.gyp', chdir=CHDIR)
- test.build('in-subdir.gyp', 'test_batch_depth', chdir=CHDIR)
-
- test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-link-additional-deps.py b/deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-link-additional-deps.py
deleted file mode 100644
index 62c57366f..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-link-additional-deps.py
+++ /dev/null
@@ -1,22 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Make sure additional library dependencies are handled.
-"""
-
-import TestGyp
-
-import sys
-
-if sys.platform == 'win32':
- test = TestGyp.TestGyp(formats=['msvs', 'ninja'])
-
- CHDIR = 'linker-flags'
- test.run_gyp('additional-deps.gyp', chdir=CHDIR)
- test.build('additional-deps.gyp', test.ALL, chdir=CHDIR)
-
- test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-link-additional-options.py b/deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-link-additional-options.py
deleted file mode 100644
index 7e57ae476..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-link-additional-options.py
+++ /dev/null
@@ -1,22 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Make sure additional options are handled.
-"""
-
-import TestGyp
-
-import sys
-
-if sys.platform == 'win32':
- test = TestGyp.TestGyp(formats=['msvs', 'ninja'])
-
- CHDIR = 'linker-flags'
- test.run_gyp('additional-options.gyp', chdir=CHDIR)
- test.build('additional-options.gyp', test.ALL, chdir=CHDIR)
-
- test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-link-aslr.py b/deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-link-aslr.py
deleted file mode 100644
index e765017d3..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-link-aslr.py
+++ /dev/null
@@ -1,35 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Make sure aslr setting is extracted properly.
-"""
-
-import TestGyp
-
-import sys
-
-if sys.platform == 'win32':
- test = TestGyp.TestGyp(formats=['msvs', 'ninja'])
-
- CHDIR = 'linker-flags'
- test.run_gyp('aslr.gyp', chdir=CHDIR)
- test.build('aslr.gyp', test.ALL, chdir=CHDIR)
-
- def HasDynamicBase(exe):
- full_path = test.built_file_path(exe, chdir=CHDIR)
- output = test.run_dumpbin('/headers', full_path)
- return ' Dynamic base' in output
-
- # Default is to be on.
- if not HasDynamicBase('test_aslr_default.exe'):
- test.fail_test()
- if HasDynamicBase('test_aslr_no.exe'):
- test.fail_test()
- if not HasDynamicBase('test_aslr_yes.exe'):
- test.fail_test()
-
- test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-link-debug-info.py b/deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-link-debug-info.py
deleted file mode 100644
index 33e8ac48b..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-link-debug-info.py
+++ /dev/null
@@ -1,26 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Make sure debug info setting is extracted properly.
-"""
-
-import TestGyp
-
-import sys
-
-if sys.platform == 'win32':
- test = TestGyp.TestGyp(formats=['msvs', 'ninja'])
-
- CHDIR = 'linker-flags'
- test.run_gyp('debug-info.gyp', chdir=CHDIR)
- test.build('debug-info.gyp', test.ALL, chdir=CHDIR)
-
- suffix = '.exe.pdb' if test.format == 'ninja' else '.pdb'
- test.built_file_must_not_exist('test_debug_off%s' % suffix, chdir=CHDIR)
- test.built_file_must_exist('test_debug_on%s' % suffix, chdir=CHDIR)
-
- test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-link-default-libs.py b/deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-link-default-libs.py
deleted file mode 100644
index 526e98cba..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-link-default-libs.py
+++ /dev/null
@@ -1,22 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Make sure we include the default libs.
-"""
-
-import TestGyp
-
-import sys
-
-if sys.platform == 'win32':
- test = TestGyp.TestGyp(formats=['msvs', 'ninja'])
-
- CHDIR = 'linker-flags'
- test.run_gyp('default-libs.gyp', chdir=CHDIR)
- test.build('default-libs.gyp', test.ALL, chdir=CHDIR)
-
- test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-link-deffile.py b/deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-link-deffile.py
deleted file mode 100644
index 94df874f8..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-link-deffile.py
+++ /dev/null
@@ -1,43 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Make sure a .def file is handled in the link.
-"""
-
-import TestGyp
-
-import sys
-
-if sys.platform == 'win32':
- test = TestGyp.TestGyp(formats=['msvs', 'ninja'])
-
- CHDIR = 'linker-flags'
-
- # Multiple .def files doesn't make any sense, should fail at generate time.
- test.run_gyp('deffile-multiple.gyp', chdir=CHDIR, stderr=None, status=1)
-
- test.run_gyp('deffile.gyp', chdir=CHDIR)
- test.build('deffile.gyp', test.ALL, chdir=CHDIR)
-
- def HasExport(binary, export):
- full_path = test.built_file_path(binary, chdir=CHDIR)
- output = test.run_dumpbin('/exports', full_path)
- return export in output
-
- # Make sure we only have the export when the .def file is in use.
-
- if HasExport('test_deffile_dll_notexported.dll', 'AnExportedFunction'):
- test.fail_test()
- if not HasExport('test_deffile_dll_ok.dll', 'AnExportedFunction'):
- test.fail_test()
-
- if HasExport('test_deffile_exe_notexported.exe', 'AnExportedFunction'):
- test.fail_test()
- if not HasExport('test_deffile_exe_ok.exe', 'AnExportedFunction'):
- test.fail_test()
-
- test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-link-delay-load-dlls.py b/deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-link-delay-load-dlls.py
deleted file mode 100644
index 3880247b4..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-link-delay-load-dlls.py
+++ /dev/null
@@ -1,35 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Make sure delay load setting is extracted properly.
-"""
-
-import TestGyp
-
-import sys
-
-if sys.platform == 'win32':
- test = TestGyp.TestGyp(formats=['msvs', 'ninja'])
-
- CHDIR = 'linker-flags'
- test.run_gyp('delay-load-dlls.gyp', chdir=CHDIR)
- test.build('delay-load-dlls.gyp', test.ALL, chdir=CHDIR)
-
- prefix = 'contains the following delay load imports:'
- shell32_look_for = prefix + '\r\n\r\n SHELL32.dll'
-
- output = test.run_dumpbin(
- '/all', test.built_file_path('test_dld_none.exe', chdir=CHDIR))
- if prefix in output:
- test.fail_test()
-
- output = test.run_dumpbin(
- '/all', test.built_file_path('test_dld_shell32.exe', chdir=CHDIR))
- if shell32_look_for not in output:
- test.fail_test()
-
- test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-link-entrypointsymbol.py b/deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-link-entrypointsymbol.py
deleted file mode 100644
index e88174a08..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-link-entrypointsymbol.py
+++ /dev/null
@@ -1,24 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Make sure entrypointsymbol setting is extracted properly.
-"""
-
-import TestGyp
-
-import sys
-
-if sys.platform == 'win32':
- test = TestGyp.TestGyp(formats=['msvs', 'ninja'])
-
- CHDIR = 'linker-flags'
- test.run_gyp('entrypointsymbol.gyp', chdir=CHDIR)
-
- test.build('entrypointsymbol.gyp', 'test_ok', chdir=CHDIR)
- test.build('entrypointsymbol.gyp', 'test_fail', chdir=CHDIR, status=1)
-
- test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-link-fixed-base.py b/deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-link-fixed-base.py
deleted file mode 100644
index 725a87028..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-link-fixed-base.py
+++ /dev/null
@@ -1,40 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Make sure fixed base setting is extracted properly.
-"""
-
-import TestGyp
-
-import sys
-
-if sys.platform == 'win32':
- test = TestGyp.TestGyp(formats=['msvs', 'ninja'])
-
- CHDIR = 'linker-flags'
- test.run_gyp('fixed-base.gyp', chdir=CHDIR)
- test.build('fixed-base.gyp', test.ALL, chdir=CHDIR)
-
- def GetHeaders(exe):
- full_path = test.built_file_path(exe, chdir=CHDIR)
- return test.run_dumpbin('/headers', full_path)
-
- # For exe, default is fixed, for dll, it's not fixed.
- if 'Relocations stripped' not in GetHeaders('test_fixed_default_exe.exe'):
- test.fail_test()
- if 'Relocations stripped' in GetHeaders('test_fixed_default_dll.dll'):
- test.fail_test()
-
- # Explicitly not fixed.
- if 'Relocations stripped' in GetHeaders('test_fixed_no.exe'):
- test.fail_test()
-
- # Explicitly fixed.
- if 'Relocations stripped' not in GetHeaders('test_fixed_yes.exe'):
- test.fail_test()
-
- test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-link-generate-manifest.py b/deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-link-generate-manifest.py
deleted file mode 100644
index e7d9bc759..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-link-generate-manifest.py
+++ /dev/null
@@ -1,44 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Make sure we generate a manifest file when linking binaries, including
-handling AdditionalManifestFiles.
-"""
-
-import TestGyp
-
-import sys
-
-if sys.platform == 'win32':
- test = TestGyp.TestGyp(formats=['msvs', 'ninja'])
-
- CHDIR = 'linker-flags'
- test.run_gyp('generate-manifest.gyp', chdir=CHDIR)
- test.build('generate-manifest.gyp', test.ALL, chdir=CHDIR)
- test.built_file_must_exist('test_manifest_exe.exe.manifest', chdir=CHDIR)
- test.built_file_must_exist('test_manifest_dll.dll.manifest', chdir=CHDIR)
-
- # Must contain the Win7 support GUID, but not the Vista one (from
- # extra2.manifest).
- extra1_manifest = test.built_file_path(
- 'test_manifest_extra1.exe.manifest', chdir=CHDIR)
- test.must_contain(extra1_manifest, '35138b9a-5d96-4fbd-8e2d-a2440225f93a')
- test.must_not_contain(extra1_manifest, 'e2011457-1546-43c5-a5fe-008deee3d3f0')
-
- # Must contain both.
- extra2_manifest = test.built_file_path(
- 'test_manifest_extra2.exe.manifest', chdir=CHDIR)
- test.must_contain(extra2_manifest, '35138b9a-5d96-4fbd-8e2d-a2440225f93a')
- test.must_contain(extra2_manifest, 'e2011457-1546-43c5-a5fe-008deee3d3f0')
-
- # Same as extra2, but using list syntax instead.
- extra_list_manifest = test.built_file_path(
- 'test_manifest_extra_list.exe.manifest', chdir=CHDIR)
- test.must_contain(extra_list_manifest, '35138b9a-5d96-4fbd-8e2d-a2440225f93a')
- test.must_contain(extra_list_manifest, 'e2011457-1546-43c5-a5fe-008deee3d3f0')
-
- test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-link-incremental.py b/deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-link-incremental.py
deleted file mode 100644
index e7184e162..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-link-incremental.py
+++ /dev/null
@@ -1,37 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Make sure incremental linking setting is extracted properly.
-"""
-
-import TestGyp
-
-import sys
-
-if sys.platform == 'win32':
- test = TestGyp.TestGyp(formats=['msvs', 'ninja'])
-
- CHDIR = 'linker-flags'
- test.run_gyp('incremental.gyp', chdir=CHDIR)
- test.build('incremental.gyp', test.ALL, chdir=CHDIR)
-
- def HasILTTables(exe):
- full_path = test.built_file_path(exe, chdir=CHDIR)
- output = test.run_dumpbin('/disasm', full_path)
- return '@ILT+' in output
-
- # Default or unset is to be on.
- if not HasILTTables('test_incremental_unset.exe'):
- test.fail_test()
- if not HasILTTables('test_incremental_default.exe'):
- test.fail_test()
- if HasILTTables('test_incremental_no.exe'):
- test.fail_test()
- if not HasILTTables('test_incremental_yes.exe'):
- test.fail_test()
-
- test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-link-library-adjust.py b/deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-link-library-adjust.py
deleted file mode 100644
index 71d1c0936..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-link-library-adjust.py
+++ /dev/null
@@ -1,21 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Make sure link_settings containing -lblah.lib is remapped to just blah.lib.
-"""
-
-import TestGyp
-
-import sys
-
-if sys.platform == 'win32':
- test = TestGyp.TestGyp(formats=['ninja'])
-
- CHDIR = 'linker-flags'
- test.run_gyp('library-adjust.gyp', chdir=CHDIR)
- test.build('library-adjust.gyp', test.ALL, chdir=CHDIR)
- test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-link-library-directories.py b/deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-link-library-directories.py
deleted file mode 100644
index 8308e14fc..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-link-library-directories.py
+++ /dev/null
@@ -1,35 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Make sure libpath is extracted properly.
-"""
-
-import TestGyp
-
-import sys
-
-if sys.platform == 'win32':
- test = TestGyp.TestGyp(formats=['msvs', 'ninja'])
-
- CHDIR = 'linker-flags'
-
- # Build subdirectory library.
- test.run_gyp('subdir/library.gyp', chdir=CHDIR)
- test.build('subdir/library.gyp', test.ALL, chdir=CHDIR)
-
- # And then try to link the main project against the library using only
- # LIBPATH to find it.
- test.run_gyp('library-directories.gyp', chdir=CHDIR)
-
- # Without additional paths specified, should fail.
- test.build('library-directories.gyp', 'test_libdirs_none', chdir=CHDIR,
- status=1)
-
- # With the additional library directory, should pass.
- test.build('library-directories.gyp', 'test_libdirs_with', chdir=CHDIR)
-
- test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-link-nodefaultlib.py b/deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-link-nodefaultlib.py
deleted file mode 100644
index f00760b88..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-link-nodefaultlib.py
+++ /dev/null
@@ -1,24 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Make sure nodefaultlib setting is extracted properly.
-"""
-
-import TestGyp
-
-import sys
-
-if sys.platform == 'win32':
- test = TestGyp.TestGyp(formats=['msvs', 'ninja'])
-
- CHDIR = 'linker-flags'
- test.run_gyp('nodefaultlib.gyp', chdir=CHDIR)
-
- test.build('nodefaultlib.gyp', 'test_ok', chdir=CHDIR)
- test.build('nodefaultlib.gyp', 'test_fail', chdir=CHDIR, status=1)
-
- test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-link-nxcompat.py b/deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-link-nxcompat.py
deleted file mode 100644
index 660074397..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-link-nxcompat.py
+++ /dev/null
@@ -1,37 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Make sure nxcompat setting is extracted properly.
-"""
-
-import TestGyp
-
-import sys
-
-if sys.platform == 'win32':
- test = TestGyp.TestGyp(formats=['msvs', 'ninja'])
-
- CHDIR = 'linker-flags'
- test.run_gyp('nxcompat.gyp', chdir=CHDIR)
- test.build('nxcompat.gyp', test.ALL, chdir=CHDIR)
-
- def GetHeaders(exe):
- return test.run_dumpbin('/headers', test.built_file_path(exe, chdir=CHDIR))
-
- # NXCOMPAT is on by default.
- if 'NX compatible' not in GetHeaders('test_nxcompat_default.exe'):
- test.fail_test()
-
- # Explicitly off, should not be marked NX compatiable.
- if 'NX compatible' in GetHeaders('test_nxcompat_no.exe'):
- test.fail_test()
-
- # Explicitly on.
- if 'NX compatible' not in GetHeaders('test_nxcompat_yes.exe'):
- test.fail_test()
-
- test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-link-opt-icf.py b/deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-link-opt-icf.py
deleted file mode 100644
index 3c48ef6eb..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-link-opt-icf.py
+++ /dev/null
@@ -1,41 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Make sure comdat folding optimization setting is extracted properly.
-"""
-
-import TestGyp
-
-import sys
-
-if sys.platform == 'win32':
- test = TestGyp.TestGyp(formats=['msvs', 'ninja'])
-
- CHDIR = 'linker-flags'
- test.run_gyp('opt-icf.gyp', chdir=CHDIR)
- test.build('opt-icf.gyp', chdir=CHDIR)
-
- # We're specifying /DEBUG so the default is to not merge identical
- # functions, so all of the similar_functions should be preserved.
- output = test.run_dumpbin(
- '/disasm', test.built_file_path('test_opticf_default.exe', chdir=CHDIR))
- if output.count('similar_function') != 6: # 3 definitions, 3 calls.
- test.fail_test()
-
- # Explicitly off, all functions preserved seperately.
- output = test.run_dumpbin(
- '/disasm', test.built_file_path('test_opticf_no.exe', chdir=CHDIR))
- if output.count('similar_function') != 6: # 3 definitions, 3 calls.
- test.fail_test()
-
- # Explicitly on, all but one removed.
- output = test.run_dumpbin(
- '/disasm', test.built_file_path('test_opticf_yes.exe', chdir=CHDIR))
- if output.count('similar_function') != 4: # 1 definition, 3 calls.
- test.fail_test()
-
- test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-link-opt-ref.py b/deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-link-opt-ref.py
deleted file mode 100644
index 586b7afcd..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-link-opt-ref.py
+++ /dev/null
@@ -1,40 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Make sure reference optimization setting is extracted properly.
-"""
-
-import TestGyp
-
-import sys
-
-if sys.platform == 'win32':
- test = TestGyp.TestGyp(formats=['msvs', 'ninja'])
-
- CHDIR = 'linker-flags'
- test.run_gyp('opt-ref.gyp', chdir=CHDIR)
- test.build('opt-ref.gyp', chdir=CHDIR)
-
- # We're specifying /DEBUG so the default is to not remove unused functions.
- output = test.run_dumpbin(
- '/disasm', test.built_file_path('test_optref_default.exe', chdir=CHDIR))
- if 'unused_function' not in output:
- test.fail_test()
-
- # Explicitly off, unused_function preserved.
- output = test.run_dumpbin(
- '/disasm', test.built_file_path('test_optref_no.exe', chdir=CHDIR))
- if 'unused_function' not in output:
- test.fail_test()
-
- # Explicitly on, should be removed.
- output = test.run_dumpbin(
- '/disasm', test.built_file_path('test_optref_yes.exe', chdir=CHDIR))
- if 'unused_function' in output:
- test.fail_test()
-
- test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-link-outputfile.py b/deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-link-outputfile.py
deleted file mode 100644
index b98cdff0f..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-link-outputfile.py
+++ /dev/null
@@ -1,28 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Make sure linker OutputFile setting is extracted properly.
-"""
-
-import TestGyp
-
-import sys
-
-if sys.platform == 'win32':
- test = TestGyp.TestGyp(formats=['msvs', 'ninja'])
-
- CHDIR = 'linker-flags'
- test.run_gyp('outputfile.gyp', chdir=CHDIR)
- test.build('outputfile.gyp', test.ALL, chdir=CHDIR)
-
- test.built_file_must_exist('blorp.exe', chdir=CHDIR)
- test.built_file_must_exist('blorp.dll', chdir=CHDIR)
- test.built_file_must_exist('subdir/blorp.exe', chdir=CHDIR)
- test.built_file_must_exist('blorp.lib', chdir=CHDIR)
- test.built_file_must_exist('subdir/blorp.lib', chdir=CHDIR)
-
- test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-link-pdb.py b/deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-link-pdb.py
deleted file mode 100644
index 38dcc7fd0..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-link-pdb.py
+++ /dev/null
@@ -1,34 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Verifies that the 'Profile' attribute in VCLinker is extracted properly.
-"""
-
-import TestGyp
-
-import os
-import sys
-
-
-if sys.platform == 'win32':
- test = TestGyp.TestGyp(formats=['msvs', 'ninja'])
- CHDIR = 'linker-flags'
- test.run_gyp('program-database.gyp', chdir=CHDIR)
- test.build('program-database.gyp', test.ALL, chdir=CHDIR)
-
- def FindFile(pdb):
- full_path = test.built_file_path(pdb, chdir=CHDIR)
- return os.path.isfile(full_path)
-
- # Verify the specified PDB is created when ProgramDatabaseFile
- # is provided.
- if not FindFile('name_outdir.pdb'):
- test.fail_test()
- if not FindFile('name_proddir.pdb'):
- test.fail_test()
-
- test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-link-profile.py b/deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-link-profile.py
deleted file mode 100644
index 34fb58abf..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-link-profile.py
+++ /dev/null
@@ -1,37 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Verifies that the 'Profile' attribute in VCLinker is extracted properly.
-"""
-
-import TestGyp
-
-import os
-import sys
-
-
-if sys.platform == 'win32':
- test = TestGyp.TestGyp(formats=['msvs', 'ninja'])
- CHDIR = 'linker-flags'
- test.run_gyp('profile.gyp', chdir=CHDIR)
- test.build('profile.gyp', test.ALL, chdir=CHDIR)
-
- def GetSummary(exe):
- full_path = test.built_file_path(exe, chdir=CHDIR)
- return test.run_dumpbin(full_path)
-
- # '.idata' section will be missing when /PROFILE is enabled.
- if '.idata' in GetSummary('test_profile_true.exe'):
- test.fail_test()
-
- if not '.idata' in GetSummary('test_profile_false.exe'):
- test.fail_test()
-
- if not '.idata' in GetSummary('test_profile_default.exe'):
- test.fail_test()
-
- test.pass_test() \ No newline at end of file
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-link-restat-importlib.py b/deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-link-restat-importlib.py
deleted file mode 100644
index 16249cc2e..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-link-restat-importlib.py
+++ /dev/null
@@ -1,39 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Make sure we don't cause unnecessary builds due to import libs appearing
-to be out of date.
-"""
-
-import TestGyp
-
-import sys
-import time
-
-if sys.platform == 'win32':
- test = TestGyp.TestGyp(formats=['msvs', 'ninja'])
-
- CHDIR = 'importlib'
- test.run_gyp('importlib.gyp', chdir=CHDIR)
- test.build('importlib.gyp', test.ALL, chdir=CHDIR)
-
- # Delay briefly so that there's time for this touch not to have the
- # timestamp as the previous run.
- test.sleep()
-
- # Touch the .cc file; the .dll will rebuild, but the import libs timestamp
- # won't be updated.
- test.touch('importlib/has-exports.cc')
- test.build('importlib.gyp', 'test_importlib', chdir=CHDIR)
-
- # This is the important part. The .dll above will relink and have an updated
- # timestamp, however the import .libs timestamp won't be updated. So, we
- # have to handle restating inputs in ninja so the final binary doesn't
- # continually relink (due to thinking the .lib isn't up to date).
- test.up_to_date('importlib.gyp', test.ALL, chdir=CHDIR)
-
- test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-link-subsystem.py b/deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-link-subsystem.py
deleted file mode 100644
index 94d2a127b..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-link-subsystem.py
+++ /dev/null
@@ -1,28 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Make sure subsystem setting is extracted properly.
-"""
-
-import TestGyp
-
-import sys
-
-if sys.platform == 'win32':
- test = TestGyp.TestGyp(formats=['msvs', 'ninja'])
-
- CHDIR = 'linker-flags'
- test.run_gyp('subsystem.gyp', chdir=CHDIR)
-
- test.build('subsystem.gyp', 'test_console_ok', chdir=CHDIR)
- test.build('subsystem.gyp', 'test_console_fail', chdir=CHDIR, status=1)
- test.build('subsystem.gyp', 'test_windows_ok', chdir=CHDIR)
- test.build('subsystem.gyp', 'test_windows_fail', chdir=CHDIR, status=1)
-
- # TODO(scottmg): There are other subsystems (WinCE, etc.) that we don't use.
-
- test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-link-uldi.py b/deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-link-uldi.py
deleted file mode 100644
index 62c5892c5..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-link-uldi.py
+++ /dev/null
@@ -1,28 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Make sure that when ULDI is on, we link .objs that make up .libs rather than
-the .libs themselves.
-"""
-
-import TestGyp
-
-import sys
-
-if sys.platform == 'win32':
- test = TestGyp.TestGyp(formats=['msvs', 'ninja'])
-
- CHDIR = 'uldi'
- test.run_gyp('uldi.gyp', chdir=CHDIR)
- # When linking with ULDI, the duplicated function from the lib will be an
- # error.
- test.build('uldi.gyp', 'final_uldi', chdir=CHDIR, status=1)
- # And when in libs, the duplicated function will be silently dropped, so the
- # build succeeds.
- test.build('uldi.gyp', 'final_no_uldi', chdir=CHDIR)
-
- test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-long-command-line.py b/deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-long-command-line.py
deleted file mode 100644
index 8f8b7a3bb..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-long-command-line.py
+++ /dev/null
@@ -1,23 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Make sure long command lines work.
-"""
-
-import TestGyp
-
-import subprocess
-import sys
-
-if sys.platform == 'win32':
- test = TestGyp.TestGyp(formats=['ninja', 'msvs'])
-
- CHDIR = 'long-command-line'
- test.run_gyp('long-command-line.gyp', chdir=CHDIR)
- test.build('long-command-line.gyp', test.ALL, chdir=CHDIR)
-
- test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-macro-projectname.py b/deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-macro-projectname.py
deleted file mode 100644
index e411cc04a..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-macro-projectname.py
+++ /dev/null
@@ -1,24 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Make sure macro expansion of $(ProjectName) is handled.
-"""
-
-import TestGyp
-
-import sys
-
-if sys.platform == 'win32':
- test = TestGyp.TestGyp(formats=['msvs', 'ninja'])
-
- CHDIR = 'vs-macros'
- test.run_gyp('projectname.gyp', chdir=CHDIR)
- test.build('projectname.gyp', test.ALL, chdir=CHDIR)
- test.built_file_must_exist('test_expansions_plus_something.exe', chdir=CHDIR)
- test.built_file_must_exist(
- 'test_with_product_name_plus_something.exe', chdir=CHDIR)
- test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-macro-vcinstalldir.py b/deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-macro-vcinstalldir.py
deleted file mode 100644
index 37396e161..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-macro-vcinstalldir.py
+++ /dev/null
@@ -1,24 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Make sure macro expansion of $(VCInstallDir) is handled, and specifically
-always / terminated for compatibility.
-"""
-
-import TestGyp
-
-import sys
-
-if sys.platform == 'win32':
- test = TestGyp.TestGyp(formats=['msvs', 'ninja'])
-
- CHDIR = 'vs-macros'
- test.run_gyp('vcinstalldir.gyp', chdir=CHDIR)
- # This fails on VS because the trailing slash escapes the trailing quote.
- test.build('vcinstalldir.gyp', 'test_slash_trailing', chdir=CHDIR, status=1)
- test.build('vcinstalldir.gyp', 'test_slash_dir', chdir=CHDIR)
- test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-macros-containing-gyp.py b/deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-macros-containing-gyp.py
deleted file mode 100644
index f6eaf63db..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-macros-containing-gyp.py
+++ /dev/null
@@ -1,21 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Handle VS macro expansion containing gyp variables.
-"""
-
-import TestGyp
-
-import sys
-
-if sys.platform == 'win32':
- test = TestGyp.TestGyp(formats=['msvs', 'ninja'])
-
- CHDIR = 'vs-macros'
- test.run_gyp('containing-gyp.gyp', chdir=CHDIR)
- test.build('containing-gyp.gyp', test.ALL, chdir=CHDIR)
- test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-macros-in-inputs-and-outputs.py b/deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-macros-in-inputs-and-outputs.py
deleted file mode 100644
index 3d6fa74e4..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-macros-in-inputs-and-outputs.py
+++ /dev/null
@@ -1,27 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Handle macro expansion in inputs and outputs of rules.
-"""
-
-import TestGyp
-
-import sys
-
-if sys.platform == 'win32':
- test = TestGyp.TestGyp(formats=['msvs', 'ninja'])
-
- CHDIR = 'vs-macros'
- test.run_gyp('input-output-macros.gyp', chdir=CHDIR)
-
- test.build('input-output-macros.gyp', 'test_expansions', chdir=CHDIR)
-
- test.built_file_must_exist('stuff.blah.something',
- content='Random data file.\nModified.',
- chdir=CHDIR)
-
- test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-midl-rules.py b/deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-midl-rules.py
deleted file mode 100644
index 86a84e165..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-midl-rules.py
+++ /dev/null
@@ -1,22 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Handle default .idl build rules.
-"""
-
-import TestGyp
-
-import sys
-
-if sys.platform == 'win32':
- test = TestGyp.TestGyp(formats=['msvs', 'ninja'])
-
- CHDIR = 'idl-rules'
- test.run_gyp('basic-idl.gyp', chdir=CHDIR)
- test.build('basic-idl.gyp', test.ALL, chdir=CHDIR)
-
- test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-quoting-commands.py b/deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-quoting-commands.py
deleted file mode 100644
index b40f99f08..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-quoting-commands.py
+++ /dev/null
@@ -1,25 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Make sure batch files run as actions. Regression test for previously missing
-trailing quote on command line. cmd typically will implicitly insert a missing
-quote, but if the command ends in a quote, it will not insert another, so the
-command can sometimes become unterminated.
-"""
-
-import TestGyp
-
-import sys
-
-if sys.platform == 'win32':
- test = TestGyp.TestGyp(formats=['msvs', 'ninja'])
-
- CHDIR = 'batch-file-action'
- test.run_gyp('batch-file-action.gyp', chdir=CHDIR)
- test.build('batch-file-action.gyp', test.ALL, chdir=CHDIR)
-
- test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-rc-build.py b/deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-rc-build.py
deleted file mode 100644
index fd2729048..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/win/gyptest-rc-build.py
+++ /dev/null
@@ -1,24 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Make sure we build and include .rc files.
-"""
-
-import TestGyp
-
-import sys
-
-if sys.platform == 'win32':
- test = TestGyp.TestGyp(formats=['msvs', 'ninja'])
-
- CHDIR = 'rc-build'
- test.run_gyp('hello.gyp', chdir=CHDIR)
- test.build('hello.gyp', test.ALL, chdir=CHDIR)
- test.up_to_date('hello.gyp', 'resource_only_dll', chdir=CHDIR)
- test.run_built_executable('with_resources', chdir=CHDIR, status=4)
-
- test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/win/idl-rules/basic-idl.gyp b/deps/npm/node_modules/node-gyp/gyp/test/win/idl-rules/basic-idl.gyp
deleted file mode 100644
index b980e527f..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/win/idl-rules/basic-idl.gyp
+++ /dev/null
@@ -1,30 +0,0 @@
-# Copyright (c) 2012 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'variables': {
- 'midl_out_dir': '<(SHARED_INTERMEDIATE_DIR)',
- },
- 'targets': [
- {
- 'target_name': 'idl_test',
- 'type': 'executable',
- 'sources': [
- 'history_indexer.idl',
- '<(midl_out_dir)/history_indexer.h',
- '<(midl_out_dir)/history_indexer_i.c',
- 'history_indexer_user.cc',
- ],
- 'include_dirs': [
- '<(midl_out_dir)',
- ],
- 'msvs_settings': {
- 'VCMIDLTool': {
- 'OutputDirectory': '<(midl_out_dir)',
- 'HeaderFileName': '<(RULE_INPUT_ROOT).h',
- },
- },
- },
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/win/idl-rules/history_indexer.idl b/deps/npm/node_modules/node-gyp/gyp/test/win/idl-rules/history_indexer.idl
deleted file mode 100644
index e866ce6d9..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/win/idl-rules/history_indexer.idl
+++ /dev/null
@@ -1,17 +0,0 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-import "oaidl.idl";
-import "ocidl.idl";
-
-[
- object,
- uuid(9C1100DD-51D4-4827-AE9F-3B8FAC4AED72),
- oleautomation,
- nonextensible,
- pointer_default(unique)
-]
-interface IChromeHistoryIndexer : IUnknown {
- HRESULT SomeFunction([in] VARIANT begin_time, [in] VARIANT end_time);
-};
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/win/idl-rules/history_indexer_user.cc b/deps/npm/node_modules/node-gyp/gyp/test/win/idl-rules/history_indexer_user.cc
deleted file mode 100644
index 071a9ffef..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/win/idl-rules/history_indexer_user.cc
+++ /dev/null
@@ -1,15 +0,0 @@
-// Copyright (c) 2012 Google Inc. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "history_indexer.h"
-
-// Use the thing in the IDL.
-int main() {
- IChromeHistoryIndexer** indexer = 0;
- IID fake_iid;
- CoCreateInstance(fake_iid, NULL, CLSCTX_INPROC,
- __uuidof(IChromeHistoryIndexer),
- reinterpret_cast<void**>(indexer));
- return 0;
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/win/importlib/has-exports.cc b/deps/npm/node_modules/node-gyp/gyp/test/win/importlib/has-exports.cc
deleted file mode 100644
index 3f62d6c60..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/win/importlib/has-exports.cc
+++ /dev/null
@@ -1,10 +0,0 @@
-// Copyright (c) 2012 Google Inc. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-__declspec(dllexport) void some_function() {
-}
-
-int main() {
- return 0;
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/win/importlib/hello.cc b/deps/npm/node_modules/node-gyp/gyp/test/win/importlib/hello.cc
deleted file mode 100644
index 66ff68c11..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/win/importlib/hello.cc
+++ /dev/null
@@ -1,9 +0,0 @@
-// Copyright (c) 2012 Google Inc. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-__declspec(dllimport) void some_function();
-
-int main() {
- some_function();
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/win/importlib/importlib.gyp b/deps/npm/node_modules/node-gyp/gyp/test/win/importlib/importlib.gyp
deleted file mode 100644
index ab15b1893..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/win/importlib/importlib.gyp
+++ /dev/null
@@ -1,30 +0,0 @@
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'targets': [
- {
- 'target_name': 'test_importlib',
- 'type': 'shared_library',
- 'msvs_settings': {
- 'VCLinkerTool': {
- 'LinkIncremental': '2',
- }
- },
- 'sources': ['has-exports.cc'],
- },
-
- {
- 'target_name': 'test_linkagainst',
- 'type': 'executable',
- 'dependencies': ['test_importlib'],
- 'msvs_settings': {
- 'VCLinkerTool': {
- 'LinkIncremental': '2',
- }
- },
- 'sources': ['hello.cc'],
- },
- ]
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/win/linker-flags/additional-deps.cc b/deps/npm/node_modules/node-gyp/gyp/test/win/linker-flags/additional-deps.cc
deleted file mode 100644
index 7dfb589d2..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/win/linker-flags/additional-deps.cc
+++ /dev/null
@@ -1,10 +0,0 @@
-// Copyright (c) 2012 Google Inc. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include <winsock2.h>
-
-int main() {
- WSAStartup(0, 0);
- return 0;
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/win/linker-flags/additional-deps.gyp b/deps/npm/node_modules/node-gyp/gyp/test/win/linker-flags/additional-deps.gyp
deleted file mode 100644
index 55afe64fb..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/win/linker-flags/additional-deps.gyp
+++ /dev/null
@@ -1,30 +0,0 @@
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'targets': [
- {
- 'target_name': 'test_deps_none',
- 'type': 'executable',
- 'msvs_settings': {
- 'VCLinkerTool': {
- }
- },
- 'sources': ['hello.cc'],
- },
- {
- 'target_name': 'test_deps_few',
- 'type': 'executable',
- 'msvs_settings': {
- 'VCLinkerTool': {
- 'AdditionalDependencies': [
- 'wininet.lib',
- 'ws2_32.lib',
- ]
- }
- },
- 'sources': ['additional-deps.cc'],
- },
- ]
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/win/linker-flags/additional-options.gyp b/deps/npm/node_modules/node-gyp/gyp/test/win/linker-flags/additional-options.gyp
deleted file mode 100644
index cab3994cd..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/win/linker-flags/additional-options.gyp
+++ /dev/null
@@ -1,29 +0,0 @@
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'targets': [
- {
- 'target_name': 'test_additional_none',
- 'type': 'executable',
- 'msvs_settings': {
- 'VCLinkerTool': {
- }
- },
- 'sources': ['hello.cc'],
- },
- {
- 'target_name': 'test_additional_few',
- 'type': 'executable',
- 'msvs_settings': {
- 'VCLinkerTool': {
- 'AdditionalOptions': [
- '/dynamicbase:no',
- ]
- }
- },
- 'sources': ['hello.cc'],
- },
- ]
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/win/linker-flags/aslr.gyp b/deps/npm/node_modules/node-gyp/gyp/test/win/linker-flags/aslr.gyp
deleted file mode 100644
index b3aefd50b..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/win/linker-flags/aslr.gyp
+++ /dev/null
@@ -1,35 +0,0 @@
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'targets': [
- {
- 'target_name': 'test_aslr_default',
- 'type': 'executable',
- 'msvs_settings': {
- },
- 'sources': ['hello.cc'],
- },
- {
- 'target_name': 'test_aslr_no',
- 'type': 'executable',
- 'msvs_settings': {
- 'VCLinkerTool': {
- 'RandomizedBaseAddress': '1',
- },
- },
- 'sources': ['hello.cc'],
- },
- {
- 'target_name': 'test_aslr_yes',
- 'type': 'executable',
- 'msvs_settings': {
- 'VCLinkerTool': {
- 'RandomizedBaseAddress': '2',
- }
- },
- 'sources': ['hello.cc'],
- },
- ]
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/win/linker-flags/debug-info.gyp b/deps/npm/node_modules/node-gyp/gyp/test/win/linker-flags/debug-info.gyp
deleted file mode 100644
index d47d0ecce..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/win/linker-flags/debug-info.gyp
+++ /dev/null
@@ -1,28 +0,0 @@
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'targets': [
- {
- 'target_name': 'test_debug_off',
- 'type': 'executable',
- 'msvs_settings': {
- 'VCLinkerTool': {
- 'GenerateDebugInformation': 'false'
- },
- },
- 'sources': ['hello.cc'],
- },
- {
- 'target_name': 'test_debug_on',
- 'type': 'executable',
- 'msvs_settings': {
- 'VCLinkerTool': {
- 'GenerateDebugInformation': 'true'
- },
- },
- 'sources': ['hello.cc'],
- },
- ]
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/win/linker-flags/default-libs.cc b/deps/npm/node_modules/node-gyp/gyp/test/win/linker-flags/default-libs.cc
deleted file mode 100644
index 2c78cccba..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/win/linker-flags/default-libs.cc
+++ /dev/null
@@ -1,30 +0,0 @@
-// Copyright (c) 2012 Google Inc. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include <windows.h>
-#include <delayimp.h>
-#include <odbcinst.h>
-#include <shlobj.h>
-#include <sql.h>
-#include <stdio.h>
-
-// Reference something in each of the default-linked libraries to cause a link
-// error if one is not correctly included.
-
-extern "C" void* __puiHead; // DelayImp
-
-int main() {
- CopyFile(0, 0, 0); // kernel32
- MessageBox(0, 0, 0, 0); // user32
- CreateDC(0, 0, 0, 0); // gdi32
- AddPrinter(0, 0, 0); // winspool
- FindText(0); // comdlg32
- ClearEventLog(0, 0); // advapi32
- SHGetSettings(0, 0); // shell32
- OleFlushClipboard(); // ole32
- VarAdd(0, 0, 0); // oleaut32
- printf("%p", &CLSID_FileOpenDialog); // uuid
- SQLAllocHandle(0, 0, 0); // odbc32
- return 0;
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/win/linker-flags/default-libs.gyp b/deps/npm/node_modules/node-gyp/gyp/test/win/linker-flags/default-libs.gyp
deleted file mode 100644
index dfceaebfb..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/win/linker-flags/default-libs.gyp
+++ /dev/null
@@ -1,13 +0,0 @@
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'targets': [
- {
- 'target_name': 'test_default',
- 'type': 'executable',
- 'sources': ['default-libs.cc'],
- },
- ]
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/win/linker-flags/deffile-multiple.gyp b/deps/npm/node_modules/node-gyp/gyp/test/win/linker-flags/deffile-multiple.gyp
deleted file mode 100644
index c74a9af20..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/win/linker-flags/deffile-multiple.gyp
+++ /dev/null
@@ -1,17 +0,0 @@
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'targets': [
- {
- 'target_name': 'test_deffile_multiple_fail',
- 'type': 'shared_library',
- 'sources': [
- 'deffile.cc',
- 'deffile.def',
- 'deffile2.def',
- ],
- },
- ]
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/win/linker-flags/deffile.cc b/deps/npm/node_modules/node-gyp/gyp/test/win/linker-flags/deffile.cc
deleted file mode 100644
index bf58c6126..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/win/linker-flags/deffile.cc
+++ /dev/null
@@ -1,10 +0,0 @@
-// Copyright (c) 2012 Google Inc. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-void AnExportedFunction() {
-}
-
-int main() {
- return 0;
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/win/linker-flags/deffile.def b/deps/npm/node_modules/node-gyp/gyp/test/win/linker-flags/deffile.def
deleted file mode 100644
index ba9d399bd..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/win/linker-flags/deffile.def
+++ /dev/null
@@ -1,8 +0,0 @@
-; Copyright (c) 2012 Google Inc. All rights reserved.
-; Use of this source code is governed by a BSD-style license that can be
-; found in the LICENSE file.
-
-LIBRARY test_deffile_ok
-
-EXPORTS
- AnExportedFunction
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/win/linker-flags/deffile.gyp b/deps/npm/node_modules/node-gyp/gyp/test/win/linker-flags/deffile.gyp
deleted file mode 100644
index 7b241d5e3..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/win/linker-flags/deffile.gyp
+++ /dev/null
@@ -1,38 +0,0 @@
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'targets': [
- {
- 'target_name': 'test_deffile_dll_ok',
- 'type': 'shared_library',
- 'sources': [
- 'deffile.cc',
- 'deffile.def',
- ],
- },
- {
- 'target_name': 'test_deffile_dll_notexported',
- 'type': 'shared_library',
- 'sources': [
- 'deffile.cc',
- ],
- },
- {
- 'target_name': 'test_deffile_exe_ok',
- 'type': 'executable',
- 'sources': [
- 'deffile.cc',
- 'deffile.def',
- ],
- },
- {
- 'target_name': 'test_deffile_exe_notexported',
- 'type': 'executable',
- 'sources': [
- 'deffile.cc',
- ],
- },
- ]
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/win/linker-flags/delay-load-dlls.gyp b/deps/npm/node_modules/node-gyp/gyp/test/win/linker-flags/delay-load-dlls.gyp
deleted file mode 100644
index 93ca311c4..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/win/linker-flags/delay-load-dlls.gyp
+++ /dev/null
@@ -1,27 +0,0 @@
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'targets': [
- {
- 'target_name': 'test_dld_none',
- 'type': 'executable',
- 'msvs_settings': {
- 'VCLinkerTool': {
- }
- },
- 'sources': ['delay-load.cc'],
- },
- {
- 'target_name': 'test_dld_shell32',
- 'type': 'executable',
- 'msvs_settings': {
- 'VCLinkerTool': {
- 'DelayLoadDLLs': ['shell32.dll']
- }
- },
- 'sources': ['delay-load.cc'],
- },
- ]
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/win/linker-flags/delay-load.cc b/deps/npm/node_modules/node-gyp/gyp/test/win/linker-flags/delay-load.cc
deleted file mode 100644
index 2be34aa87..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/win/linker-flags/delay-load.cc
+++ /dev/null
@@ -1,10 +0,0 @@
-// Copyright (c) 2012 Google Inc. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include <shlobj.h>
-
-int main() {
- SHCreateDirectory(0, 0);
- return 0;
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/win/linker-flags/entrypointsymbol.cc b/deps/npm/node_modules/node-gyp/gyp/test/win/linker-flags/entrypointsymbol.cc
deleted file mode 100644
index b567bc87b..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/win/linker-flags/entrypointsymbol.cc
+++ /dev/null
@@ -1,13 +0,0 @@
-// Copyright (c) 2012 Google Inc. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// The entry point specified by link.exe /ENTRY option.
-extern "C" void MainEntryPoint() {
-}
-
-// Still needed because the linker checks for existence of one of main, wmain,
-// WinMain, or wMain to offer informative diagnositics.
-int main() {
- return 0;
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/win/linker-flags/entrypointsymbol.gyp b/deps/npm/node_modules/node-gyp/gyp/test/win/linker-flags/entrypointsymbol.gyp
deleted file mode 100644
index 7f2c14252..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/win/linker-flags/entrypointsymbol.gyp
+++ /dev/null
@@ -1,28 +0,0 @@
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'targets': [
- {
- 'target_name': 'test_ok',
- 'type': 'executable',
- 'msvs_settings': {
- 'VCLinkerTool': {
- 'EntryPointSymbol': 'MainEntryPoint',
- }
- },
- 'sources': ['entrypointsymbol.cc'],
- },
- {
- 'target_name': 'test_fail',
- 'type': 'executable',
- 'msvs_settings': {
- 'VCLinkerTool': {
- 'EntryPointSymbol': 'MainEntryPoint',
- }
- },
- 'sources': ['hello.cc'],
- },
- ]
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/win/linker-flags/extra.manifest b/deps/npm/node_modules/node-gyp/gyp/test/win/linker-flags/extra.manifest
deleted file mode 100644
index 2e436dc25..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/win/linker-flags/extra.manifest
+++ /dev/null
@@ -1,11 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
-<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
-
- <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
- <application>
- <!--This Id value indicates the application supports Windows 7 functionality-->
- <supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>
- </application>
- </compatibility>
-
-</assembly>
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/win/linker-flags/extra2.manifest b/deps/npm/node_modules/node-gyp/gyp/test/win/linker-flags/extra2.manifest
deleted file mode 100644
index bfb570ca5..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/win/linker-flags/extra2.manifest
+++ /dev/null
@@ -1,11 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
-<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
-
- <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
- <application>
- <!--This Id value indicates the application supports Windows Vista functionality -->
- <supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/>
- </application>
- </compatibility>
-
-</assembly>
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/win/linker-flags/fixed-base.gyp b/deps/npm/node_modules/node-gyp/gyp/test/win/linker-flags/fixed-base.gyp
deleted file mode 100644
index cc2982eb2..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/win/linker-flags/fixed-base.gyp
+++ /dev/null
@@ -1,52 +0,0 @@
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'targets': [
- # Disable DYNAMICBASE for these tests because it implies/doesn't imply
- # FIXED in certain cases so it complicates the test for FIXED.
- {
- 'target_name': 'test_fixed_default_exe',
- 'type': 'executable',
- 'msvs_settings': {
- 'VCLinkerTool': {
- 'RandomizedBaseAddress': '1',
- },
- },
- 'sources': ['hello.cc'],
- },
- {
- 'target_name': 'test_fixed_default_dll',
- 'type': 'shared_library',
- 'msvs_settings': {
- 'VCLinkerTool': {
- 'RandomizedBaseAddress': '1',
- },
- },
- 'sources': ['hello.cc'],
- },
- {
- 'target_name': 'test_fixed_no',
- 'type': 'executable',
- 'msvs_settings': {
- 'VCLinkerTool': {
- 'FixedBaseAddress': '1',
- 'RandomizedBaseAddress': '1',
- }
- },
- 'sources': ['hello.cc'],
- },
- {
- 'target_name': 'test_fixed_yes',
- 'type': 'executable',
- 'msvs_settings': {
- 'VCLinkerTool': {
- 'FixedBaseAddress': '2',
- 'RandomizedBaseAddress': '1',
- },
- },
- 'sources': ['hello.cc'],
- },
- ]
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/win/linker-flags/generate-manifest.gyp b/deps/npm/node_modules/node-gyp/gyp/test/win/linker-flags/generate-manifest.gyp
deleted file mode 100644
index fe5ee7413..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/win/linker-flags/generate-manifest.gyp
+++ /dev/null
@@ -1,64 +0,0 @@
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'targets': [
- {
- 'target_name': 'test_manifest_exe',
- 'type': 'executable',
- 'sources': ['hello.cc'],
- 'msvs_settings': {
- 'VCManifestTool': {
- 'EmbedManifest': 'false',
- }
- },
- },
- {
- 'target_name': 'test_manifest_dll',
- 'type': 'shared_library',
- 'sources': ['hello.cc'],
- 'msvs_settings': {
- 'VCManifestTool': {
- 'EmbedManifest': 'false',
- }
- },
- },
- {
- 'target_name': 'test_manifest_extra1',
- 'type': 'executable',
- 'sources': ['hello.cc'],
- 'msvs_settings': {
- 'VCManifestTool': {
- 'EmbedManifest': 'false',
- 'AdditionalManifestFiles': 'extra.manifest',
- }
- },
- },
- {
- 'target_name': 'test_manifest_extra2',
- 'type': 'executable',
- 'sources': ['hello.cc'],
- 'msvs_settings': {
- 'VCManifestTool': {
- 'EmbedManifest': 'false',
- 'AdditionalManifestFiles': 'extra.manifest;extra2.manifest',
- }
- },
- },
- {
- 'target_name': 'test_manifest_extra_list',
- 'type': 'executable',
- 'sources': ['hello.cc'],
- 'msvs_settings': {
- 'VCManifestTool': {
- 'EmbedManifest': 'false',
- 'AdditionalManifestFiles': [
- 'extra.manifest',
- 'extra2.manifest'
- ],
- }
- },
- },
- ]
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/win/linker-flags/hello.cc b/deps/npm/node_modules/node-gyp/gyp/test/win/linker-flags/hello.cc
deleted file mode 100644
index 1711567ef..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/win/linker-flags/hello.cc
+++ /dev/null
@@ -1,7 +0,0 @@
-// Copyright (c) 2012 Google Inc. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-int main() {
- return 0;
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/win/linker-flags/incremental.gyp b/deps/npm/node_modules/node-gyp/gyp/test/win/linker-flags/incremental.gyp
deleted file mode 100644
index 59f310325..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/win/linker-flags/incremental.gyp
+++ /dev/null
@@ -1,65 +0,0 @@
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'targets': [
- # Turn on debug information so the incremental linking tables have a
- # visible symbolic name in the disassembly.
- {
- 'target_name': 'test_incremental_unset',
- 'type': 'executable',
- 'msvs_settings': {
- 'VCCLCompilerTool': {
- 'DebugInformationFormat': '3',
- },
- 'VCLinkerTool': {
- 'GenerateDebugInformation': 'true',
- },
- },
- 'sources': ['hello.cc'],
- },
- {
- 'target_name': 'test_incremental_default',
- 'type': 'executable',
- 'msvs_settings': {
- 'VCCLCompilerTool': {
- 'DebugInformationFormat': '3',
- },
- 'VCLinkerTool': {
- 'GenerateDebugInformation': 'true',
- 'LinkIncremental': '0',
- },
- },
- 'sources': ['hello.cc'],
- },
- {
- 'target_name': 'test_incremental_no',
- 'type': 'executable',
- 'msvs_settings': {
- 'VCCLCompilerTool': {
- 'DebugInformationFormat': '3',
- },
- 'VCLinkerTool': {
- 'GenerateDebugInformation': 'true',
- 'LinkIncremental': '1',
- },
- },
- 'sources': ['hello.cc'],
- },
- {
- 'target_name': 'test_incremental_yes',
- 'type': 'executable',
- 'msvs_settings': {
- 'VCCLCompilerTool': {
- 'DebugInformationFormat': '3',
- },
- 'VCLinkerTool': {
- 'GenerateDebugInformation': 'true',
- 'LinkIncremental': '2',
- }
- },
- 'sources': ['hello.cc'],
- },
- ]
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/win/linker-flags/library-adjust.cc b/deps/npm/node_modules/node-gyp/gyp/test/win/linker-flags/library-adjust.cc
deleted file mode 100644
index 7dfb589d2..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/win/linker-flags/library-adjust.cc
+++ /dev/null
@@ -1,10 +0,0 @@
-// Copyright (c) 2012 Google Inc. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include <winsock2.h>
-
-int main() {
- WSAStartup(0, 0);
- return 0;
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/win/linker-flags/library-adjust.gyp b/deps/npm/node_modules/node-gyp/gyp/test/win/linker-flags/library-adjust.gyp
deleted file mode 100644
index 10e9996f5..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/win/linker-flags/library-adjust.gyp
+++ /dev/null
@@ -1,16 +0,0 @@
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'targets': [
- {
- 'target_name': 'test_adjust',
- 'type': 'executable',
- 'libraries': [
- '-lws2_32.lib'
- ],
- 'sources': ['library-adjust.cc'],
- },
- ]
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/win/linker-flags/library-directories-define.cc b/deps/npm/node_modules/node-gyp/gyp/test/win/linker-flags/library-directories-define.cc
deleted file mode 100644
index 211ef062c..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/win/linker-flags/library-directories-define.cc
+++ /dev/null
@@ -1,7 +0,0 @@
-// Copyright (c) 2012 Google Inc. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-int library_function() {
- return 0;
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/win/linker-flags/library-directories-reference.cc b/deps/npm/node_modules/node-gyp/gyp/test/win/linker-flags/library-directories-reference.cc
deleted file mode 100644
index 335097839..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/win/linker-flags/library-directories-reference.cc
+++ /dev/null
@@ -1,10 +0,0 @@
-// Copyright (c) 2012 Google Inc. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-extern int library_function();
-
-int main() {
- library_function();
- return 0;
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/win/linker-flags/library-directories.gyp b/deps/npm/node_modules/node-gyp/gyp/test/win/linker-flags/library-directories.gyp
deleted file mode 100644
index 25395d6c8..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/win/linker-flags/library-directories.gyp
+++ /dev/null
@@ -1,42 +0,0 @@
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'targets': [
- {
- 'target_name': 'test_libdirs_none',
- 'type': 'executable',
- 'msvs_settings': {
- 'VCLinkerTool': {
- 'AdditionalDependencies': [
- 'test_lib.lib',
- ],
- },
- },
- 'sources': ['library-directories-reference.cc'],
- },
- {
- 'target_name': 'test_libdirs_with',
- 'type': 'executable',
- 'msvs_settings': {
- 'VCLinkerTool': {
- # NOTE: Don't use this for general dependencies between gyp
- # libraries (use 'dependencies' instead). This is done here only for
- # testing.
- #
- # This setting should only be used to depend on third party prebuilt
- # libraries that are stored as binaries at a known location.
- 'AdditionalLibraryDirectories': [
- '<(DEPTH)/out/Default/obj/subdir', # ninja style
- '<(DEPTH)/subdir/Default/lib', # msvs style
- ],
- 'AdditionalDependencies': [
- 'test_lib.lib',
- ],
- },
- },
- 'sources': ['library-directories-reference.cc'],
- },
- ]
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/win/linker-flags/nodefaultlib.cc b/deps/npm/node_modules/node-gyp/gyp/test/win/linker-flags/nodefaultlib.cc
deleted file mode 100644
index 24b6eca43..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/win/linker-flags/nodefaultlib.cc
+++ /dev/null
@@ -1,13 +0,0 @@
-// Copyright (c) 2012 Google Inc. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Include entry point function that's excluded by removing C runtime libraries.
-extern "C" void mainCRTStartup() {
-}
-
-// Still needed because the linker checks for existence of one of main, wmain,
-// WinMain, or wMain to offer informative diagnositics.
-int main() {
- return 0;
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/win/linker-flags/nodefaultlib.gyp b/deps/npm/node_modules/node-gyp/gyp/test/win/linker-flags/nodefaultlib.gyp
deleted file mode 100644
index 4fb452a18..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/win/linker-flags/nodefaultlib.gyp
+++ /dev/null
@@ -1,30 +0,0 @@
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'targets': [
- {
- 'target_name': 'test_ok',
- 'type': 'executable',
- 'msvs_settings': {
- 'VCLinkerTool': {
- 'IgnoreDefaultLibraryNames':
- ['libcmtd.lib', 'libcmt.lib', 'msvcrt.lib', 'msvcrtd.lib'],
- }
- },
- 'sources': ['nodefaultlib.cc'],
- },
- {
- 'target_name': 'test_fail',
- 'type': 'executable',
- 'msvs_settings': {
- 'VCLinkerTool': {
- 'IgnoreDefaultLibraryNames':
- ['libcmtd.lib', 'libcmt.lib', 'msvcrt.lib', 'msvcrtd.lib'],
- }
- },
- 'sources': ['hello.cc'],
- },
- ]
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/win/linker-flags/nxcompat.gyp b/deps/npm/node_modules/node-gyp/gyp/test/win/linker-flags/nxcompat.gyp
deleted file mode 100644
index fa4118cbd..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/win/linker-flags/nxcompat.gyp
+++ /dev/null
@@ -1,35 +0,0 @@
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'targets': [
- {
- 'target_name': 'test_nxcompat_default',
- 'type': 'executable',
- 'msvs_settings': {
- },
- 'sources': ['hello.cc'],
- },
- {
- 'target_name': 'test_nxcompat_no',
- 'type': 'executable',
- 'msvs_settings': {
- 'VCLinkerTool': {
- 'DataExecutionPrevention': '1',
- }
- },
- 'sources': ['hello.cc'],
- },
- {
- 'target_name': 'test_nxcompat_yes',
- 'type': 'executable',
- 'msvs_settings': {
- 'VCLinkerTool': {
- 'DataExecutionPrevention': '2',
- },
- },
- 'sources': ['hello.cc'],
- },
- ]
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/win/linker-flags/opt-icf.cc b/deps/npm/node_modules/node-gyp/gyp/test/win/linker-flags/opt-icf.cc
deleted file mode 100644
index 1f12156b7..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/win/linker-flags/opt-icf.cc
+++ /dev/null
@@ -1,29 +0,0 @@
-// Copyright (c) 2012 Google Inc. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-void similar_function0(char* x) {
- while (*x) {
- ++x;
- }
-}
-
-void similar_function1(char* p) {
- while (*p) {
- ++p;
- }
-}
-
-void similar_function2(char* q) {
- while (*q) {
- ++q;
- }
-}
-
-int main() {
- char* x = "hello";
- similar_function0(x);
- similar_function1(x);
- similar_function2(x);
- return 0;
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/win/linker-flags/opt-icf.gyp b/deps/npm/node_modules/node-gyp/gyp/test/win/linker-flags/opt-icf.gyp
deleted file mode 100644
index effe8021c..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/win/linker-flags/opt-icf.gyp
+++ /dev/null
@@ -1,63 +0,0 @@
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'targets': [
- # Have to turn on function level linking here to get the function packaged
- # as a COMDAT so that it's eligible for merging. Also turn on debug
- # information so that the symbol names for the code appear in the dump.
- # Finally, specify non-incremental linking so that there's not a bunch of
- # extra "similar_function"s in the output (the ILT jump table).
- {
- 'target_name': 'test_opticf_default',
- 'type': 'executable',
- 'msvs_settings': {
- 'VCCLCompilerTool': {
- 'EnableFunctionLevelLinking': 'true',
- 'DebugInformationFormat': '3',
- 'Optimization': '0',
- },
- 'VCLinkerTool': {
- 'GenerateDebugInformation': 'true',
- 'LinkIncremental': '1',
- },
- },
- 'sources': ['opt-icf.cc'],
- },
- {
- 'target_name': 'test_opticf_no',
- 'type': 'executable',
- 'msvs_settings': {
- 'VCCLCompilerTool': {
- 'EnableFunctionLevelLinking': 'true',
- 'DebugInformationFormat': '3',
- 'Optimization': '0',
- },
- 'VCLinkerTool': {
- 'GenerateDebugInformation': 'true',
- 'EnableCOMDATFolding': '1',
- 'LinkIncremental': '1',
- },
- },
- 'sources': ['opt-icf.cc'],
- },
- {
- 'target_name': 'test_opticf_yes',
- 'type': 'executable',
- 'msvs_settings': {
- 'VCCLCompilerTool': {
- 'EnableFunctionLevelLinking': 'true',
- 'DebugInformationFormat': '3',
- 'Optimization': '0',
- },
- 'VCLinkerTool': {
- 'GenerateDebugInformation': 'true',
- 'EnableCOMDATFolding': '2',
- 'LinkIncremental': '1',
- },
- },
- 'sources': ['opt-icf.cc'],
- },
- ]
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/win/linker-flags/opt-ref.cc b/deps/npm/node_modules/node-gyp/gyp/test/win/linker-flags/opt-ref.cc
deleted file mode 100644
index afaa328a5..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/win/linker-flags/opt-ref.cc
+++ /dev/null
@@ -1,11 +0,0 @@
-// Copyright (c) 2012 Google Inc. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-int unused_function() {
- return 0;
-}
-
-int main() {
- return 0;
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/win/linker-flags/opt-ref.gyp b/deps/npm/node_modules/node-gyp/gyp/test/win/linker-flags/opt-ref.gyp
deleted file mode 100644
index 69d0281a0..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/win/linker-flags/opt-ref.gyp
+++ /dev/null
@@ -1,56 +0,0 @@
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'targets': [
- # Have to turn on function level linking here to get the function packaged
- # as a COMDAT so that it's eligible for optimizing away. Also turn on
- # debug information so that the symbol names for the code appear in the
- # dump (so we can verify if they are included in the final exe).
- {
- 'target_name': 'test_optref_default',
- 'type': 'executable',
- 'msvs_settings': {
- 'VCCLCompilerTool': {
- 'EnableFunctionLevelLinking': 'true',
- 'DebugInformationFormat': '3',
- },
- 'VCLinkerTool': {
- 'GenerateDebugInformation': 'true',
- },
- },
- 'sources': ['opt-ref.cc'],
- },
- {
- 'target_name': 'test_optref_no',
- 'type': 'executable',
- 'msvs_settings': {
- 'VCCLCompilerTool': {
- 'EnableFunctionLevelLinking': 'true',
- 'DebugInformationFormat': '3',
- },
- 'VCLinkerTool': {
- 'GenerateDebugInformation': 'true',
- 'OptimizeReferences': '1',
- },
- },
- 'sources': ['opt-ref.cc'],
- },
- {
- 'target_name': 'test_optref_yes',
- 'type': 'executable',
- 'msvs_settings': {
- 'VCCLCompilerTool': {
- 'EnableFunctionLevelLinking': 'true',
- 'DebugInformationFormat': '3',
- },
- 'VCLinkerTool': {
- 'GenerateDebugInformation': 'true',
- 'OptimizeReferences': '2',
- },
- },
- 'sources': ['opt-ref.cc'],
- },
- ]
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/win/linker-flags/outputfile.gyp b/deps/npm/node_modules/node-gyp/gyp/test/win/linker-flags/outputfile.gyp
deleted file mode 100644
index 1022ec2e2..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/win/linker-flags/outputfile.gyp
+++ /dev/null
@@ -1,58 +0,0 @@
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'targets': [
- {
- 'target_name': 'test_output_exe',
- 'type': 'executable',
- 'msvs_settings': {
- 'VCLinkerTool': {
- 'OutputFile': '$(OutDir)\\blorp.exe'
- },
- },
- 'sources': ['hello.cc'],
- },
- {
- 'target_name': 'test_output_exe2',
- 'type': 'executable',
- 'msvs_settings': {
- 'VCLinkerTool': {
- 'OutputFile': '$(OutDir)\\subdir\\blorp.exe'
- },
- },
- 'sources': ['hello.cc'],
- },
- {
- 'target_name': 'test_output_dll',
- 'type': 'shared_library',
- 'msvs_settings': {
- 'VCLinkerTool': {
- 'OutputFile': '$(OutDir)\\blorp.dll'
- },
- },
- 'sources': ['hello.cc'],
- },
- {
- 'target_name': 'test_output_lib',
- 'type': 'static_library',
- 'msvs_settings': {
- 'VCLibrarianTool': {
- 'OutputFile': '$(OutDir)\\blorp.lib'
- },
- },
- 'sources': ['hello.cc'],
- },
- {
- 'target_name': 'test_output_lib2',
- 'type': 'static_library',
- 'msvs_settings': {
- 'VCLibrarianTool': {
- 'OutputFile': '$(OutDir)\\subdir\\blorp.lib'
- },
- },
- 'sources': ['hello.cc'],
- },
- ]
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/win/linker-flags/profile.gyp b/deps/npm/node_modules/node-gyp/gyp/test/win/linker-flags/profile.gyp
deleted file mode 100644
index d60a700fb..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/win/linker-flags/profile.gyp
+++ /dev/null
@@ -1,50 +0,0 @@
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'targets': [
- # Verify that 'Profile' option correctly makes it to LINK steup in Ninja
- {
- 'target_name': 'test_profile_true',
- 'type': 'executable',
- 'sources': ['hello.cc'],
- 'msvs_settings': {
- 'VCCLCompilerTool': {
- 'DebugInformationFormat': '3'
- },
- 'VCLinkerTool': {
- 'Profile': 'true',
- 'GenerateDebugInformation': 'true',
- },
- },
- },
- {
- 'target_name': 'test_profile_false',
- 'type': 'executable',
- 'sources': ['hello.cc'],
- 'msvs_settings': {
- 'VCCLCompilerTool': {
- 'DebugInformationFormat': '3'
- },
- 'VCLinkerTool': {
- 'Profile': 'false',
- 'GenerateDebugInformation': 'true',
- },
- },
- },
- {
- 'target_name': 'test_profile_default',
- 'type': 'executable',
- 'sources': ['hello.cc'],
- 'msvs_settings': {
- 'VCCLCompilerTool': {
- 'DebugInformationFormat': '3'
- },
- 'VCLinkerTool': {
- 'GenerateDebugInformation': 'true',
- },
- },
- },
- ]
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/win/linker-flags/program-database.gyp b/deps/npm/node_modules/node-gyp/gyp/test/win/linker-flags/program-database.gyp
deleted file mode 100644
index b822a8be4..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/win/linker-flags/program-database.gyp
+++ /dev/null
@@ -1,39 +0,0 @@
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'targets': [
- # Verify that 'ProgramDataBase' option correctly makes it to LINK step in Ninja
- {
- # Verify that VC macros and windows paths work correctly
- 'target_name': 'test_pdb_outdir',
- 'type': 'executable',
- 'sources': ['hello.cc'],
- 'msvs_settings': {
- 'VCCLCompilerTool': {
- 'DebugInformationFormat': '3'
- },
- 'VCLinkerTool': {
- 'GenerateDebugInformation': 'true',
- 'ProgramDatabaseFile': '$(OutDir)\\name_outdir.pdb',
- },
- },
- },
- {
- # Verify that GYP macros and POSIX paths work correctly
- 'target_name': 'test_pdb_proddir',
- 'type': 'executable',
- 'sources': ['hello.cc'],
- 'msvs_settings': {
- 'VCCLCompilerTool': {
- 'DebugInformationFormat': '3'
- },
- 'VCLinkerTool': {
- 'GenerateDebugInformation': 'true',
- 'ProgramDatabaseFile': '<(PRODUCT_DIR)/name_proddir.pdb',
- },
- },
- },
- ]
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/win/linker-flags/subdir/library.gyp b/deps/npm/node_modules/node-gyp/gyp/test/win/linker-flags/subdir/library.gyp
deleted file mode 100644
index 519577f0d..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/win/linker-flags/subdir/library.gyp
+++ /dev/null
@@ -1,13 +0,0 @@
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'targets': [
- {
- 'target_name': 'test_lib',
- 'type': 'static_library',
- 'sources': ['../library-directories-define.cc'],
- },
- ]
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/win/linker-flags/subsystem-windows.cc b/deps/npm/node_modules/node-gyp/gyp/test/win/linker-flags/subsystem-windows.cc
deleted file mode 100644
index ac99da808..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/win/linker-flags/subsystem-windows.cc
+++ /dev/null
@@ -1,9 +0,0 @@
-// Copyright (c) 2012 Google Inc. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include <windows.h>
-
-int CALLBACK WinMain(HINSTANCE, HINSTANCE, LPSTR, int) {
- return 0;
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/win/linker-flags/subsystem.gyp b/deps/npm/node_modules/node-gyp/gyp/test/win/linker-flags/subsystem.gyp
deleted file mode 100644
index ec68e805c..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/win/linker-flags/subsystem.gyp
+++ /dev/null
@@ -1,48 +0,0 @@
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'targets': [
- {
- 'target_name': 'test_console_ok',
- 'type': 'executable',
- 'msvs_settings': {
- 'VCLinkerTool': {
- 'SubSystem': '1'
- }
- },
- 'sources': ['hello.cc'],
- },
- {
- 'target_name': 'test_console_fail',
- 'type': 'executable',
- 'msvs_settings': {
- 'VCLinkerTool': {
- 'SubSystem': '1'
- }
- },
- 'sources': ['subsystem-windows.cc'],
- },
- {
- 'target_name': 'test_windows_ok',
- 'type': 'executable',
- 'msvs_settings': {
- 'VCLinkerTool': {
- 'SubSystem': '2'
- }
- },
- 'sources': ['subsystem-windows.cc'],
- },
- {
- 'target_name': 'test_windows_fail',
- 'type': 'executable',
- 'msvs_settings': {
- 'VCLinkerTool': {
- 'SubSystem': '2'
- }
- },
- 'sources': ['hello.cc'],
- },
- ]
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/win/long-command-line/function.cc b/deps/npm/node_modules/node-gyp/gyp/test/win/long-command-line/function.cc
deleted file mode 100644
index af44b2cab..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/win/long-command-line/function.cc
+++ /dev/null
@@ -1,7 +0,0 @@
-// Copyright (c) 2012 Google Inc. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-int func() {
- return 0;
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/win/long-command-line/hello.cc b/deps/npm/node_modules/node-gyp/gyp/test/win/long-command-line/hello.cc
deleted file mode 100644
index 1711567ef..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/win/long-command-line/hello.cc
+++ /dev/null
@@ -1,7 +0,0 @@
-// Copyright (c) 2012 Google Inc. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-int main() {
- return 0;
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/win/long-command-line/long-command-line.gyp b/deps/npm/node_modules/node-gyp/gyp/test/win/long-command-line/long-command-line.gyp
deleted file mode 100644
index 964c94fa9..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/win/long-command-line/long-command-line.gyp
+++ /dev/null
@@ -1,54 +0,0 @@
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'targets': [
- {
- 'target_name': 'longexe',
- 'type': 'executable',
- 'msvs_settings': {
- # Use this as a simple way to get a long command.
- 'VCCLCompilerTool': {
- 'AdditionalOptions': '/nologo ' * 8000,
- },
- 'VCLinkerTool': {
- 'AdditionalOptions': '/nologo ' * 8000,
- },
- },
- 'sources': [
- 'hello.cc',
- ],
- },
- {
- 'target_name': 'longlib',
- 'type': 'static_library',
- 'msvs_settings': {
- 'VCCLCompilerTool': {
- 'AdditionalOptions': '/nologo ' * 8000,
- },
- 'VCLibrarianTool': {
- 'AdditionalOptions': '/nologo ' * 8000,
- },
- },
- 'sources': [
- 'function.cc',
- ],
- },
- {
- 'target_name': 'longdll',
- 'type': 'shared_library',
- 'msvs_settings': {
- 'VCCLCompilerTool': {
- 'AdditionalOptions': '/nologo ' * 8000,
- },
- 'VCLinkerTool': {
- 'AdditionalOptions': '/nologo ' * 8000,
- },
- },
- 'sources': [
- 'hello.cc',
- ],
- },
- ]
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/win/precompiled/gyptest-all.py b/deps/npm/node_modules/node-gyp/gyp/test/win/precompiled/gyptest-all.py
deleted file mode 100644
index 9fb5e62ed..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/win/precompiled/gyptest-all.py
+++ /dev/null
@@ -1,21 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2011 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Verifies that precompiled headers can be specified.
-"""
-
-import TestGyp
-
-import sys
-
-if sys.platform == 'win32':
- test = TestGyp.TestGyp(formats=['msvs', 'ninja'], workdir='workarea_all')
- test.run_gyp('hello.gyp')
- test.build('hello.gyp', 'hello')
- test.run_built_executable('hello', stdout="Hello, world!\nHello, two!\n")
- test.up_to_date('hello.gyp', test.ALL)
- test.pass_test()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/win/precompiled/hello.c b/deps/npm/node_modules/node-gyp/gyp/test/win/precompiled/hello.c
deleted file mode 100644
index d1abbb9e5..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/win/precompiled/hello.c
+++ /dev/null
@@ -1,14 +0,0 @@
-/* Copyright (c) 2011 Google Inc. All rights reserved.
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file. */
-
-// Note the abscence of a stdio.h include. This will be inserted because of the
-// precompiled header.
-
-extern int hello2();
-
-int main(int argc, char *argv[]) {
- printf("Hello, world!\n");
- hello2();
- return 0;
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/win/precompiled/hello.gyp b/deps/npm/node_modules/node-gyp/gyp/test/win/precompiled/hello.gyp
deleted file mode 100644
index 5f82c5359..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/win/precompiled/hello.gyp
+++ /dev/null
@@ -1,28 +0,0 @@
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'targets': [
- {
- 'target_name': 'hello',
- 'type': 'executable',
- 'sources': [
- 'hello.c',
- 'hello2.c',
- 'precomp.c',
- ],
- 'msvs_precompiled_header': 'stdio.h',
- 'msvs_precompiled_source': 'precomp.c',
-
- # Required so that the printf actually causes a build failure
- # if the pch isn't included.
- 'msvs_settings': {
- 'VCCLCompilerTool': {
- 'WarningLevel': '3',
- 'WarnAsError': 'true',
- },
- },
- },
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/win/precompiled/hello2.c b/deps/npm/node_modules/node-gyp/gyp/test/win/precompiled/hello2.c
deleted file mode 100644
index d6d53111f..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/win/precompiled/hello2.c
+++ /dev/null
@@ -1,13 +0,0 @@
-/* Copyright (c) 2011 Google Inc. All rights reserved.
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file. */
-
-// Unlike hello.c, this file specifies the headers.
-
-#include <windows.h>
-#include <stdio.h>
-
-int hello2() {
- printf("Hello, two!\n");
- return 0;
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/win/precompiled/precomp.c b/deps/npm/node_modules/node-gyp/gyp/test/win/precompiled/precomp.c
deleted file mode 100644
index 517c61a36..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/win/precompiled/precomp.c
+++ /dev/null
@@ -1,8 +0,0 @@
-/* Copyright (c) 2011 Google Inc. All rights reserved.
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file. */
-
-// The precompiled header does not have to be the first one in the file.
-
-#include <windows.h>
-#include <stdio.h>
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/win/rc-build/Resource.h b/deps/npm/node_modules/node-gyp/gyp/test/win/rc-build/Resource.h
deleted file mode 100644
index 137acf39b..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/win/rc-build/Resource.h
+++ /dev/null
@@ -1,26 +0,0 @@
-//{{NO_DEPENDENCIES}}
-// Microsoft Visual C++ generated include file.
-// Used by hello.rc
-//
-
-#define IDS_APP_TITLE 103
-
-#define IDR_MAINFRAME 128
-#define IDI_HELLO 107
-#define IDI_SMALL 108
-#define IDC_HELLO 109
-#ifndef IDC_STATIC
-#define IDC_STATIC -1
-#endif
-// Next default values for new objects
-//
-#ifdef APSTUDIO_INVOKED
-#ifndef APSTUDIO_READONLY_SYMBOLS
-
-#define _APS_NO_MFC 130
-#define _APS_NEXT_RESOURCE_VALUE 129
-#define _APS_NEXT_COMMAND_VALUE 32771
-#define _APS_NEXT_CONTROL_VALUE 1000
-#define _APS_NEXT_SYMED_VALUE 110
-#endif
-#endif
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/win/rc-build/hello.cpp b/deps/npm/node_modules/node-gyp/gyp/test/win/rc-build/hello.cpp
deleted file mode 100644
index f552ca159..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/win/rc-build/hello.cpp
+++ /dev/null
@@ -1,30 +0,0 @@
-// Copyright (c) 2012 Google Inc. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#define WIN32_LEAN_AND_MEAN
-#include <windows.h>
-#include <tchar.h>
-
-#include "resource.h"
-
-#define MAX_LOADSTRING 100
-
-TCHAR szTitle[MAX_LOADSTRING];
-TCHAR szWindowClass[MAX_LOADSTRING];
-
-int APIENTRY _tWinMain(
- HINSTANCE hInstance,
- HINSTANCE hPrevInstance,
- LPTSTR lpCmdLine,
- int nCmdShow) {
- // Make sure we can load some resources.
- int count = 0;
- LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
- if (szTitle[0] != 0) ++count;
- LoadString(hInstance, IDC_HELLO, szWindowClass, MAX_LOADSTRING);
- if (szWindowClass[0] != 0) ++count;
- if (LoadIcon(hInstance, MAKEINTRESOURCE(IDI_SMALL)) != NULL) ++count;
- if (LoadIcon(hInstance, MAKEINTRESOURCE(IDI_HELLO)) != NULL) ++count;
- return count;
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/win/rc-build/hello.gyp b/deps/npm/node_modules/node-gyp/gyp/test/win/rc-build/hello.gyp
deleted file mode 100644
index 8a0440976..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/win/rc-build/hello.gyp
+++ /dev/null
@@ -1,58 +0,0 @@
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'targets': [
- {
- 'target_name': 'with_resources',
- 'type': 'executable',
- 'msvs_settings': {
- 'VCCLCompilerTool': {
- 'DebugInformationFormat': '3',
- },
- 'VCLinkerTool': {
- 'GenerateDebugInformation': 'true',
- },
- 'VCResourceCompilerTool': {
- 'Culture' : '1033',
- },
- },
- 'sources': [
- 'hello.cpp',
- 'hello.rc',
- ],
- },
- {
- 'target_name': 'with_resources_subdir',
- 'type': 'executable',
- 'msvs_settings': {
- 'VCCLCompilerTool': {
- 'DebugInformationFormat': '3',
- },
- 'VCLinkerTool': {
- 'GenerateDebugInformation': 'true',
- },
- 'VCResourceCompilerTool': {
- 'Culture' : '1033',
- },
- },
- 'sources': [
- 'hello.cpp',
- 'subdir/hello2.rc',
- ],
- },
- {
- 'target_name': 'resource_only_dll',
- 'type': 'shared_library',
- 'msvs_settings': {
- 'VCLinkerTool': {
- 'ResourceOnlyDLL': 'true',
- },
- },
- 'sources': [
- 'hello.rc',
- ],
- },
- ],
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/win/rc-build/hello.h b/deps/npm/node_modules/node-gyp/gyp/test/win/rc-build/hello.h
deleted file mode 100644
index e60f2eb7e..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/win/rc-build/hello.h
+++ /dev/null
@@ -1,3 +0,0 @@
-#pragma once
-
-#include "resource.h"
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/win/rc-build/hello.ico b/deps/npm/node_modules/node-gyp/gyp/test/win/rc-build/hello.ico
deleted file mode 100644
index d551aa3aa..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/win/rc-build/hello.ico
+++ /dev/null
Binary files differ
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/win/rc-build/hello.rc b/deps/npm/node_modules/node-gyp/gyp/test/win/rc-build/hello.rc
deleted file mode 100644
index c9a7af6a0..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/win/rc-build/hello.rc
+++ /dev/null
@@ -1,86 +0,0 @@
-//Microsoft Visual C++ generated resource script.
-//
-#include "resource.h"
-
-#define APSTUDIO_READONLY_SYMBOLS
-/////////////////////////////////////////////////////////////////////////////
-//
-// Generated from the TEXTINCLUDE 2 resource.
-//
-#ifndef APSTUDIO_INVOKED
-#include "targetver.h"
-#endif
-#define APSTUDIO_HIDDEN_SYMBOLS
-#include "windows.h"
-#undef APSTUDIO_HIDDEN_SYMBOLS
-/////////////////////////////////////////////////////////////////////////////
-#undef APSTUDIO_READONLY_SYMBOLS
-
-#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
-LANGUAGE 9, 1
-#pragma code_page(932)
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// Icon
-//
-
-// Icon with lowest ID value placed first to ensure application icon
-// remains consistent on all systems.
-
-IDI_HELLO ICON "hello.ico"
-IDI_SMALL ICON "small.ico"
-
-#ifdef APSTUDIO_INVOKED
-/////////////////////////////////////////////////////////////////////////////
-//
-// TEXTINCLUDE
-//
-1 TEXTINCLUDE
-BEGIN
- "resource.h\0"
-END
-
-2 TEXTINCLUDE
-BEGIN
- "#ifndef APSTUDIO_INVOKED\r\n"
- "#include ""targetver.h""\r\n"
- "#endif\r\n"
- "#define APSTUDIO_HIDDEN_SYMBOLS\r\n"
- "#include ""windows.h""\r\n"
- "#undef APSTUDIO_HIDDEN_SYMBOLS\r\n"
- "\0"
-END
-
-3 TEXTINCLUDE
-BEGIN
- "\r\n"
- "\0"
-END
-
-#endif // APSTUDIO_INVOKED
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// String Table
-//
-
-STRINGTABLE
-BEGIN
- IDC_HELLO "HELLO"
- IDS_APP_TITLE "hello"
-END
-
-#endif
-/////////////////////////////////////////////////////////////////////////////
-
-
-
-#ifndef APSTUDIO_INVOKED
-/////////////////////////////////////////////////////////////////////////////
-//
-// Generated from the TEXTINCLUDE 3 resource.
-//
-
-/////////////////////////////////////////////////////////////////////////////
-#endif // not APSTUDIO_INVOKED
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/win/rc-build/small.ico b/deps/npm/node_modules/node-gyp/gyp/test/win/rc-build/small.ico
deleted file mode 100644
index d551aa3aa..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/win/rc-build/small.ico
+++ /dev/null
Binary files differ
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/win/rc-build/subdir/hello2.rc b/deps/npm/node_modules/node-gyp/gyp/test/win/rc-build/subdir/hello2.rc
deleted file mode 100644
index 4c8eab109..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/win/rc-build/subdir/hello2.rc
+++ /dev/null
@@ -1,87 +0,0 @@
-//Microsoft Visual C++ generated resource script.
-//
-#include "subdir/include.h"
-#include "resource.h"
-
-#define APSTUDIO_READONLY_SYMBOLS
-/////////////////////////////////////////////////////////////////////////////
-//
-// Generated from the TEXTINCLUDE 2 resource.
-//
-#ifndef APSTUDIO_INVOKED
-#include "targetver.h"
-#endif
-#define APSTUDIO_HIDDEN_SYMBOLS
-#include "windows.h"
-#undef APSTUDIO_HIDDEN_SYMBOLS
-/////////////////////////////////////////////////////////////////////////////
-#undef APSTUDIO_READONLY_SYMBOLS
-
-#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
-LANGUAGE 9, 1
-#pragma code_page(932)
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// Icon
-//
-
-// Icon with lowest ID value placed first to ensure application icon
-// remains consistent on all systems.
-
-IDI_HELLO ICON "hello.ico"
-IDI_SMALL ICON "small.ico"
-
-#ifdef APSTUDIO_INVOKED
-/////////////////////////////////////////////////////////////////////////////
-//
-// TEXTINCLUDE
-//
-1 TEXTINCLUDE
-BEGIN
- "resource.h\0"
-END
-
-2 TEXTINCLUDE
-BEGIN
- "#ifndef APSTUDIO_INVOKED\r\n"
- "#include ""targetver.h""\r\n"
- "#endif\r\n"
- "#define APSTUDIO_HIDDEN_SYMBOLS\r\n"
- "#include ""windows.h""\r\n"
- "#undef APSTUDIO_HIDDEN_SYMBOLS\r\n"
- "\0"
-END
-
-3 TEXTINCLUDE
-BEGIN
- "\r\n"
- "\0"
-END
-
-#endif // APSTUDIO_INVOKED
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// String Table
-//
-
-STRINGTABLE
-BEGIN
- IDC_HELLO "HELLO"
- IDS_APP_TITLE "hello"
-END
-
-#endif
-/////////////////////////////////////////////////////////////////////////////
-
-
-
-#ifndef APSTUDIO_INVOKED
-/////////////////////////////////////////////////////////////////////////////
-//
-// Generated from the TEXTINCLUDE 3 resource.
-//
-
-/////////////////////////////////////////////////////////////////////////////
-#endif // not APSTUDIO_INVOKED
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/win/rc-build/subdir/include.h b/deps/npm/node_modules/node-gyp/gyp/test/win/rc-build/subdir/include.h
deleted file mode 100644
index f15c48b42..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/win/rc-build/subdir/include.h
+++ /dev/null
@@ -1 +0,0 @@
-// Just exists to make sure it can be included.
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/win/rc-build/targetver.h b/deps/npm/node_modules/node-gyp/gyp/test/win/rc-build/targetver.h
deleted file mode 100644
index f583181df..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/win/rc-build/targetver.h
+++ /dev/null
@@ -1,24 +0,0 @@
-#pragma once
-
-// The following macros define the minimum required platform. The minimum required platform
-// is the earliest version of Windows, Internet Explorer etc. that has the necessary features to run
-// your application. The macros work by enabling all features available on platform versions up to and
-// including the version specified.
-
-// Modify the following defines if you have to target a platform prior to the ones specified below.
-// Refer to MSDN for the latest info on corresponding values for different platforms.
-#ifndef WINVER // Specifies that the minimum required platform is Windows Vista.
-#define WINVER 0x0600 // Change this to the appropriate value to target other versions of Windows.
-#endif
-
-#ifndef _WIN32_WINNT // Specifies that the minimum required platform is Windows Vista.
-#define _WIN32_WINNT 0x0600 // Change this to the appropriate value to target other versions of Windows.
-#endif
-
-#ifndef _WIN32_WINDOWS // Specifies that the minimum required platform is Windows 98.
-#define _WIN32_WINDOWS 0x0410 // Change this to the appropriate value to target Windows Me or later.
-#endif
-
-#ifndef _WIN32_IE // Specifies that the minimum required platform is Internet Explorer 7.0.
-#define _WIN32_IE 0x0700 // Change this to the appropriate value to target other versions of IE.
-#endif
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/win/uldi/a.cc b/deps/npm/node_modules/node-gyp/gyp/test/win/uldi/a.cc
deleted file mode 100644
index 0fe05d5af..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/win/uldi/a.cc
+++ /dev/null
@@ -1,7 +0,0 @@
-// Copyright (c) 2012 Google Inc. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-int some_function() {
- return 0;
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/win/uldi/b.cc b/deps/npm/node_modules/node-gyp/gyp/test/win/uldi/b.cc
deleted file mode 100644
index 0fe05d5af..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/win/uldi/b.cc
+++ /dev/null
@@ -1,7 +0,0 @@
-// Copyright (c) 2012 Google Inc. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-int some_function() {
- return 0;
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/win/uldi/main.cc b/deps/npm/node_modules/node-gyp/gyp/test/win/uldi/main.cc
deleted file mode 100644
index 81b46d863..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/win/uldi/main.cc
+++ /dev/null
@@ -1,10 +0,0 @@
-// Copyright (c) 2012 Google Inc. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-extern int some_function();
-
-int main() {
- some_function();
- return 0;
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/win/uldi/uldi.gyp b/deps/npm/node_modules/node-gyp/gyp/test/win/uldi/uldi.gyp
deleted file mode 100644
index c32f5e095..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/win/uldi/uldi.gyp
+++ /dev/null
@@ -1,45 +0,0 @@
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'targets': [
- {
- 'target_name': 'lib1',
- 'type': 'static_library',
- 'sources': ['a.cc'],
- },
- {
- 'target_name': 'final_uldi',
- 'type': 'executable',
- 'dependencies': [
- 'lib1',
- 'lib2',
- ],
- 'msvs_settings': {
- 'VCLinkerTool': {
- 'UseLibraryDependencyInputs': 'true'
- },
- },
- 'sources': ['main.cc'],
- },
- {
- 'target_name': 'final_no_uldi',
- 'type': 'executable',
- 'dependencies': [
- 'lib1',
- 'lib2',
- ],
- 'sources': ['main.cc'],
- },
- {
- 'target_name': 'lib2',
- 'type': 'static_library',
- # b.cc has the same named function as a.cc, but don't use the same name
- # so that the .obj will have a different name. If the obj file has the
- # same name, the linker will discard the obj file, invalidating the
- # test.
- 'sources': ['b.cc'],
- },
- ]
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/win/vs-macros/as.py b/deps/npm/node_modules/node-gyp/gyp/test/win/vs-macros/as.py
deleted file mode 100644
index e0bc3ae6f..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/win/vs-macros/as.py
+++ /dev/null
@@ -1,18 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-from optparse import OptionParser
-
-parser = OptionParser()
-parser.add_option('-a', dest='platform')
-parser.add_option('-o', dest='output')
-parser.add_option('-p', dest='path')
-(options, args) = parser.parse_args()
-
-f = open(options.output, 'w')
-print >>f, 'options', options
-print >>f, 'args', args
-f.close()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/win/vs-macros/containing-gyp.gyp b/deps/npm/node_modules/node-gyp/gyp/test/win/vs-macros/containing-gyp.gyp
deleted file mode 100644
index fa799a4e4..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/win/vs-macros/containing-gyp.gyp
+++ /dev/null
@@ -1,40 +0,0 @@
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'targets': [
- {
- 'target_name': 'test_expansions',
- 'msvs_cygwin_shell': 0,
- 'type': 'none',
- 'rules': [
- {
- 'rule_name': 'assembler (gnu-compatible)',
- 'msvs_cygwin_shell': 0,
- 'msvs_quote_cmd': 0,
- 'extension': 'S',
- 'inputs': [
- 'as.py',
- '$(InputPath)'
- ],
- 'outputs': [
- '$(IntDir)/$(InputName).obj',
- ],
- 'action':
- ['python',
- 'as.py',
- '-a', '$(PlatformName)',
- '-o', '$(IntDir)/$(InputName).obj',
- '-p', '<(DEPTH)',
- '$(InputPath)'],
- 'message': 'Building assembly language file $(InputPath)',
- 'process_outputs_as_sources': 1,
- },
- ],
- 'sources': [
- 'input.S',
- ],
- },
- ]
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/win/vs-macros/do_stuff.py b/deps/npm/node_modules/node-gyp/gyp/test/win/vs-macros/do_stuff.py
deleted file mode 100644
index 4669d3139..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/win/vs-macros/do_stuff.py
+++ /dev/null
@@ -1,8 +0,0 @@
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import sys
-
-input = open(sys.argv[1], "r").read()
-open(sys.argv[2], "w").write(input + "Modified.")
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/win/vs-macros/hello.cc b/deps/npm/node_modules/node-gyp/gyp/test/win/vs-macros/hello.cc
deleted file mode 100644
index 1711567ef..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/win/vs-macros/hello.cc
+++ /dev/null
@@ -1,7 +0,0 @@
-// Copyright (c) 2012 Google Inc. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-int main() {
- return 0;
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/win/vs-macros/input-output-macros.gyp b/deps/npm/node_modules/node-gyp/gyp/test/win/vs-macros/input-output-macros.gyp
deleted file mode 100644
index b7a3c1e3b..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/win/vs-macros/input-output-macros.gyp
+++ /dev/null
@@ -1,33 +0,0 @@
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'targets': [
- {
- 'target_name': 'test_expansions',
- 'msvs_cygwin_shell': 0,
- 'type': 'none',
- 'rules': [
- {
- 'rule_name': 'generate_file',
- 'extension': 'blah',
- 'inputs': [
- '<(RULE_INPUT_PATH)',
- 'do_stuff.py',
- ],
- 'outputs': [
- '$(OutDir)\\<(RULE_INPUT_NAME).something',
- ],
- 'action': ['python',
- 'do_stuff.py',
- '<(RULE_INPUT_PATH)',
- '$(OutDir)\\<(RULE_INPUT_NAME).something',],
- },
- ],
- 'sources': [
- 'stuff.blah',
- ],
- },
- ]
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/win/vs-macros/input.S b/deps/npm/node_modules/node-gyp/gyp/test/win/vs-macros/input.S
deleted file mode 100644
index e69de29bb..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/win/vs-macros/input.S
+++ /dev/null
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/win/vs-macros/projectname.gyp b/deps/npm/node_modules/node-gyp/gyp/test/win/vs-macros/projectname.gyp
deleted file mode 100644
index 625a17764..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/win/vs-macros/projectname.gyp
+++ /dev/null
@@ -1,29 +0,0 @@
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'targets': [
- {
- 'target_name': 'test_expansions',
- 'type': 'executable',
- 'sources': ['hello.cc'],
- 'msvs_settings': {
- 'VCLinkerTool': {
- 'OutputFile': '$(OutDir)\\$(ProjectName)_plus_something.exe',
- },
- },
- },
- {
- 'target_name': 'test_with_product_name',
- 'product_name': 'prod_name',
- 'type': 'executable',
- 'sources': ['hello.cc'],
- 'msvs_settings': {
- 'VCLinkerTool': {
- 'OutputFile': '$(OutDir)\\$(ProjectName)_plus_something.exe',
- },
- },
- },
- ]
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/win/vs-macros/stuff.blah b/deps/npm/node_modules/node-gyp/gyp/test/win/vs-macros/stuff.blah
deleted file mode 100644
index d438b4a78..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/win/vs-macros/stuff.blah
+++ /dev/null
@@ -1 +0,0 @@
-Random data file.
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/win/vs-macros/test_exists.py b/deps/npm/node_modules/node-gyp/gyp/test/win/vs-macros/test_exists.py
deleted file mode 100644
index f5c90ad6f..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/win/vs-macros/test_exists.py
+++ /dev/null
@@ -1,10 +0,0 @@
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import os
-import sys
-
-if not os.path.exists(sys.argv[1]):
- raise
-open(sys.argv[2], 'w').close()
diff --git a/deps/npm/node_modules/node-gyp/gyp/test/win/vs-macros/vcinstalldir.gyp b/deps/npm/node_modules/node-gyp/gyp/test/win/vs-macros/vcinstalldir.gyp
deleted file mode 100644
index 3763a4eb1..000000000
--- a/deps/npm/node_modules/node-gyp/gyp/test/win/vs-macros/vcinstalldir.gyp
+++ /dev/null
@@ -1,41 +0,0 @@
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'targets': [
- {
- 'target_name': 'test_slash_trailing',
- 'type': 'none',
- 'msvs_cygwin_shell': '0',
- 'actions': [
- {
- 'action_name': 'root',
- 'inputs': [],
- 'outputs': ['out1'],
- 'action': ['python', 'test_exists.py', '$(VCInstallDir)', 'out1']
- },
- ],
- },
- {
- 'target_name': 'test_slash_dir',
- 'type': 'none',
- 'msvs_cygwin_shell': '0',
- 'actions': [
- {
- 'action_name': 'bin',
- 'inputs': [],
- 'outputs': ['out2'],
- 'action': ['python', 'test_exists.py', '$(VCInstallDir)bin', 'out2'],
- },
- {
- 'action_name': 'compiler',
- 'inputs': [],
- 'outputs': ['out3'],
- 'action': [
- 'python', 'test_exists.py', '$(VCInstallDir)bin\\cl.exe', 'out3'],
- },
- ],
- },
- ]
-}
diff --git a/deps/npm/node_modules/node-gyp/gyp/tools/emacs/gyp-tests.el b/deps/npm/node_modules/node-gyp/gyp/tools/emacs/gyp-tests.el
index e988a350e..11b849788 100644
--- a/deps/npm/node_modules/node-gyp/gyp/tools/emacs/gyp-tests.el
+++ b/deps/npm/node_modules/node-gyp/gyp/tools/emacs/gyp-tests.el
@@ -26,11 +26,20 @@
(insert-file-contents-literally (concat filename ".fontified"))
(read (current-buffer))))
+(defun equivalent-face (face)
+ "For the purposes of face comparison, we're not interested in the
+ differences between certain faces. For example, the difference between
+ font-lock-comment-delimiter and font-lock-comment-face."
+ (case face
+ ((font-lock-comment-delimiter-face) font-lock-comment-face)
+ (t face)))
+
(defun text-face-properties (s)
"Extract the text properties from s"
(let ((result (list t)))
(dotimes (i (length s))
- (setq result (cons (get-text-property i 'face s) result)))
+ (setq result (cons (equivalent-face (get-text-property i 'face s))
+ result)))
(nreverse result)))
(ert-deftest test-golden-samples ()
diff --git a/deps/npm/node_modules/node-gyp/gyp/tools/emacs/gyp.el b/deps/npm/node_modules/node-gyp/gyp/tools/emacs/gyp.el
index c20fc8de9..3db9f6459 100644
--- a/deps/npm/node_modules/node-gyp/gyp/tools/emacs/gyp.el
+++ b/deps/npm/node_modules/node-gyp/gyp/tools/emacs/gyp.el
@@ -43,6 +43,7 @@
(add-to-list 'auto-mode-alist '("\\.gyp\\'" . gyp-mode))
(add-to-list 'auto-mode-alist '("\\.gypi\\'" . gyp-mode))
+(add-to-list 'auto-mode-alist '("/\\.gclient\\'" . gyp-mode))
;;; Font-lock support
@@ -135,7 +136,7 @@
(setq sections (cdr sections)) ; pop out a level
(cond ((looking-at-p "['\"]") ; a string
(setq string-start (point))
- (forward-sexp 1)
+ (goto-char (scan-sexps (point) 1))
(if (gyp-inside-dictionary-p)
;; Look for sections inside a dictionary
(let ((section (gyp-section-name
diff --git a/deps/npm/node_modules/node-gyp/legacy/common.gypi b/deps/npm/node_modules/node-gyp/legacy/common.gypi
deleted file mode 100644
index ca0cf9f3e..000000000
--- a/deps/npm/node_modules/node-gyp/legacy/common.gypi
+++ /dev/null
@@ -1,205 +0,0 @@
-{
- 'variables': {
- 'strict_aliasing%': 'false', # turn on/off -fstrict-aliasing
- 'visibility%': 'hidden', # V8's visibility setting
- 'target_arch%': 'ia32', # set v8's target architecture
- 'host_arch%': 'ia32', # set v8's host architecture
- 'want_separate_host_toolset': 0, # V8 should not build target and host
- 'library%': 'static_library', # allow override to 'shared_library' for DLL/.so builds
- 'component%': 'static_library', # NB. these names match with what V8 expects
- 'msvs_multi_core_compile': '0', # we do enable multicore compiles, but not using the V8 way
-
- # Enable V8's post-mortem debugging only on unix flavors.
- 'conditions': [
- ['OS != "win"', {
- 'v8_postmortem_support': 'true'
- }]
- ],
- },
-
- 'target_defaults': {
- 'default_configuration': 'Release',
- 'configurations': {
- 'Debug': {
- 'defines': [ 'DEBUG', '_DEBUG' ],
- 'cflags': [ '-g', '-O0' ],
- 'conditions': [
- ['target_arch=="x64"', {
- 'msvs_configuration_platform': 'x64',
- }],
- ],
- 'msvs_settings': {
- 'VCCLCompilerTool': {
- 'RuntimeLibrary': 1, # static debug
- 'Optimization': 0, # /Od, no optimization
- 'MinimalRebuild': 'false',
- 'OmitFramePointers': 'false',
- 'BasicRuntimeChecks': 3, # /RTC1
- },
- 'VCLinkerTool': {
- 'LinkIncremental': 2, # enable incremental linking
- },
- },
- },
- 'Release': {
- 'cflags': [ '-O3', '-fdata-sections', '-ffunction-sections' ],
- 'conditions': [
- ['target_arch=="x64"', {
- 'msvs_configuration_platform': 'x64',
- }],
- ['OS=="solaris"', {
- 'cflags': [ '-fno-omit-frame-pointer' ],
- # pull in V8's postmortem metadata
- 'ldflags': [ '-Wl,-z,allextract' ]
- }],
- ['strict_aliasing!="true"', {
- 'cflags': [ '-fno-strict-aliasing' ],
- }],
- ],
- 'msvs_settings': {
- 'VCCLCompilerTool': {
- 'RuntimeLibrary': 0, # static release
- 'Optimization': 3, # /Ox, full optimization
- 'FavorSizeOrSpeed': 1, # /Ot, favour speed over size
- 'InlineFunctionExpansion': 2, # /Ob2, inline anything eligible
- 'WholeProgramOptimization': 'true', # /GL, whole program optimization, needed for LTCG
- 'OmitFramePointers': 'true',
- 'EnableFunctionLevelLinking': 'true',
- 'EnableIntrinsicFunctions': 'true',
- 'RuntimeTypeInfo': 'false',
- 'ExceptionHandling': '0',
- 'AdditionalOptions': [
- '/MP', # compile across multiple CPUs
- ],
- },
- 'VCLibrarianTool': {
- 'AdditionalOptions': [
- '/LTCG', # link time code generation
- ],
- },
- 'VCLinkerTool': {
- 'LinkTimeCodeGeneration': 1, # link-time code generation
- 'OptimizeReferences': 2, # /OPT:REF
- 'EnableCOMDATFolding': 2, # /OPT:ICF
- 'LinkIncremental': 1, # disable incremental linking
- },
- },
- }
- },
- 'msvs_settings': {
- 'VCCLCompilerTool': {
- 'StringPooling': 'true', # pool string literals
- 'DebugInformationFormat': 3, # Generate a PDB
- 'WarningLevel': 3,
- 'BufferSecurityCheck': 'true',
- 'ExceptionHandling': 1, # /EHsc
- 'SuppressStartupBanner': 'true',
- 'WarnAsError': 'false',
- },
- 'VCLibrarianTool': {
- },
- 'VCLinkerTool': {
- 'conditions': [
- ['target_arch=="x64"', {
- 'TargetMachine' : 17 # /MACHINE:X64
- }],
- ],
- 'GenerateDebugInformation': 'true',
- 'RandomizedBaseAddress': 2, # enable ASLR
- 'DataExecutionPrevention': 2, # enable DEP
- 'AllowIsolation': 'true',
- 'SuppressStartupBanner': 'true',
- 'target_conditions': [
- ['_type=="executable"', {
- 'SubSystem': 1, # console executable
- }],
- ],
- },
- },
- 'conditions': [
- ['OS == "win"', {
- 'msvs_cygwin_shell': 0, # prevent actions from trying to use cygwin
- 'defines': [
- 'WIN32',
- # we don't really want VC++ warning us about
- # how dangerous C functions are...
- '_CRT_SECURE_NO_DEPRECATE',
- # ... or that C implementations shouldn't use
- # POSIX names
- '_CRT_NONSTDC_NO_DEPRECATE',
- 'BUILDING_V8_SHARED=1',
- 'BUILDING_UV_SHARED=1',
- ],
- }, {
- 'defines': [
- '_LARGEFILE_SOURCE',
- '_FILE_OFFSET_BITS=64',
- ],
- }],
- [ 'OS=="linux" or OS=="freebsd" or OS=="openbsd" or OS=="solaris"', {
- 'cflags': [ '-Wall', '-pthread', ],
- 'cflags_cc': [ '-fno-rtti', '-fno-exceptions' ],
- 'ldflags': [ '-pthread', ],
- 'conditions': [
- [ 'target_arch=="ia32"', {
- 'cflags': [ '-m32' ],
- 'ldflags': [ '-m32' ],
- }],
- [ 'target_arch=="x64"', {
- 'cflags': [ '-m64' ],
- 'ldflags': [ '-m64' ],
- }],
- [ 'OS=="linux"', {
- 'ldflags': [ '-rdynamic' ],
- }],
- [ 'OS=="solaris"', {
- 'cflags': [ '-pthreads' ],
- 'ldflags': [ '-pthreads' ],
- 'cflags!': [ '-pthread' ],
- 'ldflags!': [ '-pthread' ],
- }],
- ],
- }],
- ['OS=="mac"', {
- 'defines': ['_DARWIN_USE_64_BIT_INODE=1'],
- 'xcode_settings': {
- 'ALWAYS_SEARCH_USER_PATHS': 'NO',
- 'GCC_CW_ASM_SYNTAX': 'NO', # No -fasm-blocks
- 'GCC_DYNAMIC_NO_PIC': 'NO', # No -mdynamic-no-pic
- # (Equivalent to -fPIC)
- 'GCC_ENABLE_CPP_EXCEPTIONS': 'NO', # -fno-exceptions
- 'GCC_ENABLE_CPP_RTTI': 'NO', # -fno-rtti
- 'GCC_ENABLE_PASCAL_STRINGS': 'NO', # No -mpascal-strings
- 'GCC_THREADSAFE_STATICS': 'NO', # -fno-threadsafe-statics
- 'GCC_VERSION': '4.2',
- 'GCC_WARN_ABOUT_MISSING_NEWLINE': 'YES', # -Wnewline-eof
- 'PREBINDING': 'NO', # No -Wl,-prebind
- 'MACOSX_DEPLOYMENT_TARGET': '10.5', # -mmacosx-version-min=10.5
- 'USE_HEADERMAP': 'NO',
- 'OTHER_CFLAGS': [
- '-fno-strict-aliasing',
- ],
- 'WARNING_CFLAGS': [
- '-Wall',
- '-Wendif-labels',
- '-W',
- '-Wno-unused-parameter',
- ],
- },
- 'target_conditions': [
- ['_type!="static_library"', {
- 'xcode_settings': {'OTHER_LDFLAGS': ['-Wl,-search_paths_first']},
- }],
- ],
- 'conditions': [
- ['target_arch=="ia32"', {
- 'xcode_settings': {'ARCHS': ['i386']},
- }],
- ['target_arch=="x64"', {
- 'xcode_settings': {'ARCHS': ['x86_64']},
- }],
- ],
- }],
- ],
- }
-}
diff --git a/deps/npm/node_modules/node-gyp/lib/build.js b/deps/npm/node_modules/node-gyp/lib/build.js
index e1e8c36f5..f3605902e 100644
--- a/deps/npm/node_modules/node-gyp/lib/build.js
+++ b/deps/npm/node_modules/node-gyp/lib/build.js
@@ -20,7 +20,7 @@ exports.usage = 'Invokes `' + (win ? 'msbuild' : 'make') + '` and builds the mod
function build (gyp, argv, callback) {
var makeCommand = gyp.opts.make || process.env.MAKE
- || (process.platform.indexOf('bsd') != -1 ? 'gmake' : 'make')
+ || (process.platform.indexOf('bsd') != -1 && process.platform.indexOf('kfreebsd') == -1 ? 'gmake' : 'make')
, command = win ? 'msbuild' : makeCommand
, buildDir = path.resolve('build')
, configPath = path.resolve(buildDir, 'config.gypi')
diff --git a/deps/npm/node_modules/node-gyp/lib/configure.js b/deps/npm/node_modules/node-gyp/lib/configure.js
index 437b839ca..268c33625 100644
--- a/deps/npm/node_modules/node-gyp/lib/configure.js
+++ b/deps/npm/node_modules/node-gyp/lib/configure.js
@@ -1,4 +1,3 @@
-
module.exports = exports = configure
/**
@@ -14,6 +13,7 @@ var fs = require('graceful-fs')
, semver = require('semver')
, mkdirp = require('mkdirp')
, cp = require('child_process')
+ , extend = require('util')._extend
, spawn = cp.spawn
, execFile = cp.execFile
, win = process.platform == 'win32'
@@ -24,42 +24,25 @@ function configure (gyp, argv, callback) {
var python = gyp.opts.python || process.env.PYTHON || 'python'
, buildDir = path.resolve('build')
- , hasVCExpress = false
- , hasVC2012Express = false
- , hasWin71SDK = false
- , hasWin8SDK = false
, configNames = [ 'config.gypi', 'common.gypi' ]
, configs = []
, nodeDir
-
- if (win) {
- checkVCExpress(function () {
- if (hasVCExpress || hasVC2012Express) {
- checkWinSDK(function () {
- checkPython()
- })
- } else {
- checkPython()
- }
- })
- } else {
- checkPython()
- }
+ checkPython()
// Check if Python is in the $PATH
function checkPython () {
log.verbose('check python', 'checking for Python executable "%s" in the PATH', python)
which(python, function (err, execPath) {
if (err) {
- log.verbose('`which` failed for `%s`', python, err)
+ log.verbose('`which` failed', python, err)
if (win) {
guessPython()
} else {
failNoPython()
}
} else {
- log.verbose('`which` succeeded for `%s`', python, execPath)
+ log.verbose('`which` succeeded', python, execPath)
checkPythonVersion()
}
})
@@ -90,7 +73,9 @@ function configure (gyp, argv, callback) {
}
function checkPythonVersion () {
- var env = { TERM: 'dumb', PATH: process.env.PATH };
+ var env = extend({}, process.env);
+ env.TERM = 'dumb';
+
execFile(python, ['-c', 'import platform; print(platform.python_version());'], { env: env }, function (err, stdout) {
if (err) {
return callback(err)
@@ -101,7 +86,12 @@ function configure (gyp, argv, callback) {
log.silly('stripping "+" sign(s) from version')
version = version.replace(/\+/g, '')
}
- if (semver.gte(version, '2.5.0') && semver.lt(version, '3.0.0')) {
+ if (~version.indexOf('rc')) {
+ log.silly('stripping "rc" identifier from version')
+ version = version.replace(/rc(.*)$/ig, '')
+ }
+ var range = semver.Range('>=2.5.0 <3.0.0')
+ if (range.test(version)) {
getNodeDir()
} else {
failPythonVersion(version)
@@ -120,67 +110,6 @@ function configure (gyp, argv, callback) {
'You can pass the --python switch to point to Python >= v2.5.0 & < 3.0.0.'))
}
- function checkWinSDK(cb) {
- checkWin71SDK(function() {
- checkWin8SDK(cb)
- })
- }
-
- function checkWin71SDK(cb) {
- spawn('reg', ['query', 'HKLM\\Software\\Microsoft\\Microsoft SDKs\\Windows\\v7.1', '/v', 'InstallationFolder'])
- .on('exit', function (code) {
- hasWin71SDK = (code === 0)
- cb()
- })
- }
-
- function checkWin8SDK(cb) {
- var cp = spawn('reg', ['query', 'HKLM\\Software\\Microsoft\\Windows Kits\\Installed Products', '/f', 'Windows Software Development Kit x86', '/reg:32'])
- cp.on('exit', function (code) {
- hasWin8SDK = (code === 0)
- cb()
- })
- }
-
- function checkVC2012Express64(cb) {
- var cp = spawn('reg', ['query', 'HKLM\\SOFTWARE\\Wow6432Node\\Microsoft\\VCExpress\\11.0\\Setup\\VC', '/v', 'ProductDir'])
- cp.on('exit', function (code) {
- hasVC2012Express = (code === 0)
- cb()
- })
- }
-
- function checkVC2012Express(cb) {
- var cp = spawn('reg', ['query', 'HKLM\\SOFTWARE\\Microsoft\\VCExpress\\11.0\\Setup\\VC', '/v', 'ProductDir'])
- cp.on('exit', function (code) {
- hasVC2012Express = (code === 0)
- if (code !== 0) {
- checkVC2012Express64(cb)
- } else {
- cb()
- }
- })
- }
-
- function checkVCExpress64(cb) {
- var cp = spawn('cmd', ['/C', '%WINDIR%\\SysWOW64\\reg', 'query', 'HKLM\\Software\\Microsoft\\VCExpress\\10.0\\Setup\\VC', '/v', 'ProductDir'])
- cp.on('exit', function (code) {
- hasVCExpress = (code === 0)
- checkVC2012Express(cb)
- })
- }
-
- function checkVCExpress(cb) {
- spawn('reg', ['query', 'HKLM\\Software\\Microsoft\\VCExpress\\10.0\\Setup\\VC', '/v', 'ProductDir'])
- .on('exit', function (code) {
- if (code !== 0) {
- checkVCExpress64(cb)
- } else {
- checkVC2012Express(cb)
- }
- })
- }
-
function getNodeDir () {
// 'python' should be set by now
@@ -209,7 +138,11 @@ function configure (gyp, argv, callback) {
}
// make sure we have a valid version
- version = semver.parse(versionStr)
+ try {
+ version = semver.parse(versionStr)
+ } catch (e) {
+ return callback(e)
+ }
if (!version) {
return callback(new Error('Invalid version number: ' + versionStr))
}
@@ -272,15 +205,6 @@ function configure (gyp, argv, callback) {
// set the target_arch variable
variables.target_arch = gyp.opts.arch || process.arch || 'ia32'
- // set the toolset for VCExpress users
- if (win) {
- if (hasVC2012Express && hasWin8SDK) {
- defaults.msbuild_toolset = 'v110'
- } else if (hasVCExpress && hasWin71SDK) {
- defaults.msbuild_toolset = 'Windows7.1SDK'
- }
- }
-
// set the node development directory
variables.nodedir = nodeDir
@@ -288,7 +212,7 @@ function configure (gyp, argv, callback) {
variables.copy_dev_lib = !gyp.opts.nodedir
// disable -T "thin" static archives by default
- variables.standalone_static_library = gyp.opts.thin ? 0 : 1;
+ variables.standalone_static_library = gyp.opts.thin ? 0 : 1
// loop through the rest of the opts and add the unknown ones as variables.
// this allows for module-specific configure flags like:
@@ -373,7 +297,7 @@ function configure (gyp, argv, callback) {
})
// this logic ported from the old `gyp_addon` python file
- var gyp_script = path.resolve(__dirname, '..', 'gyp', 'gyp')
+ var gyp_script = path.resolve(__dirname, '..', 'gyp', 'gyp_main.py')
var addon_gypi = path.resolve(__dirname, '..', 'addon.gypi')
var common_gypi = path.resolve(nodeDir, 'common.gypi')
var output_dir = 'build'
@@ -389,6 +313,7 @@ function configure (gyp, argv, callback) {
argv.push('-Dnode_root_dir=' + nodeDir)
argv.push('-Dmodule_root_dir=' + process.cwd())
argv.push('--depth=.')
+ argv.push('--no-parallel')
// tell gyp to write the Makefile/Solution files into output_dir
argv.push('--generator-output', output_dir)
diff --git a/deps/npm/node_modules/node-gyp/lib/install.js b/deps/npm/node_modules/node-gyp/lib/install.js
index d6b7c4201..a9a18bcc7 100644
--- a/deps/npm/node_modules/node-gyp/lib/install.js
+++ b/deps/npm/node_modules/node-gyp/lib/install.js
@@ -12,6 +12,7 @@ var fs = require('graceful-fs')
, tar = require('tar')
, rm = require('rimraf')
, path = require('path')
+ , crypto = require('crypto')
, zlib = require('zlib')
, log = require('npmlog')
, semver = require('semver')
@@ -51,16 +52,12 @@ function install (gyp, argv, callback) {
return callback(new Error('Invalid version number: ' + versionStr))
}
- // "legacy" versions are 0.7 and 0.6
- var isLegacy = semver.lt(versionStr, '0.8.0')
- log.verbose('installing legacy version?', isLegacy)
-
- if (semver.lt(versionStr, '0.6.0')) {
- return callback(new Error('Minimum target version is `0.6.0` or greater. Got: ' + versionStr))
+ if (semver.lt(versionStr, '0.8.0')) {
+ return callback(new Error('Minimum target version is `0.8.0` or greater. Got: ' + versionStr))
}
// 0.x.y-pre versions are not published yet and cannot be installed. Bail.
- if (version[5] && version[5].match(/\-pre$/)) {
+ if (version.prerelease[0] === 'pre') {
log.verbose('detected "pre" node version', versionStr)
if (gyp.opts.nodedir) {
log.verbose('--nodedir flag was passed; skipping install', gyp.opts.nodedir)
@@ -72,7 +69,7 @@ function install (gyp, argv, callback) {
}
// flatten version into String
- version = version.slice(1, 4).join('.')
+ version = version.version
log.verbose('install', 'installing version: %s', version)
// the directory where the dev files will be installed
@@ -122,6 +119,9 @@ function install (gyp, argv, callback) {
var req = null
var requestOpts = {
uri: url
+ , headers: {
+ 'User-Agent': 'node-gyp v' + gyp.version + ' (node ' + process.version + ')'
+ }
}
// basic support for a proxy server
@@ -152,6 +152,15 @@ function install (gyp, argv, callback) {
return req
}
+ function getContentSha(res, callback) {
+ var shasum = crypto.createHash('sha1')
+ res.on('data', function (chunk) {
+ shasum.update(chunk)
+ }).on('end', function () {
+ callback(null, shasum.digest('hex'))
+ })
+ }
+
function go () {
log.verbose('ensuring nodedir is created', devDir)
@@ -172,12 +181,16 @@ function install (gyp, argv, callback) {
}
// now download the node tarball
- var tarballUrl = distUrl + '/v' + version + '/node-v' + version + '.tar.gz'
+ var tarPath = gyp.opts['tarball']
+ var tarballUrl = tarPath ? tarPath : distUrl + '/v' + version + '/node-v' + version + '.tar.gz'
, badDownload = false
, extractCount = 0
, gunzip = zlib.createGunzip()
, extracter = tar.Extract({ path: devDir, strip: 1, filter: isValid })
+ var contentShasums = {}
+ var expectShasums = {}
+
// checks if a file to be extracted from the tarball is valid.
// only .h header files and the gyp files get extracted
function isValid () {
@@ -202,6 +215,13 @@ function install (gyp, argv, callback) {
extracter.on('end', afterTarball)
// download the tarball, gunzip and extract!
+
+ if (tarPath) {
+ var input = fs.createReadStream(tarballUrl)
+ input.pipe(gunzip).pipe(extracter)
+ return
+ }
+
var req = download(tarballUrl)
if (!req) return
@@ -223,6 +243,13 @@ function install (gyp, argv, callback) {
cb(new Error(res.statusCode + ' status code downloading tarball'))
return
}
+ // content sha1
+ getContentSha(res, function (_, sha1) {
+ var filename = path.basename(tarballUrl).trim()
+ contentShasums[filename] = sha1
+ log.verbose('content sha1', filename, sha1)
+ })
+
// start unzipping and untaring
req.pipe(gunzip).pipe(extracter)
})
@@ -236,12 +263,6 @@ function install (gyp, argv, callback) {
log.verbose('tarball', 'done parsing tarball')
var async = 0
- if (isLegacy) {
- // copy over the files from the `legacy` dir
- async++
- copyLegacy(deref)
- }
-
if (win) {
// need to download node.lib
async++
@@ -253,6 +274,10 @@ function install (gyp, argv, callback) {
var installVersionPath = path.resolve(devDir, 'installVersion')
fs.writeFile(installVersionPath, gyp.package.installVersion + '\n', deref)
+ // download SHASUMS.txt
+ async++
+ downloadShasums(deref)
+
if (async === 0) {
// no async tasks required
cb()
@@ -260,34 +285,57 @@ function install (gyp, argv, callback) {
function deref (err) {
if (err) return cb(err)
- --async || cb()
+
+ async--
+ if (!async) {
+ log.verbose('download contents shasums', JSON.stringify(contentShasums))
+ // check content shasums
+ for (var k in contentShasums) {
+ log.verbose('validating download shasum for ' + k, '(%s == %s)', contentShasums[k], expectShasums[k])
+ if (contentShasums[k] !== expectShasums[k]) {
+ cb(new Error(k + ' local sha1 ' + contentShasums[k] + ' not match remote ' + expectShasums[k]))
+ return
+ }
+ }
+ cb()
+ }
}
}
- function copyLegacy (done) {
- // legacy versions of node (< 0.8) require the legacy files to be copied
- // over since they contain many bugfixes from the current node build system
- log.verbose('legacy', 'copying "legacy" gyp configuration files for version', version)
-
- var legacyDir = path.resolve(__dirname, '..', 'legacy')
- log.verbose('legacy', 'using "legacy" dir', legacyDir)
- log.verbose('legacy', 'copying to "dev" dir', devDir)
-
- var reader = fstream.Reader({ path: legacyDir, type: 'Directory' })
- var writer = fstream.Writer({ path: devDir, type: 'Directory' })
-
- reader.on('entry', function onEntry (entry) {
- log.verbose('legacy', 'reading entry:', entry.path)
- entry.on('entry', onEntry)
+ function downloadShasums(done) {
+ log.verbose('check download content sha1, need to download `SHASUMS.txt`...')
+ var shasumsPath = path.resolve(devDir, 'SHASUMS.txt')
+ , shasumsUrl = distUrl + '/v' + version + '/SHASUMS.txt'
+
+ log.verbose('`SHASUMS.txt` url', shasumsUrl)
+ var req = download(shasumsUrl)
+ if (!req) return
+ req.on('error', done)
+ req.on('response', function (res) {
+ if (res.statusCode !== 200) {
+ done(new Error(res.statusCode + ' status code downloading SHASUMS.txt'))
+ return
+ }
+
+ var chunks = []
+ res.on('data', function (chunk) {
+ chunks.push(chunk)
+ })
+ res.on('end', function () {
+ var lines = Buffer.concat(chunks).toString().trim().split('\n')
+ lines.forEach(function (line) {
+ var items = line.trim().split(/\s+/)
+ if (items.length !== 2) return
+
+ // 0035d18e2dcf9aad669b1c7c07319e17abfe3762 ./node-v0.11.4.tar.gz
+ var name = items[1].replace(/^\.\//, '')
+ expectShasums[name] = items[0]
+ })
+
+ log.verbose('`SHASUMS.txt` data', JSON.stringify(expectShasums))
+ done()
+ })
})
-
- reader.on('error', done)
- writer.on('error', done)
-
- // Like `cp -rpf`
- reader.pipe(writer)
-
- reader.on('end', done)
}
function downloadNodeLib (done) {
@@ -318,6 +366,11 @@ function install (gyp, argv, callback) {
return
}
+ getContentSha(res, function (_, sha1) {
+ contentShasums['node.lib'] = sha1
+ log.verbose('content sha1', 'node.lib', sha1)
+ })
+
var ws = fs.createWriteStream(nodeLibPath32)
ws.on('error', cb)
req.pipe(ws)
@@ -339,6 +392,11 @@ function install (gyp, argv, callback) {
return
}
+ getContentSha(res, function (_, sha1) {
+ contentShasums['x64/node.lib'] = sha1
+ log.verbose('content sha1', 'x64/node.lib', sha1)
+ })
+
var ws = fs.createWriteStream(nodeLibPath64)
ws.on('error', cb)
req.pipe(ws)
@@ -360,8 +418,7 @@ function install (gyp, argv, callback) {
function valid (file) {
// header files
return minimatch(file, '*.h', { matchBase: true }) ||
- // non-legacy versions of node also extract the gyp build files
- (!isLegacy && minimatch(file, '*.gypi', { matchBase: true }))
+ minimatch(file, '*.gypi', { matchBase: true })
}
/**
@@ -386,9 +443,3 @@ function install (gyp, argv, callback) {
}
}
-
-
-install.trim = function trim (file) {
- var firstSlash = file.indexOf('/')
- return file.substring(firstSlash + 1)
-}
diff --git a/deps/npm/node_modules/node-gyp/lib/node-gyp.js b/deps/npm/node_modules/node-gyp/lib/node-gyp.js
index 37d2e5061..2ae08904b 100644
--- a/deps/npm/node_modules/node-gyp/lib/node-gyp.js
+++ b/deps/npm/node_modules/node-gyp/lib/node-gyp.js
@@ -1,4 +1,8 @@
+/**
+ * Module exports.
+ */
+
module.exports = exports = gyp
/**
@@ -36,7 +40,7 @@ log.heading = 'gyp'
*/
function gyp () {
- return new Gyp
+ return new Gyp()
}
function Gyp () {
@@ -46,6 +50,12 @@ function Gyp () {
// TODO: make this *more* configurable?
// see: https://github.com/TooTallNate/node-gyp/issues/21
var homeDir = process.env.HOME || process.env.USERPROFILE
+ if (!homeDir) {
+ throw new Error(
+ "node-gyp requires that the user's home directory is specified " +
+ "in either of the environmental variables HOME or USERPROFILE"
+ );
+ }
this.devDir = path.resolve(homeDir, '.node-gyp')
this.commands = {}
@@ -85,6 +95,7 @@ proto.configDefs = {
, loglevel: String // everywhere
, python: String // 'configure'
, 'dist-url': String // 'install'
+ , 'tarball': String // 'install'
, jobs: String // 'build'
, thin: String // 'configure'
}
@@ -120,7 +131,7 @@ proto.parseArgv = function parseOpts (argv) {
var commands = this.todo = []
// create a copy of the argv array with aliases mapped
- var argv = this.argv.map(function (arg) {
+ argv = this.argv.map(function (arg) {
// is this an alias?
if (arg in this.aliases) {
arg = this.aliases[arg]
@@ -168,7 +179,7 @@ proto.parseArgv = function parseOpts (argv) {
*/
proto.spawn = function spawn (command, args, opts) {
- opts || (opts = {})
+ if (!opts) opts = {}
if (!opts.silent && !opts.customFds) {
opts.customFds = [ 0, 1, 2 ]
}
@@ -183,7 +194,7 @@ proto.spawn = function spawn (command, args, opts) {
*/
proto.usage = function usage () {
- var usage = [
+ var str = [
''
, ' Usage: node-gyp <command> [options]'
, ''
@@ -198,7 +209,7 @@ proto.usage = function usage () {
, 'node-gyp@' + this.version + ' ' + path.resolve(__dirname, '..')
, 'node@' + process.versions.node
].join('\n')
- return usage
+ return str
}
/**
diff --git a/deps/npm/node_modules/node-gyp/lib/remove.js b/deps/npm/node_modules/node-gyp/lib/remove.js
index 44f3147a2..068d1e389 100644
--- a/deps/npm/node_modules/node-gyp/lib/remove.js
+++ b/deps/npm/node_modules/node-gyp/lib/remove.js
@@ -34,7 +34,7 @@ function remove (gyp, argv, callback) {
}
// flatten the version Array into a String
- version = version.slice(1, 4).join('.')
+ version = version.version
var versionPath = path.resolve(gyp.devDir, version)
log.verbose('remove', 'removing development files for version:', version)
diff --git a/deps/npm/node_modules/node-gyp/package.json b/deps/npm/node_modules/node-gyp/package.json
index ab2aac324..c9dbae5a8 100644
--- a/deps/npm/node_modules/node-gyp/package.json
+++ b/deps/npm/node_modules/node-gyp/package.json
@@ -10,7 +10,7 @@
"bindings",
"gyp"
],
- "version": "0.10.0",
+ "version": "0.13.0",
"installVersion": 9,
"author": {
"name": "Nathan Rajlich",
@@ -28,7 +28,7 @@
"main": "./lib/node-gyp.js",
"dependencies": {
"glob": "3",
- "graceful-fs": "1",
+ "graceful-fs": "2",
"fstream": "0",
"minimatch": "0",
"mkdirp": "0",
@@ -37,22 +37,23 @@
"osenv": "0",
"request": "2",
"rimraf": "2",
- "semver": "1",
+ "semver": "~2.2.1",
"tar": "0",
"which": "1"
},
"engines": {
"node": ">= 0.8.0"
},
- "readme": "node-gyp\n=========\n### Node.js native addon build tool\n\n`node-gyp` is a cross-platform command-line tool written in Node.js for compiling\nnative addon modules for Node.js, which takes away the pain of dealing with the\nvarious differences in build platforms. It is the replacement to the `node-waf`\nprogram which is removed for node `v0.8`. If you have a native addon for node that\nstill has a `wscript` file, then you should definitely add a `binding.gyp` file\nto support the latest versions of node.\n\nMultiple target versions of node are supported (i.e. `0.6`, `0.7`,..., `1.0`,\netc.), regardless of what version of node is actually installed on your system\n(`node-gyp` downloads the necessary development files for the target version).\n\n#### Features:\n\n * Easy to use, consistent interface\n * Same commands to build your module on every platform\n * Supports multiple target versions of Node\n\n\nInstallation\n------------\n\nYou can install with `npm`:\n\n``` bash\n$ npm install -g node-gyp\n```\n\nYou will also need to install:\n\n * On Unix:\n * `python` (`v2.7` recommended, `v3.x.x` is __*not*__ supported)\n * `make`\n * A proper C/C++ compiler toolchain, like GCC\n * On Windows:\n * [Python][windows-python] ([`v2.7.3`][windows-python-v2.7.3] recommended, `v3.x.x` is __*not*__ supported)\n * Windows XP/Vista/7:\n * Microsoft Visual Studio C++ 2010 ([Express][msvc2010] version works well)\n * For 64-bit builds of node and native modules you will _**also**_ need the [Windows 7 64-bit SDK][win7sdk]\n * If the install fails, try uninstalling any C++ 2010 x64&x86 Redistributable that you have installed first.\n * If you get errors that the 64-bit compilers are not installed you may also need the [compiler update for the Windows SDK 7.1]\n * Windows 7/8:\n * Microsoft Visual Studio C++ 2012 for Windows Desktop ([Express][msvc2012] version works well)\n\nNote that OS X is just a flavour of Unix and so needs `python`, `make`, and C/C++.\nAn easy way to obtain these is to install XCode from Apple,\nand then use it to install the command line tools (under Preferences -> Downloads).\n\nHow to Use\n----------\n\nTo compile your native addon, first go to its root directory:\n\n``` bash\n$ cd my_node_addon\n```\n\nThe next step is to generate the appropriate project build files for the current\nplatform. Use `configure` for that:\n\n``` bash\n$ node-gyp configure\n```\n\n__Note__: The `configure` step looks for the `binding.gyp` file in the current\ndirectory to processs. See below for instructions on creating the `binding.gyp` file.\n\nNow you will have either a `Makefile` (on Unix platforms) or a `vcxproj` file\n(on Windows) in the `build/` directory. Next invoke the `build` command:\n\n``` bash\n$ node-gyp build\n```\n\nNow you have your compiled `.node` bindings file! The compiled bindings end up\nin `build/Debug/` or `build/Release/`, depending on the build mode. At this point\nyou can require the `.node` file with Node and run your tests!\n\n__Note:__ To create a _Debug_ build of the bindings file, pass the `--debug` (or\n`-d`) switch when running the either `configure` or `build` command.\n\n\nThe \"binding.gyp\" file\n----------------------\n\nPreviously when node had `node-waf` you had to write a `wscript` file. The\nreplacement for that is the `binding.gyp` file, which describes the configuration\nto build your module in a JSON-like format. This file gets placed in the root of\nyour package, alongside the `package.json` file.\n\nA barebones `gyp` file appropriate for building a node addon looks like:\n\n``` python\n{\n \"targets\": [\n {\n \"target_name\": \"binding\",\n \"sources\": [ \"src/binding.cc\" ]\n }\n ]\n}\n```\n\nSome additional resources for writing `gyp` files:\n\n * [\"Hello World\" node addon example](https://github.com/joyent/node/tree/master/test/addons/hello-world)\n * [gyp user documentation](http://code.google.com/p/gyp/wiki/GypUserDocumentation)\n * [gyp input format reference](http://code.google.com/p/gyp/wiki/InputFormatReference)\n * [*\"binding.gyp\" files out in the wild* wiki page](https://github.com/TooTallNate/node-gyp/wiki/%22binding.gyp%22-files-out-in-the-wild)\n\n\nCommands\n--------\n\n`node-gyp` responds to the following commands:\n\n| **Command** | **Description**\n|:--------------|:---------------------------------------------------------------\n| `build` | Invokes `make`/`msbuild.exe` and builds the native addon\n| `clean` | Removes any the `build` dir if it exists\n| `configure` | Generates project build files for the current platform\n| `rebuild` | Runs \"clean\", \"configure\" and \"build\" all in a row\n| `install` | Installs node development header files for the given version\n| `list` | Lists the currently installed node development file versions\n| `remove` | Removes the node development header files for the given version\n\n\nLicense\n-------\n\n(The MIT License)\n\nCopyright (c) 2012 Nathan Rajlich &lt;nathan@tootallnate.net&gt;\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n'Software'), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n\n[windows-python]: http://www.python.org/getit/windows\n[windows-python-v2.7.3]: http://www.python.org/download/releases/2.7.3#download\n[msvc2010]: http://go.microsoft.com/?linkid=9709949\n[msvc2012]: http://go.microsoft.com/?linkid=9816758\n[win7sdk]: http://www.microsoft.com/en-us/download/details.aspx?id=8279\n[compiler update for the Windows SDK 7.1]: http://www.microsoft.com/en-us/download/details.aspx?id=4422\n",
+ "readme": "node-gyp\n=========\n### Node.js native addon build tool\n\n`node-gyp` is a cross-platform command-line tool written in Node.js for compiling\nnative addon modules for Node.js, which takes away the pain of dealing with the\nvarious differences in build platforms. It is the replacement to the `node-waf`\nprogram which is removed for node `v0.8`. If you have a native addon for node that\nstill has a `wscript` file, then you should definitely add a `binding.gyp` file\nto support the latest versions of node.\n\nMultiple target versions of node are supported (i.e. `0.8`, `0.9`, `0.10`, ..., `1.0`,\netc.), regardless of what version of node is actually installed on your system\n(`node-gyp` downloads the necessary development files for the target version).\n\n#### Features:\n\n * Easy to use, consistent interface\n * Same commands to build your module on every platform\n * Supports multiple target versions of Node\n\n\nInstallation\n------------\n\nYou can install with `npm`:\n\n``` bash\n$ npm install -g node-gyp\n```\n\nYou will also need to install:\n\n * On Unix:\n * `python` (`v2.7` recommended, `v3.x.x` is __*not*__ supported)\n * `make`\n * A proper C/C++ compiler toolchain, like GCC\n * On Windows:\n * [Python][windows-python] ([`v2.7.3`][windows-python-v2.7.3] recommended, `v3.x.x` is __*not*__ supported)\n * Windows XP/Vista/7:\n * Microsoft Visual Studio C++ 2010 ([Express][msvc2010] version works well)\n * For 64-bit builds of node and native modules you will _**also**_ need the [Windows 7 64-bit SDK][win7sdk]\n * If the install fails, try uninstalling any C++ 2010 x64&x86 Redistributable that you have installed first.\n * If you get errors that the 64-bit compilers are not installed you may also need the [compiler update for the Windows SDK 7.1]\n * Windows 7/8:\n * Microsoft Visual Studio C++ 2012 for Windows Desktop ([Express][msvc2012] version works well)\n\nNote that OS X is just a flavour of Unix and so needs `python`, `make`, and C/C++.\nAn easy way to obtain these is to install XCode from Apple,\nand then use it to install the command line tools (under Preferences -> Downloads).\n\nHow to Use\n----------\n\nTo compile your native addon, first go to its root directory:\n\n``` bash\n$ cd my_node_addon\n```\n\nThe next step is to generate the appropriate project build files for the current\nplatform. Use `configure` for that:\n\n``` bash\n$ node-gyp configure\n```\n\n__Note__: The `configure` step looks for the `binding.gyp` file in the current\ndirectory to processs. See below for instructions on creating the `binding.gyp` file.\n\nNow you will have either a `Makefile` (on Unix platforms) or a `vcxproj` file\n(on Windows) in the `build/` directory. Next invoke the `build` command:\n\n``` bash\n$ node-gyp build\n```\n\nNow you have your compiled `.node` bindings file! The compiled bindings end up\nin `build/Debug/` or `build/Release/`, depending on the build mode. At this point\nyou can require the `.node` file with Node and run your tests!\n\n__Note:__ To create a _Debug_ build of the bindings file, pass the `--debug` (or\n`-d`) switch when running the either `configure` or `build` command.\n\n\nThe \"binding.gyp\" file\n----------------------\n\nPreviously when node had `node-waf` you had to write a `wscript` file. The\nreplacement for that is the `binding.gyp` file, which describes the configuration\nto build your module in a JSON-like format. This file gets placed in the root of\nyour package, alongside the `package.json` file.\n\nA barebones `gyp` file appropriate for building a node addon looks like:\n\n``` python\n{\n \"targets\": [\n {\n \"target_name\": \"binding\",\n \"sources\": [ \"src/binding.cc\" ]\n }\n ]\n}\n```\n\nSome additional resources for writing `gyp` files:\n\n * [\"Hello World\" node addon example](https://github.com/joyent/node/tree/master/test/addons/hello-world)\n * [gyp user documentation](http://code.google.com/p/gyp/wiki/GypUserDocumentation)\n * [gyp input format reference](http://code.google.com/p/gyp/wiki/InputFormatReference)\n * [*\"binding.gyp\" files out in the wild* wiki page](https://github.com/TooTallNate/node-gyp/wiki/%22binding.gyp%22-files-out-in-the-wild)\n\n\nCommands\n--------\n\n`node-gyp` responds to the following commands:\n\n| **Command** | **Description**\n|:--------------|:---------------------------------------------------------------\n| `build` | Invokes `make`/`msbuild.exe` and builds the native addon\n| `clean` | Removes any the `build` dir if it exists\n| `configure` | Generates project build files for the current platform\n| `rebuild` | Runs \"clean\", \"configure\" and \"build\" all in a row\n| `install` | Installs node development header files for the given version\n| `list` | Lists the currently installed node development file versions\n| `remove` | Removes the node development header files for the given version\n\n\nLicense\n-------\n\n(The MIT License)\n\nCopyright (c) 2012 Nathan Rajlich &lt;nathan@tootallnate.net&gt;\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n'Software'), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n\n[windows-python]: http://www.python.org/getit/windows\n[windows-python-v2.7.3]: http://www.python.org/download/releases/2.7.3#download\n[msvc2010]: http://go.microsoft.com/?linkid=9709949\n[msvc2012]: http://go.microsoft.com/?linkid=9816758\n[win7sdk]: http://www.microsoft.com/en-us/download/details.aspx?id=8279\n[compiler update for the Windows SDK 7.1]: http://www.microsoft.com/en-us/download/details.aspx?id=4422\n",
"readmeFilename": "README.md",
"bugs": {
"url": "https://github.com/TooTallNate/node-gyp/issues"
},
- "_id": "node-gyp@0.10.0",
+ "homepage": "https://github.com/TooTallNate/node-gyp",
+ "_id": "node-gyp@0.13.0",
"dist": {
- "shasum": "23748ceb4b7681493a4a353ce605cc22ecd6ee67"
+ "shasum": "97765303203579f1445358d4d25d03645811d87d"
},
"_from": "node-gyp@latest",
- "_resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-0.10.0.tgz"
+ "_resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-0.13.0.tgz"
}
diff --git a/deps/npm/node_modules/nopt/README.md b/deps/npm/node_modules/nopt/README.md
index f290da8f4..96798a1da 100644
--- a/deps/npm/node_modules/nopt/README.md
+++ b/deps/npm/node_modules/nopt/README.md
@@ -61,12 +61,12 @@ $ node my-program.js -fp --foofoo
$ node my-program.js --foofoo -- -fp # -- stops the flag parsing.
{ foo: "Mr. Foo", argv: { remain: ["-fp"] } }
-$ node my-program.js --blatzk 1000 -fp # unknown opts are ok.
-{ blatzk: 1000, flag: true, pick: true }
-
-$ node my-program.js --blatzk true -fp # but they need a value
+$ node my-program.js --blatzk -fp # unknown opts are ok.
{ blatzk: true, flag: true, pick: true }
+$ node my-program.js --blatzk=1000 -fp # but you need to use = if they have a value
+{ blatzk: 1000, flag: true, pick: true }
+
$ node my-program.js --no-blatzk -fp # unless they start with "no-"
{ blatzk: false, flag: true, pick: true }
diff --git a/deps/npm/node_modules/nopt/lib/nopt.js b/deps/npm/node_modules/nopt/lib/nopt.js
index 0e4ebc428..9efab7af4 100644
--- a/deps/npm/node_modules/nopt/lib/nopt.js
+++ b/deps/npm/node_modules/nopt/lib/nopt.js
@@ -125,6 +125,12 @@ function validateString (data, k, val) {
}
function validatePath (data, k, val) {
+ if (val === true) return false
+ val = String(val)
+ var homePattern = process.platform === 'win32' ? /^~(\/|\\)/ : /^~\//
+ if (val.match(homePattern) && process.env.HOME) {
+ val = path.resolve(process.env.HOME, val.substr(2))
+ }
data[k] = path.resolve(String(val))
return true
}
@@ -236,7 +242,7 @@ function parse (args, data, remain, types, shorthands) {
break
}
var hadEq = false
- if (arg.charAt(0) === "-") {
+ if (arg.charAt(0) === "-" && arg.length > 1) {
if (arg.indexOf("=") !== -1) {
hadEq = true
var v = arg.split("=")
@@ -327,6 +333,9 @@ function parse (args, data, remain, types, shorthands) {
continue
}
+ if (types[arg] === String && la === undefined)
+ la = ""
+
if (la && la.match(/^-{2,}$/)) {
la = undefined
i --
@@ -401,202 +410,3 @@ function resolveShort (arg, shorthands, shortAbbr, abbrevs) {
return shorthands[arg]
}
-
-if (module === require.main) {
-var assert = require("assert")
- , util = require("util")
-
- , shorthands =
- { s : ["--loglevel", "silent"]
- , d : ["--loglevel", "info"]
- , dd : ["--loglevel", "verbose"]
- , ddd : ["--loglevel", "silly"]
- , noreg : ["--no-registry"]
- , reg : ["--registry"]
- , "no-reg" : ["--no-registry"]
- , silent : ["--loglevel", "silent"]
- , verbose : ["--loglevel", "verbose"]
- , h : ["--usage"]
- , H : ["--usage"]
- , "?" : ["--usage"]
- , help : ["--usage"]
- , v : ["--version"]
- , f : ["--force"]
- , desc : ["--description"]
- , "no-desc" : ["--no-description"]
- , "local" : ["--no-global"]
- , l : ["--long"]
- , p : ["--parseable"]
- , porcelain : ["--parseable"]
- , g : ["--global"]
- }
-
- , types =
- { aoa: Array
- , nullstream: [null, Stream]
- , date: Date
- , str: String
- , browser : String
- , cache : path
- , color : ["always", Boolean]
- , depth : Number
- , description : Boolean
- , dev : Boolean
- , editor : path
- , force : Boolean
- , global : Boolean
- , globalconfig : path
- , group : [String, Number]
- , gzipbin : String
- , logfd : [Number, Stream]
- , loglevel : ["silent","win","error","warn","info","verbose","silly"]
- , long : Boolean
- , "node-version" : [false, String]
- , npaturl : url
- , npat : Boolean
- , "onload-script" : [false, String]
- , outfd : [Number, Stream]
- , parseable : Boolean
- , pre: Boolean
- , prefix: path
- , proxy : url
- , "rebuild-bundle" : Boolean
- , registry : url
- , searchopts : String
- , searchexclude: [null, String]
- , shell : path
- , t: [Array, String]
- , tag : String
- , tar : String
- , tmp : path
- , "unsafe-perm" : Boolean
- , usage : Boolean
- , user : String
- , username : String
- , userconfig : path
- , version : Boolean
- , viewer: path
- , _exit : Boolean
- }
-
-; [["-v", {version:true}, []]
- ,["---v", {version:true}, []]
- ,["ls -s --no-reg connect -d",
- {loglevel:"info",registry:null},["ls","connect"]]
- ,["ls ---s foo",{loglevel:"silent"},["ls","foo"]]
- ,["ls --registry blargle", {}, ["ls"]]
- ,["--no-registry", {registry:null}, []]
- ,["--no-color true", {color:false}, []]
- ,["--no-color false", {color:true}, []]
- ,["--no-color", {color:false}, []]
- ,["--color false", {color:false}, []]
- ,["--color --logfd 7", {logfd:7,color:true}, []]
- ,["--color=true", {color:true}, []]
- ,["--logfd=10", {logfd:10}, []]
- ,["--tmp=/tmp -tar=gtar",{tmp:"/tmp",tar:"gtar"},[]]
- ,["--tmp=tmp -tar=gtar",
- {tmp:path.resolve(process.cwd(), "tmp"),tar:"gtar"},[]]
- ,["--logfd x", {}, []]
- ,["a -true -- -no-false", {true:true},["a","-no-false"]]
- ,["a -no-false", {false:false},["a"]]
- ,["a -no-no-true", {true:true}, ["a"]]
- ,["a -no-no-no-false", {false:false}, ["a"]]
- ,["---NO-no-No-no-no-no-nO-no-no"+
- "-No-no-no-no-no-no-no-no-no"+
- "-no-no-no-no-NO-NO-no-no-no-no-no-no"+
- "-no-body-can-do-the-boogaloo-like-I-do"
- ,{"body-can-do-the-boogaloo-like-I-do":false}, []]
- ,["we are -no-strangers-to-love "+
- "--you-know=the-rules --and=so-do-i "+
- "---im-thinking-of=a-full-commitment "+
- "--no-you-would-get-this-from-any-other-guy "+
- "--no-gonna-give-you-up "+
- "-no-gonna-let-you-down=true "+
- "--no-no-gonna-run-around false "+
- "--desert-you=false "+
- "--make-you-cry false "+
- "--no-tell-a-lie "+
- "--no-no-and-hurt-you false"
- ,{"strangers-to-love":false
- ,"you-know":"the-rules"
- ,"and":"so-do-i"
- ,"you-would-get-this-from-any-other-guy":false
- ,"gonna-give-you-up":false
- ,"gonna-let-you-down":false
- ,"gonna-run-around":false
- ,"desert-you":false
- ,"make-you-cry":false
- ,"tell-a-lie":false
- ,"and-hurt-you":false
- },["we", "are"]]
- ,["-t one -t two -t three"
- ,{t: ["one", "two", "three"]}
- ,[]]
- ,["-t one -t null -t three four five null"
- ,{t: ["one", "null", "three"]}
- ,["four", "five", "null"]]
- ,["-t foo"
- ,{t:["foo"]}
- ,[]]
- ,["--no-t"
- ,{t:["false"]}
- ,[]]
- ,["-no-no-t"
- ,{t:["true"]}
- ,[]]
- ,["-aoa one -aoa null -aoa 100"
- ,{aoa:["one", null, 100]}
- ,[]]
- ,["-str 100"
- ,{str:"100"}
- ,[]]
- ,["--color always"
- ,{color:"always"}
- ,[]]
- ,["--no-nullstream"
- ,{nullstream:null}
- ,[]]
- ,["--nullstream false"
- ,{nullstream:null}
- ,[]]
- ,["--notadate=2011-01-25"
- ,{notadate: "2011-01-25"}
- ,[]]
- ,["--date 2011-01-25"
- ,{date: new Date("2011-01-25")}
- ,[]]
- ,["-cl 1"
- ,{config: true, length: 1}
- ,[]
- ,{config: Boolean, length: Number, clear: Boolean}
- ,{c: "--config", l: "--length"}]
- ,["--acount bla"
- ,{"acount":true}
- ,["bla"]
- ,{account: Boolean, credentials: Boolean, options: String}
- ,{a:"--account", c:"--credentials",o:"--options"}]
- ,["--clear"
- ,{clear:true}
- ,[]
- ,{clear:Boolean,con:Boolean,len:Boolean,exp:Boolean,add:Boolean,rep:Boolean}
- ,{c:"--con",l:"--len",e:"--exp",a:"--add",r:"--rep"}]
- ].forEach(function (test) {
- var argv = test[0].split(/\s+/)
- , opts = test[1]
- , rem = test[2]
- , actual = nopt(test[3] || types, test[4] || shorthands, argv, 0)
- , parsed = actual.argv
- delete actual.argv
- console.log(util.inspect(actual, false, 2, true), parsed.remain)
- for (var i in opts) {
- var e = JSON.stringify(opts[i])
- , a = JSON.stringify(actual[i] === undefined ? null : actual[i])
- if (e && typeof e === "object") {
- assert.deepEqual(e, a)
- } else {
- assert.equal(e, a)
- }
- }
- assert.deepEqual(rem, parsed.remain)
- })
-}
diff --git a/deps/npm/node_modules/nopt/package.json b/deps/npm/node_modules/nopt/package.json
index a605608cc..72aba5d36 100644
--- a/deps/npm/node_modules/nopt/package.json
+++ b/deps/npm/node_modules/nopt/package.json
@@ -1,6 +1,6 @@
{
"name": "nopt",
- "version": "2.1.1",
+ "version": "2.2.1",
"description": "Option parsing for Node, supporting types, shorthands, etc. Used by npm.",
"author": {
"name": "Isaac Z. Schlueter",
@@ -9,7 +9,7 @@
},
"main": "lib/nopt.js",
"scripts": {
- "test": "node lib/nopt.js"
+ "test": "tap test/*.js"
},
"repository": {
"type": "git",
@@ -25,8 +25,16 @@
"dependencies": {
"abbrev": "1"
},
- "readme": "If you want to write an option parser, and have it be good, there are\ntwo ways to do it. The Right Way, and the Wrong Way.\n\nThe Wrong Way is to sit down and write an option parser. We've all done\nthat.\n\nThe Right Way is to write some complex configurable program with so many\noptions that you go half-insane just trying to manage them all, and put\nit off with duct-tape solutions until you see exactly to the core of the\nproblem, and finally snap and write an awesome option parser.\n\nIf you want to write an option parser, don't write an option parser.\nWrite a package manager, or a source control system, or a service\nrestarter, or an operating system. You probably won't end up with a\ngood one of those, but if you don't give up, and you are relentless and\ndiligent enough in your procrastination, you may just end up with a very\nnice option parser.\n\n## USAGE\n\n // my-program.js\n var nopt = require(\"nopt\")\n , Stream = require(\"stream\").Stream\n , path = require(\"path\")\n , knownOpts = { \"foo\" : [String, null]\n , \"bar\" : [Stream, Number]\n , \"baz\" : path\n , \"bloo\" : [ \"big\", \"medium\", \"small\" ]\n , \"flag\" : Boolean\n , \"pick\" : Boolean\n , \"many\" : [String, Array]\n }\n , shortHands = { \"foofoo\" : [\"--foo\", \"Mr. Foo\"]\n , \"b7\" : [\"--bar\", \"7\"]\n , \"m\" : [\"--bloo\", \"medium\"]\n , \"p\" : [\"--pick\"]\n , \"f\" : [\"--flag\"]\n }\n // everything is optional.\n // knownOpts and shorthands default to {}\n // arg list defaults to process.argv\n // slice defaults to 2\n , parsed = nopt(knownOpts, shortHands, process.argv, 2)\n console.log(parsed)\n\nThis would give you support for any of the following:\n\n```bash\n$ node my-program.js --foo \"blerp\" --no-flag\n{ \"foo\" : \"blerp\", \"flag\" : false }\n\n$ node my-program.js ---bar 7 --foo \"Mr. Hand\" --flag\n{ bar: 7, foo: \"Mr. Hand\", flag: true }\n\n$ node my-program.js --foo \"blerp\" -f -----p\n{ foo: \"blerp\", flag: true, pick: true }\n\n$ node my-program.js -fp --foofoo\n{ foo: \"Mr. Foo\", flag: true, pick: true }\n\n$ node my-program.js --foofoo -- -fp # -- stops the flag parsing.\n{ foo: \"Mr. Foo\", argv: { remain: [\"-fp\"] } }\n\n$ node my-program.js --blatzk 1000 -fp # unknown opts are ok.\n{ blatzk: 1000, flag: true, pick: true }\n\n$ node my-program.js --blatzk true -fp # but they need a value\n{ blatzk: true, flag: true, pick: true }\n\n$ node my-program.js --no-blatzk -fp # unless they start with \"no-\"\n{ blatzk: false, flag: true, pick: true }\n\n$ node my-program.js --baz b/a/z # known paths are resolved.\n{ baz: \"/Users/isaacs/b/a/z\" }\n\n# if Array is one of the types, then it can take many\n# values, and will always be an array. The other types provided\n# specify what types are allowed in the list.\n\n$ node my-program.js --many 1 --many null --many foo\n{ many: [\"1\", \"null\", \"foo\"] }\n\n$ node my-program.js --many foo\n{ many: [\"foo\"] }\n```\n\nRead the tests at the bottom of `lib/nopt.js` for more examples of\nwhat this puppy can do.\n\n## Types\n\nThe following types are supported, and defined on `nopt.typeDefs`\n\n* String: A normal string. No parsing is done.\n* path: A file system path. Gets resolved against cwd if not absolute.\n* url: A url. If it doesn't parse, it isn't accepted.\n* Number: Must be numeric.\n* Date: Must parse as a date. If it does, and `Date` is one of the options,\n then it will return a Date object, not a string.\n* Boolean: Must be either `true` or `false`. If an option is a boolean,\n then it does not need a value, and its presence will imply `true` as\n the value. To negate boolean flags, do `--no-whatever` or `--whatever\n false`\n* NaN: Means that the option is strictly not allowed. Any value will\n fail.\n* Stream: An object matching the \"Stream\" class in node. Valuable\n for use when validating programmatically. (npm uses this to let you\n supply any WriteStream on the `outfd` and `logfd` config options.)\n* Array: If `Array` is specified as one of the types, then the value\n will be parsed as a list of options. This means that multiple values\n can be specified, and that the value will always be an array.\n\nIf a type is an array of values not on this list, then those are\nconsidered valid values. For instance, in the example above, the\n`--bloo` option can only be one of `\"big\"`, `\"medium\"`, or `\"small\"`,\nand any other value will be rejected.\n\nWhen parsing unknown fields, `\"true\"`, `\"false\"`, and `\"null\"` will be\ninterpreted as their JavaScript equivalents, and numeric values will be\ninterpreted as a number.\n\nYou can also mix types and values, or multiple types, in a list. For\ninstance `{ blah: [Number, null] }` would allow a value to be set to\neither a Number or null. When types are ordered, this implies a\npreference, and the first type that can be used to properly interpret\nthe value will be used.\n\nTo define a new type, add it to `nopt.typeDefs`. Each item in that\nhash is an object with a `type` member and a `validate` method. The\n`type` member is an object that matches what goes in the type list. The\n`validate` method is a function that gets called with `validate(data,\nkey, val)`. Validate methods should assign `data[key]` to the valid\nvalue of `val` if it can be handled properly, or return boolean\n`false` if it cannot.\n\nYou can also call `nopt.clean(data, types, typeDefs)` to clean up a\nconfig object and remove its invalid properties.\n\n## Error Handling\n\nBy default, nopt outputs a warning to standard error when invalid\noptions are found. You can change this behavior by assigning a method\nto `nopt.invalidHandler`. This method will be called with\nthe offending `nopt.invalidHandler(key, val, types)`.\n\nIf no `nopt.invalidHandler` is assigned, then it will console.error\nits whining. If it is assigned to boolean `false` then the warning is\nsuppressed.\n\n## Abbreviations\n\nYes, they are supported. If you define options like this:\n\n```javascript\n{ \"foolhardyelephants\" : Boolean\n, \"pileofmonkeys\" : Boolean }\n```\n\nThen this will work:\n\n```bash\nnode program.js --foolhar --pil\nnode program.js --no-f --pileofmon\n# etc.\n```\n\n## Shorthands\n\nShorthands are a hash of shorter option names to a snippet of args that\nthey expand to.\n\nIf multiple one-character shorthands are all combined, and the\ncombination does not unambiguously match any other option or shorthand,\nthen they will be broken up into their constituent parts. For example:\n\n```json\n{ \"s\" : [\"--loglevel\", \"silent\"]\n, \"g\" : \"--global\"\n, \"f\" : \"--force\"\n, \"p\" : \"--parseable\"\n, \"l\" : \"--long\"\n}\n```\n\n```bash\nnpm ls -sgflp\n# just like doing this:\nnpm ls --loglevel silent --global --force --long --parseable\n```\n\n## The Rest of the args\n\nThe config object returned by nopt is given a special member called\n`argv`, which is an object with the following fields:\n\n* `remain`: The remaining args after all the parsing has occurred.\n* `original`: The args as they originally appeared.\n* `cooked`: The args after flags and shorthands are expanded.\n\n## Slicing\n\nNode programs are called with more or less the exact argv as it appears\nin C land, after the v8 and node-specific options have been plucked off.\nAs such, `argv[0]` is always `node` and `argv[1]` is always the\nJavaScript program being run.\n\nThat's usually not very useful to you. So they're sliced off by\ndefault. If you want them, then you can pass in `0` as the last\nargument, or any other number that you'd like to slice off the start of\nthe list.\n",
+ "devDependencies": {
+ "tap": "~0.4.8"
+ },
+ "readme": "If you want to write an option parser, and have it be good, there are\ntwo ways to do it. The Right Way, and the Wrong Way.\n\nThe Wrong Way is to sit down and write an option parser. We've all done\nthat.\n\nThe Right Way is to write some complex configurable program with so many\noptions that you go half-insane just trying to manage them all, and put\nit off with duct-tape solutions until you see exactly to the core of the\nproblem, and finally snap and write an awesome option parser.\n\nIf you want to write an option parser, don't write an option parser.\nWrite a package manager, or a source control system, or a service\nrestarter, or an operating system. You probably won't end up with a\ngood one of those, but if you don't give up, and you are relentless and\ndiligent enough in your procrastination, you may just end up with a very\nnice option parser.\n\n## USAGE\n\n // my-program.js\n var nopt = require(\"nopt\")\n , Stream = require(\"stream\").Stream\n , path = require(\"path\")\n , knownOpts = { \"foo\" : [String, null]\n , \"bar\" : [Stream, Number]\n , \"baz\" : path\n , \"bloo\" : [ \"big\", \"medium\", \"small\" ]\n , \"flag\" : Boolean\n , \"pick\" : Boolean\n , \"many\" : [String, Array]\n }\n , shortHands = { \"foofoo\" : [\"--foo\", \"Mr. Foo\"]\n , \"b7\" : [\"--bar\", \"7\"]\n , \"m\" : [\"--bloo\", \"medium\"]\n , \"p\" : [\"--pick\"]\n , \"f\" : [\"--flag\"]\n }\n // everything is optional.\n // knownOpts and shorthands default to {}\n // arg list defaults to process.argv\n // slice defaults to 2\n , parsed = nopt(knownOpts, shortHands, process.argv, 2)\n console.log(parsed)\n\nThis would give you support for any of the following:\n\n```bash\n$ node my-program.js --foo \"blerp\" --no-flag\n{ \"foo\" : \"blerp\", \"flag\" : false }\n\n$ node my-program.js ---bar 7 --foo \"Mr. Hand\" --flag\n{ bar: 7, foo: \"Mr. Hand\", flag: true }\n\n$ node my-program.js --foo \"blerp\" -f -----p\n{ foo: \"blerp\", flag: true, pick: true }\n\n$ node my-program.js -fp --foofoo\n{ foo: \"Mr. Foo\", flag: true, pick: true }\n\n$ node my-program.js --foofoo -- -fp # -- stops the flag parsing.\n{ foo: \"Mr. Foo\", argv: { remain: [\"-fp\"] } }\n\n$ node my-program.js --blatzk -fp # unknown opts are ok.\n{ blatzk: true, flag: true, pick: true }\n\n$ node my-program.js --blatzk=1000 -fp # but you need to use = if they have a value\n{ blatzk: 1000, flag: true, pick: true }\n\n$ node my-program.js --no-blatzk -fp # unless they start with \"no-\"\n{ blatzk: false, flag: true, pick: true }\n\n$ node my-program.js --baz b/a/z # known paths are resolved.\n{ baz: \"/Users/isaacs/b/a/z\" }\n\n# if Array is one of the types, then it can take many\n# values, and will always be an array. The other types provided\n# specify what types are allowed in the list.\n\n$ node my-program.js --many 1 --many null --many foo\n{ many: [\"1\", \"null\", \"foo\"] }\n\n$ node my-program.js --many foo\n{ many: [\"foo\"] }\n```\n\nRead the tests at the bottom of `lib/nopt.js` for more examples of\nwhat this puppy can do.\n\n## Types\n\nThe following types are supported, and defined on `nopt.typeDefs`\n\n* String: A normal string. No parsing is done.\n* path: A file system path. Gets resolved against cwd if not absolute.\n* url: A url. If it doesn't parse, it isn't accepted.\n* Number: Must be numeric.\n* Date: Must parse as a date. If it does, and `Date` is one of the options,\n then it will return a Date object, not a string.\n* Boolean: Must be either `true` or `false`. If an option is a boolean,\n then it does not need a value, and its presence will imply `true` as\n the value. To negate boolean flags, do `--no-whatever` or `--whatever\n false`\n* NaN: Means that the option is strictly not allowed. Any value will\n fail.\n* Stream: An object matching the \"Stream\" class in node. Valuable\n for use when validating programmatically. (npm uses this to let you\n supply any WriteStream on the `outfd` and `logfd` config options.)\n* Array: If `Array` is specified as one of the types, then the value\n will be parsed as a list of options. This means that multiple values\n can be specified, and that the value will always be an array.\n\nIf a type is an array of values not on this list, then those are\nconsidered valid values. For instance, in the example above, the\n`--bloo` option can only be one of `\"big\"`, `\"medium\"`, or `\"small\"`,\nand any other value will be rejected.\n\nWhen parsing unknown fields, `\"true\"`, `\"false\"`, and `\"null\"` will be\ninterpreted as their JavaScript equivalents, and numeric values will be\ninterpreted as a number.\n\nYou can also mix types and values, or multiple types, in a list. For\ninstance `{ blah: [Number, null] }` would allow a value to be set to\neither a Number or null. When types are ordered, this implies a\npreference, and the first type that can be used to properly interpret\nthe value will be used.\n\nTo define a new type, add it to `nopt.typeDefs`. Each item in that\nhash is an object with a `type` member and a `validate` method. The\n`type` member is an object that matches what goes in the type list. The\n`validate` method is a function that gets called with `validate(data,\nkey, val)`. Validate methods should assign `data[key]` to the valid\nvalue of `val` if it can be handled properly, or return boolean\n`false` if it cannot.\n\nYou can also call `nopt.clean(data, types, typeDefs)` to clean up a\nconfig object and remove its invalid properties.\n\n## Error Handling\n\nBy default, nopt outputs a warning to standard error when invalid\noptions are found. You can change this behavior by assigning a method\nto `nopt.invalidHandler`. This method will be called with\nthe offending `nopt.invalidHandler(key, val, types)`.\n\nIf no `nopt.invalidHandler` is assigned, then it will console.error\nits whining. If it is assigned to boolean `false` then the warning is\nsuppressed.\n\n## Abbreviations\n\nYes, they are supported. If you define options like this:\n\n```javascript\n{ \"foolhardyelephants\" : Boolean\n, \"pileofmonkeys\" : Boolean }\n```\n\nThen this will work:\n\n```bash\nnode program.js --foolhar --pil\nnode program.js --no-f --pileofmon\n# etc.\n```\n\n## Shorthands\n\nShorthands are a hash of shorter option names to a snippet of args that\nthey expand to.\n\nIf multiple one-character shorthands are all combined, and the\ncombination does not unambiguously match any other option or shorthand,\nthen they will be broken up into their constituent parts. For example:\n\n```json\n{ \"s\" : [\"--loglevel\", \"silent\"]\n, \"g\" : \"--global\"\n, \"f\" : \"--force\"\n, \"p\" : \"--parseable\"\n, \"l\" : \"--long\"\n}\n```\n\n```bash\nnpm ls -sgflp\n# just like doing this:\nnpm ls --loglevel silent --global --force --long --parseable\n```\n\n## The Rest of the args\n\nThe config object returned by nopt is given a special member called\n`argv`, which is an object with the following fields:\n\n* `remain`: The remaining args after all the parsing has occurred.\n* `original`: The args as they originally appeared.\n* `cooked`: The args after flags and shorthands are expanded.\n\n## Slicing\n\nNode programs are called with more or less the exact argv as it appears\nin C land, after the v8 and node-specific options have been plucked off.\nAs such, `argv[0]` is always `node` and `argv[1]` is always the\nJavaScript program being run.\n\nThat's usually not very useful to you. So they're sliced off by\ndefault. If you want them, then you can pass in `0` as the last\nargument, or any other number that you'd like to slice off the start of\nthe list.\n",
"readmeFilename": "README.md",
- "_id": "nopt@2.1.1",
+ "bugs": {
+ "url": "https://github.com/isaacs/nopt/issues"
+ },
+ "homepage": "https://github.com/isaacs/nopt",
+ "_id": "nopt@2.2.1",
+ "_shasum": "2aa09b7d1768487b3b89a9c5aa52335bff0baea7",
"_from": "nopt@latest"
}
diff --git a/deps/npm/node_modules/nopt/test/basic.js b/deps/npm/node_modules/nopt/test/basic.js
new file mode 100644
index 000000000..b31dccf54
--- /dev/null
+++ b/deps/npm/node_modules/nopt/test/basic.js
@@ -0,0 +1,243 @@
+var nopt = require("../")
+ , test = require('tap').test
+
+
+test("passing a string results in a string", function (t) {
+ var parsed = nopt({ key: String }, {}, ["--key", "myvalue"], 0)
+ t.same(parsed.key, "myvalue")
+ t.end()
+})
+
+// https://github.com/npm/nopt/issues/31
+test("Empty String results in empty string, not true", function (t) {
+ var parsed = nopt({ empty: String }, {}, ["--empty"], 0)
+ t.same(parsed.empty, "")
+ t.end()
+})
+
+test("~ path is resolved to $HOME", function (t) {
+ var path = require("path")
+ if (!process.env.HOME) process.env.HOME = "/tmp"
+ var parsed = nopt({key: path}, {}, ["--key=~/val"], 0)
+ t.same(parsed.key, path.resolve(process.env.HOME, "val"))
+ t.end()
+})
+
+test("other tests", function (t) {
+
+ var util = require("util")
+ , Stream = require("stream")
+ , path = require("path")
+ , url = require("url")
+
+ , shorthands =
+ { s : ["--loglevel", "silent"]
+ , d : ["--loglevel", "info"]
+ , dd : ["--loglevel", "verbose"]
+ , ddd : ["--loglevel", "silly"]
+ , noreg : ["--no-registry"]
+ , reg : ["--registry"]
+ , "no-reg" : ["--no-registry"]
+ , silent : ["--loglevel", "silent"]
+ , verbose : ["--loglevel", "verbose"]
+ , h : ["--usage"]
+ , H : ["--usage"]
+ , "?" : ["--usage"]
+ , help : ["--usage"]
+ , v : ["--version"]
+ , f : ["--force"]
+ , desc : ["--description"]
+ , "no-desc" : ["--no-description"]
+ , "local" : ["--no-global"]
+ , l : ["--long"]
+ , p : ["--parseable"]
+ , porcelain : ["--parseable"]
+ , g : ["--global"]
+ }
+
+ , types =
+ { aoa: Array
+ , nullstream: [null, Stream]
+ , date: Date
+ , str: String
+ , browser : String
+ , cache : path
+ , color : ["always", Boolean]
+ , depth : Number
+ , description : Boolean
+ , dev : Boolean
+ , editor : path
+ , force : Boolean
+ , global : Boolean
+ , globalconfig : path
+ , group : [String, Number]
+ , gzipbin : String
+ , logfd : [Number, Stream]
+ , loglevel : ["silent","win","error","warn","info","verbose","silly"]
+ , long : Boolean
+ , "node-version" : [false, String]
+ , npaturl : url
+ , npat : Boolean
+ , "onload-script" : [false, String]
+ , outfd : [Number, Stream]
+ , parseable : Boolean
+ , pre: Boolean
+ , prefix: path
+ , proxy : url
+ , "rebuild-bundle" : Boolean
+ , registry : url
+ , searchopts : String
+ , searchexclude: [null, String]
+ , shell : path
+ , t: [Array, String]
+ , tag : String
+ , tar : String
+ , tmp : path
+ , "unsafe-perm" : Boolean
+ , usage : Boolean
+ , user : String
+ , username : String
+ , userconfig : path
+ , version : Boolean
+ , viewer: path
+ , _exit : Boolean
+ , path: path
+ }
+
+ ; [["-v", {version:true}, []]
+ ,["---v", {version:true}, []]
+ ,["ls -s --no-reg connect -d",
+ {loglevel:"info",registry:null},["ls","connect"]]
+ ,["ls ---s foo",{loglevel:"silent"},["ls","foo"]]
+ ,["ls --registry blargle", {}, ["ls"]]
+ ,["--no-registry", {registry:null}, []]
+ ,["--no-color true", {color:false}, []]
+ ,["--no-color false", {color:true}, []]
+ ,["--no-color", {color:false}, []]
+ ,["--color false", {color:false}, []]
+ ,["--color --logfd 7", {logfd:7,color:true}, []]
+ ,["--color=true", {color:true}, []]
+ ,["--logfd=10", {logfd:10}, []]
+ ,["--tmp=/tmp -tar=gtar",{tmp:"/tmp",tar:"gtar"},[]]
+ ,["--tmp=tmp -tar=gtar",
+ {tmp:path.resolve(process.cwd(), "tmp"),tar:"gtar"},[]]
+ ,["--logfd x", {}, []]
+ ,["a -true -- -no-false", {true:true},["a","-no-false"]]
+ ,["a -no-false", {false:false},["a"]]
+ ,["a -no-no-true", {true:true}, ["a"]]
+ ,["a -no-no-no-false", {false:false}, ["a"]]
+ ,["---NO-no-No-no-no-no-nO-no-no"+
+ "-No-no-no-no-no-no-no-no-no"+
+ "-no-no-no-no-NO-NO-no-no-no-no-no-no"+
+ "-no-body-can-do-the-boogaloo-like-I-do"
+ ,{"body-can-do-the-boogaloo-like-I-do":false}, []]
+ ,["we are -no-strangers-to-love "+
+ "--you-know=the-rules --and=so-do-i "+
+ "---im-thinking-of=a-full-commitment "+
+ "--no-you-would-get-this-from-any-other-guy "+
+ "--no-gonna-give-you-up "+
+ "-no-gonna-let-you-down=true "+
+ "--no-no-gonna-run-around false "+
+ "--desert-you=false "+
+ "--make-you-cry false "+
+ "--no-tell-a-lie "+
+ "--no-no-and-hurt-you false"
+ ,{"strangers-to-love":false
+ ,"you-know":"the-rules"
+ ,"and":"so-do-i"
+ ,"you-would-get-this-from-any-other-guy":false
+ ,"gonna-give-you-up":false
+ ,"gonna-let-you-down":false
+ ,"gonna-run-around":false
+ ,"desert-you":false
+ ,"make-you-cry":false
+ ,"tell-a-lie":false
+ ,"and-hurt-you":false
+ },["we", "are"]]
+ ,["-t one -t two -t three"
+ ,{t: ["one", "two", "three"]}
+ ,[]]
+ ,["-t one -t null -t three four five null"
+ ,{t: ["one", "null", "three"]}
+ ,["four", "five", "null"]]
+ ,["-t foo"
+ ,{t:["foo"]}
+ ,[]]
+ ,["--no-t"
+ ,{t:["false"]}
+ ,[]]
+ ,["-no-no-t"
+ ,{t:["true"]}
+ ,[]]
+ ,["-aoa one -aoa null -aoa 100"
+ ,{aoa:["one", null, 100]}
+ ,[]]
+ ,["-str 100"
+ ,{str:"100"}
+ ,[]]
+ ,["--color always"
+ ,{color:"always"}
+ ,[]]
+ ,["--no-nullstream"
+ ,{nullstream:null}
+ ,[]]
+ ,["--nullstream false"
+ ,{nullstream:null}
+ ,[]]
+ ,["--notadate=2011-01-25"
+ ,{notadate: "2011-01-25"}
+ ,[]]
+ ,["--date 2011-01-25"
+ ,{date: new Date("2011-01-25")}
+ ,[]]
+ ,["-cl 1"
+ ,{config: true, length: 1}
+ ,[]
+ ,{config: Boolean, length: Number, clear: Boolean}
+ ,{c: "--config", l: "--length"}]
+ ,["--acount bla"
+ ,{"acount":true}
+ ,["bla"]
+ ,{account: Boolean, credentials: Boolean, options: String}
+ ,{a:"--account", c:"--credentials",o:"--options"}]
+ ,["--clear"
+ ,{clear:true}
+ ,[]
+ ,{clear:Boolean,con:Boolean,len:Boolean,exp:Boolean,add:Boolean,rep:Boolean}
+ ,{c:"--con",l:"--len",e:"--exp",a:"--add",r:"--rep"}]
+ ,["--file -"
+ ,{"file":"-"}
+ ,[]
+ ,{file:String}
+ ,{}]
+ ,["--file -"
+ ,{"file":true}
+ ,["-"]
+ ,{file:Boolean}
+ ,{}]
+ ,["--path"
+ ,{"path":null}
+ ,[]]
+ ,["--path ."
+ ,{"path":process.cwd()}
+ ,[]]
+ ].forEach(function (test) {
+ var argv = test[0].split(/\s+/)
+ , opts = test[1]
+ , rem = test[2]
+ , actual = nopt(test[3] || types, test[4] || shorthands, argv, 0)
+ , parsed = actual.argv
+ delete actual.argv
+ for (var i in opts) {
+ var e = JSON.stringify(opts[i])
+ , a = JSON.stringify(actual[i] === undefined ? null : actual[i])
+ if (e && typeof e === "object") {
+ t.deepEqual(e, a)
+ } else {
+ t.equal(e, a)
+ }
+ }
+ t.deepEqual(rem, parsed.remain)
+ })
+ t.end()
+})
diff --git a/deps/npm/node_modules/npm-install-checks/LICENSE b/deps/npm/node_modules/npm-install-checks/LICENSE
new file mode 100644
index 000000000..1a8fdb735
--- /dev/null
+++ b/deps/npm/node_modules/npm-install-checks/LICENSE
@@ -0,0 +1,234 @@
+Copyright (c) Robert Kowalski ("Author")
+All rights reserved.
+
+
+The BSD License
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+
+1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+
+2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+This uses parts of npm, (c) Isaac Z. Schlueter, under the following license:
+
+
+The Artistic License 2.0
+
+Copyright (c) 2000-2006, The Perl Foundation.
+
+Everyone is permitted to copy and distribute verbatim copies
+of this license document, but changing it is not allowed.
+
+Preamble
+
+This license establishes the terms under which a given free software
+Package may be copied, modified, distributed, and/or redistributed.
+The intent is that the Copyright Holder maintains some artistic
+control over the development of that Package while still keeping the
+Package available as open source and free software.
+
+You are always permitted to make arrangements wholly outside of this
+license directly with the Copyright Holder of a given Package. If the
+terms of this license do not permit the full use that you propose to
+make of the Package, you should contact the Copyright Holder and seek
+a different licensing arrangement.
+
+Definitions
+
+ "Copyright Holder" means the individual(s) or organization(s)
+ named in the copyright notice for the entire Package.
+
+ "Contributor" means any party that has contributed code or other
+ material to the Package, in accordance with the Copyright Holder's
+ procedures.
+
+ "You" and "your" means any person who would like to copy,
+ distribute, or modify the Package.
+
+ "Package" means the collection of files distributed by the
+ Copyright Holder, and derivatives of that collection and/or of
+ those files. A given Package may consist of either the Standard
+ Version, or a Modified Version.
+
+ "Distribute" means providing a copy of the Package or making it
+ accessible to anyone else, or in the case of a company or
+ organization, to others outside of your company or organization.
+
+ "Distributor Fee" means any fee that you charge for Distributing
+ this Package or providing support for this Package to another
+ party. It does not mean licensing fees.
+
+ "Standard Version" refers to the Package if it has not been
+ modified, or has been modified only in ways explicitly requested
+ by the Copyright Holder.
+
+ "Modified Version" means the Package, if it has been changed, and
+ such changes were not explicitly requested by the Copyright
+ Holder.
+
+ "Original License" means this Artistic License as Distributed with
+ the Standard Version of the Package, in its current version or as
+ it may be modified by The Perl Foundation in the future.
+
+ "Source" form means the source code, documentation source, and
+ configuration files for the Package.
+
+ "Compiled" form means the compiled bytecode, object code, binary,
+ or any other form resulting from mechanical transformation or
+ translation of the Source form.
+
+
+Permission for Use and Modification Without Distribution
+
+(1) You are permitted to use the Standard Version and create and use
+Modified Versions for any purpose without restriction, provided that
+you do not Distribute the Modified Version.
+
+
+Permissions for Redistribution of the Standard Version
+
+(2) You may Distribute verbatim copies of the Source form of the
+Standard Version of this Package in any medium without restriction,
+either gratis or for a Distributor Fee, provided that you duplicate
+all of the original copyright notices and associated disclaimers. At
+your discretion, such verbatim copies may or may not include a
+Compiled form of the Package.
+
+(3) You may apply any bug fixes, portability changes, and other
+modifications made available from the Copyright Holder. The resulting
+Package will still be considered the Standard Version, and as such
+will be subject to the Original License.
+
+
+Distribution of Modified Versions of the Package as Source
+
+(4) You may Distribute your Modified Version as Source (either gratis
+or for a Distributor Fee, and with or without a Compiled form of the
+Modified Version) provided that you clearly document how it differs
+from the Standard Version, including, but not limited to, documenting
+any non-standard features, executables, or modules, and provided that
+you do at least ONE of the following:
+
+ (a) make the Modified Version available to the Copyright Holder
+ of the Standard Version, under the Original License, so that the
+ Copyright Holder may include your modifications in the Standard
+ Version.
+
+ (b) ensure that installation of your Modified Version does not
+ prevent the user installing or running the Standard Version. In
+ addition, the Modified Version must bear a name that is different
+ from the name of the Standard Version.
+
+ (c) allow anyone who receives a copy of the Modified Version to
+ make the Source form of the Modified Version available to others
+ under
+
+ (i) the Original License or
+
+ (ii) a license that permits the licensee to freely copy,
+ modify and redistribute the Modified Version using the same
+ licensing terms that apply to the copy that the licensee
+ received, and requires that the Source form of the Modified
+ Version, and of any works derived from it, be made freely
+ available in that license fees are prohibited but Distributor
+ Fees are allowed.
+
+
+Distribution of Compiled Forms of the Standard Version
+or Modified Versions without the Source
+
+(5) You may Distribute Compiled forms of the Standard Version without
+the Source, provided that you include complete instructions on how to
+get the Source of the Standard Version. Such instructions must be
+valid at the time of your distribution. If these instructions, at any
+time while you are carrying out such distribution, become invalid, you
+must provide new instructions on demand or cease further distribution.
+If you provide valid instructions or cease distribution within thirty
+days after you become aware that the instructions are invalid, then
+you do not forfeit any of your rights under this license.
+
+(6) You may Distribute a Modified Version in Compiled form without
+the Source, provided that you comply with Section 4 with respect to
+the Source of the Modified Version.
+
+
+Aggregating or Linking the Package
+
+(7) You may aggregate the Package (either the Standard Version or
+Modified Version) with other packages and Distribute the resulting
+aggregation provided that you do not charge a licensing fee for the
+Package. Distributor Fees are permitted, and licensing fees for other
+components in the aggregation are permitted. The terms of this license
+apply to the use and Distribution of the Standard or Modified Versions
+as included in the aggregation.
+
+(8) You are permitted to link Modified and Standard Versions with
+other works, to embed the Package in a larger work of your own, or to
+build stand-alone binary or bytecode versions of applications that
+include the Package, and Distribute the result without restriction,
+provided the result does not expose a direct interface to the Package.
+
+
+Items That are Not Considered Part of a Modified Version
+
+(9) Works (including, but not limited to, modules and scripts) that
+merely extend or make use of the Package, do not, by themselves, cause
+the Package to be a Modified Version. In addition, such works are not
+considered parts of the Package itself, and are not subject to the
+terms of this license.
+
+
+General Provisions
+
+(10) Any use, modification, and distribution of the Standard or
+Modified Versions is governed by this Artistic License. By using,
+modifying or distributing the Package, you accept this license. Do not
+use, modify, or distribute the Package, if you do not accept this
+license.
+
+(11) If your Modified Version has been derived from a Modified
+Version made by someone other than you, you are nevertheless required
+to ensure that your Modified Version complies with the requirements of
+this license.
+
+(12) This license does not grant you the right to use any trademark,
+service mark, tradename, or logo of the Copyright Holder.
+
+(13) This license includes the non-exclusive, worldwide,
+free-of-charge patent license to make, have made, use, offer to sell,
+sell, import and otherwise transfer the Package with respect to any
+patent claims licensable by the Copyright Holder that are necessarily
+infringed by the Package. If you institute patent litigation
+(including a cross-claim or counterclaim) against any party alleging
+that the Package constitutes direct or contributory patent
+infringement, then this Artistic License to you shall terminate on the
+date that such litigation is filed.
+
+(14) Disclaimer of Warranty:
+THE PACKAGE IS PROVIDED BY THE COPYRIGHT HOLDER AND CONTRIBUTORS "AS
+IS' AND WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES. THE IMPLIED
+WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR
+NON-INFRINGEMENT ARE DISCLAIMED TO THE EXTENT PERMITTED BY YOUR LOCAL
+LAW. UNLESS REQUIRED BY LAW, NO COPYRIGHT HOLDER OR CONTRIBUTOR WILL
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
+DAMAGES ARISING IN ANY WAY OUT OF THE USE OF THE PACKAGE, EVEN IF
+ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/deps/npm/node_modules/npm-install-checks/README.md b/deps/npm/node_modules/npm-install-checks/README.md
new file mode 100644
index 000000000..7da4af148
--- /dev/null
+++ b/deps/npm/node_modules/npm-install-checks/README.md
@@ -0,0 +1,25 @@
+# npm-install-checks
+
+A package that contains checks that npm runs during the installation.
+
+## API
+
+### .checkEngine(target, npmVer, nodeVer, force, strict, cb)
+Check if node/npm version is supported by the package.
+
+Error type: `ENOTSUP`
+
+### .checkPlatform(target, force, cb)
+Check if OS/Arch is supported by the package.
+
+Error type: `EBADPLATFORM`
+
+### .checkCycle(target, ancestors, cb)
+Check for cyclic dependencies.
+
+Error type: `ECYCLE`
+
+### .checkGit(folder, cb)
+Check if a folder is a .git folder.
+
+Error type: `EISGIT`
diff --git a/deps/npm/node_modules/npm-install-checks/index.js b/deps/npm/node_modules/npm-install-checks/index.js
new file mode 100644
index 000000000..10f214fa9
--- /dev/null
+++ b/deps/npm/node_modules/npm-install-checks/index.js
@@ -0,0 +1,146 @@
+var fs = require("fs")
+var path = require("path")
+var log = require("npmlog")
+var semver = require("semver")
+
+exports.checkEngine = checkEngine
+function checkEngine (target, npmVer, nodeVer, force, strict, cb) {
+ var nodev = force ? null : nodeVer
+ , strict = strict || target.engineStrict
+ , eng = target.engines
+ if (!eng) return cb()
+ if (nodev && eng.node && !semver.satisfies(nodev, eng.node)
+ || eng.npm && !semver.satisfies(npmVer, eng.npm)) {
+
+ if (strict) {
+ var er = new Error("Unsupported")
+ er.code = "ENOTSUP"
+ er.required = eng
+ er.pkgid = target._id
+ return cb(er)
+ } else {
+ log.warn( "engine", "%s: wanted: %j (current: %j)"
+ , target._id, eng, {node: nodev, npm: npmVer} )
+ }
+ }
+ return cb()
+}
+
+exports.checkPlatform = checkPlatform
+function checkPlatform (target, force, cb) {
+ var platform = process.platform
+ , arch = process.arch
+ , osOk = true
+ , cpuOk = true
+
+ if (force) {
+ return cb()
+ }
+
+ if (target.os) {
+ osOk = checkList(platform, target.os)
+ }
+ if (target.cpu) {
+ cpuOk = checkList(arch, target.cpu)
+ }
+ if (!osOk || !cpuOk) {
+ var er = new Error("Unsupported")
+ er.code = "EBADPLATFORM"
+ er.os = target.os || ['any']
+ er.cpu = target.cpu || ['any']
+ er.pkgid = target._id
+ return cb(er)
+ }
+ return cb()
+}
+
+function checkList (value, list) {
+ var tmp
+ , match = false
+ , blc = 0
+ if (typeof list === "string") {
+ list = [list]
+ }
+ if (list.length === 1 && list[0] === "any") {
+ return true
+ }
+ for (var i = 0; i < list.length; ++i) {
+ tmp = list[i]
+ if (tmp[0] === '!') {
+ tmp = tmp.slice(1)
+ if (tmp === value) {
+ return false
+ }
+ ++blc
+ } else {
+ match = match || tmp === value
+ }
+ }
+ return match || blc === list.length
+}
+
+exports.checkCycle = checkCycle
+function checkCycle (target, ancestors, cb) {
+ // there are some very rare and pathological edge-cases where
+ // a cycle can cause npm to try to install a never-ending tree
+ // of stuff.
+ // Simplest:
+ //
+ // A -> B -> A' -> B' -> A -> B -> A' -> B' -> A -> ...
+ //
+ // Solution: Simply flat-out refuse to install any name@version
+ // that is already in the prototype tree of the ancestors object.
+ // A more correct, but more complex, solution would be to symlink
+ // the deeper thing into the new location.
+ // Will do that if anyone whines about this irl.
+ //
+ // Note: `npm install foo` inside of the `foo` package will abort
+ // earlier if `--force` is not set. However, if it IS set, then
+ // we need to still fail here, but just skip the first level. Of
+ // course, it'll still fail eventually if it's a true cycle, and
+ // leave things in an undefined state, but that's what is to be
+ // expected when `--force` is used. That is why getPrototypeOf
+ // is used *twice* here: to skip the first level of repetition.
+
+ var p = Object.getPrototypeOf(Object.getPrototypeOf(ancestors))
+ , name = target.name
+ , version = target.version
+ while (p && p !== Object.prototype && p[name] !== version) {
+ p = Object.getPrototypeOf(p)
+ }
+ if (p[name] !== version) return cb()
+
+ var er = new Error("Unresolvable cycle detected")
+ var tree = [target._id, JSON.parse(JSON.stringify(ancestors))]
+ , t = Object.getPrototypeOf(ancestors)
+ while (t && t !== Object.prototype) {
+ if (t === p) t.THIS_IS_P = true
+ tree.push(JSON.parse(JSON.stringify(t)))
+ t = Object.getPrototypeOf(t)
+ }
+ log.verbose("unresolvable dependency tree", tree)
+ er.pkgid = target._id
+ er.code = "ECYCLE"
+ return cb(er)
+}
+
+exports.checkGit = checkGit
+function checkGit (folder, cb) {
+ // if it's a git repo then don't touch it!
+ fs.lstat(folder, function (er, s) {
+ if (er || !s.isDirectory()) return cb()
+ else checkGit_(folder, cb)
+ })
+}
+
+function checkGit_ (folder, cb) {
+ fs.stat(path.resolve(folder, ".git"), function (er, s) {
+ if (!er && s.isDirectory()) {
+ var e = new Error("Appears to be a git repo or submodule.")
+ e.path = folder
+ e.code = "EISGIT"
+ return cb(e)
+ }
+ cb()
+ })
+}
diff --git a/deps/npm/node_modules/npm-install-checks/package.json b/deps/npm/node_modules/npm-install-checks/package.json
new file mode 100644
index 000000000..39b7adf99
--- /dev/null
+++ b/deps/npm/node_modules/npm-install-checks/package.json
@@ -0,0 +1,43 @@
+{
+ "name": "npm-install-checks",
+ "version": "1.0.0",
+ "description": "checks that npm runs during the installation of a module",
+ "main": "index.js",
+ "dependencies": {
+ "npmlog": "0.0.6",
+ "semver": "~2.2.1"
+ },
+ "devDependencies": {
+ "tap": "~0.4.8",
+ "rimraf": "~2.2.5",
+ "mkdirp": "~0.3.5"
+ },
+ "scripts": {
+ "test": "tap test/*.js"
+ },
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/robertkowalski/npm-install-checks.git"
+ },
+ "homepage": "https://github.com/robertkowalski/npm-install-checks",
+ "keywords": [
+ "npm,",
+ "install"
+ ],
+ "author": {
+ "name": "Robert Kowalski",
+ "email": "rok@kowalski.gd"
+ },
+ "license": "BSD-2-Clause",
+ "bugs": {
+ "url": "https://github.com/robertkowalski/npm-install-checks/issues"
+ },
+ "readme": "# npm-install-checks\n\nA package that contains checks that npm runs during the installation.\n\n## API\n\n### .checkEngine(target, npmVer, nodeVer, force, strict, cb)\nCheck if node/npm version is supported by the package.\n\nError type: `ENOTSUP`\n\n### .checkPlatform(target, force, cb)\nCheck if OS/Arch is supported by the package.\n\nError type: `EBADPLATFORM`\n\n### .checkCycle(target, ancestors, cb)\nCheck for cyclic dependencies.\n\nError type: `ECYCLE`\n\n### .checkGit(folder, cb)\nCheck if a folder is a .git folder.\n\nError type: `EISGIT`\n",
+ "readmeFilename": "README.md",
+ "_id": "npm-install-checks@1.0.0",
+ "dist": {
+ "shasum": "7e1469b5e0c693b2ae2a8830b5fc4e7bf76c88fd"
+ },
+ "_from": "npm-install-checks@1.0.0",
+ "_resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-1.0.0.tgz"
+}
diff --git a/deps/npm/node_modules/npm-install-checks/test/check-engine.js b/deps/npm/node_modules/npm-install-checks/test/check-engine.js
new file mode 100644
index 000000000..a16b13d7d
--- /dev/null
+++ b/deps/npm/node_modules/npm-install-checks/test/check-engine.js
@@ -0,0 +1,35 @@
+var test = require("tap").test
+var c = require("../index.js").checkEngine
+
+test("no engine defined", function (t) {
+ c({ engines: {}}, "1.1.2", "0.2.1", false, true, function (err) {
+ t.notOk(err, "no error present")
+ t.end()
+ })
+})
+
+test("node version too old", function (t) {
+ var target = { engines: { node: "0.10.24" }}
+ c(target, "1.1.2", "0.10.18", false, true, function (err) {
+ t.ok(err, "returns an error")
+ t.equals(err.required.node, "0.10.24")
+ t.end()
+ })
+})
+
+test("npm version too old", function (t) {
+ var target = { engines: { npm: "1.3.6" }}
+ c(target, "1.4.2", "0.2.1", false, true, function (err) {
+ t.ok(err, "returns an error")
+ t.equals(err.required.npm, "1.3.6")
+ t.end()
+ })
+})
+
+test("strict=false does not return an error", function (t) {
+ var target = { engines: { npm: "1.3.6" }}
+ c(target, "1.4.2", "0.2.1", false, false, function (err) {
+ t.notOk(err, "returns no error")
+ t.end()
+ })
+})
diff --git a/deps/npm/node_modules/npm-install-checks/test/check-git.js b/deps/npm/node_modules/npm-install-checks/test/check-git.js
new file mode 100644
index 000000000..d09d0b518
--- /dev/null
+++ b/deps/npm/node_modules/npm-install-checks/test/check-git.js
@@ -0,0 +1,31 @@
+var test = require("tap").test
+var c = require("../index.js").checkGit
+var fs = require("fs")
+var rimraf = require("rimraf")
+var mkdirp = require("mkdirp")
+var path = require("path")
+var gitFixturePath = path.resolve(__dirname, "out")
+
+test("is .git repo", function (t) {
+ mkdirp(gitFixturePath + "/.git", function () {
+ c(gitFixturePath, function (err) {
+ t.ok(err, "error present")
+ t.equal(err.code, "EISGIT")
+ t.end()
+ })
+ })
+})
+
+test("is not a .git repo", function (t) {
+ c(__dirname, function (err) {
+ t.notOk(err, "error not present")
+ t.end()
+ })
+})
+
+test("cleanup", function (t) {
+ rimraf(gitFixturePath, function () {
+ t.pass("cleanup")
+ t.end()
+ })
+})
diff --git a/deps/npm/node_modules/npm-install-checks/test/check-platform.js b/deps/npm/node_modules/npm-install-checks/test/check-platform.js
new file mode 100644
index 000000000..eeeb1bcef
--- /dev/null
+++ b/deps/npm/node_modules/npm-install-checks/test/check-platform.js
@@ -0,0 +1,44 @@
+var test = require("tap").test
+var c = require("../index.js").checkPlatform
+
+test("target cpu wrong", function (t) {
+ var target = {}
+ target.cpu = "enten-cpu"
+ target.os = "any"
+ c(target, false, function (err) {
+ t.ok(err, "error present")
+ t.equal(err.code, "EBADPLATFORM")
+ t.end()
+ })
+})
+
+test("os wrong", function (t) {
+ var target = {}
+ target.cpu = "any"
+ target.os = "enten-os"
+ c(target, false, function (err) {
+ t.ok(err, "error present")
+ t.equal(err.code, "EBADPLATFORM")
+ t.end()
+ })
+})
+
+test("nothing wrong", function (t) {
+ var target = {}
+ target.cpu = "any"
+ target.os = "any"
+ c(target, false, function (err) {
+ t.notOk(err, "no error present")
+ t.end()
+ })
+})
+
+test("force", function (t) {
+ var target = {}
+ target.cpu = "enten-cpu"
+ target.os = "any"
+ c(target, true, function (err) {
+ t.notOk(err, "no error present")
+ t.end()
+ })
+})
diff --git a/deps/npm/node_modules/npm-registry-client/README.md b/deps/npm/node_modules/npm-registry-client/README.md
index 534c40721..6cef754df 100644
--- a/deps/npm/node_modules/npm-registry-client/README.md
+++ b/deps/npm/node_modules/npm-registry-client/README.md
@@ -34,6 +34,9 @@ also be accepted.
* `tag` {String} The default tag to use when publishing new packages.
Default = `"latest"`
* `ca` {String} Cerficate signing authority certificates to trust.
+* `cert` {String} Client certificate (PEM encoded). Enable access
+ to servers that require client certificates
+* `key` {String} Private key (PEM encoded) for client certificate 'cert'
* `strict-ssl` {Boolean} Whether or not to be strict with SSL
certificates. Default = `true`
* `user-agent` {String} User agent header to send. Default =
@@ -82,6 +85,22 @@ around this. one.
Add a user account to the registry, or verify the credentials.
+# client.deprecate(name, version, message, cb)
+
+* `name` {String} The package name
+* `version` {String} Semver version range
+* `message` {String} The message to use as a deprecation warning
+* `cb` {Function}
+
+Deprecate a version of a package in the registry.
+
+# client.bugs(name, cb)
+
+* `name` {String} the name of the package
+* `cb` {Function}
+
+Get the url for bugs of a package
+
# client.get(url, [timeout], [nofollow], [staleOk], cb)
* `url` {String} The url path to fetch
diff --git a/deps/npm/node_modules/npm-registry-client/index.js b/deps/npm/node_modules/npm-registry-client/index.js
index c2d50b6c0..24c33ae44 100644
--- a/deps/npm/node_modules/npm-registry-client/index.js
+++ b/deps/npm/node_modules/npm-registry-client/index.js
@@ -1,4 +1,3 @@
-
// utilities for working with the js-registry site.
module.exports = RegClient
@@ -6,7 +5,6 @@ module.exports = RegClient
var fs = require('fs')
, url = require('url')
, path = require('path')
-, CouchLogin = require('couch-login')
, npmlog
try {
@@ -48,20 +46,6 @@ function RegClient (conf) {
}
if (!conf.get('cache')) throw new Error("Cache dir is required")
-
- var auth = this.conf.get('_auth')
- var alwaysAuth = this.conf.get('always-auth')
- if (auth && !alwaysAuth && registry) {
- // if we're always authing, then we just send the
- // user/pass on every thing. otherwise, create a
- // session, and use that.
- var token = this.conf.get('_token')
- this.couchLogin = new CouchLogin(registry, token)
- this.couchLogin.proxy = this.conf.get('proxy')
- this.couchLogin.strictSSL = this.conf.get('strict-ssl')
- this.couchLogin.ca = this.conf.get('ca')
- }
-
this.log = conf.log || conf.get('log') || npmlog
}
diff --git a/deps/npm/node_modules/npm-registry-client/lib/adduser.js b/deps/npm/node_modules/npm-registry-client/lib/adduser.js
index 7106e444d..a4581a6c8 100644
--- a/deps/npm/node_modules/npm-registry-client/lib/adduser.js
+++ b/deps/npm/node_modules/npm-registry-client/lib/adduser.js
@@ -24,8 +24,7 @@ function adduser (username, password, email, cb) {
var salt = crypto.randomBytes(30).toString('hex')
, userobj =
{ name : username
- , salt : salt
- , password_sha : sha(password + salt)
+ , password : password
, email : email
, _id : 'org.couchdb.user:'+username
, type : "user"
@@ -51,7 +50,7 @@ function adduser (username, password, email, cb) {
cb = done.call(this, cb, pre)
var logObj = Object.keys(userobj).map(function (k) {
- if (k === 'salt' || k === 'password_sha') return [k, 'XXXXX']
+ if (k === 'password') return [k, 'XXXXX']
return [k, userobj[k]]
}).reduce(function (s, kv) {
s[kv[0]] = kv[1]
@@ -81,13 +80,14 @@ function adduser (username, password, email, cb) {
this.log.verbose("adduser", "update existing user")
return this.request('GET'
- , '/-/user/org.couchdb.user:'+encodeURIComponent(username)
+ , '/-/user/org.couchdb.user:'+encodeURIComponent(username) +
+ '?write=true'
, function (er, data, json, response) {
if (er || data.error) {
return cb(er, data, json, response)
}
Object.keys(data).forEach(function (k) {
- if (!userobj[k]) {
+ if (!userobj[k] || k === 'roles') {
userobj[k] = data[k]
}
})
@@ -129,7 +129,7 @@ function done (cb, pre) {
this.log.warn("adduser", "Incorrect username or password\n"
+"You can reset your account by visiting:\n"
+"\n"
- +" http://admin.npmjs.org/reset\n")
+ +" https://npmjs.org/forgot\n")
}
return cb(error)
diff --git a/deps/npm/node_modules/npm-registry-client/lib/bugs.js b/deps/npm/node_modules/npm-registry-client/lib/bugs.js
new file mode 100644
index 000000000..a04701316
--- /dev/null
+++ b/deps/npm/node_modules/npm-registry-client/lib/bugs.js
@@ -0,0 +1,9 @@
+
+module.exports = bugs
+
+function bugs (name, cb) {
+ this.get(name + "/latest", 3600, function (er, d) {
+ if (er) return cb(er)
+ cb(null, d.bugs)
+ })
+}
diff --git a/deps/npm/node_modules/npm-registry-client/lib/deprecate.js b/deps/npm/node_modules/npm-registry-client/lib/deprecate.js
new file mode 100644
index 000000000..4a2f9af24
--- /dev/null
+++ b/deps/npm/node_modules/npm-registry-client/lib/deprecate.js
@@ -0,0 +1,28 @@
+
+module.exports = deprecate
+
+var semver = require("semver")
+
+function deprecate (name, ver, message, cb) {
+ if (!this.conf.get('username')) {
+ return cb(new Error("Must be logged in to deprecate a package"))
+ }
+
+ if (semver.validRange(ver) === null) {
+ return cb(new Error("invalid version range: "+ver))
+ }
+
+ var users = {}
+
+ this.get(name + '?write=true', function (er, data) {
+ if (er) return cb(er)
+ // filter all the versions that match
+ Object.keys(data.versions).filter(function (v) {
+ return semver.satisfies(v, ver)
+ }).forEach(function (v) {
+ data.versions[v].deprecated = message
+ })
+ // now update the doc on the registry
+ this.request('PUT', data._id, data, cb)
+ }.bind(this))
+}
diff --git a/deps/npm/node_modules/npm-registry-client/lib/get.js b/deps/npm/node_modules/npm-registry-client/lib/get.js
index 398c309d7..bb6d525b8 100644
--- a/deps/npm/node_modules/npm-registry-client/lib/get.js
+++ b/deps/npm/node_modules/npm-registry-client/lib/get.js
@@ -29,7 +29,17 @@ function get (uri, timeout, nofollow, staleOk, cb) {
return requestAll.call(this, cb)
}
- var cache = path.join(this.conf.get('cache'), uri, ".cache.json")
+ var cacheUri = uri
+ // on windows ":" is not an allowed character in a foldername
+ cacheUri = cacheUri.replace(/:/g, '_').replace(/\?write=true$/, '')
+ var cache = path.join(this.conf.get('cache'), cacheUri, ".cache.json")
+
+ // If the GET is part of a write operation (PUT or DELETE), then
+ // skip past the cache entirely, but still save the results.
+ if (uri.match(/\?write=true$/))
+ return get_.call(this, uri, timeout, cache, null, null, nofollow, staleOk, cb)
+
+
fs.stat(cache, function (er, stat) {
if (!er) fs.readFile(cache, function (er, data) {
try { data = JSON.parse(data) }
diff --git a/deps/npm/node_modules/npm-registry-client/lib/publish.js b/deps/npm/node_modules/npm-registry-client/lib/publish.js
index d6a7496f1..d6525eb78 100644
--- a/deps/npm/node_modules/npm-registry-client/lib/publish.js
+++ b/deps/npm/node_modules/npm-registry-client/lib/publish.js
@@ -3,9 +3,11 @@ module.exports = publish
var path = require("path")
, url = require("url")
+ , semver = require("semver")
+ , crypto = require("crypto")
+ , fs = require("fs")
function publish (data, tarball, cb) {
-
var email = this.conf.get('email')
var auth = this.conf.get('_auth')
var username = this.conf.get('username')
@@ -16,14 +18,30 @@ function publish (data, tarball, cb) {
return cb(er)
}
- // add the dist-url to the data, pointing at the tarball.
- // if the {name} isn't there, then create it.
- // if the {version} is already there, then fail.
- // then:
- // PUT the data to {config.registry}/{data.name}/{data.version}
- var registry = this.conf.get('registry')
+ if (data.name !== encodeURIComponent(data.name))
+ return cb(new Error('invalid name: must be url-safe'))
+
+ var ver = semver.clean(data.version)
+ if (!ver)
+ return cb(new Error('invalid semver: ' + data.version))
+ data.version = ver
+
+ var self = this
+ fs.stat(tarball, function(er, s) {
+ if (er) return cb(er)
+ fs.readFile(tarball, 'base64', function(er, tardata) {
+ if (er) return cb(er)
+ putFirst.call(self, data, tardata, s, username, email, cb)
+ })
+ })
+}
- var fullData =
+function putFirst (data, tardata, stat, username, email, cb) {
+ // optimistically try to PUT all in one single atomic thing.
+ // If 409, then GET and merge, try again.
+ // If other error, then fail.
+
+ var root =
{ _id : data.name
, name : data.name
, description : data.description
@@ -37,76 +55,102 @@ function publish (data, tarball, cb) {
]
}
+ root.versions[ data.version ] = data
+ data.maintainers = JSON.parse(JSON.stringify(root.maintainers))
+ var tag = data.tag || this.conf.get('tag') || "latest"
+ root["dist-tags"][tag] = data.version
+
+ var registry = this.conf.get('registry')
var tbName = data.name + "-" + data.version + ".tgz"
, tbURI = data.name + "/-/" + tbName
data._id = data.name+"@"+data.version
data.dist = data.dist || {}
+ data.dist.shasum = crypto.createHash("sha1").update(tardata, 'base64').digest("hex")
data.dist.tarball = url.resolve(registry, tbURI)
.replace(/^https:\/\//, "http://")
-
- // first try to just PUT the whole fullData, and this will fail if it's
- // already there, because it'll be lacking a _rev, so couch'll bounce it.
- this.request("PUT", encodeURIComponent(data.name), fullData,
- function (er, parsed, json, response) {
- // get the rev and then upload the attachment
- // a 409 is expected here, if this is a new version of an existing package.
- if (er
- && !(response && response.statusCode === 409)
- && !( parsed
- && parsed.reason ===
- "must supply latest _rev to update existing package" )) {
- this.log.error("publish", "Failed PUT response "
- +(response && response.statusCode))
+ root._attachments = {}
+ root._attachments[ tbName ] = {
+ content_type: 'application/octet-stream',
+ data: tardata,
+ length: stat.size
+ };
+
+ this.request("PUT", data.name, root, function (er, parsed, json, res) {
+ var r409 = "must supply latest _rev to update existing package"
+ var r409b = "Document update conflict."
+ var conflict = res && res.statusCode === 409
+ if (parsed && (parsed.reason === r409 || parsed.reason === r409b))
+ conflict = true
+
+ // a 409 is typical here. GET the data and merge in.
+ if (er && !conflict) {
+ this.log.error("publish", "Failed PUT "
+ +(res && res.statusCode))
return cb(er)
}
- var dataURI = encodeURIComponent(data.name)
- + "/" + encodeURIComponent(data.version)
- var tag = data.tag || this.conf.get('tag') || "latest"
- dataURI += "/-tag/" + tag
+ if (!er && !conflict)
+ return cb(er, parsed, json, res)
// let's see what versions are already published.
- // could be that we just need to update the bin dist values.
- this.request("GET", data.name, function (er, fullData) {
- if (er) return cb(er)
-
- function handle(er) {
- if (er.message.indexOf("conflict Document update conflict.") === 0) {
- return cb(conflictError.call(this, data._id));
- }
- this.log.error("publish", "Error uploading package");
+ var getUrl = data.name + "?write=true"
+ this.request("GET", getUrl, function (er, current) {
+ if (er)
return cb(er)
- }
-
- var exists = fullData.versions && fullData.versions[data.version]
- if (exists) return cb(conflictError.call(this, data._id))
-
- var rev = fullData._rev;
- attach.call(this, data.name, tarball, tbName, rev, function (er) {
- if (er) return handle.call(this, er)
- this.log.verbose("publish", "attached", [data.name, tarball, tbName])
- this.request("PUT", dataURI, data, function (er) {
- if (er) return handle.call(this, er)
- return cb(er)
- }.bind(this))
- }.bind(this))
+ putNext.call(this, data.version, root, current, cb)
}.bind(this))
- }.bind(this)) // pining for fat arrows.
+ }.bind(this))
}
-function conflictError (pkgid) {
- var e = new Error("publish fail")
+function putNext(newVersion, root, current, cb) {
+ // already have the tardata on the root object
+ // just merge in existing stuff
+ var curVers = Object.keys(current.versions || {}).map(function (v) {
+ return semver.clean(v, true)
+ }).concat(Object.keys(current.time || {}).map(function(v) {
+ if (semver.valid(v, true))
+ return semver.clean(v, true)
+ }).filter(function(v) {
+ return v
+ }))
+
+ if (curVers.indexOf(newVersion) !== -1) {
+ return cb(conflictError(root.name, newVersion))
+ }
+
+ current.versions[newVersion] = root.versions[newVersion]
+ current._attachments = current._attachments || {}
+ for (var i in root) {
+ switch (i) {
+ // objects that copy over the new stuffs
+ case 'dist-tags':
+ case 'versions':
+ case '_attachments':
+ for (var j in root[i])
+ current[i][j] = root[i][j]
+ break
+
+ // ignore these
+ case 'maintainers':
+ break;
+
+ // copy
+ default:
+ current[i] = root[i]
+ }
+ }
+ var maint = JSON.parse(JSON.stringify(root.maintainers))
+ root.versions[newVersion].maintainers = maint
+
+ this.request("PUT", root.name, current, cb)
+}
+
+function conflictError (pkgid, version) {
+ var e = new Error("cannot modify pre-existing version")
e.code = "EPUBLISHCONFLICT"
e.pkgid = pkgid
+ e.version = version
return e
}
-
-function attach (doc, file, filename, rev, cb) {
- doc = encodeURIComponent(doc)
- var revu = "-rev/"+rev
- , attURI = doc + "/-/" + encodeURIComponent(filename) + "/" + revu
- this.log.verbose("uploading", [attURI, file])
- this.upload(attURI, file, cb)
-}
diff --git a/deps/npm/node_modules/npm-registry-client/lib/request.js b/deps/npm/node_modules/npm-registry-client/lib/request.js
index 9b72bc457..72401e60e 100644
--- a/deps/npm/node_modules/npm-registry-client/lib/request.js
+++ b/deps/npm/node_modules/npm-registry-client/lib/request.js
@@ -1,19 +1,24 @@
module.exports = regRequest
var url = require("url")
+ , zlib = require("zlib")
, fs = require("graceful-fs")
, rm = require("rimraf")
, asyncMap = require("slide").asyncMap
, Stream = require("stream").Stream
, request = require("request")
, retry = require("retry")
+ , crypto = require("crypto")
-function regRequest (method, where, what, etag, nofollow, reauthed, cb_) {
- if (typeof cb_ !== "function") cb_ = reauthed, reauthed = false
+function regRequest (method, where, what, etag, nofollow, cb_) {
if (typeof cb_ !== "function") cb_ = nofollow, nofollow = false
if (typeof cb_ !== "function") cb_ = etag, etag = null
if (typeof cb_ !== "function") cb_ = what, what = null
+ if (!this.sessionToken) {
+ this.sessionToken = crypto.randomBytes(8).toString("hex")
+ }
+
var registry = this.conf.get('registry')
if (!registry) return cb(new Error(
"No registry url provided: " + method + " " + where))
@@ -35,9 +40,10 @@ function regRequest (method, where, what, etag, nofollow, reauthed, cb_) {
, adduserNew = /^\/?-\/user\/org\.couchdb\.user:([^\/]+)/
, nu = where.match(adduserNew)
, uc = where.match(adduserChange)
- , isUpload = what || this.conf.get('always-auth')
+ , alwaysAuth = this.conf.get('always-auth')
, isDel = method === "DELETE"
- , authRequired = isUpload && !nu || uc || isDel
+ , isWrite = what || isDel
+ , authRequired = (alwaysAuth || isWrite) && !nu || uc || isDel
// resolve to a full url on the registry
if (!where.match(/^https?:\/\//)) {
@@ -64,40 +70,19 @@ function regRequest (method, where, what, etag, nofollow, reauthed, cb_) {
var remote = url.parse(where)
, auth = this.conf.get('_auth')
- if (authRequired && !this.conf.get('always-auth')) {
- var couch = this.couchLogin
- , token = couch && (this.conf.get('_token') || couch.token)
- , validToken = token && couch.valid(token)
-
- if (!validToken) token = null
- else this.conf.set('_token', token)
-
- if (couch && !token) {
- // login to get a valid token
- var a = { name: this.conf.get('username'),
- password: this.conf.get('_password') }
- var args = arguments
- return this.couchLogin.login(a, function (er, cr, data) {
- if (er || !couch.valid(couch.token)) {
- er = er || new Error('login error')
- return cb(er, cr, data)
- }
- this.conf.set('_token', this.couchLogin.token)
- return regRequest.call(this,
- method, where, what,
- etag, nofollow, reauthed, cb_)
- }.bind(this))
- }
+ if (authRequired && !auth) {
+ var un = this.conf.get('username')
+ var pw = this.conf.get('_password')
+ if (un && pw)
+ auth = new Buffer(un + ':' + pw).toString('base64')
}
- // now we either have a valid token, or an auth.
-
- if (authRequired && !auth && !token) {
+ if (authRequired && !auth) {
return cb(new Error(
"Cannot insert data into the registry without auth"))
}
- if (auth && !token) {
+ if (auth && authRequired) {
remote.auth = new Buffer(auth, "base64").toString("utf8")
}
@@ -114,7 +99,7 @@ function regRequest (method, where, what, etag, nofollow, reauthed, cb_) {
operation.attempt(function (currentAttempt) {
self.log.info("trying", "registry request attempt " + currentAttempt
+ " at " + (new Date()).toLocaleTimeString())
- makeRequest.call(self, method, remote, where, what, etag, nofollow, token
+ makeRequest.call(self, method, remote, where, what, etag, nofollow
, function (er, parsed, raw, response) {
if (!er || er.message.match(/^SSL Error/)) {
if (er)
@@ -125,32 +110,21 @@ function regRequest (method, where, what, etag, nofollow, reauthed, cb_) {
// Only retry on 408, 5xx or no `response`.
var statusCode = response && response.statusCode
- var reauth = !reauthed &&
- ( statusCode === 401 ||
- statusCode === 400 ||
- statusCode === 403 )
- if (reauth)
- reauthed = true
-
var timeout = statusCode === 408
var serverError = statusCode >= 500
var statusRetry = !statusCode || timeout || serverError
- if (reauth && this.conf.get('_auth') && this.conf.get('_token')) {
- this.conf.del('_token')
- this.couchLogin.token = null
- return regRequest.call(this, method, where, what,
- etag, nofollow, reauthed, cb_)
- }
if (er && statusRetry && operation.retry(er)) {
self.log.info("retry", "will retry, error on last attempt: " + er)
return
}
+ if (response)
+ this.log.verbose("headers", response.headers)
cb.apply(null, arguments)
}.bind(this))
}.bind(this))
}
-function makeRequest (method, remote, where, what, etag, nofollow, tok, cb_) {
+function makeRequest (method, remote, where, what, etag, nofollow, cb_) {
var cbCalled = false
function cb () {
if (cbCalled) return
@@ -162,7 +136,11 @@ function makeRequest (method, remote, where, what, etag, nofollow, tok, cb_) {
if (strict === undefined) strict = true
var opts = { url: remote
, method: method
+ , encoding: null // tell request let body be Buffer instance
, ca: this.conf.get('ca')
+ , localAddress: this.conf.get('local-address')
+ , cert: this.conf.get('cert')
+ , key: this.conf.get('key')
, strictSSL: strict }
, headers = opts.headers = {}
if (etag) {
@@ -170,11 +148,14 @@ function makeRequest (method, remote, where, what, etag, nofollow, tok, cb_) {
headers[method === "GET" ? "if-none-match" : "if-match"] = etag
}
- if (tok) {
- headers.cookie = 'AuthSession=' + tok.AuthSession
+ headers['npm-session'] = this.sessionToken
+
+ if (this.refer) {
+ headers.referer = this.refer
}
headers.accept = "application/json"
+ headers['accept-encoding'] = 'gzip'
headers["user-agent"] = this.conf.get('user-agent') ||
'node/' + process.version
@@ -205,7 +186,7 @@ function makeRequest (method, remote, where, what, etag, nofollow, tok, cb_) {
this.log.http(method, remote.href || "/")
var done = requestDone.call(this, method, where, cb)
- var req = request(opts, done)
+ var req = request(opts, decodeResponseBody(done))
req.on("error", cb)
req.on("socket", function (s) {
@@ -217,6 +198,26 @@ function makeRequest (method, remote, where, what, etag, nofollow, tok, cb_) {
}
}
+function decodeResponseBody(cb) {
+ return function (er, response, data) {
+ if (er) return cb(er, response, data)
+
+ // don't ever re-use connections that had server errors.
+ // those sockets connect to the Bad Place!
+ if (response.socket && response.statusCode > 500) {
+ response.socket.destroy()
+ }
+
+ if (response.headers['content-encoding'] !== 'gzip') return cb(er, response, data)
+
+ zlib.gunzip(data, function (er, buf) {
+ if (er) return cb(er, response, data)
+
+ cb(null, response, buf)
+ })
+ }
+}
+
// cb(er, parsed, raw, response)
function requestDone (method, where, cb) {
return function (er, response, data) {
@@ -283,6 +284,7 @@ function requestDone (method, where, cb) {
, p = url.parse(where).pathname.split("/")
, _ = "/"
, caches = p.map(function (part) {
+ part = part.replace(/:/g, "_")
return _ = path.join(_, part)
}).map(function (cache) {
return path.join(this.conf.get('cache'), cache, ".cache.json")
@@ -293,7 +295,8 @@ function requestDone (method, where, cb) {
// That's what you get for deleting stuff. Don't do that.
if (method === "DELETE") {
p = p.slice(0, p.indexOf("-rev"))
- caches.push(path.join(this.conf.get('cache'), p.join("/")))
+ p = p.join("/").replace(/:/g, "_")
+ caches.push(path.join(this.conf.get('cache'), p))
}
asyncMap(caches, rm, function () {})
diff --git a/deps/npm/node_modules/npm-registry-client/lib/star.js b/deps/npm/node_modules/npm-registry-client/lib/star.js
index 5b7ab4afe..5c2375d04 100644
--- a/deps/npm/node_modules/npm-registry-client/lib/star.js
+++ b/deps/npm/node_modules/npm-registry-client/lib/star.js
@@ -7,7 +7,7 @@ function star (package, starred, cb) {
var users = {}
- this.request("GET", package, function (er, fullData) {
+ this.request("GET", package + '?write=true', function (er, fullData) {
if (er) return cb(er)
fullData = { _id: fullData._id
diff --git a/deps/npm/node_modules/npm-registry-client/lib/unpublish.js b/deps/npm/node_modules/npm-registry-client/lib/unpublish.js
index c844c27fe..4bbbb347e 100644
--- a/deps/npm/node_modules/npm-registry-client/lib/unpublish.js
+++ b/deps/npm/node_modules/npm-registry-client/lib/unpublish.js
@@ -14,7 +14,8 @@ var semver = require("semver")
function unpublish (name, ver, cb) {
if (typeof cb !== "function") cb = ver, ver = null
- this.get(name, null, -1, true, function (er, data) {
+ var u = name + '?write=true'
+ this.get(u, null, -1, true, function (er, data) {
if (er) {
this.log.info("unpublish", name+" not published")
return cb()
@@ -51,7 +52,7 @@ function unpublish (name, ver, cb) {
if (latestVer === ver) {
data["dist-tags"].latest =
- Object.getOwnPropertyNames(versions).sort(semver.compare).pop()
+ Object.getOwnPropertyNames(versions).sort(semver.compareLoose).pop()
}
var rev = data._rev
diff --git a/deps/npm/node_modules/npm-registry-client/node_modules/couch-login/.npmignore b/deps/npm/node_modules/npm-registry-client/node_modules/couch-login/.npmignore
deleted file mode 100644
index 9ed56e7a5..000000000
--- a/deps/npm/node_modules/npm-registry-client/node_modules/couch-login/.npmignore
+++ /dev/null
@@ -1,4 +0,0 @@
-test/fixtures/couch.log
-test/fixtures/.delete
-test/fixtures/pid
-test/fixtures/_users.couch
diff --git a/deps/npm/node_modules/npm-registry-client/node_modules/couch-login/README.md b/deps/npm/node_modules/npm-registry-client/node_modules/couch-login/README.md
deleted file mode 100644
index cebba79a3..000000000
--- a/deps/npm/node_modules/npm-registry-client/node_modules/couch-login/README.md
+++ /dev/null
@@ -1,260 +0,0 @@
-# couch-login
-
-This module lets you log into couchdb to get a session token, then make
-requests using that session. It is basically just a thin wrapper around
-[@mikeal's request module](https://github.com/mikeal/request).
-
-This is handy if you want a user to take actions in a couchdb database
-on behalf of a user, without having to store their couchdb username and
-password anywhere. (You do need to store the AuthSession token
-somewhere, though.)
-
-## Usage
-
-```javascript
-var CouchLogin = require('couch-login')
-
-// Nothing about this module is http-server specific of course.
-// You could also use it to do authenticated requests against
-// a couchdb using sessions and storing the token somewhere else.
-
-http.createServer(function (req, res) {
- var couch = new CouchLogin('http://my-couch.iriscouch.com:5984/')
-
- // .. look up the token in the user's session or whatever ..
- // Look at couch.decorate(req, res) for more on doing that
- // automatically, below.
-
- if (sessionToken) {
- // this user already logged in.
- couch.token = sessionToken
-
- // now we can do things on their behalf, like:
- // 1. View their session info.
- // like doing request.get({ uri: couch + '/_session', ... })
- // but with the cookie and whatnot
-
- couch.get('/_session', function (er, resp, data) {
- // er = some kind of communication error.
- // resp = response object from the couchdb request.
- // data = parsed JSON response body.
- if (er || resp.statusCode !== 200) {
- res.statusCode = resp.statusCode || 403
- return res.end('Invalid login or something')
- }
-
- // now we have the session info, we know who this user is.
- // hitting couchdb for this on every request is kinda costly,
- // so maybe you should store the username wherever you're storing
- // the sessionToken. RedSess is a good util for this, if you're
- // into redis. And if you're not into redis, you're crazy,
- // because it is awesome.
-
- // now let's get the user record.
- // note that this will 404 for anyone other than the user,
- // unless they're a server admin.
- couch.get('/_users/org.couchdb.user:' + data.userCtx.name, etc)
-
- // PUTs and DELETEs will also use their session, of course, so
- // your validate_doc_update's will see their info in userCtx
- })
-
- } else {
- // don't have a sessionToken.
- // get a username and password from the post body or something.
- // maybe redirect to a /login page or something to ask for that.
- var login = { name: name, password: password }
- couch.login(login, function (er, resp, data) {
- // again, er is an error, resp is the response obj, data is the json
- if (er || resp.statusCode !== 200) {
- res.statusCode = resp.statusCode || 403
- return res.end('Invalid login or something')
- }
-
- // the data is something like
- // {"ok":true,"name":"testuser","roles":[]}
- // and couch.token is the token you'll need to save somewhere.
-
- // at this point, you can start making authenticated requests to
- // couchdb, or save data in their session, or do whatever it is
- // that you need to do.
-
- res.statusCode = 200
- res.write("Who's got two thumbs and just logged you into couch?\n")
- setTimeout(function () {
- res.end("THIS GUY!")
- }, 500)
- })
- }
-})
-```
-
-## Class: CouchLogin
-### new CouchLogin(couchdbUrl, token)
-
-Create a new CouchLogin object bound to the couchdb url.
-
-In addition to these, the `get`, `post`, `put`, and `del` methods all
-proxy to the associated method on [request](https://github.com/mikeal/request).
-
-However, as you'll note in the example above, only the pathname portion
-of the url is required. Urls will be appended to the couchdb url passed
-into the constructor.
-
-If you have to talk to more than one couchdb, then you'll need more than
-one CouchLogin object, for somewhat obvious reasons.
-
-All callbacks get called with the following arguments, which are exactly
-identical to the arguments passed to a `request` callback.
-
-* `er` {Error | null} Set if a communication error happens.
-* `resp` {HTTP Response} The response from the request to couchdb
-* `data` {Object} The parsed JSON data from couch
-
-If the token is the string "anonymous", then it will not attempt to log
-in before making requests. If the token is not "anonymous", then it
-must be an object with the appropriate fields.
-
-### couch.token
-
-* {Object}
-
-An object representing the couchdb session token. (Basically just a
-cookie and a timeout.)
-
-If the token has already timed out, then setting it will have no effect.
-
-### couch.tokenSet
-
-If set, this method is called whenever the token is saved.
-
-For example, you could assign a function to this method to save the
-token into a redis session, a cookie, or in some other database.
-
-Takes a callback which should be called when the token is saved.
-
-### couch.tokenGet
-
-If set, this method is called to look up the token on demand.
-
-The inverse of couch.tokenSet. Takes a callback which is called with
-the `cb(er || null, token)`.
-
-### couch.tokenDel
-
-If set, this method is called to delete the token when it should be
-discarded.
-
-Related to tokenGet and tokenSet. Takes a callback which should be
-called when the token is deleted.
-
-### couch.ca
-
-* {String | Array | null}
-
-A certificate authority string, or an array of CA strings. Only
-relevant for HTTPS couches, of course.
-
-Leave as `null` to use the default ca settings built into node.
-
-### couch.strictSSL
-
-* {Boolean | null}
-
-Whether or not to be strict about SSL connections. If left as null,
-then use the default setting in node, which is true in node versions
-0.9.x and above, and false prior to 0.8.x.
-
-Only relevant for HTTPS couches, of course.
-
-### couch.anonymous()
-
-Return a new CouchLogin object that points at the same couchdb server,
-but doesn't try to log in before making requests.
-
-This is handy for situations where the user is not logged in at the
-moment, but a request needs to be made anyway, and does not require
-authorization.
-
-### couch.login(auth, callback)
-
-* `auth` {Object} The login details
- * `name` {String}
- * `password` {String}
-* `callback` {Function}
-
-When the callback is called, the `couch.token` will already have been
-set (assuming it worked!), so subsequent requests will be done as that
-user.
-
-### couch.get(path, callback)
-
-GET the supplied path from the couchdb using the credentials on the
-token.
-
-Fails if the token is invalid or expired.
-
-### couch.del(path, callback)
-
-DELETE the supplied path from the couchdb using the credentials on the
-token.
-
-Fails if the token is invalid or expired.
-
-### couch.post(path, data, callback)
-
-POST the data to the supplied path in the couchdb, using the credentials
-on the token.
-
-Fails if the token is invalid or expired.
-
-### couch.put(path, data, callback)
-
-PUT the data to the supplied path in the couchdb, using the credentials
-on the token.
-
-Fails if the token is invalid or expired.
-
-### couch.changePass(newAuth, callback)
-
-Must already be logged in. Updates the `_users` document with new salt
-and hash, and re-logs in with the new credentials. Callback is called
-with the same arguments as login, or the first step of the process that
-failed.
-
-### couch.signup(userData, callback)
-
-Create a new user account. The userData must contain at least a `name`
-and `password` field. Any additional data will be copied to the user
-record. The `_id`, `name`, `roles`, `type`, `password_sha`, `salt`, and
-`date` fields are generated.
-
-Also signs in as the newly created user, on successful account creation.
-
-### couch.deleteAccount(name, callback)
-
-Deletes a user account. If not logged in as the user, or a server
-admin, then the request will fail.
-
-Note that this immediately invalidates any session tokens for the
-deleted user account. If you are deleting the user's record, then you
-ought to follow this with `couch.logout(callback)` so that it won't try
-to re-use the invalid session.
-
-### couch.logout(callback)
-
-Delete the session out of couchdb. This makes the token permanently
-invalid, and deletes it.
-
-### couch.decorate(req, res)
-
-Set up `req.couch` and `res.couch` as references to this couch login
-instance.
-
-Additionall, if `req.session` or `res.session` is set, then it'll call
-`session.get('couch_token', cb)` as the tokenGet method,
-`session.set('couch_token', token, cb)` as the tokenSet method, and
-`session.del('couch_token', cb)` as the tokenDel method.
-
-This works really nice with
-[RedSess](https://github.com/isaacs/redsess).
diff --git a/deps/npm/node_modules/npm-registry-client/node_modules/couch-login/couch-login.js b/deps/npm/node_modules/npm-registry-client/node_modules/couch-login/couch-login.js
deleted file mode 100644
index 474f083b1..000000000
--- a/deps/npm/node_modules/npm-registry-client/node_modules/couch-login/couch-login.js
+++ /dev/null
@@ -1,385 +0,0 @@
-var request = require('request')
-, url = require('url')
-, crypto = require('crypto')
-, YEAR = (1000 * 60 * 60 * 24 * 365)
-, BASIC = {}
-, assert = require('assert')
-
-module.exports = CouchLogin
-
-function CouchLogin (couch, tok) {
- if (!(this instanceof CouchLogin)) {
- return new CouchLogin(couch)
- }
-
- if (!couch) throw new Error(
- "Need to pass a couch url to CouchLogin constructor")
-
- if (couch instanceof CouchLogin)
- couch = couch.couch
-
- couch = url.parse(couch)
- if (couch.auth) {
- var a = couch.auth.split(':')
- var name = a.shift()
- var password = a.join(':')
- this.name = name
- if (password)
- this.auth = new Buffer(name + ':' + password).toString('base64')
- } else {
- this.auth = null
- this.name = null
- }
- delete couch.auth
-
- if (tok === 'anonymous')
- tok = NaN
- else if (tok === 'basic')
- tok = BASIC
-
- this.token = tok
- this.couch = url.format(couch)
- this.proxy = null
-
- this.maxAge = YEAR
-
- // replace with a CA cert string, or an array, or leave as null
- // to use the defaults included in node. Only relevant for HTTPS
- // couches, of course.
- this.ca = null
-
- // set to boolean true or false to specify the strictSSL behavior.
- // if left as null, then it'll use whatever node defaults to, which
- // is false <=0.8.x, and true >=0.9.x
- //
- // Again, only relevant for https couches, of course.
- this.strictSSL = null
-}
-
-CouchLogin.prototype =
-{ get: makeReq('GET')
-, del: makeReq('DELETE')
-, put: makeReq('PUT', true)
-, post: makeReq('POST', true)
-, login: login
-, logout: logout
-, decorate: decorate
-, changePass: changePass
-, signup: signup
-, deleteAccount: deleteAccount
-, anon: anon
-, anonymous: anon
-, valid: valid
-}
-
-Object.defineProperty(CouchLogin.prototype, 'constructor',
- { value: CouchLogin, enumerable: false })
-
-function decorate (req, res) {
- assert(this instanceof CouchLogin)
- req.couch = res.couch = this
-
- // backed by some sort of set(k,v,cb), get(k,cb) session storage.
- var session = req.session || res.session || null
- if (session) {
- this.tokenGet = function (cb) {
- session.get('couch_token', cb)
- }
-
- // don't worry about it failing. it'll just mean a login next time.
- this.tokenSet = function (tok, cb) {
- session.set('couch_token', tok, cb || function () {})
- }
-
- this.tokenDel = function (cb) {
- session.del('couch_token', cb || function () {})
- }
- }
-
- return this
-}
-
-function anon () {
- assert(this instanceof CouchLogin)
- return new CouchLogin(this.couch, NaN)
-}
-
-function makeReq (meth, body, f) { return function madeReq (p, d, cb) {
- assert(this instanceof CouchLogin)
- f = f || (this.token !== this.token)
- if (!f && !valid(this.token)) {
- // lazily get the token.
- if (this.tokenGet) return this.tokenGet(function (er, tok) {
- if (er || !valid(tok)) {
- if (!body) cb = d, d = null
- return cb(new Error('auth token expired or invalid'))
- }
- this.token = tok
- return madeReq.call(this, p, d, cb)
- }.bind(this))
-
- // no getter, no token, no business.
- return process.nextTick(function () {
- if (!body) cb = d, d = null
- cb(new Error('auth token expired or invalid'))
- })
- }
-
- if (!body) cb = d, d = null
-
- var h = {}
- , u = url.resolve(this.couch, p)
- , req = { uri: u, headers: h, json: true, body: d, method: meth }
-
- if (this.token === BASIC) {
- if (!this.auth)
- return process.nextTick(cb.bind(this, new Error(
- 'Using basic auth and no auth provided')))
- else
- h.authorization = 'Basic ' + this.auth
- } else if (this.token) {
- h.cookie = 'AuthSession=' + this.token.AuthSession
- }
-
- if (this.proxy) {
- req.proxy = this.proxy
- }
-
- // we're handling cookies, don't do it for us.
- req.jar = false
-
- if (this.ca)
- req.ca = this.ca
-
- if (typeof this.strictSSL === 'boolean')
- req.strictSSL = req.rejectUnauthorized = this.strictSSL
-
- request(req, function (er, res, data) {
- // update cookie.
- if (er || res.statusCode !== 200) return cb(er, res, data)
- addToken.call(this, res)
- return cb.call(this, er, res, data)
- }.bind(this))
-}}
-
-function login (auth, cb) {
- assert(this instanceof CouchLogin)
- if (this.token === BASIC) {
- this.auth = new Buffer(auth.name + ':' + auth.password).toString('base64')
- this.name = auth.name
- cb = cb.bind(this, null, { statusCode: 200 }, { ok: true })
- return process.nextTick(cb)
- }
- var a = { name: auth.name, password: auth.password }
- var req = makeReq('post', true, true)
- req.call(this, '/_session', a, function (er, cr, data) {
- if (er || (cr && cr.statusCode >= 400))
- return cb(er, cr, data)
- this.name = auth.name
- cb(er, cr, data)
- }.bind(this))
-}
-
-function changePass (auth, cb) {
- assert(this instanceof CouchLogin)
- if (!auth.name || !auth.password) return cb(new Error('invalid auth'))
-
- var u = '/_users/org.couchdb.user:' + auth.name
- this.get(u, function (er, res, data) {
- if (er || res.statusCode !== 200) return cb(er, res, data)
-
- // copy any other keys we're setting here.
- // note that name, password_sha, salt, and date
- // are all set explicitly below.
- Object.keys(auth).filter(function (k) {
- return k.charAt(0) !== '_'
- && k !== 'password'
- && k !== 'password_sha'
- && k !== 'salt'
- }).forEach(function (k) {
- data[k] = auth[k]
- })
-
- var newSalt = crypto.randomBytes(30).toString('hex')
- , newPass = auth.password
- , newSha = sha(newPass + newSalt)
-
- data.password_sha = newSha
- data.salt = newSalt
- data.date = new Date().toISOString()
-
- this.put(u + '?rev=' + data._rev, data, function (er, res, data) {
- if (er || res.statusCode >= 400)
- return cb(er, res, data)
- if (this.name && this.name !== auth.name)
- return cb(er, res, data)
- return this.login(auth, cb)
- }.bind(this))
- }.bind(this))
-}
-
-// They said that there should probably be a warning before
-// deleting the user's whole account, so here it is:
-//
-// WATCH OUT!
-function deleteAccount (name, cb) {
- assert(this instanceof CouchLogin)
- var u = '/_users/org.couchdb.user:' + name
- this.get(u, thenPut.bind(this))
-
- function thenPut (er, res, data) {
- if (er || res.statusCode !== 200) {
- return cb(er, res, data)
- }
-
- // user accts can't be just DELETE'd by non-admins
- // so we take the existing doc and just slap a _deleted
- // flag on it to fake it. Works the same either way
- // in couch.
- data._deleted = true
- this.put(u + '?rev=' + data._rev, data, cb)
- }
-}
-
-
-
-function signup (auth, cb) {
- assert(this instanceof CouchLogin)
- if (this.token && this.token !== BASIC) {
-
- return this.logout(function (er, res, data) {
- if (er || res && res.statusCode !== 200) {
- return cb(er, res, data)
- }
-
- if (this.token) {
- return cb(new Error('failed to delete token'), res, data)
- }
-
- this.signup(auth, cb)
- }.bind(this))
- }
-
- // make a new user record.
- var newSalt = crypto.randomBytes(30).toString('hex')
- , newSha = sha(auth.password + newSalt)
- , user = { _id: 'org.couchdb.user:' + auth.name
- , name: auth.name
- , roles: []
- , type: 'user'
- , password_sha: newSha
- , salt: newSalt
- , date: new Date().toISOString() }
-
- Object.keys(auth).forEach(function (k) {
- if (k === 'name' || k === 'password') return
- user[k] = auth[k]
- })
-
- var u = '/_users/' + user._id
- makeReq('put', true, true).call(this, u, user, function (er, res, data) {
- if (er || res.statusCode >= 400) {
- return cb(er, res, data)
- }
-
- // it worked! log in as that user and get their record
- this.login(auth, function (er, res, data) {
- if (er || (res && res.statusCode >= 400) || data && data.error) {
- return cb(er, res, data)
- }
- this.get(u, cb)
- }.bind(this))
- }.bind(this))
-}
-
-function addToken (res) {
- assert(this instanceof CouchLogin)
- // not doing the whole login session cookie thing.
- if (this.token === BASIC)
- return
-
- // attach the token, if a new one was provided.
- var sc = res.headers['set-cookie']
- if (!sc) return
- if (!Array.isArray(sc)) sc = [sc]
-
- sc = sc.filter(function (c) {
- return c.match(/^AuthSession=/)
- })[0]
-
- if (!sc.length) return
-
- sc = sc.split(/\s*;\s*/).map(function (p) {
- return p.split('=')
- }).reduce(function (set, p) {
- var k = p[0] === 'AuthSession' ? p[0] : p[0].toLowerCase()
- , v = k === 'expires' ? Date.parse(p[1])
- : p[1] === '' || p[1] === undefined ? true // HttpOnly
- : p[1]
- set[k] = v
- return set
- }, {})
-
- if (sc.hasOwnProperty('max-age')) {
- var ma = sc['max-age']
- sc.expires = (ma <= 0) ? 0 : Date.now() + (ma * 1000)
- delete sc['max-age']
- }
-
- // expire the session after 1 year, even if couch won't.
- if (!sc.hasOwnProperty('expires')) {
- sc.expires = Date.now() + YEAR
- }
-
- if (!isNaN(this.maxAge)) {
- sc.expires = Math.min(sc.expires, Date.now() + this.maxAge)
- }
-
- this.token = sc
- if (this.tokenSet) this.tokenSet(this.token)
-}
-
-
-function logout (cb) {
- assert(this instanceof CouchLogin)
- if (!this.token && this.tokenGet) {
- return this.tokenGet(function (er, tok) {
- if (er || !tok)
- return cb(null, { statusCode: 200 }, {})
- this.token = tok
- this.logout(cb)
- }.bind(this))
- }
-
- if (!valid(this.token)) {
- this.token = null
- if (this.tokenDel) this.tokenDel()
- return process.nextTick(cb.bind(this, null, { statusCode: 200 }, {}))
- }
-
- var h = { cookie: 'AuthSession=' + this.token.AuthSession }
- , u = url.resolve(this.couch, '/_session')
- , req = { uri: u, headers: h, json: true }
-
- request.del(req, function (er, res, data) {
- if (er || (res.statusCode !== 200 && res.statusCode !== 404)) {
- return cb(er, res, data)
- }
-
- this.token = null
- if (this.tokenDel)
- this.tokenDel()
- cb(er, res, data)
- }.bind(this))
-}
-
-function valid (token) {
- if (token === BASIC) return true
- if (!token) return false
- if (!token.hasOwnProperty('expires')) return true
- return token.expires > Date.now()
-}
-
-function sha (s) {
- return crypto.createHash("sha1").update(s).digest("hex")
-}
diff --git a/deps/npm/node_modules/npm-registry-client/node_modules/couch-login/package.json b/deps/npm/node_modules/npm-registry-client/node_modules/couch-login/package.json
deleted file mode 100644
index 922ba0d82..000000000
--- a/deps/npm/node_modules/npm-registry-client/node_modules/couch-login/package.json
+++ /dev/null
@@ -1,31 +0,0 @@
-{
- "author": {
- "name": "Isaac Z. Schlueter",
- "email": "i@izs.me",
- "url": "http://blog.izs.me/"
- },
- "name": "couch-login",
- "description": "A module for doing logged-in requests to a couchdb server",
- "version": "0.1.17",
- "repository": {
- "type": "git",
- "url": "git://github.com/isaacs/couch-login.git"
- },
- "main": "couch-login.js",
- "scripts": {
- "test": "tap test/*.js"
- },
- "dependencies": {
- "request": "2 >=2.14"
- },
- "devDependencies": {
- "tap": "~0.2.4"
- },
- "readme": "# couch-login\n\nThis module lets you log into couchdb to get a session token, then make\nrequests using that session. It is basically just a thin wrapper around\n[@mikeal's request module](https://github.com/mikeal/request).\n\nThis is handy if you want a user to take actions in a couchdb database\non behalf of a user, without having to store their couchdb username and\npassword anywhere. (You do need to store the AuthSession token\nsomewhere, though.)\n\n## Usage\n\n```javascript\nvar CouchLogin = require('couch-login')\n\n// Nothing about this module is http-server specific of course.\n// You could also use it to do authenticated requests against\n// a couchdb using sessions and storing the token somewhere else.\n\nhttp.createServer(function (req, res) {\n var couch = new CouchLogin('http://my-couch.iriscouch.com:5984/')\n\n // .. look up the token in the user's session or whatever ..\n // Look at couch.decorate(req, res) for more on doing that\n // automatically, below.\n\n if (sessionToken) {\n // this user already logged in.\n couch.token = sessionToken\n\n // now we can do things on their behalf, like:\n // 1. View their session info.\n // like doing request.get({ uri: couch + '/_session', ... })\n // but with the cookie and whatnot\n\n couch.get('/_session', function (er, resp, data) {\n // er = some kind of communication error.\n // resp = response object from the couchdb request.\n // data = parsed JSON response body.\n if (er || resp.statusCode !== 200) {\n res.statusCode = resp.statusCode || 403\n return res.end('Invalid login or something')\n }\n\n // now we have the session info, we know who this user is.\n // hitting couchdb for this on every request is kinda costly,\n // so maybe you should store the username wherever you're storing\n // the sessionToken. RedSess is a good util for this, if you're\n // into redis. And if you're not into redis, you're crazy,\n // because it is awesome.\n\n // now let's get the user record.\n // note that this will 404 for anyone other than the user,\n // unless they're a server admin.\n couch.get('/_users/org.couchdb.user:' + data.userCtx.name, etc)\n\n // PUTs and DELETEs will also use their session, of course, so\n // your validate_doc_update's will see their info in userCtx\n })\n\n } else {\n // don't have a sessionToken.\n // get a username and password from the post body or something.\n // maybe redirect to a /login page or something to ask for that.\n var login = { name: name, password: password }\n couch.login(login, function (er, resp, data) {\n // again, er is an error, resp is the response obj, data is the json\n if (er || resp.statusCode !== 200) {\n res.statusCode = resp.statusCode || 403\n return res.end('Invalid login or something')\n }\n\n // the data is something like\n // {\"ok\":true,\"name\":\"testuser\",\"roles\":[]}\n // and couch.token is the token you'll need to save somewhere.\n\n // at this point, you can start making authenticated requests to\n // couchdb, or save data in their session, or do whatever it is\n // that you need to do.\n\n res.statusCode = 200\n res.write(\"Who's got two thumbs and just logged you into couch?\\n\")\n setTimeout(function () {\n res.end(\"THIS GUY!\")\n }, 500)\n })\n }\n})\n```\n\n## Class: CouchLogin\n### new CouchLogin(couchdbUrl, token)\n\nCreate a new CouchLogin object bound to the couchdb url.\n\nIn addition to these, the `get`, `post`, `put`, and `del` methods all\nproxy to the associated method on [request](https://github.com/mikeal/request).\n\nHowever, as you'll note in the example above, only the pathname portion\nof the url is required. Urls will be appended to the couchdb url passed\ninto the constructor.\n\nIf you have to talk to more than one couchdb, then you'll need more than\none CouchLogin object, for somewhat obvious reasons.\n\nAll callbacks get called with the following arguments, which are exactly\nidentical to the arguments passed to a `request` callback.\n\n* `er` {Error | null} Set if a communication error happens.\n* `resp` {HTTP Response} The response from the request to couchdb\n* `data` {Object} The parsed JSON data from couch\n\nIf the token is the string \"anonymous\", then it will not attempt to log\nin before making requests. If the token is not \"anonymous\", then it\nmust be an object with the appropriate fields.\n\n### couch.token\n\n* {Object}\n\nAn object representing the couchdb session token. (Basically just a\ncookie and a timeout.)\n\nIf the token has already timed out, then setting it will have no effect.\n\n### couch.tokenSet\n\nIf set, this method is called whenever the token is saved.\n\nFor example, you could assign a function to this method to save the\ntoken into a redis session, a cookie, or in some other database.\n\nTakes a callback which should be called when the token is saved.\n\n### couch.tokenGet\n\nIf set, this method is called to look up the token on demand.\n\nThe inverse of couch.tokenSet. Takes a callback which is called with\nthe `cb(er || null, token)`.\n\n### couch.tokenDel\n\nIf set, this method is called to delete the token when it should be\ndiscarded.\n\nRelated to tokenGet and tokenSet. Takes a callback which should be\ncalled when the token is deleted.\n\n### couch.ca\n\n* {String | Array | null}\n\nA certificate authority string, or an array of CA strings. Only\nrelevant for HTTPS couches, of course.\n\nLeave as `null` to use the default ca settings built into node.\n\n### couch.strictSSL\n\n* {Boolean | null}\n\nWhether or not to be strict about SSL connections. If left as null,\nthen use the default setting in node, which is true in node versions\n0.9.x and above, and false prior to 0.8.x.\n\nOnly relevant for HTTPS couches, of course.\n\n### couch.anonymous()\n\nReturn a new CouchLogin object that points at the same couchdb server,\nbut doesn't try to log in before making requests.\n\nThis is handy for situations where the user is not logged in at the\nmoment, but a request needs to be made anyway, and does not require\nauthorization.\n\n### couch.login(auth, callback)\n\n* `auth` {Object} The login details\n * `name` {String}\n * `password` {String}\n* `callback` {Function}\n\nWhen the callback is called, the `couch.token` will already have been\nset (assuming it worked!), so subsequent requests will be done as that\nuser.\n\n### couch.get(path, callback)\n\nGET the supplied path from the couchdb using the credentials on the\ntoken.\n\nFails if the token is invalid or expired.\n\n### couch.del(path, callback)\n\nDELETE the supplied path from the couchdb using the credentials on the\ntoken.\n\nFails if the token is invalid or expired.\n\n### couch.post(path, data, callback)\n\nPOST the data to the supplied path in the couchdb, using the credentials\non the token.\n\nFails if the token is invalid or expired.\n\n### couch.put(path, data, callback)\n\nPUT the data to the supplied path in the couchdb, using the credentials\non the token.\n\nFails if the token is invalid or expired.\n\n### couch.changePass(newAuth, callback)\n\nMust already be logged in. Updates the `_users` document with new salt\nand hash, and re-logs in with the new credentials. Callback is called\nwith the same arguments as login, or the first step of the process that\nfailed.\n\n### couch.signup(userData, callback)\n\nCreate a new user account. The userData must contain at least a `name`\nand `password` field. Any additional data will be copied to the user\nrecord. The `_id`, `name`, `roles`, `type`, `password_sha`, `salt`, and\n`date` fields are generated.\n\nAlso signs in as the newly created user, on successful account creation.\n\n### couch.deleteAccount(name, callback)\n\nDeletes a user account. If not logged in as the user, or a server\nadmin, then the request will fail.\n\nNote that this immediately invalidates any session tokens for the\ndeleted user account. If you are deleting the user's record, then you\nought to follow this with `couch.logout(callback)` so that it won't try\nto re-use the invalid session.\n\n### couch.logout(callback)\n\nDelete the session out of couchdb. This makes the token permanently\ninvalid, and deletes it.\n\n### couch.decorate(req, res)\n\nSet up `req.couch` and `res.couch` as references to this couch login\ninstance.\n\nAdditionall, if `req.session` or `res.session` is set, then it'll call\n`session.get('couch_token', cb)` as the tokenGet method,\n`session.set('couch_token', token, cb)` as the tokenSet method, and\n`session.del('couch_token', cb)` as the tokenDel method.\n\nThis works really nice with\n[RedSess](https://github.com/isaacs/redsess).\n",
- "readmeFilename": "README.md",
- "bugs": {
- "url": "https://github.com/isaacs/couch-login/issues"
- },
- "_id": "couch-login@0.1.17",
- "_from": "couch-login@"
-}
diff --git a/deps/npm/node_modules/npm-registry-client/node_modules/couch-login/test/00-setup.js b/deps/npm/node_modules/npm-registry-client/node_modules/couch-login/test/00-setup.js
deleted file mode 100644
index d5dcc190d..000000000
--- a/deps/npm/node_modules/npm-registry-client/node_modules/couch-login/test/00-setup.js
+++ /dev/null
@@ -1,100 +0,0 @@
-// start the couchdb spinning as a detached child process.
-// the zz-teardown.js test kills it.
-//
-// localhost:15985 ==> couchdb
-// 127.0.0.1:15985 ==> npm registry
-
-var spawn = require('child_process').spawn
-var test = require('tap').test
-var path = require('path')
-var fs = require('fs')
-var request = require('request')
-
-// run with the cwd of the main program.
-var cwd = path.dirname(__dirname)
-
-var conf = path.resolve(__dirname, 'fixtures', 'couch.ini')
-var pidfile = path.resolve(__dirname, 'fixtures', 'pid')
-var logfile = path.resolve(__dirname, 'fixtures', 'couch.log')
-var started = /Apache CouchDB has started on http:\/\/127\.0\.0\.1:15985\/\n$/
-
-test('start couch as a zombie child', function (t) {
- var fd = fs.openSync(pidfile, 'wx')
-
- try { fs.unlinkSync(logfile) } catch (er) {}
-
- var child = spawn('couchdb', ['-a', conf], {
- detached: true,
- stdio: 'ignore',
- cwd: cwd
- })
- child.unref()
- t.ok(child.pid)
- fs.writeSync(fd, child.pid + '\n')
- fs.closeSync(fd)
-
- // wait for it to create a log, give it 5 seconds
- var start = Date.now()
- fs.readFile(logfile, function R (er, log) {
- log = log ? log.toString() : ''
- if (!er && !log.match(started))
- er = new Error('not started yet')
- if (er) {
- if (Date.now() - start < 5000)
- return setTimeout(function () {
- fs.readFile(logfile, R)
- }, 100)
- else
- throw er
- }
- t.pass('relax')
- t.end()
- })
-})
-
-// set up the testuser account that we'll be using everywhere.
-// first delete any existing one, so that we don't end up with
-// some newer copy taking over.
-test('create testuser', function (t) {
- var u = 'http://admin:admin@localhost:15985/_users/org.couchdb.user:testuser'
- var rev
-
- request.get({ url: u, json: true }, function (er, res, data) {
- if (er)
- throw er
- rev = data._rev
- if (res.statusCode === 404)
- put()
- else
- del()
- })
-
- function del () {
- request.del(u + '?rev=' + rev, function (er, res, data) {
- if (er)
- throw er
- put()
- })
- }
-
- function put () {
- request.put({
- url: u,
- body: {
- _id: 'org.couchdb.user:testuser',
- name: 'testuser',
- roles: [],
- type: 'user',
- password_sha: 'e23952b517695e6bb72ecf060e10bf1b35bf7e0b',
- salt: '83695c9b64d3b48b94c9dda0cd691e72',
- date: '2012-09-26T16:49:30.175Z'
- },
- json: true
- }, function (er, res, data) {
- if (er)
- throw er
- t.ok(data.ok, 'user created')
- t.end()
- })
- }
-})
diff --git a/deps/npm/node_modules/npm-registry-client/node_modules/couch-login/test/basic.js b/deps/npm/node_modules/npm-registry-client/node_modules/couch-login/test/basic.js
deleted file mode 100644
index 9e222e143..000000000
--- a/deps/npm/node_modules/npm-registry-client/node_modules/couch-login/test/basic.js
+++ /dev/null
@@ -1,297 +0,0 @@
-var tap = require('tap')
-, CouchLogin = require('../couch-login.js')
-
-var auth = { name: 'testuser', password: 'test' }
-, newAuth = { name: 'testuser', password: 'asdfasdf' }
-, couch = new CouchLogin('http://localhost:15985/')
-, u = '/_users/org.couchdb.user:' + auth.name
-, userRecordMarker
-
-// simulate the 'must change password on next login' thing
-newAuth.mustChangePass = true
-auth.mustChangePass = false
-
-
-function okStatus (t, res) {
- var x = { found: res.statusCode, wanted: 'around 200' }
- var r = res.statusCode
- x.ok = (r >= 200 && r < 300)
- return t.ok(x.ok, 'Status code should be 200-ish', x)
-}
-
-tap.test('login', function (t) {
- couch.login(auth, function (er, res, data) {
- t.ifError(er)
- if (er) return t.end()
- okStatus(t, res)
- t.deepEqual(data, { ok: true, name: 'testuser', roles: [] })
- t.ok(couch.token)
- t.deepEqual(couch.token,
- { AuthSession: couch.token && couch.token.AuthSession,
- version: '1',
- expires: couch.token && couch.token.expires,
- path: '/',
- httponly: true })
- t.ok(couch.token, 'has token')
- t.end()
- })
-})
-
-var userRecord
-tap.test('get', function (t) {
- couch.get(u, function (er, res, data) {
- t.ifError(er)
- if (er) return t.end()
- t.ok(data, 'data')
- t.ok(couch.token, 'token')
- userRecord = data
- okStatus(t, res)
- t.end()
- })
-})
-
-var userRecordMarker = require('crypto').randomBytes(30).toString('base64')
-tap.test('add key to user record', function (t) {
- userRecord.testingCouchLogin = userRecordMarker
- var revved = u + '?rev=' + userRecord._rev
- couch.put(revved, userRecord, function (er, res, data) {
- t.ifError(er)
- if (er) return t.end()
- okStatus(t, res)
- t.ok(data, 'data')
- t.ok(couch.token, 'token')
- // get again so we have the current rev
- couch.get(u, function (er, res, data) {
- t.ifError(er)
- if (er) return t.end()
- okStatus(t, res)
- t.ok(data)
- t.ok(userRecord)
- t.equal(data.testingCouchLogin, userRecord.testingCouchLogin)
- userRecord = data
- t.end()
- })
- })
-})
-
-tap.test('remove key', function (t) {
- var revved = u + '?rev=' + userRecord._rev
- delete userRecord.testingCouchLogin
- couch.put(revved, userRecord, function (er, res, data) {
- t.ifError(er)
- if (er) return t.end()
- okStatus(t, res)
- t.ok(couch.token, 'token')
- couch.get(u, function (er, res, data) {
- t.ifError(er)
- if (er) return t.end()
- okStatus(t, res)
- t.ok(data, 'data')
- t.ok(couch.token, 'token')
- t.equal(data.testingCouchLogin, undefined)
- userRecord = data
- t.end()
- })
- })
-})
-
-var crypto = require('crypto')
-function sha (s) {
- return crypto.createHash("sha1").update(s).digest("hex")
-}
-
-tap.test('change password manually', function (t) {
- var revved = u + '?rev=' + userRecord._rev
- , newPass = newAuth.password
- , newSalt = 'test-salt-two'
- , newSha = sha(newPass + newSalt)
-
- userRecord.salt = newSalt
- userRecord.password_sha = newSha
- couch.put(revved, userRecord, function (er, res, data) {
- t.ifError(er)
- if (er) return t.end()
- okStatus(t, res)
-
- // changing password invalidates session.
- // need to re-login
- couch.login(newAuth, function (er, res, data) {
- t.ifError(er)
- if (er) return t.end()
- okStatus(t, res)
-
- couch.get(u, function (er, res, data) {
- t.ifError(er)
- if (er) return t.end()
- okStatus(t, res)
- t.ok(data, 'data')
- t.ok(couch.token, 'token')
- t.equal(data.testingCouchLogin, undefined)
- userRecord = data
- t.end()
- })
- })
- })
-})
-
-tap.test('change password back manually', function (t) {
- var revved = u + '?rev=' + userRecord._rev
- , newPass = auth.password
- , newSalt = 'test-salt'
- , newSha = sha(newPass + newSalt)
-
- userRecord.salt = newSalt
- userRecord.password_sha = newSha
- couch.put(revved, userRecord, function (er, res, data) {
- t.ifError(er)
- if (er) return t.end()
- okStatus(t, res)
- t.ok(data, 'data')
- t.ok(couch.token, 'token')
-
- couch.login(auth, function (er, res, data) {
- t.ifError(er)
- if (er) return t.end()
- okStatus(t, res)
-
- couch.get(u, function (er, res, data) {
- t.ifError(er)
- if (er) return t.end()
- okStatus(t, res)
- t.ok(data, 'data')
- t.ok(couch.token, 'token')
- userRecord = data
- t.end()
- })
- })
- })
-})
-
-tap.test('change password easy', function (t) {
- couch.changePass(newAuth, function (er, res, data) {
- t.ifError(er)
- if (er) return t.end()
- okStatus(t, res)
-
- couch.get(u, function (er, res, data) {
- t.ifError(er)
- if (er) return t.end()
- okStatus(t, res)
- t.ok(data, 'data')
- t.ok(couch.token, 'token')
- t.equal(data.testingCouchLogin, undefined)
- t.equal(data.mustChangePass, true)
- userRecord = data
- t.end()
- })
- })
-})
-
-tap.test('change password back easy', function (t) {
- couch.changePass(auth, function (er, res, data) {
- t.ifError(er)
- if (er) return t.end()
- okStatus(t, res)
-
- couch.get(u, function (er, res, data) {
- t.ifError(er)
- if (er) return t.end()
- okStatus(t, res)
- t.ok(data, 'data')
- t.ok(couch.token, 'token')
- t.equal(data.testingCouchLogin, undefined)
- t.equal(data.mustChangePass, false)
- userRecord = data
- t.end()
- })
- })
-})
-
-
-tap.test('logout', function (t) {
- couch.logout(function (er, res, data) {
- t.ifError(er)
- if (er) return t.end()
- okStatus(t, res)
- t.ok(data, 'data')
- t.notOk(couch.token, 'token')
- t.end()
- })
-})
-
-// now try some logged out monkey business!
-tap.test('logged out post', function (t) {
- couch.post('/yeah-right', {foo: 100}, function (er, res, data) {
- t.ok(er, 'should get an error')
- t.notOk(couch.token, 'token')
- t.end()
- })
-})
-
-tap.test('anonymous put', function (t) {
- var guy = couch.anonymous()
- guy.put('/remember', {november:5}, function (er, res, data) {
- t.ifError(er)
- if (er) return t.end()
- t.equal(res.statusCode, 401)
- t.deepEqual(data, { error: 'unauthorized'
- , reason: 'You are not a server admin.' })
- t.end()
- })
-})
-
-tap.test('anonymous get', function (t) {
- var guy = couch.anonymous()
- guy.get('/', function (er, res, data) {
- t.ifError(er)
- if (er) return t.end()
- t.equal(res.statusCode, 200)
- t.deepEqual(data, { couchdb: 'Welcome', version: '1.2.0' })
- t.end()
- })
-})
-
-
-
-var signupUser = { name: 'test-user-signup', password: 'signup-test' }
-
-tap.test('sign up as new user', function (t) {
- couch.signup(signupUser, function (er, res, data) {
- t.ifError(er)
- if (er) return t.end()
- okStatus(t, res)
- t.ok(data, 'data')
- t.has(data,
- { _id: 'org.couchdb.user:test-user-signup',
- name: 'test-user-signup',
- roles: [],
- type: 'user' })
- t.ok(data._rev, 'rev')
- t.ok(data.date, 'date')
- t.ok(data.password_sha, 'hash')
- t.ok(data.salt, 'salt')
- t.ok(couch.token, 'token')
- // now delete account
- var name = signupUser.name
- couch.deleteAccount(name, function (er, res, data) {
- t.ifError(er, 'should be no error deleting account')
- if (er) return t.end()
- okStatus(t, res)
- t.ok(data, 'data')
- t.end()
- })
- })
-})
-
-tap.test('using basic auth', function (t) {
- var c = new CouchLogin(couch.couch, 'basic')
- c.login(auth, function () {
- c.get('/_users/org.couchdb.user:testuser', function (er, res, data) {
- if (er)
- throw er
- okStatus(t, res)
- t.ok(data, 'data')
- t.end()
- })
- })
-})
diff --git a/deps/npm/node_modules/npm-registry-client/node_modules/couch-login/test/fixtures/_replicator.couch b/deps/npm/node_modules/npm-registry-client/node_modules/couch-login/test/fixtures/_replicator.couch
deleted file mode 100644
index b8dbbebd0..000000000
--- a/deps/npm/node_modules/npm-registry-client/node_modules/couch-login/test/fixtures/_replicator.couch
+++ /dev/null
Binary files differ
diff --git a/deps/npm/node_modules/npm-registry-client/node_modules/couch-login/test/fixtures/couch.ini b/deps/npm/node_modules/npm-registry-client/node_modules/couch-login/test/fixtures/couch.ini
deleted file mode 100644
index 4579a2f02..000000000
--- a/deps/npm/node_modules/npm-registry-client/node_modules/couch-login/test/fixtures/couch.ini
+++ /dev/null
@@ -1,24 +0,0 @@
-[couchdb]
-database_dir = test/fixtures
-view_index_dir = test/fixtures
-
-[httpd]
-port = 15985
-bind_address = 127.0.0.1
-secure_rewrites = false
-allow_jsonp = true
-config_whitelist = [{uuids,algorithm},{vhosts,"*"},{admins,"*"},{log,level},{httpd,allow_jsonp},{httpd,secure_rewrites},{httpd,mobile_futon},{httpd,sammy_futon},{httpd,cors},{httpd,x_forwarded_host},{httpd,'WWW-Authenticate'},{cors,"*"},{compactions,"*"},{replicator,db},{attachments,compression_level},{attachments,compressible_types},{couch_httpd_auth,authentication_db},{couch_httpd_auth,allow_persistent_cookies},{couch_httpd_auth,authentication_redirect},{couch_httpd_auth,require_valid_user},{couch_httpd_auth,timeout},{couch_httpd_auth,secret},{couchdb,os_process_timeout},{query_server_config,reduce_limit},{couch_httpd_oauth,"*"},{oauth_token_users,"*"},{oauth_token_secrets,"*"},{oauth_consumer_secrets,"*"},{browserid,enabled},{browserid,hash_secret},{fb,"*"}]
-
-[log]
-file = test/fixtures/couch.log
-
-[admins]
-admin = -hashed-b933598b0ade0e4c2a258d53c95990d5939461dd,a44895e5740b79d14b392ada8021d31d
-
-[couch_httpd_auth]
-secret = cafebad000deadbeef00000019790701
-timeout = 36000
-allow_persistent_cookies = true
-
-[vhosts]
-127.0.0.1:15985 = /registry/_design/ghost/_rewrite
diff --git a/deps/npm/node_modules/npm-registry-client/node_modules/couch-login/test/fixtures/registry.couch b/deps/npm/node_modules/npm-registry-client/node_modules/couch-login/test/fixtures/registry.couch
deleted file mode 100644
index 5806317db..000000000
--- a/deps/npm/node_modules/npm-registry-client/node_modules/couch-login/test/fixtures/registry.couch
+++ /dev/null
Binary files differ
diff --git a/deps/npm/node_modules/npm-registry-client/node_modules/couch-login/test/registry.js b/deps/npm/node_modules/npm-registry-client/node_modules/couch-login/test/registry.js
deleted file mode 100644
index d99d9f4f6..000000000
--- a/deps/npm/node_modules/npm-registry-client/node_modules/couch-login/test/registry.js
+++ /dev/null
@@ -1,252 +0,0 @@
-// Should be able to use this module to log into the registry, as well.
-
-var tap = require('tap')
-, CouchLogin = require('../couch-login.js')
-
-var auth = { name: 'testuser', password: 'test' }
-, newAuth = { name: 'testuser', password: 'asdfasdf' }
-, couch = new CouchLogin('http://127.0.0.1:15985/')
-, u = '/_users/org.couchdb.user:' + auth.name
-, userRecordMarker
-
-// simulate the 'must change password on next login' thing
-newAuth.mustChangePass = true
-auth.mustChangePass = false
-
-
-function okStatus (t, res) {
- var x = { found: res.statusCode, wanted: 'around 200' }
- var r = res.statusCode
- x.ok = (r >= 200 && r < 300)
- return t.ok(x.ok, 'Status code should be 200-ish', x)
-}
-
-tap.test('login', function (t) {
- couch.login(auth, function (er, res, data) {
- t.ifError(er)
- if (er) return t.end()
- okStatus(t, res)
- t.deepEqual(data, { ok: true, name: 'testuser', roles: [] })
- t.ok(couch.token)
- t.deepEqual(couch.token,
- { AuthSession: couch.token && couch.token.AuthSession,
- version: '1',
- expires: couch.token && couch.token.expires,
- path: '/',
- httponly: true })
- t.ok(couch.token, 'has token')
- t.end()
- })
-})
-
-var userRecord
-tap.test('get', function (t) {
- couch.get(u, function (er, res, data) {
- t.ifError(er)
- if (er) return t.end()
- t.ok(data, 'data')
- t.ok(couch.token, 'token')
- userRecord = data
- okStatus(t, res)
- t.end()
- })
-})
-
-var userRecordMarker = require('crypto').randomBytes(30).toString('base64')
-tap.test('add key to user record', function (t) {
- userRecord.testingCouchLogin = userRecordMarker
- var revved = u + '?rev=' + userRecord._rev
- couch.put(revved, userRecord, function (er, res, data) {
- t.ifError(er)
- if (er) return t.end()
- okStatus(t, res)
- t.ok(data, 'data')
- t.ok(couch.token, 'token')
- // get again so we have the current rev
- couch.get(u, function (er, res, data) {
- t.ifError(er)
- if (er) return t.end()
- okStatus(t, res)
- t.ok(data)
- t.ok(userRecord)
- t.equal(data.testingCouchLogin, userRecord.testingCouchLogin)
- userRecord = data
- t.end()
- })
- })
-})
-
-tap.test('remove key', function (t) {
- var revved = u + '?rev=' + userRecord._rev
- delete userRecord.testingCouchLogin
- couch.put(revved, userRecord, function (er, res, data) {
- t.ifError(er)
- if (er) return t.end()
- okStatus(t, res)
- t.ok(couch.token, 'token')
- couch.get(u, function (er, res, data) {
- t.ifError(er)
- if (er) return t.end()
- okStatus(t, res)
- t.ok(data, 'data')
- t.ok(couch.token, 'token')
- t.equal(data.testingCouchLogin, undefined)
- userRecord = data
- t.end()
- })
- })
-})
-
-var crypto = require('crypto')
-function sha (s) {
- return crypto.createHash("sha1").update(s).digest("hex")
-}
-
-tap.test('change password manually', function (t) {
- var revved = u + '?rev=' + userRecord._rev
- , newPass = newAuth.password
- , newSalt = 'test-salt-two'
- , newSha = sha(newPass + newSalt)
-
- userRecord.salt = newSalt
- userRecord.password_sha = newSha
- couch.put(revved, userRecord, function (er, res, data) {
- t.ifError(er)
- if (er) return t.end()
- okStatus(t, res)
-
- // changing password invalidates session.
- // need to re-login
- couch.login(newAuth, function (er, res, data) {
- t.ifError(er)
- if (er) return t.end()
- okStatus(t, res)
-
- couch.get(u, function (er, res, data) {
- t.ifError(er)
- if (er) return t.end()
- okStatus(t, res)
- t.ok(data, 'data')
- t.ok(couch.token, 'token')
- t.equal(data.testingCouchLogin, undefined)
- userRecord = data
- t.end()
- })
- })
- })
-})
-
-tap.test('change password back manually', function (t) {
- var revved = u + '?rev=' + userRecord._rev
- , newPass = auth.password
- , newSalt = 'test-salt'
- , newSha = sha(newPass + newSalt)
-
- userRecord.salt = newSalt
- userRecord.password_sha = newSha
- couch.put(revved, userRecord, function (er, res, data) {
- t.ifError(er)
- if (er) return t.end()
- okStatus(t, res)
- t.ok(data, 'data')
- t.ok(couch.token, 'token')
-
- couch.login(auth, function (er, res, data) {
- t.ifError(er)
- if (er) return t.end()
- okStatus(t, res)
-
- couch.get(u, function (er, res, data) {
- t.ifError(er)
- if (er) return t.end()
- okStatus(t, res)
- t.ok(data, 'data')
- t.ok(couch.token, 'token')
- userRecord = data
- t.end()
- })
- })
- })
-})
-
-tap.test('change password easy', function (t) {
- couch.changePass(newAuth, function (er, res, data) {
- t.ifError(er)
- if (er) return t.end()
- okStatus(t, res)
-
- couch.get(u, function (er, res, data) {
- t.ifError(er)
- if (er) return t.end()
- okStatus(t, res)
- t.ok(data, 'data')
- t.ok(couch.token, 'token')
- t.equal(data.testingCouchLogin, undefined)
- t.equal(data.mustChangePass, true)
- userRecord = data
- t.end()
- })
- })
-})
-
-tap.test('change password back easy', function (t) {
- couch.changePass(auth, function (er, res, data) {
- t.ifError(er)
- if (er) return t.end()
- okStatus(t, res)
-
- couch.get(u, function (er, res, data) {
- t.ifError(er)
- if (er) return t.end()
- okStatus(t, res)
- t.ok(data, 'data')
- t.ok(couch.token, 'token')
- t.equal(data.testingCouchLogin, undefined)
- t.notOk(data.mustChangePass)
- userRecord = data
- t.end()
- })
- })
-})
-
-
-tap.test('logout', function (t) {
- couch.logout(function (er, res, data) {
- t.ifError(er)
- if (er) return t.end()
- okStatus(t, res)
- t.ok(data, 'data')
- t.notOk(couch.token, 'token')
- t.end()
- })
-})
-
-var signupUser = { name: 'test-user-signup', password: 'signup-test' }
-
-tap.test('sign up as new user', function (t) {
- couch.signup(signupUser, function (er, res, data) {
- t.ifError(er)
- if (er) return t.end()
- okStatus(t, res)
- t.ok(data, 'data')
- t.has(data,
- { _id: 'org.couchdb.user:test-user-signup',
- name: 'test-user-signup',
- roles: [],
- type: 'user' })
- t.ok(data._rev, 'rev')
- t.ok(data.date, 'date')
- t.ok(data.password_sha, 'hash')
- t.ok(data.salt, 'salt')
- t.ok(couch.token, 'token')
- // now delete account
- var name = signupUser.name
- couch.deleteAccount(name, function (er, res, data) {
- t.ifError(er, 'should be no error deleting account')
- if (er) return t.end()
- okStatus(t, res)
- t.ok(data, 'data')
- t.end()
- })
- })
-})
diff --git a/deps/npm/node_modules/npm-registry-client/node_modules/couch-login/test/reset-then-signup.js b/deps/npm/node_modules/npm-registry-client/node_modules/couch-login/test/reset-then-signup.js
deleted file mode 100644
index 77a5ceda9..000000000
--- a/deps/npm/node_modules/npm-registry-client/node_modules/couch-login/test/reset-then-signup.js
+++ /dev/null
@@ -1,112 +0,0 @@
-var test = require('tap').test
-var CouchLogin = require('../couch-login.js')
-
-var auth = { name: 'testuser', password: 'test' }
-, newAuth = { name: 'testuser', password: 'asdf', mustChangePass: true }
-, db = 'http://localhost:15985/'
-, couch = new CouchLogin(db)
-, u = '/_users/org.couchdb.user:' + auth.name
-, admin = { name: 'admin', password: 'admin' }
-, newUser = { name: 'testuser', password: 'test' }
-, newUserCouch = null
-, authToken = null
-
-newUser.name += Math.floor(Math.random() * 1E9)
-
-var okGlobal = Object.keys(global)
-
-var adminCouch = new CouchLogin(db, 'basic')
-
-function okStatus (t, res) {
- var x = { found: res.statusCode, wanted: 'around 200' }
- var r = res.statusCode
- x.ok = (r >= 200 && r < 300)
- return t.ok(x.ok, 'Status code should be 200-ish', x)
-}
-
-test('adminCouch login', function (t) {
- t.deepEqual(Object.keys(global), okGlobal)
- console.error('adminCouch login')
- adminCouch.login(admin, function (er, res, data) {
- if (er)
- throw er
- okStatus(t, res)
- t.ok(data)
- t.end()
- })
-})
-
-test('get the user data as admin', function (t) {
- t.deepEqual(Object.keys(global), okGlobal)
- console.error('2')
- adminCouch.get(u, function (er, res, data) {
- if (er)
- throw er
- okStatus(t, res)
- t.ok(data)
- t.end()
- })
-})
-
-test('admin user changes the password for non-admin user', function (t) {
- console.error(3)
- t.deepEqual(Object.keys(global), okGlobal)
- adminCouch.changePass(newAuth, function (er, res, data) {
- if (er)
- throw er
- okStatus(t, res)
- t.ok(data)
- t.end()
- })
-})
-
-test('testuser logs in', function (t) {
- console.error(4)
- t.deepEqual(Object.keys(global), okGlobal)
- couch.login(newAuth, function (er, res, data) {
- if (er)
- throw er
- okStatus(t, res)
- t.deepEqual(data, { ok: true, name: 'testuser', roles: [] })
- authToken = couch.token
- t.end()
- })
-})
-
-// test('testuser changes password', function (t) {
-// couch = new CouchLogin(db)
-// couch.token = authToken
-// couch.changePass(auth, function (er, res, data) {
-// if (er)
-// throw er
-// okStatus(t, res)
-// console.error(data)
-// t.ok(data)
-// t.end()
-// })
-// })
-
-test('new user signup', function (t) {
- t.deepEqual(Object.keys(global), okGlobal)
- newUserCouch = new CouchLogin(db)
- newUserCouch.signup(newUser, function (er, res, data) {
- if (er)
- throw er
- okStatus(t, res)
- console.error(data)
- t.ok(data)
- t.end()
- })
-})
-
-test('delete newUser account', function (t) {
- t.deepEqual(Object.keys(global), okGlobal)
- newUserCouch.deleteAccount(newUser.name, function (er, res, data) {
- if (er)
- throw er
- okStatus(t, res)
- console.error(data)
- t.ok(data)
- t.end()
- })
-})
diff --git a/deps/npm/node_modules/npm-registry-client/node_modules/couch-login/test/zz-teardown.js b/deps/npm/node_modules/npm-registry-client/node_modules/couch-login/test/zz-teardown.js
deleted file mode 100644
index a66e24a10..000000000
--- a/deps/npm/node_modules/npm-registry-client/node_modules/couch-login/test/zz-teardown.js
+++ /dev/null
@@ -1,23 +0,0 @@
-// kill the couchdb process that's running as a detached child process
-// started by the 00-setup.js test
-
-var fs = require('fs')
-var test = require('tap').test
-var path = require('path')
-var pidfile = path.resolve(__dirname, 'fixtures', 'pid')
-var _users = path.resolve(__dirname, 'fixtures', '_users.couch')
-
-test('kill all the users', function (t) {
- fs.unlinkSync(_users)
- t.pass('_users db deleted')
- t.end()
-})
-
-test('craigslist (well, how do you get rid of YOUR couches?)', function (t) {
- var pid = fs.readFileSync(pidfile)
- fs.unlinkSync(pidfile)
- process.kill(pid)
- t.pass('couch is no more')
- t.end()
-})
-
diff --git a/deps/npm/node_modules/npm-registry-client/package.json b/deps/npm/node_modules/npm-registry-client/package.json
index 8a62919c5..f7e876eaa 100644
--- a/deps/npm/node_modules/npm-registry-client/package.json
+++ b/deps/npm/node_modules/npm-registry-client/package.json
@@ -6,7 +6,7 @@
},
"name": "npm-registry-client",
"description": "Client for the npm registry",
- "version": "0.2.24",
+ "version": "0.4.8",
"repository": {
"url": "git://github.com/isaacs/npm-registry-client"
},
@@ -15,15 +15,14 @@
"test": "tap test/*.js"
},
"dependencies": {
- "request": "2 >=2.20.0",
- "graceful-fs": "~1.2.0",
- "semver": "~1.1.0",
+ "request": "2 >=2.25.0",
+ "graceful-fs": "~2.0.0",
+ "semver": "^2.2.1",
"slide": "~1.1.3",
"chownr": "0",
"mkdirp": "~0.3.3",
"rimraf": "~2",
"retry": "0.6.0",
- "couch-login": "~0.1.15",
"npmlog": ""
},
"devDependencies": {
@@ -33,11 +32,13 @@
"npmlog": ""
},
"license": "BSD",
- "readme": "# npm-registry-client\n\nThe code that npm uses to talk to the registry.\n\nIt handles all the caching and HTTP calls.\n\n## Usage\n\n```javascript\nvar RegClient = require('npm-registry-client')\nvar client = new RegClient(config)\n\nclient.get(\"npm\", \"latest\", 1000, function (er, data, raw, res) {\n // error is an error if there was a problem.\n // data is the parsed data object\n // raw is the json string\n // res is the response from couch\n})\n```\n\n# Configuration\n\nThis program is designed to work with\n[npmconf](https://npmjs.org/package/npmconf), but you can also pass in\na plain-jane object with the appropriate configs, and it'll shim it\nfor you. Any configuration thingie that has get/set/del methods will\nalso be accepted.\n\n* `registry` **Required** {String} URL to the registry\n* `cache` **Required** {String} Path to the cache folder\n* `always-auth` {Boolean} Auth even for GET requests.\n* `auth` {String} A base64-encoded `username:password`\n* `email` {String} User's email address\n* `tag` {String} The default tag to use when publishing new packages.\n Default = `\"latest\"`\n* `ca` {String} Cerficate signing authority certificates to trust.\n* `strict-ssl` {Boolean} Whether or not to be strict with SSL\n certificates. Default = `true`\n* `user-agent` {String} User agent header to send. Default =\n `\"node/{process.version} {process.platform} {process.arch}\"`\n* `log` {Object} The logger to use. Defaults to `require(\"npmlog\")` if\n that works, otherwise logs are disabled.\n* `fetch-retries` {Number} Number of times to retry on GET failures.\n Default=2\n* `fetch-retry-factor` {Number} `factor` setting for `node-retry`. Default=10\n* `fetch-retry-mintimeout` {Number} `minTimeout` setting for `node-retry`.\n Default=10000 (10 seconds)\n* `fetch-retry-maxtimeout` {Number} `maxTimeout` setting for `node-retry`.\n Default=60000 (60 seconds)\n* `proxy` {URL} The url to proxy requests through.\n* `https-proxy` {URL} The url to proxy https requests through.\n Defaults to be the same as `proxy` if unset.\n* `_auth` {String} The base64-encoded authorization header.\n* `username` `_password` {String} Username/password to use to generate\n `_auth` if not supplied.\n* `_token` {Object} A token for use with\n [couch-login](https://npmjs.org/package/couch-login)\n\n# client.request(method, where, [what], [etag], [nofollow], cb)\n\n* `method` {String} HTTP method\n* `where` {String} Path to request on the server\n* `what` {Stream | Buffer | String | Object} The request body. Objects\n that are not Buffers or Streams are encoded as JSON.\n* `etag` {String} The cached ETag\n* `nofollow` {Boolean} Prevent following 302/301 responses\n* `cb` {Function}\n * `error` {Error | null}\n * `data` {Object} the parsed data object\n * `raw` {String} the json\n * `res` {Response Object} response from couch\n\nMake a request to the registry. All the other methods are wrappers\naround this. one.\n\n# client.adduser(username, password, email, cb)\n\n* `username` {String}\n* `password` {String}\n* `email` {String}\n* `cb` {Function}\n\nAdd a user account to the registry, or verify the credentials.\n\n# client.get(url, [timeout], [nofollow], [staleOk], cb)\n\n* `url` {String} The url path to fetch\n* `timeout` {Number} Number of seconds old that a cached copy must be\n before a new request will be made.\n* `nofollow` {Boolean} Do not follow 301/302 responses\n* `staleOk` {Boolean} If there's cached data available, then return that\n to the callback quickly, and update the cache the background.\n\nFetches data from the registry via a GET request, saving it in\nthe cache folder with the ETag.\n\n# client.publish(data, tarball, [readme], cb)\n\n* `data` {Object} Package data\n* `tarball` {String | Stream} Filename or stream of the package tarball\n* `readme` {String} Contents of the README markdown file\n* `cb` {Function}\n\nPublish a package to the registry.\n\nNote that this does not create the tarball from a folder. However, it\ncan accept a gzipped tar stream or a filename to a tarball.\n\n# client.star(package, starred, cb)\n\n* `package` {String} Name of the package to star\n* `starred` {Boolean} True to star the package, false to unstar it.\n* `cb` {Function}\n\nStar or unstar a package.\n\nNote that the user does not have to be the package owner to star or\nunstar a package, though other writes do require that the user be the\npackage owner.\n\n# client.stars(username, cb)\n\n* `username` {String} Name of user to fetch starred packages for.\n* `cb` {Function}\n\nView your own or another user's starred packages.\n\n# client.tag(project, version, tag, cb)\n\n* `project` {String} Project name\n* `version` {String} Version to tag\n* `tag` {String} Tag name to apply\n* `cb` {Function}\n\nMark a version in the `dist-tags` hash, so that `pkg@tag`\nwill fetch the specified version.\n\n# client.unpublish(name, [ver], cb)\n\n* `name` {String} package name\n* `ver` {String} version to unpublish. Leave blank to unpublish all\n versions.\n* `cb` {Function}\n\nRemove a version of a package (or all versions) from the registry. When\nthe last version us unpublished, the entire document is removed from the\ndatabase.\n\n# client.upload(where, file, [etag], [nofollow], cb)\n\n* `where` {String} URL path to upload to\n* `file` {String | Stream} Either the filename or a readable stream\n* `etag` {String} Cache ETag\n* `nofollow` {Boolean} Do not follow 301/302 responses\n* `cb` {Function}\n\nUpload an attachment. Mostly used by `client.publish()`.\n",
+ "readme": "# npm-registry-client\n\nThe code that npm uses to talk to the registry.\n\nIt handles all the caching and HTTP calls.\n\n## Usage\n\n```javascript\nvar RegClient = require('npm-registry-client')\nvar client = new RegClient(config)\n\nclient.get(\"npm\", \"latest\", 1000, function (er, data, raw, res) {\n // error is an error if there was a problem.\n // data is the parsed data object\n // raw is the json string\n // res is the response from couch\n})\n```\n\n# Configuration\n\nThis program is designed to work with\n[npmconf](https://npmjs.org/package/npmconf), but you can also pass in\na plain-jane object with the appropriate configs, and it'll shim it\nfor you. Any configuration thingie that has get/set/del methods will\nalso be accepted.\n\n* `registry` **Required** {String} URL to the registry\n* `cache` **Required** {String} Path to the cache folder\n* `always-auth` {Boolean} Auth even for GET requests.\n* `auth` {String} A base64-encoded `username:password`\n* `email` {String} User's email address\n* `tag` {String} The default tag to use when publishing new packages.\n Default = `\"latest\"`\n* `ca` {String} Cerficate signing authority certificates to trust.\n* `cert` {String} Client certificate (PEM encoded). Enable access\n to servers that require client certificates\n* `key` {String} Private key (PEM encoded) for client certificate 'cert'\n* `strict-ssl` {Boolean} Whether or not to be strict with SSL\n certificates. Default = `true`\n* `user-agent` {String} User agent header to send. Default =\n `\"node/{process.version} {process.platform} {process.arch}\"`\n* `log` {Object} The logger to use. Defaults to `require(\"npmlog\")` if\n that works, otherwise logs are disabled.\n* `fetch-retries` {Number} Number of times to retry on GET failures.\n Default=2\n* `fetch-retry-factor` {Number} `factor` setting for `node-retry`. Default=10\n* `fetch-retry-mintimeout` {Number} `minTimeout` setting for `node-retry`.\n Default=10000 (10 seconds)\n* `fetch-retry-maxtimeout` {Number} `maxTimeout` setting for `node-retry`.\n Default=60000 (60 seconds)\n* `proxy` {URL} The url to proxy requests through.\n* `https-proxy` {URL} The url to proxy https requests through.\n Defaults to be the same as `proxy` if unset.\n* `_auth` {String} The base64-encoded authorization header.\n* `username` `_password` {String} Username/password to use to generate\n `_auth` if not supplied.\n* `_token` {Object} A token for use with\n [couch-login](https://npmjs.org/package/couch-login)\n\n# client.request(method, where, [what], [etag], [nofollow], cb)\n\n* `method` {String} HTTP method\n* `where` {String} Path to request on the server\n* `what` {Stream | Buffer | String | Object} The request body. Objects\n that are not Buffers or Streams are encoded as JSON.\n* `etag` {String} The cached ETag\n* `nofollow` {Boolean} Prevent following 302/301 responses\n* `cb` {Function}\n * `error` {Error | null}\n * `data` {Object} the parsed data object\n * `raw` {String} the json\n * `res` {Response Object} response from couch\n\nMake a request to the registry. All the other methods are wrappers\naround this. one.\n\n# client.adduser(username, password, email, cb)\n\n* `username` {String}\n* `password` {String}\n* `email` {String}\n* `cb` {Function}\n\nAdd a user account to the registry, or verify the credentials.\n\n# client.deprecate(name, version, message, cb)\n\n* `name` {String} The package name\n* `version` {String} Semver version range\n* `message` {String} The message to use as a deprecation warning\n* `cb` {Function}\n\nDeprecate a version of a package in the registry.\n\n# client.bugs(name, cb)\n\n* `name` {String} the name of the package\n* `cb` {Function}\n\nGet the url for bugs of a package\n\n# client.get(url, [timeout], [nofollow], [staleOk], cb)\n\n* `url` {String} The url path to fetch\n* `timeout` {Number} Number of seconds old that a cached copy must be\n before a new request will be made.\n* `nofollow` {Boolean} Do not follow 301/302 responses\n* `staleOk` {Boolean} If there's cached data available, then return that\n to the callback quickly, and update the cache the background.\n\nFetches data from the registry via a GET request, saving it in\nthe cache folder with the ETag.\n\n# client.publish(data, tarball, [readme], cb)\n\n* `data` {Object} Package data\n* `tarball` {String | Stream} Filename or stream of the package tarball\n* `readme` {String} Contents of the README markdown file\n* `cb` {Function}\n\nPublish a package to the registry.\n\nNote that this does not create the tarball from a folder. However, it\ncan accept a gzipped tar stream or a filename to a tarball.\n\n# client.star(package, starred, cb)\n\n* `package` {String} Name of the package to star\n* `starred` {Boolean} True to star the package, false to unstar it.\n* `cb` {Function}\n\nStar or unstar a package.\n\nNote that the user does not have to be the package owner to star or\nunstar a package, though other writes do require that the user be the\npackage owner.\n\n# client.stars(username, cb)\n\n* `username` {String} Name of user to fetch starred packages for.\n* `cb` {Function}\n\nView your own or another user's starred packages.\n\n# client.tag(project, version, tag, cb)\n\n* `project` {String} Project name\n* `version` {String} Version to tag\n* `tag` {String} Tag name to apply\n* `cb` {Function}\n\nMark a version in the `dist-tags` hash, so that `pkg@tag`\nwill fetch the specified version.\n\n# client.unpublish(name, [ver], cb)\n\n* `name` {String} package name\n* `ver` {String} version to unpublish. Leave blank to unpublish all\n versions.\n* `cb` {Function}\n\nRemove a version of a package (or all versions) from the registry. When\nthe last version us unpublished, the entire document is removed from the\ndatabase.\n\n# client.upload(where, file, [etag], [nofollow], cb)\n\n* `where` {String} URL path to upload to\n* `file` {String | Stream} Either the filename or a readable stream\n* `etag` {String} Cache ETag\n* `nofollow` {Boolean} Do not follow 301/302 responses\n* `cb` {Function}\n\nUpload an attachment. Mostly used by `client.publish()`.\n",
"readmeFilename": "README.md",
"bugs": {
"url": "https://github.com/isaacs/npm-registry-client/issues"
},
- "_id": "npm-registry-client@0.2.24",
- "_from": "npm-registry-client@~0.2.22"
+ "homepage": "https://github.com/isaacs/npm-registry-client",
+ "_id": "npm-registry-client@0.4.8",
+ "_shasum": "a6685a161033101be6064b7af887ab440e8695d0",
+ "_from": "npm-registry-client@~0.4.7"
}
diff --git a/deps/npm/node_modules/npm-registry-client/test/adduser-new.js b/deps/npm/node_modules/npm-registry-client/test/adduser-new.js
index a0fee04c3..96dfc26d1 100644
--- a/deps/npm/node_modules/npm-registry-client/test/adduser-new.js
+++ b/deps/npm/node_modules/npm-registry-client/test/adduser-new.js
@@ -32,9 +32,7 @@ tap.test("create new user account", function (t) {
req.on("end", function () {
var o = JSON.parse(b)
- var salt = o.salt
- userdata.salt = salt
- userdata.password_sha = sha(password + salt)
+ userdata.password = password
userdata.date = o.date
t.deepEqual(o, userdata)
diff --git a/deps/npm/node_modules/npm-registry-client/test/adduser-update.js b/deps/npm/node_modules/npm-registry-client/test/adduser-update.js
index 03a1edbb2..370457147 100644
--- a/deps/npm/node_modules/npm-registry-client/test/adduser-update.js
+++ b/deps/npm/node_modules/npm-registry-client/test/adduser-update.js
@@ -32,7 +32,7 @@ tap.test("update a user acct", function (t) {
res.json({error: "conflict"})
})
- server.expect("GET", "/-/user/org.couchdb.user:username", function (req, res) {
+ server.expect("GET", "/-/user/org.couchdb.user:username?write=true", function (req, res) {
t.equal(req.method, "GET")
res.json(userdata)
})
@@ -47,9 +47,7 @@ tap.test("update a user acct", function (t) {
req.on("end", function () {
var o = JSON.parse(b)
- var salt = o.salt
- userdata.salt = salt
- userdata.password_sha = sha(password + salt)
+ userdata.password = password
userdata.date = o.date
t.deepEqual(o, userdata)
diff --git a/deps/npm/node_modules/npm-registry-client/test/fixtures/server.js b/deps/npm/node_modules/npm-registry-client/test/fixtures/server.js
index 468a89e5b..80bbf4803 100644
--- a/deps/npm/node_modules/npm-registry-client/test/fixtures/server.js
+++ b/deps/npm/node_modules/npm-registry-client/test/fixtures/server.js
@@ -17,10 +17,10 @@ function handler (req, res) {
, mu = req.method + ' ' + req.url
var k = server._expect[mu] ? mu : server._expect[u] ? u : null
- if (!k) throw Error('unexpected request', req.method, req.url)
+ if (!k) throw Error('unexpected request: ' + req.method + ' ' + req.url)
var fn = server._expect[k].shift()
- if (!fn) throw Error('unexpected request', req.method, req.url)
+ if (!fn) throw Error('unexpected request' + req.method + ' ' + req.url)
var remain = (Object.keys(server._expect).reduce(function (s, k) {
diff --git a/deps/npm/node_modules/npm-registry-client/test/publish-again.js b/deps/npm/node_modules/npm-registry-client/test/publish-again.js
new file mode 100644
index 000000000..011fbaf5a
--- /dev/null
+++ b/deps/npm/node_modules/npm-registry-client/test/publish-again.js
@@ -0,0 +1,81 @@
+var tap = require('tap')
+var server = require('./fixtures/server.js')
+var RC = require('../')
+var client = new RC(
+ { cache: __dirname + '/fixtures/cache'
+ , registry: 'http://localhost:' + server.port
+ , username: "username"
+ , password: "password"
+ , email: "i@izs.me"
+ , _auth: new Buffer("username:password").toString('base64')
+ , "always-auth": true
+ })
+
+var fs = require("fs")
+
+tap.test("publish again", function (t) {
+ var lastTime = null
+ server.expect("/npm-registry-client", function (req, res) {
+ t.equal(req.method, "PUT")
+ var b = ""
+ req.setEncoding('utf8')
+ req.on("data", function (d) {
+ b += d
+ })
+
+ req.on("end", function () {
+ var o = lastTime = JSON.parse(b)
+ t.equal(o._id, "npm-registry-client")
+ t.equal(o["dist-tags"].latest, pkg.version)
+ t.has(o.versions[pkg.version], pkg)
+ t.same(o.maintainers, [ { name: 'username', email: 'i@izs.me' } ])
+ var att = o._attachments[ pkg.name + '-' + pkg.version + '.tgz' ]
+ t.same(att.data, pd)
+ res.statusCode = 409
+ res.json({reason: "must supply latest _rev to update existing package"})
+ })
+ })
+
+ server.expect("/npm-registry-client?write=true", function (req, res) {
+ t.equal(req.method, "GET")
+ t.ok(lastTime)
+ for (var i in lastTime.versions) {
+ var v = lastTime.versions[i]
+ delete lastTime.versions[i]
+ lastTime.versions["0.0.2"] = v
+ lastTime["dist-tags"] = { latest: "0.0.2" }
+ }
+ lastTime._rev = "asdf"
+ res.json(lastTime)
+ })
+
+ server.expect("/npm-registry-client", function (req, res) {
+ t.equal(req.method, "PUT")
+ t.ok(lastTime)
+
+ var b = ""
+ req.setEncoding('utf8')
+ req.on("data", function (d) {
+ b += d
+ })
+
+ req.on("end", function() {
+ var o = JSON.parse(b)
+ t.equal(o._rev, "asdf")
+ t.deepEqual(o.versions["0.0.2"], o.versions[pkg.version])
+ res.statusCode = 201
+ res.json({created: true})
+ })
+ })
+
+
+ // not really a tarball, but doesn't matter
+ var tarball = require.resolve('../package.json')
+ var pd = fs.readFileSync(tarball, 'base64')
+ var pkg = require('../package.json')
+ client.publish(pkg, tarball, function (er, data, raw, res) {
+ if (er) throw er
+ t.deepEqual(data, { created: true })
+ t.end()
+ })
+})
diff --git a/deps/npm/node_modules/npm-registry-client/test/publish.js b/deps/npm/node_modules/npm-registry-client/test/publish.js
new file mode 100644
index 000000000..9dcfc3374
--- /dev/null
+++ b/deps/npm/node_modules/npm-registry-client/test/publish.js
@@ -0,0 +1,51 @@
+var tap = require('tap')
+var crypto = require('crypto')
+var server = require('./fixtures/server.js')
+var RC = require('../')
+var client = new RC(
+ { cache: __dirname + '/fixtures/cache'
+ , registry: 'http://localhost:' + server.port
+ , username: "username"
+ , password: "password"
+ , email: "i@izs.me"
+ , _auth: new Buffer("username:password").toString('base64')
+ , "always-auth": true
+ })
+
+var fs = require("fs")
+
+tap.test("publish", function (t) {
+ server.expect("/npm-registry-client", function (req, res) {
+ t.equal(req.method, "PUT")
+ var b = ""
+ req.setEncoding('utf8')
+ req.on("data", function (d) {
+ b += d
+ })
+
+ req.on("end", function () {
+ var o = JSON.parse(b)
+ t.equal(o._id, "npm-registry-client")
+ t.equal(o["dist-tags"].latest, pkg.version)
+ t.has(o.versions[pkg.version], pkg)
+ t.same(o.maintainers, [ { name: 'username', email: 'i@izs.me' } ])
+ t.same(o.maintainers, o.versions[pkg.version].maintainers)
+ var att = o._attachments[ pkg.name + '-' + pkg.version + '.tgz' ]
+ t.same(att.data, pd)
+ var hash = crypto.createHash('sha1').update(pd, 'base64').digest('hex')
+ t.equal(o.versions[pkg.version].dist.shasum, hash)
+ res.statusCode = 201
+ res.json({created:true})
+ })
+ })
+
+ // not really a tarball, but doesn't matter
+ var tarball = require.resolve('../package.json')
+ var pd = fs.readFileSync(tarball, 'base64')
+ var pkg = require('../package.json')
+ client.publish(pkg, tarball, function (er, data, raw, res) {
+ if (er) throw er
+ t.deepEqual(data, { created: true })
+ t.end()
+ })
+})
diff --git a/deps/npm/node_modules/npm-registry-client/test/request-gzip-content.js b/deps/npm/node_modules/npm-registry-client/test/request-gzip-content.js
new file mode 100644
index 000000000..2c7dcae59
--- /dev/null
+++ b/deps/npm/node_modules/npm-registry-client/test/request-gzip-content.js
@@ -0,0 +1,47 @@
+var zlib = require('zlib')
+var tap = require('tap')
+var server = require('./fixtures/server.js')
+var RC = require('../')
+var pkg = {
+ _id: 'some-package-gzip@1.2.3',
+ name: 'some-package-gzip',
+ version: '1.2.3'
+}
+
+zlib.gzip(JSON.stringify(pkg), function (err, pkgGzip) {
+ var client = new RC({
+ cache: __dirname + '/fixtures/cache'
+ , 'fetch-retries': 1
+ , 'fetch-retry-mintimeout': 10
+ , 'fetch-retry-maxtimeout': 100
+ , registry: 'http://localhost:' + server.port })
+
+ tap.test('request gzip package content', function (t) {
+ server.expect('GET', '/some-package-gzip/1.2.3', function (req, res) {
+ res.statusCode = 200
+ res.setHeader('Content-Encoding', 'gzip');
+ res.setHeader('Content-Type', 'application/json');
+ res.end(pkgGzip)
+ })
+
+ client.get('/some-package-gzip/1.2.3', function (er, data, raw, res) {
+ if (er) throw er
+ t.deepEqual(data, pkg)
+ t.end()
+ })
+ })
+
+ tap.test('request wrong gzip package content', function (t) {
+ server.expect('GET', '/some-package-gzip-error/1.2.3', function (req, res) {
+ res.statusCode = 200
+ res.setHeader('Content-Encoding', 'gzip')
+ res.setHeader('Content-Type', 'application/json')
+ res.end(new Buffer('wrong gzip content'))
+ })
+
+ client.get('/some-package-gzip-error/1.2.3', function (er, data, raw, res) {
+ t.ok(er)
+ t.end()
+ })
+ })
+});
diff --git a/deps/npm/node_modules/npm-user-validate/.travis.yml b/deps/npm/node_modules/npm-user-validate/.travis.yml
new file mode 100644
index 000000000..a12e3f0fd
--- /dev/null
+++ b/deps/npm/node_modules/npm-user-validate/.travis.yml
@@ -0,0 +1,4 @@
+language: node_js
+node_js:
+ - "0.8"
+ - "0.10" \ No newline at end of file
diff --git a/deps/npm/node_modules/npm-user-validate/README.md b/deps/npm/node_modules/npm-user-validate/README.md
index b699863cf..5e34f0aa0 100644
--- a/deps/npm/node_modules/npm-user-validate/README.md
+++ b/deps/npm/node_modules/npm-user-validate/README.md
@@ -1,3 +1,6 @@
-## npmvalidate
+[![Build Status](https://travis-ci.org/robertkowalski/npm-user-validate.png?branch=master)](https://travis-ci.org/robertkowalski/npm-user-validate)
+[![devDependency Status](https://david-dm.org/robertkowalski/npm-user-validate/dev-status.png)](https://david-dm.org/robertkowalski/npm-user-validate#info=devDependencies)
+
+# npm-user-validate
Validation for the npm client and npm-www (and probably other npm projects) \ No newline at end of file
diff --git a/deps/npm/node_modules/npm-user-validate/npm-user-validate.js b/deps/npm/node_modules/npm-user-validate/npm-user-validate.js
index 29cb588aa..853456f52 100644
--- a/deps/npm/node_modules/npm-user-validate/npm-user-validate.js
+++ b/deps/npm/node_modules/npm-user-validate/npm-user-validate.js
@@ -2,17 +2,31 @@ exports.email = email
exports.pw = pw
exports.username = username
+var requirements = exports.requirements = {
+ username: {
+ lowerCase: 'Username must be lowercase',
+ urlSafe: 'Username may not contain non-url-safe chars',
+ dot: 'Username may not start with "."'
+ },
+ password: {
+ badchars: 'Password passwords cannot contain these characters: \'!:@"'
+ },
+ email: {
+ valid: 'Email must be an email address'
+ }
+};
+
function username (un) {
if (un !== un.toLowerCase()) {
- return new Error('Username must be lowercase')
+ return new Error(requirements.username.lowerCase)
}
if (un !== encodeURIComponent(un)) {
- return new Error('Username may not contain non-url-safe chars')
+ return new Error(requirements.username.urlSafe)
}
if (un.charAt(0) === '.') {
- return new Error('Username may not start with "."')
+ return new Error(requirements.username.dot)
}
return null
@@ -20,7 +34,7 @@ function username (un) {
function email (em) {
if (!em.match(/^.+@.+\..+$/)) {
- return new Error('Email must be an email address')
+ return new Error(requirements.email.valid)
}
return null
@@ -28,8 +42,8 @@ function email (em) {
function pw (pw) {
if (pw.match(/['!:@"]/)) {
- return new Error('Sorry, passwords cannot contain these characters: \'!:@"')
+ return new Error(requirements.password.badchars)
}
return null
-} \ No newline at end of file
+}
diff --git a/deps/npm/node_modules/npm-user-validate/package.json b/deps/npm/node_modules/npm-user-validate/package.json
index d2bdf7799..a05b95ef1 100644
--- a/deps/npm/node_modules/npm-user-validate/package.json
+++ b/deps/npm/node_modules/npm-user-validate/package.json
@@ -1,29 +1,37 @@
{
"name": "npm-user-validate",
- "version": "0.0.1",
+ "version": "0.0.3",
"description": "User validations for npm",
"main": "npm-user-validate.js",
+ "devDependencies": {
+ "tap": "0.4.3"
+ },
"scripts": {
"test": "tap test/*.js"
},
- "devDependencies": {
- "tap": "0.4.1"
- },
"repository": {
"type": "git",
"url": "https://github.com/robertkowalski/npm-user-validate"
},
"keywords": [
"npm",
- "validation"
+ "validation",
+ "registry"
],
"author": {
"name": "Robert Kowalski",
"email": "rok@kowalski.gd"
},
"license": "BSD",
- "readme": "## npmvalidate\n\nValidation for the npm client and npm-www (and probably other npm projects)",
+ "readme": "[![Build Status](https://travis-ci.org/robertkowalski/npm-user-validate.png?branch=master)](https://travis-ci.org/robertkowalski/npm-user-validate)\n[![devDependency Status](https://david-dm.org/robertkowalski/npm-user-validate/dev-status.png)](https://david-dm.org/robertkowalski/npm-user-validate#info=devDependencies)\n\n# npm-user-validate\n\nValidation for the npm client and npm-www (and probably other npm projects)",
"readmeFilename": "README.md",
- "_id": "npm-user-validate@0.0.1",
- "_from": "npm-user-validate@0"
+ "bugs": {
+ "url": "https://github.com/robertkowalski/npm-user-validate/issues"
+ },
+ "_id": "npm-user-validate@0.0.3",
+ "dist": {
+ "shasum": "7b147d11038083fb0ba2d60ff851dc20322aa9f6"
+ },
+ "_from": "npm-user-validate@0.0.3",
+ "_resolved": "https://registry.npmjs.org/npm-user-validate/-/npm-user-validate-0.0.3.tgz"
}
diff --git a/deps/npm/node_modules/npmconf/config-defs.js b/deps/npm/node_modules/npmconf/config-defs.js
index 5410400f1..f879a941d 100644
--- a/deps/npm/node_modules/npmconf/config-defs.js
+++ b/deps/npm/node_modules/npmconf/config-defs.js
@@ -7,6 +7,7 @@ var path = require("path")
, semver = require("semver")
, stableFamily = semver.parse(process.version)
, nopt = require("nopt")
+ , os = require('os')
, osenv = require("osenv")
try {
@@ -74,8 +75,8 @@ nopt.invalidHandler = function (k, val, type, data) {
}
}
-if (!stableFamily || (+stableFamily[2] % 2)) stableFamily = null
-else stableFamily = stableFamily[1] + "." + stableFamily[2]
+if (!stableFamily || (+stableFamily.minor % 2)) stableFamily = null
+else stableFamily = stableFamily.major + "." + stableFamily.minor
var defaults
@@ -116,94 +117,7 @@ Object.defineProperty(exports, "defaults", {get: function () {
, "bin-links" : true
, browser : null
- , ca: // the npm CA certificate.
- [ "-----BEGIN CERTIFICATE-----\n"+
- "MIIChzCCAfACCQDauvz/KHp8ejANBgkqhkiG9w0BAQUFADCBhzELMAkGA1UEBhMC\n"+
- "VVMxCzAJBgNVBAgTAkNBMRAwDgYDVQQHEwdPYWtsYW5kMQwwCgYDVQQKEwNucG0x\n"+
- "IjAgBgNVBAsTGW5wbSBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkxDjAMBgNVBAMTBW5w\n"+
- "bUNBMRcwFQYJKoZIhvcNAQkBFghpQGl6cy5tZTAeFw0xMTA5MDUwMTQ3MTdaFw0y\n"+
- "MTA5MDIwMTQ3MTdaMIGHMQswCQYDVQQGEwJVUzELMAkGA1UECBMCQ0ExEDAOBgNV\n"+
- "BAcTB09ha2xhbmQxDDAKBgNVBAoTA25wbTEiMCAGA1UECxMZbnBtIENlcnRpZmlj\n"+
- "YXRlIEF1dGhvcml0eTEOMAwGA1UEAxMFbnBtQ0ExFzAVBgkqhkiG9w0BCQEWCGlA\n"+
- "aXpzLm1lMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDLI4tIqPpRW+ACw9GE\n"+
- "OgBlJZwK5f8nnKCLK629Pv5yJpQKs3DENExAyOgDcyaF0HD0zk8zTp+ZsLaNdKOz\n"+
- "Gn2U181KGprGKAXP6DU6ByOJDWmTlY6+Ad1laYT0m64fERSpHw/hjD3D+iX4aMOl\n"+
- "y0HdbT5m1ZGh6SJz3ZqxavhHLQIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAC4ySDbC\n"+
- "l7W1WpLmtLGEQ/yuMLUf6Jy/vr+CRp4h+UzL+IQpCv8FfxsYE7dhf/bmWTEupBkv\n"+
- "yNL18lipt2jSvR3v6oAHAReotvdjqhxddpe5Holns6EQd1/xEZ7sB1YhQKJtvUrl\n"+
- "ZNufy1Jf1r0ldEGeA+0ISck7s+xSh9rQD2Op\n"+
- "-----END CERTIFICATE-----\n",
-
- // "GlobalSign Root CA"
- "-----BEGIN CERTIFICATE-----\n"+
- "MIIDdTCCAl2gAwIBAgILBAAAAAABFUtaw5QwDQYJKoZIhvcNAQEFBQAwVzELMAkGA1UEBhMCQkUx\n"+
- "GTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jvb3QgQ0ExGzAZBgNVBAMTEkds\n"+
- "b2JhbFNpZ24gUm9vdCBDQTAeFw05ODA5MDExMjAwMDBaFw0yODAxMjgxMjAwMDBaMFcxCzAJBgNV\n"+
- "BAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMRAwDgYDVQQLEwdSb290IENBMRswGQYD\n"+
- "VQQDExJHbG9iYWxTaWduIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDa\n"+
- "DuaZjc6j40+Kfvvxi4Mla+pIH/EqsLmVEQS98GPR4mdmzxzdzxtIK+6NiY6arymAZavpxy0Sy6sc\n"+
- "THAHoT0KMM0VjU/43dSMUBUc71DuxC73/OlS8pF94G3VNTCOXkNz8kHp1Wrjsok6Vjk4bwY8iGlb\n"+
- "Kk3Fp1S4bInMm/k8yuX9ifUSPJJ4ltbcdG6TRGHRjcdGsnUOhugZitVtbNV4FpWi6cgKOOvyJBNP\n"+
- "c1STE4U6G7weNLWLBYy5d4ux2x8gkasJU26Qzns3dLlwR5EiUWMWea6xrkEmCMgZK9FGqkjWZCrX\n"+
- "gzT/LCrBbBlDSgeF59N89iFo7+ryUp9/k5DPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV\n"+
- "HRMBAf8EBTADAQH/MB0GA1UdDgQWBBRge2YaRQ2XyolQL30EzTSo//z9SzANBgkqhkiG9w0BAQUF\n"+
- "AAOCAQEA1nPnfE920I2/7LqivjTFKDK1fPxsnCwrvQmeU79rXqoRSLblCKOzyj1hTdNGCbM+w6Dj\n"+
- "Y1Ub8rrvrTnhQ7k4o+YviiY776BQVvnGCv04zcQLcFGUl5gE38NflNUVyRRBnMRddWQVDf9VMOyG\n"+
- "j/8N7yy5Y0b2qvzfvGn9LhJIZJrglfCm7ymPAbEVtQwdpf5pLGkkeB6zpxxxYu7KyJesF12KwvhH\n"+
- "hm4qxFYxldBniYUr+WymXUadDKqC5JlR3XC321Y9YeRq4VzW9v493kHMB65jUr9TU/Qr6cf9tveC\n"+
- "X4XSQRjbgbMEHMUfpIBvFSDJ3gyICh3WZlXi/EjJKSZp4A==\n"+
- "-----END CERTIFICATE-----\n",
-
- // "GlobalSign Root CA - R2"
- "-----BEGIN CERTIFICATE-----\n"+
- "MIIDujCCAqKgAwIBAgILBAAAAAABD4Ym5g0wDQYJKoZIhvcNAQEFBQAwTDEgMB4GA1UECxMXR2xv\n"+
- "YmFsU2lnbiBSb290IENBIC0gUjIxEzARBgNVBAoTCkdsb2JhbFNpZ24xEzARBgNVBAMTCkdsb2Jh\n"+
- "bFNpZ24wHhcNMDYxMjE1MDgwMDAwWhcNMjExMjE1MDgwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxT\n"+
- "aWduIFJvb3QgQ0EgLSBSMjETMBEGA1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2ln\n"+
- "bjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKbPJA6+Lm8omUVCxKs+IVSbC9N/hHD6\n"+
- "ErPLv4dfxn+G07IwXNb9rfF73OX4YJYJkhD10FPe+3t+c4isUoh7SqbKSaZeqKeMWhG8eoLrvozp\n"+
- "s6yWJQeXSpkqBy+0Hne/ig+1AnwblrjFuTosvNYSuetZfeLQBoZfXklqtTleiDTsvHgMCJiEbKjN\n"+
- "S7SgfQx5TfC4LcshytVsW33hoCmEofnTlEnLJGKRILzdC9XZzPnqJworc5HGnRusyMvo4KD0L5CL\n"+
- "TfuwNhv2GXqF4G3yYROIXJ/gkwpRl4pazq+r1feqCapgvdzZX99yqWATXgAByUr6P6TqBwMhAo6C\n"+
- "ygPCm48CAwEAAaOBnDCBmTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4E\n"+
- "FgQUm+IHV2ccHsBqBt5ZtJot39wZhi4wNgYDVR0fBC8wLTAroCmgJ4YlaHR0cDovL2NybC5nbG9i\n"+
- "YWxzaWduLm5ldC9yb290LXIyLmNybDAfBgNVHSMEGDAWgBSb4gdXZxwewGoG3lm0mi3f3BmGLjAN\n"+
- "BgkqhkiG9w0BAQUFAAOCAQEAmYFThxxol4aR7OBKuEQLq4GsJ0/WwbgcQ3izDJr86iw8bmEbTUsp\n"+
- "9Z8FHSbBuOmDAGJFtqkIk7mpM0sYmsL4h4hO291xNBrBVNpGP+DTKqttVCL1OmLNIG+6KYnX3ZHu\n"+
- "01yiPqFbQfXf5WRDLenVOavSot+3i9DAgBkcRcAtjOj4LaR0VknFBbVPFd5uRHg5h6h+u/N5GJG7\n"+
- "9G+dwfCMNYxdAfvDbbnvRG15RjF+Cv6pgsH/76tuIMRQyV+dTZsXjAzlAcmgQWpzU/qlULRuJQ/7\n"+
- "TBj0/VLZjmmx6BEP3ojY+x1J96relc8geMJgEtslQIxq/H5COEBkEveegeGTLg==\n"+
- "-----END CERTIFICATE-----\n",
-
- // GlobalSign Organization Validation CA - G2
- "-----BEGIN CERTIFICATE-----\n"+
- "MIIEYDCCA0igAwIBAgILBAAAAAABL07hRQwwDQYJKoZIhvcNAQEFBQAwVzELMAkG\n"+
- "A1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jv\n"+
- "b3QgQ0ExGzAZBgNVBAMTEkdsb2JhbFNpZ24gUm9vdCBDQTAeFw0xMTA0MTMxMDAw\n"+
- "MDBaFw0yMjA0MTMxMDAwMDBaMF0xCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9i\n"+
- "YWxTaWduIG52LXNhMTMwMQYDVQQDEypHbG9iYWxTaWduIE9yZ2FuaXphdGlvbiBW\n"+
- "YWxpZGF0aW9uIENBIC0gRzIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB\n"+
- "AQDdNR3yIFQmGtDvpW+Bdllw3Of01AMkHyQOnSKf1Ccyeit87ovjYWI4F6+0S3qf\n"+
- "ZyEcLZVUunm6tsTyDSF0F2d04rFkCJlgePtnwkv3J41vNnbPMYzl8QbX3FcOW6zu\n"+
- "zi2rqqlwLwKGyLHQCAeV6irs0Z7kNlw7pja1Q4ur944+ABv/hVlrYgGNguhKujiz\n"+
- "4MP0bRmn6gXdhGfCZsckAnNate6kGdn8AM62pI3ffr1fsjqdhDFPyGMM5NgNUqN+\n"+
- "ARvUZ6UYKOsBp4I82Y4d5UcNuotZFKMfH0vq4idGhs6dOcRmQafiFSNrVkfB7cVT\n"+
- "5NSAH2v6gEaYsgmmD5W+ZoiTAgMBAAGjggElMIIBITAOBgNVHQ8BAf8EBAMCAQYw\n"+
- "EgYDVR0TAQH/BAgwBgEB/wIBADAdBgNVHQ4EFgQUXUayjcRLdBy77fVztjq3OI91\n"+
- "nn4wRwYDVR0gBEAwPjA8BgRVHSAAMDQwMgYIKwYBBQUHAgEWJmh0dHBzOi8vd3d3\n"+
- "Lmdsb2JhbHNpZ24uY29tL3JlcG9zaXRvcnkvMDMGA1UdHwQsMCowKKAmoCSGImh0\n"+
- "dHA6Ly9jcmwuZ2xvYmFsc2lnbi5uZXQvcm9vdC5jcmwwPQYIKwYBBQUHAQEEMTAv\n"+
- "MC0GCCsGAQUFBzABhiFodHRwOi8vb2NzcC5nbG9iYWxzaWduLmNvbS9yb290cjEw\n"+
- "HwYDVR0jBBgwFoAUYHtmGkUNl8qJUC99BM00qP/8/UswDQYJKoZIhvcNAQEFBQAD\n"+
- "ggEBABvgiADHBREc/6stSEJSzSBo53xBjcEnxSxZZ6CaNduzUKcbYumlO/q2IQen\n"+
- "fPMOK25+Lk2TnLryhj5jiBDYW2FQEtuHrhm70t8ylgCoXtwtI7yw07VKoI5lkS/Z\n"+
- "9oL2dLLffCbvGSuXL+Ch7rkXIkg/pfcNYNUNUUflWP63n41edTzGQfDPgVRJEcYX\n"+
- "pOBWYdw9P91nbHZF2krqrhqkYE/Ho9aqp9nNgSvBZnWygI/1h01fwlr1kMbawb30\n"+
- "hag8IyrhFHvBN91i0ZJsumB9iOQct+R2UTjEqUdOqCsukNK1OFHrwZyKarXMsh3o\n"+
- "wFZUTKiL8IkyhtyTMr5NGvo1dbU=\n"+
- "-----END CERTIFICATE-----\n"
- ]
-
+ , ca: null
, cache : cache
@@ -214,12 +128,14 @@ Object.defineProperty(exports, "defaults", {get: function () {
, "cache-max": Infinity
, "cache-min": 10
+ , cert: null
+
, color : true
- , coverage: false
, depth: Infinity
, description : true
, dev : false
, editor : osenv.editor()
+ , email: ""
, "engine-strict": false
, force : false
@@ -229,47 +145,51 @@ Object.defineProperty(exports, "defaults", {get: function () {
, "fetch-retry-maxtimeout": 60000
, git: "git"
+ , "git-tag-version": true
, global : false
, globalconfig : path.resolve(globalPrefix, "etc", "npmrc")
- , globalignorefile : path.resolve( globalPrefix, "etc", "npmignore")
, group : process.platform === "win32" ? 0
: process.env.SUDO_GID || (process.getgid && process.getgid())
- , ignore: ""
+ , heading: "npm"
+ , "ignore-scripts": false
, "init-module": path.resolve(home, '.npm-init.js')
- , "init.version" : "0.0.0"
, "init.author.name" : ""
, "init.author.email" : ""
, "init.author.url" : ""
+ , "init.license": "ISC"
, json: false
+ , key: null
, link: false
+ , "local-address" : undefined
, loglevel : "http"
, logstream : process.stderr
, long : false
, message : "%s"
, "node-version" : process.version
- , npaturl : "http://npat.npmjs.org/"
, npat : false
, "onload-script" : false
, optional: true
, parseable : false
- , pre: false
, prefix : globalPrefix
, production: process.env.NODE_ENV === "production"
, "proprietary-attribs": true
, proxy : process.env.HTTP_PROXY || process.env.http_proxy || null
, "https-proxy" : process.env.HTTPS_PROXY || process.env.https_proxy ||
process.env.HTTP_PROXY || process.env.http_proxy || null
- , "user-agent" : "node/" + process.version
- + ' ' + process.platform
- + ' ' + process.arch
+ , "user-agent" : "npm/{npm-version} "
+ + "node/{node-version} "
+ + "{platform} "
+ + "{arch}"
, "rebuild-bundle" : true
, registry : "https://registry.npmjs.org/"
, rollback : true
, save : false
, "save-bundle": false
, "save-dev" : false
+ , "save-exact" : false
, "save-optional" : false
+ , "save-prefix": "^"
, searchopts: ""
, searchexclude: null
, searchsort: "name"
@@ -289,12 +209,10 @@ Object.defineProperty(exports, "defaults", {get: function () {
, user : process.platform === "win32" ? 0 : "nobody"
, username : ""
, userconfig : path.resolve(home, ".npmrc")
- , userignorefile : path.resolve(home, ".npmignore")
, umask: 022
, version : false
, versions : false
, viewer: process.platform === "win32" ? "browser" : "man"
- , yes: null
, _exit : true
}
@@ -311,12 +229,13 @@ exports.types =
, "cache-lock-wait": Number
, "cache-max": Number
, "cache-min": Number
+ , cert: [null, String]
, color : ["always", Boolean]
- , coverage: Boolean
, depth : Number
, description : Boolean
, dev : Boolean
, editor : String
+ , email: [null, String]
, "engine-strict": Boolean
, force : Boolean
, "fetch-retries": Number
@@ -324,31 +243,43 @@ exports.types =
, "fetch-retry-mintimeout": Number
, "fetch-retry-maxtimeout": Number
, git: String
+ , "git-tag-version": Boolean
, global : Boolean
, globalconfig : path
- , globalignorefile: path
, group : [Number, String]
, "https-proxy" : [null, url]
, "user-agent" : String
- , ignore : String
+ , "heading": String
+ , "ignore-scripts": Boolean
, "init-module": path
- , "init.version" : [null, semver]
, "init.author.name" : String
, "init.author.email" : String
, "init.author.url" : ["", url]
+ , "init.license": String
, json: Boolean
+ , key: [null, String]
, link: Boolean
+ // local-address must be listed as an IP for a local network interface
+ // must be IPv4 due to node bug
+ , "local-address" : Object.keys(os.networkInterfaces()).map(function (nic) {
+ return os.networkInterfaces()[nic].filter(function (addr) {
+ return addr.family === "IPv4"
+ })
+ .map(function (addr) {
+ return addr.address
+ })
+ }).reduce(function (curr, next) {
+ return curr.concat(next)
+ }, [])
, loglevel : ["silent","win","error","warn","http","info","verbose","silly"]
, logstream : Stream
, long : Boolean
, message: String
, "node-version" : [null, semver]
- , npaturl : url
, npat : Boolean
, "onload-script" : [null, String]
, optional: Boolean
, parseable : Boolean
- , pre: Boolean
, prefix: path
, production: Boolean
, "proprietary-attribs": Boolean
@@ -359,7 +290,9 @@ exports.types =
, save : Boolean
, "save-bundle": Boolean
, "save-dev" : Boolean
+ , "save-exact" : Boolean
, "save-optional" : Boolean
+ , "save-prefix": String
, searchopts : String
, searchexclude: [null, String]
, searchsort: [ "name", "-name"
@@ -379,12 +312,10 @@ exports.types =
, user : [Number, String]
, username : String
, userconfig : path
- , userignorefile : path
, umask: Octal
, version : Boolean
, versions : Boolean
, viewer: String
- , yes: [false, null, Boolean]
, _exit : Boolean
, _password: String
}
@@ -420,6 +351,7 @@ exports.shorthands =
, g : ["--global"]
, S : ["--save"]
, D : ["--save-dev"]
+ , E : ["--save-exact"]
, O : ["--save-optional"]
, y : ["--yes"]
, n : ["--no-yes"]
diff --git a/deps/npm/node_modules/npmconf/node_modules/config-chain/index.js b/deps/npm/node_modules/npmconf/node_modules/config-chain/index.js
index 523b2eb39..0ef3a91f7 100755
--- a/deps/npm/node_modules/npmconf/node_modules/config-chain/index.js
+++ b/deps/npm/node_modules/npmconf/node_modules/config-chain/index.js
@@ -141,7 +141,7 @@ ConfigChain.prototype.get = function (key, where) {
if (where) {
where = this.sources[where]
if (where) where = where.data
- if (where && where.hasOwnProperty(key)) return where[key]
+ if (where && Object.hasOwnProperty.call(where, key)) return where[key]
return undefined
}
return this.list[0][key]
diff --git a/deps/npm/node_modules/npmconf/node_modules/config-chain/node_modules/proto-list/package.json b/deps/npm/node_modules/npmconf/node_modules/config-chain/node_modules/proto-list/package.json
index 9b9d3d7e8..a7349f06b 100644
--- a/deps/npm/node_modules/npmconf/node_modules/config-chain/node_modules/proto-list/package.json
+++ b/deps/npm/node_modules/npmconf/node_modules/config-chain/node_modules/proto-list/package.json
@@ -27,6 +27,9 @@
"bugs": {
"url": "https://github.com/isaacs/proto-list/issues"
},
+ "homepage": "https://github.com/isaacs/proto-list",
"_id": "proto-list@1.2.2",
- "_from": "proto-list@~1.2.1"
+ "_shasum": "48b88798261ec2c4a785720cdfec6200d57d3326",
+ "_from": "proto-list@~1.2.1",
+ "_resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.2.tgz"
}
diff --git a/deps/npm/node_modules/npmconf/node_modules/config-chain/package.json b/deps/npm/node_modules/npmconf/node_modules/config-chain/package.json
index d0d24eaae..2f8695410 100644
--- a/deps/npm/node_modules/npmconf/node_modules/config-chain/package.json
+++ b/deps/npm/node_modules/npmconf/node_modules/config-chain/package.json
@@ -1,6 +1,6 @@
{
"name": "config-chain",
- "version": "1.1.7",
+ "version": "1.1.8",
"description": "HANDLE CONFIGURATION ONCE AND FOR ALL",
"homepage": "http://github.com/dominictarr/config-chain",
"repository": {
@@ -27,6 +27,8 @@
"bugs": {
"url": "https://github.com/dominictarr/config-chain/issues"
},
- "_id": "config-chain@1.1.7",
- "_from": "config-chain@~1.1.1"
+ "_id": "config-chain@1.1.8",
+ "_shasum": "0943d0b7227213a20d4eaff4434f4a1c0a052cad",
+ "_from": "config-chain@~1.1.8",
+ "_resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.8.tgz"
}
diff --git a/deps/npm/node_modules/npmconf/node_modules/config-chain/test/get.js b/deps/npm/node_modules/npmconf/node_modules/config-chain/test/get.js
new file mode 100644
index 000000000..d6fd79f74
--- /dev/null
+++ b/deps/npm/node_modules/npmconf/node_modules/config-chain/test/get.js
@@ -0,0 +1,15 @@
+var cc = require("../");
+
+var chain = cc()
+ , name = "forFun";
+
+chain
+ .add({
+ __sample:"for fun only"
+ }, name)
+ .on("load", function() {
+ //It throw exception here
+ console.log(chain.get("__sample", name));
+ //But if I drop the name param, it run normally and return as expected: "for fun only"
+ //console.log(chain.get("__sample"));
+ });
diff --git a/deps/npm/node_modules/npmconf/package.json b/deps/npm/node_modules/npmconf/package.json
index 5634c8f8a..3e3c76e6b 100644
--- a/deps/npm/node_modules/npmconf/package.json
+++ b/deps/npm/node_modules/npmconf/package.json
@@ -1,22 +1,24 @@
{
"name": "npmconf",
- "version": "0.1.0",
+ "version": "0.1.15",
"description": "The config thing npm uses",
"main": "npmconf.js",
"directories": {
"test": "test"
},
"dependencies": {
- "config-chain": "~1.1.1",
- "inherits": "~1.0.0",
- "once": "~1.1.1",
+ "config-chain": "~1.1.8",
+ "inherits": "~2.0.0",
+ "once": "~1.3.0",
"mkdirp": "~0.3.3",
"osenv": "0.0.3",
"nopt": "2",
- "semver": "~1.1.0",
+ "semver": "2",
"ini": "~1.1.0"
},
- "devDependencies": {},
+ "devDependencies": {
+ "tap": "~0.4.0"
+ },
"scripts": {
"test": "tap test/*.js"
},
@@ -42,6 +44,8 @@
"bugs": {
"url": "https://github.com/isaacs/npmconf/issues"
},
- "_id": "npmconf@0.1.0",
+ "homepage": "https://github.com/isaacs/npmconf",
+ "_id": "npmconf@0.1.15",
+ "_shasum": "9df0f0545d04d121330c32a5be9d351b4a8df029",
"_from": "npmconf@latest"
}
diff --git a/deps/npm/node_modules/npmconf/test/basic.js b/deps/npm/node_modules/npmconf/test/basic.js
index 5f276f1fa..83832c2ef 100644
--- a/deps/npm/node_modules/npmconf/test/basic.js
+++ b/deps/npm/node_modules/npmconf/test/basic.js
@@ -68,6 +68,7 @@ test('no builtin', function (t) {
t.equal(npmconf.rootConf.root, npmconf.defs.defaults)
t.equal(conf.root, npmconf.defs.defaults)
t.equal(conf.get('umask'), 022)
+ t.equal(conf.get('heading'), 'npm')
t.end()
})
})
diff --git a/deps/npm/node_modules/npmconf/test/builtin.js b/deps/npm/node_modules/npmconf/test/builtin.js
index 814259493..c5216ed90 100644
--- a/deps/npm/node_modules/npmconf/test/builtin.js
+++ b/deps/npm/node_modules/npmconf/test/builtin.js
@@ -34,7 +34,7 @@ var gcData = { 'package-config:foo': 'boo' }
var biData = { 'builtin-config': true }
-var cli = { foo: 'bar' }
+var cli = { foo: 'bar', heading: 'foo', 'git-tag-version': false }
var expectList =
[ cli,
@@ -67,6 +67,8 @@ test('with builtin', function (t) {
t.same(npmconf.rootConf.list, [])
t.equal(npmconf.rootConf.root, npmconf.defs.defaults)
t.equal(conf.root, npmconf.defs.defaults)
+ t.equal(conf.get('heading'), 'foo')
+ t.equal(conf.get('git-tag-version'), false)
t.end()
})
})
diff --git a/deps/npm/node_modules/npmlog/LICENSE b/deps/npm/node_modules/npmlog/LICENSE
index 74489e2e2..0c44ae716 100644
--- a/deps/npm/node_modules/npmlog/LICENSE
+++ b/deps/npm/node_modules/npmlog/LICENSE
@@ -1,4 +1,4 @@
-Copyright (c) Isaac Z. Schlueter
+Copyright (c) Isaac Z. Schlueter ("Author")
All rights reserved.
The BSD License
@@ -6,20 +6,22 @@ The BSD License
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:
+
1. Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
+
2. Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
-THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
-``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
-TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS
BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGE.
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/deps/npm/node_modules/npmlog/log.js b/deps/npm/node_modules/npmlog/log.js
index 320788e7a..38b7c74ac 100644
--- a/deps/npm/node_modules/npmlog/log.js
+++ b/deps/npm/node_modules/npmlog/log.js
@@ -81,7 +81,7 @@ log.log = function (lvl, prefix, message) {
}
this.emitLog(m)
-}
+}.bind(log)
log.emitLog = function (m) {
if (this._paused) {
@@ -135,7 +135,7 @@ log.addLevel = function (lvl, n, style, disp) {
a[i + 1] = arguments[i]
}
return this.log.apply(this, a)
- }
+ }.bind(this)
this.disp[lvl] = disp
}
@@ -149,6 +149,6 @@ log.addLevel('silly', -Infinity, { inverse: true }, 'sill')
log.addLevel('verbose', 1000, { fg: 'blue', bg: 'black' }, 'verb')
log.addLevel('info', 2000, { fg: 'green' })
log.addLevel('http', 3000, { fg: 'green', bg: 'black' })
-log.addLevel('warn', 4000, { fg: 'black', bg: 'red' }, 'WARN')
+log.addLevel('warn', 4000, { fg: 'black', bg: 'yellow' }, 'WARN')
log.addLevel('error', 5000, { fg: 'red', bg: 'black' }, 'ERR!')
log.addLevel('silent', Infinity)
diff --git a/deps/npm/node_modules/npmlog/package.json b/deps/npm/node_modules/npmlog/package.json
index d9a33c451..28b444cca 100644
--- a/deps/npm/node_modules/npmlog/package.json
+++ b/deps/npm/node_modules/npmlog/package.json
@@ -6,7 +6,7 @@
},
"name": "npmlog",
"description": "logger for npm",
- "version": "0.0.2",
+ "version": "0.0.6",
"repository": {
"type": "git",
"url": "git://github.com/isaacs/npmlog.git"
@@ -16,27 +16,17 @@
"test": "tap test/*.js"
},
"dependencies": {
- "ansi": "~0.1.2"
+ "ansi": "~0.2.1"
},
"devDependencies": {
"tap": ""
},
"license": "BSD",
- "_npmUser": {
- "name": "isaacs",
- "email": "i@izs.me"
+ "readme": "# npmlog\n\nThe logger util that npm uses.\n\nThis logger is very basic. It does the logging for npm. It supports\ncustom levels and colored output.\n\nBy default, logs are written to stderr. If you want to send log messages\nto outputs other than streams, then you can change the `log.stream`\nmember, or you can just listen to the events that it emits, and do\nwhatever you want with them.\n\n# Basic Usage\n\n```\nvar log = require('npmlog')\n\n// additional stuff ---------------------------+\n// message ----------+ |\n// prefix ----+ | |\n// level -+ | | |\n// v v v v\n log.info('fyi', 'I have a kitty cat: %j', myKittyCat)\n```\n\n## log.level\n\n* {String}\n\nThe level to display logs at. Any logs at or above this level will be\ndisplayed. The special level `silent` will prevent anything from being\ndisplayed ever.\n\n## log.record\n\n* {Array}\n\nAn array of all the log messages that have been entered.\n\n## log.maxRecordSize\n\n* {Number}\n\nThe maximum number of records to keep. If log.record gets bigger than\n10% over this value, then it is sliced down to 90% of this value.\n\nThe reason for the 10% window is so that it doesn't have to resize a\nlarge array on every log entry.\n\n## log.prefixStyle\n\n* {Object}\n\nA style object that specifies how prefixes are styled. (See below)\n\n## log.headingStyle\n\n* {Object}\n\nA style object that specifies how the heading is styled. (See below)\n\n## log.heading\n\n* {String} Default: \"\"\n\nIf set, a heading that is printed at the start of every line.\n\n## log.stream\n\n* {Stream} Default: `process.stderr`\n\nThe stream where output is written.\n\n## log.enableColor()\n\nForce colors to be used on all messages, regardless of the output\nstream.\n\n## log.disableColor()\n\nDisable colors on all messages.\n\n## log.pause()\n\nStop emitting messages to the stream, but do not drop them.\n\n## log.resume()\n\nEmit all buffered messages that were written while paused.\n\n## log.log(level, prefix, message, ...)\n\n* `level` {String} The level to emit the message at\n* `prefix` {String} A string prefix. Set to \"\" to skip.\n* `message...` Arguments to `util.format`\n\nEmit a log message at the specified level.\n\n## log\\[level](prefix, message, ...)\n\nFor example,\n\n* log.silly(prefix, message, ...)\n* log.verbose(prefix, message, ...)\n* log.info(prefix, message, ...)\n* log.http(prefix, message, ...)\n* log.warn(prefix, message, ...)\n* log.error(prefix, message, ...)\n\nLike `log.log(level, prefix, message, ...)`. In this way, each level is\ngiven a shorthand, so you can do `log.info(prefix, message)`.\n\n## log.addLevel(level, n, style, disp)\n\n* `level` {String} Level indicator\n* `n` {Number} The numeric level\n* `style` {Object} Object with fg, bg, inverse, etc.\n* `disp` {String} Optional replacement for `level` in the output.\n\nSets up a new level with a shorthand function and so forth.\n\nNote that if the number is `Infinity`, then setting the level to that\nwill cause all log messages to be suppressed. If the number is\n`-Infinity`, then the only way to show it is to enable all log messages.\n\n# Events\n\nEvents are all emitted with the message object.\n\n* `log` Emitted for all messages\n* `log.<level>` Emitted for all messages with the `<level>` level.\n* `<prefix>` Messages with prefixes also emit their prefix as an event.\n\n# Style Objects\n\nStyle objects can have the following fields:\n\n* `fg` {String} Color for the foreground text\n* `bg` {String} Color for the background\n* `bold`, `inverse`, `underline` {Boolean} Set the associated property\n* `bell` {Boolean} Make a noise (This is pretty annoying, probably.)\n\n# Message Objects\n\nEvery log event is emitted with a message object, and the `log.record`\nlist contains all of them that have been created. They have the\nfollowing fields:\n\n* `id` {Number}\n* `level` {String}\n* `prefix` {String}\n* `message` {String} Result of `util.format()`\n* `messageRaw` {Array} Arguments to `util.format()`\n",
+ "readmeFilename": "README.md",
+ "bugs": {
+ "url": "https://github.com/isaacs/npmlog/issues"
},
- "_id": "npmlog@0.0.2",
- "optionalDependencies": {},
- "engines": {
- "node": "*"
- },
- "_engineSupported": true,
- "_npmVersion": "1.1.24",
- "_nodeVersion": "v0.7.10-pre",
- "_defaultsLoaded": true,
- "dist": {
- "shasum": "f0cf4b2c519950c00e91ba8e2868b62bf86254f6"
- },
- "_from": "npmlog@0"
+ "_id": "npmlog@0.0.6",
+ "_from": "npmlog@latest"
}
diff --git a/deps/npm/node_modules/npmlog/test/basic.js b/deps/npm/node_modules/npmlog/test/basic.js
index 8b5e7eb42..1afcabd1c 100644
--- a/deps/npm/node_modules/npmlog/test/basic.js
+++ b/deps/npm/node_modules/npmlog/test/basic.js
@@ -9,254 +9,21 @@ var logPrefixEvents = []
var util = require('util')
var resultExpect =
-[ '\u001b[37m',
- '\u001b[40m',
- 'npm',
- '\u001b[0m',
- ' ',
- '\u001b[0m',
- '\u001b[7m',
- 'sill',
- '\u001b[0m',
- ' ',
- '\u001b[0m',
- '\u001b[35m',
- 'silly prefix',
- '\u001b[0m',
- ' x = {"foo":{"bar":"baz"}}\n',
- '\u001b[0m',
- '\u001b[37m',
- '\u001b[40m',
- 'npm',
- '\u001b[0m',
- ' ',
- '\u001b[0m',
- '\u001b[34m',
- '\u001b[40m',
- 'verb',
- '\u001b[0m',
- ' ',
- '\u001b[0m',
- '\u001b[35m',
- 'verbose prefix',
- '\u001b[0m',
- ' x = {"foo":{"bar":"baz"}}\n',
- '\u001b[0m',
- '\u001b[37m',
- '\u001b[40m',
- 'npm',
- '\u001b[0m',
- ' ',
- '\u001b[0m',
- '\u001b[32m',
- '\u001b[7m',
- 'info',
- '\u001b[0m',
- ' ',
- '\u001b[0m',
- '\u001b[35m',
- 'info prefix',
- '\u001b[0m',
- ' x = {"foo":{"bar":"baz"}}\n',
- '\u001b[0m',
- '\u001b[37m',
- '\u001b[40m',
- 'npm',
- '\u001b[0m',
- ' ',
- '\u001b[0m',
- '\u001b[32m',
- 'http',
- '\u001b[0m',
- ' ',
- '\u001b[0m',
- '\u001b[35m',
- 'http prefix',
- '\u001b[0m',
- ' x = {"foo":{"bar":"baz"}}\n',
- '\u001b[0m',
- '\u001b[37m',
- '\u001b[40m',
- 'npm',
- '\u001b[0m',
- ' ',
- '\u001b[0m',
- '\u001b[30m',
- '\u001b[41m',
- 'WARN',
- '\u001b[0m',
- ' ',
- '\u001b[0m',
- '\u001b[35m',
- 'warn prefix',
- '\u001b[0m',
- ' x = {"foo":{"bar":"baz"}}\n',
- '\u001b[0m',
- '\u001b[37m',
- '\u001b[40m',
- 'npm',
- '\u001b[0m',
- ' ',
- '\u001b[0m',
- '\u001b[31m',
- '\u001b[40m',
- 'ERR!',
- '\u001b[0m',
- ' ',
- '\u001b[0m',
- '\u001b[35m',
- 'error prefix',
- '\u001b[0m',
- ' x = {"foo":{"bar":"baz"}}\n',
- '\u001b[0m',
- '\u001b[37m',
- '\u001b[40m',
- 'npm',
- '\u001b[0m',
- ' ',
- '\u001b[0m',
- '\u001b[32m',
- '\u001b[7m',
- 'info',
- '\u001b[0m',
- ' ',
- '\u001b[0m',
- '\u001b[35m',
- 'info prefix',
- '\u001b[0m',
- ' x = {"foo":{"bar":"baz"}}\n',
- '\u001b[0m',
- '\u001b[37m',
- '\u001b[40m',
- 'npm',
- '\u001b[0m',
- ' ',
- '\u001b[0m',
- '\u001b[32m',
- 'http',
- '\u001b[0m',
- ' ',
- '\u001b[0m',
- '\u001b[35m',
- 'http prefix',
- '\u001b[0m',
- ' x = {"foo":{"bar":"baz"}}\n',
- '\u001b[0m',
- '\u001b[37m',
- '\u001b[40m',
- 'npm',
- '\u001b[0m',
- ' ',
- '\u001b[0m',
- '\u001b[30m',
- '\u001b[41m',
- 'WARN',
- '\u001b[0m',
- ' ',
- '\u001b[0m',
- '\u001b[35m',
- 'warn prefix',
- '\u001b[0m',
- ' x = {"foo":{"bar":"baz"}}\n',
- '\u001b[0m',
- '\u001b[37m',
- '\u001b[40m',
- 'npm',
- '\u001b[0m',
- ' ',
- '\u001b[0m',
- '\u001b[31m',
- '\u001b[40m',
- 'ERR!',
- '\u001b[0m',
- ' ',
- '\u001b[0m',
- '\u001b[35m',
- 'error prefix',
- '\u001b[0m',
- ' x = {"foo":{"bar":"baz"}}\n',
- '\u001b[0m',
- '\u001b[37m',
- '\u001b[40m',
- 'npm',
- '\u001b[0m',
- ' ',
- '\u001b[0m',
- '\u001b[31m',
- '\u001b[40m',
- 'ERR!',
- '\u001b[0m',
- ' ',
- '\u001b[0m',
- '\u001b[35m',
- '404',
- '\u001b[0m',
- ' This is a longer\n',
- '\u001b[0m',
- '\u001b[37m',
- '\u001b[40m',
- 'npm',
- '\u001b[0m',
- ' ',
- '\u001b[0m',
- '\u001b[31m',
- '\u001b[40m',
- 'ERR!',
- '\u001b[0m',
- ' ',
- '\u001b[0m',
- '\u001b[35m',
- '404',
- '\u001b[0m',
- ' message, with some details\n',
- '\u001b[0m',
- '\u001b[37m',
- '\u001b[40m',
- 'npm',
- '\u001b[0m',
- ' ',
- '\u001b[0m',
- '\u001b[31m',
- '\u001b[40m',
- 'ERR!',
- '\u001b[0m',
- ' ',
- '\u001b[0m',
- '\u001b[35m',
- '404',
- '\u001b[0m',
- ' and maybe a stack.\n',
- '\u001b[0m',
- '\u001b[37m',
- '\u001b[40m',
- 'npm',
- '\u001b[0m',
- ' ',
- '\u001b[0m',
- '\u001b[31m',
- '\u001b[40m',
- 'ERR!',
- '\u001b[0m',
- ' ',
- '\u001b[0m',
- '\u001b[35m',
- '404',
- '\u001b[0m',
- ' \n',
- '\u001b[0m',
- '\u001b[37m',
- '\u001b[40m',
- 'npm',
- '\u001b[0m',
- ' ',
- '\u001b[0m',
- '\u0007',
- 'noise',
- '\u001b[0m',
- '\u001b[35m',
- '',
- '\u001b[0m',
- ' LOUD NOISES\n',
+[ '\u001b[37m\u001b[40mnpm\u001b[0m \u001b[0m\u001b[7msill\u001b[0m \u001b[0m\u001b[35msilly prefix\u001b[0m x = {"foo":{"bar":"baz"}}\n',
+ '\u001b[0m\u001b[37m\u001b[40mnpm\u001b[0m \u001b[0m\u001b[34m\u001b[40mverb\u001b[0m \u001b[0m\u001b[35mverbose prefix\u001b[0m x = {"foo":{"bar":"baz"}}\n',
+ '\u001b[0m\u001b[37m\u001b[40mnpm\u001b[0m \u001b[0m\u001b[32minfo\u001b[0m \u001b[0m\u001b[35minfo prefix\u001b[0m x = {"foo":{"bar":"baz"}}\n',
+ '\u001b[0m\u001b[37m\u001b[40mnpm\u001b[0m \u001b[0m\u001b[32m\u001b[40mhttp\u001b[0m \u001b[0m\u001b[35mhttp prefix\u001b[0m x = {"foo":{"bar":"baz"}}\n',
+ '\u001b[0m\u001b[37m\u001b[40mnpm\u001b[0m \u001b[0m\u001b[30m\u001b[43mWARN\u001b[0m \u001b[0m\u001b[35mwarn prefix\u001b[0m x = {"foo":{"bar":"baz"}}\n',
+ '\u001b[0m\u001b[37m\u001b[40mnpm\u001b[0m \u001b[0m\u001b[31m\u001b[40mERR!\u001b[0m \u001b[0m\u001b[35merror prefix\u001b[0m x = {"foo":{"bar":"baz"}}\n',
+ '\u001b[0m\u001b[37m\u001b[40mnpm\u001b[0m \u001b[0m\u001b[32minfo\u001b[0m \u001b[0m\u001b[35minfo prefix\u001b[0m x = {"foo":{"bar":"baz"}}\n',
+ '\u001b[0m\u001b[37m\u001b[40mnpm\u001b[0m \u001b[0m\u001b[32m\u001b[40mhttp\u001b[0m \u001b[0m\u001b[35mhttp prefix\u001b[0m x = {"foo":{"bar":"baz"}}\n',
+ '\u001b[0m\u001b[37m\u001b[40mnpm\u001b[0m \u001b[0m\u001b[30m\u001b[43mWARN\u001b[0m \u001b[0m\u001b[35mwarn prefix\u001b[0m x = {"foo":{"bar":"baz"}}\n',
+ '\u001b[0m\u001b[37m\u001b[40mnpm\u001b[0m \u001b[0m\u001b[31m\u001b[40mERR!\u001b[0m \u001b[0m\u001b[35merror prefix\u001b[0m x = {"foo":{"bar":"baz"}}\n',
+ '\u001b[0m\u001b[37m\u001b[40mnpm\u001b[0m \u001b[0m\u001b[31m\u001b[40mERR!\u001b[0m \u001b[0m\u001b[35m404\u001b[0m This is a longer\n',
+ '\u001b[0m\u001b[37m\u001b[40mnpm\u001b[0m \u001b[0m\u001b[31m\u001b[40mERR!\u001b[0m \u001b[0m\u001b[35m404\u001b[0m message, with some details\n',
+ '\u001b[0m\u001b[37m\u001b[40mnpm\u001b[0m \u001b[0m\u001b[31m\u001b[40mERR!\u001b[0m \u001b[0m\u001b[35m404\u001b[0m and maybe a stack.\n',
+ '\u001b[0m\u001b[37m\u001b[40mnpm\u001b[0m \u001b[0m\u001b[31m\u001b[40mERR!\u001b[0m \u001b[0m\u001b[35m404\u001b[0m \n',
+ '\u001b[0m\u001b[37m\u001b[40mnpm\u001b[0m \u001b[0m\u0007noise\u001b[0m\u001b[35m\u001b[0m LOUD NOISES\n',
'\u001b[0m' ]
var logPrefixEventsExpect =
@@ -451,7 +218,7 @@ tap.test('basic', function (t) {
log.addLevel('noise', 10000, {beep: true})
log.noise(false, 'LOUD NOISES')
- t.deepEqual(result, resultExpect, 'result')
+ t.deepEqual(result.join('').trim(), resultExpect.join('').trim(), 'result')
t.deepEqual(log.record, logEventsExpect, 'record')
t.deepEqual(logEvents, logEventsExpect, 'logEvents')
t.deepEqual(logInfoEvents, logInfoEventsExpect, 'logInfoEvents')
diff --git a/deps/npm/node_modules/once/README.md b/deps/npm/node_modules/once/README.md
index e833b83d2..a2981ea07 100644
--- a/deps/npm/node_modules/once/README.md
+++ b/deps/npm/node_modules/once/README.md
@@ -31,3 +31,21 @@ function load (file, cb) {
Ironically, the prototype feature makes this module twice as
complicated as necessary.
+
+To check whether you function has been called, use `fn.called`. Once the
+function is called for the first time the return value of the original
+function is saved in `fn.value` and subsequent calls will continue to
+return this value.
+
+```javascript
+var once = require('once')
+
+function load (cb) {
+ cb = once(cb)
+ var stream = createStream()
+ stream.once('data', cb)
+ stream.once('end', function () {
+ if (!cb.called) cb(new Error('not found'))
+ })
+}
+```
diff --git a/deps/npm/node_modules/once/once.js b/deps/npm/node_modules/once/once.js
index effc50a47..0770a73cd 100644
--- a/deps/npm/node_modules/once/once.js
+++ b/deps/npm/node_modules/once/once.js
@@ -10,10 +10,11 @@ once.proto = once(function () {
})
function once (fn) {
- var called = false
- return function () {
- if (called) return
- called = true
- return fn.apply(this, arguments)
+ var f = function () {
+ if (f.called) return f.value
+ f.called = true
+ return f.value = fn.apply(this, arguments)
}
+ f.called = false
+ return f
}
diff --git a/deps/npm/node_modules/once/package.json b/deps/npm/node_modules/once/package.json
index 22671632e..96af3dedf 100644
--- a/deps/npm/node_modules/once/package.json
+++ b/deps/npm/node_modules/once/package.json
@@ -1,6 +1,6 @@
{
"name": "once",
- "version": "1.1.1",
+ "version": "1.3.0",
"description": "Run a function exactly one time",
"main": "once.js",
"directories": {
@@ -29,7 +29,11 @@
"url": "http://blog.izs.me/"
},
"license": "BSD",
- "readme": "# once\n\nOnly call a function once.\n\n## usage\n\n```javascript\nvar once = require('once')\n\nfunction load (file, cb) {\n cb = once(cb)\n loader.load('file')\n loader.once('load', cb)\n loader.once('error', cb)\n}\n```\n\nOr add to the Function.prototype in a responsible way:\n\n```javascript\n// only has to be done once\nrequire('once').proto()\n\nfunction load (file, cb) {\n cb = cb.once()\n loader.load('file')\n loader.once('load', cb)\n loader.once('error', cb)\n}\n```\n\nIronically, the prototype feature makes this module twice as\ncomplicated as necessary.\n",
- "_id": "once@1.1.1",
- "_from": "once"
+ "readme": "# once\n\nOnly call a function once.\n\n## usage\n\n```javascript\nvar once = require('once')\n\nfunction load (file, cb) {\n cb = once(cb)\n loader.load('file')\n loader.once('load', cb)\n loader.once('error', cb)\n}\n```\n\nOr add to the Function.prototype in a responsible way:\n\n```javascript\n// only has to be done once\nrequire('once').proto()\n\nfunction load (file, cb) {\n cb = cb.once()\n loader.load('file')\n loader.once('load', cb)\n loader.once('error', cb)\n}\n```\n\nIronically, the prototype feature makes this module twice as\ncomplicated as necessary.\n\nTo check whether you function has been called, use `fn.called`. Once the\nfunction is called for the first time the return value of the original\nfunction is saved in `fn.value` and subsequent calls will continue to\nreturn this value.\n\n```javascript\nvar once = require('once')\n\nfunction load (cb) {\n cb = once(cb)\n var stream = createStream()\n stream.once('data', cb)\n stream.once('end', function () {\n if (!cb.called) cb(new Error('not found'))\n })\n}\n```\n",
+ "readmeFilename": "README.md",
+ "bugs": {
+ "url": "https://github.com/isaacs/once/issues"
+ },
+ "_id": "once@1.3.0",
+ "_from": "once@latest"
}
diff --git a/deps/npm/node_modules/once/test/once.js b/deps/npm/node_modules/once/test/once.js
index f0291a44f..a77951f11 100644
--- a/deps/npm/node_modules/once/test/once.js
+++ b/deps/npm/node_modules/once/test/once.js
@@ -8,10 +8,12 @@ test('once', function (t) {
f ++
return f + g + this
})
+ t.notOk(foo.called)
for (var i = 0; i < 1E3; i++) {
t.same(f, i === 0 ? 0 : 1)
var g = foo.call(1, 1)
- t.same(g, i === 0 ? 3 : undefined)
+ t.ok(foo.called)
+ t.same(g, 3)
t.same(f, 1)
}
t.end()
diff --git a/deps/npm/node_modules/path-is-inside/LICENSE.txt b/deps/npm/node_modules/path-is-inside/LICENSE.txt
new file mode 100644
index 000000000..ae20051ff
--- /dev/null
+++ b/deps/npm/node_modules/path-is-inside/LICENSE.txt
@@ -0,0 +1,19 @@
+Copyright © 2013–2014 Domenic Denicola <domenic@domenicdenicola.com>
+
+This work is free. You can redistribute it and/or modify it under the
+terms of the Do What The Fuck You Want To Public License, Version 2,
+as published by Sam Hocevar. See below for more details.
+
+ DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
+ Version 2, December 2004
+
+ Copyright (C) 2004 Sam Hocevar <sam@hocevar.net>
+
+ Everyone is permitted to copy and distribute verbatim or modified
+ copies of this license document, and changing it is allowed as long
+ as the name is changed.
+
+ DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. You just DO WHAT THE FUCK YOU WANT TO.
diff --git a/deps/npm/node_modules/path-is-inside/README.md b/deps/npm/node_modules/path-is-inside/README.md
new file mode 100644
index 000000000..d42e6aa73
--- /dev/null
+++ b/deps/npm/node_modules/path-is-inside/README.md
@@ -0,0 +1,35 @@
+# Is This Path Inside This Other Path?
+
+It turns out this question isn't trivial to answer using Node's built-in path APIs. A naive `indexOf`-based solution will fail sometimes on Windows, which is case-insensitive (see e.g. [isaacs/npm#4214][]). You might then think to be clever with `path.resolve`, but you have to be careful to account for situations whether the paths have different drive letters, or else you'll cause bugs like [isaacs/npm#4313][]. And let's not even get started on trailing slashes.
+
+The **path-is-inside** package will give you a robust, cross-platform way of detecting whether a given path is inside another path.
+
+## Usage
+
+Pretty simple. First the path being tested; then the potential parent. Like so:
+
+```js
+var pathIsInside = require("path-is-inside");
+
+pathIsInside("/x/y/z", "/x/y") // true
+pathIsInside("/x/y", "/x/y/z") // false
+```
+
+## OS-Specific Behavior
+
+Like Node's built-in path module, path-is-inside treats all file paths on Windows as case-insensitive, whereas it treats all file paths on *-nix operating systems as case-sensitive. Keep this in mind especially when working on a Mac, where, despite Node's defaults, the OS usually treats paths case-insensitively.
+
+In practice, this means:
+
+```js
+// On Windows
+
+pathIsInside("C:\\X\\Y\\Z", "C:\\x\\y") // true
+
+// On *-nix, including Mac OS X
+
+pathIsInside("/X/Y/Z", "/x/y") // false
+```
+
+[isaacs/npm#4214]: https://github.com/isaacs/npm/pull/4214
+[isaacs/npm#4313]: https://github.com/isaacs/npm/issues/4313
diff --git a/deps/npm/node_modules/path-is-inside/lib/path-is-inside.js b/deps/npm/node_modules/path-is-inside/lib/path-is-inside.js
new file mode 100644
index 000000000..596dfd3b3
--- /dev/null
+++ b/deps/npm/node_modules/path-is-inside/lib/path-is-inside.js
@@ -0,0 +1,28 @@
+"use strict";
+
+var path = require("path");
+
+module.exports = function (thePath, potentialParent) {
+ // For inside-directory checking, we want to allow trailing slashes, so normalize.
+ thePath = stripTrailingSep(thePath);
+ potentialParent = stripTrailingSep(potentialParent);
+
+ // Node treats only Windows as case-insensitive in its path module; we follow those conventions.
+ if (process.platform === "win32") {
+ thePath = thePath.toLowerCase();
+ potentialParent = potentialParent.toLowerCase();
+ }
+
+ return thePath.lastIndexOf(potentialParent, 0) === 0 &&
+ (
+ thePath[potentialParent.length] === path.sep ||
+ thePath[potentialParent.length] === undefined
+ );
+};
+
+function stripTrailingSep(thePath) {
+ if (thePath[thePath.length - 1] === path.sep) {
+ return thePath.slice(0, -1);
+ }
+ return thePath;
+}
diff --git a/deps/npm/node_modules/path-is-inside/package.json b/deps/npm/node_modules/path-is-inside/package.json
new file mode 100644
index 000000000..b96d6fea0
--- /dev/null
+++ b/deps/npm/node_modules/path-is-inside/package.json
@@ -0,0 +1,43 @@
+{
+ "name": "path-is-inside",
+ "description": "Tests whether one path is inside another path",
+ "keywords": [
+ "path",
+ "directory",
+ "folder",
+ "inside",
+ "relative"
+ ],
+ "version": "1.0.1",
+ "author": {
+ "name": "Domenic Denicola",
+ "email": "domenic@domenicdenicola.com",
+ "url": "http://domenic.me"
+ },
+ "license": "WTFPL",
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/domenic/path-is-inside.git"
+ },
+ "bugs": {
+ "url": "http://github.com/domenic/path-is-inside/issues"
+ },
+ "main": "lib/path-is-inside.js",
+ "scripts": {
+ "test": "mocha",
+ "lint": "jshint lib"
+ },
+ "devDependencies": {
+ "jshint": "~2.3.0",
+ "mocha": "~1.15.1"
+ },
+ "readme": "# Is This Path Inside This Other Path?\n\nIt turns out this question isn't trivial to answer using Node's built-in path APIs. A naive `indexOf`-based solution will fail sometimes on Windows, which is case-insensitive (see e.g. [isaacs/npm#4214][]). You might then think to be clever with `path.resolve`, but you have to be careful to account for situations whether the paths have different drive letters, or else you'll cause bugs like [isaacs/npm#4313][]. And let's not even get started on trailing slashes.\n\nThe **path-is-inside** package will give you a robust, cross-platform way of detecting whether a given path is inside another path.\n\n## Usage\n\nPretty simple. First the path being tested; then the potential parent. Like so:\n\n```js\nvar pathIsInside = require(\"path-is-inside\");\n\npathIsInside(\"/x/y/z\", \"/x/y\") // true\npathIsInside(\"/x/y\", \"/x/y/z\") // false\n```\n\n## OS-Specific Behavior\n\nLike Node's built-in path module, path-is-inside treats all file paths on Windows as case-insensitive, whereas it treats all file paths on *-nix operating systems as case-sensitive. Keep this in mind especially when working on a Mac, where, despite Node's defaults, the OS usually treats paths case-insensitively.\n\nIn practice, this means:\n\n```js\n// On Windows\n\npathIsInside(\"C:\\\\X\\\\Y\\\\Z\", \"C:\\\\x\\\\y\") // true\n\n// On *-nix, including Mac OS X\n\npathIsInside(\"/X/Y/Z\", \"/x/y\") // false\n```\n\n[isaacs/npm#4214]: https://github.com/isaacs/npm/pull/4214\n[isaacs/npm#4313]: https://github.com/isaacs/npm/issues/4313\n",
+ "readmeFilename": "README.md",
+ "homepage": "https://github.com/domenic/path-is-inside",
+ "_id": "path-is-inside@1.0.1",
+ "dist": {
+ "shasum": "c5e6c4764c4cd41f2ac839c53be5621d085726b3"
+ },
+ "_from": "path-is-inside@1.0.1",
+ "_resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.1.tgz"
+}
diff --git a/deps/npm/node_modules/read-installed/.npmignore b/deps/npm/node_modules/read-installed/.npmignore
new file mode 100644
index 000000000..8c23deeb3
--- /dev/null
+++ b/deps/npm/node_modules/read-installed/.npmignore
@@ -0,0 +1,13 @@
+*.swp
+.*.swp
+
+.DS_Store
+*~
+.project
+.settings
+npm-debug.log
+coverage.html
+.idea
+lib-cov
+
+node_modules
diff --git a/deps/npm/node_modules/read-installed/LICENSE b/deps/npm/node_modules/read-installed/LICENSE
index 0c44ae716..dea3013d6 100644
--- a/deps/npm/node_modules/read-installed/LICENSE
+++ b/deps/npm/node_modules/read-installed/LICENSE
@@ -1,27 +1,16 @@
-Copyright (c) Isaac Z. Schlueter ("Author")
-All rights reserved.
+The ISC License
-The BSD License
+Copyright (c) Isaac Z. Schlueter
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions
-are met:
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
-1. Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
+REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
+FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
+INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
+OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+PERFORMANCE OF THIS SOFTWARE.
-2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
-THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
-ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS
-BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
-BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
-OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
-IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/deps/npm/node_modules/read-installed/README.md b/deps/npm/node_modules/read-installed/README.md
index 59e882fb0..312153b4f 100644
--- a/deps/npm/node_modules/read-installed/README.md
+++ b/deps/npm/node_modules/read-installed/README.md
@@ -5,12 +5,23 @@ structure with all the data.
npm uses this.
+## 2.0.0
+
+Breaking changes in `2.0.0`:
+
+The second argument is now an `Object` that contains the following keys:
+
+ * `depth` optional, defaults to Infinity
+ * `log` optional log Function
+ * `dev` optional, default false, set to true to include devDependencies
+
## Usage
```javascript
var readInstalled = require("read-installed")
-// depth is optional, defaults to Infinity
-readInstalled(folder, depth, function (er, data) {
+// optional options
+var options = { dev: false, log: fn, depth: 2 }
+readInstalled(folder, options, function (er, data) {
...
})
```
diff --git a/deps/npm/node_modules/read-installed/node_modules/util-extend/README.md b/deps/npm/node_modules/read-installed/node_modules/util-extend/README.md
new file mode 100644
index 000000000..be03922ab
--- /dev/null
+++ b/deps/npm/node_modules/read-installed/node_modules/util-extend/README.md
@@ -0,0 +1,13 @@
+# util-extend
+
+The Node object extending function that Node uses for Node!
+
+## Usage
+
+```js
+var extend = require('util-extend');
+function functionThatTakesOptions(options) {
+ var options = extend(defaults, options);
+ // now any unset options are set to the defaults.
+}
+```
diff --git a/deps/npm/node_modules/read-installed/node_modules/util-extend/extend.js b/deps/npm/node_modules/read-installed/node_modules/util-extend/extend.js
new file mode 100644
index 000000000..de9fcf471
--- /dev/null
+++ b/deps/npm/node_modules/read-installed/node_modules/util-extend/extend.js
@@ -0,0 +1,33 @@
+// Copyright Joyent, Inc. and other Node contributors.
+//
+// Permission is hereby granted, free of charge, to any person obtaining a
+// copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to permit
+// persons to whom the Software is furnished to do so, subject to the
+// following conditions:
+//
+// The above copyright notice and this permission notice shall be included
+// in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
+// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
+// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
+// USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+module.exports = extend;
+function extend(origin, add) {
+ // Don't do anything if add isn't an object
+ if (!add || typeof add !== 'object') return origin;
+
+ var keys = Object.keys(add);
+ var i = keys.length;
+ while (i--) {
+ origin[keys[i]] = add[keys[i]];
+ }
+ return origin;
+}
diff --git a/deps/npm/node_modules/read-installed/node_modules/util-extend/package.json b/deps/npm/node_modules/read-installed/node_modules/util-extend/package.json
new file mode 100644
index 000000000..f45c5c94f
--- /dev/null
+++ b/deps/npm/node_modules/read-installed/node_modules/util-extend/package.json
@@ -0,0 +1,23 @@
+{
+ "name": "util-extend",
+ "version": "1.0.1",
+ "description": "Node's internal object extension function",
+ "main": "extend.js",
+ "scripts": {
+ "test": "node test.js"
+ },
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/isaacs/util-extend"
+ },
+ "author": "",
+ "license": "MIT",
+ "readmeFilename": "README.md",
+ "readme": "# util-extend\n\nThe Node object extending function that Node uses for Node!\n\n## Usage\n\n```js\nvar extend = require('util-extend');\nfunction functionThatTakesOptions(options) {\n var options = extend(defaults, options);\n // now any unset options are set to the defaults.\n}\n```\n",
+ "bugs": {
+ "url": "https://github.com/isaacs/util-extend/issues"
+ },
+ "homepage": "https://github.com/isaacs/util-extend",
+ "_id": "util-extend@1.0.1",
+ "_from": "util-extend@^1.0.1"
+}
diff --git a/deps/npm/node_modules/read-installed/node_modules/util-extend/test.js b/deps/npm/node_modules/read-installed/node_modules/util-extend/test.js
new file mode 100644
index 000000000..fbee2b1e1
--- /dev/null
+++ b/deps/npm/node_modules/read-installed/node_modules/util-extend/test.js
@@ -0,0 +1,10 @@
+var assert = require('assert');
+var extend = require('./');
+assert.deepEqual(extend({a:1}), {a:1});
+assert.deepEqual(extend({a:1}, []), {a:1});
+assert.deepEqual(extend({a:1}, null), {a:1});
+assert.deepEqual(extend({a:1}, true), {a:1});
+assert.deepEqual(extend({a:1}, false), {a:1});
+assert.deepEqual(extend({a:1}, {b:2}), {a:1, b:2});
+assert.deepEqual(extend({a:1, b:2}, {b:3}), {a:1, b:3});
+console.log('ok');
diff --git a/deps/npm/node_modules/read-installed/package.json b/deps/npm/node_modules/read-installed/package.json
index c20eada02..41a980f76 100644
--- a/deps/npm/node_modules/read-installed/package.json
+++ b/deps/npm/node_modules/read-installed/package.json
@@ -1,33 +1,40 @@
{
"name": "read-installed",
"description": "Read all the installed packages in a folder, and return a tree structure with all the data.",
- "version": "0.1.1",
+ "version": "2.0.2",
"repository": {
"type": "git",
"url": "git://github.com/isaacs/read-installed"
},
"main": "read-installed.js",
"scripts": {
- "test": "node test/basic.js"
+ "test": "tap ./test/*.js"
},
"dependencies": {
- "semver": "1.x",
+ "read-package-json": "1",
+ "semver": "2",
"slide": "~1.1.3",
- "read-package-json": "0",
- "graceful-fs": "~1.2.0",
- "npmlog": "0"
+ "util-extend": "^1.0.1",
+ "graceful-fs": "~2"
},
"optionalDependencies": {
- "graceful-fs": "~1.2.0",
- "npmlog": "0"
+ "graceful-fs": "~2"
},
"author": {
"name": "Isaac Z. Schlueter",
"email": "i@izs.me",
"url": "http://blog.izs.me/"
},
- "readme": "# read-installed\n\nRead all the installed packages in a folder, and return a tree\nstructure with all the data.\n\nnpm uses this.\n\n## Usage\n\n```javascript\nvar readInstalled = require(\"read-installed\")\n// depth is optional, defaults to Infinity\nreadInstalled(folder, depth, function (er, data) {\n ...\n})\n```\n",
+ "license": "ISC",
+ "devDependencies": {
+ "tap": "~0.4.8"
+ },
+ "readme": "# read-installed\n\nRead all the installed packages in a folder, and return a tree\nstructure with all the data.\n\nnpm uses this.\n\n## 2.0.0\n\nBreaking changes in `2.0.0`:\n\nThe second argument is now an `Object` that contains the following keys:\n\n * `depth` optional, defaults to Infinity\n * `log` optional log Function\n * `dev` optional, default false, set to true to include devDependencies\n\n## Usage\n\n```javascript\nvar readInstalled = require(\"read-installed\")\n// optional options\nvar options = { dev: false, log: fn, depth: 2 }\nreadInstalled(folder, options, function (er, data) {\n ...\n})\n```\n",
"readmeFilename": "README.md",
- "_id": "read-installed@0.1.1",
- "_from": "read-installed@0"
+ "bugs": {
+ "url": "https://github.com/isaacs/read-installed/issues"
+ },
+ "homepage": "https://github.com/isaacs/read-installed",
+ "_id": "read-installed@2.0.2",
+ "_from": "read-installed@latest"
}
diff --git a/deps/npm/node_modules/read-installed/read-installed.js b/deps/npm/node_modules/read-installed/read-installed.js
index 4babfc862..a33758b17 100644
--- a/deps/npm/node_modules/read-installed/read-installed.js
+++ b/deps/npm/node_modules/read-installed/read-installed.js
@@ -93,34 +93,46 @@ try {
var fs = require("fs")
}
-try {
- var log = require("npmlog")
-} catch (_) {
- var log = { verbose: noop, info: noop, warn: noop, error: noop }
- function noop () {}
-}
-
var path = require("path")
var asyncMap = require("slide").asyncMap
var semver = require("semver")
var readJson = require("read-package-json")
var url = require("url")
+var util = require("util")
+var extend = require("util-extend")
module.exports = readInstalled
-function readInstalled (folder, depth, cb) {
- if (typeof cb !== "function") cb = depth, depth = Infinity
- readInstalled_(folder, null, null, null, 0, depth, function (er, obj) {
+function readInstalled (folder, opts, cb) {
+ if (typeof opts === 'function') {
+ cb = opts
+ opts = {}
+ } else {
+ opts = extend({}, opts)
+ }
+
+ if (typeof opts.depth !== 'number')
+ opts.depth = Infinity
+
+ opts.depth = Math.max(0, opts.depth)
+
+ if (typeof opts.log !== 'function')
+ opts.log = function () {}
+
+ opts.dev = !!opts.dev
+
+ readInstalled_(folder, null, null, null, 0, opts, function (er, obj) {
if (er) return cb(er)
// now obj has all the installed things, where they're installed
// figure out the inheritance links, now that the object is built.
- resolveInheritance(obj)
+ resolveInheritance(obj, opts)
+ markExtraneous(obj)
cb(null, obj)
})
}
var rpSeen = {}
-function readInstalled_ (folder, parent, name, reqver, depth, maxDepth, cb) {
+function readInstalled_ (folder, parent, name, reqver, depth, opts, cb) {
var installed
, obj
, real
@@ -176,42 +188,56 @@ function readInstalled_ (folder, parent, name, reqver, depth, maxDepth, cb) {
obj.realName = name || obj.name
obj.dependencies = obj.dependencies || {}
- // "foo":"http://blah" is always presumed valid
+ // "foo":"http://blah" and "foo":"latest" are always presumed valid
if (reqver
- && semver.validRange(reqver)
- && !semver.satisfies(obj.version, reqver)) {
+ && semver.validRange(reqver, true)
+ && !semver.satisfies(obj.version, reqver, true)) {
obj.invalid = true
}
- if (parent
- && !(name in parent.dependencies)
- && !(name in (parent.devDependencies || {}))) {
- obj.extraneous = true
+ if (parent) {
+ var deps = parent.dependencies || {}
+ var inDeps = name in deps
+ var devDeps = parent.devDependencies || {}
+ var inDev = opts.dev && (name in devDeps)
+ if (!inDeps && !inDev) {
+ obj.extraneous = true
+ }
}
+
obj.path = obj.path || folder
obj.realPath = real
obj.link = link
if (parent && !obj.link) obj.parent = parent
rpSeen[real] = obj
obj.depth = depth
- //if (depth >= maxDepth) return cb(null, obj)
+ //if (depth >= opts.depth) return cb(null, obj)
asyncMap(installed, function (pkg, cb) {
var rv = obj.dependencies[pkg]
- if (!rv && obj.devDependencies) rv = obj.devDependencies[pkg]
- if (depth >= maxDepth) {
+ if (!rv && obj.devDependencies && opts.dev)
+ rv = obj.devDependencies[pkg]
+
+ if (depth >= opts.depth) {
// just try to get the version number
var pkgfolder = path.resolve(folder, "node_modules", pkg)
, jsonFile = path.resolve(pkgfolder, "package.json")
return readJson(jsonFile, function (er, depData) {
// already out of our depth, ignore errors
if (er || !depData || !depData.version) return cb(null, obj)
- obj.dependencies[pkg] = depData.version
+ if (depth === opts.depth) {
+ // edge case, ignore dependencies
+ depData.dependencies = {}
+ depData.peerDependencies = {}
+ obj.dependencies[pkg] = depData
+ } else {
+ obj.dependencies[pkg] = depData.version
+ }
cb(null, obj)
})
}
readInstalled_( path.resolve(folder, "node_modules/"+pkg)
- , obj, pkg, obj.dependencies[pkg], depth + 1, maxDepth
+ , obj, pkg, obj.dependencies[pkg], depth + 1, opts
, cb )
}, function (er, installedData) {
@@ -236,7 +262,7 @@ function readInstalled_ (folder, parent, name, reqver, depth, maxDepth, cb) {
// starting from a root object, call findUnmet on each layer of children
var riSeen = []
-function resolveInheritance (obj) {
+function resolveInheritance (obj, opts) {
if (typeof obj !== "object") return
if (riSeen.indexOf(obj) !== -1) return
riSeen.push(obj)
@@ -244,18 +270,18 @@ function resolveInheritance (obj) {
obj.dependencies = {}
}
Object.keys(obj.dependencies).forEach(function (dep) {
- findUnmet(obj.dependencies[dep])
+ findUnmet(obj.dependencies[dep], opts)
})
Object.keys(obj.dependencies).forEach(function (dep) {
- resolveInheritance(obj.dependencies[dep])
+ resolveInheritance(obj.dependencies[dep], opts)
})
- findUnmet(obj)
+ findUnmet(obj, opts)
}
// find unmet deps by walking up the tree object.
// No I/O
var fuSeen = []
-function findUnmet (obj) {
+function findUnmet (obj, opts) {
if (fuSeen.indexOf(obj) !== -1) return
fuSeen.push(obj)
//console.error("find unmet", obj.name, obj.parent && obj.parent.name)
@@ -277,18 +303,16 @@ function findUnmet (obj) {
r = r.link ? null : r.parent
continue
}
+ // "foo":"http://blah" and "foo":"latest" are always presumed valid
if ( typeof deps[d] === "string"
- // url deps presumed innocent.
- && !url.parse(deps[d]).protocol
- && !semver.satisfies(found.version, deps[d])) {
+ && semver.validRange(deps[d], true)
+ && !semver.satisfies(found.version, deps[d], true)) {
// the bad thing will happen
- log.warn("unmet dependency", obj.path + " requires "+d+"@'"+deps[d]
- +"' but will load\n"
- +found.path+",\nwhich is version "+found.version
- )
+ opts.log("unmet dependency", obj.path + " requires "+d+"@'"+deps[d]
+ +"' but will load\n"
+ +found.path+",\nwhich is version "+found.version
+ )
found.invalid = true
- } else {
- found.extraneous = false
}
deps[d] = found
}
@@ -310,19 +334,41 @@ function findUnmet (obj) {
dependency = obj.parent.dependencies && obj.parent.dependencies[d]
}
- if (!dependency) return
-
- dependency.extraneous = false
-
- if (!semver.satisfies(dependency.version, peerDeps[d])) {
+ if (!dependency) {
+ // mark as a missing dep!
+ obj.dependencies[d] = peerDeps[d]
+ } else if (!semver.satisfies(dependency.version, peerDeps[d], true)) {
dependency.peerInvalid = true
+ } else {
+ dependency.extraneous = false
}
})
- log.verbose("readInstalled", "returning", obj._id)
return obj
}
+function recursivelyMarkExtraneous (obj, extraneous) {
+ // stop recursion if we're not changing anything
+ if (obj.extraneous === extraneous) return
+
+ obj.extraneous = extraneous
+ var deps = obj.dependencies = obj.dependencies || {}
+ Object.keys(deps).forEach(function(d){
+ recursivelyMarkExtraneous(deps[d], extraneous)
+ });
+}
+
+function markExtraneous (obj) {
+ // start from the root object and mark as non-extraneous all modules that haven't been previously flagged as
+ // extraneous then propagate to all their dependencies
+ var deps = obj.dependencies = obj.dependencies || {}
+ Object.keys(deps).forEach(function(d){
+ if (!deps[d].extraneous){
+ recursivelyMarkExtraneous(deps[d], false);
+ }
+ });
+}
+
function copy (obj) {
if (!obj || typeof obj !== 'object') return obj
if (Array.isArray(obj)) return obj.map(copy)
diff --git a/deps/npm/node_modules/read-installed/test/basic.js b/deps/npm/node_modules/read-installed/test/basic.js
index 0f833203f..4d83cd0ca 100644
--- a/deps/npm/node_modules/read-installed/test/basic.js
+++ b/deps/npm/node_modules/read-installed/test/basic.js
@@ -1,13 +1,26 @@
var readInstalled = require("../read-installed.js")
-var util = require("util")
-console.error("testing")
+var json = require("./fixtures/package.json")
+var known = [].concat(Object.keys(json.dependencies)
+ , Object.keys(json.optionalDependencies)
+ , Object.keys(json.devDependencies)).sort()
+var test = require("tap").test
+var path = require("path")
-var called = 0
-readInstalled(process.cwd(), function (er, map) {
- console.error(called ++)
- if (er) return console.error(er.stack || er.message)
- cleanup(map)
- console.error(util.inspect(map, true, 10, true))
+test("make sure that it works", function (t) {
+ readInstalled(path.join(__dirname, "../"), {
+ dev: true,
+ log: console.error
+ }, function (er, map) {
+ t.notOk(er, "er should be bull")
+ t.ok(map, "map should be data")
+ if (er) return console.error(er.stack || er.message)
+ cleanup(map)
+ var deps = Object.keys(map.dependencies).sort()
+ t.equal(known.length, deps.length, "array lengths are equal")
+ t.deepEqual(known, deps, "arrays should be equal")
+ t.notOk(map.dependencies.tap.extraneous, 'extraneous not set on devDep')
+ t.end()
+ })
})
var seen = []
diff --git a/deps/npm/node_modules/read-installed/test/depth-0.js b/deps/npm/node_modules/read-installed/test/depth-0.js
new file mode 100644
index 000000000..16dc6c525
--- /dev/null
+++ b/deps/npm/node_modules/read-installed/test/depth-0.js
@@ -0,0 +1,25 @@
+var readInstalled = require("../read-installed.js")
+var test = require("tap").test
+var json = require("../package.json")
+var path = require("path")
+var known = [].concat(Object.keys(json.dependencies)
+ , Object.keys(json.optionalDependencies)
+ , Object.keys(json.devDependencies)).sort()
+
+test("make sure that it works with depth=0", function (t) {
+ readInstalled(path.join(__dirname, "../"), {
+ depth: 0
+ }, function (er, map) {
+ t.notOk(er, "er should be bull")
+ t.ok(map, "map should be data")
+ if (er) return console.error(er.stack || er.message)
+ // Exclude self from dependencies when depth = 0
+ delete map.dependencies[json.name]
+ var subdeps = Object.keys(map.dependencies).reduce(function(acc, dep) {
+ acc += Object.keys(map.dependencies[dep].dependencies).length;
+ return acc;
+ }, 0);
+ t.equal(subdeps, 0, "there should be no sub dependencies")
+ t.end()
+ })
+})
diff --git a/deps/npm/node_modules/read-installed/test/depth-1.js b/deps/npm/node_modules/read-installed/test/depth-1.js
new file mode 100644
index 000000000..977c9276f
--- /dev/null
+++ b/deps/npm/node_modules/read-installed/test/depth-1.js
@@ -0,0 +1,23 @@
+var readInstalled = require("../read-installed.js")
+var test = require("tap").test
+var json = require("../package.json")
+var path = require("path")
+var known = [].concat(Object.keys(json.dependencies)
+ , Object.keys(json.optionalDependencies)
+ , Object.keys(json.devDependencies)).sort()
+
+test("make sure that it works with depth=1", function (t) {
+ readInstalled(path.join(__dirname, "../"), {
+ depth: 1
+ }, function (er, map) {
+ t.notOk(er, "er should be bull")
+ t.ok(map, "map should be data")
+ if (er) return console.error(er.stack || er.message)
+ var subdeps = Object.keys(map.dependencies).reduce(function(acc, dep) {
+ acc += Object.keys(map.dependencies[dep].dependencies).length;
+ return acc;
+ }, 0);
+ t.notEqual(subdeps, 0, "there should some sub dependencies")
+ t.end()
+ })
+})
diff --git a/deps/npm/node_modules/read-installed/test/dev.js b/deps/npm/node_modules/read-installed/test/dev.js
new file mode 100644
index 000000000..f6f4857bb
--- /dev/null
+++ b/deps/npm/node_modules/read-installed/test/dev.js
@@ -0,0 +1,23 @@
+var readInstalled = require("../read-installed.js")
+var test = require("tap").test
+var json = require("./fixtures/package.json")
+var path = require("path")
+var known = [].concat(Object.keys(json.dependencies)
+ , Object.keys(json.optionalDependencies)
+ , Object.keys(json.devDependencies)).sort()
+
+test("make sure that it works without dev deps", function (t) {
+ readInstalled(path.join(__dirname, "../"), {
+ log: console.error,
+ dev: false
+ }, function (er, map) {
+ t.notOk(er, "er should be bull")
+ t.ok(map, "map should be data")
+ if (er) return console.error(er.stack || er.message)
+ var deps = Object.keys(map.dependencies).sort()
+ t.equal(deps.length, known.length, "array lengths are equal")
+ t.deepEqual(deps, known, "arrays should be equal")
+ t.ok(map.dependencies.tap.extraneous, 'extraneous is set on devDep')
+ t.end()
+ })
+})
diff --git a/deps/npm/node_modules/read-installed/test/extraneous.js b/deps/npm/node_modules/read-installed/test/extraneous.js
new file mode 100644
index 000000000..2cc0d04e7
--- /dev/null
+++ b/deps/npm/node_modules/read-installed/test/extraneous.js
@@ -0,0 +1,17 @@
+var readInstalled = require('../read-installed.js')
+var test = require('tap').test
+var path = require('path');
+
+test('extraneous detected', function(t) {
+ // This test verifies read-installed#16
+ readInstalled(
+ path.join(__dirname, 'fixtures/extraneous-detected'),
+ { log: console.error },
+ function(err, map) {
+ t.ok(map.dependencies.foo.extraneous, 'foo is extraneous, it\'s not required by any module')
+ t.ok(map.dependencies.bar.extraneous, 'bar is extraneous, it\'s not required by any module')
+ t.notOk(map.dependencies.asdf.extraneous, 'asdf is not extraneous, it\'s required by ghjk')
+ t.notOk(map.dependencies.ghjk.extraneous, 'ghjk is not extraneous, it\'s required by our root module')
+ t.end();
+ })
+})
diff --git a/deps/npm/node_modules/read-installed/test/fixtures/extraneous-detected/package.json b/deps/npm/node_modules/read-installed/test/fixtures/extraneous-detected/package.json
new file mode 100644
index 000000000..f61531551
--- /dev/null
+++ b/deps/npm/node_modules/read-installed/test/fixtures/extraneous-detected/package.json
@@ -0,0 +1,7 @@
+{
+ "name": "extraneous-detected",
+ "version": "0.0.0",
+ "dependencies": {
+ "ghjk": "0.0.0"
+ }
+}
diff --git a/deps/npm/node_modules/read-installed/test/fixtures/package.json b/deps/npm/node_modules/read-installed/test/fixtures/package.json
new file mode 100644
index 000000000..8f4f11916
--- /dev/null
+++ b/deps/npm/node_modules/read-installed/test/fixtures/package.json
@@ -0,0 +1,27 @@
+{
+ "name": "read-installed",
+ "description": "Read all the installed packages in a folder, and return a tree structure with all the data.",
+ "version": "1.0.0",
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/isaacs/read-installed"
+ },
+ "main": "read-installed.js",
+ "scripts": {
+ "test": "tap ./test/"
+ },
+ "dependencies": {
+ "semver": "2",
+ "slide": "~1.1.3",
+ "read-package-json": "1",
+ "util-extend":"1"
+ },
+ "optionalDependencies": {
+ "graceful-fs": "~2"
+ },
+ "author": "Isaac Z. Schlueter <i@izs.me> (http://blog.izs.me/)",
+ "license": "ISC",
+ "devDependencies": {
+ "tap": "~0.4.8"
+ }
+}
diff --git a/deps/npm/node_modules/read-installed/test/noargs.js b/deps/npm/node_modules/read-installed/test/noargs.js
new file mode 100644
index 000000000..a84a8f4cf
--- /dev/null
+++ b/deps/npm/node_modules/read-installed/test/noargs.js
@@ -0,0 +1,21 @@
+var readInstalled = require("../read-installed.js")
+var test = require("tap").test
+var json = require("./fixtures/package.json")
+var path = require("path")
+var known = [].concat(Object.keys(json.dependencies)
+ , Object.keys(json.optionalDependencies)
+ , Object.keys(json.devDependencies)).sort()
+
+test("make sure that it works without dev deps", function (t) {
+ readInstalled(path.join(__dirname, "../"), function (er, map) {
+ t.notOk(er, "er should be bull")
+ t.ok(map, "map should be data")
+ if (er) return console.error(er.stack || er.message)
+ var deps = Object.keys(map.dependencies).sort()
+ t.equal(deps.length, known.length, "array lengths are equal")
+ t.deepEqual(deps, known, "arrays should be equal")
+ t.ok(map.dependencies.tap.extraneous, 'extraneous is set on devDep')
+ t.end()
+ })
+})
+
diff --git a/deps/npm/node_modules/read-installed/test/peer-dep-at-latest.js b/deps/npm/node_modules/read-installed/test/peer-dep-at-latest.js
new file mode 100644
index 000000000..8f2436fa1
--- /dev/null
+++ b/deps/npm/node_modules/read-installed/test/peer-dep-at-latest.js
@@ -0,0 +1,14 @@
+var readInstalled = require('../read-installed.js')
+var test = require('tap').test
+var path = require('path');
+
+test('"latest" version is valid', function(t) {
+ // This test verifies npm#3860
+ readInstalled(
+ path.join(__dirname, 'fixtures/peer-at-latest'),
+ { log: console.error },
+ function(err, map) {
+ t.notOk(map.dependencies.debug.invalid, 'debug@latest is satisfied by a peer')
+ t.end()
+ })
+})
diff --git a/deps/npm/node_modules/read-package-json/.npmignore b/deps/npm/node_modules/read-package-json/.npmignore
new file mode 100644
index 000000000..8c23deeb3
--- /dev/null
+++ b/deps/npm/node_modules/read-package-json/.npmignore
@@ -0,0 +1,13 @@
+*.swp
+.*.swp
+
+.DS_Store
+*~
+.project
+.settings
+npm-debug.log
+coverage.html
+.idea
+lib-cov
+
+node_modules
diff --git a/deps/npm/node_modules/read-package-json/LICENSE b/deps/npm/node_modules/read-package-json/LICENSE
index 0c44ae716..052085c43 100644
--- a/deps/npm/node_modules/read-package-json/LICENSE
+++ b/deps/npm/node_modules/read-package-json/LICENSE
@@ -1,27 +1,15 @@
-Copyright (c) Isaac Z. Schlueter ("Author")
-All rights reserved.
+The ISC License
-The BSD License
+Copyright (c) Isaac Z. Schlueter
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions
-are met:
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
-1. Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
-
-2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
-THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
-ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS
-BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
-BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
-OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
-IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
+REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
+FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
+INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
+OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+PERFORMANCE OF THIS SOFTWARE.
diff --git a/deps/npm/node_modules/read-package-json/README.md b/deps/npm/node_modules/read-package-json/README.md
index 97fb19f13..d497722a4 100644
--- a/deps/npm/node_modules/read-package-json/README.md
+++ b/deps/npm/node_modules/read-package-json/README.md
@@ -17,20 +17,24 @@ npm will see when it looks at your package.
```javascript
var readJson = require('read-package-json')
-readJson('/path/to/package.json', function (er, data) {
+// readJson(filename, [logFunction=noop], [strict=false], cb)
+readJson('/path/to/package.json', console.error, false, function (er, data) {
if (er) {
console.error("There was an error reading the file")
return
}
console.error('the package data is', data)
-}
+});
```
-## readJson(file, cb)
+## readJson(file, [logFn = noop], [strict = false], cb)
* `file` {String} The path to the package.json file
-* `cb` {Function}
+* `logFn` {Function} Function to handle logging. Defaults to a noop.
+* `strict` {Boolean} True to enforce SemVer 2.0 version strings, and
+ other strict requirements.
+* `cb` {Function} Gets called with `(er, data)`, as is The Node Way.
Reads the JSON file and does the things.
diff --git a/deps/npm/node_modules/read-package-json/node_modules/normalize-package-data/.travis.yml b/deps/npm/node_modules/read-package-json/node_modules/normalize-package-data/.travis.yml
index 2ca91f289..6e5919de3 100644
--- a/deps/npm/node_modules/read-package-json/node_modules/normalize-package-data/.travis.yml
+++ b/deps/npm/node_modules/read-package-json/node_modules/normalize-package-data/.travis.yml
@@ -1,4 +1,3 @@
language: node_js
node_js:
- "0.10"
- - "0.8" \ No newline at end of file
diff --git a/deps/npm/node_modules/read-package-json/node_modules/normalize-package-data/AUTHORS b/deps/npm/node_modules/read-package-json/node_modules/normalize-package-data/AUTHORS
index c64debf74..10860f72b 100644
--- a/deps/npm/node_modules/read-package-json/node_modules/normalize-package-data/AUTHORS
+++ b/deps/npm/node_modules/read-package-json/node_modules/normalize-package-data/AUTHORS
@@ -1,3 +1,4 @@
# Names sorted by how much code was originally theirs.
Isaac Z. Schlueter <i@izs.me>
-Meryn Stol <merynstol@gmail.com> \ No newline at end of file
+Meryn Stol <merynstol@gmail.com>
+Robert Kowalski <rok@kowalski.gd> \ No newline at end of file
diff --git a/deps/npm/node_modules/read-package-json/node_modules/normalize-package-data/README.md b/deps/npm/node_modules/read-package-json/node_modules/normalize-package-data/README.md
index 5712bd9ee..9b9adcc2d 100644
--- a/deps/npm/node_modules/read-package-json/node_modules/normalize-package-data/README.md
+++ b/deps/npm/node_modules/read-package-json/node_modules/normalize-package-data/README.md
@@ -21,7 +21,23 @@ normalizeData(packageData)
// packageData is now normalized
```
-Optionally, you may pass a "warning" function. It gets called whenever the normalizeData function encounters something that doesn't look right. It indicates less than perfect input data.
+#### Strict mode
+
+You may activate strict validation by passing true as the second argument.
+
+```javascript
+normalizeData = require('normalize-package-data')
+packageData = fs.readfileSync("package.json")
+warnFn = function(msg) { console.error(msg) }
+normalizeData(packageData, true)
+// packageData is now normalized
+```
+
+If strict mode is activated, only Semver 2.0 version strings are accepted. Otherwise, Semver 1.0 strings are accepted as well. Packages must have a name, and the name field must not have contain leading or trailing whitespace.
+
+#### Warnings
+
+Optionally, you may pass a "warning" function. It gets called whenever the `normalizeData` function encounters something that doesn't look right. It indicates less than perfect input data.
```javascript
normalizeData = require('normalize-package-data')
@@ -31,7 +47,9 @@ normalizeData(packageData, warnFn)
// packageData is now normalized. Any number of warnings may have been logged.
```
-If you don't provide a warning function, `normalizeData` functions silently.
+You may combine strict validation with warnings by passing `true` as the second argument, and `warnFn` as third.
+
+When `private` field is set to `true`, warnings will be suppressed.
### Potential exceptions
@@ -39,7 +57,7 @@ If the supplied data has an invalid name or version vield, `normalizeData` will
## What normalization (currently) entails
-* The value of `name` field gets trimmed.
+* The value of `name` field gets trimmed (unless in strict mode).
* The value of the `version` field gets cleaned by `semver.clean`. See [documentation for the semver module](https://github.com/isaacs/node-semver).
* If `name` and/or `version` fields are missing, they are set to empty strings.
* If `files` field is not an array, it will be removed.
@@ -52,10 +70,13 @@ If the supplied data has an invalid name or version vield, `normalizeData` will
* The values in `optionalDependencies` get added to `dependencies`. The `optionalDependencies` array is left untouched.
* If `description` field does not exists, but `readme` field does, then (more or less) the first paragraph of text that's found in the readme is taken as value for `description`.
* If `repository` field is a string, it will become an object with `url` set to the original string value, and `type` set to `"git"`.
+* If `repository.url` is not a valid url, but in the style of "[owner-name]/[repo-name]", `repository.url` will be set to git://github.com/[owner-name]/[repo-name]
* If `bugs` field is a string, the value of `bugs` field is changed into an object with `url` set to the original string value.
* If `bugs` field does not exist, but `repository` field points to a repository hosted on GitHub, the value of the `bugs` field gets set to an url in the form of https://github.com/[owner-name]/[repo-name]/issues . If the repository field points to a GitHub Gist repo url, the associated http url is chosen.
* If `bugs` field is an object, the resulting value only has email and url properties. If email and url properties are not strings, they are ignored. If no valid values for either email or url is found, bugs field will be removed.
* If `homepage` field is not a string, it will be removed.
+* If the url in the `homepage` field does not specify a protocol, then http is assumed. For example, `myproject.org` will be changed to `http://myproject.org`.
+* If `homepage` field does not exist, but `repository` field points to a repository hosted on GitHub, the value of the `homepage` field gets set to an url in the form of https://github.com/[owner-name]/[repo-name]/ . If the repository field points to a GitHub Gist repo url, the associated http url is chosen.
### Rules for name field
diff --git a/deps/npm/node_modules/read-package-json/node_modules/normalize-package-data/lib/core_module_names.json b/deps/npm/node_modules/read-package-json/node_modules/normalize-package-data/lib/core_module_names.json
new file mode 100644
index 000000000..637c2f073
--- /dev/null
+++ b/deps/npm/node_modules/read-package-json/node_modules/normalize-package-data/lib/core_module_names.json
@@ -0,0 +1,29 @@
+[
+"http",
+"events",
+"util",
+"domain",
+"cluster",
+"buffer",
+"stream",
+"crypto",
+"tls",
+"fs",
+"string_decoder",
+"path",
+"net",
+"dgram",
+"dns",
+"https",
+"url",
+"punycode",
+"readline",
+"repl",
+"vm",
+"child_process",
+"assert",
+"zlib",
+"tty",
+"os",
+"querystring"
+]
diff --git a/deps/npm/node_modules/read-package-json/node_modules/normalize-package-data/lib/extract_description.js b/deps/npm/node_modules/read-package-json/node_modules/normalize-package-data/lib/extract_description.js
index dbeef218b..83f10aa0a 100644
--- a/deps/npm/node_modules/read-package-json/node_modules/normalize-package-data/lib/extract_description.js
+++ b/deps/npm/node_modules/read-package-json/node_modules/normalize-package-data/lib/extract_description.js
@@ -3,6 +3,7 @@ module.exports = extractDescription
// Extracts description from contents of a readme file in markdown format
function extractDescription (d) {
if (!d) return;
+ if (d === "ERROR: No README data found!") return;
// the first block of text before the first heading
// that isn't the first line heading
d = d.trim().split('\n')
diff --git a/deps/npm/node_modules/read-package-json/node_modules/normalize-package-data/lib/fixer.js b/deps/npm/node_modules/read-package-json/node_modules/normalize-package-data/lib/fixer.js
index b42b30eee..2bcc2290d 100644
--- a/deps/npm/node_modules/read-package-json/node_modules/normalize-package-data/lib/fixer.js
+++ b/deps/npm/node_modules/read-package-json/node_modules/normalize-package-data/lib/fixer.js
@@ -3,15 +3,20 @@ var parseGitHubURL = require("github-url-from-git")
var depTypes = ["dependencies","devDependencies","optionalDependencies"]
var extractDescription = require("./extract_description")
var url = require("url")
+var typos = require("./typos")
+var coreModuleNames = require("./core_module_names")
+var githubUserRepo = require("github-url-from-username-repo")
var fixer = module.exports = {
+ // default warning function
+ warn: function() {},
+
fixRepositoryField: function(data) {
if (data.repositories) {
- this.warn("'repositories' (plural) Not supported.\n" +
- "Please pick one as the 'repository' field");
+ this.warn("repositories");
data.repository = data.repositories[0]
}
- if (!data.repository) return;
+ if (!data.repository) return this.warn("missingRepository")
if (typeof data.repository === "string") {
data.repository = {
type: "git",
@@ -23,19 +28,55 @@ var fixer = module.exports = {
var ghurl = parseGitHubURL(r)
if (ghurl) {
r = ghurl.replace(/^https?:\/\//, 'git://')
+ } else if (githubUserRepo(r)) {
+ // repo has 'user/reponame' filled in as repo
+ data.repository.url = githubUserRepo(r)
}
}
if (r.match(/github.com\/[^\/]+\/[^\/]+\.git\.git$/)) {
- this.warn("Probably broken git url: " + r)
+ this.warn("brokenGitUrl", r)
}
}
+, fixTypos: function(data) {
+ Object.keys(typos.topLevel).forEach(function (d) {
+ if (data.hasOwnProperty(d)) {
+ this.warn("typo", d, typos.topLevel[d])
+ }
+ }, this)
+ }
+
+, fixScriptsField: function(data) {
+ if (!data.scripts) return
+ if (typeof data.scripts !== "object") {
+ this.warn("nonObjectScripts")
+ delete data.scripts
+ }
+ Object.keys(data.scripts).forEach(function (k) {
+ if (typeof data.scripts[k] !== "string") {
+ this.warn("nonStringScript")
+ delete data.scripts[k]
+ } else if (typos.script[k]) {
+ this.warn("typo", k, typos.script[k], "scripts")
+ }
+ }, this)
+ }
+
, fixFilesField: function(data) {
var files = data.files
if (files && !Array.isArray(files)) {
- this.warn("Invalid 'files' member")
+ this.warn("nonArrayFiles")
delete data.files
+ } else if (data.files) {
+ data.files = data.files.filter(function(file) {
+ if (!file || typeof file !== "string") {
+ this.warn("invalidFilename", file)
+ return false
+ } else {
+ return true
+ }
+ }, this)
}
}
@@ -61,63 +102,129 @@ var fixer = module.exports = {
data[bd] = data[bdd]
delete data[bdd]
}
+ if (data[bd] && !Array.isArray(data[bd])) {
+ this.warn("nonArrayBundleDependencies")
+ delete data[bd]
+ } else if (data[bd]) {
+ data[bd] = data[bd].filter(function(bd) {
+ if (!bd || typeof bd !== 'string') {
+ this.warn("nonStringBundleDependency", bd)
+ return false
+ } else {
+ return true
+ }
+ }, this)
+ }
}
-, fixDependencies: function(data) {
+, fixDependencies: function(data, strict) {
+ var loose = !strict
objectifyDeps(data, this.warn)
addOptionalDepsToDeps(data, this.warn)
this.fixBundleDependenciesField(data)
+
+ ;['dependencies','devDependencies'].forEach(function(deps) {
+ if (!(deps in data)) return
+ if (!data[deps] || typeof data[deps] !== "object") {
+ this.warn("nonObjectDependencies", deps)
+ delete data[deps]
+ return
+ }
+ Object.keys(data[deps]).forEach(function (d) {
+ var r = data[deps][d]
+ if (typeof r !== 'string') {
+ this.warn("nonStringDependency", d, JSON.stringify(r))
+ delete data[deps][d]
+ }
+ // "/" is not allowed as packagename for publishing, but for git-urls
+ // normalize shorthand-urls
+ if (githubUserRepo(data[deps][d])) {
+ data[deps][d] = githubUserRepo(data[deps][d])
+ }
+ }, this)
+ }, this)
}
-, fixKeywordsField: function (data, warn) {
+, fixModulesField: function (data) {
+ if (data.modules) {
+ this.warn("deprecatedModules")
+ delete data.modules
+ }
+ }
+
+, fixKeywordsField: function (data) {
if (typeof data.keywords === "string") {
data.keywords = data.keywords.split(/,\s+/)
}
+ if (data.keywords && !Array.isArray(data.keywords)) {
+ delete data.keywords
+ this.warn("nonArrayKeywords")
+ } else if (data.keywords) {
+ data.keywords = data.keywords.filter(function(kw) {
+ if (typeof kw !== "string" || !kw) {
+ this.warn("nonStringKeyword");
+ return false
+ } else {
+ return true
+ }
+ }, this)
+ }
}
-, fixVersionField: function(data) {
+, fixVersionField: function(data, strict) {
+ // allow "loose" semver 1.0 versions in non-strict mode
+ // enforce strict semver 2.0 compliance in strict mode
+ var loose = !strict
if (!data.version) {
data.version = ""
return true
}
- if (!semver.valid(data.version)) {
- throw new Error("invalid version: "+ data.version)
+ if (!semver.valid(data.version, loose)) {
+ throw new Error('Invalid version: "'+ data.version + '"')
}
- data.version = semver.clean(data.version)
+ data.version = semver.clean(data.version, loose)
return true
}
, fixPeople: function(data) {
modifyPeople(data, unParsePerson)
- modifyPeople(data, parsePerson)
- }
+ modifyPeople(data, parsePerson)
+ }
-, fixNameField: function(data) {
- if (!data.name) {
+, fixNameField: function(data, strict) {
+ if (!data.name && !strict) {
data.name = ""
- return true
+ return
}
if (typeof data.name !== "string") {
throw new Error("name field must be a string.")
}
- data.name = data.name.trim()
- ensureValidName(data.name)
+ if (!strict)
+ data.name = data.name.trim()
+ ensureValidName(data.name, strict)
+ if (coreModuleNames.indexOf(data.name) !== -1)
+ this.warn("conflictingName", data.name)
}
-
+
, fixDescriptionField: function (data) {
if (data.description && typeof data.description !== 'string') {
- this.warn("'description' field should be a string")
+ this.warn("nonStringDescription")
delete data.description
}
if (data.readme && !data.description)
data.description = extractDescription(data.readme)
+ if(data.description === undefined) delete data.description;
+ if (!data.description) this.warn("missingDescription")
}
-
+
, fixReadmeField: function (data) {
- if (!data.readme) data.readme = "ERROR: No README data found!"
+ if (!data.readme) {
+ this.warn("missingReadme")
+ data.readme = "ERROR: No README data found!"
+ }
}
-
+
, fixBugsField: function(data) {
if (!data.bugs && data.repository && data.repository.url) {
var gh = parseGitHubURL(data.repository.url)
@@ -136,44 +243,58 @@ var fixer = module.exports = {
else if(url.parse(data.bugs).protocol)
data.bugs = {url: data.bugs}
else
- this.warn("Bug string field must be url, email, or {email,url}")
+ this.warn("nonEmailUrlBugsString")
}
else {
+ bugsTypos(data.bugs, this.warn)
var oldBugs = data.bugs
data.bugs = {}
if(oldBugs.url) {
if(typeof(oldBugs.url) == "string" && url.parse(oldBugs.url).protocol)
data.bugs.url = oldBugs.url
else
- this.warn("bugs.url field must be a string url. Deleted.")
+ this.warn("nonUrlBugsUrlField")
}
if(oldBugs.email) {
if(typeof(oldBugs.email) == "string" && emailRe.test(oldBugs.email))
data.bugs.email = oldBugs.email
else
- this.warn("bugs.email field must be a string email. Deleted.")
+ this.warn("nonEmailBugsEmailField")
}
}
if(!data.bugs.email && !data.bugs.url) {
delete data.bugs
- this.warn("Normalized value of bugs field is an empty object. Deleted.")
+ this.warn("emptyNormalizedBugs")
}
}
}
-, fixHomepageField: function(data) {
- if(!data.homepage) return true;
- if(typeof data.homepage !== "string" || !url.parse(data.homepage).protocol) {
- this.warn("homepage field must be a string url. Deleted.")
- delete data.homepage
+, fixHomepageField: function(data) {
+ if (!data.homepage && data.repository && data.repository.url) {
+ var gh = parseGitHubURL(data.repository.url)
+ if (gh)
+ data.homepage = gh
+ else
+ return true
+ } else if (!data.homepage)
+ return true
+
+ if(typeof data.homepage !== "string") {
+ this.warn("nonUrlHomepage")
+ return delete data.homepage
+ }
+ if(!url.parse(data.homepage).protocol) {
+ this.warn("missingProtocolHomepage")
+ data.homepage = "http://" + data.homepage
}
}
}
-function ensureValidName (name) {
+function ensureValidName (name, strict) {
if (name.charAt(0) === "." ||
name.match(/[\/@\s\+%:]/) ||
name !== encodeURIComponent(name) ||
+ (strict && name !== name.toLowerCase()) ||
name.toLowerCase() === "node_modules" ||
name.toLowerCase() === "favicon.ico") {
throw new Error("Invalid name: " + JSON.stringify(name))
@@ -218,19 +339,20 @@ function addOptionalDepsToDeps (data, warn) {
Object.keys(o).forEach(function (k) {
d[k] = o[k]
})
- data.dependencies = d
+ data.dependencies = d
}
-function depObjectify (deps) {
+function depObjectify (deps, type, warn) {
if (!deps) return {}
if (typeof deps === "string") {
deps = deps.trim().split(/[\n\r\s\t ,]+/)
}
if (!Array.isArray(deps)) return deps
+ warn("deprecatedArrayDependencies", type)
var o = {}
deps.filter(function (d) {
return typeof d === "string"
- }).forEach(function(d) {
+ }).forEach(function(d) {
d = d.trim().split(/(:?[@\s><=])/)
var dn = d.shift()
var dv = d.join("")
@@ -244,6 +366,17 @@ function depObjectify (deps) {
function objectifyDeps (data, warn) {
depTypes.forEach(function (type) {
if (!data[type]) return;
- data[type] = depObjectify(data[type])
+ data[type] = depObjectify(data[type], type, warn)
})
}
+
+function bugsTypos(bugs, warn) {
+ if (!bugs) return
+ Object.keys(bugs).forEach(function (k) {
+ if (typos.bugs[k]) {
+ warn("typo", k, typos.bugs[k], "bugs")
+ bugs[typos.bugs[k]] = bugs[k]
+ delete bugs[k]
+ }
+ })
+} \ No newline at end of file
diff --git a/deps/npm/node_modules/read-package-json/node_modules/normalize-package-data/lib/is_valid.js b/deps/npm/node_modules/read-package-json/node_modules/normalize-package-data/lib/is_valid.js
deleted file mode 100644
index 509fab491..000000000
--- a/deps/npm/node_modules/read-package-json/node_modules/normalize-package-data/lib/is_valid.js
+++ /dev/null
@@ -1,58 +0,0 @@
-// a warning for deprecated or likely-incorrect fields
-
-module.exports = isValid
-
-var typos = require("./typos")
-
-function isValid (data, warnFunc) {
- var hasWarned = false
- function warn(msg) {
- hasWarned = true
- if(warnFunc) warnFunc(msg)
- }
- if (data.modules) warn("'modules' is deprecated")
- Object.keys(typos.topLevel).forEach(function (d) {
- if (data.hasOwnProperty(d)) {
- warn(makeTypoWarning(d, typos.topLevel[d]))
- }
- })
- checkBugsField(data.bugs, warn)
- checkScriptsField(data.scripts, warn)
- if (!data.repository) warn("No repository field.")
- if (!data.readme) warn("No readme data.")
- if (data.description && typeof data.description !== 'string') {
- warn("'description' field should be a string")
- }
- if (data[data.bundledDependencies] &&
- !Array.isArray(data.bundleDependencies)) {
- warn("bundleDependencies must be an array")
- }
- return !hasWarned
-}
-
-function checkBugsField (bugs, warn) {
- if (!bugs || typeof bugs !== "object") return
- Object.keys(bugs).forEach(function (k) {
- if (typos.bugs[k]) {
- bugs[typos.bugs[k]] = bugs[k]
- delete bugs[k]
- }
- })
-}
-
-function checkScriptsField (scripts, warn) {
- if (!scripts || typeof scripts !== "object") return
- Object.keys(scripts).forEach(function (k) {
- if (typos.script[k]) {
- warn(makeTypoWarning(k, typos.script[k], "scripts"))
- }
- })
-}
-
-function makeTypoWarning (providedName, probableName, field) {
- if (field) {
- providedName = field + "['" + providedName + "']"
- probableName = field + "['" + probableName + "']"
- }
- return providedName + " should probably be " + probableName + "."
-}
diff --git a/deps/npm/node_modules/read-package-json/node_modules/normalize-package-data/lib/make_warning.js b/deps/npm/node_modules/read-package-json/node_modules/normalize-package-data/lib/make_warning.js
new file mode 100644
index 000000000..0f3aad5f5
--- /dev/null
+++ b/deps/npm/node_modules/read-package-json/node_modules/normalize-package-data/lib/make_warning.js
@@ -0,0 +1,23 @@
+var util = require("util")
+var messages = require("./warning_messages.json")
+
+module.exports = function() {
+ var args = Array.prototype.slice.call(arguments, 0)
+ var warningName = args.shift()
+ if (warningName == "typo") {
+ return makeTypoWarning.apply(null,args)
+ }
+ else {
+ var msgTemplate = messages[warningName] ? messages[warningName] : warningName + ": '%s'"
+ args.unshift(msgTemplate)
+ return util.format.apply(null, args)
+ }
+}
+
+function makeTypoWarning (providedName, probableName, field) {
+ if (field) {
+ providedName = field + "['" + providedName + "']"
+ probableName = field + "['" + probableName + "']"
+ }
+ return util.format(messages.typo, providedName, probableName)
+} \ No newline at end of file
diff --git a/deps/npm/node_modules/read-package-json/node_modules/normalize-package-data/lib/normalize.js b/deps/npm/node_modules/read-package-json/node_modules/normalize-package-data/lib/normalize.js
index 336334a47..7e6beefda 100644
--- a/deps/npm/node_modules/read-package-json/node_modules/normalize-package-data/lib/normalize.js
+++ b/deps/npm/node_modules/read-package-json/node_modules/normalize-package-data/lib/normalize.js
@@ -1,11 +1,11 @@
module.exports = normalize
-var isValid = require("./is_valid")
var fixer = require("./fixer")
+var makeWarning = require("./make_warning")
-var fieldsToFix = ['name','version','description','repository'
+var fieldsToFix = ['name','version','description','repository','modules','scripts'
,'files','bin','man','bugs','keywords','readme','homepage']
-var otherThingsToFix = ['dependencies','people']
+var otherThingsToFix = ['dependencies','people', 'typos']
var thingsToFix = fieldsToFix.map(function(fieldName) {
return ucFirst(fieldName) + "Field"
@@ -15,20 +15,21 @@ var thingsToFix = fieldsToFix.map(function(fieldName) {
// thingsToFix = (ucFirst(name) + "Field" for name in fieldsToFix)
thingsToFix = thingsToFix.concat(otherThingsToFix)
-function normalize (data, warn) {
- if(!warn) warn = function(msg) { /* noop */ }
- isValid(data, warn) // don't care if it's valid, we'll make it valid
+function normalize (data, warn, strict) {
+ if(warn === true) warn = null, strict = true
+ if(!strict) strict = false
+ if(!warn || data.private) warn = function(msg) { /* noop */ }
+
if (data.scripts &&
data.scripts.install === "node-gyp rebuild" &&
!data.scripts.preinstall) {
data.gypfile = true
}
- fixer.warn = warn
+ fixer.warn = function() { warn(makeWarning.apply(null, arguments)) }
thingsToFix.forEach(function(thingName) {
- fixer["fix" + ucFirst(thingName)](data)
+ fixer["fix" + ucFirst(thingName)](data, strict)
})
data._id = data.name + "@" + data.version
- if (data.modules) delete data.modules // modules field is deprecated
}
function ucFirst (string) {
diff --git a/deps/npm/node_modules/read-package-json/node_modules/normalize-package-data/lib/safe_format.js b/deps/npm/node_modules/read-package-json/node_modules/normalize-package-data/lib/safe_format.js
new file mode 100644
index 000000000..08517f142
--- /dev/null
+++ b/deps/npm/node_modules/read-package-json/node_modules/normalize-package-data/lib/safe_format.js
@@ -0,0 +1,9 @@
+var util = require('util')
+
+module.exports = function() {
+ var args = Array.prototype.slice.call(arguments, 0)
+ args.forEach(function(arg) {
+ if (!arg) throw new TypeError('Bad arguments.')
+ })
+ return util.format.apply(null, arguments)
+} \ No newline at end of file
diff --git a/deps/npm/node_modules/read-package-json/node_modules/normalize-package-data/lib/typos.json b/deps/npm/node_modules/read-package-json/node_modules/normalize-package-data/lib/typos.json
index dd2ec6614..73590c0a2 100644
--- a/deps/npm/node_modules/read-package-json/node_modules/normalize-package-data/lib/typos.json
+++ b/deps/npm/node_modules/read-package-json/node_modules/normalize-package-data/lib/typos.json
@@ -10,6 +10,7 @@
,"devDepenencies": "devDependencies"
,"devdependencies": "devDependencies"
,"repostitory": "repository"
+ ,"repo": "repository"
,"prefereGlobal": "preferGlobal"
,"hompage": "homepage"
,"hampage": "homepage"
@@ -17,7 +18,8 @@
,"autor": "author"
,"contributers": "contributors"
,"publicationConfig": "publishConfig"
+ ,"script": "scripts"
},
"bugs": { "web": "url", "name": "url" },
"script": { "server": "start", "tests": "test" }
-} \ No newline at end of file
+}
diff --git a/deps/npm/node_modules/read-package-json/node_modules/normalize-package-data/lib/warning_messages.json b/deps/npm/node_modules/read-package-json/node_modules/normalize-package-data/lib/warning_messages.json
new file mode 100644
index 000000000..9605f5cc6
--- /dev/null
+++ b/deps/npm/node_modules/read-package-json/node_modules/normalize-package-data/lib/warning_messages.json
@@ -0,0 +1,28 @@
+{
+ "repositories": "'repositories' (plural) Not supported. Please pick one as the 'repository' field"
+ ,"missingRepository": "No repository field."
+ ,"brokenGitUrl": "Probably broken git url: %s"
+ ,"nonObjectScripts": "scripts must be an object"
+ ,"nonStringScript": "script values must be string commands"
+ ,"nonArrayFiles": "Invalid 'files' member"
+ ,"invalidFilename": "Invalid filename in 'files' list: %s"
+ ,"nonArrayBundleDependencies": "Invalid 'bundleDependencies' list. Must be array of package names"
+ ,"nonStringBundleDependency": "Invalid bundleDependencies member: %s"
+ ,"nonObjectDependencies": "%s field must be an object"
+ ,"nonStringDependency": "Invalid dependency: %s %s"
+ ,"deprecatedArrayDependencies": "specifying %s as array is deprecated"
+ ,"deprecatedModules": "modules field is deprecated"
+ ,"nonArrayKeywords": "keywords should be an array of strings"
+ ,"nonStringKeyword": "keywords should be an array of strings"
+ ,"conflictingName": "%s is also the name of a node core module."
+ ,"nonStringDescription": "'description' field should be a string"
+ ,"missingDescription": "No description"
+ ,"missingReadme": "No README data"
+ ,"nonEmailUrlBugsString": "Bug string field must be url, email, or {email,url}"
+ ,"nonUrlBugsUrlField": "bugs.url field must be a string url. Deleted."
+ ,"nonEmailBugsEmailField": "bugs.email field must be a string email. Deleted."
+ ,"emptyNormalizedBugs": "Normalized value of bugs field is an empty object. Deleted."
+ ,"nonUrlHomepage": "homepage field must be a string url. Deleted."
+ ,"missingProtocolHomepage": "homepage field must start with a protocol."
+ ,"typo": "%s should probably be %s."
+} \ No newline at end of file
diff --git a/deps/npm/node_modules/read-package-json/node_modules/normalize-package-data/node_modules/github-url-from-git/package.json b/deps/npm/node_modules/read-package-json/node_modules/normalize-package-data/node_modules/github-url-from-git/package.json
deleted file mode 100644
index 923045414..000000000
--- a/deps/npm/node_modules/read-package-json/node_modules/normalize-package-data/node_modules/github-url-from-git/package.json
+++ /dev/null
@@ -1,27 +0,0 @@
-{
- "name": "github-url-from-git",
- "version": "1.1.1",
- "description": "Parse a github git url and return the github repo url",
- "main": "index.js",
- "scripts": {
- "test": "mocha test.js --reporter spec --require should"
- },
- "repository": "",
- "keywords": [
- "github",
- "git",
- "url",
- "parser"
- ],
- "author": "",
- "license": "MIT",
- "devDependencies": {
- "better-assert": "~1.0.0",
- "mocha": "~1.9.0",
- "should": "~1.2.2"
- },
- "readme": "\n# github-url-from-git\n\n```js\ndescribe('parse(url)', function(){\n it('should support git://*', function(){\n var url = 'git://github.com/jamesor/mongoose-versioner';\n parse(url).should.equal('https://github.com/jamesor/mongoose-versioner');\n })\n\n it('should support git://*.git', function(){\n var url = 'git://github.com/treygriffith/cellar.git';\n parse(url).should.equal('https://github.com/treygriffith/cellar');\n })\n\n it('should support https://*', function(){\n var url = 'https://github.com/Empeeric/i18n-node';\n parse(url).should.equal('https://github.com/Empeeric/i18n-node');\n })\n\n it('should support https://*.git', function(){\n var url = 'https://jpillora@github.com/banchee/tranquil.git';\n parse(url).should.equal('https://github.com/banchee/tranquil');\n })\n\n it('should return undefined on failure', function(){\n var url = 'git://github.com/justgord/.git';\n assert(null == parse(url));\n })\n\n it('should parse git@gist urls', function() {\n var url = 'git@gist.github.com:3135914.git';\n parse(url).should.equal('https://gist.github.com/3135914')\n })\n\n it('should parse https://gist urls', function() {\n var url = 'https://gist.github.com/3135914.git';\n parse(url).should.equal('https://gist.github.com/3135914')\n })\n})\n```\n",
- "readmeFilename": "Readme.md",
- "_id": "github-url-from-git@1.1.1",
- "_from": "github-url-from-git@~1.1.1"
-}
diff --git a/deps/npm/node_modules/read-package-json/node_modules/normalize-package-data/package.json b/deps/npm/node_modules/read-package-json/node_modules/normalize-package-data/package.json
index 0479feac5..449cfb7df 100644
--- a/deps/npm/node_modules/read-package-json/node_modules/normalize-package-data/package.json
+++ b/deps/npm/node_modules/read-package-json/node_modules/normalize-package-data/package.json
@@ -1,6 +1,6 @@
{
"name": "normalize-package-data",
- "version": "0.1.6",
+ "version": "0.2.13",
"author": {
"name": "Meryn Stol",
"email": "merynstol@gmail.com"
@@ -15,8 +15,9 @@
"test": "tap test/*.js"
},
"dependencies": {
- "semver": "1.x",
- "github-url-from-git": "~1.1.1"
+ "github-url-from-git": "~1.1.1",
+ "github-url-from-username-repo": "^0.1.0",
+ "semver": "2"
},
"devDependencies": {
"tap": "~0.2.5",
@@ -31,13 +32,19 @@
{
"name": "Meryn Stol",
"email": "merynstol@gmail.com"
+ },
+ {
+ "name": "Robert Kowalski",
+ "email": "rok@kowalski.gd"
}
],
- "readme": "# normalize-package-data [![Build Status](https://travis-ci.org/meryn/normalize-package-data.png?branch=master)](https://travis-ci.org/meryn/normalize-package-data)\n\nnormalize-package data exports a function that normalizes package metadata. This data is typically found in a package.json file, but in principle could come from any source - for example the npm registry.\n\nnormalize-package-data is used by [read-package-json](https://npmjs.org/package/read-package-json) to normalize the data it reads from a package.json file. In turn, read-package-json is used by [npm](https://npmjs.org/package/npm) and various npm-related tools.\n\n## Installation\n\n```\nnpm install normalize-package-data\n```\n\n## Usage\n\nBasic usage is really simple. You call the function that normalize-package-data exports. Let's call it `normalizeData`.\n\n```javascript\nnormalizeData = require('normalize-package-data')\npackageData = fs.readfileSync(\"package.json\")\nnormalizeData(packageData)\n// packageData is now normalized\n```\n\nOptionally, you may pass a \"warning\" function. It gets called whenever the normalizeData function encounters something that doesn't look right. It indicates less than perfect input data.\n\n```javascript\nnormalizeData = require('normalize-package-data')\npackageData = fs.readfileSync(\"package.json\")\nwarnFn = function(msg) { console.error(msg) }\nnormalizeData(packageData, warnFn)\n// packageData is now normalized. Any number of warnings may have been logged.\n```\n\nIf you don't provide a warning function, `normalizeData` functions silently.\n\n### Potential exceptions\n\nIf the supplied data has an invalid name or version vield, `normalizeData` will throw an error. Depending on where you call `normalizeData`, you may want to catch these errors so can pass them to a callback.\n\n## What normalization (currently) entails\n\n* The value of `name` field gets trimmed.\n* The value of the `version` field gets cleaned by `semver.clean`. See [documentation for the semver module](https://github.com/isaacs/node-semver).\n* If `name` and/or `version` fields are missing, they are set to empty strings.\n* If `files` field is not an array, it will be removed.\n* If `bin` field is a string, then `bin` field will become an object with `name` set to the value of the `name` field, and `bin` set to the original string value.\n* If `man` field is a string, it will become an array with the original string as its sole member.\n* If `keywords` field is string, it is considered to be a list of keywords separated by one or more white-space characters. It gets converted to an array by splitting on `\\s+`.\n* All people fields (`author`, `maintainers`, `contributors`) get converted into objects with name, email and url properties.\n* If `bundledDependencies` field (a typo) exists and `bundleDependencies` field does not, `bundledDependencies` will get renamed to `bundleDependencies`.\n* If the value of any of the dependencies fields (`dependencies`, `devDependencies`, `optionalDependencies`) is a string, it gets converted into an object with familiar `name=>value` pairs.\n* The values in `optionalDependencies` get added to `dependencies`. The `optionalDependencies` array is left untouched.\n* If `description` field does not exists, but `readme` field does, then (more or less) the first paragraph of text that's found in the readme is taken as value for `description`.\n* If `repository` field is a string, it will become an object with `url` set to the original string value, and `type` set to `\"git\"`.\n* If `bugs` field is a string, the value of `bugs` field is changed into an object with `url` set to the original string value.\n* If `bugs` field does not exist, but `repository` field points to a repository hosted on GitHub, the value of the `bugs` field gets set to an url in the form of https://github.com/[owner-name]/[repo-name]/issues . If the repository field points to a GitHub Gist repo url, the associated http url is chosen.\n* If `bugs` field is an object, the resulting value only has email and url properties. If email and url properties are not strings, they are ignored. If no valid values for either email or url is found, bugs field will be removed.\n* If `homepage` field is not a string, it will be removed.\n\n### Rules for name field\n\nIf `name` field is given, the value of the name field must be a string. The string may not:\n\n* start with a period.\n* contain the following characters: `/@\\s+%`\n* contain and characters that would need to be encoded for use in urls.\n* resemble the word `node_modules` or `favicon.ico` (case doesn't matter).\n\n### Rules for version field\n\nIf `version` field is given, the value of the version field must be a valid *semver* string, as determined by the `semver.valid` method. See [documentation for the semver module](https://github.com/isaacs/node-semver).\n\n## Credits\n\nThis package contains code based on read-package-json written by Isaac Z. Schlueter. Used with permisson.\n\n## License\n\nnormalize-package-data is released under the [BSD 2-Clause License](http://opensource.org/licenses/MIT). \nCopyright (c) 2013 Meryn Stol ",
+ "readme": "# normalize-package-data [![Build Status](https://travis-ci.org/meryn/normalize-package-data.png?branch=master)](https://travis-ci.org/meryn/normalize-package-data)\n\nnormalize-package data exports a function that normalizes package metadata. This data is typically found in a package.json file, but in principle could come from any source - for example the npm registry.\n\nnormalize-package-data is used by [read-package-json](https://npmjs.org/package/read-package-json) to normalize the data it reads from a package.json file. In turn, read-package-json is used by [npm](https://npmjs.org/package/npm) and various npm-related tools.\n\n## Installation\n\n```\nnpm install normalize-package-data\n```\n\n## Usage\n\nBasic usage is really simple. You call the function that normalize-package-data exports. Let's call it `normalizeData`.\n\n```javascript\nnormalizeData = require('normalize-package-data')\npackageData = fs.readfileSync(\"package.json\")\nnormalizeData(packageData)\n// packageData is now normalized\n```\n\n#### Strict mode\n\nYou may activate strict validation by passing true as the second argument.\n\n```javascript\nnormalizeData = require('normalize-package-data')\npackageData = fs.readfileSync(\"package.json\")\nwarnFn = function(msg) { console.error(msg) }\nnormalizeData(packageData, true)\n// packageData is now normalized\n```\n\nIf strict mode is activated, only Semver 2.0 version strings are accepted. Otherwise, Semver 1.0 strings are accepted as well. Packages must have a name, and the name field must not have contain leading or trailing whitespace.\n\n#### Warnings\n\nOptionally, you may pass a \"warning\" function. It gets called whenever the `normalizeData` function encounters something that doesn't look right. It indicates less than perfect input data.\n\n```javascript\nnormalizeData = require('normalize-package-data')\npackageData = fs.readfileSync(\"package.json\")\nwarnFn = function(msg) { console.error(msg) }\nnormalizeData(packageData, warnFn)\n// packageData is now normalized. Any number of warnings may have been logged.\n```\n\nYou may combine strict validation with warnings by passing `true` as the second argument, and `warnFn` as third.\n\nWhen `private` field is set to `true`, warnings will be suppressed.\n\n### Potential exceptions\n\nIf the supplied data has an invalid name or version vield, `normalizeData` will throw an error. Depending on where you call `normalizeData`, you may want to catch these errors so can pass them to a callback.\n\n## What normalization (currently) entails\n\n* The value of `name` field gets trimmed (unless in strict mode).\n* The value of the `version` field gets cleaned by `semver.clean`. See [documentation for the semver module](https://github.com/isaacs/node-semver).\n* If `name` and/or `version` fields are missing, they are set to empty strings.\n* If `files` field is not an array, it will be removed.\n* If `bin` field is a string, then `bin` field will become an object with `name` set to the value of the `name` field, and `bin` set to the original string value.\n* If `man` field is a string, it will become an array with the original string as its sole member.\n* If `keywords` field is string, it is considered to be a list of keywords separated by one or more white-space characters. It gets converted to an array by splitting on `\\s+`.\n* All people fields (`author`, `maintainers`, `contributors`) get converted into objects with name, email and url properties.\n* If `bundledDependencies` field (a typo) exists and `bundleDependencies` field does not, `bundledDependencies` will get renamed to `bundleDependencies`.\n* If the value of any of the dependencies fields (`dependencies`, `devDependencies`, `optionalDependencies`) is a string, it gets converted into an object with familiar `name=>value` pairs.\n* The values in `optionalDependencies` get added to `dependencies`. The `optionalDependencies` array is left untouched.\n* If `description` field does not exists, but `readme` field does, then (more or less) the first paragraph of text that's found in the readme is taken as value for `description`.\n* If `repository` field is a string, it will become an object with `url` set to the original string value, and `type` set to `\"git\"`.\n* If `repository.url` is not a valid url, but in the style of \"[owner-name]/[repo-name]\", `repository.url` will be set to git://github.com/[owner-name]/[repo-name]\n* If `bugs` field is a string, the value of `bugs` field is changed into an object with `url` set to the original string value.\n* If `bugs` field does not exist, but `repository` field points to a repository hosted on GitHub, the value of the `bugs` field gets set to an url in the form of https://github.com/[owner-name]/[repo-name]/issues . If the repository field points to a GitHub Gist repo url, the associated http url is chosen.\n* If `bugs` field is an object, the resulting value only has email and url properties. If email and url properties are not strings, they are ignored. If no valid values for either email or url is found, bugs field will be removed.\n* If `homepage` field is not a string, it will be removed.\n* If the url in the `homepage` field does not specify a protocol, then http is assumed. For example, `myproject.org` will be changed to `http://myproject.org`.\n* If `homepage` field does not exist, but `repository` field points to a repository hosted on GitHub, the value of the `homepage` field gets set to an url in the form of https://github.com/[owner-name]/[repo-name]/ . If the repository field points to a GitHub Gist repo url, the associated http url is chosen.\n\n### Rules for name field\n\nIf `name` field is given, the value of the name field must be a string. The string may not:\n\n* start with a period.\n* contain the following characters: `/@\\s+%`\n* contain and characters that would need to be encoded for use in urls.\n* resemble the word `node_modules` or `favicon.ico` (case doesn't matter).\n\n### Rules for version field\n\nIf `version` field is given, the value of the version field must be a valid *semver* string, as determined by the `semver.valid` method. See [documentation for the semver module](https://github.com/isaacs/node-semver).\n\n## Credits\n\nThis package contains code based on read-package-json written by Isaac Z. Schlueter. Used with permisson.\n\n## License\n\nnormalize-package-data is released under the [BSD 2-Clause License](http://opensource.org/licenses/MIT). \nCopyright (c) 2013 Meryn Stol ",
"readmeFilename": "README.md",
"bugs": {
"url": "https://github.com/meryn/normalize-package-data/issues"
},
- "_id": "normalize-package-data@0.1.6",
- "_from": "normalize-package-data@~0.1.2"
+ "homepage": "https://github.com/meryn/normalize-package-data",
+ "_id": "normalize-package-data@0.2.13",
+ "_shasum": "50f9fd9e77b1c8411cd231db2962e73963de774d",
+ "_from": "normalize-package-data@^0.2.13"
}
diff --git a/deps/npm/node_modules/read-package-json/node_modules/normalize-package-data/test/consistency.js b/deps/npm/node_modules/read-package-json/node_modules/normalize-package-data/test/consistency.js
index 8ae6b2730..4082be25c 100644
--- a/deps/npm/node_modules/read-package-json/node_modules/normalize-package-data/test/consistency.js
+++ b/deps/npm/node_modules/read-package-json/node_modules/normalize-package-data/test/consistency.js
@@ -24,7 +24,7 @@ tap.test("consistent normalization", function(t) {
clonedData = _.clone(data)
normalize(data, warn)
t.deepEqual(clonedData, data,
- "Normalization of " + entryName + "is consistent.")
+ "Normalization of " + entryName + " is consistent.")
next(null)
}) // fs.readFile
} // verifyConsistency
diff --git a/deps/npm/node_modules/read-package-json/node_modules/normalize-package-data/test/dependencies.js b/deps/npm/node_modules/read-package-json/node_modules/normalize-package-data/test/dependencies.js
new file mode 100644
index 000000000..dda24dc4f
--- /dev/null
+++ b/deps/npm/node_modules/read-package-json/node_modules/normalize-package-data/test/dependencies.js
@@ -0,0 +1,43 @@
+var tap = require("tap")
+var normalize = require("../lib/normalize")
+
+var warningMessages = require("../lib/warning_messages.json")
+var safeFormat = require("../lib/safe_format")
+
+tap.test("warn if dependency contains anything else but a string", function(t) {
+ var a
+ var warnings = []
+ function warn(w) {
+ warnings.push(w)
+ }
+ normalize(a={
+ dependencies: { "a": 123},
+ devDependencies: { "b": 456},
+ optionalDependencies: { "c": 789}
+ }, warn)
+
+ var wanted1 = safeFormat(warningMessages.nonStringDependency, "a", 123)
+ var wanted2 = safeFormat(warningMessages.nonStringDependency, "b", 456)
+ var wanted3 = safeFormat(warningMessages.nonStringDependency, "c", 789)
+ t.ok(~warnings.indexOf(wanted1), wanted1)
+ t.ok(~warnings.indexOf(wanted2), wanted2)
+ t.ok(~warnings.indexOf(wanted3), wanted3)
+ t.end()
+})
+
+tap.test("warn if bundleDependencies array contains anything else but strings", function(t) {
+ var a
+ var warnings = []
+ function warn(w) {
+ warnings.push(w)
+ }
+ normalize(a={
+ bundleDependencies: ["abc", 123, {foo:"bar"}]
+ }, warn)
+
+ var wanted1 = safeFormat(warningMessages.nonStringBundleDependency, 123)
+ var wanted2 = safeFormat(warningMessages.nonStringBundleDependency, {foo:"bar"})
+ t.ok(~warnings.indexOf(wanted1), wanted1)
+ t.ok(~warnings.indexOf(wanted2), wanted2)
+ t.end()
+}) \ No newline at end of file
diff --git a/deps/npm/node_modules/read-package-json/node_modules/normalize-package-data/test/fixtures/no-description.json b/deps/npm/node_modules/read-package-json/node_modules/normalize-package-data/test/fixtures/no-description.json
new file mode 100644
index 000000000..9ea70b6bf
--- /dev/null
+++ b/deps/npm/node_modules/read-package-json/node_modules/normalize-package-data/test/fixtures/no-description.json
@@ -0,0 +1,4 @@
+{
+ "name": "foo-bar-package",
+ "version": "0.0.1"
+} \ No newline at end of file
diff --git a/deps/npm/node_modules/read-package-json/node_modules/normalize-package-data/test/normalize.js b/deps/npm/node_modules/read-package-json/node_modules/normalize-package-data/test/normalize.js
index b015a6a49..dd26c5d01 100644
--- a/deps/npm/node_modules/read-package-json/node_modules/normalize-package-data/test/normalize.js
+++ b/deps/npm/node_modules/read-package-json/node_modules/normalize-package-data/test/normalize.js
@@ -5,6 +5,8 @@ var path = require("path")
var globals = Object.keys(global)
var normalize = require("../lib/normalize")
+var warningMessages = require("../lib/warning_messages.json")
+var safeFormat = require("../lib/safe_format")
var rpjPath = path.resolve(__dirname,"./fixtures/read-package-json.json")
tap.test("normalize some package data", function(t) {
@@ -47,7 +49,35 @@ tap.test("empty object", function(t) {
}
normalize(packageData, warn)
t.same(packageData, expect)
- t.same(warnings, ["No repository field.","No readme data."])
+ t.same(warnings, [
+ warningMessages.missingDescription,
+ warningMessages.missingRepository,
+ warningMessages.missingReadme
+ ])
+ t.end()
+})
+
+tap.test("core module name", function(t) {
+ var warnings = []
+ function warn(m) {
+ warnings.push(m)
+ }
+ var a
+ normalize(a={
+ name: "http",
+ readme: "read yourself how about",
+ homepage: 123,
+ bugs: "what is this i don't even",
+ repository: "Hello."
+ }, warn)
+
+ var expect = [
+ safeFormat(warningMessages.conflictingName, 'http'),
+ warningMessages.nonEmailUrlBugsString,
+ warningMessages.emptyNormalizedBugs,
+ warningMessages.nonUrlHomepage
+ ]
+ t.same(warnings, expect)
t.end()
})
@@ -65,7 +95,7 @@ tap.test("urls required", function(t) {
var a
normalize(a={
readme: "read yourself how about",
- homepage: "stragle planarf",
+ homepage: 123,
bugs: "what is this i don't even",
repository: "Hello."
}, warn)
@@ -73,15 +103,38 @@ tap.test("urls required", function(t) {
console.error(a)
var expect =
- [ 'No repository field.',
- 'No readme data.',
- 'bugs.url field must be a string url. Deleted.',
- 'bugs.email field must be a string email. Deleted.',
- 'Normalized value of bugs field is an empty object. Deleted.',
- 'Bug string field must be url, email, or {email,url}',
- 'Normalized value of bugs field is an empty object. Deleted.',
- 'homepage field must be a string url. Deleted.' ]
+ [ warningMessages.missingDescription,
+ warningMessages.missingRepository,
+ warningMessages.nonUrlBugsUrlField,
+ warningMessages.nonEmailBugsEmailField,
+ warningMessages.emptyNormalizedBugs,
+ warningMessages.missingReadme,
+ warningMessages.nonEmailUrlBugsString,
+ warningMessages.emptyNormalizedBugs,
+ warningMessages.nonUrlHomepage ]
+ t.same(warnings, expect)
+ t.end()
+})
+
+tap.test("homepage field must start with a protocol.", function(t) {
+ var warnings = []
+ function warn(w) {
+ warnings.push(w)
+ }
+ var a
+ normalize(a={
+ homepage: 'example.org'
+ }, warn)
+
+ console.error(a)
+
+ var expect =
+ [ warningMessages.missingDescription,
+ warningMessages.missingRepository,
+ warningMessages.missingReadme,
+ warningMessages.missingProtocolHomepage ]
t.same(warnings, expect)
+ t.same(a.homepage, 'http://example.org')
t.end()
})
@@ -95,14 +148,79 @@ tap.test("gist bugs url", function(t) {
t.end();
});
-tap.test('no new globals', function(t) {
- t.same(Object.keys(global), globals)
+tap.test("singularize repositories", function(t) {
+ var d = {repositories:["git@gist.github.com:123456.git"]}
+ normalize(d)
+ t.same(d.repository, { type: 'git', url: 'git@gist.github.com:123456.git' })
+ t.end()
+});
+
+tap.test("treat visionmedia/express as github repo", function(t) {
+ var d = {repository: {type: "git", url: "visionmedia/express"}}
+ normalize(d)
+ t.same(d.repository, { type: "git", url: "git://github.com/visionmedia/express" })
+ t.end()
+});
+
+tap.test("treat isaacs/node-graceful-fs as github repo", function(t) {
+ var d = {repository: {type: "git", url: "isaacs/node-graceful-fs"}}
+ normalize(d)
+ t.same(d.repository, { type: "git", url: "git://github.com/isaacs/node-graceful-fs" })
+ t.end()
+});
+
+tap.test("homepage field will set to github url if repository is a github repo", function(t) {
+ var a
+ normalize(a={
+ repository: { type: "git", url: "git://github.com/isaacs/node-graceful-fs" }
+ })
+ t.same(a.homepage, 'https://github.com/isaacs/node-graceful-fs')
t.end()
})
-tap.test("singularize repositories", function(t) {
- d = {repositories:["git@gist.github.com:123456.git"]}
+tap.test("homepage field will set to github gist url if repository is a gist", function(t) {
+ var a
+ normalize(a={
+ repository: { type: "git", url: "git@gist.github.com:123456.git" }
+ })
+ t.same(a.homepage, 'https://gist.github.com/123456')
+ t.end()
+})
+
+tap.test("homepage field will set to github gist url if repository is a shorthand reference", function(t) {
+ var a
+ normalize(a={
+ repository: { type: "git", url: "sindresorhus/chalk" }
+ })
+ t.same(a.homepage, 'https://github.com/sindresorhus/chalk')
+ t.end()
+})
+
+tap.test("treat isaacs/node-graceful-fs as github repo in dependencies", function(t) {
+ var d = {dependencies: {"node-graceful-fs": "isaacs/node-graceful-fs"}}
normalize(d)
- t.same(d.repository, { type: 'git', url: 'git@gist.github.com:123456.git' })
+ t.same(d.dependencies, {"node-graceful-fs": "git://github.com/isaacs/node-graceful-fs" })
t.end()
-}); \ No newline at end of file
+});
+
+tap.test("deprecation warning for array in dependencies fields", function(t) {
+ var a
+ var warnings = []
+ function warn(w) {
+ warnings.push(w)
+ }
+ normalize(a={
+ dependencies: [],
+ devDependencies: [],
+ optionalDependencies: []
+ }, warn)
+ t.ok(~warnings.indexOf(safeFormat(warningMessages.deprecatedArrayDependencies, 'dependencies')), "deprecation warning")
+ t.ok(~warnings.indexOf(safeFormat(warningMessages.deprecatedArrayDependencies, 'devDependencies')), "deprecation warning")
+ t.ok(~warnings.indexOf(safeFormat(warningMessages.deprecatedArrayDependencies, 'optionalDependencies')), "deprecation warning")
+ t.end()
+})
+
+tap.test('no new globals', function(t) {
+ t.same(Object.keys(global), globals)
+ t.end()
+})
diff --git a/deps/npm/node_modules/read-package-json/node_modules/normalize-package-data/test/strict.js b/deps/npm/node_modules/read-package-json/node_modules/normalize-package-data/test/strict.js
new file mode 100644
index 000000000..40e09dcf2
--- /dev/null
+++ b/deps/npm/node_modules/read-package-json/node_modules/normalize-package-data/test/strict.js
@@ -0,0 +1,54 @@
+var test = require("tap").test
+
+var normalize = require("../")
+
+test("strict", function(t) {
+ var threw
+
+ try {
+ threw = false
+ normalize({name: "X"}, true)
+ } catch (er) {
+ threw = true
+ t.equal(er.message, 'Invalid name: "X"')
+ } finally {
+ t.equal(threw, true)
+ }
+
+ try {
+ threw = false
+ normalize({name:" x "}, true)
+ } catch (er) {
+ threw = true
+ t.equal(er.message, 'Invalid name: " x "')
+ } finally {
+ t.equal(threw, true)
+ }
+
+ try {
+ threw = false
+ normalize({name:"x",version:"01.02.03"}, true)
+ } catch (er) {
+ threw = true
+ t.equal(er.message, 'Invalid version: "01.02.03"')
+ } finally {
+ t.equal(threw, true)
+ }
+
+ // these should not throw
+ var slob = {name:" X ",version:"01.02.03",dependencies:{
+ y:">01.02.03",
+ z:"! 99 $$ASFJ(Aawenf90awenf as;naw.3j3qnraw || an elephant"
+ }}
+ normalize(slob, false)
+ t.same(slob,
+ { name: 'X',
+ version: '1.2.3',
+ dependencies:
+ { y: '>01.02.03',
+ z: '! 99 $$ASFJ(Aawenf90awenf as;naw.3j3qnraw || an elephant' },
+ readme: 'ERROR: No README data found!',
+ _id: 'X@1.2.3' })
+
+ t.end()
+})
diff --git a/deps/npm/node_modules/read-package-json/node_modules/normalize-package-data/test/typo.js b/deps/npm/node_modules/read-package-json/node_modules/normalize-package-data/test/typo.js
index d7d3af0e2..eda75545e 100644
--- a/deps/npm/node_modules/read-package-json/node_modules/normalize-package-data/test/typo.js
+++ b/deps/npm/node_modules/read-package-json/node_modules/normalize-package-data/test/typo.js
@@ -1,38 +1,38 @@
var test = require('tap').test
+
var normalize = require('../')
var typos = require('../lib/typos.json')
+var warningMessages = require("../lib/warning_messages.json")
+var safeFormat = require("../lib/safe_format")
test('typos', function(t) {
var warnings = []
function warn(m) {
warnings.push(m)
}
+
+ var typoMessage = safeFormat.bind(undefined, warningMessages.typo)
var expect =
- [ 'dependancies should probably be dependencies.',
- 'dependecies should probably be dependencies.',
- 'depdenencies should probably be dependencies.',
- 'devEependencies should probably be devDependencies.',
- 'depends should probably be dependencies.',
- 'dev-dependencies should probably be devDependencies.',
- 'devDependences should probably be devDependencies.',
- 'devDepenencies should probably be devDependencies.',
- 'devdependencies should probably be devDependencies.',
- 'repostitory should probably be repository.',
- 'prefereGlobal should probably be preferGlobal.',
- 'hompage should probably be homepage.',
- 'hampage should probably be homepage.',
- 'autohr should probably be author.',
- 'autor should probably be author.',
- 'contributers should probably be contributors.',
- 'publicationConfig should probably be publishConfig.',
- 'No repository field.',
- 'No repository field.',
- 'No readme data.',
- 'bugs.url field must be a string url. Deleted.',
- 'Normalized value of bugs field is an empty object. Deleted.',
- 'No repository field.',
- 'No readme data.' ]
+ [ warningMessages.missingRepository,
+ typoMessage('dependancies', 'dependencies'),
+ typoMessage('dependecies', 'dependencies'),
+ typoMessage('depdenencies', 'dependencies'),
+ typoMessage('devEependencies', 'devDependencies'),
+ typoMessage('depends', 'dependencies'),
+ typoMessage('dev-dependencies', 'devDependencies'),
+ typoMessage('devDependences', 'devDependencies'),
+ typoMessage('devDepenencies', 'devDependencies'),
+ typoMessage('devdependencies', 'devDependencies'),
+ typoMessage('repostitory', 'repository'),
+ typoMessage('repo', 'repository'),
+ typoMessage('prefereGlobal', 'preferGlobal'),
+ typoMessage('hompage', 'homepage'),
+ typoMessage('hampage', 'homepage'),
+ typoMessage('autohr', 'author'),
+ typoMessage('autor', 'author'),
+ typoMessage('contributers', 'contributors'),
+ typoMessage('publicationConfig', 'publishConfig') ]
normalize({"dependancies": "dependencies"
,"dependecies": "dependencies"
@@ -44,6 +44,7 @@ test('typos', function(t) {
,"devDepenencies": "devDependencies"
,"devdependencies": "devDependencies"
,"repostitory": "repository"
+ ,"repo": "repository"
,"prefereGlobal": "preferGlobal"
,"hompage": "homepage"
,"hampage": "homepage"
@@ -55,13 +56,60 @@ test('typos', function(t) {
,name:"name"
,version:"1.2.5"}, warn)
+ t.same(warnings, expect)
+
+ warnings.length = 0
+ var expect =
+ [ warningMessages.missingDescription,
+ warningMessages.missingRepository,
+ typoMessage("bugs['web']", "bugs['url']"),
+ typoMessage("bugs['name']", "bugs['url']"),
+ warningMessages.nonUrlBugsUrlField,
+ warningMessages.emptyNormalizedBugs,
+ warningMessages.missingReadme ]
+
normalize({name:"name"
,version:"1.2.5"
,bugs:{web:"url",name:"url"}}, warn)
+ t.same(warnings, expect)
+
+ warnings.length = 0
+ var expect =
+ [ warningMessages.missingDescription,
+ warningMessages.missingRepository,
+ warningMessages.missingReadme,
+ typoMessage('script', 'scripts') ]
+
normalize({name:"name"
,version:"1.2.5"
,script:{server:"start",tests:"test"}}, warn)
+
t.same(warnings, expect)
+
+ warnings.length = 0
+ expect =
+ [ warningMessages.missingDescription,
+ warningMessages.missingRepository,
+ typoMessage("scripts['server']", "scripts['start']"),
+ typoMessage("scripts['tests']", "scripts['test']"),
+ warningMessages.missingReadme ]
+
+ normalize({name:"name"
+ ,version:"1.2.5"
+ ,scripts:{server:"start",tests:"test"}}, warn)
+
+ t.same(warnings, expect)
+
+ warnings.length = 0
+ expect = []
+
+ normalize({private: true
+ ,name:"name"
+ ,version:"1.2.5"
+ ,scripts:{server:"start",tests:"test"}}, warn)
+
+ t.same(warnings, expect)
+
t.end();
})
diff --git a/deps/npm/node_modules/read-package-json/package.json b/deps/npm/node_modules/read-package-json/package.json
index 6a2796e0b..fdfe963f6 100644
--- a/deps/npm/node_modules/read-package-json/package.json
+++ b/deps/npm/node_modules/read-package-json/package.json
@@ -1,6 +1,6 @@
{
"name": "read-package-json",
- "version": "0.4.1",
+ "version": "1.1.9",
"author": {
"name": "Isaac Z. Schlueter",
"email": "i@izs.me",
@@ -18,22 +18,23 @@
"dependencies": {
"glob": "~3.2.1",
"lru-cache": "2",
- "normalize-package-data": "~0.1.2",
- "npmlog": "0",
- "graceful-fs": "~1.2"
+ "normalize-package-data": "^0.2.13",
+ "graceful-fs": "2"
},
"devDependencies": {
"tap": "~0.2.5"
},
"optionalDependencies": {
- "npmlog": "0",
- "graceful-fs": "~1.2"
+ "graceful-fs": "2"
},
- "readme": "# read-package-json\n\nThis is the thing that npm uses to read package.json files. It\nvalidates some stuff, and loads some default things.\n\nIt keeps a cache of the files you've read, so that you don't end\nup reading the same package.json file multiple times.\n\nNote that if you just want to see what's literally in the package.json\nfile, you can usually do `var data = require('some-module/package.json')`.\n\nThis module is basically only needed by npm, but it's handy to see what\nnpm will see when it looks at your package.\n\n## Usage\n\n```javascript\nvar readJson = require('read-package-json')\n\nreadJson('/path/to/package.json', function (er, data) {\n if (er) {\n console.error(\"There was an error reading the file\")\n return\n }\n\n console.error('the package data is', data)\n}\n```\n\n## readJson(file, cb)\n\n* `file` {String} The path to the package.json file\n* `cb` {Function}\n\nReads the JSON file and does the things.\n\n## `package.json` Fields\n\nSee `man 5 package.json` or `npm help json`.\n\n## readJson.log\n\nBy default this is a reference to the `npmlog` module. But if that\nmodule can't be found, then it'll be set to just a dummy thing that does\nnothing.\n\nReplace with your own `{log,warn,error}` object for fun loggy time.\n\n## readJson.extras(file, data, cb)\n\nRun all the extra stuff relative to the file, with the parsed data.\n\nModifies the data as it does stuff. Calls the cb when it's done.\n\n## readJson.extraSet = [fn, fn, ...]\n\nArray of functions that are called by `extras`. Each one receives the\narguments `fn(file, data, cb)` and is expected to call `cb(er, data)`\nwhen done or when an error occurs.\n\nOrder is indeterminate, so each function should be completely\nindependent.\n\nMix and match!\n\n## readJson.cache\n\nThe `lru-cache` object that readJson uses to not read the same file over\nand over again. See\n[lru-cache](https://github.com/isaacs/node-lru-cache) for details.\n\n## Other Relevant Files Besides `package.json`\n\nSome other files have an effect on the resulting data object, in the\nfollowing ways:\n\n### `README?(.*)`\n\nIf there is a `README` or `README.*` file present, then npm will attach\na `readme` field to the data with the contents of this file.\n\nOwing to the fact that roughly 100% of existing node modules have\nMarkdown README files, it will generally be assumed to be Markdown,\nregardless of the extension. Please plan accordingly.\n\n### `server.js`\n\nIf there is a `server.js` file, and there is not already a\n`scripts.start` field, then `scripts.start` will be set to `node\nserver.js`.\n\n### `AUTHORS`\n\nIf there is not already a `contributors` field, then the `contributors`\nfield will be set to the contents of the `AUTHORS` file, split by lines,\nand parsed.\n\n### `bindings.gyp`\n\nIf a bindings.gyp file exists, and there is not already a\n`scripts.install` field, then the `scripts.install` field will be set to\n`node-gyp rebuild`.\n\n### `wscript`\n\nIf a wscript file exists, and there is not already a `scripts.install`\nfield, then the `scripts.install` field will be set to `node-waf clean ;\nnode-waf configure build`.\n\nNote that the `bindings.gyp` file supercedes this, since node-waf has\nbeen deprecated in favor of node-gyp.\n\n### `index.js`\n\nIf the json file does not exist, but there is a `index.js` file\npresent instead, and that file has a package comment, then it will try\nto parse the package comment, and use that as the data instead.\n\nA package comment looks like this:\n\n```javascript\n/**package\n * { \"name\": \"my-bare-module\"\n * , \"version\": \"1.2.3\"\n * , \"description\": \"etc....\" }\n **/\n\n// or...\n\n/**package\n{ \"name\": \"my-bare-module\"\n, \"version\": \"1.2.3\"\n, \"description\": \"etc....\" }\n**/\n```\n\nThe important thing is that it starts with `/**package`, and ends with\n`**/`. If the package.json file exists, then the index.js is not\nparsed.\n\n### `{directories.man}/*.[0-9]`\n\nIf there is not already a `man` field defined as an array of files or a\nsingle file, and\nthere is a `directories.man` field defined, then that directory will\nbe searched for manpages.\n\nAny valid manpages found in that directory will be assigned to the `man`\narray, and installed in the appropriate man directory at package install\ntime, when installed globally on a Unix system.\n\n### `{directories.bin}/*`\n\nIf there is not already a `bin` field defined as a string filename or a\nhash of `<name> : <filename>` pairs, then the `directories.bin`\ndirectory will be searched and all the files within it will be linked as\nexecutables at install time.\n\nWhen installing locally, npm links bins into `node_modules/.bin`, which\nis in the `PATH` environ when npm runs scripts. When\ninstalling globally, they are linked into `{prefix}/bin`, which is\npresumably in the `PATH` environment variable.\n",
+ "license": "ISC",
+ "readme": "# read-package-json\n\nThis is the thing that npm uses to read package.json files. It\nvalidates some stuff, and loads some default things.\n\nIt keeps a cache of the files you've read, so that you don't end\nup reading the same package.json file multiple times.\n\nNote that if you just want to see what's literally in the package.json\nfile, you can usually do `var data = require('some-module/package.json')`.\n\nThis module is basically only needed by npm, but it's handy to see what\nnpm will see when it looks at your package.\n\n## Usage\n\n```javascript\nvar readJson = require('read-package-json')\n\n// readJson(filename, [logFunction=noop], [strict=false], cb)\nreadJson('/path/to/package.json', console.error, false, function (er, data) {\n if (er) {\n console.error(\"There was an error reading the file\")\n return\n }\n\n console.error('the package data is', data)\n});\n```\n\n## readJson(file, [logFn = noop], [strict = false], cb)\n\n* `file` {String} The path to the package.json file\n* `logFn` {Function} Function to handle logging. Defaults to a noop.\n* `strict` {Boolean} True to enforce SemVer 2.0 version strings, and\n other strict requirements.\n* `cb` {Function} Gets called with `(er, data)`, as is The Node Way.\n\nReads the JSON file and does the things.\n\n## `package.json` Fields\n\nSee `man 5 package.json` or `npm help json`.\n\n## readJson.log\n\nBy default this is a reference to the `npmlog` module. But if that\nmodule can't be found, then it'll be set to just a dummy thing that does\nnothing.\n\nReplace with your own `{log,warn,error}` object for fun loggy time.\n\n## readJson.extras(file, data, cb)\n\nRun all the extra stuff relative to the file, with the parsed data.\n\nModifies the data as it does stuff. Calls the cb when it's done.\n\n## readJson.extraSet = [fn, fn, ...]\n\nArray of functions that are called by `extras`. Each one receives the\narguments `fn(file, data, cb)` and is expected to call `cb(er, data)`\nwhen done or when an error occurs.\n\nOrder is indeterminate, so each function should be completely\nindependent.\n\nMix and match!\n\n## readJson.cache\n\nThe `lru-cache` object that readJson uses to not read the same file over\nand over again. See\n[lru-cache](https://github.com/isaacs/node-lru-cache) for details.\n\n## Other Relevant Files Besides `package.json`\n\nSome other files have an effect on the resulting data object, in the\nfollowing ways:\n\n### `README?(.*)`\n\nIf there is a `README` or `README.*` file present, then npm will attach\na `readme` field to the data with the contents of this file.\n\nOwing to the fact that roughly 100% of existing node modules have\nMarkdown README files, it will generally be assumed to be Markdown,\nregardless of the extension. Please plan accordingly.\n\n### `server.js`\n\nIf there is a `server.js` file, and there is not already a\n`scripts.start` field, then `scripts.start` will be set to `node\nserver.js`.\n\n### `AUTHORS`\n\nIf there is not already a `contributors` field, then the `contributors`\nfield will be set to the contents of the `AUTHORS` file, split by lines,\nand parsed.\n\n### `bindings.gyp`\n\nIf a bindings.gyp file exists, and there is not already a\n`scripts.install` field, then the `scripts.install` field will be set to\n`node-gyp rebuild`.\n\n### `wscript`\n\nIf a wscript file exists, and there is not already a `scripts.install`\nfield, then the `scripts.install` field will be set to `node-waf clean ;\nnode-waf configure build`.\n\nNote that the `bindings.gyp` file supercedes this, since node-waf has\nbeen deprecated in favor of node-gyp.\n\n### `index.js`\n\nIf the json file does not exist, but there is a `index.js` file\npresent instead, and that file has a package comment, then it will try\nto parse the package comment, and use that as the data instead.\n\nA package comment looks like this:\n\n```javascript\n/**package\n * { \"name\": \"my-bare-module\"\n * , \"version\": \"1.2.3\"\n * , \"description\": \"etc....\" }\n **/\n\n// or...\n\n/**package\n{ \"name\": \"my-bare-module\"\n, \"version\": \"1.2.3\"\n, \"description\": \"etc....\" }\n**/\n```\n\nThe important thing is that it starts with `/**package`, and ends with\n`**/`. If the package.json file exists, then the index.js is not\nparsed.\n\n### `{directories.man}/*.[0-9]`\n\nIf there is not already a `man` field defined as an array of files or a\nsingle file, and\nthere is a `directories.man` field defined, then that directory will\nbe searched for manpages.\n\nAny valid manpages found in that directory will be assigned to the `man`\narray, and installed in the appropriate man directory at package install\ntime, when installed globally on a Unix system.\n\n### `{directories.bin}/*`\n\nIf there is not already a `bin` field defined as a string filename or a\nhash of `<name> : <filename>` pairs, then the `directories.bin`\ndirectory will be searched and all the files within it will be linked as\nexecutables at install time.\n\nWhen installing locally, npm links bins into `node_modules/.bin`, which\nis in the `PATH` environ when npm runs scripts. When\ninstalling globally, they are linked into `{prefix}/bin`, which is\npresumably in the `PATH` environment variable.\n",
"readmeFilename": "README.md",
"bugs": {
"url": "https://github.com/isaacs/read-package-json/issues"
},
- "_id": "read-package-json@0.4.1",
- "_from": "read-package-json@~0.4.1"
+ "homepage": "https://github.com/isaacs/read-package-json",
+ "_id": "read-package-json@1.1.9",
+ "_shasum": "9c319185e5f8461661c01f8d4e5e80b468aa18ee",
+ "_from": "read-package-json@latest"
}
diff --git a/deps/npm/node_modules/read-package-json/read-json.js b/deps/npm/node_modules/read-package-json/read-json.js
index acb128680..acb7d62d8 100644
--- a/deps/npm/node_modules/read-package-json/read-json.js
+++ b/deps/npm/node_modules/read-package-json/read-json.js
@@ -1,17 +1,6 @@
// vim: set softtabstop=16 shiftwidth=16:
try {
- readJson.log = require("npmlog")
-} catch (er) {
- readJson.log = {
- info: function () {},
- verbose: function () {},
- warn: function () {}
- }
-}
-
-
-try {
var fs = require("graceful-fs")
} catch (er) {
var fs = require("fs")
@@ -30,6 +19,7 @@ var normalizeData = require("normalize-package-data")
readJson.extraSet = [
gypfile,
serverjs,
+ scriptpath,
authors,
readme,
mans,
@@ -40,25 +30,33 @@ readJson.extraSet = [
var typoWarned = {}
-function readJson (file, cb) {
+function readJson (file, log_, strict_, cb_) {
+ var log, strict, cb
+ for (var i = 1; i < arguments.length - 1; i++) {
+ if (typeof arguments[i] === 'boolean')
+ strict = arguments[i]
+ else if (typeof arguments[i] === 'function')
+ log = arguments[i]
+ }
+ if (!log) log = function () {};
+ cb = arguments[ arguments.length - 1 ]
+
var c = readJson.cache.get(file)
if (c) {
- readJson.log.verbose("from cache", file)
cb = cb.bind(null, null, c)
return process.nextTick(cb);
}
- readJson.log.verbose("read json", file)
cb = (function (orig) { return function (er, data) {
if (data) readJson.cache.set(file, data);
return orig(er, data)
} })(cb)
- readJson_(file, cb)
+ readJson_(file, log, strict, cb)
}
-function readJson_ (file, cb) {
+function readJson_ (file, log, strict, cb) {
fs.readFile(file, "utf8", function (er, d) {
- parseJson(file, er, d, cb)
+ parseJson(file, er, d, log, strict, cb)
})
}
@@ -74,9 +72,9 @@ function stripBOM(content) {
}
-function parseJson (file, er, d, cb) {
+function parseJson (file, er, d, log, strict, cb) {
if (er && er.code === "ENOENT") {
- indexjs(file, er, cb)
+ indexjs(file, er, log, strict, cb)
return
}
if (er) return cb(er);
@@ -86,11 +84,11 @@ function parseJson (file, er, d, cb) {
d = parseIndex(d)
if (!d) return cb(parseError(er, file));
}
- extras(file, d, cb)
+ extras(file, d, log, strict, cb)
}
-function indexjs (file, er, cb) {
+function indexjs (file, er, log, strict, cb) {
if (path.basename(file) === "index.js") {
return cb(er);
}
@@ -99,13 +97,22 @@ function indexjs (file, er, cb) {
if (er2) return cb(er);
d = parseIndex(d)
if (!d) return cb(er);
- extras(file, d, cb)
+ extras(file, d, log, strict, cb)
})
}
readJson.extras = extras
-function extras (file, data, cb) {
+function extras (file, data, log_, strict_, cb_) {
+ var log, strict, cb
+ for (var i = 2; i < arguments.length - 1; i++) {
+ if (typeof arguments[i] === 'boolean')
+ strict = arguments[i]
+ else if (typeof arguments[i] === 'function')
+ log = arguments[i]
+ }
+ if (!log) log = function () {};
+ cb = arguments[i]
var set = readJson.extraSet
var n = set.length
var errState = null
@@ -115,10 +122,27 @@ function extras (file, data, cb) {
function then(er) {
if (errState) return;
if (er) return cb(errState = er);
- if (--n === 0) final(file, data, cb);
+ if (--n > 0) return;
+ final(file, data, log, strict, cb);
}
}
+function scriptpath (file, data, cb) {
+ if (!data.scripts) return cb(null, data);
+ var k = Object.keys(data.scripts)
+ k.forEach(scriptpath_, data.scripts)
+ cb(null, data);
+}
+function scriptpath_(key) {
+ s = this[key]
+ // This is never allowed, and only causes problems
+ if (typeof s !== 'string')
+ return delete this[key]
+ var spre = /^(\.[\/\\])?node_modules[\/\\].bin[\\\/]/
+ if (s.match(spre))
+ this[key] = this[key].replace(spre, '')
+}
+
function gypfile (file, data, cb) {
var dir = path.dirname(file)
var s = data.scripts || {}
@@ -207,17 +231,31 @@ function readme (file, data, cb) {
if (data.readme) return cb(null, data);
var dir = path.dirname(file)
var globOpts = { cwd: dir, nocase: true, mark: true }
- glob("README?(.*)", globOpts, function (er, files) {
+ glob("{README,README.*}", globOpts, function (er, files) {
if (er) return cb(er);
// don't accept directories.
files = files.filter(function (file) {
return !file.match(/\/$/)
})
if (!files.length) return cb();
- var rm = path.resolve(dir, files[0])
+ var fn = preferMarkdownReadme(files)
+ var rm = path.resolve(dir, fn)
readme_(file, data, rm, cb)
})
}
+function preferMarkdownReadme(files) {
+ var fallback = 0;
+ var re = /\.m?a?r?k?d?o?w?n?$/i
+ for (var i = 0; i < files.length; i++) {
+ if (files[i].match(re))
+ return files[i]
+ else if (files[i].match(/README$/))
+ fallback = i
+ }
+ // prefer README.md, followed by README; otherwise, return
+ // the first filename (which could be README)
+ return files[fallback];
+}
function readme_(file, data, rm, cb) {
var rmfn = path.basename(rm);
fs.readFile(rm, "utf8", function (er, rm) {
@@ -294,14 +332,14 @@ function githead_ (file, data, dir, head, cb) {
})
}
-function final (file, data, cb) {
+function final (file, data, log, strict, cb) {
var pId = makePackageId(data)
function warn(msg) {
if (typoWarned[pId]) return;
- readJson.log.warn("package.json", pId, msg)
+ if (log) log("package.json", pId, msg);
}
try {
- normalizeData(data, warn)
+ normalizeData(data, warn, strict)
}
catch (error) {
return cb(error)
@@ -312,9 +350,10 @@ function final (file, data, cb) {
}
function makePackageId (data) {
- return cleanString(data.name) + "@" + cleanString(data.version)
+ var name = cleanString(data.name)
+ var ver = cleanString(data.version)
+ return name + "@" + ver
}
-
function cleanString(str) {
return (!str || typeof(str) !== "string") ? "" : str.trim()
}
diff --git a/deps/npm/node_modules/read-package-json/test/fixtures/not-json.css b/deps/npm/node_modules/read-package-json/test/fixtures/not-json.css
index 37163912d..41c91e96a 100644
--- a/deps/npm/node_modules/read-package-json/test/fixtures/not-json.css
+++ b/deps/npm/node_modules/read-package-json/test/fixtures/not-json.css
@@ -14,7 +14,7 @@ body {
},
"main": "read-json.js",
"scripts": {
- "test": "tap test/*.js"
+ "test": "./node_modules/.bin/tap test/*.js"
},
"dependencies": {
"glob": "~3.1.9",
diff --git a/deps/npm/node_modules/read-package-json/test/fixtures/readmes/README b/deps/npm/node_modules/read-package-json/test/fixtures/readmes/README
new file mode 100644
index 000000000..257cc5642
--- /dev/null
+++ b/deps/npm/node_modules/read-package-json/test/fixtures/readmes/README
@@ -0,0 +1 @@
+foo
diff --git a/deps/npm/node_modules/read-package-json/test/fixtures/readmes/README.md b/deps/npm/node_modules/read-package-json/test/fixtures/readmes/README.md
new file mode 100644
index 000000000..e444c2f0f
--- /dev/null
+++ b/deps/npm/node_modules/read-package-json/test/fixtures/readmes/README.md
@@ -0,0 +1 @@
+*markdown*
diff --git a/deps/npm/node_modules/read-package-json/test/fixtures/readmes/package.json b/deps/npm/node_modules/read-package-json/test/fixtures/readmes/package.json
new file mode 100644
index 000000000..b0c1a318a
--- /dev/null
+++ b/deps/npm/node_modules/read-package-json/test/fixtures/readmes/package.json
@@ -0,0 +1 @@
+{"name":"readmes", "version":"99.999.999999999"}
diff --git a/deps/npm/node_modules/read-package-json/test/fixtures/readmes/readmexxx.yz b/deps/npm/node_modules/read-package-json/test/fixtures/readmes/readmexxx.yz
new file mode 100644
index 000000000..662da9128
--- /dev/null
+++ b/deps/npm/node_modules/read-package-json/test/fixtures/readmes/readmexxx.yz
@@ -0,0 +1 @@
+extra noise
diff --git a/deps/npm/node_modules/read-package-json/test/non-json.js b/deps/npm/node_modules/read-package-json/test/non-json.js
index 09ee687d5..e8d989b6f 100644
--- a/deps/npm/node_modules/read-package-json/test/non-json.js
+++ b/deps/npm/node_modules/read-package-json/test/non-json.js
@@ -25,7 +25,8 @@ var expect =
npmlog: '0',
'graceful-fs': '~1.1.8' },
devDependencies: { tap: '~0.2.5' },
- optionalDependencies: { npmlog: '0', 'graceful-fs': '~1.1.8' },
+ homepage: "https://github.com/isaacs/read-package-json",
+ optionalDependencies: { npmlog: '0', 'graceful-fs': '~1.1.8' },
_id: 'read-package-json@0.1.1',
readme: 'ERROR: No README data found!' }
diff --git a/deps/npm/node_modules/read-package-json/test/readmes.js b/deps/npm/node_modules/read-package-json/test/readmes.js
new file mode 100644
index 000000000..1c1cee1b3
--- /dev/null
+++ b/deps/npm/node_modules/read-package-json/test/readmes.js
@@ -0,0 +1,29 @@
+// vim: set softtabstop=16 shiftwidth=16:
+var tap = require("tap")
+var readJson = require("../")
+var path = require("path")
+var fs = require("fs")
+var p = path.resolve(__dirname, "fixtures/readmes/package.json")
+
+var expect = {}
+var expect = {
+ "name" : "readmes",
+ "version" : "99.999.999999999",
+ "readme" : "*markdown*\n",
+ "readmeFilename" : "README.md",
+ "description" : "*markdown*",
+ "_id" : "readmes@99.999.999999999"
+}
+
+console.error("readme test")
+tap.test("readme test", function (t) {
+ readJson(p, function (er, data) {
+ if (er) throw er;
+ test(t, data)
+ })
+})
+
+function test(t, data) {
+ t.deepEqual(data, expect)
+ t.end()
+}
diff --git a/deps/npm/node_modules/read/README.md b/deps/npm/node_modules/read/README.md
index 2edefdf47..5967fad11 100644
--- a/deps/npm/node_modules/read/README.md
+++ b/deps/npm/node_modules/read/README.md
@@ -27,8 +27,8 @@ Every option is optional.
* `default` The default value if the user enters nothing.
* `edit` Allow the user to edit the default value.
* `terminal` Treat the output as a TTY, whether it is or not.
-* `stdin` Readable stream to get input data from. (default `process.stdin`)
-* `stdout` Writeable stream to write prompts to. (default: `process.stdout`)
+* `input` Readable stream to get input data from. (default `process.stdin`)
+* `output` Writeable stream to write prompts to. (default: `process.stdout`)
If silent is true, and the input is a TTY, then read will set raw
mode, and read character by character.
diff --git a/deps/npm/node_modules/read/lib/read.js b/deps/npm/node_modules/read/lib/read.js
index 4b8a422d9..a93d1b3b5 100644
--- a/deps/npm/node_modules/read/lib/read.js
+++ b/deps/npm/node_modules/read/lib/read.js
@@ -17,24 +17,12 @@ function read (opts, cb) {
var input = opts.input || process.stdin
var output = opts.output || process.stdout
- var m = new Mute({ replace: opts.replace })
- m.pipe(output, {end: false})
- output = m
- var def = opts.default || ''
- var terminal = !!(opts.terminal || output.isTTY)
- var rlOpts = { input: input, output: output, terminal: terminal }
-
- if (process.version.match(/^v0\.6/)) {
- var rl = readline.createInterface(rlOpts.input, rlOpts.output)
- } else {
- var rl = readline.createInterface(rlOpts)
- }
-
var prompt = (opts.prompt || '').trim() + ' '
var silent = opts.silent
var editDef = false
var timeout = opts.timeout
+ var def = opts.default || ''
if (def) {
if (silent) {
prompt += '(<default hidden>) '
@@ -44,6 +32,19 @@ function read (opts, cb) {
prompt += '(' + def + ') '
}
}
+ var terminal = !!(opts.terminal || output.isTTY)
+
+ var m = new Mute({ replace: opts.replace, prompt: prompt })
+ m.pipe(output, {end: false})
+ output = m
+ var rlOpts = { input: input, output: output, terminal: terminal }
+
+ if (process.version.match(/^v0\.6/)) {
+ var rl = readline.createInterface(rlOpts.input, rlOpts.output)
+ } else {
+ var rl = readline.createInterface(rlOpts)
+ }
+
output.unmute()
rl.setPrompt(prompt)
diff --git a/deps/npm/node_modules/read/node_modules/mute-stream/README.md b/deps/npm/node_modules/read/node_modules/mute-stream/README.md
index 91b45c40c..8ab1238e4 100644
--- a/deps/npm/node_modules/read/node_modules/mute-stream/README.md
+++ b/deps/npm/node_modules/read/node_modules/mute-stream/README.md
@@ -42,6 +42,12 @@ All options are optional.
specified string when muted. (So you can show `****` instead of the
password, for example.)
+* `prompt` If you are using a replacement char, and also using a
+ prompt with a readline stream (as for a `Password: *****` input),
+ then specify what the prompt is so that backspace will work
+ properly. Otherwise, pressing backspace will overwrite the prompt
+ with the replacement character, which is weird.
+
## ms.mute()
Set `muted` to `true`. Turns `.write()` into a no-op.
diff --git a/deps/npm/node_modules/read/node_modules/mute-stream/mute.js b/deps/npm/node_modules/read/node_modules/mute-stream/mute.js
index 7746618a1..42eac31e1 100644
--- a/deps/npm/node_modules/read/node_modules/mute-stream/mute.js
+++ b/deps/npm/node_modules/read/node_modules/mute-stream/mute.js
@@ -11,6 +11,12 @@ function MuteStream (opts) {
this.muted = false
this.on('pipe', this._onpipe)
this.replace = opts.replace
+
+ // For readline-type situations
+ // This much at the start of a line being redrawn after a ctrl char
+ // is seen (such as backspace) won't be redrawn as the replacement
+ this._prompt = opts.prompt || null
+ this._hadControl = false
}
MuteStream.prototype = Object.create(Stream.prototype)
@@ -94,7 +100,18 @@ MuteStream.prototype.resume = function () {
MuteStream.prototype.write = function (c) {
if (this.muted) {
if (!this.replace) return true
- c = c.toString().replace(/./g, this.replace)
+ if (c.match(/^\u001b/)) {
+ this._hadControl = true
+ return this.emit('data', c)
+ } else {
+ if (this._prompt && this._hadControl &&
+ c.indexOf(this._prompt) === 0) {
+ this._hadControl = false
+ this.emit('data', this._prompt)
+ c = c.substr(this._prompt.length)
+ }
+ c = c.toString().replace(/./g, this.replace)
+ }
}
this.emit('data', c)
}
diff --git a/deps/npm/node_modules/read/node_modules/mute-stream/package.json b/deps/npm/node_modules/read/node_modules/mute-stream/package.json
index 629b5be67..5e699801f 100644
--- a/deps/npm/node_modules/read/node_modules/mute-stream/package.json
+++ b/deps/npm/node_modules/read/node_modules/mute-stream/package.json
@@ -1,6 +1,6 @@
{
"name": "mute-stream",
- "version": "0.0.3",
+ "version": "0.0.4",
"main": "mute.js",
"directories": {
"test": "test"
@@ -27,7 +27,11 @@
},
"license": "BSD",
"description": "Bytes go in, but they don't come out (when muted).",
- "readme": "# mute-stream\n\nBytes go in, but they don't come out (when muted).\n\nThis is a basic pass-through stream, but when muted, the bytes are\nsilently dropped, rather than being passed through.\n\n## Usage\n\n```javascript\nvar MuteStream = require('mute-stream')\n\nvar ms = new MuteStream(options)\n\nms.pipe(process.stdout)\nms.write('foo') // writes 'foo' to stdout\nms.mute()\nms.write('bar') // does not write 'bar'\nms.unmute()\nms.write('baz') // writes 'baz' to stdout\n\n// can also be used to mute incoming data\nvar ms = new MuteStream\ninput.pipe(ms)\n\nms.on('data', function (c) {\n console.log('data: ' + c)\n})\n\ninput.emit('data', 'foo') // logs 'foo'\nms.mute()\ninput.emit('data', 'bar') // does not log 'bar'\nms.unmute()\ninput.emit('data', 'baz') // logs 'baz'\n```\n\n## Options\n\nAll options are optional.\n\n* `replace` Set to a string to replace each character with the\n specified string when muted. (So you can show `****` instead of the\n password, for example.)\n\n## ms.mute()\n\nSet `muted` to `true`. Turns `.write()` into a no-op.\n\n## ms.unmute()\n\nSet `muted` to `false`\n\n## ms.isTTY\n\nTrue if the pipe destination is a TTY, or if the incoming pipe source is\na TTY.\n\n## Other stream methods...\n\nThe other standard readable and writable stream methods are all\navailable. The MuteStream object acts as a facade to its pipe source\nand destination.\n",
- "_id": "mute-stream@0.0.3",
- "_from": "mute-stream@~0.0.2"
+ "readme": "# mute-stream\n\nBytes go in, but they don't come out (when muted).\n\nThis is a basic pass-through stream, but when muted, the bytes are\nsilently dropped, rather than being passed through.\n\n## Usage\n\n```javascript\nvar MuteStream = require('mute-stream')\n\nvar ms = new MuteStream(options)\n\nms.pipe(process.stdout)\nms.write('foo') // writes 'foo' to stdout\nms.mute()\nms.write('bar') // does not write 'bar'\nms.unmute()\nms.write('baz') // writes 'baz' to stdout\n\n// can also be used to mute incoming data\nvar ms = new MuteStream\ninput.pipe(ms)\n\nms.on('data', function (c) {\n console.log('data: ' + c)\n})\n\ninput.emit('data', 'foo') // logs 'foo'\nms.mute()\ninput.emit('data', 'bar') // does not log 'bar'\nms.unmute()\ninput.emit('data', 'baz') // logs 'baz'\n```\n\n## Options\n\nAll options are optional.\n\n* `replace` Set to a string to replace each character with the\n specified string when muted. (So you can show `****` instead of the\n password, for example.)\n\n* `prompt` If you are using a replacement char, and also using a\n prompt with a readline stream (as for a `Password: *****` input),\n then specify what the prompt is so that backspace will work\n properly. Otherwise, pressing backspace will overwrite the prompt\n with the replacement character, which is weird.\n\n## ms.mute()\n\nSet `muted` to `true`. Turns `.write()` into a no-op.\n\n## ms.unmute()\n\nSet `muted` to `false`\n\n## ms.isTTY\n\nTrue if the pipe destination is a TTY, or if the incoming pipe source is\na TTY.\n\n## Other stream methods...\n\nThe other standard readable and writable stream methods are all\navailable. The MuteStream object acts as a facade to its pipe source\nand destination.\n",
+ "readmeFilename": "README.md",
+ "bugs": {
+ "url": "https://github.com/isaacs/mute-stream/issues"
+ },
+ "_id": "mute-stream@0.0.4",
+ "_from": "mute-stream@~0.0.4"
}
diff --git a/deps/npm/node_modules/read/node_modules/mute-stream/test/basic.js b/deps/npm/node_modules/read/node_modules/mute-stream/test/basic.js
index 2d1f6aed3..41f9e10c3 100644
--- a/deps/npm/node_modules/read/node_modules/mute-stream/test/basic.js
+++ b/deps/npm/node_modules/read/node_modules/mute-stream/test/basic.js
@@ -19,6 +19,7 @@ PassThrough.prototype = Object.create(Stream.prototype, {
write: {
value: function (c) {
this.emit('data', c)
+ return true
}
},
end: {
diff --git a/deps/npm/node_modules/read/package.json b/deps/npm/node_modules/read/package.json
index f76034e86..c5be57230 100644
--- a/deps/npm/node_modules/read/package.json
+++ b/deps/npm/node_modules/read/package.json
@@ -1,9 +1,9 @@
{
"name": "read",
- "version": "1.0.4",
+ "version": "1.0.5",
"main": "lib/read.js",
"dependencies": {
- "mute-stream": "~0.0.2"
+ "mute-stream": "~0.0.4"
},
"devDependencies": {
"tap": "*"
@@ -25,7 +25,11 @@
"scripts": {
"test": "tap test/*.js"
},
- "readme": "## read\n\nFor reading user input from stdin.\n\nSimilar to the `readline` builtin's `question()` method, but with a\nfew more features.\n\n## USAGE\n\n```javascript\nvar read = require(\"read\")\nread(options, callback)\n```\n\nThe callback gets called with either the user input, or the default\nspecified, or an error, as `callback(error, result, isDefault)`\nnode style.\n\n## OPTIONS\n\nEvery option is optional.\n\n* `prompt` What to write to stdout before reading input.\n* `silent` Don't echo the output as the user types it.\n* `replace` Replace silenced characters with the supplied character value.\n* `timeout` Number of ms to wait for user input before giving up.\n* `default` The default value if the user enters nothing.\n* `edit` Allow the user to edit the default value.\n* `terminal` Treat the output as a TTY, whether it is or not.\n* `stdin` Readable stream to get input data from. (default `process.stdin`)\n* `stdout` Writeable stream to write prompts to. (default: `process.stdout`)\n\nIf silent is true, and the input is a TTY, then read will set raw\nmode, and read character by character.\n\n## COMPATIBILITY\n\nThis module works sort of with node 0.6. It does not work with node\nversions less than 0.6. It is best on node 0.8.\n\nOn node version 0.6, it will remove all listeners on the input\nstream's `data` and `keypress` events, because the readline module did\nnot fully clean up after itself in that version of node, and did not\nmake it possible to clean up after it in a way that has no potential\nfor side effects.\n\nAdditionally, some of the readline options (like `terminal`) will not\nfunction in versions of node before 0.8, because they were not\nimplemented in the builtin readline module.\n\n## CONTRIBUTING\n\nPatches welcome.\n",
- "_id": "read@1.0.4",
- "_from": "read@~1.0.3"
+ "readme": "## read\n\nFor reading user input from stdin.\n\nSimilar to the `readline` builtin's `question()` method, but with a\nfew more features.\n\n## USAGE\n\n```javascript\nvar read = require(\"read\")\nread(options, callback)\n```\n\nThe callback gets called with either the user input, or the default\nspecified, or an error, as `callback(error, result, isDefault)`\nnode style.\n\n## OPTIONS\n\nEvery option is optional.\n\n* `prompt` What to write to stdout before reading input.\n* `silent` Don't echo the output as the user types it.\n* `replace` Replace silenced characters with the supplied character value.\n* `timeout` Number of ms to wait for user input before giving up.\n* `default` The default value if the user enters nothing.\n* `edit` Allow the user to edit the default value.\n* `terminal` Treat the output as a TTY, whether it is or not.\n* `input` Readable stream to get input data from. (default `process.stdin`)\n* `output` Writeable stream to write prompts to. (default: `process.stdout`)\n\nIf silent is true, and the input is a TTY, then read will set raw\nmode, and read character by character.\n\n## COMPATIBILITY\n\nThis module works sort of with node 0.6. It does not work with node\nversions less than 0.6. It is best on node 0.8.\n\nOn node version 0.6, it will remove all listeners on the input\nstream's `data` and `keypress` events, because the readline module did\nnot fully clean up after itself in that version of node, and did not\nmake it possible to clean up after it in a way that has no potential\nfor side effects.\n\nAdditionally, some of the readline options (like `terminal`) will not\nfunction in versions of node before 0.8, because they were not\nimplemented in the builtin readline module.\n\n## CONTRIBUTING\n\nPatches welcome.\n",
+ "readmeFilename": "README.md",
+ "bugs": {
+ "url": "https://github.com/isaacs/read/issues"
+ },
+ "_id": "read@1.0.5",
+ "_from": "read@latest"
}
diff --git a/deps/npm/node_modules/read/rs.js b/deps/npm/node_modules/read/rs.js
new file mode 100644
index 000000000..d9f7f48dd
--- /dev/null
+++ b/deps/npm/node_modules/read/rs.js
@@ -0,0 +1,4 @@
+var read = require('read');
+read({ silent: true, prompt: 'stars: ' }, function(er, data) {
+ console.log(er, data)
+})
diff --git a/deps/npm/node_modules/read/test/basic.js b/deps/npm/node_modules/read/test/basic.js
index f5324b4aa..f0926f3f2 100644
--- a/deps/npm/node_modules/read/test/basic.js
+++ b/deps/npm/node_modules/read/test/basic.js
@@ -52,6 +52,8 @@ function child () {
pass: pass,
verify: pass2,
passMatch: (pass === pass2)}))
+ if (process.stdin.unref)
+ process.stdin.unref()
})
})
})
diff --git a/deps/npm/node_modules/read/test/defaults.js b/deps/npm/node_modules/read/test/defaults.js
index f3335ac82..e3d2ac710 100644
--- a/deps/npm/node_modules/read/test/defaults.js
+++ b/deps/npm/node_modules/read/test/defaults.js
@@ -52,6 +52,8 @@ function child () {
pass: pass,
verify: pass2,
passMatch: (pass === pass2)}))
+ if (process.stdin.unref)
+ process.stdin.unref()
})
})
})
diff --git a/deps/npm/node_modules/read/test/many.js b/deps/npm/node_modules/read/test/many.js
index 2aaa586e4..6a2f87b86 100644
--- a/deps/npm/node_modules/read/test/many.js
+++ b/deps/npm/node_modules/read/test/many.js
@@ -32,6 +32,8 @@ function child () {
read({prompt:'18'}, function (er, r18) {if (er) throw er
console.log(r1, r2, r3, r4, r5, r6, r7, r8, r9, r10,
r11, r12, r13, r14, r15, r16, r17, r18)
+ if (process.stdin.unref)
+ process.stdin.unref()
})})})})})})})})})})})})})})})})})})
}
diff --git a/deps/npm/node_modules/request/.npmignore b/deps/npm/node_modules/request/.npmignore
new file mode 100644
index 000000000..80e59ef52
--- /dev/null
+++ b/deps/npm/node_modules/request/.npmignore
@@ -0,0 +1,2 @@
+tests
+node_modules
diff --git a/deps/npm/node_modules/request/.travis.yml b/deps/npm/node_modules/request/.travis.yml
new file mode 100644
index 000000000..0bce81526
--- /dev/null
+++ b/deps/npm/node_modules/request/.travis.yml
@@ -0,0 +1,12 @@
+language: node_js
+node_js:
+ - 0.8
+ - 0.10
+
+env:
+ - OPTIONALS=Y
+ - OPTIONALS=N
+
+install:
+ - if [[ "$OPTIONALS" == "Y" ]]; then npm install; fi
+ - if [[ "$OPTIONALS" == "N" ]]; then npm install --no-optional; fi
diff --git a/deps/npm/node_modules/request/README.md b/deps/npm/node_modules/request/README.md
index eca6a5ab3..b05695d2c 100644
--- a/deps/npm/node_modules/request/README.md
+++ b/deps/npm/node_modules/request/README.md
@@ -1,18 +1,6 @@
-# Request -- Simplified HTTP request method
+# Request -- Simplified HTTP client
-## Install
-
-<pre>
- npm install request
-</pre>
-
-Or from source:
-
-<pre>
- git clone git://github.com/mikeal/request.git
- cd request
- npm link
-</pre>
+[![NPM](https://nodei.co/npm/request.png)](https://nodei.co/npm/request/)
## Super simple to use
@@ -35,19 +23,19 @@ You can stream any response to a file stream.
request('http://google.com/doodle.png').pipe(fs.createWriteStream('doodle.png'))
```
-You can also stream a file to a PUT or POST request. This method will also check the file extension against a mapping of file extensions to content-types, in this case `application/json`, and use the proper content-type in the PUT request if one is not already provided in the headers.
+You can also stream a file to a PUT or POST request. This method will also check the file extension against a mapping of file extensions to content-types (in this case `application/json`) and use the proper `content-type` in the PUT request (if the headers don’t already provide one).
```javascript
fs.createReadStream('file.json').pipe(request.put('http://mysite.com/obj.json'))
```
-Request can also pipe to itself. When doing so the content-type and content-length will be preserved in the PUT headers.
+Request can also `pipe` to itself. When doing so, `content-type` and `content-length` are preserved in the PUT headers.
```javascript
request.get('http://google.com/img.png').pipe(request.put('http://mysite.com/img.png'))
```
-Now let's get fancy.
+Now let’s get fancy.
```javascript
http.createServer(function (req, resp) {
@@ -56,12 +44,12 @@ http.createServer(function (req, resp) {
req.pipe(request.put('http://mysite.com/doodle.png'))
} else if (req.method === 'GET' || req.method === 'HEAD') {
request.get('http://mysite.com/doodle.png').pipe(resp)
- }
+ }
}
})
```
-You can also pipe() from a http.ServerRequest instance and to a http.ServerResponse instance. The HTTP method and headers will be sent as well as the entity-body data. Which means that, if you don't really care about security, you can do:
+You can also `pipe()` from `http.ServerRequest` instances, as well as to `http.ServerResponse` instances. The HTTP method, headers, and entity-body data will be sent. Which means that, if you don't really care about security, you can do:
```javascript
http.createServer(function (req, resp) {
@@ -73,7 +61,7 @@ http.createServer(function (req, resp) {
})
```
-And since pipe() returns the destination stream in node 0.5.x you can do one line proxying :)
+And since `pipe()` returns the destination stream in ≥ Node 0.5.x you can do one line proxying. :)
```javascript
req.pipe(request('http://mysite.com/doodle.png')).pipe(resp)
@@ -90,13 +78,14 @@ http.createServer(function (req, resp) {
}
})
```
+
You can still use intermediate proxies, the requests will still follow HTTP forwards, etc.
## Forms
`request` supports `application/x-www-form-urlencoded` and `multipart/form-data` form uploads. For `multipart/related` refer to the `multipart` API.
-Url encoded forms are simple
+URL-encoded forms are simple.
```javascript
request.post('http://service.com/upload', {form:{key:'value'}})
@@ -104,7 +93,7 @@ request.post('http://service.com/upload', {form:{key:'value'}})
request.post('http://service.com/upload').form({key:'value'})
```
-For `multipart/form-data` we use the [form-data](https://github.com/felixge/node-form-data) library by [@felixge](https://github.com/felixge). You don't need to worry about piping the form object or setting the headers, `request` will handle that for you.
+For `multipart/form-data` we use the [form-data](https://github.com/felixge/node-form-data) library by [@felixge](https://github.com/felixge). You don’t need to worry about piping the form object or setting the headers, `request` will handle that for you.
```javascript
var r = request.post('http://service.com/upload')
@@ -118,7 +107,7 @@ form.append('remote_file', request('http://google.com/doodle.png'))
## HTTP Authentication
```javascript
-request.auth('username', 'password', false).get('http://some.server.com/');
+request.get('http://some.server.com/').auth('username', 'password', false);
// or
request.get('http://some.server.com/', {
'auth': {
@@ -131,9 +120,9 @@ request.get('http://some.server.com/', {
If passed as an option, `auth` should be a hash containing values `user` || `username`, `password` || `pass`, and `sendImmediately` (optional). The method form takes parameters `auth(username, password, sendImmediately)`.
-`sendImmediately` defaults to true, which will cause a basic authentication header to be sent. If `sendImmediately` is `false`, then `request` will retry with a proper authentication header after receiving a 401 response from the server (which must contain a `WWW-Authenticate` header indicating the required authentication method).
+`sendImmediately` defaults to `true`, which causes a basic authentication header to be sent. If `sendImmediately` is `false`, then `request` will retry with a proper authentication header after receiving a `401` response from the server (which must contain a `WWW-Authenticate` header indicating the required authentication method).
-Digest authentication is supported, but it only works with `sendImmediately` set to `false` (otherwise `request` will send basic authentication on the initial request, which will probably cause the request to fail).
+Digest authentication is supported, but it only works with `sendImmediately` set to `false`; otherwise `request` will send basic authentication on the initial request, which will probably cause the request to fail.
## OAuth Signing
@@ -150,10 +139,10 @@ var qs = require('querystring')
request.post({url:url, oauth:oauth}, function (e, r, body) {
// Ideally, you would take the body in the response
// and construct a URL that a user clicks on (like a sign in button).
- // The verifier is only available in the response after a user has
+ // The verifier is only available in the response after a user has
// verified with twitter that they are authorizing your app.
var access_token = qs.parse(body)
- , oauth =
+ , oauth =
{ consumer_key: CONSUMER_KEY
, consumer_secret: CONSUMER_SECRET
, token: access_token.oauth_token
@@ -163,14 +152,14 @@ request.post({url:url, oauth:oauth}, function (e, r, body) {
;
request.post({url:url, oauth:oauth}, function (e, r, body) {
var perm_token = qs.parse(body)
- , oauth =
+ , oauth =
{ consumer_key: CONSUMER_KEY
, consumer_secret: CONSUMER_SECRET
, token: perm_token.oauth_token
, token_secret: perm_token.oauth_token_secret
}
, url = 'https://api.twitter.com/1/users/show.json?'
- , params =
+ , params =
{ screen_name: perm_token.screen_name
, user_id: perm_token.user_id
}
@@ -183,51 +172,81 @@ request.post({url:url, oauth:oauth}, function (e, r, body) {
})
```
+### Custom HTTP Headers
+HTTP Headers, such as `User-Agent`, can be set in the `options` object.
+In the example below, we call the github API to find out the number
+of stars and forks for the request repository. This requires a
+custom `User-Agent` header as well as https.
+
+```
+var request = require('request');
+
+var options = {
+ url: 'https://api.github.com/repos/mikeal/request',
+ headers: {
+ 'User-Agent': 'request'
+ }
+};
+
+function callback(error, response, body) {
+ if (!error && response.statusCode == 200) {
+ var info = JSON.parse(body);
+ console.log(info.stargazers_count + " Stars");
+ console.log(info.forks_count + " Forks");
+ }
+}
+
+request(options, callback);
+```
### request(options, callback)
-The first argument can be either a url or an options object. The only required option is uri, all others are optional.
+The first argument can be either a `url` or an `options` object. The only required option is `uri`; all others are optional.
-* `uri` || `url` - fully qualified uri or a parsed url object from url.parse()
-* `qs` - object containing querystring values to be appended to the uri
-* `method` - http method, defaults to GET
-* `headers` - http headers, defaults to {}
-* `body` - entity body for PATCH, POST and PUT requests. Must be buffer or string.
-* `form` - when passed an object this will set `body` but to a querystring representation of value and adds `Content-type: application/x-www-form-urlencoded; charset=utf-8` header. When passed no option a FormData instance is returned that will be piped to request.
+* `uri` || `url` - fully qualified uri or a parsed url object from `url.parse()`
+* `qs` - object containing querystring values to be appended to the `uri`
+* `method` - http method (default: `"GET"`)
+* `headers` - http headers (default: `{}`)
+* `body` - entity body for PATCH, POST and PUT requests. Must be a `Buffer` or `String`.
+* `form` - when passed an object, this sets `body` to a querystring representation of value, and adds `Content-type: application/x-www-form-urlencoded; charset=utf-8` header. When passed no options, a `FormData` instance is returned (and is piped to request).
* `auth` - A hash containing values `user` || `username`, `password` || `pass`, and `sendImmediately` (optional). See documentation above.
-* `json` - sets `body` but to JSON representation of value and adds `Content-type: application/json` header. Additionally, parses the response body as json.
+* `json` - sets `body` but to JSON representation of value and adds `Content-type: application/json` header. Additionally, parses the response body as JSON.
* `multipart` - (experimental) array of objects which contains their own headers and `body` attribute. Sends `multipart/related` request. See example below.
-* `followRedirect` - follow HTTP 3xx responses as redirects. defaults to true.
-* `followAllRedirects` - follow non-GET HTTP 3xx responses as redirects. defaults to false.
-* `maxRedirects` - the maximum number of redirects to follow, defaults to 10.
-* `encoding` - Encoding to be used on `setEncoding` of response data. If set to `null`, the body is returned as a Buffer.
-* `pool` - A hash object containing the agents for these requests. If omitted this request will use the global pool which is set to node's default maxSockets.
+* `followRedirect` - follow HTTP 3xx responses as redirects (default: `true`)
+* `followAllRedirects` - follow non-GET HTTP 3xx responses as redirects (default: `false`)
+* `maxRedirects` - the maximum number of redirects to follow (default: `10`)
+* `encoding` - Encoding to be used on `setEncoding` of response data. If `null`, the `body` is returned as a `Buffer`.
+* `pool` - A hash object containing the agents for these requests. If omitted, the request will use the global pool (which is set to node's default `maxSockets`)
* `pool.maxSockets` - Integer containing the maximum amount of sockets in the pool.
-* `timeout` - Integer containing the number of milliseconds to wait for a request to respond before aborting the request
-* `proxy` - An HTTP proxy to be used. Support proxy Auth with Basic Auth the same way it's supported with the `url` parameter by embedding the auth info in the uri.
-* `oauth` - Options for OAuth HMAC-SHA1 signing, see documentation above.
+* `timeout` - Integer containing the number of milliseconds to wait for a request to respond before aborting the request
+* `proxy` - An HTTP proxy to be used. Supports proxy Auth with Basic Auth, identical to support for the `url` parameter (by embedding the auth info in the `uri`)
+* `oauth` - Options for OAuth HMAC-SHA1 signing. See documentation above.
* `hawk` - Options for [Hawk signing](https://github.com/hueniverse/hawk). The `credentials` key must contain the necessary signing info, [see hawk docs for details](https://github.com/hueniverse/hawk#usage-example).
-* `strictSSL` - Set to `true` to require that SSL certificates be valid. Note: to use your own certificate authority, you need to specify an agent that was created with that ca as an option.
-* `jar` - Set to `false` if you don't want cookies to be remembered for future use or define your custom cookie jar (see examples section)
-* `aws` - object containing aws signing information, should have the properties `key` and `secret` as well as `bucket` unless you're specifying your bucket as part of the path, or you are making a request that doesn't use a bucket (i.e. GET Services)
+* `strictSSL` - If `true`, requires SSL certificates be valid. **Note:** to use your own certificate authority, you need to specify an agent that was created with that CA as an option.
+* `jar` - If `true`, remember cookies for future use (or define your custom cookie jar; see examples section)
+* `aws` - `object` containing AWS signing information. Should have the properties `key`, `secret`. Also requires the property `bucket`, unless you’re specifying your `bucket` as part of the path, or the request doesn’t use a bucket (i.e. GET Services)
* `httpSignature` - Options for the [HTTP Signature Scheme](https://github.com/joyent/node-http-signature/blob/master/http_signing.md) using [Joyent's library](https://github.com/joyent/node-http-signature). The `keyId` and `key` properties must be specified. See the docs for other options.
* `localAddress` - Local interface to bind for network connections.
-The callback argument gets 3 arguments. The first is an error when applicable (usually from the http.Client option not the http.ClientRequest object). The second in an http.ClientResponse object. The third is the response body String or Buffer.
+The callback argument gets 3 arguments:
+
+1. An `error` when applicable (usually from the `http.Client` option, not the `http.ClientRequest` object)
+2. An `http.ClientResponse` object
+3. The third is the `response` body (`String` or `Buffer`)
## Convenience methods
There are also shorthand methods for different HTTP METHODs and some other conveniences.
-### request.defaults(options)
-
+### request.defaults(options)
+
This method returns a wrapper around the normal request API that defaults to whatever options you pass in to it.
### request.put
-Same as request() but defaults to `method: "PUT"`.
+Same as `request()`, but defaults to `method: "PUT"`.
```javascript
request.put(url)
@@ -235,7 +254,7 @@ request.put(url)
### request.patch
-Same as request() but defaults to `method: "PATCH"`.
+Same as `request()`, but defaults to `method: "PATCH"`.
```javascript
request.patch(url)
@@ -243,7 +262,7 @@ request.patch(url)
### request.post
-Same as request() but defaults to `method: "POST"`.
+Same as `request()`, but defaults to `method: "POST"`.
```javascript
request.post(url)
@@ -259,7 +278,7 @@ request.head(url)
### request.del
-Same as request() but defaults to `method: "DELETE"`.
+Same as `request()`, but defaults to `method: "DELETE"`.
```javascript
request.del(url)
@@ -267,7 +286,7 @@ request.del(url)
### request.get
-Alias to normal request method for uniformity.
+Same as `request()` (for uniformity).
```javascript
request.get(url)
@@ -297,12 +316,12 @@ request.jar()
request(
{ method: 'PUT'
, uri: 'http://mikeal.iriscouch.com/testjs/' + rand
- , multipart:
+ , multipart:
[ { 'content-type': 'application/json'
, body: JSON.stringify({foo: 'bar', _attachments: {'message.txt': {follows: true, length: 18, 'content_type': 'text/plain' }}})
}
, { body: 'I am an attachment' }
- ]
+ ]
}
, function (error, response, body) {
if(response.statusCode == 201){
@@ -314,16 +333,17 @@ request.jar()
}
)
```
-Cookies are enabled by default (so they can be used in subsequent requests). To disable cookies set jar to false (either in defaults or in the options sent).
+
+Cookies are disabled by default (else, they would be used in subsequent requests). To enable cookies, set `jar` to `true` (either in `defaults` or `options`).
```javascript
-var request = request.defaults({jar: false})
+var request = request.defaults({jar: true})
request('http://www.google.com', function () {
request('http://images.google.com')
})
```
-If you to use a custom cookie jar (instead of letting request use its own global cookie jar) you do so by setting the jar default or by specifying it as an option:
+To use a custom cookie jar (instead `request`’s global cookie jar), set `jar` to an instance of `request.jar()` (either in `defaults` or `options`)
```javascript
var j = request.jar()
diff --git a/deps/npm/node_modules/request/index.js b/deps/npm/node_modules/request/index.js
index 22707be70..465e5ae3b 100755
--- a/deps/npm/node_modules/request/index.js
+++ b/deps/npm/node_modules/request/index.js
@@ -12,1192 +12,17 @@
// See the License for the specific language governing permissions and
// limitations under the License.
-var http = require('http')
- , https = false
- , tls = false
- , url = require('url')
- , util = require('util')
- , stream = require('stream')
- , qs = require('qs')
- , querystring = require('querystring')
- , crypto = require('crypto')
-
- , oauth = require('oauth-sign')
- , hawk = require('hawk')
- , aws = require('aws-sign')
- , httpSignature = require('http-signature')
- , uuid = require('node-uuid')
- , mime = require('mime')
- , tunnel = require('tunnel-agent')
- , safeStringify = require('json-stringify-safe')
-
- , ForeverAgent = require('forever-agent')
- , FormData = require('form-data')
-
- , Cookie = require('cookie-jar')
- , CookieJar = Cookie.Jar
- , cookieJar = new CookieJar
+var optional = require('./lib/optional')
+ , cookie = optional('tough-cookie')
+ , Cookie = cookie && cookie.Cookie
+ , CookieJar = cookie && cookie.CookieJar
+ , cookieJar = CookieJar && new CookieJar
+
+ , copy = require('./lib/copy')
+ , Request = require('./request')
;
-try {
- https = require('https')
-} catch (e) {}
-
-try {
- tls = require('tls')
-} catch (e) {}
-
-var debug
-if (/\brequest\b/.test(process.env.NODE_DEBUG)) {
- debug = function() {
- console.error('REQUEST %s', util.format.apply(util, arguments))
- }
-} else {
- debug = function() {}
-}
-
-function toBase64 (str) {
- return (new Buffer(str || "", "ascii")).toString("base64")
-}
-
-function md5 (str) {
- return crypto.createHash('md5').update(str).digest('hex')
-}
-
-// Hacky fix for pre-0.4.4 https
-if (https && !https.Agent) {
- https.Agent = function (options) {
- http.Agent.call(this, options)
- }
- util.inherits(https.Agent, http.Agent)
- https.Agent.prototype._getConnection = function (host, port, cb) {
- var s = tls.connect(port, host, this.options, function () {
- // do other checks here?
- if (cb) cb()
- })
- return s
- }
-}
-
-function isReadStream (rs) {
- if (rs.readable && rs.path && rs.mode) {
- return true
- }
-}
-
-function copy (obj) {
- var o = {}
- Object.keys(obj).forEach(function (i) {
- o[i] = obj[i]
- })
- return o
-}
-
-var isUrl = /^https?:/
-
-var globalPool = {}
-
-function Request (options) {
- stream.Stream.call(this)
- this.readable = true
- this.writable = true
-
- if (typeof options === 'string') {
- options = {uri:options}
- }
-
- var reserved = Object.keys(Request.prototype)
- for (var i in options) {
- if (reserved.indexOf(i) === -1) {
- this[i] = options[i]
- } else {
- if (typeof options[i] === 'function') {
- delete options[i]
- }
- }
- }
-
- if (options.method) {
- this.explicitMethod = true
- }
-
- this.init(options)
-}
-util.inherits(Request, stream.Stream)
-Request.prototype.init = function (options) {
- // init() contains all the code to setup the request object.
- // the actual outgoing request is not started until start() is called
- // this function is called from both the constructor and on redirect.
- var self = this
- if (!options) options = {}
-
- if (!self.method) self.method = options.method || 'GET'
- self.localAddress = options.localAddress
-
- debug(options)
- if (!self.pool && self.pool !== false) self.pool = globalPool
- self.dests = self.dests || []
- self.__isRequestRequest = true
-
- // Protect against double callback
- if (!self._callback && self.callback) {
- self._callback = self.callback
- self.callback = function () {
- if (self._callbackCalled) return // Print a warning maybe?
- self._callbackCalled = true
- self._callback.apply(self, arguments)
- }
- self.on('error', self.callback.bind())
- self.on('complete', self.callback.bind(self, null))
- }
-
- if (self.url) {
- // People use this property instead all the time so why not just support it.
- self.uri = self.url
- delete self.url
- }
-
- if (!self.uri) {
- // this will throw if unhandled but is handleable when in a redirect
- return self.emit('error', new Error("options.uri is a required argument"))
- } else {
- if (typeof self.uri == "string") self.uri = url.parse(self.uri)
- }
-
- if (self.strictSSL === false) {
- self.rejectUnauthorized = false
- }
-
- if (self.proxy) {
- if (typeof self.proxy == 'string') self.proxy = url.parse(self.proxy)
-
- // do the HTTP CONNECT dance using koichik/node-tunnel
- if (http.globalAgent && self.uri.protocol === "https:") {
- var tunnelFn = self.proxy.protocol === "http:"
- ? tunnel.httpsOverHttp : tunnel.httpsOverHttps
-
- var tunnelOptions = { proxy: { host: self.proxy.hostname
- , port: +self.proxy.port
- , proxyAuth: self.proxy.auth
- , headers: { Host: self.uri.hostname + ':' +
- (self.uri.port || self.uri.protocol === 'https:' ? 443 : 80) }}
- , rejectUnauthorized: self.rejectUnauthorized
- , ca: this.ca }
-
- self.agent = tunnelFn(tunnelOptions)
- self.tunnel = true
- }
- }
-
- if (!self.uri.host || !self.uri.pathname) {
- // Invalid URI: it may generate lot of bad errors, like "TypeError: Cannot call method 'indexOf' of undefined" in CookieJar
- // Detect and reject it as soon as possible
- var faultyUri = url.format(self.uri)
- var message = 'Invalid URI "' + faultyUri + '"'
- if (Object.keys(options).length === 0) {
- // No option ? This can be the sign of a redirect
- // As this is a case where the user cannot do anything (he didn't call request directly with this URL)
- // he should be warned that it can be caused by a redirection (can save some hair)
- message += '. This can be caused by a crappy redirection.'
- }
- self.emit('error', new Error(message))
- return // This error was fatal
- }
-
- self._redirectsFollowed = self._redirectsFollowed || 0
- self.maxRedirects = (self.maxRedirects !== undefined) ? self.maxRedirects : 10
- self.followRedirect = (self.followRedirect !== undefined) ? self.followRedirect : true
- self.followAllRedirects = (self.followAllRedirects !== undefined) ? self.followAllRedirects : false
- if (self.followRedirect || self.followAllRedirects)
- self.redirects = self.redirects || []
-
- self.headers = self.headers ? copy(self.headers) : {}
-
- self.setHost = false
- if (!(self.headers.host || self.headers.Host)) {
- self.headers.host = self.uri.hostname
- if (self.uri.port) {
- if ( !(self.uri.port === 80 && self.uri.protocol === 'http:') &&
- !(self.uri.port === 443 && self.uri.protocol === 'https:') )
- self.headers.host += (':'+self.uri.port)
- }
- self.setHost = true
- }
-
- self.jar(self._jar || options.jar)
-
- if (!self.uri.pathname) {self.uri.pathname = '/'}
- if (!self.uri.port) {
- if (self.uri.protocol == 'http:') {self.uri.port = 80}
- else if (self.uri.protocol == 'https:') {self.uri.port = 443}
- }
-
- if (self.proxy && !self.tunnel) {
- self.port = self.proxy.port
- self.host = self.proxy.hostname
- } else {
- self.port = self.uri.port
- self.host = self.uri.hostname
- }
-
- self.clientErrorHandler = function (error) {
- if (self._aborted) return
-
- if (self.req && self.req._reusedSocket && error.code === 'ECONNRESET'
- && self.agent.addRequestNoreuse) {
- self.agent = { addRequest: self.agent.addRequestNoreuse.bind(self.agent) }
- self.start()
- self.req.end()
- return
- }
- if (self.timeout && self.timeoutTimer) {
- clearTimeout(self.timeoutTimer)
- self.timeoutTimer = null
- }
- self.emit('error', error)
- }
-
- self._parserErrorHandler = function (error) {
- if (this.res) {
- if (this.res.request) {
- this.res.request.emit('error', error)
- } else {
- this.res.emit('error', error)
- }
- } else {
- this._httpMessage.emit('error', error)
- }
- }
-
- if (options.form) {
- self.form(options.form)
- }
-
- if (options.qs) self.qs(options.qs)
-
- if (self.uri.path) {
- self.path = self.uri.path
- } else {
- self.path = self.uri.pathname + (self.uri.search || "")
- }
-
- if (self.path.length === 0) self.path = '/'
-
-
- // Auth must happen last in case signing is dependent on other headers
- if (options.oauth) {
- self.oauth(options.oauth)
- }
-
- if (options.aws) {
- self.aws(options.aws)
- }
-
- if (options.hawk) {
- self.hawk(options.hawk)
- }
-
- if (options.httpSignature) {
- self.httpSignature(options.httpSignature)
- }
-
- if (options.auth) {
- self.auth(
- (options.auth.user==="") ? options.auth.user : (options.auth.user || options.auth.username ),
- options.auth.pass || options.auth.password,
- options.auth.sendImmediately)
- }
-
- if (self.uri.auth && !self.headers.authorization) {
- var authPieces = self.uri.auth.split(':').map(function(item){ return querystring.unescape(item) })
- self.auth(authPieces[0], authPieces.slice(1).join(':'), true)
- }
- if (self.proxy && self.proxy.auth && !self.headers['proxy-authorization'] && !self.tunnel) {
- self.headers['proxy-authorization'] = "Basic " + toBase64(self.proxy.auth.split(':').map(function(item){ return querystring.unescape(item)}).join(':'))
- }
-
-
- if (self.proxy && !self.tunnel) self.path = (self.uri.protocol + '//' + self.uri.host + self.path)
-
- if (options.json) {
- self.json(options.json)
- } else if (options.multipart) {
- self.boundary = uuid()
- self.multipart(options.multipart)
- }
-
- if (self.body) {
- var length = 0
- if (!Buffer.isBuffer(self.body)) {
- if (Array.isArray(self.body)) {
- for (var i = 0; i < self.body.length; i++) {
- length += self.body[i].length
- }
- } else {
- self.body = new Buffer(self.body)
- length = self.body.length
- }
- } else {
- length = self.body.length
- }
- if (length) {
- if(!self.headers['content-length'] && !self.headers['Content-Length'])
- self.headers['content-length'] = length
- } else {
- throw new Error('Argument error, options.body.')
- }
- }
-
- var protocol = self.proxy && !self.tunnel ? self.proxy.protocol : self.uri.protocol
- , defaultModules = {'http:':http, 'https:':https}
- , httpModules = self.httpModules || {}
- ;
- self.httpModule = httpModules[protocol] || defaultModules[protocol]
-
- if (!self.httpModule) return this.emit('error', new Error("Invalid protocol"))
-
- if (options.ca) self.ca = options.ca
-
- if (!self.agent) {
- if (options.agentOptions) self.agentOptions = options.agentOptions
-
- if (options.agentClass) {
- self.agentClass = options.agentClass
- } else if (options.forever) {
- self.agentClass = protocol === 'http:' ? ForeverAgent : ForeverAgent.SSL
- } else {
- self.agentClass = self.httpModule.Agent
- }
- }
-
- if (self.pool === false) {
- self.agent = false
- } else {
- self.agent = self.agent || self.getAgent()
- if (self.maxSockets) {
- // Don't use our pooling if node has the refactored client
- self.agent.maxSockets = self.maxSockets
- }
- if (self.pool.maxSockets) {
- // Don't use our pooling if node has the refactored client
- self.agent.maxSockets = self.pool.maxSockets
- }
- }
-
- self.once('pipe', function (src) {
- if (self.ntick && self._started) throw new Error("You cannot pipe to this stream after the outbound request has started.")
- self.src = src
- if (isReadStream(src)) {
- if (!self.headers['content-type'] && !self.headers['Content-Type'])
- self.headers['content-type'] = mime.lookup(src.path)
- } else {
- if (src.headers) {
- for (var i in src.headers) {
- if (!self.headers[i]) {
- self.headers[i] = src.headers[i]
- }
- }
- }
- if (self._json && !self.headers['content-type'] && !self.headers['Content-Type'])
- self.headers['content-type'] = 'application/json'
- if (src.method && !self.explicitMethod) {
- self.method = src.method
- }
- }
-
- self.on('pipe', function () {
- console.error("You have already piped to this stream. Pipeing twice is likely to break the request.")
- })
- })
-
- process.nextTick(function () {
- if (self._aborted) return
-
- if (self._form) {
- self.setHeaders(self._form.getHeaders())
- self._form.pipe(self)
- }
- if (self.body) {
- if (Array.isArray(self.body)) {
- self.body.forEach(function (part) {
- self.write(part)
- })
- } else {
- self.write(self.body)
- }
- self.end()
- } else if (self.requestBodyStream) {
- console.warn("options.requestBodyStream is deprecated, please pass the request object to stream.pipe.")
- self.requestBodyStream.pipe(self)
- } else if (!self.src) {
- if (self.method !== 'GET' && typeof self.method !== 'undefined') {
- self.headers['content-length'] = 0
- }
- self.end()
- }
- self.ntick = true
- })
-}
-
-// Must call this when following a redirect from https to http or vice versa
-// Attempts to keep everything as identical as possible, but update the
-// httpModule, Tunneling agent, and/or Forever Agent in use.
-Request.prototype._updateProtocol = function () {
- var self = this
- var protocol = self.uri.protocol
-
- if (protocol === 'https:') {
- // previously was doing http, now doing https
- // if it's https, then we might need to tunnel now.
- if (self.proxy) {
- self.tunnel = true
- var tunnelFn = self.proxy.protocol === 'http:'
- ? tunnel.httpsOverHttp : tunnel.httpsOverHttps
- var tunnelOptions = { proxy: { host: self.proxy.hostname
- , port: +self.proxy.port
- , proxyAuth: self.proxy.auth }
- , rejectUnauthorized: self.rejectUnauthorized
- , ca: self.ca }
- self.agent = tunnelFn(tunnelOptions)
- return
- }
-
- self.httpModule = https
- switch (self.agentClass) {
- case ForeverAgent:
- self.agentClass = ForeverAgent.SSL
- break
- case http.Agent:
- self.agentClass = https.Agent
- break
- default:
- // nothing we can do. Just hope for the best.
- return
- }
-
- // if there's an agent, we need to get a new one.
- if (self.agent) self.agent = self.getAgent()
-
- } else {
- // previously was doing https, now doing http
- // stop any tunneling.
- if (self.tunnel) self.tunnel = false
- self.httpModule = http
- switch (self.agentClass) {
- case ForeverAgent.SSL:
- self.agentClass = ForeverAgent
- break
- case https.Agent:
- self.agentClass = http.Agent
- break
- default:
- // nothing we can do. just hope for the best
- return
- }
-
- // if there's an agent, then get a new one.
- if (self.agent) {
- self.agent = null
- self.agent = self.getAgent()
- }
- }
-}
-
-Request.prototype.getAgent = function () {
- var Agent = this.agentClass
- var options = {}
- if (this.agentOptions) {
- for (var i in this.agentOptions) {
- options[i] = this.agentOptions[i]
- }
- }
- if (this.ca) options.ca = this.ca
- if (typeof this.rejectUnauthorized !== 'undefined') options.rejectUnauthorized = this.rejectUnauthorized
-
- if (this.cert && this.key) {
- options.key = this.key
- options.cert = this.cert
- }
-
- var poolKey = ''
-
- // different types of agents are in different pools
- if (Agent !== this.httpModule.Agent) {
- poolKey += Agent.name
- }
-
- if (!this.httpModule.globalAgent) {
- // node 0.4.x
- options.host = this.host
- options.port = this.port
- if (poolKey) poolKey += ':'
- poolKey += this.host + ':' + this.port
- }
-
- // ca option is only relevant if proxy or destination are https
- var proxy = this.proxy
- if (typeof proxy === 'string') proxy = url.parse(proxy)
- var isHttps = (proxy && proxy.protocol === 'https:') || this.uri.protocol === 'https:'
- if (isHttps) {
- if (options.ca) {
- if (poolKey) poolKey += ':'
- poolKey += options.ca
- }
-
- if (typeof options.rejectUnauthorized !== 'undefined') {
- if (poolKey) poolKey += ':'
- poolKey += options.rejectUnauthorized
- }
-
- if (options.cert)
- poolKey += options.cert.toString('ascii') + options.key.toString('ascii')
- }
-
- if (!poolKey && Agent === this.httpModule.Agent && this.httpModule.globalAgent) {
- // not doing anything special. Use the globalAgent
- return this.httpModule.globalAgent
- }
-
- // we're using a stored agent. Make sure it's protocol-specific
- poolKey = this.uri.protocol + poolKey
-
- // already generated an agent for this setting
- if (this.pool[poolKey]) return this.pool[poolKey]
-
- return this.pool[poolKey] = new Agent(options)
-}
-
-Request.prototype.start = function () {
- // start() is called once we are ready to send the outgoing HTTP request.
- // this is usually called on the first write(), end() or on nextTick()
- var self = this
-
- if (self._aborted) return
-
- self._started = true
- self.method = self.method || 'GET'
- self.href = self.uri.href
-
- if (self.src && self.src.stat && self.src.stat.size && !self.headers['content-length'] && !self.headers['Content-Length']) {
- self.headers['content-length'] = self.src.stat.size
- }
- if (self._aws) {
- self.aws(self._aws, true)
- }
-
- // We have a method named auth, which is completely different from the http.request
- // auth option. If we don't remove it, we're gonna have a bad time.
- var reqOptions = copy(self)
- delete reqOptions.auth
- debug('make request', self.uri.href)
- self.req = self.httpModule.request(reqOptions, self.onResponse.bind(self))
-
- if (self.timeout && !self.timeoutTimer) {
- self.timeoutTimer = setTimeout(function () {
- self.req.abort()
- var e = new Error("ETIMEDOUT")
- e.code = "ETIMEDOUT"
- self.emit("error", e)
- }, self.timeout)
-
- // Set additional timeout on socket - in case if remote
- // server freeze after sending headers
- if (self.req.setTimeout) { // only works on node 0.6+
- self.req.setTimeout(self.timeout, function () {
- if (self.req) {
- self.req.abort()
- var e = new Error("ESOCKETTIMEDOUT")
- e.code = "ESOCKETTIMEDOUT"
- self.emit("error", e)
- }
- })
- }
- }
-
- self.req.on('error', self.clientErrorHandler)
- self.req.on('drain', function() {
- self.emit('drain')
- })
- self.on('end', function() {
- if ( self.req.connection ) self.req.connection.removeListener('error', self._parserErrorHandler)
- })
- self.emit('request', self.req)
-}
-Request.prototype.onResponse = function (response) {
- var self = this
- debug('onResponse', self.uri.href, response.statusCode, response.headers)
- response.on('end', function() {
- debug('response end', self.uri.href, response.statusCode, response.headers)
- });
-
- if (response.connection.listeners('error').indexOf(self._parserErrorHandler) === -1) {
- response.connection.once('error', self._parserErrorHandler)
- }
- if (self._aborted) {
- debug('aborted', self.uri.href)
- response.resume()
- return
- }
- if (self._paused) response.pause()
- else response.resume()
-
- self.response = response
- response.request = self
- response.toJSON = toJSON
-
- // XXX This is different on 0.10, because SSL is strict by default
- if (self.httpModule === https &&
- self.strictSSL &&
- !response.client.authorized) {
- debug('strict ssl error', self.uri.href)
- var sslErr = response.client.authorizationError
- self.emit('error', new Error('SSL Error: '+ sslErr))
- return
- }
-
- if (self.setHost) delete self.headers.host
- if (self.timeout && self.timeoutTimer) {
- clearTimeout(self.timeoutTimer)
- self.timeoutTimer = null
- }
-
- var addCookie = function (cookie) {
- if (self._jar) self._jar.add(new Cookie(cookie))
- else cookieJar.add(new Cookie(cookie))
- }
-
- if (response.headers['set-cookie'] && (!self._disableCookies)) {
- if (Array.isArray(response.headers['set-cookie'])) response.headers['set-cookie'].forEach(addCookie)
- else addCookie(response.headers['set-cookie'])
- }
-
- var redirectTo = null
- if (response.statusCode >= 300 && response.statusCode < 400 && response.headers.location) {
- debug('redirect', response.headers.location)
-
- if (self.followAllRedirects) {
- redirectTo = response.headers.location
- } else if (self.followRedirect) {
- switch (self.method) {
- case 'PATCH':
- case 'PUT':
- case 'POST':
- case 'DELETE':
- // Do not follow redirects
- break
- default:
- redirectTo = response.headers.location
- break
- }
- }
- } else if (response.statusCode == 401 && self._hasAuth && !self._sentAuth) {
- var authHeader = response.headers['www-authenticate']
- var authVerb = authHeader && authHeader.split(' ')[0]
- debug('reauth', authVerb)
-
- switch (authVerb) {
- case 'Basic':
- self.auth(self._user, self._pass, true)
- redirectTo = self.uri
- break
-
- case 'Digest':
- // TODO: More complete implementation of RFC 2617. For reference:
- // http://tools.ietf.org/html/rfc2617#section-3
- // https://github.com/bagder/curl/blob/master/lib/http_digest.c
-
- var matches = authHeader.match(/([a-z0-9_-]+)="([^"]+)"/gi)
- var challenge = {}
-
- for (var i = 0; i < matches.length; i++) {
- var eqPos = matches[i].indexOf('=')
- var key = matches[i].substring(0, eqPos)
- var quotedValue = matches[i].substring(eqPos + 1)
- challenge[key] = quotedValue.substring(1, quotedValue.length - 1)
- }
-
- var ha1 = md5(self._user + ':' + challenge.realm + ':' + self._pass)
- var ha2 = md5(self.method + ':' + self.uri.path)
- var digestResponse = md5(ha1 + ':' + challenge.nonce + ':1::auth:' + ha2)
- var authValues = {
- username: self._user,
- realm: challenge.realm,
- nonce: challenge.nonce,
- uri: self.uri.path,
- qop: challenge.qop,
- response: digestResponse,
- nc: 1,
- cnonce: ''
- }
-
- authHeader = []
- for (var k in authValues) {
- authHeader.push(k + '="' + authValues[k] + '"')
- }
- authHeader = 'Digest ' + authHeader.join(', ')
- self.setHeader('authorization', authHeader)
- self._sentAuth = true
-
- redirectTo = self.uri
- break
- }
- }
-
- if (redirectTo) {
- debug('redirect to', redirectTo)
-
- // ignore any potential response body. it cannot possibly be useful
- // to us at this point.
- if (self._paused) response.resume()
-
- if (self._redirectsFollowed >= self.maxRedirects) {
- self.emit('error', new Error("Exceeded maxRedirects. Probably stuck in a redirect loop "+self.uri.href))
- return
- }
- self._redirectsFollowed += 1
-
- if (!isUrl.test(redirectTo)) {
- redirectTo = url.resolve(self.uri.href, redirectTo)
- }
-
- var uriPrev = self.uri
- self.uri = url.parse(redirectTo)
-
- // handle the case where we change protocol from https to http or vice versa
- if (self.uri.protocol !== uriPrev.protocol) {
- self._updateProtocol()
- }
-
- self.redirects.push(
- { statusCode : response.statusCode
- , redirectUri: redirectTo
- }
- )
- if (self.followAllRedirects && response.statusCode != 401) self.method = 'GET'
- // self.method = 'GET' // Force all redirects to use GET || commented out fixes #215
- delete self.src
- delete self.req
- delete self.agent
- delete self._started
- if (response.statusCode != 401) {
- // Remove parameters from the previous response, unless this is the second request
- // for a server that requires digest authentication.
- delete self.body
- delete self._form
- if (self.headers) {
- delete self.headers.host
- delete self.headers['content-type']
- delete self.headers['content-length']
- }
- }
-
- self.emit('redirect');
-
- self.init()
- return // Ignore the rest of the response
- } else {
- self._redirectsFollowed = self._redirectsFollowed || 0
- // Be a good stream and emit end when the response is finished.
- // Hack to emit end on close because of a core bug that never fires end
- response.on('close', function () {
- if (!self._ended) self.response.emit('end')
- })
-
- if (self.encoding) {
- if (self.dests.length !== 0) {
- console.error("Ingoring encoding parameter as this stream is being piped to another stream which makes the encoding option invalid.")
- } else {
- response.setEncoding(self.encoding)
- }
- }
-
- self.emit('response', response)
-
- self.dests.forEach(function (dest) {
- self.pipeDest(dest)
- })
-
- response.on("data", function (chunk) {
- self._destdata = true
- self.emit("data", chunk)
- })
- response.on("end", function (chunk) {
- self._ended = true
- self.emit("end", chunk)
- })
- response.on("close", function () {self.emit("close")})
-
- if (self.callback) {
- var buffer = []
- var bodyLen = 0
- self.on("data", function (chunk) {
- buffer.push(chunk)
- bodyLen += chunk.length
- })
- self.on("end", function () {
- debug('end event', self.uri.href)
- if (self._aborted) {
- debug('aborted', self.uri.href)
- return
- }
-
- if (buffer.length && Buffer.isBuffer(buffer[0])) {
- debug('has body', self.uri.href, bodyLen)
- var body = new Buffer(bodyLen)
- var i = 0
- buffer.forEach(function (chunk) {
- chunk.copy(body, i, 0, chunk.length)
- i += chunk.length
- })
- if (self.encoding === null) {
- response.body = body
- } else {
- response.body = body.toString(self.encoding)
- }
- } else if (buffer.length) {
- // The UTF8 BOM [0xEF,0xBB,0xBF] is converted to [0xFE,0xFF] in the JS UTC16/UCS2 representation.
- // Strip this value out when the encoding is set to 'utf8', as upstream consumers won't expect it and it breaks JSON.parse().
- if (self.encoding === 'utf8' && buffer[0].length > 0 && buffer[0][0] === "\uFEFF") {
- buffer[0] = buffer[0].substring(1)
- }
- response.body = buffer.join('')
- }
-
- if (self._json) {
- try {
- response.body = JSON.parse(response.body)
- } catch (e) {}
- }
- debug('emitting complete', self.uri.href)
- if(response.body == undefined && !self._json) {
- response.body = "";
- }
- self.emit('complete', response, response.body)
- })
- }
- }
- debug('finish init function', self.uri.href)
-}
-
-Request.prototype.abort = function () {
- this._aborted = true
-
- if (this.req) {
- this.req.abort()
- }
- else if (this.response) {
- this.response.abort()
- }
-
- this.emit("abort")
-}
-
-Request.prototype.pipeDest = function (dest) {
- var response = this.response
- // Called after the response is received
- if (dest.headers) {
- dest.headers['content-type'] = response.headers['content-type']
- if (response.headers['content-length']) {
- dest.headers['content-length'] = response.headers['content-length']
- }
- }
- if (dest.setHeader) {
- for (var i in response.headers) {
- dest.setHeader(i, response.headers[i])
- }
- dest.statusCode = response.statusCode
- }
- if (this.pipefilter) this.pipefilter(response, dest)
-}
-
-// Composable API
-Request.prototype.setHeader = function (name, value, clobber) {
- if (clobber === undefined) clobber = true
- if (clobber || !this.headers.hasOwnProperty(name)) this.headers[name] = value
- else this.headers[name] += ',' + value
- return this
-}
-Request.prototype.setHeaders = function (headers) {
- for (var i in headers) {this.setHeader(i, headers[i])}
- return this
-}
-Request.prototype.qs = function (q, clobber) {
- var base
- if (!clobber && this.uri.query) base = qs.parse(this.uri.query)
- else base = {}
-
- for (var i in q) {
- base[i] = q[i]
- }
-
- if (qs.stringify(base) === ''){
- return this
- }
-
- this.uri = url.parse(this.uri.href.split('?')[0] + '?' + qs.stringify(base))
- this.url = this.uri
- this.path = this.uri.path
-
- return this
-}
-Request.prototype.form = function (form) {
- if (form) {
- this.headers['content-type'] = 'application/x-www-form-urlencoded; charset=utf-8'
- this.body = qs.stringify(form).toString('utf8')
- return this
- }
- // create form-data object
- this._form = new FormData()
- return this._form
-}
-Request.prototype.multipart = function (multipart) {
- var self = this
- self.body = []
-
- if (!self.headers['content-type']) {
- self.headers['content-type'] = 'multipart/related; boundary=' + self.boundary
- } else {
- self.headers['content-type'] = self.headers['content-type'].split(';')[0] + '; boundary=' + self.boundary
- }
-
- if (!multipart.forEach) throw new Error('Argument error, options.multipart.')
-
- if (self.preambleCRLF) {
- self.body.push(new Buffer('\r\n'))
- }
-
- multipart.forEach(function (part) {
- var body = part.body
- if(body == null) throw Error('Body attribute missing in multipart.')
- delete part.body
- var preamble = '--' + self.boundary + '\r\n'
- Object.keys(part).forEach(function (key) {
- preamble += key + ': ' + part[key] + '\r\n'
- })
- preamble += '\r\n'
- self.body.push(new Buffer(preamble))
- self.body.push(new Buffer(body))
- self.body.push(new Buffer('\r\n'))
- })
- self.body.push(new Buffer('--' + self.boundary + '--'))
- return self
-}
-Request.prototype.json = function (val) {
- var self = this;
- var setAcceptHeader = function() {
- if (!self.headers['accept'] && !self.headers['Accept']) {
- self.setHeader('accept', 'application/json')
- }
- }
- setAcceptHeader();
- this._json = true
- if (typeof val === 'boolean') {
- if (typeof this.body === 'object') {
- setAcceptHeader();
- this.body = safeStringify(this.body)
- self.setHeader('content-type', 'application/json')
- }
- } else {
- setAcceptHeader();
- this.body = safeStringify(val)
- self.setHeader('content-type', 'application/json')
- }
- return this
-}
-function getHeader(name, headers) {
- var result, re, match
- Object.keys(headers).forEach(function (key) {
- re = new RegExp(name, 'i')
- match = key.match(re)
- if (match) result = headers[key]
- })
- return result
-}
-Request.prototype.auth = function (user, pass, sendImmediately) {
- if (typeof user !== 'string' || (pass !== undefined && typeof pass !== 'string')) {
- throw new Error('auth() received invalid user or password')
- }
- this._user = user
- this._pass = pass
- this._hasAuth = true
- if (sendImmediately || typeof sendImmediately == 'undefined') {
- this.setHeader('authorization', 'Basic ' + toBase64(user + ':' + pass))
- this._sentAuth = true
- }
- return this
-}
-Request.prototype.aws = function (opts, now) {
- if (!now) {
- this._aws = opts
- return this
- }
- var date = new Date()
- this.setHeader('date', date.toUTCString())
- var auth =
- { key: opts.key
- , secret: opts.secret
- , verb: this.method.toUpperCase()
- , date: date
- , contentType: getHeader('content-type', this.headers) || ''
- , md5: getHeader('content-md5', this.headers) || ''
- , amazonHeaders: aws.canonicalizeHeaders(this.headers)
- }
- if (opts.bucket && this.path) {
- auth.resource = '/' + opts.bucket + this.path
- } else if (opts.bucket && !this.path) {
- auth.resource = '/' + opts.bucket
- } else if (!opts.bucket && this.path) {
- auth.resource = this.path
- } else if (!opts.bucket && !this.path) {
- auth.resource = '/'
- }
- auth.resource = aws.canonicalizeResource(auth.resource)
- this.setHeader('authorization', aws.authorization(auth))
-
- return this
-}
-Request.prototype.httpSignature = function (opts) {
- var req = this
- httpSignature.signRequest({
- getHeader: function(header) {
- return getHeader(header, req.headers)
- },
- setHeader: function(header, value) {
- req.setHeader(header, value)
- },
- method: this.method,
- path: this.path
- }, opts)
- debug('httpSignature authorization', getHeader('authorization', this.headers))
-
- return this
-}
-
-Request.prototype.hawk = function (opts) {
- this.headers.Authorization = hawk.client.header(this.uri, this.method, opts).field
-}
-
-Request.prototype.oauth = function (_oauth) {
- var form
- if (this.headers['content-type'] &&
- this.headers['content-type'].slice(0, 'application/x-www-form-urlencoded'.length) ===
- 'application/x-www-form-urlencoded'
- ) {
- form = qs.parse(this.body)
- }
- if (this.uri.query) {
- form = qs.parse(this.uri.query)
- }
- if (!form) form = {}
- var oa = {}
- for (var i in form) oa[i] = form[i]
- for (var i in _oauth) oa['oauth_'+i] = _oauth[i]
- if (!oa.oauth_version) oa.oauth_version = '1.0'
- if (!oa.oauth_timestamp) oa.oauth_timestamp = Math.floor( Date.now() / 1000 ).toString()
- if (!oa.oauth_nonce) oa.oauth_nonce = uuid().replace(/-/g, '')
-
- oa.oauth_signature_method = 'HMAC-SHA1'
-
- var consumer_secret = oa.oauth_consumer_secret
- delete oa.oauth_consumer_secret
- var token_secret = oa.oauth_token_secret
- delete oa.oauth_token_secret
- var timestamp = oa.oauth_timestamp
-
- var baseurl = this.uri.protocol + '//' + this.uri.host + this.uri.pathname
- var signature = oauth.hmacsign(this.method, baseurl, oa, consumer_secret, token_secret)
-
- // oa.oauth_signature = signature
- for (var i in form) {
- if ( i.slice(0, 'oauth_') in _oauth) {
- // skip
- } else {
- delete oa['oauth_'+i]
- if (i !== 'x_auth_mode') delete oa[i]
- }
- }
- oa.oauth_timestamp = timestamp
- this.headers.Authorization =
- 'OAuth '+Object.keys(oa).sort().map(function (i) {return i+'="'+oauth.rfc3986(oa[i])+'"'}).join(',')
- this.headers.Authorization += ',oauth_signature="' + oauth.rfc3986(signature) + '"'
- return this
-}
-Request.prototype.jar = function (jar) {
- var cookies
-
- if (this._redirectsFollowed === 0) {
- this.originalCookieHeader = this.headers.cookie
- }
-
- if (jar === false) {
- // disable cookies
- cookies = false
- this._disableCookies = true
- } else if (jar) {
- // fetch cookie from the user defined cookie jar
- cookies = jar.get({ url: this.uri.href })
- } else {
- // fetch cookie from the global cookie jar
- cookies = cookieJar.get({ url: this.uri.href })
- }
-
- if (cookies && cookies.length) {
- var cookieString = cookies.map(function (c) {
- return c.name + "=" + c.value
- }).join("; ")
-
- if (this.originalCookieHeader) {
- // Don't overwrite existing Cookie header
- this.headers.cookie = this.originalCookieHeader + '; ' + cookieString
- } else {
- this.headers.cookie = cookieString
- }
- }
- this._jar = jar
- return this
-}
-
-
-// Stream API
-Request.prototype.pipe = function (dest, opts) {
- if (this.response) {
- if (this._destdata) {
- throw new Error("You cannot pipe after data has been emitted from the response.")
- } else if (this._ended) {
- throw new Error("You cannot pipe after the response has been ended.")
- } else {
- stream.Stream.prototype.pipe.call(this, dest, opts)
- this.pipeDest(dest)
- return dest
- }
- } else {
- this.dests.push(dest)
- stream.Stream.prototype.pipe.call(this, dest, opts)
- return dest
- }
-}
-Request.prototype.write = function () {
- if (!this._started) this.start()
- return this.req.write.apply(this.req, arguments)
-}
-Request.prototype.end = function (chunk) {
- if (chunk) this.write(chunk)
- if (!this._started) this.start()
- this.req.end()
-}
-Request.prototype.pause = function () {
- if (!this.response) this._paused = true
- else this.response.pause.apply(this.response, arguments)
-}
-Request.prototype.resume = function () {
- if (!this.response) this._paused = false
- else this.response.resume.apply(this.response, arguments)
-}
-Request.prototype.destroy = function () {
- if (!this._ended) this.end()
- else if (this.response) this.response.destroy()
-}
// organize params for patch, post, put, head, del
function initParams(uri, options, callback) {
@@ -1233,6 +58,8 @@ function request (uri, options, callback) {
module.exports = request
+request.Request = Request;
+
request.debug = process.env.NODE_DEBUG && /request/.test(process.env.NODE_DEBUG)
request.initParams = initParams
@@ -1267,10 +94,18 @@ request.defaults = function (options, requester) {
return de
}
+function requester(params) {
+ if(typeof params.options._requester === 'function') {
+ return params.options._requester
+ } else {
+ return request
+ }
+}
+
request.forever = function (agentOptions, optionsArg) {
var options = {}
if (optionsArg) {
- for (option in optionsArg) {
+ for (var option in optionsArg) {
options[option] = optionsArg[option]
}
}
@@ -1283,17 +118,17 @@ request.get = request
request.post = function (uri, options, callback) {
var params = initParams(uri, options, callback)
params.options.method = 'POST'
- return request(params.uri || null, params.options, params.callback)
+ return requester(params)(params.uri || null, params.options, params.callback)
}
request.put = function (uri, options, callback) {
var params = initParams(uri, options, callback)
params.options.method = 'PUT'
- return request(params.uri || null, params.options, params.callback)
+ return requester(params)(params.uri || null, params.options, params.callback)
}
request.patch = function (uri, options, callback) {
var params = initParams(uri, options, callback)
params.options.method = 'PATCH'
- return request(params.uri || null, params.options, params.callback)
+ return requester(params)(params.uri || null, params.options, params.callback)
}
request.head = function (uri, options, callback) {
var params = initParams(uri, options, callback)
@@ -1304,15 +139,13 @@ request.head = function (uri, options, callback) {
params.options.multipart) {
throw new Error("HTTP HEAD requests MUST NOT include a request body.")
}
- return request(params.uri || null, params.options, params.callback)
+
+ return requester(params)(params.uri || null, params.options, params.callback)
}
request.del = function (uri, options, callback) {
var params = initParams(uri, options, callback)
params.options.method = 'DELETE'
- if(typeof params.options._requester === 'function') {
- request = params.options._requester
- }
- return request(params.uri || null, params.options, params.callback)
+ return requester(params)(params.uri || null, params.options, params.callback)
}
request.jar = function () {
return new CookieJar
@@ -1322,44 +155,3 @@ request.cookie = function (str) {
if (typeof str !== 'string') throw new Error("The cookie function only accepts STRING as param")
return new Cookie(str)
}
-
-// Safe toJSON
-
-function getSafe (self, uuid) {
- if (typeof self === 'object' || typeof self === 'function') var safe = {}
- if (Array.isArray(self)) var safe = []
-
- var recurse = []
-
- Object.defineProperty(self, uuid, {})
-
- var attrs = Object.keys(self).filter(function (i) {
- if (i === uuid) return false
- if ( (typeof self[i] !== 'object' && typeof self[i] !== 'function') || self[i] === null) return true
- return !(Object.getOwnPropertyDescriptor(self[i], uuid))
- })
-
-
- for (var i=0;i<attrs.length;i++) {
- if ( (typeof self[attrs[i]] !== 'object' && typeof self[attrs[i]] !== 'function') ||
- self[attrs[i]] === null
- ) {
- safe[attrs[i]] = self[attrs[i]]
- } else {
- recurse.push(attrs[i])
- Object.defineProperty(self[attrs[i]], uuid, {})
- }
- }
-
- for (var i=0;i<recurse.length;i++) {
- safe[recurse[i]] = getSafe(self[recurse[i]], uuid)
- }
-
- return safe
-}
-
-function toJSON () {
- return getSafe(this, '__' + (((1+Math.random())*0x10000)|0).toString(16))
-}
-
-Request.prototype.toJSON = toJSON
diff --git a/deps/npm/node_modules/request/lib/copy.js b/deps/npm/node_modules/request/lib/copy.js
new file mode 100644
index 000000000..56831ff80
--- /dev/null
+++ b/deps/npm/node_modules/request/lib/copy.js
@@ -0,0 +1,8 @@
+module.exports =
+function copy (obj) {
+ var o = {}
+ Object.keys(obj).forEach(function (i) {
+ o[i] = obj[i]
+ })
+ return o
+} \ No newline at end of file
diff --git a/deps/npm/node_modules/request/lib/debug.js b/deps/npm/node_modules/request/lib/debug.js
new file mode 100644
index 000000000..fa27b24b6
--- /dev/null
+++ b/deps/npm/node_modules/request/lib/debug.js
@@ -0,0 +1,7 @@
+var util = require('util')
+
+module.exports =
+function debug () {
+ if (/\brequest\b/.test(process.env.NODE_DEBUG))
+ console.error('REQUEST %s', util.format.apply(util, arguments))
+}
diff --git a/deps/npm/node_modules/request/lib/getSafe.js b/deps/npm/node_modules/request/lib/getSafe.js
new file mode 100644
index 000000000..28e07ea56
--- /dev/null
+++ b/deps/npm/node_modules/request/lib/getSafe.js
@@ -0,0 +1,34 @@
+// Safe toJSON
+module.exports =
+function getSafe (self, uuid) {
+ if (typeof self === 'object' || typeof self === 'function') var safe = {}
+ if (Array.isArray(self)) var safe = []
+
+ var recurse = []
+
+ Object.defineProperty(self, uuid, {})
+
+ var attrs = Object.keys(self).filter(function (i) {
+ if (i === uuid) return false
+ if ( (typeof self[i] !== 'object' && typeof self[i] !== 'function') || self[i] === null) return true
+ return !(Object.getOwnPropertyDescriptor(self[i], uuid))
+ })
+
+
+ for (var i=0;i<attrs.length;i++) {
+ if ( (typeof self[attrs[i]] !== 'object' && typeof self[attrs[i]] !== 'function') ||
+ self[attrs[i]] === null
+ ) {
+ safe[attrs[i]] = self[attrs[i]]
+ } else {
+ recurse.push(attrs[i])
+ Object.defineProperty(self[attrs[i]], uuid, {})
+ }
+ }
+
+ for (var i=0;i<recurse.length;i++) {
+ safe[recurse[i]] = getSafe(self[recurse[i]], uuid)
+ }
+
+ return safe
+} \ No newline at end of file
diff --git a/deps/npm/node_modules/request/lib/optional.js b/deps/npm/node_modules/request/lib/optional.js
new file mode 100644
index 000000000..0c4fe8533
--- /dev/null
+++ b/deps/npm/node_modules/request/lib/optional.js
@@ -0,0 +1,5 @@
+module.exports = function(module) {
+ try {
+ return require(module);
+ } catch (e) {}
+};
diff --git a/deps/npm/node_modules/request/node_modules/aws-sign/index.js b/deps/npm/node_modules/request/node_modules/aws-sign/index.js
deleted file mode 100644
index d3c705c06..000000000
--- a/deps/npm/node_modules/request/node_modules/aws-sign/index.js
+++ /dev/null
@@ -1,202 +0,0 @@
-
-/*!
- * knox - auth
- * Copyright(c) 2010 LearnBoost <dev@learnboost.com>
- * MIT Licensed
- */
-
-/**
- * Module dependencies.
- */
-
-var crypto = require('crypto')
- , parse = require('url').parse
- ;
-
-/**
- * Valid keys.
- */
-
-var keys =
- [ 'acl'
- , 'location'
- , 'logging'
- , 'notification'
- , 'partNumber'
- , 'policy'
- , 'requestPayment'
- , 'torrent'
- , 'uploadId'
- , 'uploads'
- , 'versionId'
- , 'versioning'
- , 'versions'
- , 'website'
- ]
-
-/**
- * Return an "Authorization" header value with the given `options`
- * in the form of "AWS <key>:<signature>"
- *
- * @param {Object} options
- * @return {String}
- * @api private
- */
-
-function authorization (options) {
- return 'AWS ' + options.key + ':' + sign(options)
-}
-
-module.exports = authorization
-module.exports.authorization = authorization
-
-/**
- * Simple HMAC-SHA1 Wrapper
- *
- * @param {Object} options
- * @return {String}
- * @api private
- */
-
-function hmacSha1 (options) {
- return crypto.createHmac('sha1', options.secret).update(options.message).digest('base64')
-}
-
-module.exports.hmacSha1 = hmacSha1
-
-/**
- * Create a base64 sha1 HMAC for `options`.
- *
- * @param {Object} options
- * @return {String}
- * @api private
- */
-
-function sign (options) {
- options.message = stringToSign(options)
- return hmacSha1(options)
-}
-module.exports.sign = sign
-
-/**
- * Create a base64 sha1 HMAC for `options`.
- *
- * Specifically to be used with S3 presigned URLs
- *
- * @param {Object} options
- * @return {String}
- * @api private
- */
-
-function signQuery (options) {
- options.message = queryStringToSign(options)
- return hmacSha1(options)
-}
-module.exports.signQuery= signQuery
-
-/**
- * Return a string for sign() with the given `options`.
- *
- * Spec:
- *
- * <verb>\n
- * <md5>\n
- * <content-type>\n
- * <date>\n
- * [headers\n]
- * <resource>
- *
- * @param {Object} options
- * @return {String}
- * @api private
- */
-
-function stringToSign (options) {
- var headers = options.amazonHeaders || ''
- if (headers) headers += '\n'
- var r =
- [ options.verb
- , options.md5
- , options.contentType
- , options.date.toUTCString()
- , headers + options.resource
- ]
- return r.join('\n')
-}
-module.exports.queryStringToSign = stringToSign
-
-/**
- * Return a string for sign() with the given `options`, but is meant exclusively
- * for S3 presigned URLs
- *
- * Spec:
- *
- * <date>\n
- * <resource>
- *
- * @param {Object} options
- * @return {String}
- * @api private
- */
-
-function queryStringToSign (options){
- return 'GET\n\n\n' + options.date + '\n' + options.resource
-}
-module.exports.queryStringToSign = queryStringToSign
-
-/**
- * Perform the following:
- *
- * - ignore non-amazon headers
- * - lowercase fields
- * - sort lexicographically
- * - trim whitespace between ":"
- * - join with newline
- *
- * @param {Object} headers
- * @return {String}
- * @api private
- */
-
-function canonicalizeHeaders (headers) {
- var buf = []
- , fields = Object.keys(headers)
- ;
- for (var i = 0, len = fields.length; i < len; ++i) {
- var field = fields[i]
- , val = headers[field]
- , field = field.toLowerCase()
- ;
- if (0 !== field.indexOf('x-amz')) continue
- buf.push(field + ':' + val)
- }
- return buf.sort().join('\n')
-}
-module.exports.canonicalizeHeaders = canonicalizeHeaders
-
-/**
- * Perform the following:
- *
- * - ignore non sub-resources
- * - sort lexicographically
- *
- * @param {String} resource
- * @return {String}
- * @api private
- */
-
-function canonicalizeResource (resource) {
- var url = parse(resource, true)
- , path = url.pathname
- , buf = []
- ;
-
- Object.keys(url.query).forEach(function(key){
- if (!~keys.indexOf(key)) return
- var val = '' == url.query[key] ? '' : '=' + encodeURIComponent(url.query[key])
- buf.push(key + val)
- })
-
- return path + (buf.length ? '?' + buf.sort().join('&') : '')
-}
-module.exports.canonicalizeResource = canonicalizeResource
diff --git a/deps/npm/node_modules/request/node_modules/aws-sign/package.json b/deps/npm/node_modules/request/node_modules/aws-sign/package.json
deleted file mode 100644
index 54ebc9814..000000000
--- a/deps/npm/node_modules/request/node_modules/aws-sign/package.json
+++ /dev/null
@@ -1,27 +0,0 @@
-{
- "author": {
- "name": "Mikeal Rogers",
- "email": "mikeal.rogers@gmail.com",
- "url": "http://www.futurealoof.com"
- },
- "name": "aws-sign",
- "description": "AWS signing. Originally pulled from LearnBoost/knox, maintained as vendor in request, now a standalone module.",
- "version": "0.3.0",
- "repository": {
- "url": "https://github.com/mikeal/aws-sign"
- },
- "main": "index.js",
- "dependencies": {},
- "devDependencies": {},
- "optionalDependencies": {},
- "engines": {
- "node": "*"
- },
- "readme": "aws-sign\n========\n\nAWS signing. Originally pulled from LearnBoost/knox, maintained as vendor in request, now a standalone module.\n",
- "readmeFilename": "README.md",
- "bugs": {
- "url": "https://github.com/mikeal/aws-sign/issues"
- },
- "_id": "aws-sign@0.3.0",
- "_from": "aws-sign@~0.3.0"
-}
diff --git a/deps/npm/node_modules/request/node_modules/aws-sign/LICENSE b/deps/npm/node_modules/request/node_modules/aws-sign2/LICENSE
index a4a9aee0c..a4a9aee0c 100644
--- a/deps/npm/node_modules/request/node_modules/aws-sign/LICENSE
+++ b/deps/npm/node_modules/request/node_modules/aws-sign2/LICENSE
diff --git a/deps/npm/node_modules/request/node_modules/aws-sign/README.md b/deps/npm/node_modules/request/node_modules/aws-sign2/README.md
index 763564e0a..763564e0a 100644
--- a/deps/npm/node_modules/request/node_modules/aws-sign/README.md
+++ b/deps/npm/node_modules/request/node_modules/aws-sign2/README.md
diff --git a/deps/npm/node_modules/request/node_modules/aws-sign2/index.js b/deps/npm/node_modules/request/node_modules/aws-sign2/index.js
new file mode 100644
index 000000000..576e49ddf
--- /dev/null
+++ b/deps/npm/node_modules/request/node_modules/aws-sign2/index.js
@@ -0,0 +1,202 @@
+
+/*!
+ * knox - auth
+ * Copyright(c) 2010 LearnBoost <dev@learnboost.com>
+ * MIT Licensed
+ */
+
+/**
+ * Module dependencies.
+ */
+
+var crypto = require('crypto')
+ , parse = require('url').parse
+ ;
+
+/**
+ * Valid keys.
+ */
+
+var keys =
+ [ 'acl'
+ , 'location'
+ , 'logging'
+ , 'notification'
+ , 'partNumber'
+ , 'policy'
+ , 'requestPayment'
+ , 'torrent'
+ , 'uploadId'
+ , 'uploads'
+ , 'versionId'
+ , 'versioning'
+ , 'versions'
+ , 'website'
+ ]
+
+/**
+ * Return an "Authorization" header value with the given `options`
+ * in the form of "AWS <key>:<signature>"
+ *
+ * @param {Object} options
+ * @return {String}
+ * @api private
+ */
+
+function authorization (options) {
+ return 'AWS ' + options.key + ':' + sign(options)
+}
+
+module.exports = authorization
+module.exports.authorization = authorization
+
+/**
+ * Simple HMAC-SHA1 Wrapper
+ *
+ * @param {Object} options
+ * @return {String}
+ * @api private
+ */
+
+function hmacSha1 (options) {
+ return crypto.createHmac('sha1', options.secret).update(options.message).digest('base64')
+}
+
+module.exports.hmacSha1 = hmacSha1
+
+/**
+ * Create a base64 sha1 HMAC for `options`.
+ *
+ * @param {Object} options
+ * @return {String}
+ * @api private
+ */
+
+function sign (options) {
+ options.message = stringToSign(options)
+ return hmacSha1(options)
+}
+module.exports.sign = sign
+
+/**
+ * Create a base64 sha1 HMAC for `options`.
+ *
+ * Specifically to be used with S3 presigned URLs
+ *
+ * @param {Object} options
+ * @return {String}
+ * @api private
+ */
+
+function signQuery (options) {
+ options.message = queryStringToSign(options)
+ return hmacSha1(options)
+}
+module.exports.signQuery= signQuery
+
+/**
+ * Return a string for sign() with the given `options`.
+ *
+ * Spec:
+ *
+ * <verb>\n
+ * <md5>\n
+ * <content-type>\n
+ * <date>\n
+ * [headers\n]
+ * <resource>
+ *
+ * @param {Object} options
+ * @return {String}
+ * @api private
+ */
+
+function stringToSign (options) {
+ var headers = options.amazonHeaders || ''
+ if (headers) headers += '\n'
+ var r =
+ [ options.verb
+ , options.md5
+ , options.contentType
+ , options.date ? options.date.toUTCString() : ''
+ , headers + options.resource
+ ]
+ return r.join('\n')
+}
+module.exports.queryStringToSign = stringToSign
+
+/**
+ * Return a string for sign() with the given `options`, but is meant exclusively
+ * for S3 presigned URLs
+ *
+ * Spec:
+ *
+ * <date>\n
+ * <resource>
+ *
+ * @param {Object} options
+ * @return {String}
+ * @api private
+ */
+
+function queryStringToSign (options){
+ return 'GET\n\n\n' + options.date + '\n' + options.resource
+}
+module.exports.queryStringToSign = queryStringToSign
+
+/**
+ * Perform the following:
+ *
+ * - ignore non-amazon headers
+ * - lowercase fields
+ * - sort lexicographically
+ * - trim whitespace between ":"
+ * - join with newline
+ *
+ * @param {Object} headers
+ * @return {String}
+ * @api private
+ */
+
+function canonicalizeHeaders (headers) {
+ var buf = []
+ , fields = Object.keys(headers)
+ ;
+ for (var i = 0, len = fields.length; i < len; ++i) {
+ var field = fields[i]
+ , val = headers[field]
+ , field = field.toLowerCase()
+ ;
+ if (0 !== field.indexOf('x-amz')) continue
+ buf.push(field + ':' + val)
+ }
+ return buf.sort().join('\n')
+}
+module.exports.canonicalizeHeaders = canonicalizeHeaders
+
+/**
+ * Perform the following:
+ *
+ * - ignore non sub-resources
+ * - sort lexicographically
+ *
+ * @param {String} resource
+ * @return {String}
+ * @api private
+ */
+
+function canonicalizeResource (resource) {
+ var url = parse(resource, true)
+ , path = url.pathname
+ , buf = []
+ ;
+
+ Object.keys(url.query).forEach(function(key){
+ if (!~keys.indexOf(key)) return
+ var val = '' == url.query[key] ? '' : '=' + encodeURIComponent(url.query[key])
+ buf.push(key + val)
+ })
+
+ return path + (buf.length ? '?' + buf.sort().join('&') : '')
+}
+module.exports.canonicalizeResource = canonicalizeResource
diff --git a/deps/npm/node_modules/request/node_modules/aws-sign2/package.json b/deps/npm/node_modules/request/node_modules/aws-sign2/package.json
new file mode 100644
index 000000000..8fc3ff350
--- /dev/null
+++ b/deps/npm/node_modules/request/node_modules/aws-sign2/package.json
@@ -0,0 +1,28 @@
+{
+ "author": {
+ "name": "Mikeal Rogers",
+ "email": "mikeal.rogers@gmail.com",
+ "url": "http://www.futurealoof.com"
+ },
+ "name": "aws-sign2",
+ "description": "AWS signing. Originally pulled from LearnBoost/knox, maintained as vendor in request, now a standalone module.",
+ "version": "0.5.0",
+ "repository": {
+ "url": "https://github.com/mikeal/aws-sign"
+ },
+ "main": "index.js",
+ "dependencies": {},
+ "devDependencies": {},
+ "optionalDependencies": {},
+ "engines": {
+ "node": "*"
+ },
+ "readme": "aws-sign\n========\n\nAWS signing. Originally pulled from LearnBoost/knox, maintained as vendor in request, now a standalone module.\n",
+ "readmeFilename": "README.md",
+ "bugs": {
+ "url": "https://github.com/mikeal/aws-sign/issues"
+ },
+ "homepage": "https://github.com/mikeal/aws-sign",
+ "_id": "aws-sign2@0.5.0",
+ "_from": "aws-sign2@~0.5.0"
+}
diff --git a/deps/npm/node_modules/request/node_modules/cookie-jar/LICENSE b/deps/npm/node_modules/request/node_modules/cookie-jar/LICENSE
deleted file mode 100644
index a4a9aee0c..000000000
--- a/deps/npm/node_modules/request/node_modules/cookie-jar/LICENSE
+++ /dev/null
@@ -1,55 +0,0 @@
-Apache License
-
-Version 2.0, January 2004
-
-http://www.apache.org/licenses/
-
-TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-1. Definitions.
-
-"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.
-
-"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.
-
-"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity.
-
-"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License.
-
-"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.
-
-"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types.
-
-"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below).
-
-"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof.
-
-"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution."
-
-"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work.
-
-2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form.
-
-3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed.
-
-4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions:
-
-You must give any other recipients of the Work or Derivative Works a copy of this License; and
-
-You must cause any modified files to carry prominent notices stating that You changed the files; and
-
-You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and
-
-If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License.
-
-5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions.
-
-6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file.
-
-7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License.
-
-8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages.
-
-9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability.
-
-END OF TERMS AND CONDITIONS \ No newline at end of file
diff --git a/deps/npm/node_modules/request/node_modules/cookie-jar/README.md b/deps/npm/node_modules/request/node_modules/cookie-jar/README.md
deleted file mode 100644
index bcd8f8d44..000000000
--- a/deps/npm/node_modules/request/node_modules/cookie-jar/README.md
+++ /dev/null
@@ -1,4 +0,0 @@
-cookie-jar
-==========
-
-Cookie Jar. Originally pulled from LearnBoost/tobi, maintained as vendor in request, now a standalone module.
diff --git a/deps/npm/node_modules/request/node_modules/cookie-jar/index.js b/deps/npm/node_modules/request/node_modules/cookie-jar/index.js
deleted file mode 100644
index 7d54d940c..000000000
--- a/deps/npm/node_modules/request/node_modules/cookie-jar/index.js
+++ /dev/null
@@ -1,67 +0,0 @@
-/*!
- * Tobi - Cookie
- * Copyright(c) 2010 LearnBoost <dev@learnboost.com>
- * MIT Licensed
- */
-
-/**
- * Module dependencies.
- */
-
-var url = require('url');
-
-/**
- * Initialize a new `Cookie` with the given cookie `str` and `req`.
- *
- * @param {String} str
- * @param {IncomingRequest} req
- * @api private
- */
-
-var Cookie = exports = module.exports = function Cookie(str, req) {
- this.str = str;
-
- // Map the key/val pairs
- str.split(/ *; */).reduce(function(obj, pair){
- var p = pair.indexOf('=');
- var key = p > 0 ? pair.substring(0, p).trim() : pair.trim();
- var lowerCasedKey = key.toLowerCase();
- var value = p > 0 ? pair.substring(p + 1).trim() : true;
-
- if (!obj.name) {
- // First key is the name
- obj.name = key;
- obj.value = value;
- }
- else if (lowerCasedKey === 'httponly') {
- obj.httpOnly = value;
- }
- else {
- obj[lowerCasedKey] = value;
- }
- return obj;
- }, this);
-
- // Expires
- this.expires = this.expires
- ? new Date(this.expires)
- : Infinity;
-
- // Default or trim path
- this.path = this.path
- ? this.path.trim(): req
- ? url.parse(req.url).pathname: '/';
-};
-
-/**
- * Return the original cookie string.
- *
- * @return {String}
- * @api public
- */
-
-Cookie.prototype.toString = function(){
- return this.str;
-};
-
-module.exports.Jar = require('./jar') \ No newline at end of file
diff --git a/deps/npm/node_modules/request/node_modules/cookie-jar/jar.js b/deps/npm/node_modules/request/node_modules/cookie-jar/jar.js
deleted file mode 100644
index 34920e062..000000000
--- a/deps/npm/node_modules/request/node_modules/cookie-jar/jar.js
+++ /dev/null
@@ -1,72 +0,0 @@
-/*!
-* Tobi - CookieJar
-* Copyright(c) 2010 LearnBoost <dev@learnboost.com>
-* MIT Licensed
-*/
-
-/**
-* Module dependencies.
-*/
-
-var url = require('url');
-
-/**
-* Initialize a new `CookieJar`.
-*
-* @api private
-*/
-
-var CookieJar = exports = module.exports = function CookieJar() {
- this.cookies = [];
-};
-
-/**
-* Add the given `cookie` to the jar.
-*
-* @param {Cookie} cookie
-* @api private
-*/
-
-CookieJar.prototype.add = function(cookie){
- this.cookies = this.cookies.filter(function(c){
- // Avoid duplication (same path, same name)
- return !(c.name == cookie.name && c.path == cookie.path);
- });
- this.cookies.push(cookie);
-};
-
-/**
-* Get cookies for the given `req`.
-*
-* @param {IncomingRequest} req
-* @return {Array}
-* @api private
-*/
-
-CookieJar.prototype.get = function(req){
- var path = url.parse(req.url).pathname
- , now = new Date
- , specificity = {};
- return this.cookies.filter(function(cookie){
- if (0 == path.indexOf(cookie.path) && now < cookie.expires
- && cookie.path.length > (specificity[cookie.name] || 0))
- return specificity[cookie.name] = cookie.path.length;
- });
-};
-
-/**
-* Return Cookie string for the given `req`.
-*
-* @param {IncomingRequest} req
-* @return {String}
-* @api private
-*/
-
-CookieJar.prototype.cookieString = function(req){
- var cookies = this.get(req);
- if (cookies.length) {
- return cookies.map(function(cookie){
- return cookie.name + '=' + cookie.value;
- }).join('; ');
- }
-};
diff --git a/deps/npm/node_modules/request/node_modules/cookie-jar/package.json b/deps/npm/node_modules/request/node_modules/cookie-jar/package.json
deleted file mode 100644
index b42df9b80..000000000
--- a/deps/npm/node_modules/request/node_modules/cookie-jar/package.json
+++ /dev/null
@@ -1,30 +0,0 @@
-{
- "author": {
- "name": "Mikeal Rogers",
- "email": "mikeal.rogers@gmail.com",
- "url": "http://www.futurealoof.com"
- },
- "name": "cookie-jar",
- "description": "Cookie Jar. Originally pulled form tobi, maintained as vendor in request, now a standalone module.",
- "version": "0.3.0",
- "repository": {
- "url": "https://github.com/mikeal/cookie-jar"
- },
- "main": "index.js",
- "scripts": {
- "test": "node tests/run.js"
- },
- "dependencies": {},
- "devDependencies": {},
- "optionalDependencies": {},
- "engines": {
- "node": "*"
- },
- "readme": "cookie-jar\n==========\n\nCookie Jar. Originally pulled from LearnBoost/tobi, maintained as vendor in request, now a standalone module.\n",
- "readmeFilename": "README.md",
- "bugs": {
- "url": "https://github.com/mikeal/cookie-jar/issues"
- },
- "_id": "cookie-jar@0.3.0",
- "_from": "cookie-jar@~0.3.0"
-}
diff --git a/deps/npm/node_modules/request/node_modules/cookie-jar/tests/run.js b/deps/npm/node_modules/request/node_modules/cookie-jar/tests/run.js
deleted file mode 100644
index e717f02a3..000000000
--- a/deps/npm/node_modules/request/node_modules/cookie-jar/tests/run.js
+++ /dev/null
@@ -1,40 +0,0 @@
-var spawn = require('child_process').spawn
- , exitCode = 0
- , timeout = 10000
- , fs = require('fs')
- ;
-
-fs.readdir(__dirname, function (e, files) {
- if (e) throw e
-
- var tests = files.filter(function (f) {return f.slice(0, 'test-'.length) === 'test-'})
-
- var next = function () {
- if (tests.length === 0) process.exit(exitCode);
-
- var file = tests.shift()
- console.log(file)
- var proc = spawn('node', [ 'tests/' + file ])
-
- var killed = false
- var t = setTimeout(function () {
- proc.kill()
- exitCode += 1
- console.error(file + ' timeout')
- killed = true
- }, timeout)
-
- proc.stdout.pipe(process.stdout)
- proc.stderr.pipe(process.stderr)
- proc.on('exit', function (code) {
- if (code && !killed) console.error(file + ' failed')
- exitCode += code || 0
- clearTimeout(t)
- next()
- })
- }
- next()
-
-})
-
-
diff --git a/deps/npm/node_modules/request/node_modules/cookie-jar/tests/test-cookie.js b/deps/npm/node_modules/request/node_modules/cookie-jar/tests/test-cookie.js
deleted file mode 100644
index 2cdc835bb..000000000
--- a/deps/npm/node_modules/request/node_modules/cookie-jar/tests/test-cookie.js
+++ /dev/null
@@ -1,29 +0,0 @@
-var Cookie = require('../index')
- , assert = require('assert');
-
-var str = 'Sid="s543qactge.wKE61E01Bs%2BKhzmxrwrnug="; Path=/; httpOnly; Expires=Sat, 04 Dec 2010 23:27:28 GMT';
-var cookie = new Cookie(str);
-
-// test .toString()
-assert.equal(cookie.toString(), str);
-
-// test .path
-assert.equal(cookie.path, '/');
-
-// test .httpOnly
-assert.equal(cookie.httpOnly, true);
-
-// test .name
-assert.equal(cookie.name, 'Sid');
-
-// test .value
-assert.equal(cookie.value, '"s543qactge.wKE61E01Bs%2BKhzmxrwrnug="');
-
-// test .expires
-assert.equal(cookie.expires instanceof Date, true);
-
-// test .path default
-var cookie = new Cookie('foo=bar', { url: 'http://foo.com/bar' });
-assert.equal(cookie.path, '/bar');
-
-console.log('All tests passed');
diff --git a/deps/npm/node_modules/request/node_modules/cookie-jar/tests/test-cookiejar.js b/deps/npm/node_modules/request/node_modules/cookie-jar/tests/test-cookiejar.js
deleted file mode 100644
index a33cfb232..000000000
--- a/deps/npm/node_modules/request/node_modules/cookie-jar/tests/test-cookiejar.js
+++ /dev/null
@@ -1,90 +0,0 @@
-var Cookie = require('../index')
- , Jar = Cookie.Jar
- , assert = require('assert');
-
-function expires(ms) {
- return new Date(Date.now() + ms).toUTCString();
-}
-
-// test .get() expiration
-(function() {
- var jar = new Jar;
- var cookie = new Cookie('sid=1234; path=/; expires=' + expires(1000));
- jar.add(cookie);
- setTimeout(function(){
- var cookies = jar.get({ url: 'http://foo.com/foo' });
- assert.equal(cookies.length, 1);
- assert.equal(cookies[0], cookie);
- setTimeout(function(){
- var cookies = jar.get({ url: 'http://foo.com/foo' });
- assert.equal(cookies.length, 0);
- }, 1000);
- }, 5);
-})();
-
-// test .get() path support
-(function() {
- var jar = new Jar;
- var a = new Cookie('sid=1234; path=/');
- var b = new Cookie('sid=1111; path=/foo/bar');
- var c = new Cookie('sid=2222; path=/');
- jar.add(a);
- jar.add(b);
- jar.add(c);
-
- // should remove the duplicates
- assert.equal(jar.cookies.length, 2);
-
- // same name, same path, latter prevails
- var cookies = jar.get({ url: 'http://foo.com/' });
- assert.equal(cookies.length, 1);
- assert.equal(cookies[0], c);
-
- // same name, diff path, path specifity prevails, latter prevails
- var cookies = jar.get({ url: 'http://foo.com/foo/bar' });
- assert.equal(cookies.length, 1);
- assert.equal(cookies[0], b);
-
- var jar = new Jar;
- var a = new Cookie('sid=1111; path=/foo/bar');
- var b = new Cookie('sid=1234; path=/');
- jar.add(a);
- jar.add(b);
-
- var cookies = jar.get({ url: 'http://foo.com/foo/bar' });
- assert.equal(cookies.length, 1);
- assert.equal(cookies[0], a);
-
- var cookies = jar.get({ url: 'http://foo.com/' });
- assert.equal(cookies.length, 1);
- assert.equal(cookies[0], b);
-
- var jar = new Jar;
- var a = new Cookie('sid=1111; path=/foo/bar');
- var b = new Cookie('sid=3333; path=/foo/bar');
- var c = new Cookie('pid=3333; path=/foo/bar');
- var d = new Cookie('sid=2222; path=/foo/');
- var e = new Cookie('sid=1234; path=/');
- jar.add(a);
- jar.add(b);
- jar.add(c);
- jar.add(d);
- jar.add(e);
-
- var cookies = jar.get({ url: 'http://foo.com/foo/bar' });
- assert.equal(cookies.length, 2);
- assert.equal(cookies[0], b);
- assert.equal(cookies[1], c);
-
- var cookies = jar.get({ url: 'http://foo.com/foo/' });
- assert.equal(cookies.length, 1);
- assert.equal(cookies[0], d);
-
- var cookies = jar.get({ url: 'http://foo.com/' });
- assert.equal(cookies.length, 1);
- assert.equal(cookies[0], e);
-})();
-
-setTimeout(function() {
- console.log('All tests passed');
-}, 1200);
diff --git a/deps/npm/node_modules/request/node_modules/forever-agent/package.json b/deps/npm/node_modules/request/node_modules/forever-agent/package.json
index cf20ed19a..3ef85a9d2 100644
--- a/deps/npm/node_modules/request/node_modules/forever-agent/package.json
+++ b/deps/npm/node_modules/request/node_modules/forever-agent/package.json
@@ -22,6 +22,7 @@
"bugs": {
"url": "https://github.com/mikeal/forever-agent/issues"
},
+ "homepage": "https://github.com/mikeal/forever-agent",
"_id": "forever-agent@0.5.0",
"_from": "forever-agent@~0.5.0"
}
diff --git a/deps/npm/node_modules/request/node_modules/form-data/.npmignore b/deps/npm/node_modules/request/node_modules/form-data/.npmignore
deleted file mode 100644
index 85957343e..000000000
--- a/deps/npm/node_modules/request/node_modules/form-data/.npmignore
+++ /dev/null
@@ -1,5 +0,0 @@
-*.un~
-/node_modules/*
-/test/tmp
-/.idea
-*.iml
diff --git a/deps/npm/node_modules/request/node_modules/form-data/.travis.yml b/deps/npm/node_modules/request/node_modules/form-data/.travis.yml
deleted file mode 100644
index f7e975f5e..000000000
--- a/deps/npm/node_modules/request/node_modules/form-data/.travis.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-language: node_js
-node_js:
- - "0.6"
- - "0.8"
diff --git a/deps/npm/node_modules/request/node_modules/form-data/Makefile b/deps/npm/node_modules/request/node_modules/form-data/Makefile
deleted file mode 100644
index b4ff85a33..000000000
--- a/deps/npm/node_modules/request/node_modules/form-data/Makefile
+++ /dev/null
@@ -1,7 +0,0 @@
-SHELL := /bin/bash
-
-test:
- @./test/run.js
-
-.PHONY: test
-
diff --git a/deps/npm/node_modules/request/node_modules/form-data/Readme.md b/deps/npm/node_modules/request/node_modules/form-data/Readme.md
index db6711285..dc73c463d 100644
--- a/deps/npm/node_modules/request/node_modules/form-data/Readme.md
+++ b/deps/npm/node_modules/request/node_modules/form-data/Readme.md
@@ -1,12 +1,11 @@
-# Form-Data [![Build Status](https://travis-ci.org/alexindigo/node-form-data.png?branch=master)](https://travis-ci.org/alexindigo/node-form-data)
+# Form-Data [![Build Status](https://travis-ci.org/felixge/node-form-data.png?branch=master)](https://travis-ci.org/felixge/node-form-data) [![Dependency Status](https://gemnasium.com/felixge/node-form-data.png)](https://gemnasium.com/felixge/node-form-data)
-A module to create readable `"multipart/form-data"` streams. Can be used to
-submit forms and file uploads to other web applications.
+A module to create readable ```"multipart/form-data"``` streams. Can be used to submit forms and file uploads to other web applications.
-The API of this module is inspired by the
-[XMLHttpRequest-2 FormData Interface][xhr2-fd].
+The API of this module is inspired by the [XMLHttpRequest-2 FormData Interface][xhr2-fd].
[xhr2-fd]: http://dev.w3.org/2006/webapi/XMLHttpRequest-2/Overview.html#the-formdata-interface
+[streams2-thing]: http://nodejs.org/api/stream.html#stream_compatibility_with_older_node_versions
## Install
@@ -57,8 +56,21 @@ form.append('my_buffer', new Buffer(10));
form.append('my_logo', request('http://nodejs.org/images/logo.png'));
```
-In order to submit this form to a web application, you can use node's http
-client interface:
+In order to submit this form to a web application, call ```submit(url, [callback])``` method:
+
+``` javascript
+form.submit('http://example.org/', function(err, res) {
+ // res – response object (http.IncomingMessage) //
+ res.resume(); // for node-0.10.x
+});
+
+```
+
+For more advanced request manipulations ```submit()``` method returns ```http.ClientRequest``` object, or you can choose from one of the alternative submission methods.
+
+### Alternative submission methods
+
+You can use node's http client interface:
``` javascript
var http = require('http');
@@ -104,7 +116,7 @@ form.submit('http://example.com/', function(err, res) {
});
```
-Form-Data can recognize and fetch all the required information from common types of streams (fs.readStream, http.response and mikeal's request), for some other types of streams you'd need to provide "file"-related information manually:
+Form-Data can recognize and fetch all the required information from common types of streams (```fs.readStream```, ```http.response``` and ```mikeal's request```), for some other types of streams you'd need to provide "file"-related information manually:
``` javascript
someModule.stream(function(err, stdout, stderr) {
@@ -137,6 +149,11 @@ form.submit({
});
```
+## Notes
+
+- ```getLengthSync()``` method DOESN'T calculate length for streams, use ```knownLength``` options as workaround.
+- If it feels like FormData hangs after submit and you're on ```node-0.10```, please check [Compatibility with Older Node Versions][streams2-thing]
+
## TODO
- Add new streams (0.10) support and try really hard not to break it for 0.8.x.
diff --git a/deps/npm/node_modules/request/node_modules/form-data/lib/form_data.js b/deps/npm/node_modules/request/node_modules/form-data/lib/form_data.js
index 127b70a99..d1064748b 100644
--- a/deps/npm/node_modules/request/node_modules/form-data/lib/form_data.js
+++ b/deps/npm/node_modules/request/node_modules/form-data/lib/form_data.js
@@ -28,6 +28,14 @@ FormData.prototype.append = function(field, value, options) {
// all that streamy business can't handle numbers
if (typeof value == 'number') value = ''+value;
+ // https://github.com/felixge/node-form-data/issues/38
+ if (util.isArray(value)) {
+ // Please convert your array into string
+ // the way web server expects it
+ this._error(new Error('Arrays are not supported.'));
+ return;
+ }
+
var header = this._multiPartHeader(field, value, options);
var footer = this._multiPartFooter(field, value, options);
@@ -42,7 +50,7 @@ FormData.prototype.append = function(field, value, options) {
FormData.prototype._trackLength = function(header, value, options) {
var valueLength = 0;
- // used w/ trackLengthSync(), when length is known.
+ // used w/ getLengthSync(), when length is known.
// e.g. for streaming directly from a remote server,
// w/ a known file a size, and not wanting to wait for
// incoming file to finish to get its size.
@@ -66,15 +74,11 @@ FormData.prototype._trackLength = function(header, value, options) {
return;
}
+ // no need to bother with the length
+ if (!options.knownLength)
this._lengthRetrievers.push(function(next) {
- // do we already know the size?
- // 0 additional leaves value from getSyncLength()
- if (options.knownLength != null) {
- next(null, 0);
-
- // check if it's local file
- } else if (value.hasOwnProperty('fd')) {
+ if (value.hasOwnProperty('fd')) {
fs.stat(value.path, function(err, stat) {
if (err) {
next(err);
@@ -197,14 +201,27 @@ FormData.prototype._generateBoundary = function() {
this._boundary = boundary;
};
-FormData.prototype.getLengthSync = function() {
- var knownLength = this._overheadLength + this._valueLength;
+// Note: getLengthSync DOESN'T calculate streams length
+// As workaround one can calculate file size manually
+// and add it as knownLength option
+FormData.prototype.getLengthSync = function(debug) {
+ var knownLength = this._overheadLength + this._valueLength;
- if (this._streams.length) {
- knownLength += this._lastBoundary().length;
- }
+ // Don't get confused, there are 3 "internal" streams for each keyval pair
+ // so it basically checks if there is any value added to the form
+ if (this._streams.length) {
+ knownLength += this._lastBoundary().length;
+ }
+
+ // https://github.com/felixge/node-form-data/issues/40
+ if (this._lengthRetrievers.length) {
+ // Some async length retrivers are present
+ // therefore synchronous length calculation is false.
+ // Please use getLength(callback) to get proper length
+ this._error(new Error('Cannot calculate proper length in synchronous way.'));
+ }
- return knownLength;
+ return knownLength;
};
FormData.prototype.getLength = function(cb) {
@@ -234,49 +251,65 @@ FormData.prototype.getLength = function(cb) {
};
FormData.prototype.submit = function(params, cb) {
- this.getLength(function(err, length) {
- var request
- , options
- , defaults = {
- method : 'post',
- port : 80,
- headers: this.getHeaders({'Content-Length': length})
- };
-
- // parse provided url if it's string
- // or treat it as options object
- if (typeof params == 'string') {
- params = parseUrl(params);
-
- options = populate({
- port: params.port,
- path: params.pathname,
- host: params.hostname
- }, defaults);
- }
- else // use custom params
- {
- options = populate(params, defaults);
- }
+ var request
+ , options
+ , defaults = {
+ method : 'post',
+ headers: this.getHeaders()
+ };
- // https if specified, fallback to http in any other case
- if (params.protocol == 'https:') {
- // override default port
- if (!params.port) options.port = 443;
- request = https.request(options);
- } else {
- request = http.request(options);
+ // parse provided url if it's string
+ // or treat it as options object
+ if (typeof params == 'string') {
+ params = parseUrl(params);
+
+ options = populate({
+ port: params.port,
+ path: params.pathname,
+ host: params.hostname
+ }, defaults);
+ }
+ else // use custom params
+ {
+ options = populate(params, defaults);
+ // if no port provided use default one
+ if (!options.port) {
+ options.port = options.protocol == 'https:' ? 443 : 80;
}
+ }
+
+ // https if specified, fallback to http in any other case
+ if (params.protocol == 'https:') {
+ request = https.request(options);
+ } else {
+ request = http.request(options);
+ }
+
+ // get content length and fire away
+ this.getLength(function(err, length) {
+
+ // TODO: Add chunked encoding when no length (if err)
+
+ // add content length
+ request.setHeader('Content-Length', length);
this.pipe(request);
if (cb) {
request.on('error', cb);
request.on('response', cb.bind(this, null));
}
-
- return request;
}.bind(this));
+
+ return request;
+};
+
+FormData.prototype._error = function(err) {
+ if (this.error) return;
+
+ this.error = err;
+ this.pause();
+ this.emit('error', err);
};
/*
diff --git a/deps/npm/node_modules/request/node_modules/form-data/node-form-data.sublime-project b/deps/npm/node_modules/request/node_modules/form-data/node-form-data.sublime-project
deleted file mode 100644
index 38100b87f..000000000
--- a/deps/npm/node_modules/request/node_modules/form-data/node-form-data.sublime-project
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "folders":
- [
- {
- "path": "/Users/alexi/Dropbox/Projects/node-form-data"
- }
- ]
-}
diff --git a/deps/npm/node_modules/request/node_modules/form-data/node-form-data.sublime-workspace b/deps/npm/node_modules/request/node_modules/form-data/node-form-data.sublime-workspace
deleted file mode 100644
index e5eb02dc5..000000000
--- a/deps/npm/node_modules/request/node_modules/form-data/node-form-data.sublime-workspace
+++ /dev/null
@@ -1,673 +0,0 @@
-{
- "auto_complete":
- {
- "selected_items":
- [
- [
- "back",
- "background-clip"
- ],
- [
- "di",
- "display"
- ],
- [
- "background-",
- "background-position"
- ],
- [
- "de",
- "defaults"
- ],
- [
- "no",
- "normal"
- ],
- [
- "line",
- "line-height"
- ]
- ]
- },
- "buffers":
- [
- {
- "file": "test/integration/test-pipe.js",
- "settings":
- {
- "buffer_size": 3625,
- "line_ending": "Unix"
- }
- },
- {
- "file": "package.json",
- "settings":
- {
- "buffer_size": 673,
- "line_ending": "Unix"
- }
- },
- {
- "file": "lib/form_data.js",
- "settings":
- {
- "buffer_size": 7510,
- "line_ending": "Unix"
- }
- },
- {
- "contents": "/*!\n * jQuery JavaScript Library v1.8.3\n * http://jquery.com/\n *\n * Includes Sizzle.js\n * http://sizzlejs.com/\n *\n * Copyright 2012 jQuery Foundation and other contributors\n * Released under the MIT license\n * http://jquery.org/license\n *\n * Date: Tue Nov 13 2012 08:20:33 GMT-0500 (Eastern Standard Time)\n */\n(function( window, undefined ) {\nvar\n // A central reference to the root jQuery(document)\n rootjQuery,\n\n // The deferred used on DOM ready\n readyList,\n\n // Use the correct document accordingly with window argument (sandbox)\n document = window.document,\n location = window.location,\n navigator = window.navigator,\n\n // Map over jQuery in case of overwrite\n _jQuery = window.jQuery,\n\n // Map over the $ in case of overwrite\n _$ = window.$,\n\n // Save a reference to some core methods\n core_push = Array.prototype.push,\n core_slice = Array.prototype.slice,\n core_indexOf = Array.prototype.indexOf,\n core_toString = Object.prototype.toString,\n core_hasOwn = Object.prototype.hasOwnProperty,\n core_trim = String.prototype.trim,\n\n // Define a local copy of jQuery\n jQuery = function( selector, context ) {\n // The jQuery object is actually just the init constructor 'enhanced'\n return new jQuery.fn.init( selector, context, rootjQuery );\n },\n\n // Used for matching numbers\n core_pnum = /[\\-+]?(?:\\d*\\.|)\\d+(?:[eE][\\-+]?\\d+|)/.source,\n\n // Used for detecting and trimming whitespace\n core_rnotwhite = /\\S/,\n core_rspace = /\\s+/,\n\n // Make sure we trim BOM and NBSP (here's looking at you, Safari 5.0 and IE)\n rtrim = /^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g,\n\n // A simple way to check for HTML strings\n // Prioritize #id over <tag> to avoid XSS via location.hash (#9521)\n rquickExpr = /^(?:[^#<]*(<[\\w\\W]+>)[^>]*$|#([\\w\\-]*)$)/,\n\n // Match a standalone tag\n rsingleTag = /^<(\\w+)\\s*\\/?>(?:<\\/\\1>|)$/,\n\n // JSON RegExp\n rvalidchars = /^[\\],:{}\\s]*$/,\n rvalidbraces = /(?:^|:|,)(?:\\s*\\[)+/g,\n rvalidescape = /\\\\(?:[\"\\\\\\/bfnrt]|u[\\da-fA-F]{4})/g,\n rvalidtokens = /\"[^\"\\\\\\r\\n]*\"|true|false|null|-?(?:\\d\\d*\\.|)\\d+(?:[eE][\\-+]?\\d+|)/g,\n\n // Matches dashed string for camelizing\n rmsPrefix = /^-ms-/,\n rdashAlpha = /-([\\da-z])/gi,\n\n // Used by jQuery.camelCase as callback to replace()\n fcamelCase = function( all, letter ) {\n return ( letter + \"\" ).toUpperCase();\n },\n\n // The ready event handler and self cleanup method\n DOMContentLoaded = function() {\n if ( document.addEventListener ) {\n document.removeEventListener( \"DOMContentLoaded\", DOMContentLoaded, false );\n jQuery.ready();\n } else if ( document.readyState === \"complete\" ) {\n // we're here because readyState === \"complete\" in oldIE\n // which is good enough for us to call the dom ready!\n document.detachEvent( \"onreadystatechange\", DOMContentLoaded );\n jQuery.ready();\n }\n },\n\n // [[Class]] -> type pairs\n class2type = {};\n\njQuery.fn = jQuery.prototype = {\n constructor: jQuery,\n init: function( selector, context, rootjQuery ) {\n var match, elem, ret, doc;\n\n // Handle $(\"\"), $(null), $(undefined), $(false)\n if ( !selector ) {\n return this;\n }\n\n // Handle $(DOMElement)\n if ( selector.nodeType ) {\n this.context = this[0] = selector;\n this.length = 1;\n return this;\n }\n\n // Handle HTML strings\n if ( typeof selector === \"string\" ) {\n if ( selector.charAt(0) === \"<\" && selector.charAt( selector.length - 1 ) === \">\" && selector.length >= 3 ) {\n // Assume that strings that start and end with <> are HTML and skip the regex check\n match = [ null, selector, null ];\n\n } else {\n match = rquickExpr.exec( selector );\n }\n\n // Match html or make sure no context is specified for #id\n if ( match && (match[1] || !context) ) {\n\n // HANDLE: $(html) -> $(array)\n if ( match[1] ) {\n context = context instanceof jQuery ? context[0] : context;\n doc = ( context && context.nodeType ? context.ownerDocument || context : document );\n\n // scripts is true for back-compat\n selector = jQuery.parseHTML( match[1], doc, true );\n if ( rsingleTag.test( match[1] ) && jQuery.isPlainObject( context ) ) {\n this.attr.call( selector, context, true );\n }\n\n return jQuery.merge( this, selector );\n\n // HANDLE: $(#id)\n } else {\n elem = document.getElementById( match[2] );\n\n // Check parentNode to catch when Blackberry 4.6 returns\n // nodes that are no longer in the document #6963\n if ( elem && elem.parentNode ) {\n // Handle the case where IE and Opera return items\n // by name instead of ID\n if ( elem.id !== match[2] ) {\n return rootjQuery.find( selector );\n }\n\n // Otherwise, we inject the element directly into the jQuery object\n this.length = 1;\n this[0] = elem;\n }\n\n this.context = document;\n this.selector = selector;\n return this;\n }\n\n // HANDLE: $(expr, $(...))\n } else if ( !context || context.jquery ) {\n return ( context || rootjQuery ).find( selector );\n\n // HANDLE: $(expr, context)\n // (which is just equivalent to: $(context).find(expr)\n } else {\n return this.constructor( context ).find( selector );\n }\n\n // HANDLE: $(function)\n // Shortcut for document ready\n } else if ( jQuery.isFunction( selector ) ) {\n return rootjQuery.ready( selector );\n }\n\n if ( selector.selector !== undefined ) {\n this.selector = selector.selector;\n this.context = selector.context;\n }\n\n return jQuery.makeArray( selector, this );\n },\n\n // Start with an empty selector\n selector: \"\",\n\n // The current version of jQuery being used\n jquery: \"1.8.3\",\n\n // The default length of a jQuery object is 0\n length: 0,\n\n // The number of elements contained in the matched element set\n size: function() {\n return this.length;\n },\n\n toArray: function() {\n return core_slice.call( this );\n },\n\n // Get the Nth element in the matched element set OR\n // Get the whole matched element set as a clean array\n get: function( num ) {\n return num == null ?\n\n // Return a 'clean' array\n this.toArray() :\n\n // Return just the object\n ( num < 0 ? this[ this.length + num ] : this[ num ] );\n },\n\n // Take an array of elements and push it onto the stack\n // (returning the new matched element set)\n pushStack: function( elems, name, selector ) {\n\n // Build a new jQuery matched element set\n var ret = jQuery.merge( this.constructor(), elems );\n\n // Add the old object onto the stack (as a reference)\n ret.prevObject = this;\n\n ret.context = this.context;\n\n if ( name === \"find\" ) {\n ret.selector = this.selector + ( this.selector ? \" \" : \"\" ) + selector;\n } else if ( name ) {\n ret.selector = this.selector + \".\" + name + \"(\" + selector + \")\";\n }\n\n // Return the newly-formed element set\n return ret;\n },\n\n // Execute a callback for every element in the matched set.\n // (You can seed the arguments with an array of args, but this is\n // only used internally.)\n each: function( callback, args ) {\n return jQuery.each( this, callback, args );\n },\n\n ready: function( fn ) {\n // Add the callback\n jQuery.ready.promise().done( fn );\n\n return this;\n },\n\n eq: function( i ) {\n i = +i;\n return i === -1 ?\n this.slice( i ) :\n this.slice( i, i + 1 );\n },\n\n first: function() {\n return this.eq( 0 );\n },\n\n last: function() {\n return this.eq( -1 );\n },\n\n slice: function() {\n return this.pushStack( core_slice.apply( this, arguments ),\n \"slice\", core_slice.call(arguments).join(\",\") );\n },\n\n map: function( callback ) {\n return this.pushStack( jQuery.map(this, function( elem, i ) {\n return callback.call( elem, i, elem );\n }));\n },\n\n end: function() {\n return this.prevObject || this.constructor(null);\n },\n\n // For internal use only.\n // Behaves like an Array's method, not like a jQuery method.\n push: core_push,\n sort: [].sort,\n splice: [].splice\n};\n\n// Give the init function the jQuery prototype for later instantiation\njQuery.fn.init.prototype = jQuery.fn;\n\njQuery.extend = jQuery.fn.extend = function() {\n var options, name, src, copy, copyIsArray, clone,\n target = arguments[0] || {},\n i = 1,\n length = arguments.length,\n deep = false;\n\n // Handle a deep copy situation\n if ( typeof target === \"boolean\" ) {\n deep = target;\n target = arguments[1] || {};\n // skip the boolean and the target\n i = 2;\n }\n\n // Handle case when target is a string or something (possible in deep copy)\n if ( typeof target !== \"object\" && !jQuery.isFunction(target) ) {\n target = {};\n }\n\n // extend jQuery itself if only one argument is passed\n if ( length === i ) {\n target = this;\n --i;\n }\n\n for ( ; i < length; i++ ) {\n // Only deal with non-null/undefined values\n if ( (options = arguments[ i ]) != null ) {\n // Extend the base object\n for ( name in options ) {\n src = target[ name ];\n copy = options[ name ];\n\n // Prevent never-ending loop\n if ( target === copy ) {\n continue;\n }\n\n // Recurse if we're merging plain objects or arrays\n if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) {\n if ( copyIsArray ) {\n copyIsArray = false;\n clone = src && jQuery.isArray(src) ? src : [];\n\n } else {\n clone = src && jQuery.isPlainObject(src) ? src : {};\n }\n\n // Never move original objects, clone them\n target[ name ] = jQuery.extend( deep, clone, copy );\n\n // Don't bring in undefined values\n } else if ( copy !== undefined ) {\n target[ name ] = copy;\n }\n }\n }\n }\n\n // Return the modified object\n return target;\n};\n\njQuery.extend({\n noConflict: function( deep ) {\n if ( window.$ === jQuery ) {\n window.$ = _$;\n }\n\n if ( deep && window.jQuery === jQuery ) {\n window.jQuery = _jQuery;\n }\n\n return jQuery;\n },\n\n // Is the DOM ready to be used? Set to true once it occurs.\n isReady: false,\n\n // A counter to track how many items to wait for before\n // the ready event fires. See #6781\n readyWait: 1,\n\n // Hold (or release) the ready event\n holdReady: function( hold ) {\n if ( hold ) {\n jQuery.readyWait++;\n } else {\n jQuery.ready( true );\n }\n },\n\n // Handle when the DOM is ready\n ready: function( wait ) {\n\n // Abort if there are pending holds or we're already ready\n if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {\n return;\n }\n\n // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).\n if ( !document.body ) {\n return setTimeout( jQuery.ready, 1 );\n }\n\n // Remember that the DOM is ready\n jQuery.isReady = true;\n\n // If a normal DOM Ready event fired, decrement, and wait if need be\n if ( wait !== true && --jQuery.readyWait > 0 ) {\n return;\n }\n\n // If there are functions bound, to execute\n readyList.resolveWith( document, [ jQuery ] );\n\n // Trigger any bound ready events\n if ( jQuery.fn.trigger ) {\n jQuery( document ).trigger(\"ready\").off(\"ready\");\n }\n },\n\n // See test/unit/core.js for details concerning isFunction.\n // Since version 1.3, DOM methods and functions like alert\n // aren't supported. They return false on IE (#2968).\n isFunction: function( obj ) {\n return jQuery.type(obj) === \"function\";\n },\n\n isArray: Array.isArray || function( obj ) {\n return jQuery.type(obj) === \"array\";\n },\n\n isWindow: function( obj ) {\n return obj != null && obj == obj.window;\n },\n\n isNumeric: function( obj ) {\n return !isNaN( parseFloat(obj) ) && isFinite( obj );\n },\n\n type: function( obj ) {\n return obj == null ?\n String( obj ) :\n class2type[ core_toString.call(obj) ] || \"object\";\n },\n\n isPlainObject: function( obj ) {\n // Must be an Object.\n // Because of IE, we also have to check the presence of the constructor property.\n // Make sure that DOM nodes and window objects don't pass through, as well\n if ( !obj || jQuery.type(obj) !== \"object\" || obj.nodeType || jQuery.isWindow( obj ) ) {\n return false;\n }\n\n try {\n // Not own constructor property must be Object\n if ( obj.constructor &&\n !core_hasOwn.call(obj, \"constructor\") &&\n !core_hasOwn.call(obj.constructor.prototype, \"isPrototypeOf\") ) {\n return false;\n }\n } catch ( e ) {\n // IE8,9 Will throw exceptions on certain host objects #9897\n return false;\n }\n\n // Own properties are enumerated firstly, so to speed up,\n // if last one is own, then all properties are own.\n\n var key;\n for ( key in obj ) {}\n\n return key === undefined || core_hasOwn.call( obj, key );\n },\n\n isEmptyObject: function( obj ) {\n var name;\n for ( name in obj ) {\n return false;\n }\n return true;\n },\n\n error: function( msg ) {\n throw new Error( msg );\n },\n\n // data: string of html\n // context (optional): If specified, the fragment will be created in this context, defaults to document\n // scripts (optional): If true, will include scripts passed in the html string\n parseHTML: function( data, context, scripts ) {\n var parsed;\n if ( !data || typeof data !== \"string\" ) {\n return null;\n }\n if ( typeof context === \"boolean\" ) {\n scripts = context;\n context = 0;\n }\n context = context || document;\n\n // Single tag\n if ( (parsed = rsingleTag.exec( data )) ) {\n return [ context.createElement( parsed[1] ) ];\n }\n\n parsed = jQuery.buildFragment( [ data ], context, scripts ? null : [] );\n return jQuery.merge( [],\n (parsed.cacheable ? jQuery.clone( parsed.fragment ) : parsed.fragment).childNodes );\n },\n\n parseJSON: function( data ) {\n if ( !data || typeof data !== \"string\") {\n return null;\n }\n\n // Make sure leading/trailing whitespace is removed (IE can't handle it)\n data = jQuery.trim( data );\n\n // Attempt to parse using the native JSON parser first\n if ( window.JSON && window.JSON.parse ) {\n return window.JSON.parse( data );\n }\n\n // Make sure the incoming data is actual JSON\n // Logic borrowed from http://json.org/json2.js\n if ( rvalidchars.test( data.replace( rvalidescape, \"@\" )\n .replace( rvalidtokens, \"]\" )\n .replace( rvalidbraces, \"\")) ) {\n\n return ( new Function( \"return \" + data ) )();\n\n }\n jQuery.error( \"Invalid JSON: \" + data );\n },\n\n // Cross-browser xml parsing\n parseXML: function( data ) {\n var xml, tmp;\n if ( !data || typeof data !== \"string\" ) {\n return null;\n }\n try {\n if ( window.DOMParser ) { // Standard\n tmp = new DOMParser();\n xml = tmp.parseFromString( data , \"text/xml\" );\n } else { // IE\n xml = new ActiveXObject( \"Microsoft.XMLDOM\" );\n xml.async = \"false\";\n xml.loadXML( data );\n }\n } catch( e ) {\n xml = undefined;\n }\n if ( !xml || !xml.documentElement || xml.getElementsByTagName( \"parsererror\" ).length ) {\n jQuery.error( \"Invalid XML: \" + data );\n }\n return xml;\n },\n\n noop: function() {},\n\n // Evaluates a script in a global context\n // Workarounds based on findings by Jim Driscoll\n // http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context\n globalEval: function( data ) {\n if ( data && core_rnotwhite.test( data ) ) {\n // We use execScript on Internet Explorer\n // We use an anonymous function so that context is window\n // rather than jQuery in Firefox\n ( window.execScript || function( data ) {\n window[ \"eval\" ].call( window, data );\n } )( data );\n }\n },\n\n // Convert dashed to camelCase; used by the css and data modules\n // Microsoft forgot to hump their vendor prefix (#9572)\n camelCase: function( string ) {\n return string.replace( rmsPrefix, \"ms-\" ).replace( rdashAlpha, fcamelCase );\n },\n\n nodeName: function( elem, name ) {\n return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\n },\n\n // args is for internal usage only\n each: function( obj, callback, args ) {\n var name,\n i = 0,\n length = obj.length,\n isObj = length === undefined || jQuery.isFunction( obj );\n\n if ( args ) {\n if ( isObj ) {\n for ( name in obj ) {\n if ( callback.apply( obj[ name ], args ) === false ) {\n break;\n }\n }\n } else {\n for ( ; i < length; ) {\n if ( callback.apply( obj[ i++ ], args ) === false ) {\n break;\n }\n }\n }\n\n // A special, fast, case for the most common use of each\n } else {\n if ( isObj ) {\n for ( name in obj ) {\n if ( callback.call( obj[ name ], name, obj[ name ] ) === false ) {\n break;\n }\n }\n } else {\n for ( ; i < length; ) {\n if ( callback.call( obj[ i ], i, obj[ i++ ] ) === false ) {\n break;\n }\n }\n }\n }\n\n return obj;\n },\n\n // Use native String.trim function wherever possible\n trim: core_trim && !core_trim.call(\"\\uFEFF\\xA0\") ?\n function( text ) {\n return text == null ?\n \"\" :\n core_trim.call( text );\n } :\n\n // Otherwise use our own trimming functionality\n function( text ) {\n return text == null ?\n \"\" :\n ( text + \"\" ).replace( rtrim, \"\" );\n },\n\n // results is for internal usage only\n makeArray: function( arr, results ) {\n var type,\n ret = results || [];\n\n if ( arr != null ) {\n // The window, strings (and functions) also have 'length'\n // Tweaked logic slightly to handle Blackberry 4.7 RegExp issues #6930\n type = jQuery.type( arr );\n\n if ( arr.length == null || type === \"string\" || type === \"function\" || type === \"regexp\" || jQuery.isWindow( arr ) ) {\n core_push.call( ret, arr );\n } else {\n jQuery.merge( ret, arr );\n }\n }\n\n return ret;\n },\n\n inArray: function( elem, arr, i ) {\n var len;\n\n if ( arr ) {\n if ( core_indexOf ) {\n return core_indexOf.call( arr, elem, i );\n }\n\n len = arr.length;\n i = i ? i < 0 ? Math.max( 0, len + i ) : i : 0;\n\n for ( ; i < len; i++ ) {\n // Skip accessing in sparse arrays\n if ( i in arr && arr[ i ] === elem ) {\n return i;\n }\n }\n }\n\n return -1;\n },\n\n merge: function( first, second ) {\n var l = second.length,\n i = first.length,\n j = 0;\n\n if ( typeof l === \"number\" ) {\n for ( ; j < l; j++ ) {\n first[ i++ ] = second[ j ];\n }\n\n } else {\n while ( second[j] !== undefined ) {\n first[ i++ ] = second[ j++ ];\n }\n }\n\n first.length = i;\n\n return first;\n },\n\n grep: function( elems, callback, inv ) {\n var retVal,\n ret = [],\n i = 0,\n length = elems.length;\n inv = !!inv;\n\n // Go through the array, only saving the items\n // that pass the validator function\n for ( ; i < length; i++ ) {\n retVal = !!callback( elems[ i ], i );\n if ( inv !== retVal ) {\n ret.push( elems[ i ] );\n }\n }\n\n return ret;\n },\n\n // arg is for internal usage only\n map: function( elems, callback, arg ) {\n var value, key,\n ret = [],\n i = 0,\n length = elems.length,\n // jquery objects are treated as arrays\n isArray = elems instanceof jQuery || length !== undefined && typeof length === \"number\" && ( ( length > 0 && elems[ 0 ] && elems[ length -1 ] ) || length === 0 || jQuery.isArray( elems ) ) ;\n\n // Go through the array, translating each of the items to their\n if ( isArray ) {\n for ( ; i < length; i++ ) {\n value = callback( elems[ i ], i, arg );\n\n if ( value != null ) {\n ret[ ret.length ] = value;\n }\n }\n\n // Go through every key on the object,\n } else {\n for ( key in elems ) {\n value = callback( elems[ key ], key, arg );\n\n if ( value != null ) {\n ret[ ret.length ] = value;\n }\n }\n }\n\n // Flatten any nested arrays\n return ret.concat.apply( [], ret );\n },\n\n // A global GUID counter for objects\n guid: 1,\n\n // Bind a function to a context, optionally partially applying any\n // arguments.\n proxy: function( fn, context ) {\n var tmp, args, proxy;\n\n if ( typeof context === \"string\" ) {\n tmp = fn[ context ];\n context = fn;\n fn = tmp;\n }\n\n // Quick check to determine if target is callable, in the spec\n // this throws a TypeError, but we will just return undefined.\n if ( !jQuery.isFunction( fn ) ) {\n return undefined;\n }\n\n // Simulated bind\n args = core_slice.call( arguments, 2 );\n proxy = function() {\n return fn.apply( context, args.concat( core_slice.call( arguments ) ) );\n };\n\n // Set the guid of unique handler to the same of original handler, so it can be removed\n proxy.guid = fn.guid = fn.guid || jQuery.guid++;\n\n return proxy;\n },\n\n // Multifunctional method to get and set values of a collection\n // The value/s can optionally be executed if it's a function\n access: function( elems, fn, key, value, chainable, emptyGet, pass ) {\n var exec,\n bulk = key == null,\n i = 0,\n length = elems.length;\n\n // Sets many values\n if ( key && typeof key === \"object\" ) {\n for ( i in key ) {\n jQuery.access( elems, fn, i, key[i], 1, emptyGet, value );\n }\n chainable = 1;\n\n // Sets one value\n } else if ( value !== undefined ) {\n // Optionally, function values get executed if exec is true\n exec = pass === undefined && jQuery.isFunction( value );\n\n if ( bulk ) {\n // Bulk operations only iterate when executing function values\n if ( exec ) {\n exec = fn;\n fn = function( elem, key, value ) {\n return exec.call( jQuery( elem ), value );\n };\n\n // Otherwise they run against the entire set\n } else {\n fn.call( elems, value );\n fn = null;\n }\n }\n\n if ( fn ) {\n for (; i < length; i++ ) {\n fn( elems[i], key, exec ? value.call( elems[i], i, fn( elems[i], key ) ) : value, pass );\n }\n }\n\n chainable = 1;\n }\n\n return chainable ?\n elems :\n\n // Gets\n bulk ?\n fn.call( elems ) :\n length ? fn( elems[0], key ) : emptyGet;\n },\n\n now: function() {\n return ( new Date() ).getTime();\n }\n});\n\njQuery.ready.promise = function( obj ) {\n if ( !readyList ) {\n\n readyList = jQuery.Deferred();\n\n // Catch cases where $(document).ready() is called after the browser event has already occurred.\n // we once tried to use readyState \"interactive\" here, but it caused issues like the one\n // discovered by ChrisS here: http://bugs.jquery.com/ticket/12282#comment:15\n if ( document.readyState === \"complete\" ) {\n // Handle it asynchronously to allow scripts the opportunity to delay ready\n setTimeout( jQuery.ready, 1 );\n\n // Standards-based browsers support DOMContentLoaded\n } else if ( document.addEventListener ) {\n // Use the handy event callback\n document.addEventListener( \"DOMContentLoaded\", DOMContentLoaded, false );\n\n // A fallback to window.onload, that will always work\n window.addEventListener( \"load\", jQuery.ready, false );\n\n // If IE event model is used\n } else {\n // Ensure firing before onload, maybe late but safe also for iframes\n document.attachEvent( \"onreadystatechange\", DOMContentLoaded );\n\n // A fallback to window.onload, that will always work\n window.attachEvent( \"onload\", jQuery.ready );\n\n // If IE and not a frame\n // continually check to see if the document is ready\n var top = false;\n\n try {\n top = window.frameElement == null && document.documentElement;\n } catch(e) {}\n\n if ( top && top.doScroll ) {\n (function doScrollCheck() {\n if ( !jQuery.isReady ) {\n\n try {\n // Use the trick by Diego Perini\n // http://javascript.nwbox.com/IEContentLoaded/\n top.doScroll(\"left\");\n } catch(e) {\n return setTimeout( doScrollCheck, 50 );\n }\n\n // and execute any waiting functions\n jQuery.ready();\n }\n })();\n }\n }\n }\n return readyList.promise( obj );\n};\n\n// Populate the class2type map\njQuery.each(\"Boolean Number String Function Array Date RegExp Object\".split(\" \"), function(i, name) {\n class2type[ \"[object \" + name + \"]\" ] = name.toLowerCase();\n});\n\n// All jQuery objects should point back to these\nrootjQuery = jQuery(document);\n// String to Object options format cache\nvar optionsCache = {};\n\n// Convert String-formatted options into Object-formatted ones and store in cache\nfunction createOptions( options ) {\n var object = optionsCache[ options ] = {};\n jQuery.each( options.split( core_rspace ), function( _, flag ) {\n object[ flag ] = true;\n });\n return object;\n}\n\n/*\n * Create a callback list using the following parameters:\n *\n * options: an optional list of space-separated options that will change how\n * the callback list behaves or a more traditional option object\n *\n * By default a callback list will act like an event callback list and can be\n * \"fired\" multiple times.\n *\n * Possible options:\n *\n * once: will ensure the callback list can only be fired once (like a Deferred)\n *\n * memory: will keep track of previous values and will call any callback added\n * after the list has been fired right away with the latest \"memorized\"\n * values (like a Deferred)\n *\n * unique: will ensure a callback can only be added once (no duplicate in the list)\n *\n * stopOnFalse: interrupt callings when a callback returns false\n *\n */\njQuery.Callbacks = function( options ) {\n\n // Convert options from String-formatted to Object-formatted if needed\n // (we check in cache first)\n options = typeof options === \"string\" ?\n ( optionsCache[ options ] || createOptions( options ) ) :\n jQuery.extend( {}, options );\n\n var // Last fire value (for non-forgettable lists)\n memory,\n // Flag to know if list was already fired\n fired,\n // Flag to know if list is currently firing\n firing,\n // First callback to fire (used internally by add and fireWith)\n firingStart,\n // End of the loop when firing\n firingLength,\n // Index of currently firing callback (modified by remove if needed)\n firingIndex,\n // Actual callback list\n list = [],\n // Stack of fire calls for repeatable lists\n stack = !options.once && [],\n // Fire callbacks\n fire = function( data ) {\n memory = options.memory && data;\n fired = true;\n firingIndex = firingStart || 0;\n firingStart = 0;\n firingLength = list.length;\n firing = true;\n for ( ; list && firingIndex < firingLength; firingIndex++ ) {\n if ( list[ firingIndex ].apply( data[ 0 ], data[ 1 ] ) === false && options.stopOnFalse ) {\n memory = false; // To prevent further calls using add\n break;\n }\n }\n firing = false;\n if ( list ) {\n if ( stack ) {\n if ( stack.length ) {\n fire( stack.shift() );\n }\n } else if ( memory ) {\n list = [];\n } else {\n self.disable();\n }\n }\n },\n // Actual Callbacks object\n self = {\n // Add a callback or a collection of callbacks to the list\n add: function() {\n if ( list ) {\n // First, we save the current length\n var start = list.length;\n (function add( args ) {\n jQuery.each( args, function( _, arg ) {\n var type = jQuery.type( arg );\n if ( type === \"function\" ) {\n if ( !options.unique || !self.has( arg ) ) {\n list.push( arg );\n }\n } else if ( arg && arg.length && type !== \"string\" ) {\n // Inspect recursively\n add( arg );\n }\n });\n })( arguments );\n // Do we need to add the callbacks to the\n // current firing batch?\n if ( firing ) {\n firingLength = list.length;\n // With memory, if we're not firing then\n // we should call right away\n } else if ( memory ) {\n firingStart = start;\n fire( memory );\n }\n }\n return this;\n },\n // Remove a callback from the list\n remove: function() {\n if ( list ) {\n jQuery.each( arguments, function( _, arg ) {\n var index;\n while( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {\n list.splice( index, 1 );\n // Handle firing indexes\n if ( firing ) {\n if ( index <= firingLength ) {\n firingLength--;\n }\n if ( index <= firingIndex ) {\n firingIndex--;\n }\n }\n }\n });\n }\n return this;\n },\n // Control if a given callback is in the list\n has: function( fn ) {\n return jQuery.inArray( fn, list ) > -1;\n },\n // Remove all callbacks from the list\n empty: function() {\n list = [];\n return this;\n },\n // Have the list do nothing anymore\n disable: function() {\n list = stack = memory = undefined;\n return this;\n },\n // Is it disabled?\n disabled: function() {\n return !list;\n },\n // Lock the list in its current state\n lock: function() {\n stack = undefined;\n if ( !memory ) {\n self.disable();\n }\n return this;\n },\n // Is it locked?\n locked: function() {\n return !stack;\n },\n // Call all callbacks with the given context and arguments\n fireWith: function( context, args ) {\n args = args || [];\n args = [ context, args.slice ? args.slice() : args ];\n if ( list && ( !fired || stack ) ) {\n if ( firing ) {\n stack.push( args );\n } else {\n fire( args );\n }\n }\n return this;\n },\n // Call all the callbacks with the given arguments\n fire: function() {\n self.fireWith( this, arguments );\n return this;\n },\n // To know if the callbacks have already been called at least once\n fired: function() {\n return !!fired;\n }\n };\n\n return self;\n};\njQuery.extend({\n\n Deferred: function( func ) {\n var tuples = [\n // action, add listener, listener list, final state\n [ \"resolve\", \"done\", jQuery.Callbacks(\"once memory\"), \"resolved\" ],\n [ \"reject\", \"fail\", jQuery.Callbacks(\"once memory\"), \"rejected\" ],\n [ \"notify\", \"progress\", jQuery.Callbacks(\"memory\") ]\n ],\n state = \"pending\",\n promise = {\n state: function() {\n return state;\n },\n always: function() {\n deferred.done( arguments ).fail( arguments );\n return this;\n },\n then: function( /* fnDone, fnFail, fnProgress */ ) {\n var fns = arguments;\n return jQuery.Deferred(function( newDefer ) {\n jQuery.each( tuples, function( i, tuple ) {\n var action = tuple[ 0 ],\n fn = fns[ i ];\n // deferred[ done | fail | progress ] for forwarding actions to newDefer\n deferred[ tuple[1] ]( jQuery.isFunction( fn ) ?\n function() {\n var returned = fn.apply( this, arguments );\n if ( returned && jQuery.isFunction( returned.promise ) ) {\n returned.promise()\n .done( newDefer.resolve )\n .fail( newDefer.reject )\n .progress( newDefer.notify );\n } else {\n newDefer[ action + \"With\" ]( this === deferred ? newDefer : this, [ returned ] );\n }\n } :\n newDefer[ action ]\n );\n });\n fns = null;\n }).promise();\n },\n // Get a promise for this deferred\n // If obj is provided, the promise aspect is added to the object\n promise: function( obj ) {\n return obj != null ? jQuery.extend( obj, promise ) : promise;\n }\n },\n deferred = {};\n\n // Keep pipe for back-compat\n promise.pipe = promise.then;\n\n // Add list-specific methods\n jQuery.each( tuples, function( i, tuple ) {\n var list = tuple[ 2 ],\n stateString = tuple[ 3 ];\n\n // promise[ done | fail | progress ] = list.add\n promise[ tuple[1] ] = list.add;\n\n // Handle state\n if ( stateString ) {\n list.add(function() {\n // state = [ resolved | rejected ]\n state = stateString;\n\n // [ reject_list | resolve_list ].disable; progress_list.lock\n }, tuples[ i ^ 1 ][ 2 ].disable, tuples[ 2 ][ 2 ].lock );\n }\n\n // deferred[ resolve | reject | notify ] = list.fire\n deferred[ tuple[0] ] = list.fire;\n deferred[ tuple[0] + \"With\" ] = list.fireWith;\n });\n\n // Make the deferred a promise\n promise.promise( deferred );\n\n // Call given func if any\n if ( func ) {\n func.call( deferred, deferred );\n }\n\n // All done!\n return deferred;\n },\n\n // Deferred helper\n when: function( subordinate /* , ..., subordinateN */ ) {\n var i = 0,\n resolveValues = core_slice.call( arguments ),\n length = resolveValues.length,\n\n // the count of uncompleted subordinates\n remaining = length !== 1 || ( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0,\n\n // the master Deferred. If resolveValues consist of only a single Deferred, just use that.\n deferred = remaining === 1 ? subordinate : jQuery.Deferred(),\n\n // Update function for both resolve and progress values\n updateFunc = function( i, contexts, values ) {\n return function( value ) {\n contexts[ i ] = this;\n values[ i ] = arguments.length > 1 ? core_slice.call( arguments ) : value;\n if( values === progressValues ) {\n deferred.notifyWith( contexts, values );\n } else if ( !( --remaining ) ) {\n deferred.resolveWith( contexts, values );\n }\n };\n },\n\n progressValues, progressContexts, resolveContexts;\n\n // add listeners to Deferred subordinates; treat others as resolved\n if ( length > 1 ) {\n progressValues = new Array( length );\n progressContexts = new Array( length );\n resolveContexts = new Array( length );\n for ( ; i < length; i++ ) {\n if ( resolveValues[ i ] && jQuery.isFunction( resolveValues[ i ].promise ) ) {\n resolveValues[ i ].promise()\n .done( updateFunc( i, resolveContexts, resolveValues ) )\n .fail( deferred.reject )\n .progress( updateFunc( i, progressContexts, progressValues ) );\n } else {\n --remaining;\n }\n }\n }\n\n // if we're not waiting on anything, resolve the master\n if ( !remaining ) {\n deferred.resolveWith( resolveContexts, resolveValues );\n }\n\n return deferred.promise();\n }\n});\njQuery.support = (function() {\n\n var support,\n all,\n a,\n select,\n opt,\n input,\n fragment,\n eventName,\n i,\n isSupported,\n clickFn,\n div = document.createElement(\"div\");\n\n // Setup\n div.setAttribute( \"className\", \"t\" );\n div.innerHTML = \" <link/><table></table><a href='/a'>a</a><input type='checkbox'/>\";\n\n // Support tests won't run in some limited or non-browser environments\n all = div.getElementsByTagName(\"*\");\n a = div.getElementsByTagName(\"a\")[ 0 ];\n if ( !all || !a || !all.length ) {\n return {};\n }\n\n // First batch of tests\n select = document.createElement(\"select\");\n opt = select.appendChild( document.createElement(\"option\") );\n input = div.getElementsByTagName(\"input\")[ 0 ];\n\n a.style.cssText = \"top:1px;float:left;opacity:.5\";\n support = {\n // IE strips leading whitespace when .innerHTML is used\n leadingWhitespace: ( div.firstChild.nodeType === 3 ),\n\n // Make sure that tbody elements aren't automatically inserted\n // IE will insert them into empty tables\n tbody: !div.getElementsByTagName(\"tbody\").length,\n\n // Make sure that link elements get serialized correctly by innerHTML\n // This requires a wrapper element in IE\n htmlSerialize: !!div.getElementsByTagName(\"link\").length,\n\n // Get the style information from getAttribute\n // (IE uses .cssText instead)\n style: /top/.test( a.getAttribute(\"style\") ),\n\n // Make sure that URLs aren't manipulated\n // (IE normalizes it by default)\n hrefNormalized: ( a.getAttribute(\"href\") === \"/a\" ),\n\n // Make sure that element opacity exists\n // (IE uses filter instead)\n // Use a regex to work around a WebKit issue. See #5145\n opacity: /^0.5/.test( a.style.opacity ),\n\n // Verify style float existence\n // (IE uses styleFloat instead of cssFloat)\n cssFloat: !!a.style.cssFloat,\n\n // Make sure that if no value is specified for a checkbox\n // that it defaults to \"on\".\n // (WebKit defaults to \"\" instead)\n checkOn: ( input.value === \"on\" ),\n\n // Make sure that a selected-by-default option has a working selected property.\n // (WebKit defaults to false instead of true, IE too, if it's in an optgroup)\n optSelected: opt.selected,\n\n // Test setAttribute on camelCase class. If it works, we need attrFixes when doing get/setAttribute (ie6/7)\n getSetAttribute: div.className !== \"t\",\n\n // Tests for enctype support on a form (#6743)\n enctype: !!document.createElement(\"form\").enctype,\n\n // Makes sure cloning an html5 element does not cause problems\n // Where outerHTML is undefined, this still works\n html5Clone: document.createElement(\"nav\").cloneNode( true ).outerHTML !== \"<:nav></:nav>\",\n\n // jQuery.support.boxModel DEPRECATED in 1.8 since we don't support Quirks Mode\n boxModel: ( document.compatMode === \"CSS1Compat\" ),\n\n // Will be defined later\n submitBubbles: true,\n changeBubbles: true,\n focusinBubbles: false,\n deleteExpando: true,\n noCloneEvent: true,\n inlineBlockNeedsLayout: false,\n shrinkWrapBlocks: false,\n reliableMarginRight: true,\n boxSizingReliable: true,\n pixelPosition: false\n };\n\n // Make sure checked status is properly cloned\n input.checked = true;\n support.noCloneChecked = input.cloneNode( true ).checked;\n\n // Make sure that the options inside disabled selects aren't marked as disabled\n // (WebKit marks them as disabled)\n select.disabled = true;\n support.optDisabled = !opt.disabled;\n\n // Test to see if it's possible to delete an expando from an element\n // Fails in Internet Explorer\n try {\n delete div.test;\n } catch( e ) {\n support.deleteExpando = false;\n }\n\n if ( !div.addEventListener && div.attachEvent && div.fireEvent ) {\n div.attachEvent( \"onclick\", clickFn = function() {\n // Cloning a node shouldn't copy over any\n // bound event handlers (IE does this)\n support.noCloneEvent = false;\n });\n div.cloneNode( true ).fireEvent(\"onclick\");\n div.detachEvent( \"onclick\", clickFn );\n }\n\n // Check if a radio maintains its value\n // after being appended to the DOM\n input = document.createElement(\"input\");\n input.value = \"t\";\n input.setAttribute( \"type\", \"radio\" );\n support.radioValue = input.value === \"t\";\n\n input.setAttribute( \"checked\", \"checked\" );\n\n // #11217 - WebKit loses check when the name is after the checked attribute\n input.setAttribute( \"name\", \"t\" );\n\n div.appendChild( input );\n fragment = document.createDocumentFragment();\n fragment.appendChild( div.lastChild );\n\n // WebKit doesn't clone checked state correctly in fragments\n support.checkClone = fragment.cloneNode( true ).cloneNode( true ).lastChild.checked;\n\n // Check if a disconnected checkbox will retain its checked\n // value of true after appended to the DOM (IE6/7)\n support.appendChecked = input.checked;\n\n fragment.removeChild( input );\n fragment.appendChild( div );\n\n // Technique from Juriy Zaytsev\n // http://perfectionkills.com/detecting-event-support-without-browser-sniffing/\n // We only care about the case where non-standard event systems\n // are used, namely in IE. Short-circuiting here helps us to\n // avoid an eval call (in setAttribute) which can cause CSP\n // to go haywire. See: https://developer.mozilla.org/en/Security/CSP\n if ( div.attachEvent ) {\n for ( i in {\n submit: true,\n change: true,\n focusin: true\n }) {\n eventName = \"on\" + i;\n isSupported = ( eventName in div );\n if ( !isSupported ) {\n div.setAttribute( eventName, \"return;\" );\n isSupported = ( typeof div[ eventName ] === \"function\" );\n }\n support[ i + \"Bubbles\" ] = isSupported;\n }\n }\n\n // Run tests that need a body at doc ready\n jQuery(function() {\n var container, div, tds, marginDiv,\n divReset = \"padding:0;margin:0;border:0;display:block;overflow:hidden;\",\n body = document.getElementsByTagName(\"body\")[0];\n\n if ( !body ) {\n // Return for frameset docs that don't have a body\n return;\n }\n\n container = document.createElement(\"div\");\n container.style.cssText = \"visibility:hidden;border:0;width:0;height:0;position:static;top:0;margin-top:1px\";\n body.insertBefore( container, body.firstChild );\n\n // Construct the test element\n div = document.createElement(\"div\");\n container.appendChild( div );\n\n // Check if table cells still have offsetWidth/Height when they are set\n // to display:none and there are still other visible table cells in a\n // table row; if so, offsetWidth/Height are not reliable for use when\n // determining if an element has been hidden directly using\n // display:none (it is still safe to use offsets if a parent element is\n // hidden; don safety goggles and see bug #4512 for more information).\n // (only IE 8 fails this test)\n div.innerHTML = \"<table><tr><td></td><td>t</td></tr></table>\";\n tds = div.getElementsByTagName(\"td\");\n tds[ 0 ].style.cssText = \"padding:0;margin:0;border:0;display:none\";\n isSupported = ( tds[ 0 ].offsetHeight === 0 );\n\n tds[ 0 ].style.display = \"\";\n tds[ 1 ].style.display = \"none\";\n\n // Check if empty table cells still have offsetWidth/Height\n // (IE <= 8 fail this test)\n support.reliableHiddenOffsets = isSupported && ( tds[ 0 ].offsetHeight === 0 );\n\n // Check box-sizing and margin behavior\n div.innerHTML = \"\";\n div.style.cssText = \"box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;\";\n support.boxSizing = ( div.offsetWidth === 4 );\n support.doesNotIncludeMarginInBodyOffset = ( body.offsetTop !== 1 );\n\n // NOTE: To any future maintainer, we've window.getComputedStyle\n // because jsdom on node.js will break without it.\n if ( window.getComputedStyle ) {\n support.pixelPosition = ( window.getComputedStyle( div, null ) || {} ).top !== \"1%\";\n support.boxSizingReliable = ( window.getComputedStyle( div, null ) || { width: \"4px\" } ).width === \"4px\";\n\n // Check if div with explicit width and no margin-right incorrectly\n // gets computed margin-right based on width of container. For more\n // info see bug #3333\n // Fails in WebKit before Feb 2011 nightlies\n // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right\n marginDiv = document.createElement(\"div\");\n marginDiv.style.cssText = div.style.cssText = divReset;\n marginDiv.style.marginRight = marginDiv.style.width = \"0\";\n div.style.width = \"1px\";\n div.appendChild( marginDiv );\n support.reliableMarginRight =\n !parseFloat( ( window.getComputedStyle( marginDiv, null ) || {} ).marginRight );\n }\n\n if ( typeof div.style.zoom !== \"undefined\" ) {\n // Check if natively block-level elements act like inline-block\n // elements when setting their display to 'inline' and giving\n // them layout\n // (IE < 8 does this)\n div.innerHTML = \"\";\n div.style.cssText = divReset + \"width:1px;padding:1px;display:inline;zoom:1\";\n support.inlineBlockNeedsLayout = ( div.offsetWidth === 3 );\n\n // Check if elements with layout shrink-wrap their children\n // (IE 6 does this)\n div.style.display = \"block\";\n div.style.overflow = \"visible\";\n div.innerHTML = \"<div></div>\";\n div.firstChild.style.width = \"5px\";\n support.shrinkWrapBlocks = ( div.offsetWidth !== 3 );\n\n container.style.zoom = 1;\n }\n\n // Null elements to avoid leaks in IE\n body.removeChild( container );\n container = div = tds = marginDiv = null;\n });\n\n // Null elements to avoid leaks in IE\n fragment.removeChild( div );\n all = a = select = opt = input = fragment = div = null;\n\n return support;\n})();\nvar rbrace = /(?:\\{[\\s\\S]*\\}|\\[[\\s\\S]*\\])$/,\n rmultiDash = /([A-Z])/g;\n\njQuery.extend({\n cache: {},\n\n deletedIds: [],\n\n // Remove at next major release (1.9/2.0)\n uuid: 0,\n\n // Unique for each copy of jQuery on the page\n // Non-digits removed to match rinlinejQuery\n expando: \"jQuery\" + ( jQuery.fn.jquery + Math.random() ).replace( /\\D/g, \"\" ),\n\n // The following elements throw uncatchable exceptions if you\n // attempt to add expando properties to them.\n noData: {\n \"embed\": true,\n // Ban all objects except for Flash (which handle expandos)\n \"object\": \"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000\",\n \"applet\": true\n },\n\n hasData: function( elem ) {\n elem = elem.nodeType ? jQuery.cache[ elem[jQuery.expando] ] : elem[ jQuery.expando ];\n return !!elem && !isEmptyDataObject( elem );\n },\n\n data: function( elem, name, data, pvt /* Internal Use Only */ ) {\n if ( !jQuery.acceptData( elem ) ) {\n return;\n }\n\n var thisCache, ret,\n internalKey = jQuery.expando,\n getByName = typeof name === \"string\",\n\n // We have to handle DOM nodes and JS objects differently because IE6-7\n // can't GC object references properly across the DOM-JS boundary\n isNode = elem.nodeType,\n\n // Only DOM nodes need the global jQuery cache; JS object data is\n // attached directly to the object so GC can occur automatically\n cache = isNode ? jQuery.cache : elem,\n\n // Only defining an ID for JS objects if its cache already exists allows\n // the code to shortcut on the same path as a DOM node with no cache\n id = isNode ? elem[ internalKey ] : elem[ internalKey ] && internalKey;\n\n // Avoid doing any more work than we need to when trying to get data on an\n // object that has no data at all\n if ( (!id || !cache[id] || (!pvt && !cache[id].data)) && getByName && data === undefined ) {\n return;\n }\n\n if ( !id ) {\n // Only DOM nodes need a new unique ID for each element since their data\n // ends up in the global cache\n if ( isNode ) {\n elem[ internalKey ] = id = jQuery.deletedIds.pop() || jQuery.guid++;\n } else {\n id = internalKey;\n }\n }\n\n if ( !cache[ id ] ) {\n cache[ id ] = {};\n\n // Avoids exposing jQuery metadata on plain JS objects when the object\n // is serialized using JSON.stringify\n if ( !isNode ) {\n cache[ id ].toJSON = jQuery.noop;\n }\n }\n\n // An object can be passed to jQuery.data instead of a key/value pair; this gets\n // shallow copied over onto the existing cache\n if ( typeof name === \"object\" || typeof name === \"function\" ) {\n if ( pvt ) {\n cache[ id ] = jQuery.extend( cache[ id ], name );\n } else {\n cache[ id ].data = jQuery.extend( cache[ id ].data, name );\n }\n }\n\n thisCache = cache[ id ];\n\n // jQuery data() is stored in a separate object inside the object's internal data\n // cache in order to avoid key collisions between internal data and user-defined\n // data.\n if ( !pvt ) {\n if ( !thisCache.data ) {\n thisCache.data = {};\n }\n\n thisCache = thisCache.data;\n }\n\n if ( data !== undefined ) {\n thisCache[ jQuery.camelCase( name ) ] = data;\n }\n\n // Check for both converted-to-camel and non-converted data property names\n // If a data property was specified\n if ( getByName ) {\n\n // First Try to find as-is property data\n ret = thisCache[ name ];\n\n // Test for null|undefined property data\n if ( ret == null ) {\n\n // Try to find the camelCased property\n ret = thisCache[ jQuery.camelCase( name ) ];\n }\n } else {\n ret = thisCache;\n }\n\n return ret;\n },\n\n removeData: function( elem, name, pvt /* Internal Use Only */ ) {\n if ( !jQuery.acceptData( elem ) ) {\n return;\n }\n\n var thisCache, i, l,\n\n isNode = elem.nodeType,\n\n // See jQuery.data for more information\n cache = isNode ? jQuery.cache : elem,\n id = isNode ? elem[ jQuery.expando ] : jQuery.expando;\n\n // If there is already no cache entry for this object, there is no\n // purpose in continuing\n if ( !cache[ id ] ) {\n return;\n }\n\n if ( name ) {\n\n thisCache = pvt ? cache[ id ] : cache[ id ].data;\n\n if ( thisCache ) {\n\n // Support array or space separated string names for data keys\n if ( !jQuery.isArray( name ) ) {\n\n // try the string as a key before any manipulation\n if ( name in thisCache ) {\n name = [ name ];\n } else {\n\n // split the camel cased version by spaces unless a key with the spaces exists\n name = jQuery.camelCase( name );\n if ( name in thisCache ) {\n name = [ name ];\n } else {\n name = name.split(\" \");\n }\n }\n }\n\n for ( i = 0, l = name.length; i < l; i++ ) {\n delete thisCache[ name[i] ];\n }\n\n // If there is no data left in the cache, we want to continue\n // and let the cache object itself get destroyed\n if ( !( pvt ? isEmptyDataObject : jQuery.isEmptyObject )( thisCache ) ) {\n return;\n }\n }\n }\n\n // See jQuery.data for more information\n if ( !pvt ) {\n delete cache[ id ].data;\n\n // Don't destroy the parent cache unless the internal data object\n // had been the only thing left in it\n if ( !isEmptyDataObject( cache[ id ] ) ) {\n return;\n }\n }\n\n // Destroy the cache\n if ( isNode ) {\n jQuery.cleanData( [ elem ], true );\n\n // Use delete when supported for expandos or `cache` is not a window per isWindow (#10080)\n } else if ( jQuery.support.deleteExpando || cache != cache.window ) {\n delete cache[ id ];\n\n // When all else fails, null\n } else {\n cache[ id ] = null;\n }\n },\n\n // For internal use only.\n _data: function( elem, name, data ) {\n return jQuery.data( elem, name, data, true );\n },\n\n // A method for determining if a DOM node can handle the data expando\n acceptData: function( elem ) {\n var noData = elem.nodeName && jQuery.noData[ elem.nodeName.toLowerCase() ];\n\n // nodes accept data unless otherwise specified; rejection can be conditional\n return !noData || noData !== true && elem.getAttribute(\"classid\") === noData;\n }\n});\n\njQuery.fn.extend({\n data: function( key, value ) {\n var parts, part, attr, name, l,\n elem = this[0],\n i = 0,\n data = null;\n\n // Gets all values\n if ( key === undefined ) {\n if ( this.length ) {\n data = jQuery.data( elem );\n\n if ( elem.nodeType === 1 && !jQuery._data( elem, \"parsedAttrs\" ) ) {\n attr = elem.attributes;\n for ( l = attr.length; i < l; i++ ) {\n name = attr[i].name;\n\n if ( !name.indexOf( \"data-\" ) ) {\n name = jQuery.camelCase( name.substring(5) );\n\n dataAttr( elem, name, data[ name ] );\n }\n }\n jQuery._data( elem, \"parsedAttrs\", true );\n }\n }\n\n return data;\n }\n\n // Sets multiple values\n if ( typeof key === \"object\" ) {\n return this.each(function() {\n jQuery.data( this, key );\n });\n }\n\n parts = key.split( \".\", 2 );\n parts[1] = parts[1] ? \".\" + parts[1] : \"\";\n part = parts[1] + \"!\";\n\n return jQuery.access( this, function( value ) {\n\n if ( value === undefined ) {\n data = this.triggerHandler( \"getData\" + part, [ parts[0] ] );\n\n // Try to fetch any internally stored data first\n if ( data === undefined && elem ) {\n data = jQuery.data( elem, key );\n data = dataAttr( elem, key, data );\n }\n\n return data === undefined && parts[1] ?\n this.data( parts[0] ) :\n data;\n }\n\n parts[1] = value;\n this.each(function() {\n var self = jQuery( this );\n\n self.triggerHandler( \"setData\" + part, parts );\n jQuery.data( this, key, value );\n self.triggerHandler( \"changeData\" + part, parts );\n });\n }, null, value, arguments.length > 1, null, false );\n },\n\n removeData: function( key ) {\n return this.each(function() {\n jQuery.removeData( this, key );\n });\n }\n});\n\nfunction dataAttr( elem, key, data ) {\n // If nothing was found internally, try to fetch any\n // data from the HTML5 data-* attribute\n if ( data === undefined && elem.nodeType === 1 ) {\n\n var name = \"data-\" + key.replace( rmultiDash, \"-$1\" ).toLowerCase();\n\n data = elem.getAttribute( name );\n\n if ( typeof data === \"string\" ) {\n try {\n data = data === \"true\" ? true :\n data === \"false\" ? false :\n data === \"null\" ? null :\n // Only convert to a number if it doesn't change the string\n +data + \"\" === data ? +data :\n rbrace.test( data ) ? jQuery.parseJSON( data ) :\n data;\n } catch( e ) {}\n\n // Make sure we set the data so it isn't changed later\n jQuery.data( elem, key, data );\n\n } else {\n data = undefined;\n }\n }\n\n return data;\n}\n\n// checks a cache object for emptiness\nfunction isEmptyDataObject( obj ) {\n var name;\n for ( name in obj ) {\n\n // if the public data object is empty, the private is still empty\n if ( name === \"data\" && jQuery.isEmptyObject( obj[name] ) ) {\n continue;\n }\n if ( name !== \"toJSON\" ) {\n return false;\n }\n }\n\n return true;\n}\njQuery.extend({\n queue: function( elem, type, data ) {\n var queue;\n\n if ( elem ) {\n type = ( type || \"fx\" ) + \"queue\";\n queue = jQuery._data( elem, type );\n\n // Speed up dequeue by getting out quickly if this is just a lookup\n if ( data ) {\n if ( !queue || jQuery.isArray(data) ) {\n queue = jQuery._data( elem, type, jQuery.makeArray(data) );\n } else {\n queue.push( data );\n }\n }\n return queue || [];\n }\n },\n\n dequeue: function( elem, type ) {\n type = type || \"fx\";\n\n var queue = jQuery.queue( elem, type ),\n startLength = queue.length,\n fn = queue.shift(),\n hooks = jQuery._queueHooks( elem, type ),\n next = function() {\n jQuery.dequeue( elem, type );\n };\n\n // If the fx queue is dequeued, always remove the progress sentinel\n if ( fn === \"inprogress\" ) {\n fn = queue.shift();\n startLength--;\n }\n\n if ( fn ) {\n\n // Add a progress sentinel to prevent the fx queue from being\n // automatically dequeued\n if ( type === \"fx\" ) {\n queue.unshift( \"inprogress\" );\n }\n\n // clear up the last queue stop function\n delete hooks.stop;\n fn.call( elem, next, hooks );\n }\n\n if ( !startLength && hooks ) {\n hooks.empty.fire();\n }\n },\n\n // not intended for public consumption - generates a queueHooks object, or returns the current one\n _queueHooks: function( elem, type ) {\n var key = type + \"queueHooks\";\n return jQuery._data( elem, key ) || jQuery._data( elem, key, {\n empty: jQuery.Callbacks(\"once memory\").add(function() {\n jQuery.removeData( elem, type + \"queue\", true );\n jQuery.removeData( elem, key, true );\n })\n });\n }\n});\n\njQuery.fn.extend({\n queue: function( type, data ) {\n var setter = 2;\n\n if ( typeof type !== \"string\" ) {\n data = type;\n type = \"fx\";\n setter--;\n }\n\n if ( arguments.length < setter ) {\n return jQuery.queue( this[0], type );\n }\n\n return data === undefined ?\n this :\n this.each(function() {\n var queue = jQuery.queue( this, type, data );\n\n // ensure a hooks for this queue\n jQuery._queueHooks( this, type );\n\n if ( type === \"fx\" && queue[0] !== \"inprogress\" ) {\n jQuery.dequeue( this, type );\n }\n });\n },\n dequeue: function( type ) {\n return this.each(function() {\n jQuery.dequeue( this, type );\n });\n },\n // Based off of the plugin by Clint Helfers, with permission.\n // http://blindsignals.com/index.php/2009/07/jquery-delay/\n delay: function( time, type ) {\n time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;\n type = type || \"fx\";\n\n return this.queue( type, function( next, hooks ) {\n var timeout = setTimeout( next, time );\n hooks.stop = function() {\n clearTimeout( timeout );\n };\n });\n },\n clearQueue: function( type ) {\n return this.queue( type || \"fx\", [] );\n },\n // Get a promise resolved when queues of a certain type\n // are emptied (fx is the type by default)\n promise: function( type, obj ) {\n var tmp,\n count = 1,\n defer = jQuery.Deferred(),\n elements = this,\n i = this.length,\n resolve = function() {\n if ( !( --count ) ) {\n defer.resolveWith( elements, [ elements ] );\n }\n };\n\n if ( typeof type !== \"string\" ) {\n obj = type;\n type = undefined;\n }\n type = type || \"fx\";\n\n while( i-- ) {\n tmp = jQuery._data( elements[ i ], type + \"queueHooks\" );\n if ( tmp && tmp.empty ) {\n count++;\n tmp.empty.add( resolve );\n }\n }\n resolve();\n return defer.promise( obj );\n }\n});\nvar nodeHook, boolHook, fixSpecified,\n rclass = /[\\t\\r\\n]/g,\n rreturn = /\\r/g,\n rtype = /^(?:button|input)$/i,\n rfocusable = /^(?:button|input|object|select|textarea)$/i,\n rclickable = /^a(?:rea|)$/i,\n rboolean = /^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,\n getSetAttribute = jQuery.support.getSetAttribute;\n\njQuery.fn.extend({\n attr: function( name, value ) {\n return jQuery.access( this, jQuery.attr, name, value, arguments.length > 1 );\n },\n\n removeAttr: function( name ) {\n return this.each(function() {\n jQuery.removeAttr( this, name );\n });\n },\n\n prop: function( name, value ) {\n return jQuery.access( this, jQuery.prop, name, value, arguments.length > 1 );\n },\n\n removeProp: function( name ) {\n name = jQuery.propFix[ name ] || name;\n return this.each(function() {\n // try/catch handles cases where IE balks (such as removing a property on window)\n try {\n this[ name ] = undefined;\n delete this[ name ];\n } catch( e ) {}\n });\n },\n\n addClass: function( value ) {\n var classNames, i, l, elem,\n setClass, c, cl;\n\n if ( jQuery.isFunction( value ) ) {\n return this.each(function( j ) {\n jQuery( this ).addClass( value.call(this, j, this.className) );\n });\n }\n\n if ( value && typeof value === \"string\" ) {\n classNames = value.split( core_rspace );\n\n for ( i = 0, l = this.length; i < l; i++ ) {\n elem = this[ i ];\n\n if ( elem.nodeType === 1 ) {\n if ( !elem.className && classNames.length === 1 ) {\n elem.className = value;\n\n } else {\n setClass = \" \" + elem.className + \" \";\n\n for ( c = 0, cl = classNames.length; c < cl; c++ ) {\n if ( setClass.indexOf( \" \" + classNames[ c ] + \" \" ) < 0 ) {\n setClass += classNames[ c ] + \" \";\n }\n }\n elem.className = jQuery.trim( setClass );\n }\n }\n }\n }\n\n return this;\n },\n\n removeClass: function( value ) {\n var removes, className, elem, c, cl, i, l;\n\n if ( jQuery.isFunction( value ) ) {\n return this.each(function( j ) {\n jQuery( this ).removeClass( value.call(this, j, this.className) );\n });\n }\n if ( (value && typeof value === \"string\") || value === undefined ) {\n removes = ( value || \"\" ).split( core_rspace );\n\n for ( i = 0, l = this.length; i < l; i++ ) {\n elem = this[ i ];\n if ( elem.nodeType === 1 && elem.className ) {\n\n className = (\" \" + elem.className + \" \").replace( rclass, \" \" );\n\n // loop over each item in the removal list\n for ( c = 0, cl = removes.length; c < cl; c++ ) {\n // Remove until there is nothing to remove,\n while ( className.indexOf(\" \" + removes[ c ] + \" \") >= 0 ) {\n className = className.replace( \" \" + removes[ c ] + \" \" , \" \" );\n }\n }\n elem.className = value ? jQuery.trim( className ) : \"\";\n }\n }\n }\n\n return this;\n },\n\n toggleClass: function( value, stateVal ) {\n var type = typeof value,\n isBool = typeof stateVal === \"boolean\";\n\n if ( jQuery.isFunction( value ) ) {\n return this.each(function( i ) {\n jQuery( this ).toggleClass( value.call(this, i, this.className, stateVal), stateVal );\n });\n }\n\n return this.each(function() {\n if ( type === \"string\" ) {\n // toggle individual class names\n var className,\n i = 0,\n self = jQuery( this ),\n state = stateVal,\n classNames = value.split( core_rspace );\n\n while ( (className = classNames[ i++ ]) ) {\n // check each className given, space separated list\n state = isBool ? state : !self.hasClass( className );\n self[ state ? \"addClass\" : \"removeClass\" ]( className );\n }\n\n } else if ( type === \"undefined\" || type === \"boolean\" ) {\n if ( this.className ) {\n // store className if set\n jQuery._data( this, \"__className__\", this.className );\n }\n\n // toggle whole className\n this.className = this.className || value === false ? \"\" : jQuery._data( this, \"__className__\" ) || \"\";\n }\n });\n },\n\n hasClass: function( selector ) {\n var className = \" \" + selector + \" \",\n i = 0,\n l = this.length;\n for ( ; i < l; i++ ) {\n if ( this[i].nodeType === 1 && (\" \" + this[i].className + \" \").replace(rclass, \" \").indexOf( className ) >= 0 ) {\n return true;\n }\n }\n\n return false;\n },\n\n val: function( value ) {\n var hooks, ret, isFunction,\n elem = this[0];\n\n if ( !arguments.length ) {\n if ( elem ) {\n hooks = jQuery.valHooks[ elem.type ] || jQuery.valHooks[ elem.nodeName.toLowerCase() ];\n\n if ( hooks && \"get\" in hooks && (ret = hooks.get( elem, \"value\" )) !== undefined ) {\n return ret;\n }\n\n ret = elem.value;\n\n return typeof ret === \"string\" ?\n // handle most common string cases\n ret.replace(rreturn, \"\") :\n // handle cases where value is null/undef or number\n ret == null ? \"\" : ret;\n }\n\n return;\n }\n\n isFunction = jQuery.isFunction( value );\n\n return this.each(function( i ) {\n var val,\n self = jQuery(this);\n\n if ( this.nodeType !== 1 ) {\n return;\n }\n\n if ( isFunction ) {\n val = value.call( this, i, self.val() );\n } else {\n val = value;\n }\n\n // Treat null/undefined as \"\"; convert numbers to string\n if ( val == null ) {\n val = \"\";\n } else if ( typeof val === \"number\" ) {\n val += \"\";\n } else if ( jQuery.isArray( val ) ) {\n val = jQuery.map(val, function ( value ) {\n return value == null ? \"\" : value + \"\";\n });\n }\n\n hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];\n\n // If set returns undefined, fall back to normal setting\n if ( !hooks || !(\"set\" in hooks) || hooks.set( this, val, \"value\" ) === undefined ) {\n this.value = val;\n }\n });\n }\n});\n\njQuery.extend({\n valHooks: {\n option: {\n get: function( elem ) {\n // attributes.value is undefined in Blackberry 4.7 but\n // uses .value. See #6932\n var val = elem.attributes.value;\n return !val || val.specified ? elem.value : elem.text;\n }\n },\n select: {\n get: function( elem ) {\n var value, option,\n options = elem.options,\n index = elem.selectedIndex,\n one = elem.type === \"select-one\" || index < 0,\n values = one ? null : [],\n max = one ? index + 1 : options.length,\n i = index < 0 ?\n max :\n one ? index : 0;\n\n // Loop through all the selected options\n for ( ; i < max; i++ ) {\n option = options[ i ];\n\n // oldIE doesn't update selected after form reset (#2551)\n if ( ( option.selected || i === index ) &&\n // Don't return options that are disabled or in a disabled optgroup\n ( jQuery.support.optDisabled ? !option.disabled : option.getAttribute(\"disabled\") === null ) &&\n ( !option.parentNode.disabled || !jQuery.nodeName( option.parentNode, \"optgroup\" ) ) ) {\n\n // Get the specific value for the option\n value = jQuery( option ).val();\n\n // We don't need an array for one selects\n if ( one ) {\n return value;\n }\n\n // Multi-Selects return an array\n values.push( value );\n }\n }\n\n return values;\n },\n\n set: function( elem, value ) {\n var values = jQuery.makeArray( value );\n\n jQuery(elem).find(\"option\").each(function() {\n this.selected = jQuery.inArray( jQuery(this).val(), values ) >= 0;\n });\n\n if ( !values.length ) {\n elem.selectedIndex = -1;\n }\n return values;\n }\n }\n },\n\n // Unused in 1.8, left in so attrFn-stabbers won't die; remove in 1.9\n attrFn: {},\n\n attr: function( elem, name, value, pass ) {\n var ret, hooks, notxml,\n nType = elem.nodeType;\n\n // don't get/set attributes on text, comment and attribute nodes\n if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {\n return;\n }\n\n if ( pass && jQuery.isFunction( jQuery.fn[ name ] ) ) {\n return jQuery( elem )[ name ]( value );\n }\n\n // Fallback to prop when attributes are not supported\n if ( typeof elem.getAttribute === \"undefined\" ) {\n return jQuery.prop( elem, name, value );\n }\n\n notxml = nType !== 1 || !jQuery.isXMLDoc( elem );\n\n // All attributes are lowercase\n // Grab necessary hook if one is defined\n if ( notxml ) {\n name = name.toLowerCase();\n hooks = jQuery.attrHooks[ name ] || ( rboolean.test( name ) ? boolHook : nodeHook );\n }\n\n if ( value !== undefined ) {\n\n if ( value === null ) {\n jQuery.removeAttr( elem, name );\n return;\n\n } else if ( hooks && \"set\" in hooks && notxml && (ret = hooks.set( elem, value, name )) !== undefined ) {\n return ret;\n\n } else {\n elem.setAttribute( name, value + \"\" );\n return value;\n }\n\n } else if ( hooks && \"get\" in hooks && notxml && (ret = hooks.get( elem, name )) !== null ) {\n return ret;\n\n } else {\n\n ret = elem.getAttribute( name );\n\n // Non-existent attributes return null, we normalize to undefined\n return ret === null ?\n undefined :\n ret;\n }\n },\n\n removeAttr: function( elem, value ) {\n var propName, attrNames, name, isBool,\n i = 0;\n\n if ( value && elem.nodeType === 1 ) {\n\n attrNames = value.split( core_rspace );\n\n for ( ; i < attrNames.length; i++ ) {\n name = attrNames[ i ];\n\n if ( name ) {\n propName = jQuery.propFix[ name ] || name;\n isBool = rboolean.test( name );\n\n // See #9699 for explanation of this approach (setting first, then removal)\n // Do not do this for boolean attributes (see #10870)\n if ( !isBool ) {\n jQuery.attr( elem, name, \"\" );\n }\n elem.removeAttribute( getSetAttribute ? name : propName );\n\n // Set corresponding property to false for boolean attributes\n if ( isBool && propName in elem ) {\n elem[ propName ] = false;\n }\n }\n }\n }\n },\n\n attrHooks: {\n type: {\n set: function( elem, value ) {\n // We can't allow the type property to be changed (since it causes problems in IE)\n if ( rtype.test( elem.nodeName ) && elem.parentNode ) {\n jQuery.error( \"type property can't be changed\" );\n } else if ( !jQuery.support.radioValue && value === \"radio\" && jQuery.nodeName(elem, \"input\") ) {\n // Setting the type on a radio button after the value resets the value in IE6-9\n // Reset value to it's default in case type is set after value\n // This is for element creation\n var val = elem.value;\n elem.setAttribute( \"type\", value );\n if ( val ) {\n elem.value = val;\n }\n return value;\n }\n }\n },\n // Use the value property for back compat\n // Use the nodeHook for button elements in IE6/7 (#1954)\n value: {\n get: function( elem, name ) {\n if ( nodeHook && jQuery.nodeName( elem, \"button\" ) ) {\n return nodeHook.get( elem, name );\n }\n return name in elem ?\n elem.value :\n null;\n },\n set: function( elem, value, name ) {\n if ( nodeHook && jQuery.nodeName( elem, \"button\" ) ) {\n return nodeHook.set( elem, value, name );\n }\n // Does not return so that setAttribute is also used\n elem.value = value;\n }\n }\n },\n\n propFix: {\n tabindex: \"tabIndex\",\n readonly: \"readOnly\",\n \"for\": \"htmlFor\",\n \"class\": \"className\",\n maxlength: \"maxLength\",\n cellspacing: \"cellSpacing\",\n cellpadding: \"cellPadding\",\n rowspan: \"rowSpan\",\n colspan: \"colSpan\",\n usemap: \"useMap\",\n frameborder: \"frameBorder\",\n contenteditable: \"contentEditable\"\n },\n\n prop: function( elem, name, value ) {\n var ret, hooks, notxml,\n nType = elem.nodeType;\n\n // don't get/set properties on text, comment and attribute nodes\n if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {\n return;\n }\n\n notxml = nType !== 1 || !jQuery.isXMLDoc( elem );\n\n if ( notxml ) {\n // Fix name and attach hooks\n name = jQuery.propFix[ name ] || name;\n hooks = jQuery.propHooks[ name ];\n }\n\n if ( value !== undefined ) {\n if ( hooks && \"set\" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) {\n return ret;\n\n } else {\n return ( elem[ name ] = value );\n }\n\n } else {\n if ( hooks && \"get\" in hooks && (ret = hooks.get( elem, name )) !== null ) {\n return ret;\n\n } else {\n return elem[ name ];\n }\n }\n },\n\n propHooks: {\n tabIndex: {\n get: function( elem ) {\n // elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set\n // http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/\n var attributeNode = elem.getAttributeNode(\"tabindex\");\n\n return attributeNode && attributeNode.specified ?\n parseInt( attributeNode.value, 10 ) :\n rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ?\n 0 :\n undefined;\n }\n }\n }\n});\n\n// Hook for boolean attributes\nboolHook = {\n get: function( elem, name ) {\n // Align boolean attributes with corresponding properties\n // Fall back to attribute presence where some booleans are not supported\n var attrNode,\n property = jQuery.prop( elem, name );\n return property === true || typeof property !== \"boolean\" && ( attrNode = elem.getAttributeNode(name) ) && attrNode.nodeValue !== false ?\n name.toLowerCase() :\n undefined;\n },\n set: function( elem, value, name ) {\n var propName;\n if ( value === false ) {\n // Remove boolean attributes when set to false\n jQuery.removeAttr( elem, name );\n } else {\n // value is true since we know at this point it's type boolean and not false\n // Set boolean attributes to the same name and set the DOM property\n propName = jQuery.propFix[ name ] || name;\n if ( propName in elem ) {\n // Only set the IDL specifically if it already exists on the element\n elem[ propName ] = true;\n }\n\n elem.setAttribute( name, name.toLowerCase() );\n }\n return name;\n }\n};\n\n// IE6/7 do not support getting/setting some attributes with get/setAttribute\nif ( !getSetAttribute ) {\n\n fixSpecified = {\n name: true,\n id: true,\n coords: true\n };\n\n // Use this for any attribute in IE6/7\n // This fixes almost every IE6/7 issue\n nodeHook = jQuery.valHooks.button = {\n get: function( elem, name ) {\n var ret;\n ret = elem.getAttributeNode( name );\n return ret && ( fixSpecified[ name ] ? ret.value !== \"\" : ret.specified ) ?\n ret.value :\n undefined;\n },\n set: function( elem, value, name ) {\n // Set the existing or create a new attribute node\n var ret = elem.getAttributeNode( name );\n if ( !ret ) {\n ret = document.createAttribute( name );\n elem.setAttributeNode( ret );\n }\n return ( ret.value = value + \"\" );\n }\n };\n\n // Set width and height to auto instead of 0 on empty string( Bug #8150 )\n // This is for removals\n jQuery.each([ \"width\", \"height\" ], function( i, name ) {\n jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], {\n set: function( elem, value ) {\n if ( value === \"\" ) {\n elem.setAttribute( name, \"auto\" );\n return value;\n }\n }\n });\n });\n\n // Set contenteditable to false on removals(#10429)\n // Setting to empty string throws an error as an invalid value\n jQuery.attrHooks.contenteditable = {\n get: nodeHook.get,\n set: function( elem, value, name ) {\n if ( value === \"\" ) {\n value = \"false\";\n }\n nodeHook.set( elem, value, name );\n }\n };\n}\n\n\n// Some attributes require a special call on IE\nif ( !jQuery.support.hrefNormalized ) {\n jQuery.each([ \"href\", \"src\", \"width\", \"height\" ], function( i, name ) {\n jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], {\n get: function( elem ) {\n var ret = elem.getAttribute( name, 2 );\n return ret === null ? undefined : ret;\n }\n });\n });\n}\n\nif ( !jQuery.support.style ) {\n jQuery.attrHooks.style = {\n get: function( elem ) {\n // Return undefined in the case of empty string\n // Normalize to lowercase since IE uppercases css property names\n return elem.style.cssText.toLowerCase() || undefined;\n },\n set: function( elem, value ) {\n return ( elem.style.cssText = value + \"\" );\n }\n };\n}\n\n// Safari mis-reports the default selected property of an option\n// Accessing the parent's selectedIndex property fixes it\nif ( !jQuery.support.optSelected ) {\n jQuery.propHooks.selected = jQuery.extend( jQuery.propHooks.selected, {\n get: function( elem ) {\n var parent = elem.parentNode;\n\n if ( parent ) {\n parent.selectedIndex;\n\n // Make sure that it also works with optgroups, see #5701\n if ( parent.parentNode ) {\n parent.parentNode.selectedIndex;\n }\n }\n return null;\n }\n });\n}\n\n// IE6/7 call enctype encoding\nif ( !jQuery.support.enctype ) {\n jQuery.propFix.enctype = \"encoding\";\n}\n\n// Radios and checkboxes getter/setter\nif ( !jQuery.support.checkOn ) {\n jQuery.each([ \"radio\", \"checkbox\" ], function() {\n jQuery.valHooks[ this ] = {\n get: function( elem ) {\n // Handle the case where in Webkit \"\" is returned instead of \"on\" if a value isn't specified\n return elem.getAttribute(\"value\") === null ? \"on\" : elem.value;\n }\n };\n });\n}\njQuery.each([ \"radio\", \"checkbox\" ], function() {\n jQuery.valHooks[ this ] = jQuery.extend( jQuery.valHooks[ this ], {\n set: function( elem, value ) {\n if ( jQuery.isArray( value ) ) {\n return ( elem.checked = jQuery.inArray( jQuery(elem).val(), value ) >= 0 );\n }\n }\n });\n});\nvar rformElems = /^(?:textarea|input|select)$/i,\n rtypenamespace = /^([^\\.]*|)(?:\\.(.+)|)$/,\n rhoverHack = /(?:^|\\s)hover(\\.\\S+|)\\b/,\n rkeyEvent = /^key/,\n rmouseEvent = /^(?:mouse|contextmenu)|click/,\n rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,\n hoverHack = function( events ) {\n return jQuery.event.special.hover ? events : events.replace( rhoverHack, \"mouseenter$1 mouseleave$1\" );\n };\n\n/*\n * Helper functions for managing events -- not part of the public interface.\n * Props to Dean Edwards' addEvent library for many of the ideas.\n */\njQuery.event = {\n\n add: function( elem, types, handler, data, selector ) {\n\n var elemData, eventHandle, events,\n t, tns, type, namespaces, handleObj,\n handleObjIn, handlers, special;\n\n // Don't attach events to noData or text/comment nodes (allow plain objects tho)\n if ( elem.nodeType === 3 || elem.nodeType === 8 || !types || !handler || !(elemData = jQuery._data( elem )) ) {\n return;\n }\n\n // Caller can pass in an object of custom data in lieu of the handler\n if ( handler.handler ) {\n handleObjIn = handler;\n handler = handleObjIn.handler;\n selector = handleObjIn.selector;\n }\n\n // Make sure that the handler has a unique ID, used to find/remove it later\n if ( !handler.guid ) {\n handler.guid = jQuery.guid++;\n }\n\n // Init the element's event structure and main handler, if this is the first\n events = elemData.events;\n if ( !events ) {\n elemData.events = events = {};\n }\n eventHandle = elemData.handle;\n if ( !eventHandle ) {\n elemData.handle = eventHandle = function( e ) {\n // Discard the second event of a jQuery.event.trigger() and\n // when an event is called after a page has unloaded\n return typeof jQuery !== \"undefined\" && (!e || jQuery.event.triggered !== e.type) ?\n jQuery.event.dispatch.apply( eventHandle.elem, arguments ) :\n undefined;\n };\n // Add elem as a property of the handle fn to prevent a memory leak with IE non-native events\n eventHandle.elem = elem;\n }\n\n // Handle multiple events separated by a space\n // jQuery(...).bind(\"mouseover mouseout\", fn);\n types = jQuery.trim( hoverHack(types) ).split( \" \" );\n for ( t = 0; t < types.length; t++ ) {\n\n tns = rtypenamespace.exec( types[t] ) || [];\n type = tns[1];\n namespaces = ( tns[2] || \"\" ).split( \".\" ).sort();\n\n // If event changes its type, use the special event handlers for the changed type\n special = jQuery.event.special[ type ] || {};\n\n // If selector defined, determine special event api type, otherwise given type\n type = ( selector ? special.delegateType : special.bindType ) || type;\n\n // Update special based on newly reset type\n special = jQuery.event.special[ type ] || {};\n\n // handleObj is passed to all event handlers\n handleObj = jQuery.extend({\n type: type,\n origType: tns[1],\n data: data,\n handler: handler,\n guid: handler.guid,\n selector: selector,\n needsContext: selector && jQuery.expr.match.needsContext.test( selector ),\n namespace: namespaces.join(\".\")\n }, handleObjIn );\n\n // Init the event handler queue if we're the first\n handlers = events[ type ];\n if ( !handlers ) {\n handlers = events[ type ] = [];\n handlers.delegateCount = 0;\n\n // Only use addEventListener/attachEvent if the special events handler returns false\n if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) {\n // Bind the global event handler to the element\n if ( elem.addEventListener ) {\n elem.addEventListener( type, eventHandle, false );\n\n } else if ( elem.attachEvent ) {\n elem.attachEvent( \"on\" + type, eventHandle );\n }\n }\n }\n\n if ( special.add ) {\n special.add.call( elem, handleObj );\n\n if ( !handleObj.handler.guid ) {\n handleObj.handler.guid = handler.guid;\n }\n }\n\n // Add to the element's handler list, delegates in front\n if ( selector ) {\n handlers.splice( handlers.delegateCount++, 0, handleObj );\n } else {\n handlers.push( handleObj );\n }\n\n // Keep track of which events have ever been used, for event optimization\n jQuery.event.global[ type ] = true;\n }\n\n // Nullify elem to prevent memory leaks in IE\n elem = null;\n },\n\n global: {},\n\n // Detach an event or set of events from an element\n remove: function( elem, types, handler, selector, mappedTypes ) {\n\n var t, tns, type, origType, namespaces, origCount,\n j, events, special, eventType, handleObj,\n elemData = jQuery.hasData( elem ) && jQuery._data( elem );\n\n if ( !elemData || !(events = elemData.events) ) {\n return;\n }\n\n // Once for each type.namespace in types; type may be omitted\n types = jQuery.trim( hoverHack( types || \"\" ) ).split(\" \");\n for ( t = 0; t < types.length; t++ ) {\n tns = rtypenamespace.exec( types[t] ) || [];\n type = origType = tns[1];\n namespaces = tns[2];\n\n // Unbind all events (on this namespace, if provided) for the element\n if ( !type ) {\n for ( type in events ) {\n jQuery.event.remove( elem, type + types[ t ], handler, selector, true );\n }\n continue;\n }\n\n special = jQuery.event.special[ type ] || {};\n type = ( selector? special.delegateType : special.bindType ) || type;\n eventType = events[ type ] || [];\n origCount = eventType.length;\n namespaces = namespaces ? new RegExp(\"(^|\\\\.)\" + namespaces.split(\".\").sort().join(\"\\\\.(?:.*\\\\.|)\") + \"(\\\\.|$)\") : null;\n\n // Remove matching events\n for ( j = 0; j < eventType.length; j++ ) {\n handleObj = eventType[ j ];\n\n if ( ( mappedTypes || origType === handleObj.origType ) &&\n ( !handler || handler.guid === handleObj.guid ) &&\n ( !namespaces || namespaces.test( handleObj.namespace ) ) &&\n ( !selector || selector === handleObj.selector || selector === \"**\" && handleObj.selector ) ) {\n eventType.splice( j--, 1 );\n\n if ( handleObj.selector ) {\n eventType.delegateCount--;\n }\n if ( special.remove ) {\n special.remove.call( elem, handleObj );\n }\n }\n }\n\n // Remove generic event handler if we removed something and no more handlers exist\n // (avoids potential for endless recursion during removal of special event handlers)\n if ( eventType.length === 0 && origCount !== eventType.length ) {\n if ( !special.teardown || special.teardown.call( elem, namespaces, elemData.handle ) === false ) {\n jQuery.removeEvent( elem, type, elemData.handle );\n }\n\n delete events[ type ];\n }\n }\n\n // Remove the expando if it's no longer used\n if ( jQuery.isEmptyObject( events ) ) {\n delete elemData.handle;\n\n // removeData also checks for emptiness and clears the expando if empty\n // so use it instead of delete\n jQuery.removeData( elem, \"events\", true );\n }\n },\n\n // Events that are safe to short-circuit if no handlers are attached.\n // Native DOM events should not be added, they may have inline handlers.\n customEvent: {\n \"getData\": true,\n \"setData\": true,\n \"changeData\": true\n },\n\n trigger: function( event, data, elem, onlyHandlers ) {\n // Don't do events on text and comment nodes\n if ( elem && (elem.nodeType === 3 || elem.nodeType === 8) ) {\n return;\n }\n\n // Event object or event type\n var cache, exclusive, i, cur, old, ontype, special, handle, eventPath, bubbleType,\n type = event.type || event,\n namespaces = [];\n\n // focus/blur morphs to focusin/out; ensure we're not firing them right now\n if ( rfocusMorph.test( type + jQuery.event.triggered ) ) {\n return;\n }\n\n if ( type.indexOf( \"!\" ) >= 0 ) {\n // Exclusive events trigger only for the exact event (no namespaces)\n type = type.slice(0, -1);\n exclusive = true;\n }\n\n if ( type.indexOf( \".\" ) >= 0 ) {\n // Namespaced trigger; create a regexp to match event type in handle()\n namespaces = type.split(\".\");\n type = namespaces.shift();\n namespaces.sort();\n }\n\n if ( (!elem || jQuery.event.customEvent[ type ]) && !jQuery.event.global[ type ] ) {\n // No jQuery handlers for this event type, and it can't have inline handlers\n return;\n }\n\n // Caller can pass in an Event, Object, or just an event type string\n event = typeof event === \"object\" ?\n // jQuery.Event object\n event[ jQuery.expando ] ? event :\n // Object literal\n new jQuery.Event( type, event ) :\n // Just the event type (string)\n new jQuery.Event( type );\n\n event.type = type;\n event.isTrigger = true;\n event.exclusive = exclusive;\n event.namespace = namespaces.join( \".\" );\n event.namespace_re = event.namespace? new RegExp(\"(^|\\\\.)\" + namespaces.join(\"\\\\.(?:.*\\\\.|)\") + \"(\\\\.|$)\") : null;\n ontype = type.indexOf( \":\" ) < 0 ? \"on\" + type : \"\";\n\n // Handle a global trigger\n if ( !elem ) {\n\n // TODO: Stop taunting the data cache; remove global events and always attach to document\n cache = jQuery.cache;\n for ( i in cache ) {\n if ( cache[ i ].events && cache[ i ].events[ type ] ) {\n jQuery.event.trigger( event, data, cache[ i ].handle.elem, true );\n }\n }\n return;\n }\n\n // Clean up the event in case it is being reused\n event.result = undefined;\n if ( !event.target ) {\n event.target = elem;\n }\n\n // Clone any incoming data and prepend the event, creating the handler arg list\n data = data != null ? jQuery.makeArray( data ) : [];\n data.unshift( event );\n\n // Allow special events to draw outside the lines\n special = jQuery.event.special[ type ] || {};\n if ( special.trigger && special.trigger.apply( elem, data ) === false ) {\n return;\n }\n\n // Determine event propagation path in advance, per W3C events spec (#9951)\n // Bubble up to document, then to window; watch for a global ownerDocument var (#9724)\n eventPath = [[ elem, special.bindType || type ]];\n if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) {\n\n bubbleType = special.delegateType || type;\n cur = rfocusMorph.test( bubbleType + type ) ? elem : elem.parentNode;\n for ( old = elem; cur; cur = cur.parentNode ) {\n eventPath.push([ cur, bubbleType ]);\n old = cur;\n }\n\n // Only add window if we got to document (e.g., not plain obj or detached DOM)\n if ( old === (elem.ownerDocument || document) ) {\n eventPath.push([ old.defaultView || old.parentWindow || window, bubbleType ]);\n }\n }\n\n // Fire handlers on the event path\n for ( i = 0; i < eventPath.length && !event.isPropagationStopped(); i++ ) {\n\n cur = eventPath[i][0];\n event.type = eventPath[i][1];\n\n handle = ( jQuery._data( cur, \"events\" ) || {} )[ event.type ] && jQuery._data( cur, \"handle\" );\n if ( handle ) {\n handle.apply( cur, data );\n }\n // Note that this is a bare JS function and not a jQuery handler\n handle = ontype && cur[ ontype ];\n if ( handle && jQuery.acceptData( cur ) && handle.apply && handle.apply( cur, data ) === false ) {\n event.preventDefault();\n }\n }\n event.type = type;\n\n // If nobody prevented the default action, do it now\n if ( !onlyHandlers && !event.isDefaultPrevented() ) {\n\n if ( (!special._default || special._default.apply( elem.ownerDocument, data ) === false) &&\n !(type === \"click\" && jQuery.nodeName( elem, \"a\" )) && jQuery.acceptData( elem ) ) {\n\n // Call a native DOM method on the target with the same name name as the event.\n // Can't use an .isFunction() check here because IE6/7 fails that test.\n // Don't do default actions on window, that's where global variables be (#6170)\n // IE<9 dies on focus/blur to hidden element (#1486)\n if ( ontype && elem[ type ] && ((type !== \"focus\" && type !== \"blur\") || event.target.offsetWidth !== 0) && !jQuery.isWindow( elem ) ) {\n\n // Don't re-trigger an onFOO event when we call its FOO() method\n old = elem[ ontype ];\n\n if ( old ) {\n elem[ ontype ] = null;\n }\n\n // Prevent re-triggering of the same event, since we already bubbled it above\n jQuery.event.triggered = type;\n elem[ type ]();\n jQuery.event.triggered = undefined;\n\n if ( old ) {\n elem[ ontype ] = old;\n }\n }\n }\n }\n\n return event.result;\n },\n\n dispatch: function( event ) {\n\n // Make a writable jQuery.Event from the native event object\n event = jQuery.event.fix( event || window.event );\n\n var i, j, cur, ret, selMatch, matched, matches, handleObj, sel, related,\n handlers = ( (jQuery._data( this, \"events\" ) || {} )[ event.type ] || []),\n delegateCount = handlers.delegateCount,\n args = core_slice.call( arguments ),\n run_all = !event.exclusive && !event.namespace,\n special = jQuery.event.special[ event.type ] || {},\n handlerQueue = [];\n\n // Use the fix-ed jQuery.Event rather than the (read-only) native event\n args[0] = event;\n event.delegateTarget = this;\n\n // Call the preDispatch hook for the mapped type, and let it bail if desired\n if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {\n return;\n }\n\n // Determine handlers that should run if there are delegated events\n // Avoid non-left-click bubbling in Firefox (#3861)\n if ( delegateCount && !(event.button && event.type === \"click\") ) {\n\n for ( cur = event.target; cur != this; cur = cur.parentNode || this ) {\n\n // Don't process clicks (ONLY) on disabled elements (#6911, #8165, #11382, #11764)\n if ( cur.disabled !== true || event.type !== \"click\" ) {\n selMatch = {};\n matches = [];\n for ( i = 0; i < delegateCount; i++ ) {\n handleObj = handlers[ i ];\n sel = handleObj.selector;\n\n if ( selMatch[ sel ] === undefined ) {\n selMatch[ sel ] = handleObj.needsContext ?\n jQuery( sel, this ).index( cur ) >= 0 :\n jQuery.find( sel, this, null, [ cur ] ).length;\n }\n if ( selMatch[ sel ] ) {\n matches.push( handleObj );\n }\n }\n if ( matches.length ) {\n handlerQueue.push({ elem: cur, matches: matches });\n }\n }\n }\n }\n\n // Add the remaining (directly-bound) handlers\n if ( handlers.length > delegateCount ) {\n handlerQueue.push({ elem: this, matches: handlers.slice( delegateCount ) });\n }\n\n // Run delegates first; they may want to stop propagation beneath us\n for ( i = 0; i < handlerQueue.length && !event.isPropagationStopped(); i++ ) {\n matched = handlerQueue[ i ];\n event.currentTarget = matched.elem;\n\n for ( j = 0; j < matched.matches.length && !event.isImmediatePropagationStopped(); j++ ) {\n handleObj = matched.matches[ j ];\n\n // Triggered event must either 1) be non-exclusive and have no namespace, or\n // 2) have namespace(s) a subset or equal to those in the bound event (both can have no namespace).\n if ( run_all || (!event.namespace && !handleObj.namespace) || event.namespace_re && event.namespace_re.test( handleObj.namespace ) ) {\n\n event.data = handleObj.data;\n event.handleObj = handleObj;\n\n ret = ( (jQuery.event.special[ handleObj.origType ] || {}).handle || handleObj.handler )\n .apply( matched.elem, args );\n\n if ( ret !== undefined ) {\n event.result = ret;\n if ( ret === false ) {\n event.preventDefault();\n event.stopPropagation();\n }\n }\n }\n }\n }\n\n // Call the postDispatch hook for the mapped type\n if ( special.postDispatch ) {\n special.postDispatch.call( this, event );\n }\n\n return event.result;\n },\n\n // Includes some event props shared by KeyEvent and MouseEvent\n // *** attrChange attrName relatedNode srcElement are not normalized, non-W3C, deprecated, will be removed in 1.8 ***\n props: \"attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which\".split(\" \"),\n\n fixHooks: {},\n\n keyHooks: {\n props: \"char charCode key keyCode\".split(\" \"),\n filter: function( event, original ) {\n\n // Add which for key events\n if ( event.which == null ) {\n event.which = original.charCode != null ? original.charCode : original.keyCode;\n }\n\n return event;\n }\n },\n\n mouseHooks: {\n props: \"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement\".split(\" \"),\n filter: function( event, original ) {\n var eventDoc, doc, body,\n button = original.button,\n fromElement = original.fromElement;\n\n // Calculate pageX/Y if missing and clientX/Y available\n if ( event.pageX == null && original.clientX != null ) {\n eventDoc = event.target.ownerDocument || document;\n doc = eventDoc.documentElement;\n body = eventDoc.body;\n\n event.pageX = original.clientX + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - ( doc && doc.clientLeft || body && body.clientLeft || 0 );\n event.pageY = original.clientY + ( doc && doc.scrollTop || body && body.scrollTop || 0 ) - ( doc && doc.clientTop || body && body.clientTop || 0 );\n }\n\n // Add relatedTarget, if necessary\n if ( !event.relatedTarget && fromElement ) {\n event.relatedTarget = fromElement === event.target ? original.toElement : fromElement;\n }\n\n // Add which for click: 1 === left; 2 === middle; 3 === right\n // Note: button is not normalized, so don't use it\n if ( !event.which && button !== undefined ) {\n event.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) );\n }\n\n return event;\n }\n },\n\n fix: function( event ) {\n if ( event[ jQuery.expando ] ) {\n return event;\n }\n\n // Create a writable copy of the event object and normalize some properties\n var i, prop,\n originalEvent = event,\n fixHook = jQuery.event.fixHooks[ event.type ] || {},\n copy = fixHook.props ? this.props.concat( fixHook.props ) : this.props;\n\n event = jQuery.Event( originalEvent );\n\n for ( i = copy.length; i; ) {\n prop = copy[ --i ];\n event[ prop ] = originalEvent[ prop ];\n }\n\n // Fix target property, if necessary (#1925, IE 6/7/8 & Safari2)\n if ( !event.target ) {\n event.target = originalEvent.srcElement || document;\n }\n\n // Target should not be a text node (#504, Safari)\n if ( event.target.nodeType === 3 ) {\n event.target = event.target.parentNode;\n }\n\n // For mouse/key events, metaKey==false if it's undefined (#3368, #11328; IE6/7/8)\n event.metaKey = !!event.metaKey;\n\n return fixHook.filter? fixHook.filter( event, originalEvent ) : event;\n },\n\n special: {\n load: {\n // Prevent triggered image.load events from bubbling to window.load\n noBubble: true\n },\n\n focus: {\n delegateType: \"focusin\"\n },\n blur: {\n delegateType: \"focusout\"\n },\n\n beforeunload: {\n setup: function( data, namespaces, eventHandle ) {\n // We only want to do this special case on windows\n if ( jQuery.isWindow( this ) ) {\n this.onbeforeunload = eventHandle;\n }\n },\n\n teardown: function( namespaces, eventHandle ) {\n if ( this.onbeforeunload === eventHandle ) {\n this.onbeforeunload = null;\n }\n }\n }\n },\n\n simulate: function( type, elem, event, bubble ) {\n // Piggyback on a donor event to simulate a different one.\n // Fake originalEvent to avoid donor's stopPropagation, but if the\n // simulated event prevents default then we do the same on the donor.\n var e = jQuery.extend(\n new jQuery.Event(),\n event,\n { type: type,\n isSimulated: true,\n originalEvent: {}\n }\n );\n if ( bubble ) {\n jQuery.event.trigger( e, null, elem );\n } else {\n jQuery.event.dispatch.call( elem, e );\n }\n if ( e.isDefaultPrevented() ) {\n event.preventDefault();\n }\n }\n};\n\n// Some plugins are using, but it's undocumented/deprecated and will be removed.\n// The 1.7 special event interface should provide all the hooks needed now.\njQuery.event.handle = jQuery.event.dispatch;\n\njQuery.removeEvent = document.removeEventListener ?\n function( elem, type, handle ) {\n if ( elem.removeEventListener ) {\n elem.removeEventListener( type, handle, false );\n }\n } :\n function( elem, type, handle ) {\n var name = \"on\" + type;\n\n if ( elem.detachEvent ) {\n\n // #8545, #7054, preventing memory leaks for custom events in IE6-8\n // detachEvent needed property on element, by name of that event, to properly expose it to GC\n if ( typeof elem[ name ] === \"undefined\" ) {\n elem[ name ] = null;\n }\n\n elem.detachEvent( name, handle );\n }\n };\n\njQuery.Event = function( src, props ) {\n // Allow instantiation without the 'new' keyword\n if ( !(this instanceof jQuery.Event) ) {\n return new jQuery.Event( src, props );\n }\n\n // Event object\n if ( src && src.type ) {\n this.originalEvent = src;\n this.type = src.type;\n\n // Events bubbling up the document may have been marked as prevented\n // by a handler lower down the tree; reflect the correct value.\n this.isDefaultPrevented = ( src.defaultPrevented || src.returnValue === false ||\n src.getPreventDefault && src.getPreventDefault() ) ? returnTrue : returnFalse;\n\n // Event type\n } else {\n this.type = src;\n }\n\n // Put explicitly provided properties onto the event object\n if ( props ) {\n jQuery.extend( this, props );\n }\n\n // Create a timestamp if incoming event doesn't have one\n this.timeStamp = src && src.timeStamp || jQuery.now();\n\n // Mark it as fixed\n this[ jQuery.expando ] = true;\n};\n\nfunction returnFalse() {\n return false;\n}\nfunction returnTrue() {\n return true;\n}\n\n// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding\n// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html\njQuery.Event.prototype = {\n preventDefault: function() {\n this.isDefaultPrevented = returnTrue;\n\n var e = this.originalEvent;\n if ( !e ) {\n return;\n }\n\n // if preventDefault exists run it on the original event\n if ( e.preventDefault ) {\n e.preventDefault();\n\n // otherwise set the returnValue property of the original event to false (IE)\n } else {\n e.returnValue = false;\n }\n },\n stopPropagation: function() {\n this.isPropagationStopped = returnTrue;\n\n var e = this.originalEvent;\n if ( !e ) {\n return;\n }\n // if stopPropagation exists run it on the original event\n if ( e.stopPropagation ) {\n e.stopPropagation();\n }\n // otherwise set the cancelBubble property of the original event to true (IE)\n e.cancelBubble = true;\n },\n stopImmediatePropagation: function() {\n this.isImmediatePropagationStopped = returnTrue;\n this.stopPropagation();\n },\n isDefaultPrevented: returnFalse,\n isPropagationStopped: returnFalse,\n isImmediatePropagationStopped: returnFalse\n};\n\n// Create mouseenter/leave events using mouseover/out and event-time checks\njQuery.each({\n mouseenter: \"mouseover\",\n mouseleave: \"mouseout\"\n}, function( orig, fix ) {\n jQuery.event.special[ orig ] = {\n delegateType: fix,\n bindType: fix,\n\n handle: function( event ) {\n var ret,\n target = this,\n related = event.relatedTarget,\n handleObj = event.handleObj,\n selector = handleObj.selector;\n\n // For mousenter/leave call the handler if related is outside the target.\n // NB: No relatedTarget if the mouse left/entered the browser window\n if ( !related || (related !== target && !jQuery.contains( target, related )) ) {\n event.type = handleObj.origType;\n ret = handleObj.handler.apply( this, arguments );\n event.type = fix;\n }\n return ret;\n }\n };\n});\n\n// IE submit delegation\nif ( !jQuery.support.submitBubbles ) {\n\n jQuery.event.special.submit = {\n setup: function() {\n // Only need this for delegated form submit events\n if ( jQuery.nodeName( this, \"form\" ) ) {\n return false;\n }\n\n // Lazy-add a submit handler when a descendant form may potentially be submitted\n jQuery.event.add( this, \"click._submit keypress._submit\", function( e ) {\n // Node name check avoids a VML-related crash in IE (#9807)\n var elem = e.target,\n form = jQuery.nodeName( elem, \"input\" ) || jQuery.nodeName( elem, \"button\" ) ? elem.form : undefined;\n if ( form && !jQuery._data( form, \"_submit_attached\" ) ) {\n jQuery.event.add( form, \"submit._submit\", function( event ) {\n event._submit_bubble = true;\n });\n jQuery._data( form, \"_submit_attached\", true );\n }\n });\n // return undefined since we don't need an event listener\n },\n\n postDispatch: function( event ) {\n // If form was submitted by the user, bubble the event up the tree\n if ( event._submit_bubble ) {\n delete event._submit_bubble;\n if ( this.parentNode && !event.isTrigger ) {\n jQuery.event.simulate( \"submit\", this.parentNode, event, true );\n }\n }\n },\n\n teardown: function() {\n // Only need this for delegated form submit events\n if ( jQuery.nodeName( this, \"form\" ) ) {\n return false;\n }\n\n // Remove delegated handlers; cleanData eventually reaps submit handlers attached above\n jQuery.event.remove( this, \"._submit\" );\n }\n };\n}\n\n// IE change delegation and checkbox/radio fix\nif ( !jQuery.support.changeBubbles ) {\n\n jQuery.event.special.change = {\n\n setup: function() {\n\n if ( rformElems.test( this.nodeName ) ) {\n // IE doesn't fire change on a check/radio until blur; trigger it on click\n // after a propertychange. Eat the blur-change in special.change.handle.\n // This still fires onchange a second time for check/radio after blur.\n if ( this.type === \"checkbox\" || this.type === \"radio\" ) {\n jQuery.event.add( this, \"propertychange._change\", function( event ) {\n if ( event.originalEvent.propertyName === \"checked\" ) {\n this._just_changed = true;\n }\n });\n jQuery.event.add( this, \"click._change\", function( event ) {\n if ( this._just_changed && !event.isTrigger ) {\n this._just_changed = false;\n }\n // Allow triggered, simulated change events (#11500)\n jQuery.event.simulate( \"change\", this, event, true );\n });\n }\n return false;\n }\n // Delegated event; lazy-add a change handler on descendant inputs\n jQuery.event.add( this, \"beforeactivate._change\", function( e ) {\n var elem = e.target;\n\n if ( rformElems.test( elem.nodeName ) && !jQuery._data( elem, \"_change_attached\" ) ) {\n jQuery.event.add( elem, \"change._change\", function( event ) {\n if ( this.parentNode && !event.isSimulated && !event.isTrigger ) {\n jQuery.event.simulate( \"change\", this.parentNode, event, true );\n }\n });\n jQuery._data( elem, \"_change_attached\", true );\n }\n });\n },\n\n handle: function( event ) {\n var elem = event.target;\n\n // Swallow native change events from checkbox/radio, we already triggered them above\n if ( this !== elem || event.isSimulated || event.isTrigger || (elem.type !== \"radio\" && elem.type !== \"checkbox\") ) {\n return event.handleObj.handler.apply( this, arguments );\n }\n },\n\n teardown: function() {\n jQuery.event.remove( this, \"._change\" );\n\n return !rformElems.test( this.nodeName );\n }\n };\n}\n\n// Create \"bubbling\" focus and blur events\nif ( !jQuery.support.focusinBubbles ) {\n jQuery.each({ focus: \"focusin\", blur: \"focusout\" }, function( orig, fix ) {\n\n // Attach a single capturing handler while someone wants focusin/focusout\n var attaches = 0,\n handler = function( event ) {\n jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ), true );\n };\n\n jQuery.event.special[ fix ] = {\n setup: function() {\n if ( attaches++ === 0 ) {\n document.addEventListener( orig, handler, true );\n }\n },\n teardown: function() {\n if ( --attaches === 0 ) {\n document.removeEventListener( orig, handler, true );\n }\n }\n };\n });\n}\n\njQuery.fn.extend({\n\n on: function( types, selector, data, fn, /*INTERNAL*/ one ) {\n var origFn, type;\n\n // Types can be a map of types/handlers\n if ( typeof types === \"object\" ) {\n // ( types-Object, selector, data )\n if ( typeof selector !== \"string\" ) { // && selector != null\n // ( types-Object, data )\n data = data || selector;\n selector = undefined;\n }\n for ( type in types ) {\n this.on( type, selector, data, types[ type ], one );\n }\n return this;\n }\n\n if ( data == null && fn == null ) {\n // ( types, fn )\n fn = selector;\n data = selector = undefined;\n } else if ( fn == null ) {\n if ( typeof selector === \"string\" ) {\n // ( types, selector, fn )\n fn = data;\n data = undefined;\n } else {\n // ( types, data, fn )\n fn = data;\n data = selector;\n selector = undefined;\n }\n }\n if ( fn === false ) {\n fn = returnFalse;\n } else if ( !fn ) {\n return this;\n }\n\n if ( one === 1 ) {\n origFn = fn;\n fn = function( event ) {\n // Can use an empty set, since event contains the info\n jQuery().off( event );\n return origFn.apply( this, arguments );\n };\n // Use same guid so caller can remove using origFn\n fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );\n }\n return this.each( function() {\n jQuery.event.add( this, types, fn, data, selector );\n });\n },\n one: function( types, selector, data, fn ) {\n return this.on( types, selector, data, fn, 1 );\n },\n off: function( types, selector, fn ) {\n var handleObj, type;\n if ( types && types.preventDefault && types.handleObj ) {\n // ( event ) dispatched jQuery.Event\n handleObj = types.handleObj;\n jQuery( types.delegateTarget ).off(\n handleObj.namespace ? handleObj.origType + \".\" + handleObj.namespace : handleObj.origType,\n handleObj.selector,\n handleObj.handler\n );\n return this;\n }\n if ( typeof types === \"object\" ) {\n // ( types-object [, selector] )\n for ( type in types ) {\n this.off( type, selector, types[ type ] );\n }\n return this;\n }\n if ( selector === false || typeof selector === \"function\" ) {\n // ( types [, fn] )\n fn = selector;\n selector = undefined;\n }\n if ( fn === false ) {\n fn = returnFalse;\n }\n return this.each(function() {\n jQuery.event.remove( this, types, fn, selector );\n });\n },\n\n bind: function( types, data, fn ) {\n return this.on( types, null, data, fn );\n },\n unbind: function( types, fn ) {\n return this.off( types, null, fn );\n },\n\n live: function( types, data, fn ) {\n jQuery( this.context ).on( types, this.selector, data, fn );\n return this;\n },\n die: function( types, fn ) {\n jQuery( this.context ).off( types, this.selector || \"**\", fn );\n return this;\n },\n\n delegate: function( selector, types, data, fn ) {\n return this.on( types, selector, data, fn );\n },\n undelegate: function( selector, types, fn ) {\n // ( namespace ) or ( selector, types [, fn] )\n return arguments.length === 1 ? this.off( selector, \"**\" ) : this.off( types, selector || \"**\", fn );\n },\n\n trigger: function( type, data ) {\n return this.each(function() {\n jQuery.event.trigger( type, data, this );\n });\n },\n triggerHandler: function( type, data ) {\n if ( this[0] ) {\n return jQuery.event.trigger( type, data, this[0], true );\n }\n },\n\n toggle: function( fn ) {\n // Save reference to arguments for access in closure\n var args = arguments,\n guid = fn.guid || jQuery.guid++,\n i = 0,\n toggler = function( event ) {\n // Figure out which function to execute\n var lastToggle = ( jQuery._data( this, \"lastToggle\" + fn.guid ) || 0 ) % i;\n jQuery._data( this, \"lastToggle\" + fn.guid, lastToggle + 1 );\n\n // Make sure that clicks stop\n event.preventDefault();\n\n // and execute the function\n return args[ lastToggle ].apply( this, arguments ) || false;\n };\n\n // link all the functions, so any of them can unbind this click handler\n toggler.guid = guid;\n while ( i < args.length ) {\n args[ i++ ].guid = guid;\n }\n\n return this.click( toggler );\n },\n\n hover: function( fnOver, fnOut ) {\n return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );\n }\n});\n\njQuery.each( (\"blur focus focusin focusout load resize scroll unload click dblclick \" +\n \"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave \" +\n \"change select submit keydown keypress keyup error contextmenu\").split(\" \"), function( i, name ) {\n\n // Handle event binding\n jQuery.fn[ name ] = function( data, fn ) {\n if ( fn == null ) {\n fn = data;\n data = null;\n }\n\n return arguments.length > 0 ?\n this.on( name, null, data, fn ) :\n this.trigger( name );\n };\n\n if ( rkeyEvent.test( name ) ) {\n jQuery.event.fixHooks[ name ] = jQuery.event.keyHooks;\n }\n\n if ( rmouseEvent.test( name ) ) {\n jQuery.event.fixHooks[ name ] = jQuery.event.mouseHooks;\n }\n});\n/*!\n * Sizzle CSS Selector Engine\n * Copyright 2012 jQuery Foundation and other contributors\n * Released under the MIT license\n * http://sizzlejs.com/\n */\n(function( window, undefined ) {\n\nvar cachedruns,\n assertGetIdNotName,\n Expr,\n getText,\n isXML,\n contains,\n compile,\n sortOrder,\n hasDuplicate,\n outermostContext,\n\n baseHasDuplicate = true,\n strundefined = \"undefined\",\n\n expando = ( \"sizcache\" + Math.random() ).replace( \".\", \"\" ),\n\n Token = String,\n document = window.document,\n docElem = document.documentElement,\n dirruns = 0,\n done = 0,\n pop = [].pop,\n push = [].push,\n slice = [].slice,\n // Use a stripped-down indexOf if a native one is unavailable\n indexOf = [].indexOf || function( elem ) {\n var i = 0,\n len = this.length;\n for ( ; i < len; i++ ) {\n if ( this[i] === elem ) {\n return i;\n }\n }\n return -1;\n },\n\n // Augment a function for special use by Sizzle\n markFunction = function( fn, value ) {\n fn[ expando ] = value == null || value;\n return fn;\n },\n\n createCache = function() {\n var cache = {},\n keys = [];\n\n return markFunction(function( key, value ) {\n // Only keep the most recent entries\n if ( keys.push( key ) > Expr.cacheLength ) {\n delete cache[ keys.shift() ];\n }\n\n // Retrieve with (key + \" \") to avoid collision with native Object.prototype properties (see Issue #157)\n return (cache[ key + \" \" ] = value);\n }, cache );\n },\n\n classCache = createCache(),\n tokenCache = createCache(),\n compilerCache = createCache(),\n\n // Regex\n\n // Whitespace characters http://www.w3.org/TR/css3-selectors/#whitespace\n whitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\",\n // http://www.w3.org/TR/css3-syntax/#characters\n characterEncoding = \"(?:\\\\\\\\.|[-\\\\w]|[^\\\\x00-\\\\xa0])+\",\n\n // Loosely modeled on CSS identifier characters\n // An unquoted value should be a CSS identifier (http://www.w3.org/TR/css3-selectors/#attribute-selectors)\n // Proper syntax: http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier\n identifier = characterEncoding.replace( \"w\", \"w#\" ),\n\n // Acceptable operators http://www.w3.org/TR/selectors/#attribute-selectors\n operators = \"([*^$|!~]?=)\",\n attributes = \"\\\\[\" + whitespace + \"*(\" + characterEncoding + \")\" + whitespace +\n \"*(?:\" + operators + whitespace + \"*(?:(['\\\"])((?:\\\\\\\\.|[^\\\\\\\\])*?)\\\\3|(\" + identifier + \")|)|)\" + whitespace + \"*\\\\]\",\n\n // Prefer arguments not in parens/brackets,\n // then attribute selectors and non-pseudos (denoted by :),\n // then anything else\n // These preferences are here to reduce the number of selectors\n // needing tokenize in the PSEUDO preFilter\n pseudos = \":(\" + characterEncoding + \")(?:\\\\((?:(['\\\"])((?:\\\\\\\\.|[^\\\\\\\\])*?)\\\\2|([^()[\\\\]]*|(?:(?:\" + attributes + \")|[^:]|\\\\\\\\.)*|.*))\\\\)|)\",\n\n // For matchExpr.POS and matchExpr.needsContext\n pos = \":(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\" + whitespace +\n \"*((?:-\\\\d)?\\\\d*)\" + whitespace + \"*\\\\)|)(?=[^-]|$)\",\n\n // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter\n rtrim = new RegExp( \"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" + whitespace + \"+$\", \"g\" ),\n\n rcomma = new RegExp( \"^\" + whitespace + \"*,\" + whitespace + \"*\" ),\n rcombinators = new RegExp( \"^\" + whitespace + \"*([\\\\x20\\\\t\\\\r\\\\n\\\\f>+~])\" + whitespace + \"*\" ),\n rpseudo = new RegExp( pseudos ),\n\n // Easily-parseable/retrievable ID or TAG or CLASS selectors\n rquickExpr = /^(?:#([\\w\\-]+)|(\\w+)|\\.([\\w\\-]+))$/,\n\n rnot = /^:not/,\n rsibling = /[\\x20\\t\\r\\n\\f]*[+~]/,\n rendsWithNot = /:not\\($/,\n\n rheader = /h\\d/i,\n rinputs = /input|select|textarea|button/i,\n\n rbackslash = /\\\\(?!\\\\)/g,\n\n matchExpr = {\n \"ID\": new RegExp( \"^#(\" + characterEncoding + \")\" ),\n \"CLASS\": new RegExp( \"^\\\\.(\" + characterEncoding + \")\" ),\n \"NAME\": new RegExp( \"^\\\\[name=['\\\"]?(\" + characterEncoding + \")['\\\"]?\\\\]\" ),\n \"TAG\": new RegExp( \"^(\" + characterEncoding.replace( \"w\", \"w*\" ) + \")\" ),\n \"ATTR\": new RegExp( \"^\" + attributes ),\n \"PSEUDO\": new RegExp( \"^\" + pseudos ),\n \"POS\": new RegExp( pos, \"i\" ),\n \"CHILD\": new RegExp( \"^:(only|nth|first|last)-child(?:\\\\(\" + whitespace +\n \"*(even|odd|(([+-]|)(\\\\d*)n|)\" + whitespace + \"*(?:([+-]|)\" + whitespace +\n \"*(\\\\d+)|))\" + whitespace + \"*\\\\)|)\", \"i\" ),\n // For use in libraries implementing .is()\n \"needsContext\": new RegExp( \"^\" + whitespace + \"*[>+~]|\" + pos, \"i\" )\n },\n\n // Support\n\n // Used for testing something on an element\n assert = function( fn ) {\n var div = document.createElement(\"div\");\n\n try {\n return fn( div );\n } catch (e) {\n return false;\n } finally {\n // release memory in IE\n div = null;\n }\n },\n\n // Check if getElementsByTagName(\"*\") returns only elements\n assertTagNameNoComments = assert(function( div ) {\n div.appendChild( document.createComment(\"\") );\n return !div.getElementsByTagName(\"*\").length;\n }),\n\n // Check if getAttribute returns normalized href attributes\n assertHrefNotNormalized = assert(function( div ) {\n div.innerHTML = \"<a href='#'></a>\";\n return div.firstChild && typeof div.firstChild.getAttribute !== strundefined &&\n div.firstChild.getAttribute(\"href\") === \"#\";\n }),\n\n // Check if attributes should be retrieved by attribute nodes\n assertAttributes = assert(function( div ) {\n div.innerHTML = \"<select></select>\";\n var type = typeof div.lastChild.getAttribute(\"multiple\");\n // IE8 returns a string for some attributes even when not present\n return type !== \"boolean\" && type !== \"string\";\n }),\n\n // Check if getElementsByClassName can be trusted\n assertUsableClassName = assert(function( div ) {\n // Opera can't find a second classname (in 9.6)\n div.innerHTML = \"<div class='hidden e'></div><div class='hidden'></div>\";\n if ( !div.getElementsByClassName || !div.getElementsByClassName(\"e\").length ) {\n return false;\n }\n\n // Safari 3.2 caches class attributes and doesn't catch changes\n div.lastChild.className = \"e\";\n return div.getElementsByClassName(\"e\").length === 2;\n }),\n\n // Check if getElementById returns elements by name\n // Check if getElementsByName privileges form controls or returns elements by ID\n assertUsableName = assert(function( div ) {\n // Inject content\n div.id = expando + 0;\n div.innerHTML = \"<a name='\" + expando + \"'></a><div name='\" + expando + \"'></div>\";\n docElem.insertBefore( div, docElem.firstChild );\n\n // Test\n var pass = document.getElementsByName &&\n // buggy browsers will return fewer than the correct 2\n document.getElementsByName( expando ).length === 2 +\n // buggy browsers will return more than the correct 0\n document.getElementsByName( expando + 0 ).length;\n assertGetIdNotName = !document.getElementById( expando );\n\n // Cleanup\n docElem.removeChild( div );\n\n return pass;\n });\n\n// If slice is not available, provide a backup\ntry {\n slice.call( docElem.childNodes, 0 )[0].nodeType;\n} catch ( e ) {\n slice = function( i ) {\n var elem,\n results = [];\n for ( ; (elem = this[i]); i++ ) {\n results.push( elem );\n }\n return results;\n };\n}\n\nfunction Sizzle( selector, context, results, seed ) {\n results = results || [];\n context = context || document;\n var match, elem, xml, m,\n nodeType = context.nodeType;\n\n if ( !selector || typeof selector !== \"string\" ) {\n return results;\n }\n\n if ( nodeType !== 1 && nodeType !== 9 ) {\n return [];\n }\n\n xml = isXML( context );\n\n if ( !xml && !seed ) {\n if ( (match = rquickExpr.exec( selector )) ) {\n // Speed-up: Sizzle(\"#ID\")\n if ( (m = match[1]) ) {\n if ( nodeType === 9 ) {\n elem = context.getElementById( m );\n // Check parentNode to catch when Blackberry 4.6 returns\n // nodes that are no longer in the document #6963\n if ( elem && elem.parentNode ) {\n // Handle the case where IE, Opera, and Webkit return items\n // by name instead of ID\n if ( elem.id === m ) {\n results.push( elem );\n return results;\n }\n } else {\n return results;\n }\n } else {\n // Context is not a document\n if ( context.ownerDocument && (elem = context.ownerDocument.getElementById( m )) &&\n contains( context, elem ) && elem.id === m ) {\n results.push( elem );\n return results;\n }\n }\n\n // Speed-up: Sizzle(\"TAG\")\n } else if ( match[2] ) {\n push.apply( results, slice.call(context.getElementsByTagName( selector ), 0) );\n return results;\n\n // Speed-up: Sizzle(\".CLASS\")\n } else if ( (m = match[3]) && assertUsableClassName && context.getElementsByClassName ) {\n push.apply( results, slice.call(context.getElementsByClassName( m ), 0) );\n return results;\n }\n }\n }\n\n // All others\n return select( selector.replace( rtrim, \"$1\" ), context, results, seed, xml );\n}\n\nSizzle.matches = function( expr, elements ) {\n return Sizzle( expr, null, null, elements );\n};\n\nSizzle.matchesSelector = function( elem, expr ) {\n return Sizzle( expr, null, null, [ elem ] ).length > 0;\n};\n\n// Returns a function to use in pseudos for input types\nfunction createInputPseudo( type ) {\n return function( elem ) {\n var name = elem.nodeName.toLowerCase();\n return name === \"input\" && elem.type === type;\n };\n}\n\n// Returns a function to use in pseudos for buttons\nfunction createButtonPseudo( type ) {\n return function( elem ) {\n var name = elem.nodeName.toLowerCase();\n return (name === \"input\" || name === \"button\") && elem.type === type;\n };\n}\n\n// Returns a function to use in pseudos for positionals\nfunction createPositionalPseudo( fn ) {\n return markFunction(function( argument ) {\n argument = +argument;\n return markFunction(function( seed, matches ) {\n var j,\n matchIndexes = fn( [], seed.length, argument ),\n i = matchIndexes.length;\n\n // Match elements found at the specified indexes\n while ( i-- ) {\n if ( seed[ (j = matchIndexes[i]) ] ) {\n seed[j] = !(matches[j] = seed[j]);\n }\n }\n });\n });\n}\n\n/**\n * Utility function for retrieving the text value of an array of DOM nodes\n * @param {Array|Element} elem\n */\ngetText = Sizzle.getText = function( elem ) {\n var node,\n ret = \"\",\n i = 0,\n nodeType = elem.nodeType;\n\n if ( nodeType ) {\n if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {\n // Use textContent for elements\n // innerText usage removed for consistency of new lines (see #11153)\n if ( typeof elem.textContent === \"string\" ) {\n return elem.textContent;\n } else {\n // Traverse its children\n for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n ret += getText( elem );\n }\n }\n } else if ( nodeType === 3 || nodeType === 4 ) {\n return elem.nodeValue;\n }\n // Do not include comment or processing instruction nodes\n } else {\n\n // If no nodeType, this is expected to be an array\n for ( ; (node = elem[i]); i++ ) {\n // Do not traverse comment nodes\n ret += getText( node );\n }\n }\n return ret;\n};\n\nisXML = Sizzle.isXML = function( elem ) {\n // documentElement is verified for cases where it doesn't yet exist\n // (such as loading iframes in IE - #4833)\n var documentElement = elem && (elem.ownerDocument || elem).documentElement;\n return documentElement ? documentElement.nodeName !== \"HTML\" : false;\n};\n\n// Element contains another\ncontains = Sizzle.contains = docElem.contains ?\n function( a, b ) {\n var adown = a.nodeType === 9 ? a.documentElement : a,\n bup = b && b.parentNode;\n return a === bup || !!( bup && bup.nodeType === 1 && adown.contains && adown.contains(bup) );\n } :\n docElem.compareDocumentPosition ?\n function( a, b ) {\n return b && !!( a.compareDocumentPosition( b ) & 16 );\n } :\n function( a, b ) {\n while ( (b = b.parentNode) ) {\n if ( b === a ) {\n return true;\n }\n }\n return false;\n };\n\nSizzle.attr = function( elem, name ) {\n var val,\n xml = isXML( elem );\n\n if ( !xml ) {\n name = name.toLowerCase();\n }\n if ( (val = Expr.attrHandle[ name ]) ) {\n return val( elem );\n }\n if ( xml || assertAttributes ) {\n return elem.getAttribute( name );\n }\n val = elem.getAttributeNode( name );\n return val ?\n typeof elem[ name ] === \"boolean\" ?\n elem[ name ] ? name : null :\n val.specified ? val.value : null :\n null;\n};\n\nExpr = Sizzle.selectors = {\n\n // Can be adjusted by the user\n cacheLength: 50,\n\n createPseudo: markFunction,\n\n match: matchExpr,\n\n // IE6/7 return a modified href\n attrHandle: assertHrefNotNormalized ?\n {} :\n {\n \"href\": function( elem ) {\n return elem.getAttribute( \"href\", 2 );\n },\n \"type\": function( elem ) {\n return elem.getAttribute(\"type\");\n }\n },\n\n find: {\n \"ID\": assertGetIdNotName ?\n function( id, context, xml ) {\n if ( typeof context.getElementById !== strundefined && !xml ) {\n var m = context.getElementById( id );\n // Check parentNode to catch when Blackberry 4.6 returns\n // nodes that are no longer in the document #6963\n return m && m.parentNode ? [m] : [];\n }\n } :\n function( id, context, xml ) {\n if ( typeof context.getElementById !== strundefined && !xml ) {\n var m = context.getElementById( id );\n\n return m ?\n m.id === id || typeof m.getAttributeNode !== strundefined && m.getAttributeNode(\"id\").value === id ?\n [m] :\n undefined :\n [];\n }\n },\n\n \"TAG\": assertTagNameNoComments ?\n function( tag, context ) {\n if ( typeof context.getElementsByTagName !== strundefined ) {\n return context.getElementsByTagName( tag );\n }\n } :\n function( tag, context ) {\n var results = context.getElementsByTagName( tag );\n\n // Filter out possible comments\n if ( tag === \"*\" ) {\n var elem,\n tmp = [],\n i = 0;\n\n for ( ; (elem = results[i]); i++ ) {\n if ( elem.nodeType === 1 ) {\n tmp.push( elem );\n }\n }\n\n return tmp;\n }\n return results;\n },\n\n \"NAME\": assertUsableName && function( tag, context ) {\n if ( typeof context.getElementsByName !== strundefined ) {\n return context.getElementsByName( name );\n }\n },\n\n \"CLASS\": assertUsableClassName && function( className, context, xml ) {\n if ( typeof context.getElementsByClassName !== strundefined && !xml ) {\n return context.getElementsByClassName( className );\n }\n }\n },\n\n relative: {\n \">\": { dir: \"parentNode\", first: true },\n \" \": { dir: \"parentNode\" },\n \"+\": { dir: \"previousSibling\", first: true },\n \"~\": { dir: \"previousSibling\" }\n },\n\n preFilter: {\n \"ATTR\": function( match ) {\n match[1] = match[1].replace( rbackslash, \"\" );\n\n // Move the given value to match[3] whether quoted or unquoted\n match[3] = ( match[4] || match[5] || \"\" ).replace( rbackslash, \"\" );\n\n if ( match[2] === \"~=\" ) {\n match[3] = \" \" + match[3] + \" \";\n }\n\n return match.slice( 0, 4 );\n },\n\n \"CHILD\": function( match ) {\n /* matches from matchExpr[\"CHILD\"]\n 1 type (only|nth|...)\n 2 argument (even|odd|\\d*|\\d*n([+-]\\d+)?|...)\n 3 xn-component of xn+y argument ([+-]?\\d*n|)\n 4 sign of xn-component\n 5 x of xn-component\n 6 sign of y-component\n 7 y of y-component\n */\n match[1] = match[1].toLowerCase();\n\n if ( match[1] === \"nth\" ) {\n // nth-child requires argument\n if ( !match[2] ) {\n Sizzle.error( match[0] );\n }\n\n // numeric x and y parameters for Expr.filter.CHILD\n // remember that false/true cast respectively to 0/1\n match[3] = +( match[3] ? match[4] + (match[5] || 1) : 2 * ( match[2] === \"even\" || match[2] === \"odd\" ) );\n match[4] = +( ( match[6] + match[7] ) || match[2] === \"odd\" );\n\n // other types prohibit arguments\n } else if ( match[2] ) {\n Sizzle.error( match[0] );\n }\n\n return match;\n },\n\n \"PSEUDO\": function( match ) {\n var unquoted, excess;\n if ( matchExpr[\"CHILD\"].test( match[0] ) ) {\n return null;\n }\n\n if ( match[3] ) {\n match[2] = match[3];\n } else if ( (unquoted = match[4]) ) {\n // Only check arguments that contain a pseudo\n if ( rpseudo.test(unquoted) &&\n // Get excess from tokenize (recursively)\n (excess = tokenize( unquoted, true )) &&\n // advance to the next closing parenthesis\n (excess = unquoted.indexOf( \")\", unquoted.length - excess ) - unquoted.length) ) {\n\n // excess is a negative index\n unquoted = unquoted.slice( 0, excess );\n match[0] = match[0].slice( 0, excess );\n }\n match[2] = unquoted;\n }\n\n // Return only captures needed by the pseudo filter method (type and argument)\n return match.slice( 0, 3 );\n }\n },\n\n filter: {\n \"ID\": assertGetIdNotName ?\n function( id ) {\n id = id.replace( rbackslash, \"\" );\n return function( elem ) {\n return elem.getAttribute(\"id\") === id;\n };\n } :\n function( id ) {\n id = id.replace( rbackslash, \"\" );\n return function( elem ) {\n var node = typeof elem.getAttributeNode !== strundefined && elem.getAttributeNode(\"id\");\n return node && node.value === id;\n };\n },\n\n \"TAG\": function( nodeName ) {\n if ( nodeName === \"*\" ) {\n return function() { return true; };\n }\n nodeName = nodeName.replace( rbackslash, \"\" ).toLowerCase();\n\n return function( elem ) {\n return elem.nodeName && elem.nodeName.toLowerCase() === nodeName;\n };\n },\n\n \"CLASS\": function( className ) {\n var pattern = classCache[ expando ][ className + \" \" ];\n\n return pattern ||\n (pattern = new RegExp( \"(^|\" + whitespace + \")\" + className + \"(\" + whitespace + \"|$)\" )) &&\n classCache( className, function( elem ) {\n return pattern.test( elem.className || (typeof elem.getAttribute !== strundefined && elem.getAttribute(\"class\")) || \"\" );\n });\n },\n\n \"ATTR\": function( name, operator, check ) {\n return function( elem, context ) {\n var result = Sizzle.attr( elem, name );\n\n if ( result == null ) {\n return operator === \"!=\";\n }\n if ( !operator ) {\n return true;\n }\n\n result += \"\";\n\n return operator === \"=\" ? result === check :\n operator === \"!=\" ? result !== check :\n operator === \"^=\" ? check && result.indexOf( check ) === 0 :\n operator === \"*=\" ? check && result.indexOf( check ) > -1 :\n operator === \"$=\" ? check && result.substr( result.length - check.length ) === check :\n operator === \"~=\" ? ( \" \" + result + \" \" ).indexOf( check ) > -1 :\n operator === \"|=\" ? result === check || result.substr( 0, check.length + 1 ) === check + \"-\" :\n false;\n };\n },\n\n \"CHILD\": function( type, argument, first, last ) {\n\n if ( type === \"nth\" ) {\n return function( elem ) {\n var node, diff,\n parent = elem.parentNode;\n\n if ( first === 1 && last === 0 ) {\n return true;\n }\n\n if ( parent ) {\n diff = 0;\n for ( node = parent.firstChild; node; node = node.nextSibling ) {\n if ( node.nodeType === 1 ) {\n diff++;\n if ( elem === node ) {\n break;\n }\n }\n }\n }\n\n // Incorporate the offset (or cast to NaN), then check against cycle size\n diff -= last;\n return diff === first || ( diff % first === 0 && diff / first >= 0 );\n };\n }\n\n return function( elem ) {\n var node = elem;\n\n switch ( type ) {\n case \"only\":\n case \"first\":\n while ( (node = node.previousSibling) ) {\n if ( node.nodeType === 1 ) {\n return false;\n }\n }\n\n if ( type === \"first\" ) {\n return true;\n }\n\n node = elem;\n\n /* falls through */\n case \"last\":\n while ( (node = node.nextSibling) ) {\n if ( node.nodeType === 1 ) {\n return false;\n }\n }\n\n return true;\n }\n };\n },\n\n \"PSEUDO\": function( pseudo, argument ) {\n // pseudo-class names are case-insensitive\n // http://www.w3.org/TR/selectors/#pseudo-classes\n // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters\n // Remember that setFilters inherits from pseudos\n var args,\n fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||\n Sizzle.error( \"unsupported pseudo: \" + pseudo );\n\n // The user may use createPseudo to indicate that\n // arguments are needed to create the filter function\n // just as Sizzle does\n if ( fn[ expando ] ) {\n return fn( argument );\n }\n\n // But maintain support for old signatures\n if ( fn.length > 1 ) {\n args = [ pseudo, pseudo, \"\", argument ];\n return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?\n markFunction(function( seed, matches ) {\n var idx,\n matched = fn( seed, argument ),\n i = matched.length;\n while ( i-- ) {\n idx = indexOf.call( seed, matched[i] );\n seed[ idx ] = !( matches[ idx ] = matched[i] );\n }\n }) :\n function( elem ) {\n return fn( elem, 0, args );\n };\n }\n\n return fn;\n }\n },\n\n pseudos: {\n \"not\": markFunction(function( selector ) {\n // Trim the selector passed to compile\n // to avoid treating leading and trailing\n // spaces as combinators\n var input = [],\n results = [],\n matcher = compile( selector.replace( rtrim, \"$1\" ) );\n\n return matcher[ expando ] ?\n markFunction(function( seed, matches, context, xml ) {\n var elem,\n unmatched = matcher( seed, null, xml, [] ),\n i = seed.length;\n\n // Match elements unmatched by `matcher`\n while ( i-- ) {\n if ( (elem = unmatched[i]) ) {\n seed[i] = !(matches[i] = elem);\n }\n }\n }) :\n function( elem, context, xml ) {\n input[0] = elem;\n matcher( input, null, xml, results );\n return !results.pop();\n };\n }),\n\n \"has\": markFunction(function( selector ) {\n return function( elem ) {\n return Sizzle( selector, elem ).length > 0;\n };\n }),\n\n \"contains\": markFunction(function( text ) {\n return function( elem ) {\n return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1;\n };\n }),\n\n \"enabled\": function( elem ) {\n return elem.disabled === false;\n },\n\n \"disabled\": function( elem ) {\n return elem.disabled === true;\n },\n\n \"checked\": function( elem ) {\n // In CSS3, :checked should return both checked and selected elements\n // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n var nodeName = elem.nodeName.toLowerCase();\n return (nodeName === \"input\" && !!elem.checked) || (nodeName === \"option\" && !!elem.selected);\n },\n\n \"selected\": function( elem ) {\n // Accessing this property makes selected-by-default\n // options in Safari work properly\n if ( elem.parentNode ) {\n elem.parentNode.selectedIndex;\n }\n\n return elem.selected === true;\n },\n\n \"parent\": function( elem ) {\n return !Expr.pseudos[\"empty\"]( elem );\n },\n\n \"empty\": function( elem ) {\n // http://www.w3.org/TR/selectors/#empty-pseudo\n // :empty is only affected by element nodes and content nodes(including text(3), cdata(4)),\n // not comment, processing instructions, or others\n // Thanks to Diego Perini for the nodeName shortcut\n // Greater than \"@\" means alpha characters (specifically not starting with \"#\" or \"?\")\n var nodeType;\n elem = elem.firstChild;\n while ( elem ) {\n if ( elem.nodeName > \"@\" || (nodeType = elem.nodeType) === 3 || nodeType === 4 ) {\n return false;\n }\n elem = elem.nextSibling;\n }\n return true;\n },\n\n \"header\": function( elem ) {\n return rheader.test( elem.nodeName );\n },\n\n \"text\": function( elem ) {\n var type, attr;\n // IE6 and 7 will map elem.type to 'text' for new HTML5 types (search, etc)\n // use getAttribute instead to test this case\n return elem.nodeName.toLowerCase() === \"input\" &&\n (type = elem.type) === \"text\" &&\n ( (attr = elem.getAttribute(\"type\")) == null || attr.toLowerCase() === type );\n },\n\n // Input types\n \"radio\": createInputPseudo(\"radio\"),\n \"checkbox\": createInputPseudo(\"checkbox\"),\n \"file\": createInputPseudo(\"file\"),\n \"password\": createInputPseudo(\"password\"),\n \"image\": createInputPseudo(\"image\"),\n\n \"submit\": createButtonPseudo(\"submit\"),\n \"reset\": createButtonPseudo(\"reset\"),\n\n \"button\": function( elem ) {\n var name = elem.nodeName.toLowerCase();\n return name === \"input\" && elem.type === \"button\" || name === \"button\";\n },\n\n \"input\": function( elem ) {\n return rinputs.test( elem.nodeName );\n },\n\n \"focus\": function( elem ) {\n var doc = elem.ownerDocument;\n return elem === doc.activeElement && (!doc.hasFocus || doc.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);\n },\n\n \"active\": function( elem ) {\n return elem === elem.ownerDocument.activeElement;\n },\n\n // Positional types\n \"first\": createPositionalPseudo(function() {\n return [ 0 ];\n }),\n\n \"last\": createPositionalPseudo(function( matchIndexes, length ) {\n return [ length - 1 ];\n }),\n\n \"eq\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n return [ argument < 0 ? argument + length : argument ];\n }),\n\n \"even\": createPositionalPseudo(function( matchIndexes, length ) {\n for ( var i = 0; i < length; i += 2 ) {\n matchIndexes.push( i );\n }\n return matchIndexes;\n }),\n\n \"odd\": createPositionalPseudo(function( matchIndexes, length ) {\n for ( var i = 1; i < length; i += 2 ) {\n matchIndexes.push( i );\n }\n return matchIndexes;\n }),\n\n \"lt\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n for ( var i = argument < 0 ? argument + length : argument; --i >= 0; ) {\n matchIndexes.push( i );\n }\n return matchIndexes;\n }),\n\n \"gt\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n for ( var i = argument < 0 ? argument + length : argument; ++i < length; ) {\n matchIndexes.push( i );\n }\n return matchIndexes;\n })\n }\n};\n\nfunction siblingCheck( a, b, ret ) {\n if ( a === b ) {\n return ret;\n }\n\n var cur = a.nextSibling;\n\n while ( cur ) {\n if ( cur === b ) {\n return -1;\n }\n\n cur = cur.nextSibling;\n }\n\n return 1;\n}\n\nsortOrder = docElem.compareDocumentPosition ?\n function( a, b ) {\n if ( a === b ) {\n hasDuplicate = true;\n return 0;\n }\n\n return ( !a.compareDocumentPosition || !b.compareDocumentPosition ?\n a.compareDocumentPosition :\n a.compareDocumentPosition(b) & 4\n ) ? -1 : 1;\n } :\n function( a, b ) {\n // The nodes are identical, we can exit early\n if ( a === b ) {\n hasDuplicate = true;\n return 0;\n\n // Fallback to using sourceIndex (in IE) if it's available on both nodes\n } else if ( a.sourceIndex && b.sourceIndex ) {\n return a.sourceIndex - b.sourceIndex;\n }\n\n var al, bl,\n ap = [],\n bp = [],\n aup = a.parentNode,\n bup = b.parentNode,\n cur = aup;\n\n // If the nodes are siblings (or identical) we can do a quick check\n if ( aup === bup ) {\n return siblingCheck( a, b );\n\n // If no parents were found then the nodes are disconnected\n } else if ( !aup ) {\n return -1;\n\n } else if ( !bup ) {\n return 1;\n }\n\n // Otherwise they're somewhere else in the tree so we need\n // to build up a full list of the parentNodes for comparison\n while ( cur ) {\n ap.unshift( cur );\n cur = cur.parentNode;\n }\n\n cur = bup;\n\n while ( cur ) {\n bp.unshift( cur );\n cur = cur.parentNode;\n }\n\n al = ap.length;\n bl = bp.length;\n\n // Start walking down the tree looking for a discrepancy\n for ( var i = 0; i < al && i < bl; i++ ) {\n if ( ap[i] !== bp[i] ) {\n return siblingCheck( ap[i], bp[i] );\n }\n }\n\n // We ended someplace up the tree so do a sibling check\n return i === al ?\n siblingCheck( a, bp[i], -1 ) :\n siblingCheck( ap[i], b, 1 );\n };\n\n// Always assume the presence of duplicates if sort doesn't\n// pass them to our comparison function (as in Google Chrome).\n[0, 0].sort( sortOrder );\nbaseHasDuplicate = !hasDuplicate;\n\n// Document sorting and removing duplicates\nSizzle.uniqueSort = function( results ) {\n var elem,\n duplicates = [],\n i = 1,\n j = 0;\n\n hasDuplicate = baseHasDuplicate;\n results.sort( sortOrder );\n\n if ( hasDuplicate ) {\n for ( ; (elem = results[i]); i++ ) {\n if ( elem === results[ i - 1 ] ) {\n j = duplicates.push( i );\n }\n }\n while ( j-- ) {\n results.splice( duplicates[ j ], 1 );\n }\n }\n\n return results;\n};\n\nSizzle.error = function( msg ) {\n throw new Error( \"Syntax error, unrecognized expression: \" + msg );\n};\n\nfunction tokenize( selector, parseOnly ) {\n var matched, match, tokens, type,\n soFar, groups, preFilters,\n cached = tokenCache[ expando ][ selector + \" \" ];\n\n if ( cached ) {\n return parseOnly ? 0 : cached.slice( 0 );\n }\n\n soFar = selector;\n groups = [];\n preFilters = Expr.preFilter;\n\n while ( soFar ) {\n\n // Comma and first run\n if ( !matched || (match = rcomma.exec( soFar )) ) {\n if ( match ) {\n // Don't consume trailing commas as valid\n soFar = soFar.slice( match[0].length ) || soFar;\n }\n groups.push( tokens = [] );\n }\n\n matched = false;\n\n // Combinators\n if ( (match = rcombinators.exec( soFar )) ) {\n tokens.push( matched = new Token( match.shift() ) );\n soFar = soFar.slice( matched.length );\n\n // Cast descendant combinators to space\n matched.type = match[0].replace( rtrim, \" \" );\n }\n\n // Filters\n for ( type in Expr.filter ) {\n if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] ||\n (match = preFilters[ type ]( match ))) ) {\n\n tokens.push( matched = new Token( match.shift() ) );\n soFar = soFar.slice( matched.length );\n matched.type = type;\n matched.matches = match;\n }\n }\n\n if ( !matched ) {\n break;\n }\n }\n\n // Return the length of the invalid excess\n // if we're just parsing\n // Otherwise, throw an error or return tokens\n return parseOnly ?\n soFar.length :\n soFar ?\n Sizzle.error( selector ) :\n // Cache the tokens\n tokenCache( selector, groups ).slice( 0 );\n}\n\nfunction addCombinator( matcher, combinator, base ) {\n var dir = combinator.dir,\n checkNonElements = base && combinator.dir === \"parentNode\",\n doneName = done++;\n\n return combinator.first ?\n // Check against closest ancestor/preceding element\n function( elem, context, xml ) {\n while ( (elem = elem[ dir ]) ) {\n if ( checkNonElements || elem.nodeType === 1 ) {\n return matcher( elem, context, xml );\n }\n }\n } :\n\n // Check against all ancestor/preceding elements\n function( elem, context, xml ) {\n // We can't set arbitrary data on XML nodes, so they don't benefit from dir caching\n if ( !xml ) {\n var cache,\n dirkey = dirruns + \" \" + doneName + \" \",\n cachedkey = dirkey + cachedruns;\n while ( (elem = elem[ dir ]) ) {\n if ( checkNonElements || elem.nodeType === 1 ) {\n if ( (cache = elem[ expando ]) === cachedkey ) {\n return elem.sizset;\n } else if ( typeof cache === \"string\" && cache.indexOf(dirkey) === 0 ) {\n if ( elem.sizset ) {\n return elem;\n }\n } else {\n elem[ expando ] = cachedkey;\n if ( matcher( elem, context, xml ) ) {\n elem.sizset = true;\n return elem;\n }\n elem.sizset = false;\n }\n }\n }\n } else {\n while ( (elem = elem[ dir ]) ) {\n if ( checkNonElements || elem.nodeType === 1 ) {\n if ( matcher( elem, context, xml ) ) {\n return elem;\n }\n }\n }\n }\n };\n}\n\nfunction elementMatcher( matchers ) {\n return matchers.length > 1 ?\n function( elem, context, xml ) {\n var i = matchers.length;\n while ( i-- ) {\n if ( !matchers[i]( elem, context, xml ) ) {\n return false;\n }\n }\n return true;\n } :\n matchers[0];\n}\n\nfunction condense( unmatched, map, filter, context, xml ) {\n var elem,\n newUnmatched = [],\n i = 0,\n len = unmatched.length,\n mapped = map != null;\n\n for ( ; i < len; i++ ) {\n if ( (elem = unmatched[i]) ) {\n if ( !filter || filter( elem, context, xml ) ) {\n newUnmatched.push( elem );\n if ( mapped ) {\n map.push( i );\n }\n }\n }\n }\n\n return newUnmatched;\n}\n\nfunction setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {\n if ( postFilter && !postFilter[ expando ] ) {\n postFilter = setMatcher( postFilter );\n }\n if ( postFinder && !postFinder[ expando ] ) {\n postFinder = setMatcher( postFinder, postSelector );\n }\n return markFunction(function( seed, results, context, xml ) {\n var temp, i, elem,\n preMap = [],\n postMap = [],\n preexisting = results.length,\n\n // Get initial elements from seed or context\n elems = seed || multipleContexts( selector || \"*\", context.nodeType ? [ context ] : context, [] ),\n\n // Prefilter to get matcher input, preserving a map for seed-results synchronization\n matcherIn = preFilter && ( seed || !selector ) ?\n condense( elems, preMap, preFilter, context, xml ) :\n elems,\n\n matcherOut = matcher ?\n // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,\n postFinder || ( seed ? preFilter : preexisting || postFilter ) ?\n\n // ...intermediate processing is necessary\n [] :\n\n // ...otherwise use results directly\n results :\n matcherIn;\n\n // Find primary matches\n if ( matcher ) {\n matcher( matcherIn, matcherOut, context, xml );\n }\n\n // Apply postFilter\n if ( postFilter ) {\n temp = condense( matcherOut, postMap );\n postFilter( temp, [], context, xml );\n\n // Un-match failing elements by moving them back to matcherIn\n i = temp.length;\n while ( i-- ) {\n if ( (elem = temp[i]) ) {\n matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem);\n }\n }\n }\n\n if ( seed ) {\n if ( postFinder || preFilter ) {\n if ( postFinder ) {\n // Get the final matcherOut by condensing this intermediate into postFinder contexts\n temp = [];\n i = matcherOut.length;\n while ( i-- ) {\n if ( (elem = matcherOut[i]) ) {\n // Restore matcherIn since elem is not yet a final match\n temp.push( (matcherIn[i] = elem) );\n }\n }\n postFinder( null, (matcherOut = []), temp, xml );\n }\n\n // Move matched elements from seed to results to keep them synchronized\n i = matcherOut.length;\n while ( i-- ) {\n if ( (elem = matcherOut[i]) &&\n (temp = postFinder ? indexOf.call( seed, elem ) : preMap[i]) > -1 ) {\n\n seed[temp] = !(results[temp] = elem);\n }\n }\n }\n\n // Add elements to results, through postFinder if defined\n } else {\n matcherOut = condense(\n matcherOut === results ?\n matcherOut.splice( preexisting, matcherOut.length ) :\n matcherOut\n );\n if ( postFinder ) {\n postFinder( null, results, matcherOut, xml );\n } else {\n push.apply( results, matcherOut );\n }\n }\n });\n}\n\nfunction matcherFromTokens( tokens ) {\n var checkContext, matcher, j,\n len = tokens.length,\n leadingRelative = Expr.relative[ tokens[0].type ],\n implicitRelative = leadingRelative || Expr.relative[\" \"],\n i = leadingRelative ? 1 : 0,\n\n // The foundational matcher ensures that elements are reachable from top-level context(s)\n matchContext = addCombinator( function( elem ) {\n return elem === checkContext;\n }, implicitRelative, true ),\n matchAnyContext = addCombinator( function( elem ) {\n return indexOf.call( checkContext, elem ) > -1;\n }, implicitRelative, true ),\n matchers = [ function( elem, context, xml ) {\n return ( !leadingRelative && ( xml || context !== outermostContext ) ) || (\n (checkContext = context).nodeType ?\n matchContext( elem, context, xml ) :\n matchAnyContext( elem, context, xml ) );\n } ];\n\n for ( ; i < len; i++ ) {\n if ( (matcher = Expr.relative[ tokens[i].type ]) ) {\n matchers = [ addCombinator( elementMatcher( matchers ), matcher ) ];\n } else {\n matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches );\n\n // Return special upon seeing a positional matcher\n if ( matcher[ expando ] ) {\n // Find the next relative operator (if any) for proper handling\n j = ++i;\n for ( ; j < len; j++ ) {\n if ( Expr.relative[ tokens[j].type ] ) {\n break;\n }\n }\n return setMatcher(\n i > 1 && elementMatcher( matchers ),\n i > 1 && tokens.slice( 0, i - 1 ).join(\"\").replace( rtrim, \"$1\" ),\n matcher,\n i < j && matcherFromTokens( tokens.slice( i, j ) ),\n j < len && matcherFromTokens( (tokens = tokens.slice( j )) ),\n j < len && tokens.join(\"\")\n );\n }\n matchers.push( matcher );\n }\n }\n\n return elementMatcher( matchers );\n}\n\nfunction matcherFromGroupMatchers( elementMatchers, setMatchers ) {\n var bySet = setMatchers.length > 0,\n byElement = elementMatchers.length > 0,\n superMatcher = function( seed, context, xml, results, expandContext ) {\n var elem, j, matcher,\n setMatched = [],\n matchedCount = 0,\n i = \"0\",\n unmatched = seed && [],\n outermost = expandContext != null,\n contextBackup = outermostContext,\n // We must always have either seed elements or context\n elems = seed || byElement && Expr.find[\"TAG\"]( \"*\", expandContext && context.parentNode || context ),\n // Nested matchers should use non-integer dirruns\n dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.E);\n\n if ( outermost ) {\n outermostContext = context !== document && context;\n cachedruns = superMatcher.el;\n }\n\n // Add elements passing elementMatchers directly to results\n for ( ; (elem = elems[i]) != null; i++ ) {\n if ( byElement && elem ) {\n for ( j = 0; (matcher = elementMatchers[j]); j++ ) {\n if ( matcher( elem, context, xml ) ) {\n results.push( elem );\n break;\n }\n }\n if ( outermost ) {\n dirruns = dirrunsUnique;\n cachedruns = ++superMatcher.el;\n }\n }\n\n // Track unmatched elements for set filters\n if ( bySet ) {\n // They will have gone through all possible matchers\n if ( (elem = !matcher && elem) ) {\n matchedCount--;\n }\n\n // Lengthen the array for every element, matched or not\n if ( seed ) {\n unmatched.push( elem );\n }\n }\n }\n\n // Apply set filters to unmatched elements\n matchedCount += i;\n if ( bySet && i !== matchedCount ) {\n for ( j = 0; (matcher = setMatchers[j]); j++ ) {\n matcher( unmatched, setMatched, context, xml );\n }\n\n if ( seed ) {\n // Reintegrate element matches to eliminate the need for sorting\n if ( matchedCount > 0 ) {\n while ( i-- ) {\n if ( !(unmatched[i] || setMatched[i]) ) {\n setMatched[i] = pop.call( results );\n }\n }\n }\n\n // Discard index placeholder values to get only actual matches\n setMatched = condense( setMatched );\n }\n\n // Add matches to results\n push.apply( results, setMatched );\n\n // Seedless set matches succeeding multiple successful matchers stipulate sorting\n if ( outermost && !seed && setMatched.length > 0 &&\n ( matchedCount + setMatchers.length ) > 1 ) {\n\n Sizzle.uniqueSort( results );\n }\n }\n\n // Override manipulation of globals by nested matchers\n if ( outermost ) {\n dirruns = dirrunsUnique;\n outermostContext = contextBackup;\n }\n\n return unmatched;\n };\n\n superMatcher.el = 0;\n return bySet ?\n markFunction( superMatcher ) :\n superMatcher;\n}\n\ncompile = Sizzle.compile = function( selector, group /* Internal Use Only */ ) {\n var i,\n setMatchers = [],\n elementMatchers = [],\n cached = compilerCache[ expando ][ selector + \" \" ];\n\n if ( !cached ) {\n // Generate a function of recursive functions that can be used to check each element\n if ( !group ) {\n group = tokenize( selector );\n }\n i = group.length;\n while ( i-- ) {\n cached = matcherFromTokens( group[i] );\n if ( cached[ expando ] ) {\n setMatchers.push( cached );\n } else {\n elementMatchers.push( cached );\n }\n }\n\n // Cache the compiled function\n cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) );\n }\n return cached;\n};\n\nfunction multipleContexts( selector, contexts, results ) {\n var i = 0,\n len = contexts.length;\n for ( ; i < len; i++ ) {\n Sizzle( selector, contexts[i], results );\n }\n return results;\n}\n\nfunction select( selector, context, results, seed, xml ) {\n var i, tokens, token, type, find,\n match = tokenize( selector ),\n j = match.length;\n\n if ( !seed ) {\n // Try to minimize operations if there is only one group\n if ( match.length === 1 ) {\n\n // Take a shortcut and set the context if the root selector is an ID\n tokens = match[0] = match[0].slice( 0 );\n if ( tokens.length > 2 && (token = tokens[0]).type === \"ID\" &&\n context.nodeType === 9 && !xml &&\n Expr.relative[ tokens[1].type ] ) {\n\n context = Expr.find[\"ID\"]( token.matches[0].replace( rbackslash, \"\" ), context, xml )[0];\n if ( !context ) {\n return results;\n }\n\n selector = selector.slice( tokens.shift().length );\n }\n\n // Fetch a seed set for right-to-left matching\n for ( i = matchExpr[\"POS\"].test( selector ) ? -1 : tokens.length - 1; i >= 0; i-- ) {\n token = tokens[i];\n\n // Abort if we hit a combinator\n if ( Expr.relative[ (type = token.type) ] ) {\n break;\n }\n if ( (find = Expr.find[ type ]) ) {\n // Search, expanding context for leading sibling combinators\n if ( (seed = find(\n token.matches[0].replace( rbackslash, \"\" ),\n rsibling.test( tokens[0].type ) && context.parentNode || context,\n xml\n )) ) {\n\n // If seed is empty or no tokens remain, we can return early\n tokens.splice( i, 1 );\n selector = seed.length && tokens.join(\"\");\n if ( !selector ) {\n push.apply( results, slice.call( seed, 0 ) );\n return results;\n }\n\n break;\n }\n }\n }\n }\n }\n\n // Compile and execute a filtering function\n // Provide `match` to avoid retokenization if we modified the selector above\n compile( selector, match )(\n seed,\n context,\n xml,\n results,\n rsibling.test( selector )\n );\n return results;\n}\n\nif ( document.querySelectorAll ) {\n (function() {\n var disconnectedMatch,\n oldSelect = select,\n rescape = /'|\\\\/g,\n rattributeQuotes = /\\=[\\x20\\t\\r\\n\\f]*([^'\"\\]]*)[\\x20\\t\\r\\n\\f]*\\]/g,\n\n // qSa(:focus) reports false when true (Chrome 21), no need to also add to buggyMatches since matches checks buggyQSA\n // A support test would require too much code (would include document ready)\n rbuggyQSA = [ \":focus\" ],\n\n // matchesSelector(:active) reports false when true (IE9/Opera 11.5)\n // A support test would require too much code (would include document ready)\n // just skip matchesSelector for :active\n rbuggyMatches = [ \":active\" ],\n matches = docElem.matchesSelector ||\n docElem.mozMatchesSelector ||\n docElem.webkitMatchesSelector ||\n docElem.oMatchesSelector ||\n docElem.msMatchesSelector;\n\n // Build QSA regex\n // Regex strategy adopted from Diego Perini\n assert(function( div ) {\n // Select is set to empty string on purpose\n // This is to test IE's treatment of not explictly\n // setting a boolean content attribute,\n // since its presence should be enough\n // http://bugs.jquery.com/ticket/12359\n div.innerHTML = \"<select><option selected=''></option></select>\";\n\n // IE8 - Some boolean attributes are not treated correctly\n if ( !div.querySelectorAll(\"[selected]\").length ) {\n rbuggyQSA.push( \"\\\\[\" + whitespace + \"*(?:checked|disabled|ismap|multiple|readonly|selected|value)\" );\n }\n\n // Webkit/Opera - :checked should return selected option elements\n // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n // IE8 throws error here (do not put tests after this one)\n if ( !div.querySelectorAll(\":checked\").length ) {\n rbuggyQSA.push(\":checked\");\n }\n });\n\n assert(function( div ) {\n\n // Opera 10-12/IE9 - ^= $= *= and empty values\n // Should not select anything\n div.innerHTML = \"<p test=''></p>\";\n if ( div.querySelectorAll(\"[test^='']\").length ) {\n rbuggyQSA.push( \"[*^$]=\" + whitespace + \"*(?:\\\"\\\"|'')\" );\n }\n\n // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)\n // IE8 throws error here (do not put tests after this one)\n div.innerHTML = \"<input type='hidden'/>\";\n if ( !div.querySelectorAll(\":enabled\").length ) {\n rbuggyQSA.push(\":enabled\", \":disabled\");\n }\n });\n\n // rbuggyQSA always contains :focus, so no need for a length check\n rbuggyQSA = /* rbuggyQSA.length && */ new RegExp( rbuggyQSA.join(\"|\") );\n\n select = function( selector, context, results, seed, xml ) {\n // Only use querySelectorAll when not filtering,\n // when this is not xml,\n // and when no QSA bugs apply\n if ( !seed && !xml && !rbuggyQSA.test( selector ) ) {\n var groups, i,\n old = true,\n nid = expando,\n newContext = context,\n newSelector = context.nodeType === 9 && selector;\n\n // qSA works strangely on Element-rooted queries\n // We can work around this by specifying an extra ID on the root\n // and working up from there (Thanks to Andrew Dupont for the technique)\n // IE 8 doesn't work on object elements\n if ( context.nodeType === 1 && context.nodeName.toLowerCase() !== \"object\" ) {\n groups = tokenize( selector );\n\n if ( (old = context.getAttribute(\"id\")) ) {\n nid = old.replace( rescape, \"\\\\$&\" );\n } else {\n context.setAttribute( \"id\", nid );\n }\n nid = \"[id='\" + nid + \"'] \";\n\n i = groups.length;\n while ( i-- ) {\n groups[i] = nid + groups[i].join(\"\");\n }\n newContext = rsibling.test( selector ) && context.parentNode || context;\n newSelector = groups.join(\",\");\n }\n\n if ( newSelector ) {\n try {\n push.apply( results, slice.call( newContext.querySelectorAll(\n newSelector\n ), 0 ) );\n return results;\n } catch(qsaError) {\n } finally {\n if ( !old ) {\n context.removeAttribute(\"id\");\n }\n }\n }\n }\n\n return oldSelect( selector, context, results, seed, xml );\n };\n\n if ( matches ) {\n assert(function( div ) {\n // Check to see if it's possible to do matchesSelector\n // on a disconnected node (IE 9)\n disconnectedMatch = matches.call( div, \"div\" );\n\n // This should fail with an exception\n // Gecko does not error, returns false instead\n try {\n matches.call( div, \"[test!='']:sizzle\" );\n rbuggyMatches.push( \"!=\", pseudos );\n } catch ( e ) {}\n });\n\n // rbuggyMatches always contains :active and :focus, so no need for a length check\n rbuggyMatches = /* rbuggyMatches.length && */ new RegExp( rbuggyMatches.join(\"|\") );\n\n Sizzle.matchesSelector = function( elem, expr ) {\n // Make sure that attribute selectors are quoted\n expr = expr.replace( rattributeQuotes, \"='$1']\" );\n\n // rbuggyMatches always contains :active, so no need for an existence check\n if ( !isXML( elem ) && !rbuggyMatches.test( expr ) && !rbuggyQSA.test( expr ) ) {\n try {\n var ret = matches.call( elem, expr );\n\n // IE 9's matchesSelector returns false on disconnected nodes\n if ( ret || disconnectedMatch ||\n // As well, disconnected nodes are said to be in a document\n // fragment in IE 9\n elem.document && elem.document.nodeType !== 11 ) {\n return ret;\n }\n } catch(e) {}\n }\n\n return Sizzle( expr, null, null, [ elem ] ).length > 0;\n };\n }\n })();\n}\n\n// Deprecated\nExpr.pseudos[\"nth\"] = Expr.pseudos[\"eq\"];\n\n// Back-compat\nfunction setFilters() {}\nExpr.filters = setFilters.prototype = Expr.pseudos;\nExpr.setFilters = new setFilters();\n\n// Override sizzle attribute retrieval\nSizzle.attr = jQuery.attr;\njQuery.find = Sizzle;\njQuery.expr = Sizzle.selectors;\njQuery.expr[\":\"] = jQuery.expr.pseudos;\njQuery.unique = Sizzle.uniqueSort;\njQuery.text = Sizzle.getText;\njQuery.isXMLDoc = Sizzle.isXML;\njQuery.contains = Sizzle.contains;\n\n\n})( window );\nvar runtil = /Until$/,\n rparentsprev = /^(?:parents|prev(?:Until|All))/,\n isSimple = /^.[^:#\\[\\.,]*$/,\n rneedsContext = jQuery.expr.match.needsContext,\n // methods guaranteed to produce a unique set when starting from a unique set\n guaranteedUnique = {\n children: true,\n contents: true,\n next: true,\n prev: true\n };\n\njQuery.fn.extend({\n find: function( selector ) {\n var i, l, length, n, r, ret,\n self = this;\n\n if ( typeof selector !== \"string\" ) {\n return jQuery( selector ).filter(function() {\n for ( i = 0, l = self.length; i < l; i++ ) {\n if ( jQuery.contains( self[ i ], this ) ) {\n return true;\n }\n }\n });\n }\n\n ret = this.pushStack( \"\", \"find\", selector );\n\n for ( i = 0, l = this.length; i < l; i++ ) {\n length = ret.length;\n jQuery.find( selector, this[i], ret );\n\n if ( i > 0 ) {\n // Make sure that the results are unique\n for ( n = length; n < ret.length; n++ ) {\n for ( r = 0; r < length; r++ ) {\n if ( ret[r] === ret[n] ) {\n ret.splice(n--, 1);\n break;\n }\n }\n }\n }\n }\n\n return ret;\n },\n\n has: function( target ) {\n var i,\n targets = jQuery( target, this ),\n len = targets.length;\n\n return this.filter(function() {\n for ( i = 0; i < len; i++ ) {\n if ( jQuery.contains( this, targets[i] ) ) {\n return true;\n }\n }\n });\n },\n\n not: function( selector ) {\n return this.pushStack( winnow(this, selector, false), \"not\", selector);\n },\n\n filter: function( selector ) {\n return this.pushStack( winnow(this, selector, true), \"filter\", selector );\n },\n\n is: function( selector ) {\n return !!selector && (\n typeof selector === \"string\" ?\n // If this is a positional/relative selector, check membership in the returned set\n // so $(\"p:first\").is(\"p:last\") won't return true for a doc with two \"p\".\n rneedsContext.test( selector ) ?\n jQuery( selector, this.context ).index( this[0] ) >= 0 :\n jQuery.filter( selector, this ).length > 0 :\n this.filter( selector ).length > 0 );\n },\n\n closest: function( selectors, context ) {\n var cur,\n i = 0,\n l = this.length,\n ret = [],\n pos = rneedsContext.test( selectors ) || typeof selectors !== \"string\" ?\n jQuery( selectors, context || this.context ) :\n 0;\n\n for ( ; i < l; i++ ) {\n cur = this[i];\n\n while ( cur && cur.ownerDocument && cur !== context && cur.nodeType !== 11 ) {\n if ( pos ? pos.index(cur) > -1 : jQuery.find.matchesSelector(cur, selectors) ) {\n ret.push( cur );\n break;\n }\n cur = cur.parentNode;\n }\n }\n\n ret = ret.length > 1 ? jQuery.unique( ret ) : ret;\n\n return this.pushStack( ret, \"closest\", selectors );\n },\n\n // Determine the position of an element within\n // the matched set of elements\n index: function( elem ) {\n\n // No argument, return index in parent\n if ( !elem ) {\n return ( this[0] && this[0].parentNode ) ? this.prevAll().length : -1;\n }\n\n // index in selector\n if ( typeof elem === \"string\" ) {\n return jQuery.inArray( this[0], jQuery( elem ) );\n }\n\n // Locate the position of the desired element\n return jQuery.inArray(\n // If it receives a jQuery object, the first element is used\n elem.jquery ? elem[0] : elem, this );\n },\n\n add: function( selector, context ) {\n var set = typeof selector === \"string\" ?\n jQuery( selector, context ) :\n jQuery.makeArray( selector && selector.nodeType ? [ selector ] : selector ),\n all = jQuery.merge( this.get(), set );\n\n return this.pushStack( isDisconnected( set[0] ) || isDisconnected( all[0] ) ?\n all :\n jQuery.unique( all ) );\n },\n\n addBack: function( selector ) {\n return this.add( selector == null ?\n this.prevObject : this.prevObject.filter(selector)\n );\n }\n});\n\njQuery.fn.andSelf = jQuery.fn.addBack;\n\n// A painfully simple check to see if an element is disconnected\n// from a document (should be improved, where feasible).\nfunction isDisconnected( node ) {\n return !node || !node.parentNode || node.parentNode.nodeType === 11;\n}\n\nfunction sibling( cur, dir ) {\n do {\n cur = cur[ dir ];\n } while ( cur && cur.nodeType !== 1 );\n\n return cur;\n}\n\njQuery.each({\n parent: function( elem ) {\n var parent = elem.parentNode;\n return parent && parent.nodeType !== 11 ? parent : null;\n },\n parents: function( elem ) {\n return jQuery.dir( elem, \"parentNode\" );\n },\n parentsUntil: function( elem, i, until ) {\n return jQuery.dir( elem, \"parentNode\", until );\n },\n next: function( elem ) {\n return sibling( elem, \"nextSibling\" );\n },\n prev: function( elem ) {\n return sibling( elem, \"previousSibling\" );\n },\n nextAll: function( elem ) {\n return jQuery.dir( elem, \"nextSibling\" );\n },\n prevAll: function( elem ) {\n return jQuery.dir( elem, \"previousSibling\" );\n },\n nextUntil: function( elem, i, until ) {\n return jQuery.dir( elem, \"nextSibling\", until );\n },\n prevUntil: function( elem, i, until ) {\n return jQuery.dir( elem, \"previousSibling\", until );\n },\n siblings: function( elem ) {\n return jQuery.sibling( ( elem.parentNode || {} ).firstChild, elem );\n },\n children: function( elem ) {\n return jQuery.sibling( elem.firstChild );\n },\n contents: function( elem ) {\n return jQuery.nodeName( elem, \"iframe\" ) ?\n elem.contentDocument || elem.contentWindow.document :\n jQuery.merge( [], elem.childNodes );\n }\n}, function( name, fn ) {\n jQuery.fn[ name ] = function( until, selector ) {\n var ret = jQuery.map( this, fn, until );\n\n if ( !runtil.test( name ) ) {\n selector = until;\n }\n\n if ( selector && typeof selector === \"string\" ) {\n ret = jQuery.filter( selector, ret );\n }\n\n ret = this.length > 1 && !guaranteedUnique[ name ] ? jQuery.unique( ret ) : ret;\n\n if ( this.length > 1 && rparentsprev.test( name ) ) {\n ret = ret.reverse();\n }\n\n return this.pushStack( ret, name, core_slice.call( arguments ).join(\",\") );\n };\n});\n\njQuery.extend({\n filter: function( expr, elems, not ) {\n if ( not ) {\n expr = \":not(\" + expr + \")\";\n }\n\n return elems.length === 1 ?\n jQuery.find.matchesSelector(elems[0], expr) ? [ elems[0] ] : [] :\n jQuery.find.matches(expr, elems);\n },\n\n dir: function( elem, dir, until ) {\n var matched = [],\n cur = elem[ dir ];\n\n while ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) {\n if ( cur.nodeType === 1 ) {\n matched.push( cur );\n }\n cur = cur[dir];\n }\n return matched;\n },\n\n sibling: function( n, elem ) {\n var r = [];\n\n for ( ; n; n = n.nextSibling ) {\n if ( n.nodeType === 1 && n !== elem ) {\n r.push( n );\n }\n }\n\n return r;\n }\n});\n\n// Implement the identical functionality for filter and not\nfunction winnow( elements, qualifier, keep ) {\n\n // Can't pass null or undefined to indexOf in Firefox 4\n // Set to 0 to skip string check\n qualifier = qualifier || 0;\n\n if ( jQuery.isFunction( qualifier ) ) {\n return jQuery.grep(elements, function( elem, i ) {\n var retVal = !!qualifier.call( elem, i, elem );\n return retVal === keep;\n });\n\n } else if ( qualifier.nodeType ) {\n return jQuery.grep(elements, function( elem, i ) {\n return ( elem === qualifier ) === keep;\n });\n\n } else if ( typeof qualifier === \"string\" ) {\n var filtered = jQuery.grep(elements, function( elem ) {\n return elem.nodeType === 1;\n });\n\n if ( isSimple.test( qualifier ) ) {\n return jQuery.filter(qualifier, filtered, !keep);\n } else {\n qualifier = jQuery.filter( qualifier, filtered );\n }\n }\n\n return jQuery.grep(elements, function( elem, i ) {\n return ( jQuery.inArray( elem, qualifier ) >= 0 ) === keep;\n });\n}\nfunction createSafeFragment( document ) {\n var list = nodeNames.split( \"|\" ),\n safeFrag = document.createDocumentFragment();\n\n if ( safeFrag.createElement ) {\n while ( list.length ) {\n safeFrag.createElement(\n list.pop()\n );\n }\n }\n return safeFrag;\n}\n\nvar nodeNames = \"abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|\" +\n \"header|hgroup|mark|meter|nav|output|progress|section|summary|time|video\",\n rinlinejQuery = / jQuery\\d+=\"(?:null|\\d+)\"/g,\n rleadingWhitespace = /^\\s+/,\n rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\\w:]+)[^>]*)\\/>/gi,\n rtagName = /<([\\w:]+)/,\n rtbody = /<tbody/i,\n rhtml = /<|&#?\\w+;/,\n rnoInnerhtml = /<(?:script|style|link)/i,\n rnocache = /<(?:script|object|embed|option|style)/i,\n rnoshimcache = new RegExp(\"<(?:\" + nodeNames + \")[\\\\s/>]\", \"i\"),\n rcheckableType = /^(?:checkbox|radio)$/,\n // checked=\"checked\" or checked\n rchecked = /checked\\s*(?:[^=]|=\\s*.checked.)/i,\n rscriptType = /\\/(java|ecma)script/i,\n rcleanScript = /^\\s*<!(?:\\[CDATA\\[|\\-\\-)|[\\]\\-]{2}>\\s*$/g,\n wrapMap = {\n option: [ 1, \"<select multiple='multiple'>\", \"</select>\" ],\n legend: [ 1, \"<fieldset>\", \"</fieldset>\" ],\n thead: [ 1, \"<table>\", \"</table>\" ],\n tr: [ 2, \"<table><tbody>\", \"</tbody></table>\" ],\n td: [ 3, \"<table><tbody><tr>\", \"</tr></tbody></table>\" ],\n col: [ 2, \"<table><tbody></tbody><colgroup>\", \"</colgroup></table>\" ],\n area: [ 1, \"<map>\", \"</map>\" ],\n _default: [ 0, \"\", \"\" ]\n },\n safeFragment = createSafeFragment( document ),\n fragmentDiv = safeFragment.appendChild( document.createElement(\"div\") );\n\nwrapMap.optgroup = wrapMap.option;\nwrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\nwrapMap.th = wrapMap.td;\n\n// IE6-8 can't serialize link, script, style, or any html5 (NoScope) tags,\n// unless wrapped in a div with non-breaking characters in front of it.\nif ( !jQuery.support.htmlSerialize ) {\n wrapMap._default = [ 1, \"X<div>\", \"</div>\" ];\n}\n\njQuery.fn.extend({\n text: function( value ) {\n return jQuery.access( this, function( value ) {\n return value === undefined ?\n jQuery.text( this ) :\n this.empty().append( ( this[0] && this[0].ownerDocument || document ).createTextNode( value ) );\n }, null, value, arguments.length );\n },\n\n wrapAll: function( html ) {\n if ( jQuery.isFunction( html ) ) {\n return this.each(function(i) {\n jQuery(this).wrapAll( html.call(this, i) );\n });\n }\n\n if ( this[0] ) {\n // The elements to wrap the target around\n var wrap = jQuery( html, this[0].ownerDocument ).eq(0).clone(true);\n\n if ( this[0].parentNode ) {\n wrap.insertBefore( this[0] );\n }\n\n wrap.map(function() {\n var elem = this;\n\n while ( elem.firstChild && elem.firstChild.nodeType === 1 ) {\n elem = elem.firstChild;\n }\n\n return elem;\n }).append( this );\n }\n\n return this;\n },\n\n wrapInner: function( html ) {\n if ( jQuery.isFunction( html ) ) {\n return this.each(function(i) {\n jQuery(this).wrapInner( html.call(this, i) );\n });\n }\n\n return this.each(function() {\n var self = jQuery( this ),\n contents = self.contents();\n\n if ( contents.length ) {\n contents.wrapAll( html );\n\n } else {\n self.append( html );\n }\n });\n },\n\n wrap: function( html ) {\n var isFunction = jQuery.isFunction( html );\n\n return this.each(function(i) {\n jQuery( this ).wrapAll( isFunction ? html.call(this, i) : html );\n });\n },\n\n unwrap: function() {\n return this.parent().each(function() {\n if ( !jQuery.nodeName( this, \"body\" ) ) {\n jQuery( this ).replaceWith( this.childNodes );\n }\n }).end();\n },\n\n append: function() {\n return this.domManip(arguments, true, function( elem ) {\n if ( this.nodeType === 1 || this.nodeType === 11 ) {\n this.appendChild( elem );\n }\n });\n },\n\n prepend: function() {\n return this.domManip(arguments, true, function( elem ) {\n if ( this.nodeType === 1 || this.nodeType === 11 ) {\n this.insertBefore( elem, this.firstChild );\n }\n });\n },\n\n before: function() {\n if ( !isDisconnected( this[0] ) ) {\n return this.domManip(arguments, false, function( elem ) {\n this.parentNode.insertBefore( elem, this );\n });\n }\n\n if ( arguments.length ) {\n var set = jQuery.clean( arguments );\n return this.pushStack( jQuery.merge( set, this ), \"before\", this.selector );\n }\n },\n\n after: function() {\n if ( !isDisconnected( this[0] ) ) {\n return this.domManip(arguments, false, function( elem ) {\n this.parentNode.insertBefore( elem, this.nextSibling );\n });\n }\n\n if ( arguments.length ) {\n var set = jQuery.clean( arguments );\n return this.pushStack( jQuery.merge( this, set ), \"after\", this.selector );\n }\n },\n\n // keepData is for internal use only--do not document\n remove: function( selector, keepData ) {\n var elem,\n i = 0;\n\n for ( ; (elem = this[i]) != null; i++ ) {\n if ( !selector || jQuery.filter( selector, [ elem ] ).length ) {\n if ( !keepData && elem.nodeType === 1 ) {\n jQuery.cleanData( elem.getElementsByTagName(\"*\") );\n jQuery.cleanData( [ elem ] );\n }\n\n if ( elem.parentNode ) {\n elem.parentNode.removeChild( elem );\n }\n }\n }\n\n return this;\n },\n\n empty: function() {\n var elem,\n i = 0;\n\n for ( ; (elem = this[i]) != null; i++ ) {\n // Remove element nodes and prevent memory leaks\n if ( elem.nodeType === 1 ) {\n jQuery.cleanData( elem.getElementsByTagName(\"*\") );\n }\n\n // Remove any remaining nodes\n while ( elem.firstChild ) {\n elem.removeChild( elem.firstChild );\n }\n }\n\n return this;\n },\n\n clone: function( dataAndEvents, deepDataAndEvents ) {\n dataAndEvents = dataAndEvents == null ? false : dataAndEvents;\n deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;\n\n return this.map( function () {\n return jQuery.clone( this, dataAndEvents, deepDataAndEvents );\n });\n },\n\n html: function( value ) {\n return jQuery.access( this, function( value ) {\n var elem = this[0] || {},\n i = 0,\n l = this.length;\n\n if ( value === undefined ) {\n return elem.nodeType === 1 ?\n elem.innerHTML.replace( rinlinejQuery, \"\" ) :\n undefined;\n }\n\n // See if we can take a shortcut and just use innerHTML\n if ( typeof value === \"string\" && !rnoInnerhtml.test( value ) &&\n ( jQuery.support.htmlSerialize || !rnoshimcache.test( value ) ) &&\n ( jQuery.support.leadingWhitespace || !rleadingWhitespace.test( value ) ) &&\n !wrapMap[ ( rtagName.exec( value ) || [\"\", \"\"] )[1].toLowerCase() ] ) {\n\n value = value.replace( rxhtmlTag, \"<$1></$2>\" );\n\n try {\n for (; i < l; i++ ) {\n // Remove element nodes and prevent memory leaks\n elem = this[i] || {};\n if ( elem.nodeType === 1 ) {\n jQuery.cleanData( elem.getElementsByTagName( \"*\" ) );\n elem.innerHTML = value;\n }\n }\n\n elem = 0;\n\n // If using innerHTML throws an exception, use the fallback method\n } catch(e) {}\n }\n\n if ( elem ) {\n this.empty().append( value );\n }\n }, null, value, arguments.length );\n },\n\n replaceWith: function( value ) {\n if ( !isDisconnected( this[0] ) ) {\n // Make sure that the elements are removed from the DOM before they are inserted\n // this can help fix replacing a parent with child elements\n if ( jQuery.isFunction( value ) ) {\n return this.each(function(i) {\n var self = jQuery(this), old = self.html();\n self.replaceWith( value.call( this, i, old ) );\n });\n }\n\n if ( typeof value !== \"string\" ) {\n value = jQuery( value ).detach();\n }\n\n return this.each(function() {\n var next = this.nextSibling,\n parent = this.parentNode;\n\n jQuery( this ).remove();\n\n if ( next ) {\n jQuery(next).before( value );\n } else {\n jQuery(parent).append( value );\n }\n });\n }\n\n return this.length ?\n this.pushStack( jQuery(jQuery.isFunction(value) ? value() : value), \"replaceWith\", value ) :\n this;\n },\n\n detach: function( selector ) {\n return this.remove( selector, true );\n },\n\n domManip: function( args, table, callback ) {\n\n // Flatten any nested arrays\n args = [].concat.apply( [], args );\n\n var results, first, fragment, iNoClone,\n i = 0,\n value = args[0],\n scripts = [],\n l = this.length;\n\n // We can't cloneNode fragments that contain checked, in WebKit\n if ( !jQuery.support.checkClone && l > 1 && typeof value === \"string\" && rchecked.test( value ) ) {\n return this.each(function() {\n jQuery(this).domManip( args, table, callback );\n });\n }\n\n if ( jQuery.isFunction(value) ) {\n return this.each(function(i) {\n var self = jQuery(this);\n args[0] = value.call( this, i, table ? self.html() : undefined );\n self.domManip( args, table, callback );\n });\n }\n\n if ( this[0] ) {\n results = jQuery.buildFragment( args, this, scripts );\n fragment = results.fragment;\n first = fragment.firstChild;\n\n if ( fragment.childNodes.length === 1 ) {\n fragment = first;\n }\n\n if ( first ) {\n table = table && jQuery.nodeName( first, \"tr\" );\n\n // Use the original fragment for the last item instead of the first because it can end up\n // being emptied incorrectly in certain situations (#8070).\n // Fragments from the fragment cache must always be cloned and never used in place.\n for ( iNoClone = results.cacheable || l - 1; i < l; i++ ) {\n callback.call(\n table && jQuery.nodeName( this[i], \"table\" ) ?\n findOrAppend( this[i], \"tbody\" ) :\n this[i],\n i === iNoClone ?\n fragment :\n jQuery.clone( fragment, true, true )\n );\n }\n }\n\n // Fix #11809: Avoid leaking memory\n fragment = first = null;\n\n if ( scripts.length ) {\n jQuery.each( scripts, function( i, elem ) {\n if ( elem.src ) {\n if ( jQuery.ajax ) {\n jQuery.ajax({\n url: elem.src,\n type: \"GET\",\n dataType: \"script\",\n async: false,\n global: false,\n \"throws\": true\n });\n } else {\n jQuery.error(\"no ajax\");\n }\n } else {\n jQuery.globalEval( ( elem.text || elem.textContent || elem.innerHTML || \"\" ).replace( rcleanScript, \"\" ) );\n }\n\n if ( elem.parentNode ) {\n elem.parentNode.removeChild( elem );\n }\n });\n }\n }\n\n return this;\n }\n});\n\nfunction findOrAppend( elem, tag ) {\n return elem.getElementsByTagName( tag )[0] || elem.appendChild( elem.ownerDocument.createElement( tag ) );\n}\n\nfunction cloneCopyEvent( src, dest ) {\n\n if ( dest.nodeType !== 1 || !jQuery.hasData( src ) ) {\n return;\n }\n\n var type, i, l,\n oldData = jQuery._data( src ),\n curData = jQuery._data( dest, oldData ),\n events = oldData.events;\n\n if ( events ) {\n delete curData.handle;\n curData.events = {};\n\n for ( type in events ) {\n for ( i = 0, l = events[ type ].length; i < l; i++ ) {\n jQuery.event.add( dest, type, events[ type ][ i ] );\n }\n }\n }\n\n // make the cloned public data object a copy from the original\n if ( curData.data ) {\n curData.data = jQuery.extend( {}, curData.data );\n }\n}\n\nfunction cloneFixAttributes( src, dest ) {\n var nodeName;\n\n // We do not need to do anything for non-Elements\n if ( dest.nodeType !== 1 ) {\n return;\n }\n\n // clearAttributes removes the attributes, which we don't want,\n // but also removes the attachEvent events, which we *do* want\n if ( dest.clearAttributes ) {\n dest.clearAttributes();\n }\n\n // mergeAttributes, in contrast, only merges back on the\n // original attributes, not the events\n if ( dest.mergeAttributes ) {\n dest.mergeAttributes( src );\n }\n\n nodeName = dest.nodeName.toLowerCase();\n\n if ( nodeName === \"object\" ) {\n // IE6-10 improperly clones children of object elements using classid.\n // IE10 throws NoModificationAllowedError if parent is null, #12132.\n if ( dest.parentNode ) {\n dest.outerHTML = src.outerHTML;\n }\n\n // This path appears unavoidable for IE9. When cloning an object\n // element in IE9, the outerHTML strategy above is not sufficient.\n // If the src has innerHTML and the destination does not,\n // copy the src.innerHTML into the dest.innerHTML. #10324\n if ( jQuery.support.html5Clone && (src.innerHTML && !jQuery.trim(dest.innerHTML)) ) {\n dest.innerHTML = src.innerHTML;\n }\n\n } else if ( nodeName === \"input\" && rcheckableType.test( src.type ) ) {\n // IE6-8 fails to persist the checked state of a cloned checkbox\n // or radio button. Worse, IE6-7 fail to give the cloned element\n // a checked appearance if the defaultChecked value isn't also set\n\n dest.defaultChecked = dest.checked = src.checked;\n\n // IE6-7 get confused and end up setting the value of a cloned\n // checkbox/radio button to an empty string instead of \"on\"\n if ( dest.value !== src.value ) {\n dest.value = src.value;\n }\n\n // IE6-8 fails to return the selected option to the default selected\n // state when cloning options\n } else if ( nodeName === \"option\" ) {\n dest.selected = src.defaultSelected;\n\n // IE6-8 fails to set the defaultValue to the correct value when\n // cloning other types of input fields\n } else if ( nodeName === \"input\" || nodeName === \"textarea\" ) {\n dest.defaultValue = src.defaultValue;\n\n // IE blanks contents when cloning scripts\n } else if ( nodeName === \"script\" && dest.text !== src.text ) {\n dest.text = src.text;\n }\n\n // Event data gets referenced instead of copied if the expando\n // gets copied too\n dest.removeAttribute( jQuery.expando );\n}\n\njQuery.buildFragment = function( args, context, scripts ) {\n var fragment, cacheable, cachehit,\n first = args[ 0 ];\n\n // Set context from what may come in as undefined or a jQuery collection or a node\n // Updated to fix #12266 where accessing context[0] could throw an exception in IE9/10 &\n // also doubles as fix for #8950 where plain objects caused createDocumentFragment exception\n context = context || document;\n context = !context.nodeType && context[0] || context;\n context = context.ownerDocument || context;\n\n // Only cache \"small\" (1/2 KB) HTML strings that are associated with the main document\n // Cloning options loses the selected state, so don't cache them\n // IE 6 doesn't like it when you put <object> or <embed> elements in a fragment\n // Also, WebKit does not clone 'checked' attributes on cloneNode, so don't cache\n // Lastly, IE6,7,8 will not correctly reuse cached fragments that were created from unknown elems #10501\n if ( args.length === 1 && typeof first === \"string\" && first.length < 512 && context === document &&\n first.charAt(0) === \"<\" && !rnocache.test( first ) &&\n (jQuery.support.checkClone || !rchecked.test( first )) &&\n (jQuery.support.html5Clone || !rnoshimcache.test( first )) ) {\n\n // Mark cacheable and look for a hit\n cacheable = true;\n fragment = jQuery.fragments[ first ];\n cachehit = fragment !== undefined;\n }\n\n if ( !fragment ) {\n fragment = context.createDocumentFragment();\n jQuery.clean( args, context, fragment, scripts );\n\n // Update the cache, but only store false\n // unless this is a second parsing of the same content\n if ( cacheable ) {\n jQuery.fragments[ first ] = cachehit && fragment;\n }\n }\n\n return { fragment: fragment, cacheable: cacheable };\n};\n\njQuery.fragments = {};\n\njQuery.each({\n appendTo: \"append\",\n prependTo: \"prepend\",\n insertBefore: \"before\",\n insertAfter: \"after\",\n replaceAll: \"replaceWith\"\n}, function( name, original ) {\n jQuery.fn[ name ] = function( selector ) {\n var elems,\n i = 0,\n ret = [],\n insert = jQuery( selector ),\n l = insert.length,\n parent = this.length === 1 && this[0].parentNode;\n\n if ( (parent == null || parent && parent.nodeType === 11 && parent.childNodes.length === 1) && l === 1 ) {\n insert[ original ]( this[0] );\n return this;\n } else {\n for ( ; i < l; i++ ) {\n elems = ( i > 0 ? this.clone(true) : this ).get();\n jQuery( insert[i] )[ original ]( elems );\n ret = ret.concat( elems );\n }\n\n return this.pushStack( ret, name, insert.selector );\n }\n };\n});\n\nfunction getAll( elem ) {\n if ( typeof elem.getElementsByTagName !== \"undefined\" ) {\n return elem.getElementsByTagName( \"*\" );\n\n } else if ( typeof elem.querySelectorAll !== \"undefined\" ) {\n return elem.querySelectorAll( \"*\" );\n\n } else {\n return [];\n }\n}\n\n// Used in clean, fixes the defaultChecked property\nfunction fixDefaultChecked( elem ) {\n if ( rcheckableType.test( elem.type ) ) {\n elem.defaultChecked = elem.checked;\n }\n}\n\njQuery.extend({\n clone: function( elem, dataAndEvents, deepDataAndEvents ) {\n var srcElements,\n destElements,\n i,\n clone;\n\n if ( jQuery.support.html5Clone || jQuery.isXMLDoc(elem) || !rnoshimcache.test( \"<\" + elem.nodeName + \">\" ) ) {\n clone = elem.cloneNode( true );\n\n // IE<=8 does not properly clone detached, unknown element nodes\n } else {\n fragmentDiv.innerHTML = elem.outerHTML;\n fragmentDiv.removeChild( clone = fragmentDiv.firstChild );\n }\n\n if ( (!jQuery.support.noCloneEvent || !jQuery.support.noCloneChecked) &&\n (elem.nodeType === 1 || elem.nodeType === 11) && !jQuery.isXMLDoc(elem) ) {\n // IE copies events bound via attachEvent when using cloneNode.\n // Calling detachEvent on the clone will also remove the events\n // from the original. In order to get around this, we use some\n // proprietary methods to clear the events. Thanks to MooTools\n // guys for this hotness.\n\n cloneFixAttributes( elem, clone );\n\n // Using Sizzle here is crazy slow, so we use getElementsByTagName instead\n srcElements = getAll( elem );\n destElements = getAll( clone );\n\n // Weird iteration because IE will replace the length property\n // with an element if you are cloning the body and one of the\n // elements on the page has a name or id of \"length\"\n for ( i = 0; srcElements[i]; ++i ) {\n // Ensure that the destination node is not null; Fixes #9587\n if ( destElements[i] ) {\n cloneFixAttributes( srcElements[i], destElements[i] );\n }\n }\n }\n\n // Copy the events from the original to the clone\n if ( dataAndEvents ) {\n cloneCopyEvent( elem, clone );\n\n if ( deepDataAndEvents ) {\n srcElements = getAll( elem );\n destElements = getAll( clone );\n\n for ( i = 0; srcElements[i]; ++i ) {\n cloneCopyEvent( srcElements[i], destElements[i] );\n }\n }\n }\n\n srcElements = destElements = null;\n\n // Return the cloned set\n return clone;\n },\n\n clean: function( elems, context, fragment, scripts ) {\n var i, j, elem, tag, wrap, depth, div, hasBody, tbody, len, handleScript, jsTags,\n safe = context === document && safeFragment,\n ret = [];\n\n // Ensure that context is a document\n if ( !context || typeof context.createDocumentFragment === \"undefined\" ) {\n context = document;\n }\n\n // Use the already-created safe fragment if context permits\n for ( i = 0; (elem = elems[i]) != null; i++ ) {\n if ( typeof elem === \"number\" ) {\n elem += \"\";\n }\n\n if ( !elem ) {\n continue;\n }\n\n // Convert html string into DOM nodes\n if ( typeof elem === \"string\" ) {\n if ( !rhtml.test( elem ) ) {\n elem = context.createTextNode( elem );\n } else {\n // Ensure a safe container in which to render the html\n safe = safe || createSafeFragment( context );\n div = context.createElement(\"div\");\n safe.appendChild( div );\n\n // Fix \"XHTML\"-style tags in all browsers\n elem = elem.replace(rxhtmlTag, \"<$1></$2>\");\n\n // Go to html and back, then peel off extra wrappers\n tag = ( rtagName.exec( elem ) || [\"\", \"\"] )[1].toLowerCase();\n wrap = wrapMap[ tag ] || wrapMap._default;\n depth = wrap[0];\n div.innerHTML = wrap[1] + elem + wrap[2];\n\n // Move to the right depth\n while ( depth-- ) {\n div = div.lastChild;\n }\n\n // Remove IE's autoinserted <tbody> from table fragments\n if ( !jQuery.support.tbody ) {\n\n // String was a <table>, *may* have spurious <tbody>\n hasBody = rtbody.test(elem);\n tbody = tag === \"table\" && !hasBody ?\n div.firstChild && div.firstChild.childNodes :\n\n // String was a bare <thead> or <tfoot>\n wrap[1] === \"<table>\" && !hasBody ?\n div.childNodes :\n [];\n\n for ( j = tbody.length - 1; j >= 0 ; --j ) {\n if ( jQuery.nodeName( tbody[ j ], \"tbody\" ) && !tbody[ j ].childNodes.length ) {\n tbody[ j ].parentNode.removeChild( tbody[ j ] );\n }\n }\n }\n\n // IE completely kills leading whitespace when innerHTML is used\n if ( !jQuery.support.leadingWhitespace && rleadingWhitespace.test( elem ) ) {\n div.insertBefore( context.createTextNode( rleadingWhitespace.exec(elem)[0] ), div.firstChild );\n }\n\n elem = div.childNodes;\n\n // Take out of fragment container (we need a fresh div each time)\n div.parentNode.removeChild( div );\n }\n }\n\n if ( elem.nodeType ) {\n ret.push( elem );\n } else {\n jQuery.merge( ret, elem );\n }\n }\n\n // Fix #11356: Clear elements from safeFragment\n if ( div ) {\n elem = div = safe = null;\n }\n\n // Reset defaultChecked for any radios and checkboxes\n // about to be appended to the DOM in IE 6/7 (#8060)\n if ( !jQuery.support.appendChecked ) {\n for ( i = 0; (elem = ret[i]) != null; i++ ) {\n if ( jQuery.nodeName( elem, \"input\" ) ) {\n fixDefaultChecked( elem );\n } else if ( typeof elem.getElementsByTagName !== \"undefined\" ) {\n jQuery.grep( elem.getElementsByTagName(\"input\"), fixDefaultChecked );\n }\n }\n }\n\n // Append elements to a provided document fragment\n if ( fragment ) {\n // Special handling of each script element\n handleScript = function( elem ) {\n // Check if we consider it executable\n if ( !elem.type || rscriptType.test( elem.type ) ) {\n // Detach the script and store it in the scripts array (if provided) or the fragment\n // Return truthy to indicate that it has been handled\n return scripts ?\n scripts.push( elem.parentNode ? elem.parentNode.removeChild( elem ) : elem ) :\n fragment.appendChild( elem );\n }\n };\n\n for ( i = 0; (elem = ret[i]) != null; i++ ) {\n // Check if we're done after handling an executable script\n if ( !( jQuery.nodeName( elem, \"script\" ) && handleScript( elem ) ) ) {\n // Append to fragment and handle embedded scripts\n fragment.appendChild( elem );\n if ( typeof elem.getElementsByTagName !== \"undefined\" ) {\n // handleScript alters the DOM, so use jQuery.merge to ensure snapshot iteration\n jsTags = jQuery.grep( jQuery.merge( [], elem.getElementsByTagName(\"script\") ), handleScript );\n\n // Splice the scripts into ret after their former ancestor and advance our index beyond them\n ret.splice.apply( ret, [i + 1, 0].concat( jsTags ) );\n i += jsTags.length;\n }\n }\n }\n }\n\n return ret;\n },\n\n cleanData: function( elems, /* internal */ acceptData ) {\n var data, id, elem, type,\n i = 0,\n internalKey = jQuery.expando,\n cache = jQuery.cache,\n deleteExpando = jQuery.support.deleteExpando,\n special = jQuery.event.special;\n\n for ( ; (elem = elems[i]) != null; i++ ) {\n\n if ( acceptData || jQuery.acceptData( elem ) ) {\n\n id = elem[ internalKey ];\n data = id && cache[ id ];\n\n if ( data ) {\n if ( data.events ) {\n for ( type in data.events ) {\n if ( special[ type ] ) {\n jQuery.event.remove( elem, type );\n\n // This is a shortcut to avoid jQuery.event.remove's overhead\n } else {\n jQuery.removeEvent( elem, type, data.handle );\n }\n }\n }\n\n // Remove cache only if it was not already removed by jQuery.event.remove\n if ( cache[ id ] ) {\n\n delete cache[ id ];\n\n // IE does not allow us to delete expando properties from nodes,\n // nor does it have a removeAttribute function on Document nodes;\n // we must handle all of these cases\n if ( deleteExpando ) {\n delete elem[ internalKey ];\n\n } else if ( elem.removeAttribute ) {\n elem.removeAttribute( internalKey );\n\n } else {\n elem[ internalKey ] = null;\n }\n\n jQuery.deletedIds.push( id );\n }\n }\n }\n }\n }\n});\n// Limit scope pollution from any deprecated API\n(function() {\n\nvar matched, browser;\n\n// Use of jQuery.browser is frowned upon.\n// More details: http://api.jquery.com/jQuery.browser\n// jQuery.uaMatch maintained for back-compat\njQuery.uaMatch = function( ua ) {\n ua = ua.toLowerCase();\n\n var match = /(chrome)[ \\/]([\\w.]+)/.exec( ua ) ||\n /(webkit)[ \\/]([\\w.]+)/.exec( ua ) ||\n /(opera)(?:.*version|)[ \\/]([\\w.]+)/.exec( ua ) ||\n /(msie) ([\\w.]+)/.exec( ua ) ||\n ua.indexOf(\"compatible\") < 0 && /(mozilla)(?:.*? rv:([\\w.]+)|)/.exec( ua ) ||\n [];\n\n return {\n browser: match[ 1 ] || \"\",\n version: match[ 2 ] || \"0\"\n };\n};\n\nmatched = jQuery.uaMatch( navigator.userAgent );\nbrowser = {};\n\nif ( matched.browser ) {\n browser[ matched.browser ] = true;\n browser.version = matched.version;\n}\n\n// Chrome is Webkit, but Webkit is also Safari.\nif ( browser.chrome ) {\n browser.webkit = true;\n} else if ( browser.webkit ) {\n browser.safari = true;\n}\n\njQuery.browser = browser;\n\njQuery.sub = function() {\n function jQuerySub( selector, context ) {\n return new jQuerySub.fn.init( selector, context );\n }\n jQuery.extend( true, jQuerySub, this );\n jQuerySub.superclass = this;\n jQuerySub.fn = jQuerySub.prototype = this();\n jQuerySub.fn.constructor = jQuerySub;\n jQuerySub.sub = this.sub;\n jQuerySub.fn.init = function init( selector, context ) {\n if ( context && context instanceof jQuery && !(context instanceof jQuerySub) ) {\n context = jQuerySub( context );\n }\n\n return jQuery.fn.init.call( this, selector, context, rootjQuerySub );\n };\n jQuerySub.fn.init.prototype = jQuerySub.fn;\n var rootjQuerySub = jQuerySub(document);\n return jQuerySub;\n};\n\n})();\nvar curCSS, iframe, iframeDoc,\n ralpha = /alpha\\([^)]*\\)/i,\n ropacity = /opacity=([^)]*)/,\n rposition = /^(top|right|bottom|left)$/,\n // swappable if display is none or starts with table except \"table\", \"table-cell\", or \"table-caption\"\n // see here for display values: https://developer.mozilla.org/en-US/docs/CSS/display\n rdisplayswap = /^(none|table(?!-c[ea]).+)/,\n rmargin = /^margin/,\n rnumsplit = new RegExp( \"^(\" + core_pnum + \")(.*)$\", \"i\" ),\n rnumnonpx = new RegExp( \"^(\" + core_pnum + \")(?!px)[a-z%]+$\", \"i\" ),\n rrelNum = new RegExp( \"^([-+])=(\" + core_pnum + \")\", \"i\" ),\n elemdisplay = { BODY: \"block\" },\n\n cssShow = { position: \"absolute\", visibility: \"hidden\", display: \"block\" },\n cssNormalTransform = {\n letterSpacing: 0,\n fontWeight: 400\n },\n\n cssExpand = [ \"Top\", \"Right\", \"Bottom\", \"Left\" ],\n cssPrefixes = [ \"Webkit\", \"O\", \"Moz\", \"ms\" ],\n\n eventsToggle = jQuery.fn.toggle;\n\n// return a css property mapped to a potentially vendor prefixed property\nfunction vendorPropName( style, name ) {\n\n // shortcut for names that are not vendor prefixed\n if ( name in style ) {\n return name;\n }\n\n // check for vendor prefixed names\n var capName = name.charAt(0).toUpperCase() + name.slice(1),\n origName = name,\n i = cssPrefixes.length;\n\n while ( i-- ) {\n name = cssPrefixes[ i ] + capName;\n if ( name in style ) {\n return name;\n }\n }\n\n return origName;\n}\n\nfunction isHidden( elem, el ) {\n elem = el || elem;\n return jQuery.css( elem, \"display\" ) === \"none\" || !jQuery.contains( elem.ownerDocument, elem );\n}\n\nfunction showHide( elements, show ) {\n var elem, display,\n values = [],\n index = 0,\n length = elements.length;\n\n for ( ; index < length; index++ ) {\n elem = elements[ index ];\n if ( !elem.style ) {\n continue;\n }\n values[ index ] = jQuery._data( elem, \"olddisplay\" );\n if ( show ) {\n // Reset the inline display of this element to learn if it is\n // being hidden by cascaded rules or not\n if ( !values[ index ] && elem.style.display === \"none\" ) {\n elem.style.display = \"\";\n }\n\n // Set elements which have been overridden with display: none\n // in a stylesheet to whatever the default browser style is\n // for such an element\n if ( elem.style.display === \"\" && isHidden( elem ) ) {\n values[ index ] = jQuery._data( elem, \"olddisplay\", css_defaultDisplay(elem.nodeName) );\n }\n } else {\n display = curCSS( elem, \"display\" );\n\n if ( !values[ index ] && display !== \"none\" ) {\n jQuery._data( elem, \"olddisplay\", display );\n }\n }\n }\n\n // Set the display of most of the elements in a second loop\n // to avoid the constant reflow\n for ( index = 0; index < length; index++ ) {\n elem = elements[ index ];\n if ( !elem.style ) {\n continue;\n }\n if ( !show || elem.style.display === \"none\" || elem.style.display === \"\" ) {\n elem.style.display = show ? values[ index ] || \"\" : \"none\";\n }\n }\n\n return elements;\n}\n\njQuery.fn.extend({\n css: function( name, value ) {\n return jQuery.access( this, function( elem, name, value ) {\n return value !== undefined ?\n jQuery.style( elem, name, value ) :\n jQuery.css( elem, name );\n }, name, value, arguments.length > 1 );\n },\n show: function() {\n return showHide( this, true );\n },\n hide: function() {\n return showHide( this );\n },\n toggle: function( state, fn2 ) {\n var bool = typeof state === \"boolean\";\n\n if ( jQuery.isFunction( state ) && jQuery.isFunction( fn2 ) ) {\n return eventsToggle.apply( this, arguments );\n }\n\n return this.each(function() {\n if ( bool ? state : isHidden( this ) ) {\n jQuery( this ).show();\n } else {\n jQuery( this ).hide();\n }\n });\n }\n});\n\njQuery.extend({\n // Add in style property hooks for overriding the default\n // behavior of getting and setting a style property\n cssHooks: {\n opacity: {\n get: function( elem, computed ) {\n if ( computed ) {\n // We should always get a number back from opacity\n var ret = curCSS( elem, \"opacity\" );\n return ret === \"\" ? \"1\" : ret;\n\n }\n }\n }\n },\n\n // Exclude the following css properties to add px\n cssNumber: {\n \"fillOpacity\": true,\n \"fontWeight\": true,\n \"lineHeight\": true,\n \"opacity\": true,\n \"orphans\": true,\n \"widows\": true,\n \"zIndex\": true,\n \"zoom\": true\n },\n\n // Add in properties whose names you wish to fix before\n // setting or getting the value\n cssProps: {\n // normalize float css property\n \"float\": jQuery.support.cssFloat ? \"cssFloat\" : \"styleFloat\"\n },\n\n // Get and set the style property on a DOM Node\n style: function( elem, name, value, extra ) {\n // Don't set styles on text and comment nodes\n if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {\n return;\n }\n\n // Make sure that we're working with the right name\n var ret, type, hooks,\n origName = jQuery.camelCase( name ),\n style = elem.style;\n\n name = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( style, origName ) );\n\n // gets hook for the prefixed version\n // followed by the unprefixed version\n hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n // Check if we're setting a value\n if ( value !== undefined ) {\n type = typeof value;\n\n // convert relative number strings (+= or -=) to relative numbers. #7345\n if ( type === \"string\" && (ret = rrelNum.exec( value )) ) {\n value = ( ret[1] + 1 ) * ret[2] + parseFloat( jQuery.css( elem, name ) );\n // Fixes bug #9237\n type = \"number\";\n }\n\n // Make sure that NaN and null values aren't set. See: #7116\n if ( value == null || type === \"number\" && isNaN( value ) ) {\n return;\n }\n\n // If a number was passed in, add 'px' to the (except for certain CSS properties)\n if ( type === \"number\" && !jQuery.cssNumber[ origName ] ) {\n value += \"px\";\n }\n\n // If a hook was provided, use that value, otherwise just set the specified value\n if ( !hooks || !(\"set\" in hooks) || (value = hooks.set( elem, value, extra )) !== undefined ) {\n // Wrapped to prevent IE from throwing errors when 'invalid' values are provided\n // Fixes bug #5509\n try {\n style[ name ] = value;\n } catch(e) {}\n }\n\n } else {\n // If a hook was provided get the non-computed value from there\n if ( hooks && \"get\" in hooks && (ret = hooks.get( elem, false, extra )) !== undefined ) {\n return ret;\n }\n\n // Otherwise just get the value from the style object\n return style[ name ];\n }\n },\n\n css: function( elem, name, numeric, extra ) {\n var val, num, hooks,\n origName = jQuery.camelCase( name );\n\n // Make sure that we're working with the right name\n name = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( elem.style, origName ) );\n\n // gets hook for the prefixed version\n // followed by the unprefixed version\n hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n // If a hook was provided get the computed value from there\n if ( hooks && \"get\" in hooks ) {\n val = hooks.get( elem, true, extra );\n }\n\n // Otherwise, if a way to get the computed value exists, use that\n if ( val === undefined ) {\n val = curCSS( elem, name );\n }\n\n //convert \"normal\" to computed value\n if ( val === \"normal\" && name in cssNormalTransform ) {\n val = cssNormalTransform[ name ];\n }\n\n // Return, converting to number if forced or a qualifier was provided and val looks numeric\n if ( numeric || extra !== undefined ) {\n num = parseFloat( val );\n return numeric || jQuery.isNumeric( num ) ? num || 0 : val;\n }\n return val;\n },\n\n // A method for quickly swapping in/out CSS properties to get correct calculations\n swap: function( elem, options, callback ) {\n var ret, name,\n old = {};\n\n // Remember the old values, and insert the new ones\n for ( name in options ) {\n old[ name ] = elem.style[ name ];\n elem.style[ name ] = options[ name ];\n }\n\n ret = callback.call( elem );\n\n // Revert the old values\n for ( name in options ) {\n elem.style[ name ] = old[ name ];\n }\n\n return ret;\n }\n});\n\n// NOTE: To any future maintainer, we've window.getComputedStyle\n// because jsdom on node.js will break without it.\nif ( window.getComputedStyle ) {\n curCSS = function( elem, name ) {\n var ret, width, minWidth, maxWidth,\n computed = window.getComputedStyle( elem, null ),\n style = elem.style;\n\n if ( computed ) {\n\n // getPropertyValue is only needed for .css('filter') in IE9, see #12537\n ret = computed.getPropertyValue( name ) || computed[ name ];\n\n if ( ret === \"\" && !jQuery.contains( elem.ownerDocument, elem ) ) {\n ret = jQuery.style( elem, name );\n }\n\n // A tribute to the \"awesome hack by Dean Edwards\"\n // Chrome < 17 and Safari 5.0 uses \"computed value\" instead of \"used value\" for margin-right\n // Safari 5.1.7 (at least) returns percentage for a larger set of values, but width seems to be reliably pixels\n // this is against the CSSOM draft spec: http://dev.w3.org/csswg/cssom/#resolved-values\n if ( rnumnonpx.test( ret ) && rmargin.test( name ) ) {\n width = style.width;\n minWidth = style.minWidth;\n maxWidth = style.maxWidth;\n\n style.minWidth = style.maxWidth = style.width = ret;\n ret = computed.width;\n\n style.width = width;\n style.minWidth = minWidth;\n style.maxWidth = maxWidth;\n }\n }\n\n return ret;\n };\n} else if ( document.documentElement.currentStyle ) {\n curCSS = function( elem, name ) {\n var left, rsLeft,\n ret = elem.currentStyle && elem.currentStyle[ name ],\n style = elem.style;\n\n // Avoid setting ret to empty string here\n // so we don't default to auto\n if ( ret == null && style && style[ name ] ) {\n ret = style[ name ];\n }\n\n // From the awesome hack by Dean Edwards\n // http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291\n\n // If we're not dealing with a regular pixel number\n // but a number that has a weird ending, we need to convert it to pixels\n // but not position css attributes, as those are proportional to the parent element instead\n // and we can't measure the parent instead because it might trigger a \"stacking dolls\" problem\n if ( rnumnonpx.test( ret ) && !rposition.test( name ) ) {\n\n // Remember the original values\n left = style.left;\n rsLeft = elem.runtimeStyle && elem.runtimeStyle.left;\n\n // Put in the new values to get a computed value out\n if ( rsLeft ) {\n elem.runtimeStyle.left = elem.currentStyle.left;\n }\n style.left = name === \"fontSize\" ? \"1em\" : ret;\n ret = style.pixelLeft + \"px\";\n\n // Revert the changed values\n style.left = left;\n if ( rsLeft ) {\n elem.runtimeStyle.left = rsLeft;\n }\n }\n\n return ret === \"\" ? \"auto\" : ret;\n };\n}\n\nfunction setPositiveNumber( elem, value, subtract ) {\n var matches = rnumsplit.exec( value );\n return matches ?\n Math.max( 0, matches[ 1 ] - ( subtract || 0 ) ) + ( matches[ 2 ] || \"px\" ) :\n value;\n}\n\nfunction augmentWidthOrHeight( elem, name, extra, isBorderBox ) {\n var i = extra === ( isBorderBox ? \"border\" : \"content\" ) ?\n // If we already have the right measurement, avoid augmentation\n 4 :\n // Otherwise initialize for horizontal or vertical properties\n name === \"width\" ? 1 : 0,\n\n val = 0;\n\n for ( ; i < 4; i += 2 ) {\n // both box models exclude margin, so add it if we want it\n if ( extra === \"margin\" ) {\n // we use jQuery.css instead of curCSS here\n // because of the reliableMarginRight CSS hook!\n val += jQuery.css( elem, extra + cssExpand[ i ], true );\n }\n\n // From this point on we use curCSS for maximum performance (relevant in animations)\n if ( isBorderBox ) {\n // border-box includes padding, so remove it if we want content\n if ( extra === \"content\" ) {\n val -= parseFloat( curCSS( elem, \"padding\" + cssExpand[ i ] ) ) || 0;\n }\n\n // at this point, extra isn't border nor margin, so remove border\n if ( extra !== \"margin\" ) {\n val -= parseFloat( curCSS( elem, \"border\" + cssExpand[ i ] + \"Width\" ) ) || 0;\n }\n } else {\n // at this point, extra isn't content, so add padding\n val += parseFloat( curCSS( elem, \"padding\" + cssExpand[ i ] ) ) || 0;\n\n // at this point, extra isn't content nor padding, so add border\n if ( extra !== \"padding\" ) {\n val += parseFloat( curCSS( elem, \"border\" + cssExpand[ i ] + \"Width\" ) ) || 0;\n }\n }\n }\n\n return val;\n}\n\nfunction getWidthOrHeight( elem, name, extra ) {\n\n // Start with offset property, which is equivalent to the border-box value\n var val = name === \"width\" ? elem.offsetWidth : elem.offsetHeight,\n valueIsBorderBox = true,\n isBorderBox = jQuery.support.boxSizing && jQuery.css( elem, \"boxSizing\" ) === \"border-box\";\n\n // some non-html elements return undefined for offsetWidth, so check for null/undefined\n // svg - https://bugzilla.mozilla.org/show_bug.cgi?id=649285\n // MathML - https://bugzilla.mozilla.org/show_bug.cgi?id=491668\n if ( val <= 0 || val == null ) {\n // Fall back to computed then uncomputed css if necessary\n val = curCSS( elem, name );\n if ( val < 0 || val == null ) {\n val = elem.style[ name ];\n }\n\n // Computed unit is not pixels. Stop here and return.\n if ( rnumnonpx.test(val) ) {\n return val;\n }\n\n // we need the check for style in case a browser which returns unreliable values\n // for getComputedStyle silently falls back to the reliable elem.style\n valueIsBorderBox = isBorderBox && ( jQuery.support.boxSizingReliable || val === elem.style[ name ] );\n\n // Normalize \"\", auto, and prepare for extra\n val = parseFloat( val ) || 0;\n }\n\n // use the active box-sizing model to add/subtract irrelevant styles\n return ( val +\n augmentWidthOrHeight(\n elem,\n name,\n extra || ( isBorderBox ? \"border\" : \"content\" ),\n valueIsBorderBox\n )\n ) + \"px\";\n}\n\n\n// Try to determine the default display value of an element\nfunction css_defaultDisplay( nodeName ) {\n if ( elemdisplay[ nodeName ] ) {\n return elemdisplay[ nodeName ];\n }\n\n var elem = jQuery( \"<\" + nodeName + \">\" ).appendTo( document.body ),\n display = elem.css(\"display\");\n elem.remove();\n\n // If the simple way fails,\n // get element's real default display by attaching it to a temp iframe\n if ( display === \"none\" || display === \"\" ) {\n // Use the already-created iframe if possible\n iframe = document.body.appendChild(\n iframe || jQuery.extend( document.createElement(\"iframe\"), {\n frameBorder: 0,\n width: 0,\n height: 0\n })\n );\n\n // Create a cacheable copy of the iframe document on first call.\n // IE and Opera will allow us to reuse the iframeDoc without re-writing the fake HTML\n // document to it; WebKit & Firefox won't allow reusing the iframe document.\n if ( !iframeDoc || !iframe.createElement ) {\n iframeDoc = ( iframe.contentWindow || iframe.contentDocument ).document;\n iframeDoc.write(\"<!doctype html><html><body>\");\n iframeDoc.close();\n }\n\n elem = iframeDoc.body.appendChild( iframeDoc.createElement(nodeName) );\n\n display = curCSS( elem, \"display\" );\n document.body.removeChild( iframe );\n }\n\n // Store the correct default display\n elemdisplay[ nodeName ] = display;\n\n return display;\n}\n\njQuery.each([ \"height\", \"width\" ], function( i, name ) {\n jQuery.cssHooks[ name ] = {\n get: function( elem, computed, extra ) {\n if ( computed ) {\n // certain elements can have dimension info if we invisibly show them\n // however, it must have a current display style that would benefit from this\n if ( elem.offsetWidth === 0 && rdisplayswap.test( curCSS( elem, \"display\" ) ) ) {\n return jQuery.swap( elem, cssShow, function() {\n return getWidthOrHeight( elem, name, extra );\n });\n } else {\n return getWidthOrHeight( elem, name, extra );\n }\n }\n },\n\n set: function( elem, value, extra ) {\n return setPositiveNumber( elem, value, extra ?\n augmentWidthOrHeight(\n elem,\n name,\n extra,\n jQuery.support.boxSizing && jQuery.css( elem, \"boxSizing\" ) === \"border-box\"\n ) : 0\n );\n }\n };\n});\n\nif ( !jQuery.support.opacity ) {\n jQuery.cssHooks.opacity = {\n get: function( elem, computed ) {\n // IE uses filters for opacity\n return ropacity.test( (computed && elem.currentStyle ? elem.currentStyle.filter : elem.style.filter) || \"\" ) ?\n ( 0.01 * parseFloat( RegExp.$1 ) ) + \"\" :\n computed ? \"1\" : \"\";\n },\n\n set: function( elem, value ) {\n var style = elem.style,\n currentStyle = elem.currentStyle,\n opacity = jQuery.isNumeric( value ) ? \"alpha(opacity=\" + value * 100 + \")\" : \"\",\n filter = currentStyle && currentStyle.filter || style.filter || \"\";\n\n // IE has trouble with opacity if it does not have layout\n // Force it by setting the zoom level\n style.zoom = 1;\n\n // if setting opacity to 1, and no other filters exist - attempt to remove filter attribute #6652\n if ( value >= 1 && jQuery.trim( filter.replace( ralpha, \"\" ) ) === \"\" &&\n style.removeAttribute ) {\n\n // Setting style.filter to null, \"\" & \" \" still leave \"filter:\" in the cssText\n // if \"filter:\" is present at all, clearType is disabled, we want to avoid this\n // style.removeAttribute is IE Only, but so apparently is this code path...\n style.removeAttribute( \"filter\" );\n\n // if there there is no filter style applied in a css rule, we are done\n if ( currentStyle && !currentStyle.filter ) {\n return;\n }\n }\n\n // otherwise, set new filter values\n style.filter = ralpha.test( filter ) ?\n filter.replace( ralpha, opacity ) :\n filter + \" \" + opacity;\n }\n };\n}\n\n// These hooks cannot be added until DOM ready because the support test\n// for it is not run until after DOM ready\njQuery(function() {\n if ( !jQuery.support.reliableMarginRight ) {\n jQuery.cssHooks.marginRight = {\n get: function( elem, computed ) {\n // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right\n // Work around by temporarily setting element display to inline-block\n return jQuery.swap( elem, { \"display\": \"inline-block\" }, function() {\n if ( computed ) {\n return curCSS( elem, \"marginRight\" );\n }\n });\n }\n };\n }\n\n // Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084\n // getComputedStyle returns percent when specified for top/left/bottom/right\n // rather than make the css module depend on the offset module, we just check for it here\n if ( !jQuery.support.pixelPosition && jQuery.fn.position ) {\n jQuery.each( [ \"top\", \"left\" ], function( i, prop ) {\n jQuery.cssHooks[ prop ] = {\n get: function( elem, computed ) {\n if ( computed ) {\n var ret = curCSS( elem, prop );\n // if curCSS returns percentage, fallback to offset\n return rnumnonpx.test( ret ) ? jQuery( elem ).position()[ prop ] + \"px\" : ret;\n }\n }\n };\n });\n }\n\n});\n\nif ( jQuery.expr && jQuery.expr.filters ) {\n jQuery.expr.filters.hidden = function( elem ) {\n return ( elem.offsetWidth === 0 && elem.offsetHeight === 0 ) || (!jQuery.support.reliableHiddenOffsets && ((elem.style && elem.style.display) || curCSS( elem, \"display\" )) === \"none\");\n };\n\n jQuery.expr.filters.visible = function( elem ) {\n return !jQuery.expr.filters.hidden( elem );\n };\n}\n\n// These hooks are used by animate to expand properties\njQuery.each({\n margin: \"\",\n padding: \"\",\n border: \"Width\"\n}, function( prefix, suffix ) {\n jQuery.cssHooks[ prefix + suffix ] = {\n expand: function( value ) {\n var i,\n\n // assumes a single number if not a string\n parts = typeof value === \"string\" ? value.split(\" \") : [ value ],\n expanded = {};\n\n for ( i = 0; i < 4; i++ ) {\n expanded[ prefix + cssExpand[ i ] + suffix ] =\n parts[ i ] || parts[ i - 2 ] || parts[ 0 ];\n }\n\n return expanded;\n }\n };\n\n if ( !rmargin.test( prefix ) ) {\n jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;\n }\n});\nvar r20 = /%20/g,\n rbracket = /\\[\\]$/,\n rCRLF = /\\r?\\n/g,\n rinput = /^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,\n rselectTextarea = /^(?:select|textarea)/i;\n\njQuery.fn.extend({\n serialize: function() {\n return jQuery.param( this.serializeArray() );\n },\n serializeArray: function() {\n return this.map(function(){\n return this.elements ? jQuery.makeArray( this.elements ) : this;\n })\n .filter(function(){\n return this.name && !this.disabled &&\n ( this.checked || rselectTextarea.test( this.nodeName ) ||\n rinput.test( this.type ) );\n })\n .map(function( i, elem ){\n var val = jQuery( this ).val();\n\n return val == null ?\n null :\n jQuery.isArray( val ) ?\n jQuery.map( val, function( val, i ){\n return { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n }) :\n { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n }).get();\n }\n});\n\n//Serialize an array of form elements or a set of\n//key/values into a query string\njQuery.param = function( a, traditional ) {\n var prefix,\n s = [],\n add = function( key, value ) {\n // If value is a function, invoke it and return its value\n value = jQuery.isFunction( value ) ? value() : ( value == null ? \"\" : value );\n s[ s.length ] = encodeURIComponent( key ) + \"=\" + encodeURIComponent( value );\n };\n\n // Set traditional to true for jQuery <= 1.3.2 behavior.\n if ( traditional === undefined ) {\n traditional = jQuery.ajaxSettings && jQuery.ajaxSettings.traditional;\n }\n\n // If an array was passed in, assume that it is an array of form elements.\n if ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {\n // Serialize the form elements\n jQuery.each( a, function() {\n add( this.name, this.value );\n });\n\n } else {\n // If traditional, encode the \"old\" way (the way 1.3.2 or older\n // did it), otherwise encode params recursively.\n for ( prefix in a ) {\n buildParams( prefix, a[ prefix ], traditional, add );\n }\n }\n\n // Return the resulting serialization\n return s.join( \"&\" ).replace( r20, \"+\" );\n};\n\nfunction buildParams( prefix, obj, traditional, add ) {\n var name;\n\n if ( jQuery.isArray( obj ) ) {\n // Serialize array item.\n jQuery.each( obj, function( i, v ) {\n if ( traditional || rbracket.test( prefix ) ) {\n // Treat each array item as a scalar.\n add( prefix, v );\n\n } else {\n // If array item is non-scalar (array or object), encode its\n // numeric index to resolve deserialization ambiguity issues.\n // Note that rack (as of 1.0.0) can't currently deserialize\n // nested arrays properly, and attempting to do so may cause\n // a server error. Possible fixes are to modify rack's\n // deserialization algorithm or to provide an option or flag\n // to force array serialization to be shallow.\n buildParams( prefix + \"[\" + ( typeof v === \"object\" ? i : \"\" ) + \"]\", v, traditional, add );\n }\n });\n\n } else if ( !traditional && jQuery.type( obj ) === \"object\" ) {\n // Serialize object item.\n for ( name in obj ) {\n buildParams( prefix + \"[\" + name + \"]\", obj[ name ], traditional, add );\n }\n\n } else {\n // Serialize scalar item.\n add( prefix, obj );\n }\n}\nvar\n // Document location\n ajaxLocParts,\n ajaxLocation,\n\n rhash = /#.*$/,\n rheaders = /^(.*?):[ \\t]*([^\\r\\n]*)\\r?$/mg, // IE leaves an \\r character at EOL\n // #7653, #8125, #8152: local protocol detection\n rlocalProtocol = /^(?:about|app|app\\-storage|.+\\-extension|file|res|widget):$/,\n rnoContent = /^(?:GET|HEAD)$/,\n rprotocol = /^\\/\\//,\n rquery = /\\?/,\n rscript = /<script\\b[^<]*(?:(?!<\\/script>)<[^<]*)*<\\/script>/gi,\n rts = /([?&])_=[^&]*/,\n rurl = /^([\\w\\+\\.\\-]+:)(?:\\/\\/([^\\/?#:]*)(?::(\\d+)|)|)/,\n\n // Keep a copy of the old load method\n _load = jQuery.fn.load,\n\n /* Prefilters\n * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)\n * 2) These are called:\n * - BEFORE asking for a transport\n * - AFTER param serialization (s.data is a string if s.processData is true)\n * 3) key is the dataType\n * 4) the catchall symbol \"*\" can be used\n * 5) execution will start with transport dataType and THEN continue down to \"*\" if needed\n */\n prefilters = {},\n\n /* Transports bindings\n * 1) key is the dataType\n * 2) the catchall symbol \"*\" can be used\n * 3) selection will start with transport dataType and THEN go to \"*\" if needed\n */\n transports = {},\n\n // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression\n allTypes = [\"*/\"] + [\"*\"];\n\n// #8138, IE may throw an exception when accessing\n// a field from window.location if document.domain has been set\ntry {\n ajaxLocation = location.href;\n} catch( e ) {\n // Use the href attribute of an A element\n // since IE will modify it given document.location\n ajaxLocation = document.createElement( \"a\" );\n ajaxLocation.href = \"\";\n ajaxLocation = ajaxLocation.href;\n}\n\n// Segment location into parts\najaxLocParts = rurl.exec( ajaxLocation.toLowerCase() ) || [];\n\n// Base \"constructor\" for jQuery.ajaxPrefilter and jQuery.ajaxTransport\nfunction addToPrefiltersOrTransports( structure ) {\n\n // dataTypeExpression is optional and defaults to \"*\"\n return function( dataTypeExpression, func ) {\n\n if ( typeof dataTypeExpression !== \"string\" ) {\n func = dataTypeExpression;\n dataTypeExpression = \"*\";\n }\n\n var dataType, list, placeBefore,\n dataTypes = dataTypeExpression.toLowerCase().split( core_rspace ),\n i = 0,\n length = dataTypes.length;\n\n if ( jQuery.isFunction( func ) ) {\n // For each dataType in the dataTypeExpression\n for ( ; i < length; i++ ) {\n dataType = dataTypes[ i ];\n // We control if we're asked to add before\n // any existing element\n placeBefore = /^\\+/.test( dataType );\n if ( placeBefore ) {\n dataType = dataType.substr( 1 ) || \"*\";\n }\n list = structure[ dataType ] = structure[ dataType ] || [];\n // then we add to the structure accordingly\n list[ placeBefore ? \"unshift\" : \"push\" ]( func );\n }\n }\n };\n}\n\n// Base inspection function for prefilters and transports\nfunction inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR,\n dataType /* internal */, inspected /* internal */ ) {\n\n dataType = dataType || options.dataTypes[ 0 ];\n inspected = inspected || {};\n\n inspected[ dataType ] = true;\n\n var selection,\n list = structure[ dataType ],\n i = 0,\n length = list ? list.length : 0,\n executeOnly = ( structure === prefilters );\n\n for ( ; i < length && ( executeOnly || !selection ); i++ ) {\n selection = list[ i ]( options, originalOptions, jqXHR );\n // If we got redirected to another dataType\n // we try there if executing only and not done already\n if ( typeof selection === \"string\" ) {\n if ( !executeOnly || inspected[ selection ] ) {\n selection = undefined;\n } else {\n options.dataTypes.unshift( selection );\n selection = inspectPrefiltersOrTransports(\n structure, options, originalOptions, jqXHR, selection, inspected );\n }\n }\n }\n // If we're only executing or nothing was selected\n // we try the catchall dataType if not done already\n if ( ( executeOnly || !selection ) && !inspected[ \"*\" ] ) {\n selection = inspectPrefiltersOrTransports(\n structure, options, originalOptions, jqXHR, \"*\", inspected );\n }\n // unnecessary when only executing (prefilters)\n // but it'll be ignored by the caller in that case\n return selection;\n}\n\n// A special extend for ajax options\n// that takes \"flat\" options (not to be deep extended)\n// Fixes #9887\nfunction ajaxExtend( target, src ) {\n var key, deep,\n flatOptions = jQuery.ajaxSettings.flatOptions || {};\n for ( key in src ) {\n if ( src[ key ] !== undefined ) {\n ( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];\n }\n }\n if ( deep ) {\n jQuery.extend( true, target, deep );\n }\n}\n\njQuery.fn.load = function( url, params, callback ) {\n if ( typeof url !== \"string\" && _load ) {\n return _load.apply( this, arguments );\n }\n\n // Don't do a request if no elements are being requested\n if ( !this.length ) {\n return this;\n }\n\n var selector, type, response,\n self = this,\n off = url.indexOf(\" \");\n\n if ( off >= 0 ) {\n selector = url.slice( off, url.length );\n url = url.slice( 0, off );\n }\n\n // If it's a function\n if ( jQuery.isFunction( params ) ) {\n\n // We assume that it's the callback\n callback = params;\n params = undefined;\n\n // Otherwise, build a param string\n } else if ( params && typeof params === \"object\" ) {\n type = \"POST\";\n }\n\n // Request the remote document\n jQuery.ajax({\n url: url,\n\n // if \"type\" variable is undefined, then \"GET\" method will be used\n type: type,\n dataType: \"html\",\n data: params,\n complete: function( jqXHR, status ) {\n if ( callback ) {\n self.each( callback, response || [ jqXHR.responseText, status, jqXHR ] );\n }\n }\n }).done(function( responseText ) {\n\n // Save response for use in complete callback\n response = arguments;\n\n // See if a selector was specified\n self.html( selector ?\n\n // Create a dummy div to hold the results\n jQuery(\"<div>\")\n\n // inject the contents of the document in, removing the scripts\n // to avoid any 'Permission Denied' errors in IE\n .append( responseText.replace( rscript, \"\" ) )\n\n // Locate the specified elements\n .find( selector ) :\n\n // If not, just inject the full result\n responseText );\n\n });\n\n return this;\n};\n\n// Attach a bunch of functions for handling common AJAX events\njQuery.each( \"ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend\".split( \" \" ), function( i, o ){\n jQuery.fn[ o ] = function( f ){\n return this.on( o, f );\n };\n});\n\njQuery.each( [ \"get\", \"post\" ], function( i, method ) {\n jQuery[ method ] = function( url, data, callback, type ) {\n // shift arguments if data argument was omitted\n if ( jQuery.isFunction( data ) ) {\n type = type || callback;\n callback = data;\n data = undefined;\n }\n\n return jQuery.ajax({\n type: method,\n url: url,\n data: data,\n success: callback,\n dataType: type\n });\n };\n});\n\njQuery.extend({\n\n getScript: function( url, callback ) {\n return jQuery.get( url, undefined, callback, \"script\" );\n },\n\n getJSON: function( url, data, callback ) {\n return jQuery.get( url, data, callback, \"json\" );\n },\n\n // Creates a full fledged settings object into target\n // with both ajaxSettings and settings fields.\n // If target is omitted, writes into ajaxSettings.\n ajaxSetup: function( target, settings ) {\n if ( settings ) {\n // Building a settings object\n ajaxExtend( target, jQuery.ajaxSettings );\n } else {\n // Extending ajaxSettings\n settings = target;\n target = jQuery.ajaxSettings;\n }\n ajaxExtend( target, settings );\n return target;\n },\n\n ajaxSettings: {\n url: ajaxLocation,\n isLocal: rlocalProtocol.test( ajaxLocParts[ 1 ] ),\n global: true,\n type: \"GET\",\n contentType: \"application/x-www-form-urlencoded; charset=UTF-8\",\n processData: true,\n async: true,\n /*\n timeout: 0,\n data: null,\n dataType: null,\n username: null,\n password: null,\n cache: null,\n throws: false,\n traditional: false,\n headers: {},\n */\n\n accepts: {\n xml: \"application/xml, text/xml\",\n html: \"text/html\",\n text: \"text/plain\",\n json: \"application/json, text/javascript\",\n \"*\": allTypes\n },\n\n contents: {\n xml: /xml/,\n html: /html/,\n json: /json/\n },\n\n responseFields: {\n xml: \"responseXML\",\n text: \"responseText\"\n },\n\n // List of data converters\n // 1) key format is \"source_type destination_type\" (a single space in-between)\n // 2) the catchall symbol \"*\" can be used for source_type\n converters: {\n\n // Convert anything to text\n \"* text\": window.String,\n\n // Text to html (true = no transformation)\n \"text html\": true,\n\n // Evaluate text as a json expression\n \"text json\": jQuery.parseJSON,\n\n // Parse text as xml\n \"text xml\": jQuery.parseXML\n },\n\n // For options that shouldn't be deep extended:\n // you can add your own custom options here if\n // and when you create one that shouldn't be\n // deep extended (see ajaxExtend)\n flatOptions: {\n context: true,\n url: true\n }\n },\n\n ajaxPrefilter: addToPrefiltersOrTransports( prefilters ),\n ajaxTransport: addToPrefiltersOrTransports( transports ),\n\n // Main method\n ajax: function( url, options ) {\n\n // If url is an object, simulate pre-1.5 signature\n if ( typeof url === \"object\" ) {\n options = url;\n url = undefined;\n }\n\n // Force options to be an object\n options = options || {};\n\n var // ifModified key\n ifModifiedKey,\n // Response headers\n responseHeadersString,\n responseHeaders,\n // transport\n transport,\n // timeout handle\n timeoutTimer,\n // Cross-domain detection vars\n parts,\n // To know if global events are to be dispatched\n fireGlobals,\n // Loop variable\n i,\n // Create the final options object\n s = jQuery.ajaxSetup( {}, options ),\n // Callbacks context\n callbackContext = s.context || s,\n // Context for global events\n // It's the callbackContext if one was provided in the options\n // and if it's a DOM node or a jQuery collection\n globalEventContext = callbackContext !== s &&\n ( callbackContext.nodeType || callbackContext instanceof jQuery ) ?\n jQuery( callbackContext ) : jQuery.event,\n // Deferreds\n deferred = jQuery.Deferred(),\n completeDeferred = jQuery.Callbacks( \"once memory\" ),\n // Status-dependent callbacks\n statusCode = s.statusCode || {},\n // Headers (they are sent all at once)\n requestHeaders = {},\n requestHeadersNames = {},\n // The jqXHR state\n state = 0,\n // Default abort message\n strAbort = \"canceled\",\n // Fake xhr\n jqXHR = {\n\n readyState: 0,\n\n // Caches the header\n setRequestHeader: function( name, value ) {\n if ( !state ) {\n var lname = name.toLowerCase();\n name = requestHeadersNames[ lname ] = requestHeadersNames[ lname ] || name;\n requestHeaders[ name ] = value;\n }\n return this;\n },\n\n // Raw string\n getAllResponseHeaders: function() {\n return state === 2 ? responseHeadersString : null;\n },\n\n // Builds headers hashtable if needed\n getResponseHeader: function( key ) {\n var match;\n if ( state === 2 ) {\n if ( !responseHeaders ) {\n responseHeaders = {};\n while( ( match = rheaders.exec( responseHeadersString ) ) ) {\n responseHeaders[ match[1].toLowerCase() ] = match[ 2 ];\n }\n }\n match = responseHeaders[ key.toLowerCase() ];\n }\n return match === undefined ? null : match;\n },\n\n // Overrides response content-type header\n overrideMimeType: function( type ) {\n if ( !state ) {\n s.mimeType = type;\n }\n return this;\n },\n\n // Cancel the request\n abort: function( statusText ) {\n statusText = statusText || strAbort;\n if ( transport ) {\n transport.abort( statusText );\n }\n done( 0, statusText );\n return this;\n }\n };\n\n // Callback for when everything is done\n // It is defined here because jslint complains if it is declared\n // at the end of the function (which would be more logical and readable)\n function done( status, nativeStatusText, responses, headers ) {\n var isSuccess, success, error, response, modified,\n statusText = nativeStatusText;\n\n // Called once\n if ( state === 2 ) {\n return;\n }\n\n // State is \"done\" now\n state = 2;\n\n // Clear timeout if it exists\n if ( timeoutTimer ) {\n clearTimeout( timeoutTimer );\n }\n\n // Dereference transport for early garbage collection\n // (no matter how long the jqXHR object will be used)\n transport = undefined;\n\n // Cache response headers\n responseHeadersString = headers || \"\";\n\n // Set readyState\n jqXHR.readyState = status > 0 ? 4 : 0;\n\n // Get response data\n if ( responses ) {\n response = ajaxHandleResponses( s, jqXHR, responses );\n }\n\n // If successful, handle type chaining\n if ( status >= 200 && status < 300 || status === 304 ) {\n\n // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n if ( s.ifModified ) {\n\n modified = jqXHR.getResponseHeader(\"Last-Modified\");\n if ( modified ) {\n jQuery.lastModified[ ifModifiedKey ] = modified;\n }\n modified = jqXHR.getResponseHeader(\"Etag\");\n if ( modified ) {\n jQuery.etag[ ifModifiedKey ] = modified;\n }\n }\n\n // If not modified\n if ( status === 304 ) {\n\n statusText = \"notmodified\";\n isSuccess = true;\n\n // If we have data\n } else {\n\n isSuccess = ajaxConvert( s, response );\n statusText = isSuccess.state;\n success = isSuccess.data;\n error = isSuccess.error;\n isSuccess = !error;\n }\n } else {\n // We extract error from statusText\n // then normalize statusText and status for non-aborts\n error = statusText;\n if ( !statusText || status ) {\n statusText = \"error\";\n if ( status < 0 ) {\n status = 0;\n }\n }\n }\n\n // Set data for the fake xhr object\n jqXHR.status = status;\n jqXHR.statusText = ( nativeStatusText || statusText ) + \"\";\n\n // Success/Error\n if ( isSuccess ) {\n deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );\n } else {\n deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );\n }\n\n // Status-dependent callbacks\n jqXHR.statusCode( statusCode );\n statusCode = undefined;\n\n if ( fireGlobals ) {\n globalEventContext.trigger( \"ajax\" + ( isSuccess ? \"Success\" : \"Error\" ),\n [ jqXHR, s, isSuccess ? success : error ] );\n }\n\n // Complete\n completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );\n\n if ( fireGlobals ) {\n globalEventContext.trigger( \"ajaxComplete\", [ jqXHR, s ] );\n // Handle the global AJAX counter\n if ( !( --jQuery.active ) ) {\n jQuery.event.trigger( \"ajaxStop\" );\n }\n }\n }\n\n // Attach deferreds\n deferred.promise( jqXHR );\n jqXHR.success = jqXHR.done;\n jqXHR.error = jqXHR.fail;\n jqXHR.complete = completeDeferred.add;\n\n // Status-dependent callbacks\n jqXHR.statusCode = function( map ) {\n if ( map ) {\n var tmp;\n if ( state < 2 ) {\n for ( tmp in map ) {\n statusCode[ tmp ] = [ statusCode[tmp], map[tmp] ];\n }\n } else {\n tmp = map[ jqXHR.status ];\n jqXHR.always( tmp );\n }\n }\n return this;\n };\n\n // Remove hash character (#7531: and string promotion)\n // Add protocol if not provided (#5866: IE7 issue with protocol-less urls)\n // We also use the url parameter if available\n s.url = ( ( url || s.url ) + \"\" ).replace( rhash, \"\" ).replace( rprotocol, ajaxLocParts[ 1 ] + \"//\" );\n\n // Extract dataTypes list\n s.dataTypes = jQuery.trim( s.dataType || \"*\" ).toLowerCase().split( core_rspace );\n\n // A cross-domain request is in order when we have a protocol:host:port mismatch\n if ( s.crossDomain == null ) {\n parts = rurl.exec( s.url.toLowerCase() );\n s.crossDomain = !!( parts &&\n ( parts[ 1 ] !== ajaxLocParts[ 1 ] || parts[ 2 ] !== ajaxLocParts[ 2 ] ||\n ( parts[ 3 ] || ( parts[ 1 ] === \"http:\" ? 80 : 443 ) ) !=\n ( ajaxLocParts[ 3 ] || ( ajaxLocParts[ 1 ] === \"http:\" ? 80 : 443 ) ) )\n );\n }\n\n // Convert data if not already a string\n if ( s.data && s.processData && typeof s.data !== \"string\" ) {\n s.data = jQuery.param( s.data, s.traditional );\n }\n\n // Apply prefilters\n inspectPrefiltersOrTransports( prefilters, s, options, jqXHR );\n\n // If request was aborted inside a prefilter, stop there\n if ( state === 2 ) {\n return jqXHR;\n }\n\n // We can fire global events as of now if asked to\n fireGlobals = s.global;\n\n // Uppercase the type\n s.type = s.type.toUpperCase();\n\n // Determine if request has content\n s.hasContent = !rnoContent.test( s.type );\n\n // Watch for a new set of requests\n if ( fireGlobals && jQuery.active++ === 0 ) {\n jQuery.event.trigger( \"ajaxStart\" );\n }\n\n // More options handling for requests with no content\n if ( !s.hasContent ) {\n\n // If data is available, append data to url\n if ( s.data ) {\n s.url += ( rquery.test( s.url ) ? \"&\" : \"?\" ) + s.data;\n // #9682: remove data so that it's not used in an eventual retry\n delete s.data;\n }\n\n // Get ifModifiedKey before adding the anti-cache parameter\n ifModifiedKey = s.url;\n\n // Add anti-cache in url if needed\n if ( s.cache === false ) {\n\n var ts = jQuery.now(),\n // try replacing _= if it is there\n ret = s.url.replace( rts, \"$1_=\" + ts );\n\n // if nothing was replaced, add timestamp to the end\n s.url = ret + ( ( ret === s.url ) ? ( rquery.test( s.url ) ? \"&\" : \"?\" ) + \"_=\" + ts : \"\" );\n }\n }\n\n // Set the correct header, if data is being sent\n if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {\n jqXHR.setRequestHeader( \"Content-Type\", s.contentType );\n }\n\n // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n if ( s.ifModified ) {\n ifModifiedKey = ifModifiedKey || s.url;\n if ( jQuery.lastModified[ ifModifiedKey ] ) {\n jqXHR.setRequestHeader( \"If-Modified-Since\", jQuery.lastModified[ ifModifiedKey ] );\n }\n if ( jQuery.etag[ ifModifiedKey ] ) {\n jqXHR.setRequestHeader( \"If-None-Match\", jQuery.etag[ ifModifiedKey ] );\n }\n }\n\n // Set the Accepts header for the server, depending on the dataType\n jqXHR.setRequestHeader(\n \"Accept\",\n s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[0] ] ?\n s.accepts[ s.dataTypes[0] ] + ( s.dataTypes[ 0 ] !== \"*\" ? \", \" + allTypes + \"; q=0.01\" : \"\" ) :\n s.accepts[ \"*\" ]\n );\n\n // Check for headers option\n for ( i in s.headers ) {\n jqXHR.setRequestHeader( i, s.headers[ i ] );\n }\n\n // Allow custom headers/mimetypes and early abort\n if ( s.beforeSend && ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || state === 2 ) ) {\n // Abort if not done already and return\n return jqXHR.abort();\n\n }\n\n // aborting is no longer a cancellation\n strAbort = \"abort\";\n\n // Install callbacks on deferreds\n for ( i in { success: 1, error: 1, complete: 1 } ) {\n jqXHR[ i ]( s[ i ] );\n }\n\n // Get transport\n transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );\n\n // If no transport, we auto-abort\n if ( !transport ) {\n done( -1, \"No Transport\" );\n } else {\n jqXHR.readyState = 1;\n // Send global event\n if ( fireGlobals ) {\n globalEventContext.trigger( \"ajaxSend\", [ jqXHR, s ] );\n }\n // Timeout\n if ( s.async && s.timeout > 0 ) {\n timeoutTimer = setTimeout( function(){\n jqXHR.abort( \"timeout\" );\n }, s.timeout );\n }\n\n try {\n state = 1;\n transport.send( requestHeaders, done );\n } catch (e) {\n // Propagate exception as error if not done\n if ( state < 2 ) {\n done( -1, e );\n // Simply rethrow otherwise\n } else {\n throw e;\n }\n }\n }\n\n return jqXHR;\n },\n\n // Counter for holding the number of active queries\n active: 0,\n\n // Last-Modified header cache for next request\n lastModified: {},\n etag: {}\n\n});\n\n/* Handles responses to an ajax request:\n * - sets all responseXXX fields accordingly\n * - finds the right dataType (mediates between content-type and expected dataType)\n * - returns the corresponding response\n */\nfunction ajaxHandleResponses( s, jqXHR, responses ) {\n\n var ct, type, finalDataType, firstDataType,\n contents = s.contents,\n dataTypes = s.dataTypes,\n responseFields = s.responseFields;\n\n // Fill responseXXX fields\n for ( type in responseFields ) {\n if ( type in responses ) {\n jqXHR[ responseFields[type] ] = responses[ type ];\n }\n }\n\n // Remove auto dataType and get content-type in the process\n while( dataTypes[ 0 ] === \"*\" ) {\n dataTypes.shift();\n if ( ct === undefined ) {\n ct = s.mimeType || jqXHR.getResponseHeader( \"content-type\" );\n }\n }\n\n // Check if we're dealing with a known content-type\n if ( ct ) {\n for ( type in contents ) {\n if ( contents[ type ] && contents[ type ].test( ct ) ) {\n dataTypes.unshift( type );\n break;\n }\n }\n }\n\n // Check to see if we have a response for the expected dataType\n if ( dataTypes[ 0 ] in responses ) {\n finalDataType = dataTypes[ 0 ];\n } else {\n // Try convertible dataTypes\n for ( type in responses ) {\n if ( !dataTypes[ 0 ] || s.converters[ type + \" \" + dataTypes[0] ] ) {\n finalDataType = type;\n break;\n }\n if ( !firstDataType ) {\n firstDataType = type;\n }\n }\n // Or just use first one\n finalDataType = finalDataType || firstDataType;\n }\n\n // If we found a dataType\n // We add the dataType to the list if needed\n // and return the corresponding response\n if ( finalDataType ) {\n if ( finalDataType !== dataTypes[ 0 ] ) {\n dataTypes.unshift( finalDataType );\n }\n return responses[ finalDataType ];\n }\n}\n\n// Chain conversions given the request and the original response\nfunction ajaxConvert( s, response ) {\n\n var conv, conv2, current, tmp,\n // Work with a copy of dataTypes in case we need to modify it for conversion\n dataTypes = s.dataTypes.slice(),\n prev = dataTypes[ 0 ],\n converters = {},\n i = 0;\n\n // Apply the dataFilter if provided\n if ( s.dataFilter ) {\n response = s.dataFilter( response, s.dataType );\n }\n\n // Create converters map with lowercased keys\n if ( dataTypes[ 1 ] ) {\n for ( conv in s.converters ) {\n converters[ conv.toLowerCase() ] = s.converters[ conv ];\n }\n }\n\n // Convert to each sequential dataType, tolerating list modification\n for ( ; (current = dataTypes[++i]); ) {\n\n // There's only work to do if current dataType is non-auto\n if ( current !== \"*\" ) {\n\n // Convert response if prev dataType is non-auto and differs from current\n if ( prev !== \"*\" && prev !== current ) {\n\n // Seek a direct converter\n conv = converters[ prev + \" \" + current ] || converters[ \"* \" + current ];\n\n // If none found, seek a pair\n if ( !conv ) {\n for ( conv2 in converters ) {\n\n // If conv2 outputs current\n tmp = conv2.split(\" \");\n if ( tmp[ 1 ] === current ) {\n\n // If prev can be converted to accepted input\n conv = converters[ prev + \" \" + tmp[ 0 ] ] ||\n converters[ \"* \" + tmp[ 0 ] ];\n if ( conv ) {\n // Condense equivalence converters\n if ( conv === true ) {\n conv = converters[ conv2 ];\n\n // Otherwise, insert the intermediate dataType\n } else if ( converters[ conv2 ] !== true ) {\n current = tmp[ 0 ];\n dataTypes.splice( i--, 0, current );\n }\n\n break;\n }\n }\n }\n }\n\n // Apply converter (if not an equivalence)\n if ( conv !== true ) {\n\n // Unless errors are allowed to bubble, catch and return them\n if ( conv && s[\"throws\"] ) {\n response = conv( response );\n } else {\n try {\n response = conv( response );\n } catch ( e ) {\n return { state: \"parsererror\", error: conv ? e : \"No conversion from \" + prev + \" to \" + current };\n }\n }\n }\n }\n\n // Update prev for next iteration\n prev = current;\n }\n }\n\n return { state: \"success\", data: response };\n}\nvar oldCallbacks = [],\n rquestion = /\\?/,\n rjsonp = /(=)\\?(?=&|$)|\\?\\?/,\n nonce = jQuery.now();\n\n// Default jsonp settings\njQuery.ajaxSetup({\n jsonp: \"callback\",\n jsonpCallback: function() {\n var callback = oldCallbacks.pop() || ( jQuery.expando + \"_\" + ( nonce++ ) );\n this[ callback ] = true;\n return callback;\n }\n});\n\n// Detect, normalize options and install callbacks for jsonp requests\njQuery.ajaxPrefilter( \"json jsonp\", function( s, originalSettings, jqXHR ) {\n\n var callbackName, overwritten, responseContainer,\n data = s.data,\n url = s.url,\n hasCallback = s.jsonp !== false,\n replaceInUrl = hasCallback && rjsonp.test( url ),\n replaceInData = hasCallback && !replaceInUrl && typeof data === \"string\" &&\n !( s.contentType || \"\" ).indexOf(\"application/x-www-form-urlencoded\") &&\n rjsonp.test( data );\n\n // Handle iff the expected data type is \"jsonp\" or we have a parameter to set\n if ( s.dataTypes[ 0 ] === \"jsonp\" || replaceInUrl || replaceInData ) {\n\n // Get callback name, remembering preexisting value associated with it\n callbackName = s.jsonpCallback = jQuery.isFunction( s.jsonpCallback ) ?\n s.jsonpCallback() :\n s.jsonpCallback;\n overwritten = window[ callbackName ];\n\n // Insert callback into url or form data\n if ( replaceInUrl ) {\n s.url = url.replace( rjsonp, \"$1\" + callbackName );\n } else if ( replaceInData ) {\n s.data = data.replace( rjsonp, \"$1\" + callbackName );\n } else if ( hasCallback ) {\n s.url += ( rquestion.test( url ) ? \"&\" : \"?\" ) + s.jsonp + \"=\" + callbackName;\n }\n\n // Use data converter to retrieve json after script execution\n s.converters[\"script json\"] = function() {\n if ( !responseContainer ) {\n jQuery.error( callbackName + \" was not called\" );\n }\n return responseContainer[ 0 ];\n };\n\n // force json dataType\n s.dataTypes[ 0 ] = \"json\";\n\n // Install callback\n window[ callbackName ] = function() {\n responseContainer = arguments;\n };\n\n // Clean-up function (fires after converters)\n jqXHR.always(function() {\n // Restore preexisting value\n window[ callbackName ] = overwritten;\n\n // Save back as free\n if ( s[ callbackName ] ) {\n // make sure that re-using the options doesn't screw things around\n s.jsonpCallback = originalSettings.jsonpCallback;\n\n // save the callback name for future use\n oldCallbacks.push( callbackName );\n }\n\n // Call if it was a function and we have a response\n if ( responseContainer && jQuery.isFunction( overwritten ) ) {\n overwritten( responseContainer[ 0 ] );\n }\n\n responseContainer = overwritten = undefined;\n });\n\n // Delegate to script\n return \"script\";\n }\n});\n// Install script dataType\njQuery.ajaxSetup({\n accepts: {\n script: \"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript\"\n },\n contents: {\n script: /javascript|ecmascript/\n },\n converters: {\n \"text script\": function( text ) {\n jQuery.globalEval( text );\n return text;\n }\n }\n});\n\n// Handle cache's special case and global\njQuery.ajaxPrefilter( \"script\", function( s ) {\n if ( s.cache === undefined ) {\n s.cache = false;\n }\n if ( s.crossDomain ) {\n s.type = \"GET\";\n s.global = false;\n }\n});\n\n// Bind script tag hack transport\njQuery.ajaxTransport( \"script\", function(s) {\n\n // This transport only deals with cross domain requests\n if ( s.crossDomain ) {\n\n var script,\n head = document.head || document.getElementsByTagName( \"head\" )[0] || document.documentElement;\n\n return {\n\n send: function( _, callback ) {\n\n script = document.createElement( \"script\" );\n\n script.async = \"async\";\n\n if ( s.scriptCharset ) {\n script.charset = s.scriptCharset;\n }\n\n script.src = s.url;\n\n // Attach handlers for all browsers\n script.onload = script.onreadystatechange = function( _, isAbort ) {\n\n if ( isAbort || !script.readyState || /loaded|complete/.test( script.readyState ) ) {\n\n // Handle memory leak in IE\n script.onload = script.onreadystatechange = null;\n\n // Remove the script\n if ( head && script.parentNode ) {\n head.removeChild( script );\n }\n\n // Dereference the script\n script = undefined;\n\n // Callback if not abort\n if ( !isAbort ) {\n callback( 200, \"success\" );\n }\n }\n };\n // Use insertBefore instead of appendChild to circumvent an IE6 bug.\n // This arises when a base node is used (#2709 and #4378).\n head.insertBefore( script, head.firstChild );\n },\n\n abort: function() {\n if ( script ) {\n script.onload( 0, 1 );\n }\n }\n };\n }\n});\nvar xhrCallbacks,\n // #5280: Internet Explorer will keep connections alive if we don't abort on unload\n xhrOnUnloadAbort = window.ActiveXObject ? function() {\n // Abort all pending requests\n for ( var key in xhrCallbacks ) {\n xhrCallbacks[ key ]( 0, 1 );\n }\n } : false,\n xhrId = 0;\n\n// Functions to create xhrs\nfunction createStandardXHR() {\n try {\n return new window.XMLHttpRequest();\n } catch( e ) {}\n}\n\nfunction createActiveXHR() {\n try {\n return new window.ActiveXObject( \"Microsoft.XMLHTTP\" );\n } catch( e ) {}\n}\n\n// Create the request object\n// (This is still attached to ajaxSettings for backward compatibility)\njQuery.ajaxSettings.xhr = window.ActiveXObject ?\n /* Microsoft failed to properly\n * implement the XMLHttpRequest in IE7 (can't request local files),\n * so we use the ActiveXObject when it is available\n * Additionally XMLHttpRequest can be disabled in IE7/IE8 so\n * we need a fallback.\n */\n function() {\n return !this.isLocal && createStandardXHR() || createActiveXHR();\n } :\n // For all other browsers, use the standard XMLHttpRequest object\n createStandardXHR;\n\n// Determine support properties\n(function( xhr ) {\n jQuery.extend( jQuery.support, {\n ajax: !!xhr,\n cors: !!xhr && ( \"withCredentials\" in xhr )\n });\n})( jQuery.ajaxSettings.xhr() );\n\n// Create transport if the browser can provide an xhr\nif ( jQuery.support.ajax ) {\n\n jQuery.ajaxTransport(function( s ) {\n // Cross domain only allowed if supported through XMLHttpRequest\n if ( !s.crossDomain || jQuery.support.cors ) {\n\n var callback;\n\n return {\n send: function( headers, complete ) {\n\n // Get a new xhr\n var handle, i,\n xhr = s.xhr();\n\n // Open the socket\n // Passing null username, generates a login popup on Opera (#2865)\n if ( s.username ) {\n xhr.open( s.type, s.url, s.async, s.username, s.password );\n } else {\n xhr.open( s.type, s.url, s.async );\n }\n\n // Apply custom fields if provided\n if ( s.xhrFields ) {\n for ( i in s.xhrFields ) {\n xhr[ i ] = s.xhrFields[ i ];\n }\n }\n\n // Override mime type if needed\n if ( s.mimeType && xhr.overrideMimeType ) {\n xhr.overrideMimeType( s.mimeType );\n }\n\n // X-Requested-With header\n // For cross-domain requests, seeing as conditions for a preflight are\n // akin to a jigsaw puzzle, we simply never set it to be sure.\n // (it can always be set on a per-request basis or even using ajaxSetup)\n // For same-domain requests, won't change header if already provided.\n if ( !s.crossDomain && !headers[\"X-Requested-With\"] ) {\n headers[ \"X-Requested-With\" ] = \"XMLHttpRequest\";\n }\n\n // Need an extra try/catch for cross domain requests in Firefox 3\n try {\n for ( i in headers ) {\n xhr.setRequestHeader( i, headers[ i ] );\n }\n } catch( _ ) {}\n\n // Do send the request\n // This may raise an exception which is actually\n // handled in jQuery.ajax (so no try/catch here)\n xhr.send( ( s.hasContent && s.data ) || null );\n\n // Listener\n callback = function( _, isAbort ) {\n\n var status,\n statusText,\n responseHeaders,\n responses,\n xml;\n\n // Firefox throws exceptions when accessing properties\n // of an xhr when a network error occurred\n // http://helpful.knobs-dials.com/index.php/Component_returned_failure_code:_0x80040111_(NS_ERROR_NOT_AVAILABLE)\n try {\n\n // Was never called and is aborted or complete\n if ( callback && ( isAbort || xhr.readyState === 4 ) ) {\n\n // Only called once\n callback = undefined;\n\n // Do not keep as active anymore\n if ( handle ) {\n xhr.onreadystatechange = jQuery.noop;\n if ( xhrOnUnloadAbort ) {\n delete xhrCallbacks[ handle ];\n }\n }\n\n // If it's an abort\n if ( isAbort ) {\n // Abort it manually if needed\n if ( xhr.readyState !== 4 ) {\n xhr.abort();\n }\n } else {\n status = xhr.status;\n responseHeaders = xhr.getAllResponseHeaders();\n responses = {};\n xml = xhr.responseXML;\n\n // Construct response list\n if ( xml && xml.documentElement /* #4958 */ ) {\n responses.xml = xml;\n }\n\n // When requesting binary data, IE6-9 will throw an exception\n // on any attempt to access responseText (#11426)\n try {\n responses.text = xhr.responseText;\n } catch( e ) {\n }\n\n // Firefox throws an exception when accessing\n // statusText for faulty cross-domain requests\n try {\n statusText = xhr.statusText;\n } catch( e ) {\n // We normalize with Webkit giving an empty statusText\n statusText = \"\";\n }\n\n // Filter status for non standard behaviors\n\n // If the request is local and we have data: assume a success\n // (success with no data won't get notified, that's the best we\n // can do given current implementations)\n if ( !status && s.isLocal && !s.crossDomain ) {\n status = responses.text ? 200 : 404;\n // IE - #1450: sometimes returns 1223 when it should be 204\n } else if ( status === 1223 ) {\n status = 204;\n }\n }\n }\n } catch( firefoxAccessException ) {\n if ( !isAbort ) {\n complete( -1, firefoxAccessException );\n }\n }\n\n // Call complete if needed\n if ( responses ) {\n complete( status, statusText, responses, responseHeaders );\n }\n };\n\n if ( !s.async ) {\n // if we're in sync mode we fire the callback\n callback();\n } else if ( xhr.readyState === 4 ) {\n // (IE6 & IE7) if it's in cache and has been\n // retrieved directly we need to fire the callback\n setTimeout( callback, 0 );\n } else {\n handle = ++xhrId;\n if ( xhrOnUnloadAbort ) {\n // Create the active xhrs callbacks list if needed\n // and attach the unload handler\n if ( !xhrCallbacks ) {\n xhrCallbacks = {};\n jQuery( window ).unload( xhrOnUnloadAbort );\n }\n // Add to list of active xhrs callbacks\n xhrCallbacks[ handle ] = callback;\n }\n xhr.onreadystatechange = callback;\n }\n },\n\n abort: function() {\n if ( callback ) {\n callback(0,1);\n }\n }\n };\n }\n });\n}\nvar fxNow, timerId,\n rfxtypes = /^(?:toggle|show|hide)$/,\n rfxnum = new RegExp( \"^(?:([-+])=|)(\" + core_pnum + \")([a-z%]*)$\", \"i\" ),\n rrun = /queueHooks$/,\n animationPrefilters = [ defaultPrefilter ],\n tweeners = {\n \"*\": [function( prop, value ) {\n var end, unit,\n tween = this.createTween( prop, value ),\n parts = rfxnum.exec( value ),\n target = tween.cur(),\n start = +target || 0,\n scale = 1,\n maxIterations = 20;\n\n if ( parts ) {\n end = +parts[2];\n unit = parts[3] || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" );\n\n // We need to compute starting value\n if ( unit !== \"px\" && start ) {\n // Iteratively approximate from a nonzero starting point\n // Prefer the current property, because this process will be trivial if it uses the same units\n // Fallback to end or a simple constant\n start = jQuery.css( tween.elem, prop, true ) || end || 1;\n\n do {\n // If previous iteration zeroed out, double until we get *something*\n // Use a string for doubling factor so we don't accidentally see scale as unchanged below\n scale = scale || \".5\";\n\n // Adjust and apply\n start = start / scale;\n jQuery.style( tween.elem, prop, start + unit );\n\n // Update scale, tolerating zero or NaN from tween.cur()\n // And breaking the loop if scale is unchanged or perfect, or if we've just had enough\n } while ( scale !== (scale = tween.cur() / target) && scale !== 1 && --maxIterations );\n }\n\n tween.unit = unit;\n tween.start = start;\n // If a +=/-= token was provided, we're doing a relative animation\n tween.end = parts[1] ? start + ( parts[1] + 1 ) * end : end;\n }\n return tween;\n }]\n };\n\n// Animations created synchronously will run synchronously\nfunction createFxNow() {\n setTimeout(function() {\n fxNow = undefined;\n }, 0 );\n return ( fxNow = jQuery.now() );\n}\n\nfunction createTweens( animation, props ) {\n jQuery.each( props, function( prop, value ) {\n var collection = ( tweeners[ prop ] || [] ).concat( tweeners[ \"*\" ] ),\n index = 0,\n length = collection.length;\n for ( ; index < length; index++ ) {\n if ( collection[ index ].call( animation, prop, value ) ) {\n\n // we're done with this property\n return;\n }\n }\n });\n}\n\nfunction Animation( elem, properties, options ) {\n var result,\n index = 0,\n tweenerIndex = 0,\n length = animationPrefilters.length,\n deferred = jQuery.Deferred().always( function() {\n // don't match elem in the :animated selector\n delete tick.elem;\n }),\n tick = function() {\n var currentTime = fxNow || createFxNow(),\n remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),\n // archaic crash bug won't allow us to use 1 - ( 0.5 || 0 ) (#12497)\n temp = remaining / animation.duration || 0,\n percent = 1 - temp,\n index = 0,\n length = animation.tweens.length;\n\n for ( ; index < length ; index++ ) {\n animation.tweens[ index ].run( percent );\n }\n\n deferred.notifyWith( elem, [ animation, percent, remaining ]);\n\n if ( percent < 1 && length ) {\n return remaining;\n } else {\n deferred.resolveWith( elem, [ animation ] );\n return false;\n }\n },\n animation = deferred.promise({\n elem: elem,\n props: jQuery.extend( {}, properties ),\n opts: jQuery.extend( true, { specialEasing: {} }, options ),\n originalProperties: properties,\n originalOptions: options,\n startTime: fxNow || createFxNow(),\n duration: options.duration,\n tweens: [],\n createTween: function( prop, end, easing ) {\n var tween = jQuery.Tween( elem, animation.opts, prop, end,\n animation.opts.specialEasing[ prop ] || animation.opts.easing );\n animation.tweens.push( tween );\n return tween;\n },\n stop: function( gotoEnd ) {\n var index = 0,\n // if we are going to the end, we want to run all the tweens\n // otherwise we skip this part\n length = gotoEnd ? animation.tweens.length : 0;\n\n for ( ; index < length ; index++ ) {\n animation.tweens[ index ].run( 1 );\n }\n\n // resolve when we played the last frame\n // otherwise, reject\n if ( gotoEnd ) {\n deferred.resolveWith( elem, [ animation, gotoEnd ] );\n } else {\n deferred.rejectWith( elem, [ animation, gotoEnd ] );\n }\n return this;\n }\n }),\n props = animation.props;\n\n propFilter( props, animation.opts.specialEasing );\n\n for ( ; index < length ; index++ ) {\n result = animationPrefilters[ index ].call( animation, elem, props, animation.opts );\n if ( result ) {\n return result;\n }\n }\n\n createTweens( animation, props );\n\n if ( jQuery.isFunction( animation.opts.start ) ) {\n animation.opts.start.call( elem, animation );\n }\n\n jQuery.fx.timer(\n jQuery.extend( tick, {\n anim: animation,\n queue: animation.opts.queue,\n elem: elem\n })\n );\n\n // attach callbacks from options\n return animation.progress( animation.opts.progress )\n .done( animation.opts.done, animation.opts.complete )\n .fail( animation.opts.fail )\n .always( animation.opts.always );\n}\n\nfunction propFilter( props, specialEasing ) {\n var index, name, easing, value, hooks;\n\n // camelCase, specialEasing and expand cssHook pass\n for ( index in props ) {\n name = jQuery.camelCase( index );\n easing = specialEasing[ name ];\n value = props[ index ];\n if ( jQuery.isArray( value ) ) {\n easing = value[ 1 ];\n value = props[ index ] = value[ 0 ];\n }\n\n if ( index !== name ) {\n props[ name ] = value;\n delete props[ index ];\n }\n\n hooks = jQuery.cssHooks[ name ];\n if ( hooks && \"expand\" in hooks ) {\n value = hooks.expand( value );\n delete props[ name ];\n\n // not quite $.extend, this wont overwrite keys already present.\n // also - reusing 'index' from above because we have the correct \"name\"\n for ( index in value ) {\n if ( !( index in props ) ) {\n props[ index ] = value[ index ];\n specialEasing[ index ] = easing;\n }\n }\n } else {\n specialEasing[ name ] = easing;\n }\n }\n}\n\njQuery.Animation = jQuery.extend( Animation, {\n\n tweener: function( props, callback ) {\n if ( jQuery.isFunction( props ) ) {\n callback = props;\n props = [ \"*\" ];\n } else {\n props = props.split(\" \");\n }\n\n var prop,\n index = 0,\n length = props.length;\n\n for ( ; index < length ; index++ ) {\n prop = props[ index ];\n tweeners[ prop ] = tweeners[ prop ] || [];\n tweeners[ prop ].unshift( callback );\n }\n },\n\n prefilter: function( callback, prepend ) {\n if ( prepend ) {\n animationPrefilters.unshift( callback );\n } else {\n animationPrefilters.push( callback );\n }\n }\n});\n\nfunction defaultPrefilter( elem, props, opts ) {\n var index, prop, value, length, dataShow, toggle, tween, hooks, oldfire,\n anim = this,\n style = elem.style,\n orig = {},\n handled = [],\n hidden = elem.nodeType && isHidden( elem );\n\n // handle queue: false promises\n if ( !opts.queue ) {\n hooks = jQuery._queueHooks( elem, \"fx\" );\n if ( hooks.unqueued == null ) {\n hooks.unqueued = 0;\n oldfire = hooks.empty.fire;\n hooks.empty.fire = function() {\n if ( !hooks.unqueued ) {\n oldfire();\n }\n };\n }\n hooks.unqueued++;\n\n anim.always(function() {\n // doing this makes sure that the complete handler will be called\n // before this completes\n anim.always(function() {\n hooks.unqueued--;\n if ( !jQuery.queue( elem, \"fx\" ).length ) {\n hooks.empty.fire();\n }\n });\n });\n }\n\n // height/width overflow pass\n if ( elem.nodeType === 1 && ( \"height\" in props || \"width\" in props ) ) {\n // Make sure that nothing sneaks out\n // Record all 3 overflow attributes because IE does not\n // change the overflow attribute when overflowX and\n // overflowY are set to the same value\n opts.overflow = [ style.overflow, style.overflowX, style.overflowY ];\n\n // Set display property to inline-block for height/width\n // animations on inline elements that are having width/height animated\n if ( jQuery.css( elem, \"display\" ) === \"inline\" &&\n jQuery.css( elem, \"float\" ) === \"none\" ) {\n\n // inline-level elements accept inline-block;\n // block-level elements need to be inline with layout\n if ( !jQuery.support.inlineBlockNeedsLayout || css_defaultDisplay( elem.nodeName ) === \"inline\" ) {\n style.display = \"inline-block\";\n\n } else {\n style.zoom = 1;\n }\n }\n }\n\n if ( opts.overflow ) {\n style.overflow = \"hidden\";\n if ( !jQuery.support.shrinkWrapBlocks ) {\n anim.done(function() {\n style.overflow = opts.overflow[ 0 ];\n style.overflowX = opts.overflow[ 1 ];\n style.overflowY = opts.overflow[ 2 ];\n });\n }\n }\n\n\n // show/hide pass\n for ( index in props ) {\n value = props[ index ];\n if ( rfxtypes.exec( value ) ) {\n delete props[ index ];\n toggle = toggle || value === \"toggle\";\n if ( value === ( hidden ? \"hide\" : \"show\" ) ) {\n continue;\n }\n handled.push( index );\n }\n }\n\n length = handled.length;\n if ( length ) {\n dataShow = jQuery._data( elem, \"fxshow\" ) || jQuery._data( elem, \"fxshow\", {} );\n if ( \"hidden\" in dataShow ) {\n hidden = dataShow.hidden;\n }\n\n // store state if its toggle - enables .stop().toggle() to \"reverse\"\n if ( toggle ) {\n dataShow.hidden = !hidden;\n }\n if ( hidden ) {\n jQuery( elem ).show();\n } else {\n anim.done(function() {\n jQuery( elem ).hide();\n });\n }\n anim.done(function() {\n var prop;\n jQuery.removeData( elem, \"fxshow\", true );\n for ( prop in orig ) {\n jQuery.style( elem, prop, orig[ prop ] );\n }\n });\n for ( index = 0 ; index < length ; index++ ) {\n prop = handled[ index ];\n tween = anim.createTween( prop, hidden ? dataShow[ prop ] : 0 );\n orig[ prop ] = dataShow[ prop ] || jQuery.style( elem, prop );\n\n if ( !( prop in dataShow ) ) {\n dataShow[ prop ] = tween.start;\n if ( hidden ) {\n tween.end = tween.start;\n tween.start = prop === \"width\" || prop === \"height\" ? 1 : 0;\n }\n }\n }\n }\n}\n\nfunction Tween( elem, options, prop, end, easing ) {\n return new Tween.prototype.init( elem, options, prop, end, easing );\n}\njQuery.Tween = Tween;\n\nTween.prototype = {\n constructor: Tween,\n init: function( elem, options, prop, end, easing, unit ) {\n this.elem = elem;\n this.prop = prop;\n this.easing = easing || \"swing\";\n this.options = options;\n this.start = this.now = this.cur();\n this.end = end;\n this.unit = unit || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" );\n },\n cur: function() {\n var hooks = Tween.propHooks[ this.prop ];\n\n return hooks && hooks.get ?\n hooks.get( this ) :\n Tween.propHooks._default.get( this );\n },\n run: function( percent ) {\n var eased,\n hooks = Tween.propHooks[ this.prop ];\n\n if ( this.options.duration ) {\n this.pos = eased = jQuery.easing[ this.easing ](\n percent, this.options.duration * percent, 0, 1, this.options.duration\n );\n } else {\n this.pos = eased = percent;\n }\n this.now = ( this.end - this.start ) * eased + this.start;\n\n if ( this.options.step ) {\n this.options.step.call( this.elem, this.now, this );\n }\n\n if ( hooks && hooks.set ) {\n hooks.set( this );\n } else {\n Tween.propHooks._default.set( this );\n }\n return this;\n }\n};\n\nTween.prototype.init.prototype = Tween.prototype;\n\nTween.propHooks = {\n _default: {\n get: function( tween ) {\n var result;\n\n if ( tween.elem[ tween.prop ] != null &&\n (!tween.elem.style || tween.elem.style[ tween.prop ] == null) ) {\n return tween.elem[ tween.prop ];\n }\n\n // passing any value as a 4th parameter to .css will automatically\n // attempt a parseFloat and fallback to a string if the parse fails\n // so, simple values such as \"10px\" are parsed to Float.\n // complex values such as \"rotate(1rad)\" are returned as is.\n result = jQuery.css( tween.elem, tween.prop, false, \"\" );\n // Empty strings, null, undefined and \"auto\" are converted to 0.\n return !result || result === \"auto\" ? 0 : result;\n },\n set: function( tween ) {\n // use step hook for back compat - use cssHook if its there - use .style if its\n // available and use plain properties where available\n if ( jQuery.fx.step[ tween.prop ] ) {\n jQuery.fx.step[ tween.prop ]( tween );\n } else if ( tween.elem.style && ( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null || jQuery.cssHooks[ tween.prop ] ) ) {\n jQuery.style( tween.elem, tween.prop, tween.now + tween.unit );\n } else {\n tween.elem[ tween.prop ] = tween.now;\n }\n }\n }\n};\n\n// Remove in 2.0 - this supports IE8's panic based approach\n// to setting things on disconnected nodes\n\nTween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {\n set: function( tween ) {\n if ( tween.elem.nodeType && tween.elem.parentNode ) {\n tween.elem[ tween.prop ] = tween.now;\n }\n }\n};\n\njQuery.each([ \"toggle\", \"show\", \"hide\" ], function( i, name ) {\n var cssFn = jQuery.fn[ name ];\n jQuery.fn[ name ] = function( speed, easing, callback ) {\n return speed == null || typeof speed === \"boolean\" ||\n // special check for .toggle( handler, handler, ... )\n ( !i && jQuery.isFunction( speed ) && jQuery.isFunction( easing ) ) ?\n cssFn.apply( this, arguments ) :\n this.animate( genFx( name, true ), speed, easing, callback );\n };\n});\n\njQuery.fn.extend({\n fadeTo: function( speed, to, easing, callback ) {\n\n // show any hidden elements after setting opacity to 0\n return this.filter( isHidden ).css( \"opacity\", 0 ).show()\n\n // animate to the value specified\n .end().animate({ opacity: to }, speed, easing, callback );\n },\n animate: function( prop, speed, easing, callback ) {\n var empty = jQuery.isEmptyObject( prop ),\n optall = jQuery.speed( speed, easing, callback ),\n doAnimation = function() {\n // Operate on a copy of prop so per-property easing won't be lost\n var anim = Animation( this, jQuery.extend( {}, prop ), optall );\n\n // Empty animations resolve immediately\n if ( empty ) {\n anim.stop( true );\n }\n };\n\n return empty || optall.queue === false ?\n this.each( doAnimation ) :\n this.queue( optall.queue, doAnimation );\n },\n stop: function( type, clearQueue, gotoEnd ) {\n var stopQueue = function( hooks ) {\n var stop = hooks.stop;\n delete hooks.stop;\n stop( gotoEnd );\n };\n\n if ( typeof type !== \"string\" ) {\n gotoEnd = clearQueue;\n clearQueue = type;\n type = undefined;\n }\n if ( clearQueue && type !== false ) {\n this.queue( type || \"fx\", [] );\n }\n\n return this.each(function() {\n var dequeue = true,\n index = type != null && type + \"queueHooks\",\n timers = jQuery.timers,\n data = jQuery._data( this );\n\n if ( index ) {\n if ( data[ index ] && data[ index ].stop ) {\n stopQueue( data[ index ] );\n }\n } else {\n for ( index in data ) {\n if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {\n stopQueue( data[ index ] );\n }\n }\n }\n\n for ( index = timers.length; index--; ) {\n if ( timers[ index ].elem === this && (type == null || timers[ index ].queue === type) ) {\n timers[ index ].anim.stop( gotoEnd );\n dequeue = false;\n timers.splice( index, 1 );\n }\n }\n\n // start the next in the queue if the last step wasn't forced\n // timers currently will call their complete callbacks, which will dequeue\n // but only if they were gotoEnd\n if ( dequeue || !gotoEnd ) {\n jQuery.dequeue( this, type );\n }\n });\n }\n});\n\n// Generate parameters to create a standard animation\nfunction genFx( type, includeWidth ) {\n var which,\n attrs = { height: type },\n i = 0;\n\n // if we include width, step value is 1 to do all cssExpand values,\n // if we don't include width, step value is 2 to skip over Left and Right\n includeWidth = includeWidth? 1 : 0;\n for( ; i < 4 ; i += 2 - includeWidth ) {\n which = cssExpand[ i ];\n attrs[ \"margin\" + which ] = attrs[ \"padding\" + which ] = type;\n }\n\n if ( includeWidth ) {\n attrs.opacity = attrs.width = type;\n }\n\n return attrs;\n}\n\n// Generate shortcuts for custom animations\njQuery.each({\n slideDown: genFx(\"show\"),\n slideUp: genFx(\"hide\"),\n slideToggle: genFx(\"toggle\"),\n fadeIn: { opacity: \"show\" },\n fadeOut: { opacity: \"hide\" },\n fadeToggle: { opacity: \"toggle\" }\n}, function( name, props ) {\n jQuery.fn[ name ] = function( speed, easing, callback ) {\n return this.animate( props, speed, easing, callback );\n };\n});\n\njQuery.speed = function( speed, easing, fn ) {\n var opt = speed && typeof speed === \"object\" ? jQuery.extend( {}, speed ) : {\n complete: fn || !fn && easing ||\n jQuery.isFunction( speed ) && speed,\n duration: speed,\n easing: fn && easing || easing && !jQuery.isFunction( easing ) && easing\n };\n\n opt.duration = jQuery.fx.off ? 0 : typeof opt.duration === \"number\" ? opt.duration :\n opt.duration in jQuery.fx.speeds ? jQuery.fx.speeds[ opt.duration ] : jQuery.fx.speeds._default;\n\n // normalize opt.queue - true/undefined/null -> \"fx\"\n if ( opt.queue == null || opt.queue === true ) {\n opt.queue = \"fx\";\n }\n\n // Queueing\n opt.old = opt.complete;\n\n opt.complete = function() {\n if ( jQuery.isFunction( opt.old ) ) {\n opt.old.call( this );\n }\n\n if ( opt.queue ) {\n jQuery.dequeue( this, opt.queue );\n }\n };\n\n return opt;\n};\n\njQuery.easing = {\n linear: function( p ) {\n return p;\n },\n swing: function( p ) {\n return 0.5 - Math.cos( p*Math.PI ) / 2;\n }\n};\n\njQuery.timers = [];\njQuery.fx = Tween.prototype.init;\njQuery.fx.tick = function() {\n var timer,\n timers = jQuery.timers,\n i = 0;\n\n fxNow = jQuery.now();\n\n for ( ; i < timers.length; i++ ) {\n timer = timers[ i ];\n // Checks the timer has not already been removed\n if ( !timer() && timers[ i ] === timer ) {\n timers.splice( i--, 1 );\n }\n }\n\n if ( !timers.length ) {\n jQuery.fx.stop();\n }\n fxNow = undefined;\n};\n\njQuery.fx.timer = function( timer ) {\n if ( timer() && jQuery.timers.push( timer ) && !timerId ) {\n timerId = setInterval( jQuery.fx.tick, jQuery.fx.interval );\n }\n};\n\njQuery.fx.interval = 13;\n\njQuery.fx.stop = function() {\n clearInterval( timerId );\n timerId = null;\n};\n\njQuery.fx.speeds = {\n slow: 600,\n fast: 200,\n // Default speed\n _default: 400\n};\n\n// Back Compat <1.8 extension point\njQuery.fx.step = {};\n\nif ( jQuery.expr && jQuery.expr.filters ) {\n jQuery.expr.filters.animated = function( elem ) {\n return jQuery.grep(jQuery.timers, function( fn ) {\n return elem === fn.elem;\n }).length;\n };\n}\nvar rroot = /^(?:body|html)$/i;\n\njQuery.fn.offset = function( options ) {\n if ( arguments.length ) {\n return options === undefined ?\n this :\n this.each(function( i ) {\n jQuery.offset.setOffset( this, options, i );\n });\n }\n\n var docElem, body, win, clientTop, clientLeft, scrollTop, scrollLeft,\n box = { top: 0, left: 0 },\n elem = this[ 0 ],\n doc = elem && elem.ownerDocument;\n\n if ( !doc ) {\n return;\n }\n\n if ( (body = doc.body) === elem ) {\n return jQuery.offset.bodyOffset( elem );\n }\n\n docElem = doc.documentElement;\n\n // Make sure it's not a disconnected DOM node\n if ( !jQuery.contains( docElem, elem ) ) {\n return box;\n }\n\n // If we don't have gBCR, just use 0,0 rather than error\n // BlackBerry 5, iOS 3 (original iPhone)\n if ( typeof elem.getBoundingClientRect !== \"undefined\" ) {\n box = elem.getBoundingClientRect();\n }\n win = getWindow( doc );\n clientTop = docElem.clientTop || body.clientTop || 0;\n clientLeft = docElem.clientLeft || body.clientLeft || 0;\n scrollTop = win.pageYOffset || docElem.scrollTop;\n scrollLeft = win.pageXOffset || docElem.scrollLeft;\n return {\n top: box.top + scrollTop - clientTop,\n left: box.left + scrollLeft - clientLeft\n };\n};\n\njQuery.offset = {\n\n bodyOffset: function( body ) {\n var top = body.offsetTop,\n left = body.offsetLeft;\n\n if ( jQuery.support.doesNotIncludeMarginInBodyOffset ) {\n top += parseFloat( jQuery.css(body, \"marginTop\") ) || 0;\n left += parseFloat( jQuery.css(body, \"marginLeft\") ) || 0;\n }\n\n return { top: top, left: left };\n },\n\n setOffset: function( elem, options, i ) {\n var position = jQuery.css( elem, \"position\" );\n\n // set position first, in-case top/left are set even on static elem\n if ( position === \"static\" ) {\n elem.style.position = \"relative\";\n }\n\n var curElem = jQuery( elem ),\n curOffset = curElem.offset(),\n curCSSTop = jQuery.css( elem, \"top\" ),\n curCSSLeft = jQuery.css( elem, \"left\" ),\n calculatePosition = ( position === \"absolute\" || position === \"fixed\" ) && jQuery.inArray(\"auto\", [curCSSTop, curCSSLeft]) > -1,\n props = {}, curPosition = {}, curTop, curLeft;\n\n // need to be able to calculate position if either top or left is auto and position is either absolute or fixed\n if ( calculatePosition ) {\n curPosition = curElem.position();\n curTop = curPosition.top;\n curLeft = curPosition.left;\n } else {\n curTop = parseFloat( curCSSTop ) || 0;\n curLeft = parseFloat( curCSSLeft ) || 0;\n }\n\n if ( jQuery.isFunction( options ) ) {\n options = options.call( elem, i, curOffset );\n }\n\n if ( options.top != null ) {\n props.top = ( options.top - curOffset.top ) + curTop;\n }\n if ( options.left != null ) {\n props.left = ( options.left - curOffset.left ) + curLeft;\n }\n\n if ( \"using\" in options ) {\n options.using.call( elem, props );\n } else {\n curElem.css( props );\n }\n }\n};\n\n\njQuery.fn.extend({\n\n position: function() {\n if ( !this[0] ) {\n return;\n }\n\n var elem = this[0],\n\n // Get *real* offsetParent\n offsetParent = this.offsetParent(),\n\n // Get correct offsets\n offset = this.offset(),\n parentOffset = rroot.test(offsetParent[0].nodeName) ? { top: 0, left: 0 } : offsetParent.offset();\n\n // Subtract element margins\n // note: when an element has margin: auto the offsetLeft and marginLeft\n // are the same in Safari causing offset.left to incorrectly be 0\n offset.top -= parseFloat( jQuery.css(elem, \"marginTop\") ) || 0;\n offset.left -= parseFloat( jQuery.css(elem, \"marginLeft\") ) || 0;\n\n // Add offsetParent borders\n parentOffset.top += parseFloat( jQuery.css(offsetParent[0], \"borderTopWidth\") ) || 0;\n parentOffset.left += parseFloat( jQuery.css(offsetParent[0], \"borderLeftWidth\") ) || 0;\n\n // Subtract the two offsets\n return {\n top: offset.top - parentOffset.top,\n left: offset.left - parentOffset.left\n };\n },\n\n offsetParent: function() {\n return this.map(function() {\n var offsetParent = this.offsetParent || document.body;\n while ( offsetParent && (!rroot.test(offsetParent.nodeName) && jQuery.css(offsetParent, \"position\") === \"static\") ) {\n offsetParent = offsetParent.offsetParent;\n }\n return offsetParent || document.body;\n });\n }\n});\n\n\n// Create scrollLeft and scrollTop methods\njQuery.each( {scrollLeft: \"pageXOffset\", scrollTop: \"pageYOffset\"}, function( method, prop ) {\n var top = /Y/.test( prop );\n\n jQuery.fn[ method ] = function( val ) {\n return jQuery.access( this, function( elem, method, val ) {\n var win = getWindow( elem );\n\n if ( val === undefined ) {\n return win ? (prop in win) ? win[ prop ] :\n win.document.documentElement[ method ] :\n elem[ method ];\n }\n\n if ( win ) {\n win.scrollTo(\n !top ? val : jQuery( win ).scrollLeft(),\n top ? val : jQuery( win ).scrollTop()\n );\n\n } else {\n elem[ method ] = val;\n }\n }, method, val, arguments.length, null );\n };\n});\n\nfunction getWindow( elem ) {\n return jQuery.isWindow( elem ) ?\n elem :\n elem.nodeType === 9 ?\n elem.defaultView || elem.parentWindow :\n false;\n}\n// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods\njQuery.each( { Height: \"height\", Width: \"width\" }, function( name, type ) {\n jQuery.each( { padding: \"inner\" + name, content: type, \"\": \"outer\" + name }, function( defaultExtra, funcName ) {\n // margin is only for outerHeight, outerWidth\n jQuery.fn[ funcName ] = function( margin, value ) {\n var chainable = arguments.length && ( defaultExtra || typeof margin !== \"boolean\" ),\n extra = defaultExtra || ( margin === true || value === true ? \"margin\" : \"border\" );\n\n return jQuery.access( this, function( elem, type, value ) {\n var doc;\n\n if ( jQuery.isWindow( elem ) ) {\n // As of 5/8/2012 this will yield incorrect results for Mobile Safari, but there\n // isn't a whole lot we can do. See pull request at this URL for discussion:\n // https://github.com/jquery/jquery/pull/764\n return elem.document.documentElement[ \"client\" + name ];\n }\n\n // Get document width or height\n if ( elem.nodeType === 9 ) {\n doc = elem.documentElement;\n\n // Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height], whichever is greatest\n // unfortunately, this causes bug #3838 in IE6/8 only, but there is currently no good, small way to fix it.\n return Math.max(\n elem.body[ \"scroll\" + name ], doc[ \"scroll\" + name ],\n elem.body[ \"offset\" + name ], doc[ \"offset\" + name ],\n doc[ \"client\" + name ]\n );\n }\n\n return value === undefined ?\n // Get width or height on the element, requesting but not forcing parseFloat\n jQuery.css( elem, type, value, extra ) :\n\n // Set width or height on the element\n jQuery.style( elem, type, value, extra );\n }, type, chainable ? margin : undefined, chainable, null );\n };\n });\n});\n// Expose jQuery to the global object\nwindow.jQuery = window.$ = jQuery;\n\n// Expose jQuery as an AMD module, but only for AMD loaders that\n// understand the issues with loading multiple versions of jQuery\n// in a page that all might call define(). The loader will indicate\n// they have special allowances for multiple jQuery versions by\n// specifying define.amd.jQuery = true. Register as a named module,\n// since jQuery can be concatenated with other files that may use define,\n// but not use a proper concatenation script that understands anonymous\n// AMD modules. A named AMD is safest and most robust way to register.\n// Lowercase jquery is used because AMD module names are derived from\n// file names, and jQuery is normally delivered in a lowercase file name.\n// Do this after creating the global so that if an AMD module wants to call\n// noConflict to hide this version of jQuery, it will work.\nif ( typeof define === \"function\" && define.amd && define.amd.jQuery ) {\n define( \"jquery\", [], function () { return jQuery; } );\n}\n\n})( window );",
- "settings":
- {
- "buffer_size": 287804,
- "line_ending": "Unix",
- "name": "/*!"
- }
- },
- {
- "file": "test/integration/test-submit.js",
- "settings":
- {
- "buffer_size": 3638,
- "line_ending": "Unix"
- }
- },
- {
- "file": "test/integration/test-submit-custom.js",
- "settings":
- {
- "buffer_size": 3684,
- "line_ending": "Unix"
- }
- },
- {
- "file": "test/integration/test-http-response.js",
- "settings":
- {
- "buffer_size": 3109,
- "line_ending": "Unix"
- }
- },
- {
- "file": "Readme.md",
- "settings":
- {
- "buffer_size": 2774,
- "line_ending": "Unix"
- }
- },
- {
- "contents": "var CRLF = '\\r\\n';\nvar form = new FormData();\n\nvar options = {\n header: CRLF + '--' + form.getBoundary() + CRLF + 'X-Custom-Header: 123' + CRLF + CRLF,\n knownLength: 1\n};\n\nform.append('my_buffer', buffer, options);\n\nform.submit('http://example.com/', function(err, res) {\n if (err) throw err;\n console.log('Done');\n});",
- "settings":
- {
- "buffer_size": 322,
- "line_ending": "Unix"
- }
- },
- {
- "file": "test/run.js",
- "settings":
- {
- "buffer_size": 121,
- "line_ending": "Unix"
- }
- }
- ],
- "build_system": "",
- "command_palette":
- {
- "height": 87.0,
- "selected_items":
- [
- [
- "Package Control: in",
- "Package Control: Install Package"
- ],
- [
- "Package Control: ins",
- "Package Control: Install Package"
- ],
- [
- "ins",
- "Package Control: Install Package"
- ],
- [
- "insta",
- "Package Control: Install Package"
- ]
- ],
- "width": 467.0
- },
- "console":
- {
- "height": 125.0
- },
- "distraction_free":
- {
- "menu_visible": true,
- "show_minimap": false,
- "show_open_files": false,
- "show_tabs": false,
- "side_bar_visible": false,
- "status_bar_visible": false
- },
- "file_history":
- [
- "/Users/alexi/Dropbox/Projects/node-form-data/test/integration/test-http-respone.js",
- "/Users/alexi/Dropbox/Projects/node-form-data/test/run.js",
- "/Users/alexi/Dropbox/Projects/libereco.ia.gs/sftp-config-alt.json",
- "/Users/alexi/Desktop/test/file.txt",
- "/Users/alexi/Desktop/stuff/kodak/web.js",
- "/Users/alexi/Desktop/test/test1.js",
- "/Users/alexi/Desktop/test/spdy.js",
- "/Users/alexi/Dropbox/Projects/libereco.ia.gs/bin/echo.js",
- "/Users/alexi/Dropbox/Projects/libereco.ia.gs/static/test.html",
- "/Users/alexi/Dropbox/Projects/libereco.ia.gs/bin/passthrough_stream.js",
- "/Users/alexi/Dropbox/Projects/libereco.ia.gs/node_modules/request/main.js",
- "/Users/alexi/Dropbox/Projects/libereco.ia.gs/node_modules/request/tests/test-pipes.js",
- "/Users/alexi/Dropbox/Projects/libereco.ia.gs/static/a/main.js",
- "/Users/alexi/Dropbox/Projects/libereco.ia.gs/node_modules/flickr/lib/flickr.js",
- "/Users/alexi/Dropbox/Projects/libereco.ia.gs/node_modules/socket.io/lib/socket.io.js",
- "/var/folders/xn/475pdrpd72n4s6gdh4y_c2dm0000gn/T/sublime-sftp-browse-1342313240/mapped/var/www/libereco.ia.gs/node_modules/oauth/lib/oauth.js",
- "/Users/alexi/Dropbox/Projects/libereco.ia.gs/node_modules/flickr/node_modules/oauth/lib/oauth.js",
- "/Users/alexi/Dropbox/Projects/libereco.ia.gs/node_modules/flickr/index.js",
- "/Users/alexi/Dropbox/Projects/libereco.ia.gs/node_modules/socket.io/index.js",
- "/Users/alexi/Dropbox/Projects/libereco.ia.gs/sftp-config.json",
- "/Users/alexi/Dropbox/Projects/libereco.ia.gs/public/index.html",
- "/Users/alexi/Desktop/kodak/dns.js",
- "/Users/alexi/Dropbox/Projects/500.ia.gs/htdocs/s/fonts.css",
- "/Users/alexi/Dropbox/Projects/ia.gs/sftp-config.json",
- "/Users/alexi/Downloads/fabric_plaid.png",
- "/Users/alexi/Library/Application Support/Sublime Text 2/Packages/Default/Global.sublime-settings",
- "/Users/alexi/Dropbox/Projects/ia.gs/node_modules/director/lib/director/router.js",
- "/Users/alexi/Dropbox/Projects/ia.gs/web/e/404.html",
- "/Users/alexi/Dropbox/Projects/ia.gs/web/e/500.html",
- "/Users/alexi/Dropbox/Projects/ia.gs/node_modules/director/lib/director/http/index.js",
- "/Users/alexi/Library/Application Support/Sublime Text 2/Packages/SFTP/SFTP.sublime-settings",
- "/Users/alexi/Library/Application Support/Sublime Text 2/Packages/SFTP/Default (OSX).sublime-keymap",
- "/Users/alexi/Sites/new/sftp-config.json",
- "/Users/alexi/Sites/new/polarbear.css",
- "/Users/alexi/Library/Application Support/Sublime Text 2/Packages/User/Base File.sublime-settings",
- "/Users/alexi/Library/Application Support/Sublime Text 2/Packages/Default/Base File.sublime-settings",
- "/Users/alexi/Sites/new/include/Controllers/Home/HomepageController.php"
- ],
- "find":
- {
- "height": 35.0
- },
- "find_in_files":
- {
- "height": 0.0,
- "where_history":
- [
- ""
- ]
- },
- "find_state":
- {
- "case_sensitive": false,
- "find_history":
- [
- "readable",
- "argument",
- "mikeal",
- "return;",
- "throw arguments[1]",
- "arguments[1]",
- "throw arguments",
- "throw arguments[1]",
- "path",
- "conso",
- "isStreamLike",
- "parseUrl",
- "stream",
- "node.js",
- "stream",
- "http://libereco.ia.gs/",
- "flickr_message_nopro",
- "auth:done",
- "con",
- "console",
- "photos",
- "isReadStream",
- "Buffer",
- "Bufer",
- "multipart",
- "sig",
- "api",
- "api_",
- "api_sig",
- "writeFile",
- "googledoodle.png",
- "attachment",
- "_write",
- "fs",
- "mime",
- "_putOrPost",
- "_performSecureRequest",
- "8034",
- "try",
- "paramsToQueryString",
- "_executeOAuthAPIRequest",
- "oauth_client",
- "_createClient",
- "authorization",
- "body",
- "_performSecureRequest",
- "query",
- "io.",
- ".listen",
- "io",
- "config",
- "set",
- "console",
- "'next'",
- "console",
- "_asyncEverySeries",
- "runlist",
- "function",
- "async",
- "local",
- "Find schools",
- "What's up"
- ],
- "highlight": true,
- "in_selection": false,
- "preserve_case": false,
- "regex": false,
- "replace_history":
- [
- ],
- "reverse": false,
- "show_context": true,
- "use_buffer2": true,
- "whole_word": false,
- "wrap": true
- },
- "groups":
- [
- {
- "selected": 1,
- "sheets":
- [
- {
- "buffer": 0,
- "file": "test/integration/test-pipe.js",
- "settings":
- {
- "buffer_size": 3625,
- "regions":
- {
- },
- "selection":
- [
- [
- 654,
- 673
- ]
- ],
- "settings":
- {
- "function_name_status_row": 18,
- "incomplete_sync": null,
- "remote_loading": false,
- "synced": false,
- "syntax": "Packages/JavaScript/JavaScript.tmLanguage"
- },
- "translation.x": 0.0,
- "translation.y": 238.0,
- "zoom_level": 1.0
- },
- "type": "text"
- },
- {
- "buffer": 1,
- "file": "package.json",
- "settings":
- {
- "buffer_size": 673,
- "regions":
- {
- },
- "selection":
- [
- [
- 282,
- 282
- ]
- ],
- "settings":
- {
- "function_name_status_row": 4,
- "incomplete_sync": null,
- "remote_loading": false,
- "synced": false,
- "syntax": "Packages/JavaScript/JSON.tmLanguage"
- },
- "translation.x": 0.0,
- "translation.y": 0.0,
- "zoom_level": 1.0
- },
- "type": "text"
- },
- {
- "buffer": 2,
- "file": "lib/form_data.js",
- "settings":
- {
- "buffer_size": 7510,
- "regions":
- {
- },
- "selection":
- [
- [
- 1940,
- 1940
- ]
- ],
- "settings":
- {
- "function_name_status_row": 65,
- "incomplete_sync": null,
- "remote_loading": false,
- "synced": false,
- "syntax": "Packages/JavaScript/JavaScript.tmLanguage"
- },
- "translation.x": 0.0,
- "translation.y": 658.0,
- "zoom_level": 1.0
- },
- "type": "text"
- },
- {
- "buffer": 3,
- "settings":
- {
- "buffer_size": 287804,
- "regions":
- {
- },
- "selection":
- [
- [
- 8273,
- 8279
- ]
- ],
- "settings":
- {
- "auto_name": "/*!",
- "function_name_status_row": 290,
- "incomplete_sync": null,
- "remote_loading": false,
- "synced": false,
- "syntax": "Packages/JavaScript/JavaScript.tmLanguage"
- },
- "translation.x": 0.0,
- "translation.y": 5683.0,
- "zoom_level": 1.0
- },
- "type": "text"
- },
- {
- "buffer": 4,
- "file": "test/integration/test-submit.js",
- "settings":
- {
- "buffer_size": 3638,
- "regions":
- {
- },
- "selection":
- [
- [
- 3556,
- 3556
- ]
- ],
- "settings":
- {
- "function_name_status_row": 111,
- "incomplete_sync": null,
- "remote_loading": false,
- "synced": false,
- "syntax": "Packages/JavaScript/JavaScript.tmLanguage"
- },
- "translation.x": 0.0,
- "translation.y": 1200.0,
- "zoom_level": 1.0
- },
- "type": "text"
- },
- {
- "buffer": 5,
- "file": "test/integration/test-submit-custom.js",
- "settings":
- {
- "buffer_size": 3684,
- "regions":
- {
- },
- "selection":
- [
- [
- 3449,
- 3449
- ]
- ],
- "settings":
- {
- "function_name_status_row": 104,
- "incomplete_sync": null,
- "remote_loading": false,
- "synced": false,
- "syntax": "Packages/JavaScript/JavaScript.tmLanguage"
- },
- "translation.x": 0.0,
- "translation.y": 1268.0,
- "zoom_level": 1.0
- },
- "type": "text"
- },
- {
- "buffer": 6,
- "file": "test/integration/test-http-response.js",
- "settings":
- {
- "buffer_size": 3109,
- "regions":
- {
- },
- "selection":
- [
- [
- 2156,
- 2156
- ]
- ],
- "settings":
- {
- "function_name_status_row": 88,
- "incomplete_sync": null,
- "remote_loading": false,
- "synced": false,
- "syntax": "Packages/JavaScript/JavaScript.tmLanguage"
- },
- "translation.x": 0.0,
- "translation.y": 59.0,
- "zoom_level": 1.0
- },
- "type": "text"
- },
- {
- "buffer": 7,
- "file": "Readme.md",
- "settings":
- {
- "buffer_size": 2774,
- "regions":
- {
- },
- "selection":
- [
- [
- 0,
- 0
- ]
- ],
- "settings":
- {
- "function_name_status_row": 0,
- "incomplete_sync": null,
- "remote_loading": false,
- "synced": false,
- "syntax": "Packages/Markdown/Markdown.tmLanguage"
- },
- "translation.x": 0.0,
- "translation.y": 996.0,
- "zoom_level": 1.0
- },
- "type": "text"
- },
- {
- "buffer": 8,
- "settings":
- {
- "buffer_size": 322,
- "regions":
- {
- },
- "selection":
- [
- [
- 0,
- 322
- ]
- ],
- "settings":
- {
- "function_name_status_row": 0,
- "incomplete_sync": null,
- "remote_loading": false,
- "synced": false,
- "syntax": "Packages/JavaScript/JavaScript.tmLanguage"
- },
- "translation.x": 0.0,
- "translation.y": 0.0,
- "zoom_level": 1.0
- },
- "type": "text"
- },
- {
- "buffer": 9,
- "file": "test/run.js",
- "settings":
- {
- "buffer_size": 121,
- "regions":
- {
- },
- "selection":
- [
- [
- 76,
- 76
- ]
- ],
- "settings":
- {
- "function_name_status_row": 4,
- "incomplete_sync": null,
- "remote_loading": false,
- "synced": false,
- "syntax": "Packages/JavaScript/JavaScript.tmLanguage"
- },
- "translation.x": 0.0,
- "translation.y": 0.0,
- "zoom_level": 1.0
- },
- "type": "text"
- }
- ]
- }
- ],
- "incremental_find":
- {
- "height": 0.0
- },
- "input":
- {
- "height": 31.0
- },
- "layout":
- {
- "cells":
- [
- [
- 0,
- 0,
- 1,
- 1
- ]
- ],
- "cols":
- [
- 0.0,
- 1.0
- ],
- "rows":
- [
- 0.0,
- 1.0
- ]
- },
- "menu_visible": true,
- "output.sftp":
- {
- "height": 108.0
- },
- "replace":
- {
- "height": 0.0
- },
- "save_all_on_build": true,
- "select_file":
- {
- "height": 0.0,
- "selected_items":
- [
- [
- "homepagecon",
- "include/Controllers/Home/HomepageController.php"
- ],
- [
- "polar",
- "polarbear.css"
- ],
- [
- "homepageco",
- "include/Controllers/Home/HomepageController.php"
- ],
- [
- "homepage.js",
- "include/js/application/homepage/homepage.js"
- ]
- ],
- "width": 0.0
- },
- "select_project":
- {
- "height": 0.0,
- "selected_items":
- [
- ],
- "width": 0.0
- },
- "show_minimap": true,
- "show_open_files": true,
- "show_tabs": true,
- "side_bar_visible": true,
- "side_bar_width": 250.0,
- "status_bar_visible": true
-}
diff --git a/deps/npm/node_modules/request/node_modules/form-data/node_modules/async/package.json b/deps/npm/node_modules/request/node_modules/form-data/node_modules/async/package.json
index 578f9d026..4ea129e1c 100644
--- a/deps/npm/node_modules/request/node_modules/form-data/node_modules/async/package.json
+++ b/deps/npm/node_modules/request/node_modules/form-data/node_modules/async/package.json
@@ -37,6 +37,7 @@
},
"readme": "# Async.js\n\nAsync is a utility module which provides straight-forward, powerful functions\nfor working with asynchronous JavaScript. Although originally designed for\nuse with [node.js](http://nodejs.org), it can also be used directly in the\nbrowser. Also supports [component](https://github.com/component/component).\n\nAsync provides around 20 functions that include the usual 'functional'\nsuspects (map, reduce, filter, each…) as well as some common patterns\nfor asynchronous control flow (parallel, series, waterfall…). All these\nfunctions assume you follow the node.js convention of providing a single\ncallback as the last argument of your async function.\n\n\n## Quick Examples\n\n```javascript\nasync.map(['file1','file2','file3'], fs.stat, function(err, results){\n // results is now an array of stats for each file\n});\n\nasync.filter(['file1','file2','file3'], fs.exists, function(results){\n // results now equals an array of the existing files\n});\n\nasync.parallel([\n function(){ ... },\n function(){ ... }\n], callback);\n\nasync.series([\n function(){ ... },\n function(){ ... }\n]);\n```\n\nThere are many more functions available so take a look at the docs below for a\nfull list. This module aims to be comprehensive, so if you feel anything is\nmissing please create a GitHub issue for it.\n\n## Common Pitfalls\n\n### Binding a context to an iterator\n\nThis section is really about bind, not about async. If you are wondering how to\nmake async execute your iterators in a given context, or are confused as to why\na method of another library isn't working as an iterator, study this example:\n\n```js\n// Here is a simple object with an (unnecessarily roundabout) squaring method\nvar AsyncSquaringLibrary = {\n squareExponent: 2,\n square: function(number, callback){ \n var result = Math.pow(number, this.squareExponent);\n setTimeout(function(){\n callback(null, result);\n }, 200);\n }\n};\n\nasync.map([1, 2, 3], AsyncSquaringLibrary.square, function(err, result){\n // result is [NaN, NaN, NaN]\n // This fails because the `this.squareExponent` expression in the square\n // function is not evaluated in the context of AsyncSquaringLibrary, and is\n // therefore undefined.\n});\n\nasync.map([1, 2, 3], AsyncSquaringLibrary.square.bind(AsyncSquaringLibrary), function(err, result){\n // result is [1, 4, 9]\n // With the help of bind we can attach a context to the iterator before\n // passing it to async. Now the square function will be executed in its \n // 'home' AsyncSquaringLibrary context and the value of `this.squareExponent`\n // will be as expected.\n});\n```\n\n## Download\n\nThe source is available for download from\n[GitHub](http://github.com/caolan/async).\nAlternatively, you can install using Node Package Manager (npm):\n\n npm install async\n\n__Development:__ [async.js](https://github.com/caolan/async/raw/master/lib/async.js) - 29.6kb Uncompressed\n\n## In the Browser\n\nSo far it's been tested in IE6, IE7, IE8, FF3.6 and Chrome 5. Usage:\n\n```html\n<script type=\"text/javascript\" src=\"async.js\"></script>\n<script type=\"text/javascript\">\n\n async.map(data, asyncProcess, function(err, results){\n alert(results);\n });\n\n</script>\n```\n\n## Documentation\n\n### Collections\n\n* [each](#each)\n* [map](#map)\n* [filter](#filter)\n* [reject](#reject)\n* [reduce](#reduce)\n* [detect](#detect)\n* [sortBy](#sortBy)\n* [some](#some)\n* [every](#every)\n* [concat](#concat)\n\n### Control Flow\n\n* [series](#series)\n* [parallel](#parallel)\n* [whilst](#whilst)\n* [doWhilst](#doWhilst)\n* [until](#until)\n* [doUntil](#doUntil)\n* [forever](#forever)\n* [waterfall](#waterfall)\n* [compose](#compose)\n* [applyEach](#applyEach)\n* [queue](#queue)\n* [cargo](#cargo)\n* [auto](#auto)\n* [iterator](#iterator)\n* [apply](#apply)\n* [nextTick](#nextTick)\n* [times](#times)\n* [timesSeries](#timesSeries)\n\n### Utils\n\n* [memoize](#memoize)\n* [unmemoize](#unmemoize)\n* [log](#log)\n* [dir](#dir)\n* [noConflict](#noConflict)\n\n\n## Collections\n\n<a name=\"forEach\" />\n<a name=\"each\" />\n### each(arr, iterator, callback)\n\nApplies an iterator function to each item in an array, in parallel.\nThe iterator is called with an item from the list and a callback for when it\nhas finished. If the iterator passes an error to this callback, the main\ncallback for the each function is immediately called with the error.\n\nNote, that since this function applies the iterator to each item in parallel\nthere is no guarantee that the iterator functions will complete in order.\n\n__Arguments__\n\n* arr - An array to iterate over.\n* iterator(item, callback) - A function to apply to each item in the array.\n The iterator is passed a callback(err) which must be called once it has \n completed. If no error has occured, the callback should be run without \n arguments or with an explicit null argument.\n* callback(err) - A callback which is called after all the iterator functions\n have finished, or an error has occurred.\n\n__Example__\n\n```js\n// assuming openFiles is an array of file names and saveFile is a function\n// to save the modified contents of that file:\n\nasync.each(openFiles, saveFile, function(err){\n // if any of the saves produced an error, err would equal that error\n});\n```\n\n---------------------------------------\n\n<a name=\"forEachSeries\" />\n<a name=\"eachSeries\" />\n### eachSeries(arr, iterator, callback)\n\nThe same as each only the iterator is applied to each item in the array in\nseries. The next iterator is only called once the current one has completed\nprocessing. This means the iterator functions will complete in order.\n\n\n---------------------------------------\n\n<a name=\"forEachLimit\" />\n<a name=\"eachLimit\" />\n### eachLimit(arr, limit, iterator, callback)\n\nThe same as each only no more than \"limit\" iterators will be simultaneously \nrunning at any time.\n\nNote that the items are not processed in batches, so there is no guarantee that\n the first \"limit\" iterator functions will complete before any others are \nstarted.\n\n__Arguments__\n\n* arr - An array to iterate over.\n* limit - The maximum number of iterators to run at any time.\n* iterator(item, callback) - A function to apply to each item in the array.\n The iterator is passed a callback(err) which must be called once it has \n completed. If no error has occured, the callback should be run without \n arguments or with an explicit null argument.\n* callback(err) - A callback which is called after all the iterator functions\n have finished, or an error has occurred.\n\n__Example__\n\n```js\n// Assume documents is an array of JSON objects and requestApi is a\n// function that interacts with a rate-limited REST api.\n\nasync.eachLimit(documents, 20, requestApi, function(err){\n // if any of the saves produced an error, err would equal that error\n});\n```\n\n---------------------------------------\n\n<a name=\"map\" />\n### map(arr, iterator, callback)\n\nProduces a new array of values by mapping each value in the given array through\nthe iterator function. The iterator is called with an item from the array and a\ncallback for when it has finished processing. The callback takes 2 arguments, \nan error and the transformed item from the array. If the iterator passes an\nerror to this callback, the main callback for the map function is immediately\ncalled with the error.\n\nNote, that since this function applies the iterator to each item in parallel\nthere is no guarantee that the iterator functions will complete in order, however\nthe results array will be in the same order as the original array.\n\n__Arguments__\n\n* arr - An array to iterate over.\n* iterator(item, callback) - A function to apply to each item in the array.\n The iterator is passed a callback(err, transformed) which must be called once \n it has completed with an error (which can be null) and a transformed item.\n* callback(err, results) - A callback which is called after all the iterator\n functions have finished, or an error has occurred. Results is an array of the\n transformed items from the original array.\n\n__Example__\n\n```js\nasync.map(['file1','file2','file3'], fs.stat, function(err, results){\n // results is now an array of stats for each file\n});\n```\n\n---------------------------------------\n\n<a name=\"mapSeries\" />\n### mapSeries(arr, iterator, callback)\n\nThe same as map only the iterator is applied to each item in the array in\nseries. The next iterator is only called once the current one has completed\nprocessing. The results array will be in the same order as the original.\n\n\n---------------------------------------\n\n<a name=\"mapLimit\" />\n### mapLimit(arr, limit, iterator, callback)\n\nThe same as map only no more than \"limit\" iterators will be simultaneously \nrunning at any time.\n\nNote that the items are not processed in batches, so there is no guarantee that\n the first \"limit\" iterator functions will complete before any others are \nstarted.\n\n__Arguments__\n\n* arr - An array to iterate over.\n* limit - The maximum number of iterators to run at any time.\n* iterator(item, callback) - A function to apply to each item in the array.\n The iterator is passed a callback(err, transformed) which must be called once \n it has completed with an error (which can be null) and a transformed item.\n* callback(err, results) - A callback which is called after all the iterator\n functions have finished, or an error has occurred. Results is an array of the\n transformed items from the original array.\n\n__Example__\n\n```js\nasync.map(['file1','file2','file3'], 1, fs.stat, function(err, results){\n // results is now an array of stats for each file\n});\n```\n\n---------------------------------------\n\n<a name=\"filter\" />\n### filter(arr, iterator, callback)\n\n__Alias:__ select\n\nReturns a new array of all the values which pass an async truth test.\n_The callback for each iterator call only accepts a single argument of true or\nfalse, it does not accept an error argument first!_ This is in-line with the\nway node libraries work with truth tests like fs.exists. This operation is\nperformed in parallel, but the results array will be in the same order as the\noriginal.\n\n__Arguments__\n\n* arr - An array to iterate over.\n* iterator(item, callback) - A truth test to apply to each item in the array.\n The iterator is passed a callback(truthValue) which must be called with a \n boolean argument once it has completed.\n* callback(results) - A callback which is called after all the iterator\n functions have finished.\n\n__Example__\n\n```js\nasync.filter(['file1','file2','file3'], fs.exists, function(results){\n // results now equals an array of the existing files\n});\n```\n\n---------------------------------------\n\n<a name=\"filterSeries\" />\n### filterSeries(arr, iterator, callback)\n\n__alias:__ selectSeries\n\nThe same as filter only the iterator is applied to each item in the array in\nseries. The next iterator is only called once the current one has completed\nprocessing. The results array will be in the same order as the original.\n\n---------------------------------------\n\n<a name=\"reject\" />\n### reject(arr, iterator, callback)\n\nThe opposite of filter. Removes values that pass an async truth test.\n\n---------------------------------------\n\n<a name=\"rejectSeries\" />\n### rejectSeries(arr, iterator, callback)\n\nThe same as reject, only the iterator is applied to each item in the array\nin series.\n\n\n---------------------------------------\n\n<a name=\"reduce\" />\n### reduce(arr, memo, iterator, callback)\n\n__aliases:__ inject, foldl\n\nReduces a list of values into a single value using an async iterator to return\neach successive step. Memo is the initial state of the reduction. This\nfunction only operates in series. For performance reasons, it may make sense to\nsplit a call to this function into a parallel map, then use the normal\nArray.prototype.reduce on the results. This function is for situations where\neach step in the reduction needs to be async, if you can get the data before\nreducing it then it's probably a good idea to do so.\n\n__Arguments__\n\n* arr - An array to iterate over.\n* memo - The initial state of the reduction.\n* iterator(memo, item, callback) - A function applied to each item in the\n array to produce the next step in the reduction. The iterator is passed a\n callback(err, reduction) which accepts an optional error as its first \n argument, and the state of the reduction as the second. If an error is \n passed to the callback, the reduction is stopped and the main callback is \n immediately called with the error.\n* callback(err, result) - A callback which is called after all the iterator\n functions have finished. Result is the reduced value.\n\n__Example__\n\n```js\nasync.reduce([1,2,3], 0, function(memo, item, callback){\n // pointless async:\n process.nextTick(function(){\n callback(null, memo + item)\n });\n}, function(err, result){\n // result is now equal to the last value of memo, which is 6\n});\n```\n\n---------------------------------------\n\n<a name=\"reduceRight\" />\n### reduceRight(arr, memo, iterator, callback)\n\n__Alias:__ foldr\n\nSame as reduce, only operates on the items in the array in reverse order.\n\n\n---------------------------------------\n\n<a name=\"detect\" />\n### detect(arr, iterator, callback)\n\nReturns the first value in a list that passes an async truth test. The\niterator is applied in parallel, meaning the first iterator to return true will\nfire the detect callback with that result. That means the result might not be\nthe first item in the original array (in terms of order) that passes the test.\n\nIf order within the original array is important then look at detectSeries.\n\n__Arguments__\n\n* arr - An array to iterate over.\n* iterator(item, callback) - A truth test to apply to each item in the array.\n The iterator is passed a callback(truthValue) which must be called with a \n boolean argument once it has completed.\n* callback(result) - A callback which is called as soon as any iterator returns\n true, or after all the iterator functions have finished. Result will be\n the first item in the array that passes the truth test (iterator) or the\n value undefined if none passed.\n\n__Example__\n\n```js\nasync.detect(['file1','file2','file3'], fs.exists, function(result){\n // result now equals the first file in the list that exists\n});\n```\n\n---------------------------------------\n\n<a name=\"detectSeries\" />\n### detectSeries(arr, iterator, callback)\n\nThe same as detect, only the iterator is applied to each item in the array\nin series. This means the result is always the first in the original array (in\nterms of array order) that passes the truth test.\n\n\n---------------------------------------\n\n<a name=\"sortBy\" />\n### sortBy(arr, iterator, callback)\n\nSorts a list by the results of running each value through an async iterator.\n\n__Arguments__\n\n* arr - An array to iterate over.\n* iterator(item, callback) - A function to apply to each item in the array.\n The iterator is passed a callback(err, sortValue) which must be called once it\n has completed with an error (which can be null) and a value to use as the sort\n criteria.\n* callback(err, results) - A callback which is called after all the iterator\n functions have finished, or an error has occurred. Results is the items from\n the original array sorted by the values returned by the iterator calls.\n\n__Example__\n\n```js\nasync.sortBy(['file1','file2','file3'], function(file, callback){\n fs.stat(file, function(err, stats){\n callback(err, stats.mtime);\n });\n}, function(err, results){\n // results is now the original array of files sorted by\n // modified date\n});\n```\n\n---------------------------------------\n\n<a name=\"some\" />\n### some(arr, iterator, callback)\n\n__Alias:__ any\n\nReturns true if at least one element in the array satisfies an async test.\n_The callback for each iterator call only accepts a single argument of true or\nfalse, it does not accept an error argument first!_ This is in-line with the\nway node libraries work with truth tests like fs.exists. Once any iterator\ncall returns true, the main callback is immediately called.\n\n__Arguments__\n\n* arr - An array to iterate over.\n* iterator(item, callback) - A truth test to apply to each item in the array.\n The iterator is passed a callback(truthValue) which must be called with a \n boolean argument once it has completed.\n* callback(result) - A callback which is called as soon as any iterator returns\n true, or after all the iterator functions have finished. Result will be\n either true or false depending on the values of the async tests.\n\n__Example__\n\n```js\nasync.some(['file1','file2','file3'], fs.exists, function(result){\n // if result is true then at least one of the files exists\n});\n```\n\n---------------------------------------\n\n<a name=\"every\" />\n### every(arr, iterator, callback)\n\n__Alias:__ all\n\nReturns true if every element in the array satisfies an async test.\n_The callback for each iterator call only accepts a single argument of true or\nfalse, it does not accept an error argument first!_ This is in-line with the\nway node libraries work with truth tests like fs.exists.\n\n__Arguments__\n\n* arr - An array to iterate over.\n* iterator(item, callback) - A truth test to apply to each item in the array.\n The iterator is passed a callback(truthValue) which must be called with a \n boolean argument once it has completed.\n* callback(result) - A callback which is called after all the iterator\n functions have finished. Result will be either true or false depending on\n the values of the async tests.\n\n__Example__\n\n```js\nasync.every(['file1','file2','file3'], fs.exists, function(result){\n // if result is true then every file exists\n});\n```\n\n---------------------------------------\n\n<a name=\"concat\" />\n### concat(arr, iterator, callback)\n\nApplies an iterator to each item in a list, concatenating the results. Returns the\nconcatenated list. The iterators are called in parallel, and the results are\nconcatenated as they return. There is no guarantee that the results array will\nbe returned in the original order of the arguments passed to the iterator function.\n\n__Arguments__\n\n* arr - An array to iterate over\n* iterator(item, callback) - A function to apply to each item in the array.\n The iterator is passed a callback(err, results) which must be called once it \n has completed with an error (which can be null) and an array of results.\n* callback(err, results) - A callback which is called after all the iterator\n functions have finished, or an error has occurred. Results is an array containing\n the concatenated results of the iterator function.\n\n__Example__\n\n```js\nasync.concat(['dir1','dir2','dir3'], fs.readdir, function(err, files){\n // files is now a list of filenames that exist in the 3 directories\n});\n```\n\n---------------------------------------\n\n<a name=\"concatSeries\" />\n### concatSeries(arr, iterator, callback)\n\nSame as async.concat, but executes in series instead of parallel.\n\n\n## Control Flow\n\n<a name=\"series\" />\n### series(tasks, [callback])\n\nRun an array of functions in series, each one running once the previous\nfunction has completed. If any functions in the series pass an error to its\ncallback, no more functions are run and the callback for the series is\nimmediately called with the value of the error. Once the tasks have completed,\nthe results are passed to the final callback as an array.\n\nIt is also possible to use an object instead of an array. Each property will be\nrun as a function and the results will be passed to the final callback as an object\ninstead of an array. This can be a more readable way of handling results from\nasync.series.\n\n\n__Arguments__\n\n* tasks - An array or object containing functions to run, each function is passed\n a callback(err, result) it must call on completion with an error (which can\n be null) and an optional result value.\n* callback(err, results) - An optional callback to run once all the functions\n have completed. This function gets a results array (or object) containing all \n the result arguments passed to the task callbacks.\n\n__Example__\n\n```js\nasync.series([\n function(callback){\n // do some stuff ...\n callback(null, 'one');\n },\n function(callback){\n // do some more stuff ...\n callback(null, 'two');\n }\n],\n// optional callback\nfunction(err, results){\n // results is now equal to ['one', 'two']\n});\n\n\n// an example using an object instead of an array\nasync.series({\n one: function(callback){\n setTimeout(function(){\n callback(null, 1);\n }, 200);\n },\n two: function(callback){\n setTimeout(function(){\n callback(null, 2);\n }, 100);\n }\n},\nfunction(err, results) {\n // results is now equal to: {one: 1, two: 2}\n});\n```\n\n---------------------------------------\n\n<a name=\"parallel\" />\n### parallel(tasks, [callback])\n\nRun an array of functions in parallel, without waiting until the previous\nfunction has completed. If any of the functions pass an error to its\ncallback, the main callback is immediately called with the value of the error.\nOnce the tasks have completed, the results are passed to the final callback as an\narray.\n\nIt is also possible to use an object instead of an array. Each property will be\nrun as a function and the results will be passed to the final callback as an object\ninstead of an array. This can be a more readable way of handling results from\nasync.parallel.\n\n\n__Arguments__\n\n* tasks - An array or object containing functions to run, each function is passed \n a callback(err, result) it must call on completion with an error (which can\n be null) and an optional result value.\n* callback(err, results) - An optional callback to run once all the functions\n have completed. This function gets a results array (or object) containing all \n the result arguments passed to the task callbacks.\n\n__Example__\n\n```js\nasync.parallel([\n function(callback){\n setTimeout(function(){\n callback(null, 'one');\n }, 200);\n },\n function(callback){\n setTimeout(function(){\n callback(null, 'two');\n }, 100);\n }\n],\n// optional callback\nfunction(err, results){\n // the results array will equal ['one','two'] even though\n // the second function had a shorter timeout.\n});\n\n\n// an example using an object instead of an array\nasync.parallel({\n one: function(callback){\n setTimeout(function(){\n callback(null, 1);\n }, 200);\n },\n two: function(callback){\n setTimeout(function(){\n callback(null, 2);\n }, 100);\n }\n},\nfunction(err, results) {\n // results is now equals to: {one: 1, two: 2}\n});\n```\n\n---------------------------------------\n\n<a name=\"parallel\" />\n### parallelLimit(tasks, limit, [callback])\n\nThe same as parallel only the tasks are executed in parallel with a maximum of \"limit\" \ntasks executing at any time.\n\nNote that the tasks are not executed in batches, so there is no guarantee that \nthe first \"limit\" tasks will complete before any others are started.\n\n__Arguments__\n\n* tasks - An array or object containing functions to run, each function is passed \n a callback(err, result) it must call on completion with an error (which can\n be null) and an optional result value.\n* limit - The maximum number of tasks to run at any time.\n* callback(err, results) - An optional callback to run once all the functions\n have completed. This function gets a results array (or object) containing all \n the result arguments passed to the task callbacks.\n\n---------------------------------------\n\n<a name=\"whilst\" />\n### whilst(test, fn, callback)\n\nRepeatedly call fn, while test returns true. Calls the callback when stopped,\nor an error occurs.\n\n__Arguments__\n\n* test() - synchronous truth test to perform before each execution of fn.\n* fn(callback) - A function to call each time the test passes. The function is\n passed a callback(err) which must be called once it has completed with an \n optional error argument.\n* callback(err) - A callback which is called after the test fails and repeated\n execution of fn has stopped.\n\n__Example__\n\n```js\nvar count = 0;\n\nasync.whilst(\n function () { return count < 5; },\n function (callback) {\n count++;\n setTimeout(callback, 1000);\n },\n function (err) {\n // 5 seconds have passed\n }\n);\n```\n\n---------------------------------------\n\n<a name=\"doWhilst\" />\n### doWhilst(fn, test, callback)\n\nThe post check version of whilst. To reflect the difference in the order of operations `test` and `fn` arguments are switched. `doWhilst` is to `whilst` as `do while` is to `while` in plain JavaScript.\n\n---------------------------------------\n\n<a name=\"until\" />\n### until(test, fn, callback)\n\nRepeatedly call fn, until test returns true. Calls the callback when stopped,\nor an error occurs.\n\nThe inverse of async.whilst.\n\n---------------------------------------\n\n<a name=\"doUntil\" />\n### doUntil(fn, test, callback)\n\nLike doWhilst except the test is inverted. Note the argument ordering differs from `until`.\n\n---------------------------------------\n\n<a name=\"forever\" />\n### forever(fn, callback)\n\nCalls the asynchronous function 'fn' repeatedly, in series, indefinitely.\nIf an error is passed to fn's callback then 'callback' is called with the\nerror, otherwise it will never be called.\n\n---------------------------------------\n\n<a name=\"waterfall\" />\n### waterfall(tasks, [callback])\n\nRuns an array of functions in series, each passing their results to the next in\nthe array. However, if any of the functions pass an error to the callback, the\nnext function is not executed and the main callback is immediately called with\nthe error.\n\n__Arguments__\n\n* tasks - An array of functions to run, each function is passed a \n callback(err, result1, result2, ...) it must call on completion. The first\n argument is an error (which can be null) and any further arguments will be \n passed as arguments in order to the next task.\n* callback(err, [results]) - An optional callback to run once all the functions\n have completed. This will be passed the results of the last task's callback.\n\n\n\n__Example__\n\n```js\nasync.waterfall([\n function(callback){\n callback(null, 'one', 'two');\n },\n function(arg1, arg2, callback){\n callback(null, 'three');\n },\n function(arg1, callback){\n // arg1 now equals 'three'\n callback(null, 'done');\n }\n], function (err, result) {\n // result now equals 'done' \n});\n```\n\n---------------------------------------\n<a name=\"compose\" />\n### compose(fn1, fn2...)\n\nCreates a function which is a composition of the passed asynchronous\nfunctions. Each function consumes the return value of the function that\nfollows. Composing functions f(), g() and h() would produce the result of\nf(g(h())), only this version uses callbacks to obtain the return values.\n\nEach function is executed with the `this` binding of the composed function.\n\n__Arguments__\n\n* functions... - the asynchronous functions to compose\n\n\n__Example__\n\n```js\nfunction add1(n, callback) {\n setTimeout(function () {\n callback(null, n + 1);\n }, 10);\n}\n\nfunction mul3(n, callback) {\n setTimeout(function () {\n callback(null, n * 3);\n }, 10);\n}\n\nvar add1mul3 = async.compose(mul3, add1);\n\nadd1mul3(4, function (err, result) {\n // result now equals 15\n});\n```\n\n---------------------------------------\n<a name=\"applyEach\" />\n### applyEach(fns, args..., callback)\n\nApplies the provided arguments to each function in the array, calling the\ncallback after all functions have completed. If you only provide the first\nargument then it will return a function which lets you pass in the\narguments as if it were a single function call.\n\n__Arguments__\n\n* fns - the asynchronous functions to all call with the same arguments\n* args... - any number of separate arguments to pass to the function\n* callback - the final argument should be the callback, called when all\n functions have completed processing\n\n\n__Example__\n\n```js\nasync.applyEach([enableSearch, updateSchema], 'bucket', callback);\n\n// partial application example:\nasync.each(\n buckets,\n async.applyEach([enableSearch, updateSchema]),\n callback\n);\n```\n\n---------------------------------------\n\n<a name=\"applyEachSeries\" />\n### applyEachSeries(arr, iterator, callback)\n\nThe same as applyEach only the functions are applied in series.\n\n---------------------------------------\n\n<a name=\"queue\" />\n### queue(worker, concurrency)\n\nCreates a queue object with the specified concurrency. Tasks added to the\nqueue will be processed in parallel (up to the concurrency limit). If all\nworkers are in progress, the task is queued until one is available. Once\na worker has completed a task, the task's callback is called.\n\n__Arguments__\n\n* worker(task, callback) - An asynchronous function for processing a queued\n task, which must call its callback(err) argument when finished, with an \n optional error as an argument.\n* concurrency - An integer for determining how many worker functions should be\n run in parallel.\n\n__Queue objects__\n\nThe queue object returned by this function has the following properties and\nmethods:\n\n* length() - a function returning the number of items waiting to be processed.\n* concurrency - an integer for determining how many worker functions should be\n run in parallel. This property can be changed after a queue is created to\n alter the concurrency on-the-fly.\n* push(task, [callback]) - add a new task to the queue, the callback is called\n once the worker has finished processing the task.\n instead of a single task, an array of tasks can be submitted. the respective callback is used for every task in the list.\n* unshift(task, [callback]) - add a new task to the front of the queue.\n* saturated - a callback that is called when the queue length hits the concurrency and further tasks will be queued\n* empty - a callback that is called when the last item from the queue is given to a worker\n* drain - a callback that is called when the last item from the queue has returned from the worker\n\n__Example__\n\n```js\n// create a queue object with concurrency 2\n\nvar q = async.queue(function (task, callback) {\n console.log('hello ' + task.name);\n callback();\n}, 2);\n\n\n// assign a callback\nq.drain = function() {\n console.log('all items have been processed');\n}\n\n// add some items to the queue\n\nq.push({name: 'foo'}, function (err) {\n console.log('finished processing foo');\n});\nq.push({name: 'bar'}, function (err) {\n console.log('finished processing bar');\n});\n\n// add some items to the queue (batch-wise)\n\nq.push([{name: 'baz'},{name: 'bay'},{name: 'bax'}], function (err) {\n console.log('finished processing bar');\n});\n\n// add some items to the front of the queue\n\nq.unshift({name: 'bar'}, function (err) {\n console.log('finished processing bar');\n});\n```\n\n---------------------------------------\n\n<a name=\"cargo\" />\n### cargo(worker, [payload])\n\nCreates a cargo object with the specified payload. Tasks added to the\ncargo will be processed altogether (up to the payload limit). If the\nworker is in progress, the task is queued until it is available. Once\nthe worker has completed some tasks, each callback of those tasks is called.\n\n__Arguments__\n\n* worker(tasks, callback) - An asynchronous function for processing an array of\n queued tasks, which must call its callback(err) argument when finished, with \n an optional error as an argument.\n* payload - An optional integer for determining how many tasks should be\n processed per round; if omitted, the default is unlimited.\n\n__Cargo objects__\n\nThe cargo object returned by this function has the following properties and\nmethods:\n\n* length() - a function returning the number of items waiting to be processed.\n* payload - an integer for determining how many tasks should be\n process per round. This property can be changed after a cargo is created to\n alter the payload on-the-fly.\n* push(task, [callback]) - add a new task to the queue, the callback is called\n once the worker has finished processing the task.\n instead of a single task, an array of tasks can be submitted. the respective callback is used for every task in the list.\n* saturated - a callback that is called when the queue length hits the concurrency and further tasks will be queued\n* empty - a callback that is called when the last item from the queue is given to a worker\n* drain - a callback that is called when the last item from the queue has returned from the worker\n\n__Example__\n\n```js\n// create a cargo object with payload 2\n\nvar cargo = async.cargo(function (tasks, callback) {\n for(var i=0; i<tasks.length; i++){\n console.log('hello ' + tasks[i].name);\n }\n callback();\n}, 2);\n\n\n// add some items\n\ncargo.push({name: 'foo'}, function (err) {\n console.log('finished processing foo');\n});\ncargo.push({name: 'bar'}, function (err) {\n console.log('finished processing bar');\n});\ncargo.push({name: 'baz'}, function (err) {\n console.log('finished processing baz');\n});\n```\n\n---------------------------------------\n\n<a name=\"auto\" />\n### auto(tasks, [callback])\n\nDetermines the best order for running functions based on their requirements.\nEach function can optionally depend on other functions being completed first,\nand each function is run as soon as its requirements are satisfied. If any of\nthe functions pass an error to their callback, that function will not complete\n(so any other functions depending on it will not run) and the main callback\nwill be called immediately with the error. Functions also receive an object\ncontaining the results of functions which have completed so far.\n\nNote, all functions are called with a results object as a second argument, \nso it is unsafe to pass functions in the tasks object which cannot handle the\nextra argument. For example, this snippet of code:\n\n```js\nasync.auto({\n readData: async.apply(fs.readFile, 'data.txt', 'utf-8');\n}, callback);\n```\n\nwill have the effect of calling readFile with the results object as the last\nargument, which will fail:\n\n```js\nfs.readFile('data.txt', 'utf-8', cb, {});\n```\n\nInstead, wrap the call to readFile in a function which does not forward the \nresults object:\n\n```js\nasync.auto({\n readData: function(cb, results){\n fs.readFile('data.txt', 'utf-8', cb);\n }\n}, callback);\n```\n\n__Arguments__\n\n* tasks - An object literal containing named functions or an array of\n requirements, with the function itself the last item in the array. The key\n used for each function or array is used when specifying requirements. The \n function receives two arguments: (1) a callback(err, result) which must be \n called when finished, passing an error (which can be null) and the result of \n the function's execution, and (2) a results object, containing the results of\n the previously executed functions.\n* callback(err, results) - An optional callback which is called when all the\n tasks have been completed. The callback will receive an error as an argument\n if any tasks pass an error to their callback. Results will always be passed\n\tbut if an error occurred, no other tasks will be performed, and the results\n\tobject will only contain partial results.\n \n\n__Example__\n\n```js\nasync.auto({\n get_data: function(callback){\n // async code to get some data\n },\n make_folder: function(callback){\n // async code to create a directory to store a file in\n // this is run at the same time as getting the data\n },\n write_file: ['get_data', 'make_folder', function(callback){\n // once there is some data and the directory exists,\n // write the data to a file in the directory\n callback(null, filename);\n }],\n email_link: ['write_file', function(callback, results){\n // once the file is written let's email a link to it...\n // results.write_file contains the filename returned by write_file.\n }]\n});\n```\n\nThis is a fairly trivial example, but to do this using the basic parallel and\nseries functions would look like this:\n\n```js\nasync.parallel([\n function(callback){\n // async code to get some data\n },\n function(callback){\n // async code to create a directory to store a file in\n // this is run at the same time as getting the data\n }\n],\nfunction(err, results){\n async.series([\n function(callback){\n // once there is some data and the directory exists,\n // write the data to a file in the directory\n },\n function(callback){\n // once the file is written let's email a link to it...\n }\n ]);\n});\n```\n\nFor a complicated series of async tasks using the auto function makes adding\nnew tasks much easier and makes the code more readable.\n\n\n---------------------------------------\n\n<a name=\"iterator\" />\n### iterator(tasks)\n\nCreates an iterator function which calls the next function in the array,\nreturning a continuation to call the next one after that. It's also possible to\n'peek' the next iterator by doing iterator.next().\n\nThis function is used internally by the async module but can be useful when\nyou want to manually control the flow of functions in series.\n\n__Arguments__\n\n* tasks - An array of functions to run.\n\n__Example__\n\n```js\nvar iterator = async.iterator([\n function(){ sys.p('one'); },\n function(){ sys.p('two'); },\n function(){ sys.p('three'); }\n]);\n\nnode> var iterator2 = iterator();\n'one'\nnode> var iterator3 = iterator2();\n'two'\nnode> iterator3();\n'three'\nnode> var nextfn = iterator2.next();\nnode> nextfn();\n'three'\n```\n\n---------------------------------------\n\n<a name=\"apply\" />\n### apply(function, arguments..)\n\nCreates a continuation function with some arguments already applied, a useful\nshorthand when combined with other control flow functions. Any arguments\npassed to the returned function are added to the arguments originally passed\nto apply.\n\n__Arguments__\n\n* function - The function you want to eventually apply all arguments to.\n* arguments... - Any number of arguments to automatically apply when the\n continuation is called.\n\n__Example__\n\n```js\n// using apply\n\nasync.parallel([\n async.apply(fs.writeFile, 'testfile1', 'test1'),\n async.apply(fs.writeFile, 'testfile2', 'test2'),\n]);\n\n\n// the same process without using apply\n\nasync.parallel([\n function(callback){\n fs.writeFile('testfile1', 'test1', callback);\n },\n function(callback){\n fs.writeFile('testfile2', 'test2', callback);\n }\n]);\n```\n\nIt's possible to pass any number of additional arguments when calling the\ncontinuation:\n\n```js\nnode> var fn = async.apply(sys.puts, 'one');\nnode> fn('two', 'three');\none\ntwo\nthree\n```\n\n---------------------------------------\n\n<a name=\"nextTick\" />\n### nextTick(callback)\n\nCalls the callback on a later loop around the event loop. In node.js this just\ncalls process.nextTick, in the browser it falls back to setImmediate(callback)\nif available, otherwise setTimeout(callback, 0), which means other higher priority\nevents may precede the execution of the callback.\n\nThis is used internally for browser-compatibility purposes.\n\n__Arguments__\n\n* callback - The function to call on a later loop around the event loop.\n\n__Example__\n\n```js\nvar call_order = [];\nasync.nextTick(function(){\n call_order.push('two');\n // call_order now equals ['one','two']\n});\ncall_order.push('one')\n```\n\n<a name=\"times\" />\n### times(n, callback)\n\nCalls the callback n times and accumulates results in the same manner\nyou would use with async.map.\n\n__Arguments__\n\n* n - The number of times to run the function.\n* callback - The function to call n times.\n\n__Example__\n\n```js\n// Pretend this is some complicated async factory\nvar createUser = function(id, callback) {\n callback(null, {\n id: 'user' + id\n })\n}\n// generate 5 users\nasync.times(5, function(n, next){\n createUser(n, function(err, user) {\n next(err, user)\n })\n}, function(err, users) {\n // we should now have 5 users\n});\n```\n\n<a name=\"timesSeries\" />\n### timesSeries(n, callback)\n\nThe same as times only the iterator is applied to each item in the array in\nseries. The next iterator is only called once the current one has completed\nprocessing. The results array will be in the same order as the original.\n\n\n## Utils\n\n<a name=\"memoize\" />\n### memoize(fn, [hasher])\n\nCaches the results of an async function. When creating a hash to store function\nresults against, the callback is omitted from the hash and an optional hash\nfunction can be used.\n\nThe cache of results is exposed as the `memo` property of the function returned\nby `memoize`.\n\n__Arguments__\n\n* fn - the function you to proxy and cache results from.\n* hasher - an optional function for generating a custom hash for storing\n results, it has all the arguments applied to it apart from the callback, and\n must be synchronous.\n\n__Example__\n\n```js\nvar slow_fn = function (name, callback) {\n // do something\n callback(null, result);\n};\nvar fn = async.memoize(slow_fn);\n\n// fn can now be used as if it were slow_fn\nfn('some name', function () {\n // callback\n});\n```\n\n<a name=\"unmemoize\" />\n### unmemoize(fn)\n\nUndoes a memoized function, reverting it to the original, unmemoized\nform. Comes handy in tests.\n\n__Arguments__\n\n* fn - the memoized function\n\n<a name=\"log\" />\n### log(function, arguments)\n\nLogs the result of an async function to the console. Only works in node.js or\nin browsers that support console.log and console.error (such as FF and Chrome).\nIf multiple arguments are returned from the async function, console.log is\ncalled on each argument in order.\n\n__Arguments__\n\n* function - The function you want to eventually apply all arguments to.\n* arguments... - Any number of arguments to apply to the function.\n\n__Example__\n\n```js\nvar hello = function(name, callback){\n setTimeout(function(){\n callback(null, 'hello ' + name);\n }, 1000);\n};\n```\n```js\nnode> async.log(hello, 'world');\n'hello world'\n```\n\n---------------------------------------\n\n<a name=\"dir\" />\n### dir(function, arguments)\n\nLogs the result of an async function to the console using console.dir to\ndisplay the properties of the resulting object. Only works in node.js or\nin browsers that support console.dir and console.error (such as FF and Chrome).\nIf multiple arguments are returned from the async function, console.dir is\ncalled on each argument in order.\n\n__Arguments__\n\n* function - The function you want to eventually apply all arguments to.\n* arguments... - Any number of arguments to apply to the function.\n\n__Example__\n\n```js\nvar hello = function(name, callback){\n setTimeout(function(){\n callback(null, {hello: name});\n }, 1000);\n};\n```\n```js\nnode> async.dir(hello, 'world');\n{hello: 'world'}\n```\n\n---------------------------------------\n\n<a name=\"noConflict\" />\n### noConflict()\n\nChanges the value of async back to its original value, returning a reference to the\nasync object.\n",
"readmeFilename": "README.md",
+ "homepage": "https://github.com/caolan/async",
"_id": "async@0.2.9",
- "_from": "async@~0.2.7"
+ "_from": "async@~0.2.9"
}
diff --git a/deps/npm/node_modules/request/node_modules/form-data/package.json b/deps/npm/node_modules/request/node_modules/form-data/package.json
index 482368481..8e5d32562 100644
--- a/deps/npm/node_modules/request/node_modules/form-data/package.json
+++ b/deps/npm/node_modules/request/node_modules/form-data/package.json
@@ -5,8 +5,8 @@
"url": "http://debuggable.com/"
},
"name": "form-data",
- "description": "A module to create readable `\"multipart/form-data\"` streams. Can be used to submit forms and file uploads to other web applications.",
- "version": "0.0.8",
+ "description": "A module to create readable \"multipart/form-data\" streams. Can be used to submit forms and file uploads to other web applications.",
+ "version": "0.1.2",
"repository": {
"type": "git",
"url": "git://github.com/felixge/node-form-data.git"
@@ -20,20 +20,27 @@
},
"dependencies": {
"combined-stream": "~0.0.4",
- "mime": "~1.2.2",
- "async": "~0.2.7"
+ "mime": "~1.2.11",
+ "async": "~0.2.9"
},
+ "licenses": [
+ {
+ "type": "MIT",
+ "url": "https://raw.github.com/felixge/node-form-data/master/License"
+ }
+ ],
"devDependencies": {
- "fake": "~0.2.1",
+ "fake": "~0.2.2",
"far": "~0.0.7",
- "formidable": "~1.0.13",
- "request": "~2.16.6"
+ "formidable": "~1.0.14",
+ "request": "~2.27.0"
},
- "readme": "# Form-Data [![Build Status](https://travis-ci.org/alexindigo/node-form-data.png?branch=master)](https://travis-ci.org/alexindigo/node-form-data)\n\nA module to create readable `\"multipart/form-data\"` streams. Can be used to\nsubmit forms and file uploads to other web applications.\n\nThe API of this module is inspired by the\n[XMLHttpRequest-2 FormData Interface][xhr2-fd].\n\n[xhr2-fd]: http://dev.w3.org/2006/webapi/XMLHttpRequest-2/Overview.html#the-formdata-interface\n\n## Install\n\n```\nnpm install form-data\n```\n\n## Usage\n\nIn this example we are constructing a form with 3 fields that contain a string,\na buffer and a file stream.\n\n``` javascript\nvar FormData = require('form-data');\nvar fs = require('fs');\n\nvar form = new FormData();\nform.append('my_field', 'my value');\nform.append('my_buffer', new Buffer(10));\nform.append('my_file', fs.createReadStream('/foo/bar.jpg'));\n```\n\nAlso you can use http-response stream:\n\n``` javascript\nvar FormData = require('form-data');\nvar http = require('http');\n\nvar form = new FormData();\n\nhttp.request('http://nodejs.org/images/logo.png', function(response) {\n form.append('my_field', 'my value');\n form.append('my_buffer', new Buffer(10));\n form.append('my_logo', response);\n});\n```\n\nOr @mikeal's request stream:\n\n``` javascript\nvar FormData = require('form-data');\nvar request = require('request');\n\nvar form = new FormData();\n\nform.append('my_field', 'my value');\nform.append('my_buffer', new Buffer(10));\nform.append('my_logo', request('http://nodejs.org/images/logo.png'));\n```\n\nIn order to submit this form to a web application, you can use node's http\nclient interface:\n\n``` javascript\nvar http = require('http');\n\nvar request = http.request({\n method: 'post',\n host: 'example.org',\n path: '/upload',\n headers: form.getHeaders()\n});\n\nform.pipe(request);\n\nrequest.on('response', function(res) {\n console.log(res.statusCode);\n});\n```\n\nOr if you would prefer the `'Content-Length'` header to be set for you:\n\n``` javascript\nform.submit('example.org/upload', function(err, res) {\n console.log(res.statusCode);\n});\n```\n\nTo use custom headers and pre-known length in parts:\n\n``` javascript\nvar CRLF = '\\r\\n';\nvar form = new FormData();\n\nvar options = {\n header: CRLF + '--' + form.getBoundary() + CRLF + 'X-Custom-Header: 123' + CRLF + CRLF,\n knownLength: 1\n};\n\nform.append('my_buffer', buffer, options);\n\nform.submit('http://example.com/', function(err, res) {\n if (err) throw err;\n console.log('Done');\n});\n```\n\nForm-Data can recognize and fetch all the required information from common types of streams (fs.readStream, http.response and mikeal's request), for some other types of streams you'd need to provide \"file\"-related information manually:\n\n``` javascript\nsomeModule.stream(function(err, stdout, stderr) {\n if (err) throw err;\n\n var form = new FormData();\n\n form.append('file', stdout, {\n filename: 'unicycle.jpg',\n contentType: 'image/jpg',\n knownLength: 19806\n });\n\n form.submit('http://example.com/', function(err, res) {\n if (err) throw err;\n console.log('Done');\n });\n});\n```\n\nFor edge cases, like POST request to URL with query string or to pass HTTP auth credentials, object can be passed to `form.submit()` as first parameter:\n\n``` javascript\nform.submit({\n host: 'example.com',\n path: '/probably.php?extra=params',\n auth: 'username:password'\n}, function(err, res) {\n console.log(res.statusCode);\n});\n```\n\n## TODO\n\n- Add new streams (0.10) support and try really hard not to break it for 0.8.x.\n\n## License\n\nForm-Data is licensed under the MIT license.\n",
+ "readme": "# Form-Data [![Build Status](https://travis-ci.org/felixge/node-form-data.png?branch=master)](https://travis-ci.org/felixge/node-form-data) [![Dependency Status](https://gemnasium.com/felixge/node-form-data.png)](https://gemnasium.com/felixge/node-form-data)\n\nA module to create readable ```\"multipart/form-data\"``` streams. Can be used to submit forms and file uploads to other web applications.\n\nThe API of this module is inspired by the [XMLHttpRequest-2 FormData Interface][xhr2-fd].\n\n[xhr2-fd]: http://dev.w3.org/2006/webapi/XMLHttpRequest-2/Overview.html#the-formdata-interface\n[streams2-thing]: http://nodejs.org/api/stream.html#stream_compatibility_with_older_node_versions\n\n## Install\n\n```\nnpm install form-data\n```\n\n## Usage\n\nIn this example we are constructing a form with 3 fields that contain a string,\na buffer and a file stream.\n\n``` javascript\nvar FormData = require('form-data');\nvar fs = require('fs');\n\nvar form = new FormData();\nform.append('my_field', 'my value');\nform.append('my_buffer', new Buffer(10));\nform.append('my_file', fs.createReadStream('/foo/bar.jpg'));\n```\n\nAlso you can use http-response stream:\n\n``` javascript\nvar FormData = require('form-data');\nvar http = require('http');\n\nvar form = new FormData();\n\nhttp.request('http://nodejs.org/images/logo.png', function(response) {\n form.append('my_field', 'my value');\n form.append('my_buffer', new Buffer(10));\n form.append('my_logo', response);\n});\n```\n\nOr @mikeal's request stream:\n\n``` javascript\nvar FormData = require('form-data');\nvar request = require('request');\n\nvar form = new FormData();\n\nform.append('my_field', 'my value');\nform.append('my_buffer', new Buffer(10));\nform.append('my_logo', request('http://nodejs.org/images/logo.png'));\n```\n\nIn order to submit this form to a web application, call ```submit(url, [callback])``` method:\n\n``` javascript\nform.submit('http://example.org/', function(err, res) {\n // res – response object (http.IncomingMessage) //\n res.resume(); // for node-0.10.x\n});\n\n```\n\nFor more advanced request manipulations ```submit()``` method returns ```http.ClientRequest``` object, or you can choose from one of the alternative submission methods.\n\n### Alternative submission methods\n\nYou can use node's http client interface:\n\n``` javascript\nvar http = require('http');\n\nvar request = http.request({\n method: 'post',\n host: 'example.org',\n path: '/upload',\n headers: form.getHeaders()\n});\n\nform.pipe(request);\n\nrequest.on('response', function(res) {\n console.log(res.statusCode);\n});\n```\n\nOr if you would prefer the `'Content-Length'` header to be set for you:\n\n``` javascript\nform.submit('example.org/upload', function(err, res) {\n console.log(res.statusCode);\n});\n```\n\nTo use custom headers and pre-known length in parts:\n\n``` javascript\nvar CRLF = '\\r\\n';\nvar form = new FormData();\n\nvar options = {\n header: CRLF + '--' + form.getBoundary() + CRLF + 'X-Custom-Header: 123' + CRLF + CRLF,\n knownLength: 1\n};\n\nform.append('my_buffer', buffer, options);\n\nform.submit('http://example.com/', function(err, res) {\n if (err) throw err;\n console.log('Done');\n});\n```\n\nForm-Data can recognize and fetch all the required information from common types of streams (```fs.readStream```, ```http.response``` and ```mikeal's request```), for some other types of streams you'd need to provide \"file\"-related information manually:\n\n``` javascript\nsomeModule.stream(function(err, stdout, stderr) {\n if (err) throw err;\n\n var form = new FormData();\n\n form.append('file', stdout, {\n filename: 'unicycle.jpg',\n contentType: 'image/jpg',\n knownLength: 19806\n });\n\n form.submit('http://example.com/', function(err, res) {\n if (err) throw err;\n console.log('Done');\n });\n});\n```\n\nFor edge cases, like POST request to URL with query string or to pass HTTP auth credentials, object can be passed to `form.submit()` as first parameter:\n\n``` javascript\nform.submit({\n host: 'example.com',\n path: '/probably.php?extra=params',\n auth: 'username:password'\n}, function(err, res) {\n console.log(res.statusCode);\n});\n```\n\n## Notes\n\n- ```getLengthSync()``` method DOESN'T calculate length for streams, use ```knownLength``` options as workaround.\n- If it feels like FormData hangs after submit and you're on ```node-0.10```, please check [Compatibility with Older Node Versions][streams2-thing]\n\n## TODO\n\n- Add new streams (0.10) support and try really hard not to break it for 0.8.x.\n\n## License\n\nForm-Data is licensed under the MIT license.\n",
"readmeFilename": "Readme.md",
"bugs": {
"url": "https://github.com/felixge/node-form-data/issues"
},
- "_id": "form-data@0.0.8",
- "_from": "form-data@0.0.8"
+ "homepage": "https://github.com/felixge/node-form-data",
+ "_id": "form-data@0.1.2",
+ "_from": "form-data@~0.1.0"
}
diff --git a/deps/npm/node_modules/request/node_modules/form-data/sftp-config.json b/deps/npm/node_modules/request/node_modules/form-data/sftp-config.json
deleted file mode 100644
index ad9ed2623..000000000
--- a/deps/npm/node_modules/request/node_modules/form-data/sftp-config.json
+++ /dev/null
@@ -1,43 +0,0 @@
-{
- // The tab key will cycle through the settings when first created
- // Visit http://wbond.net/sublime_packages/sftp/settings for help
-
- // sftp, ftp or ftps
- "type": "sftp",
-
- "save_before_upload": true,
- "upload_on_save": true,
- "sync_down_on_open": false,
- "sync_skip_deletes": false,
- "confirm_downloads": false,
- "confirm_sync": true,
- "confirm_overwrite_newer": false,
-
- "host": "amber.exposeapp.com",
- "user": "alex",
- //"password": "password",
- //"port": "22",
-
- "remote_path": "/var/www/_playground/form-data/",
- "ignore_regexes": [
- "node_modules",
- "\\.sublime-(project|workspace)", "sftp-config(-alt\\d?)?\\.json",
- "sftp-settings\\.json", "/venv/", "\\.svn", "\\.hg", "\\.git",
- "\\.bzr", "_darcs", "CVS", "\\.DS_Store", "Thumbs\\.db", "desktop\\.ini"
- ],
- //"file_permissions": "664",
- //"dir_permissions": "775",
-
- //"extra_list_connections": 0,
-
- "connect_timeout": 30,
- //"keepalive": 120,
- //"ftp_passive_mode": true,
- //"ssh_key_file": "~/.ssh/id_rsa",
- //"sftp_flags": ["-F", "/path/to/ssh_config"],
-
- //"preserve_modification_times": false,
- //"remote_time_offset_in_hours": 0,
- //"remote_encoding": "utf-8",
- //"remote_locale": "C",
-}
diff --git a/deps/npm/node_modules/request/node_modules/form-data/test/common.js b/deps/npm/node_modules/request/node_modules/form-data/test/common.js
deleted file mode 100644
index 8a26482e1..000000000
--- a/deps/npm/node_modules/request/node_modules/form-data/test/common.js
+++ /dev/null
@@ -1,14 +0,0 @@
-var common = module.exports;
-var path = require('path');
-
-var rootDir = path.join(__dirname, '..');
-common.dir = {
- lib: rootDir + '/lib',
- fixture: rootDir + '/test/fixture',
- tmp: rootDir + '/test/tmp',
-};
-
-common.assert = require('assert');
-common.fake = require('fake');
-
-common.port = 8432;
diff --git a/deps/npm/node_modules/request/node_modules/form-data/test/fixture/bacon.txt b/deps/npm/node_modules/request/node_modules/form-data/test/fixture/bacon.txt
deleted file mode 100644
index 9804bbdc6..000000000
--- a/deps/npm/node_modules/request/node_modules/form-data/test/fixture/bacon.txt
+++ /dev/null
@@ -1 +0,0 @@
-Bacon is delicious.
diff --git a/deps/npm/node_modules/request/node_modules/form-data/test/fixture/unicycle.jpg b/deps/npm/node_modules/request/node_modules/form-data/test/fixture/unicycle.jpg
deleted file mode 100644
index 7cea4dd71..000000000
--- a/deps/npm/node_modules/request/node_modules/form-data/test/fixture/unicycle.jpg
+++ /dev/null
Binary files differ
diff --git a/deps/npm/node_modules/request/node_modules/form-data/test/integration/test-custom-filename.js b/deps/npm/node_modules/request/node_modules/form-data/test/integration/test-custom-filename.js
deleted file mode 100644
index 05f3fc036..000000000
--- a/deps/npm/node_modules/request/node_modules/form-data/test/integration/test-custom-filename.js
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
-test custom filename and content-type:
-re: https://github.com/felixge/node-form-data/issues/29
-*/
-
-var common = require('../common');
-var assert = common.assert;
-var http = require('http');
-var fs = require('fs');
-
-var FormData = require(common.dir.lib + '/form_data');
-var IncomingForm = require('formidable').IncomingForm;
-
-var options = {
- filename: 'test.png',
- contentType: 'image/gif'
-};
-
-var server = http.createServer(function(req, res) {
-
- var form = new IncomingForm({uploadDir: common.dir.tmp});
-
- form.parse(req);
-
- form
- .on('file', function(name, file) {
- assert.strictEqual(name, 'my_file');
- assert.strictEqual(file.name, options.filename);
- assert.strictEqual(file.type, options.contentType);
- })
- .on('end', function() {
- res.writeHead(200);
- res.end('done');
- });
-});
-
-
-server.listen(common.port, function() {
- var form = new FormData();
-
- form.append('my_file', fs.createReadStream(common.dir.fixture + '/unicycle.jpg'), options);
-
- form.submit('http://localhost:' + common.port + '/', function(err, res) {
- if (err) {
- throw err;
- }
-
- assert.strictEqual(res.statusCode, 200);
- server.close();
- });
-
-});
diff --git a/deps/npm/node_modules/request/node_modules/form-data/test/integration/test-custom-headers.js b/deps/npm/node_modules/request/node_modules/form-data/test/integration/test-custom-headers.js
deleted file mode 100644
index 1c9b6adad..000000000
--- a/deps/npm/node_modules/request/node_modules/form-data/test/integration/test-custom-headers.js
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
-test custom headers, added in pull request:
-https://github.com/felixge/node-form-data/pull/17
-*/
-
-var common = require('../common');
-var assert = common.assert;
-var http = require('http');
-
-var FormData = require(common.dir.lib + '/form_data');
-
-var CRLF = '\r\n';
-
-var testHeader = 'X-Test-Fake: 123';
-
-var expectedLength;
-
-
-var server = http.createServer(function(req, res) {
- var data = '';
- req.setEncoding('utf8');
-
- req.on('data', function(d) {
- data += d;
- });
-
- req.on('end', function() {
- assert.ok( data.indexOf( testHeader ) != -1 );
-
- // content-length would be 1000+ w/actual buffer size,
- // but smaller w/overridden size.
- assert.ok( typeof req.headers['content-length'] !== 'undefined' );
- assert.equal(req.headers['content-length'], expectedLength);
-
- res.writeHead(200);
- res.end('done');
- });
-});
-
-
-server.listen(common.port, function() {
- var form = new FormData();
-
- var options = {
- header:
- CRLF + '--' + form.getBoundary() + CRLF +
- testHeader +
- CRLF + CRLF,
-
- // override content-length,
- // much lower than actual buffer size (1000)
- knownLength: 1
- };
-
- var bufferData = [];
- for (var z = 0; z < 1000; z++) {
- bufferData.push(1);
- }
- var buffer = new Buffer(bufferData);
-
- form.append('my_buffer', buffer, options);
-
- // (available to req handler)
- expectedLength = form._lastBoundary().length + form._overheadLength + options.knownLength;
-
- form.submit('http://localhost:' + common.port + '/', function(err, res) {
- if (err) {
- throw err;
- }
-
- assert.strictEqual(res.statusCode, 200);
- server.close();
- });
-
-});
diff --git a/deps/npm/node_modules/request/node_modules/form-data/test/integration/test-form-get-length.js b/deps/npm/node_modules/request/node_modules/form-data/test/integration/test-form-get-length.js
deleted file mode 100644
index 44d3b4dc2..000000000
--- a/deps/npm/node_modules/request/node_modules/form-data/test/integration/test-form-get-length.js
+++ /dev/null
@@ -1,93 +0,0 @@
-var common = require('../common');
-var assert = common.assert;
-var FormData = require(common.dir.lib + '/form_data');
-var fake = require('fake').create();
-var fs = require('fs');
-
-(function testEmptyForm() {
- var form = new FormData();
- var callback = fake.callback(arguments.callee.name + '-getLength');
- var calls = fake.expectAnytime(callback, [null, 0]).calls;
-
- form.getLength(callback);
-
- // Make sure our response is async
- assert.strictEqual(calls.length, 0);
-})();
-
-(function testUtf8String() {
- var FIELD = 'my_field';
- var VALUE = 'May the € be with you';
-
- var form = new FormData();
- form.append(FIELD, VALUE);
- var callback = fake.callback(arguments.callee.name + '-getLength');
-
- var expectedLength =
- form._overheadLength +
- Buffer.byteLength(VALUE) +
- form._lastBoundary().length;
-
- fake.expectAnytime(callback, [null, expectedLength]);
- form.getLength(callback);
-})();
-
-(function testBuffer() {
- var FIELD = 'my_field';
- var VALUE = new Buffer(23);
-
- var form = new FormData();
- form.append(FIELD, VALUE);
- var callback = fake.callback(arguments.callee.name + '-getLength');
-
- var expectedLength =
- form._overheadLength +
- VALUE.length +
- form._lastBoundary().length;
-
- fake.expectAnytime(callback, [null, expectedLength]);
- form.getLength(callback);
-})();
-
-
-(function testStringFileBufferFile() {
- var fields = [
- {
- name: 'my_field',
- value: 'Test 123',
- },
- {
- name: 'my_image',
- value: fs.createReadStream(common.dir.fixture + '/unicycle.jpg'),
- },
- {
- name: 'my_buffer',
- value: new Buffer('123'),
- },
- {
- name: 'my_txt',
- value: fs.createReadStream(common.dir.fixture + '/bacon.txt'),
- },
- ];
-
- var form = new FormData();
- var expectedLength = 0;
-
- fields.forEach(function(field) {
- form.append(field.name, field.value);
- if (field.value.path) {
- var stat = fs.statSync(field.value.path);
- expectedLength += stat.size;
- } else {
- expectedLength += field.value.length;
- }
- });
-
- expectedLength += form._overheadLength + form._lastBoundary().length;
-
- var callback = fake.callback(arguments.callee.name + '-getLength');
- fake.expectAnytime(callback, [null, expectedLength]);
- form.getLength(callback);
-})();
-
-
diff --git a/deps/npm/node_modules/request/node_modules/form-data/test/integration/test-get-boundary.js b/deps/npm/node_modules/request/node_modules/form-data/test/integration/test-get-boundary.js
deleted file mode 100644
index 6dc2fb2bd..000000000
--- a/deps/npm/node_modules/request/node_modules/form-data/test/integration/test-get-boundary.js
+++ /dev/null
@@ -1,18 +0,0 @@
-var common = require('../common');
-var assert = common.assert;
-
-var FormData = require(common.dir.lib + '/form_data');
-
-(function testOneBoundaryPerForm() {
- var form = new FormData();
- var boundary = form.getBoundary();
-
- assert.equal(boundary, form.getBoundary());
- assert.equal(boundary.length, 50);
-})();
-
-(function testUniqueBoundaryPerForm() {
- var formA = new FormData();
- var formB = new FormData();
- assert.notEqual(formA.getBoundary(), formB.getBoundary());
-})();
diff --git a/deps/npm/node_modules/request/node_modules/form-data/test/integration/test-http-response.js b/deps/npm/node_modules/request/node_modules/form-data/test/integration/test-http-response.js
deleted file mode 100644
index bebb26b35..000000000
--- a/deps/npm/node_modules/request/node_modules/form-data/test/integration/test-http-response.js
+++ /dev/null
@@ -1,83 +0,0 @@
-var common = require('../common');
-var assert = common.assert;
-var http = require('http');
-var path = require('path');
-var mime = require('mime');
-var request = require('request');
-var parseUrl = require('url').parse;
-var fs = require('fs');
-var FormData = require(common.dir.lib + '/form_data');
-var IncomingForm = require('formidable').IncomingForm;
-
-var remoteFile = 'http://nodejs.org/images/logo.png';
-
-var FIELDS;
-var server;
-
-var parsedUrl = parseUrl(remoteFile)
- , options = {
- method: 'get',
- port: parsedUrl.port || 80,
- path: parsedUrl.pathname,
- host: parsedUrl.hostname
- }
- ;
-
-http.request(options, function(res) {
-
- FIELDS = [
- {name: 'my_field', value: 'my_value'},
- {name: 'my_buffer', value: new Buffer([1, 2, 3])},
- {name: 'remote_file', value: res }
- ];
-
- var form = new FormData();
- FIELDS.forEach(function(field) {
- form.append(field.name, field.value);
- });
-
- server.listen(common.port, function() {
-
- form.submit('http://localhost:' + common.port + '/', function(err, res) {
-
- if (err) {
- throw err;
- }
-
- assert.strictEqual(res.statusCode, 200);
- server.close();
- });
-
- });
-
-}).end();
-
-server = http.createServer(function(req, res) {
-
- var form = new IncomingForm({uploadDir: common.dir.tmp});
-
- form.parse(req);
-
- form
- .on('field', function(name, value) {
- var field = FIELDS.shift();
- assert.strictEqual(name, field.name);
- assert.strictEqual(value, field.value+'');
- })
- .on('file', function(name, file) {
- var field = FIELDS.shift();
- assert.strictEqual(name, field.name);
- // http response doesn't have path property
- assert.strictEqual(file.name, path.basename(field.value.path || remoteFile));
- assert.strictEqual(file.type, mime.lookup(file.name));
- })
- .on('end', function() {
- res.writeHead(200);
- res.end('done');
- });
-});
-
-
-process.on('exit', function() {
- assert.strictEqual(FIELDS.length, 0);
-});
diff --git a/deps/npm/node_modules/request/node_modules/form-data/test/integration/test-pipe.js b/deps/npm/node_modules/request/node_modules/form-data/test/integration/test-pipe.js
deleted file mode 100644
index a9264f92e..000000000
--- a/deps/npm/node_modules/request/node_modules/form-data/test/integration/test-pipe.js
+++ /dev/null
@@ -1,73 +0,0 @@
-var common = require('../common');
-var assert = common.assert;
-var http = require('http');
-var path = require('path');
-var mime = require('mime');
-var request = require('request');
-var fs = require('fs');
-var FormData = require(common.dir.lib + '/form_data');
-var IncomingForm = require('formidable').IncomingForm;
-
-var remoteFile = 'http://nodejs.org/images/logo.png';
-
-// wrap non simple values into function
-// just to deal with ReadStream "autostart"
-// Can't wait for 0.10
-var FIELDS = [
- {name: 'my_field', value: 'my_value'},
- {name: 'my_buffer', value: function(){ return new Buffer([1, 2, 3])} },
- {name: 'my_file', value: function(){ return fs.createReadStream(common.dir.fixture + '/unicycle.jpg')} },
- {name: 'remote_file', value: function(){ return request(remoteFile)} }
-];
-
-var server = http.createServer(function(req, res) {
-
- var form = new IncomingForm({uploadDir: common.dir.tmp});
-
- form.parse(req);
-
- form
- .on('field', function(name, value) {
- var field = FIELDS.shift();
- assert.strictEqual(name, field.name);
- assert.strictEqual(value, field.value+'');
- })
- .on('file', function(name, file) {
- var field = FIELDS.shift();
- assert.strictEqual(name, field.name);
- assert.strictEqual(file.name, path.basename(field.value.path));
- assert.strictEqual(file.type, mime.lookup(file.name));
- })
- .on('end', function() {
- res.writeHead(200);
- res.end('done');
- });
-});
-
-server.listen(common.port, function() {
- var form = new FormData();
- FIELDS.forEach(function(field) {
- // important to append ReadStreams within the same tick
- if ((typeof field.value == 'function')) {
- field.value = field.value();
- }
- form.append(field.name, field.value);
- });
-
- var request = http.request({
- method: 'post',
- port: common.port,
- path: '/upload',
- headers: form.getHeaders()
- });
-
- form.pipe(request);
-
- request.on('response', function(res) {
- server.close();
- });
-});
-
-process.on('exit', function() {
- assert.strictEqual(FIELDS.length, 0);
-});
diff --git a/deps/npm/node_modules/request/node_modules/form-data/test/integration/test-submit-custom.js b/deps/npm/node_modules/request/node_modules/form-data/test/integration/test-submit-custom.js
deleted file mode 100644
index f0d8f088c..000000000
--- a/deps/npm/node_modules/request/node_modules/form-data/test/integration/test-submit-custom.js
+++ /dev/null
@@ -1,77 +0,0 @@
-var common = require('../common');
-var assert = common.assert;
-var http = require('http');
-var path = require('path');
-var mime = require('mime');
-var request = require('request');
-var fs = require('fs');
-var FormData = require(common.dir.lib + '/form_data');
-var IncomingForm = require('formidable').IncomingForm;
-
-var remoteFile = 'http://nodejs.org/images/logo.png';
-
-// wrap non simple values into function
-// just to deal with ReadStream "autostart"
-// Can't wait for 0.10
-var FIELDS = [
- {name: 'my_field', value: 'my_value'},
- {name: 'my_buffer', value: function(){ return new Buffer([1, 2, 3])} },
- {name: 'my_file', value: function(){ return fs.createReadStream(common.dir.fixture + '/unicycle.jpg')} },
- {name: 'remote_file', value: function(){ return request(remoteFile)} }
-];
-
-var server = http.createServer(function(req, res) {
-
- var form = new IncomingForm({uploadDir: common.dir.tmp});
-
- form.parse(req);
-
- form
- .on('field', function(name, value) {
- var field = FIELDS.shift();
- assert.strictEqual(name, field.name);
- assert.strictEqual(value, field.value+'');
- })
- .on('file', function(name, file) {
- var field = FIELDS.shift();
- assert.strictEqual(name, field.name);
- assert.strictEqual(file.name, path.basename(field.value.path));
- assert.strictEqual(file.type, mime.lookup(file.name));
- })
- .on('end', function() {
- res.writeHead(200);
- res.end('done');
- });
-});
-
-server.listen(common.port, function() {
-
- var form = new FormData();
-
- FIELDS.forEach(function(field) {
- // important to append ReadStreams within the same tick
- if ((typeof field.value == 'function')) {
- field.value = field.value();
- }
- form.append(field.name, field.value);
- });
-
- // custom params object passed to submit
- form.submit({
- port: common.port,
- path: '/'
- }, function(err, res) {
-
- if (err) {
- throw err;
- }
-
- assert.strictEqual(res.statusCode, 200);
- server.close();
- });
-
-});
-
-process.on('exit', function() {
- assert.strictEqual(FIELDS.length, 0);
-});
diff --git a/deps/npm/node_modules/request/node_modules/form-data/test/integration/test-submit.js b/deps/npm/node_modules/request/node_modules/form-data/test/integration/test-submit.js
deleted file mode 100644
index f90cc7f28..000000000
--- a/deps/npm/node_modules/request/node_modules/form-data/test/integration/test-submit.js
+++ /dev/null
@@ -1,73 +0,0 @@
-var common = require('../common');
-var assert = common.assert;
-var http = require('http');
-var path = require('path');
-var mime = require('mime');
-var request = require('request');
-var fs = require('fs');
-var FormData = require(common.dir.lib + '/form_data');
-var IncomingForm = require('formidable').IncomingForm;
-
-var remoteFile = 'http://nodejs.org/images/logo.png';
-
-// wrap non simple values into function
-// just to deal with ReadStream "autostart"
-// Can't wait for 0.10
-var FIELDS = [
- {name: 'my_field', value: 'my_value'},
- {name: 'my_buffer', value: function(){ return new Buffer([1, 2, 3])} },
- {name: 'my_file', value: function(){ return fs.createReadStream(common.dir.fixture + '/unicycle.jpg')} },
- {name: 'remote_file', value: function(){ return request(remoteFile)} }
-];
-
-var server = http.createServer(function(req, res) {
-
- var form = new IncomingForm({uploadDir: common.dir.tmp});
-
- form.parse(req);
-
- form
- .on('field', function(name, value) {
- var field = FIELDS.shift();
- assert.strictEqual(name, field.name);
- assert.strictEqual(value, field.value+'');
- })
- .on('file', function(name, file) {
- var field = FIELDS.shift();
- assert.strictEqual(name, field.name);
- assert.strictEqual(file.name, path.basename(field.value.path));
- assert.strictEqual(file.type, mime.lookup(file.name));
- })
- .on('end', function() {
- res.writeHead(200);
- res.end('done');
- });
-});
-
-server.listen(common.port, function() {
-
- var form = new FormData();
-
- FIELDS.forEach(function(field) {
- // important to append ReadStreams within the same tick
- if ((typeof field.value == 'function')) {
- field.value = field.value();
- }
- form.append(field.name, field.value);
- });
-
- form.submit('http://localhost:' + common.port + '/', function(err, res) {
-
- if (err) {
- throw err;
- }
-
- assert.strictEqual(res.statusCode, 200);
- server.close();
- });
-
-});
-
-process.on('exit', function() {
- assert.strictEqual(FIELDS.length, 0);
-});
diff --git a/deps/npm/node_modules/request/node_modules/form-data/test/run.js b/deps/npm/node_modules/request/node_modules/form-data/test/run.js
deleted file mode 100755
index 0bb8e8224..000000000
--- a/deps/npm/node_modules/request/node_modules/form-data/test/run.js
+++ /dev/null
@@ -1,7 +0,0 @@
-#!/usr/bin/env node
-var far = require('far').create();
-
-far.add(__dirname);
-far.include(/test-.*\.js$/);
-
-far.execute();
diff --git a/deps/npm/node_modules/request/node_modules/hawk/Makefile b/deps/npm/node_modules/request/node_modules/hawk/Makefile
index 9e7138c2a..5f339bf34 100755
--- a/deps/npm/node_modules/request/node_modules/hawk/Makefile
+++ b/deps/npm/node_modules/request/node_modules/hawk/Makefile
@@ -1,11 +1,10 @@
test:
- @./node_modules/.bin/lab
+ @node node_modules/lab/bin/lab
test-cov:
- @./node_modules/.bin/lab -r threshold -t 100
+ @node node_modules/lab/bin/lab -r threshold -t 100
test-cov-html:
- @./node_modules/.bin/lab -r html -o coverage.html
+ @node node_modules/lab/bin/lab -r html -o coverage.html
complexity:
- @./node_modules/.bin/cr -o complexity.md -f markdown lib
+ @node node_modules/complexity-report/src/cli.js -o complexity.md -f markdown lib
.PHONY: test test-cov test-cov-html complexity
-
diff --git a/deps/npm/node_modules/request/node_modules/hawk/README.md b/deps/npm/node_modules/request/node_modules/hawk/README.md
index 97458fb85..010bac6d0 100755
--- a/deps/npm/node_modules/request/node_modules/hawk/README.md
+++ b/deps/npm/node_modules/request/node_modules/hawk/README.md
@@ -1,620 +1,627 @@
-![hawk Logo](https://raw.github.com/hueniverse/hawk/master/images/hawk.png)
-
-<img align="right" src="https://raw.github.com/hueniverse/hawk/master/images/logo.png" /> **Hawk** is an HTTP authentication scheme using a message authentication code (MAC) algorithm to provide partial
-HTTP request cryptographic verification. For more complex use cases such as access delegation, see [Oz](https://github.com/hueniverse/oz).
-
-Current version: **0.13**
-
-[![Build Status](https://secure.travis-ci.org/hueniverse/hawk.png)](http://travis-ci.org/hueniverse/hawk)
-
-# Table of Content
-
-- [**Introduction**](#introduction)
- - [Replay Protection](#replay-protection)
- - [Usage Example](#usage-example)
- - [Protocol Example](#protocol-example)
- - [Payload Validation](#payload-validation)
- - [Response Payload Validation](#response-payload-validation)
- - [Browser Support and Considerations](#browser-support-and-considerations)
-<p></p>
-- [**Single URI Authorization**](#single-uri-authorization)
- - [Usage Example](#bewit-usage-example)
-<p></p>
-- [**Security Considerations**](#security-considerations)
- - [MAC Keys Transmission](#mac-keys-transmission)
- - [Confidentiality of Requests](#confidentiality-of-requests)
- - [Spoofing by Counterfeit Servers](#spoofing-by-counterfeit-servers)
- - [Plaintext Storage of Credentials](#plaintext-storage-of-credentials)
- - [Entropy of Keys](#entropy-of-keys)
- - [Coverage Limitations](#coverage-limitations)
- - [Future Time Manipulation](#future-time-manipulation)
- - [Client Clock Poisoning](#client-clock-poisoning)
- - [Bewit Limitations](#bewit-limitations)
-<p></p>
-- [**Frequently Asked Questions**](#frequently-asked-questions)
-<p></p>
-- [**Acknowledgements**](#acknowledgements)
-
-# Introduction
-
-**Hawk** is an HTTP authentication scheme providing mechanisms for making authenticated HTTP requests with
-partial cryptographic verification of the request and response, covering the HTTP method, request URI, host,
-and optionally the request payload.
-
-Similar to the HTTP [Digest access authentication schemes](http://www.ietf.org/rfc/rfc2617.txt), **Hawk** uses a set of
-client credentials which include an identifier (e.g. username) and key (e.g. password). Likewise, just as with the Digest scheme,
-the key is never included in authenticated requests. Instead, it is used to calculate a request MAC value which is
-included in its place.
-
-However, **Hawk** has several differences from Digest. In particular, while both use a nonce to limit the possibility of
-replay attacks, in **Hawk** the client generates the nonce and uses it in combination with a timestamp, leading to less
-"chattiness" (interaction with the server).
-
-Also unlike Digest, this scheme is not intended to protect the key itself (the password in Digest) because
-the client and server must both have access to the key material in the clear.
-
-The primary design goals of this scheme are to:
-* simplify and improve HTTP authentication for services that are unwilling or unable to deploy TLS for all resources,
-* secure credentials against leakage (e.g., when the client uses some form of dynamic configuration to determine where
- to send an authenticated request), and
-* avoid the exposure of credentials sent to a malicious server over an unauthenticated secure channel due to client
- failure to validate the server's identity as part of its TLS handshake.
-
-In addition, **Hawk** supports a method for granting third-parties temporary access to individual resources using
-a query parameter called _bewit_ (in falconry, a leather strap used to attach a tracking device to the leg of a hawk).
-
-The **Hawk** scheme requires the establishment of a shared symmetric key between the client and the server,
-which is beyond the scope of this module. Typically, the shared credentials are established via an initial
-TLS-protected phase or derived from some other shared confidential information available to both the client
-and the server.
-
-
-## Replay Protection
-
-Without replay protection, an attacker can use a compromised (but otherwise valid and authenticated) request more
-than once, gaining access to a protected resource. To mitigate this, clients include both a nonce and a timestamp when
-making requests. This gives the server enough information to prevent replay attacks.
-
-The nonce is generated by the client, and is a string unique across all requests with the same timestamp and
-key identifier combination.
-
-The timestamp enables the server to restrict the validity period of the credentials where requests occuring afterwards
-are rejected. It also removes the need for the server to retain an unbounded number of nonce values for future checks.
-By default, **Hawk** uses a time window of 1 minute to allow for time skew between the client and server (which in
-practice translates to a maximum of 2 minutes as the skew can be positive or negative).
-
-Using a timestamp requires the client's clock to be in sync with the server's clock. **Hawk** requires both the client
-clock and the server clock to use NTP to ensure synchronization. However, given the limitations of some client types
-(e.g. browsers) to deploy NTP, the server provides the client with its current time (in seconds precision) in response
-to a bad timestamp.
-
-There is no expectation that the client will adjust its system clock to match the server (in fact, this would be a
-potential attack vector). Instead, the client only uses the server's time to calculate an offset used only
-for communications with that particular server. The protocol rewards clients with synchronized clocks by reducing
-the number of round trips required to authenticate the first request.
-
-
-## Usage Example
-
-Server code:
-
-```javascript
-var Http = require('http');
-var Hawk = require('hawk');
-
-
-// Credentials lookup function
-
-var credentialsFunc = function (id, callback) {
-
- var credentials = {
- key: 'werxhqb98rpaxn39848xrunpaw3489ruxnpa98w4rxn',
- algorithm: 'sha256',
- user: 'Steve'
- };
-
- return callback(null, credentials);
-};
-
-// Create HTTP server
-
-var handler = function (req, res) {
-
- // Authenticate incoming request
-
- Hawk.server.authenticate(req, credentialsFunc, {}, function (err, credentials, artifacts) {
-
- // Prepare response
-
- var payload = (!err ? 'Hello ' + credentials.user + ' ' + artifacts.ext : 'Shoosh!');
- var headers = { 'Content-Type': 'text/plain' };
-
- // Generate Server-Authorization response header
-
- var header = Hawk.server.header(credentials, artifacts, { payload: payload, contentType: headers['Content-Type'] });
- headers['Server-Authorization'] = header;
-
- // Send the response back
-
- res.writeHead(!err ? 200 : 401, headers);
- res.end(payload);
- });
-};
-
-// Start server
-
-Http.createServer(handler).listen(8000, 'example.com');
-```
-
-Client code:
-
-```javascript
-var Request = require('request');
-var Hawk = require('hawk');
-
-
-// Client credentials
-
-var credentials = {
- id: 'dh37fgj492je',
- key: 'werxhqb98rpaxn39848xrunpaw3489ruxnpa98w4rxn',
- algorithm: 'sha256'
-}
-
-// Request options
-
-var requestOptions = {
- uri: 'http://example.com:8000/resource/1?b=1&a=2',
- method: 'GET',
- headers: {}
-};
-
-// Generate Authorization request header
-
-var header = Hawk.client.header('http://example.com:8000/resource/1?b=1&a=2', 'GET', { credentials: credentials, ext: 'some-app-data' });
-requestOptions.headers.Authorization = header.field;
-
-// Send authenticated request
-
-Request(requestOptions, function (error, response, body) {
-
- // Authenticate the server's response
-
- var isValid = Hawk.client.authenticate(response, credentials, header.artifacts, { payload: body });
-
- // Output results
-
- console.log(response.statusCode + ': ' + body + (isValid ? ' (valid)' : ' (invalid)'));
-});
-```
-
-**Hawk** utilized the [**SNTP**](https://github.com/hueniverse/sntp) module for time sync management. By default, the local
-machine time is used. To automatically retrieve and synchronice the clock within the application, use the SNTP 'start()' method.
-
-```javascript
-Hawk.sntp.start();
-```
-
-
-## Protocol Example
-
-The client attempts to access a protected resource without authentication, sending the following HTTP request to
-the resource server:
-
-```
-GET /resource/1?b=1&a=2 HTTP/1.1
-Host: example.com:8000
-```
-
-The resource server returns an authentication challenge.
-
-```
-HTTP/1.1 401 Unauthorized
-WWW-Authenticate: Hawk
-```
-
-The client has previously obtained a set of **Hawk** credentials for accessing resources on the "http://example.com/"
-server. The **Hawk** credentials issued to the client include the following attributes:
-
-* Key identifier: dh37fgj492je
-* Key: werxhqb98rpaxn39848xrunpaw3489ruxnpa98w4rxn
-* Algorithm: sha256
-
-The client generates the authentication header by calculating a timestamp (e.g. the number of seconds since January 1,
-1970 00:00:00 GMT), generating a nonce, and constructing the normalized request string (each value followed by a newline
-character):
-
-```
-hawk.1.header
-1353832234
-j4h3g2
-GET
-/resource?a=1&b=2
-example.com
-8000
-
-some-app-ext-data
-
-```
-
-The request MAC is calculated using HMAC with the specified hash algorithm "sha256" and the key over the normalized request string.
-The result is base64-encoded to produce the request MAC:
-
-```
-6R4rV5iE+NPoym+WwjeHzjAGXUtLNIxmo1vpMofpLAE=
-```
-
-The client includes the **Hawk** key identifier, timestamp, nonce, application specific data, and request MAC with the request using
-the HTTP `Authorization` request header field:
-
-```
-GET /resource/1?b=1&a=2 HTTP/1.1
-Host: example.com:8000
-Authorization: Hawk id="dh37fgj492je", ts="1353832234", nonce="j4h3g2", ext="some-app-ext-data", mac="6R4rV5iE+NPoym+WwjeHzjAGXUtLNIxmo1vpMofpLAE="
-```
-
-The server validates the request by calculating the request MAC again based on the request received and verifies the validity
-and scope of the **Hawk** credentials. If valid, the server responds with the requested resource.
-
-
-### Payload Validation
-
-**Hawk** provides optional payload validation. When generating the authentication header, the client calculates a payload hash
-using the specified hash algorithm. The hash is calculated over the concatenated value of (each followed by a newline character):
-* `hawk.1.payload`
-* the content-type in lowercase, without any parameters (e.g. `application/json`)
-* the request payload prior to any content encoding (the exact representation requirements should be specified by the server for payloads other than simple single-part ascii to ensure interoperability)
-
-For example:
-
-* Payload: `Thank you for flying Hawk`
-* Content Type: `text/plain`
-* Hash (sha256): `Yi9LfIIFRtBEPt74PVmbTF/xVAwPn7ub15ePICfgnuY=`
-
-Results in the following input to the payload hash function (newline terminated values):
-
-```
-hawk.1.payload
-text/plain
-Thank you for flying Hawk
-
-```
-
-Which produces the following hash value:
-
-```
-Yi9LfIIFRtBEPt74PVmbTF/xVAwPn7ub15ePICfgnuY=
-```
-
-The client constructs the normalized request string (newline terminated values):
-
-```
-hawk.1.header
-1353832234
-j4h3g2
-POST
-/resource?a=1&b=2
-example.com
-8000
-Yi9LfIIFRtBEPt74PVmbTF/xVAwPn7ub15ePICfgnuY=
-some-app-ext-data
-
-```
-
-Then calculates the request MAC and includes the **Hawk** key identifier, timestamp, nonce, payload hash, application specific data,
-and request MAC, with the request using the HTTP `Authorization` request header field:
-
-```
-POST /resource/1 HTTP/1.1
-Host: example.com:8000
-Authorization: Hawk id="dh37fgj492je", ts="1353832234", nonce="j4h3g2", hash="Yi9LfIIFRtBEPt74PVmbTF/xVAwPn7ub15ePICfgnuY=", ext="some-app-ext-data", mac="aSe1DERmZuRl3pI36/9BdZmnErTw3sNzOOAUlfeKjVw="
-```
-
-It is up to the server if and when it validates the payload for any given request, based solely on it's security policy
-and the nature of the data included.
-
-If the payload is available at the time of authentication, the server uses the hash value provided by the client to construct
-the normalized string and validates the MAC. If the MAC is valid, the server calculates the payload hash and compares the value
-with the provided payload hash in the header. In many cases, checking the MAC first is faster than calculating the payload hash.
-
-However, if the payload is not available at authentication time (e.g. too large to fit in memory, streamed elsewhere, or processed
-at a different stage in the application), the server may choose to defer payload validation for later by retaining the hash value
-provided by the client after validating the MAC.
-
-It is important to note that MAC validation does not mean the hash value provided by the client is valid, only that the value
-included in the header was not modified. Without calculating the payload hash on the server and comparing it to the value provided
-by the client, the payload may be modified by an attacker.
-
-
-## Response Payload Validation
-
-**Hawk** provides partial response payload validation. The server includes the `Server-Authorization` response header which enables the
-client to authenticate the response and ensure it is talking to the right server. **Hawk** defines the HTTP `Server-Authorization` header
-as a response header using the exact same syntax as the `Authorization` request header field.
-
-The header is contructed using the same process as the client's request header. The server uses the same credentials and other
-artifacts provided by the client to constructs the normalized request string. The `ext` and `hash` values are replaced with
-new values based on the server response. The rest as identical to those used by the client.
-
-The result MAC digest is included with the optional `hash` and `ext` values:
-
-```
-Server-Authorization: Hawk mac="XIJRsMl/4oL+nn+vKoeVZPdCHXB4yJkNnBbTbHFZUYE=", hash="f9cDF/TDm7TkYRLnGwRMfeDzT6LixQVLvrIKhh0vgmM=", ext="response-specific"
-```
-
-
-## Browser Support and Considerations
-
-A browser script is provided for including using a `<script>` tag in [lib/browser.js](/lib/browser.js).
-
-**Hawk** relies on the _Server-Authorization_ and _WWW-Authenticate_ headers in its response to communicate with the client.
-Therefore, in case of CORS requests, it is important to consider sending _Access-Control-Expose-Headers_ with the value
-_"WWW-Authenticate, Server-Authorization"_ on each response from your server. As explained in the
-[specifications](http://www.w3.org/TR/cors/#access-control-expose-headers-response-header), it will indicate that these headers
-can safely be accessed by the client (using getResponseHeader() on the XmlHttpRequest object). Otherwise you will be met with a
-["simple response header"](http://www.w3.org/TR/cors/#simple-response-header) which excludes these fields and would prevent the
-Hawk client from authenticating the requests.You can read more about the why and how in this
-[article](http://www.html5rocks.com/en/tutorials/cors/#toc-adding-cors-support-to-the-server)
-
-
-# Single URI Authorization
-
-There are cases in which limited and short-term access to a protected resource is granted to a third party which does not
-have access to the shared credentials. For example, displaying a protected image on a web page accessed by anyone. **Hawk**
-provides limited support for such URIs in the form of a _bewit_ - a URI query parameter appended to the request URI which contains
-the necessary credentials to authenticate the request.
-
-Because of the significant security risks involved in issuing such access, bewit usage is purposely limited only to GET requests
-and for a finite period of time. Both the client and server can issue bewit credentials, however, the server should not use the same
-credentials as the client to maintain clear traceability as to who issued which credentials.
-
-In order to simplify implementation, bewit credentials do not support single-use policy and can be replayed multiple times within
-the granted access timeframe.
-
-
-## Bewit Usage Example
-
-Server code:
-
-```javascript
-var Http = require('http');
-var Hawk = require('hawk');
-
-
-// Credentials lookup function
-
-var credentialsFunc = function (id, callback) {
-
- var credentials = {
- key: 'werxhqb98rpaxn39848xrunpaw3489ruxnpa98w4rxn',
- algorithm: 'sha256'
- };
-
- return callback(null, credentials);
-};
-
-// Create HTTP server
-
-var handler = function (req, res) {
-
- Hawk.uri.authenticate(req, credentialsFunc, {}, function (err, credentials, attributes) {
-
- res.writeHead(!err ? 200 : 401, { 'Content-Type': 'text/plain' });
- res.end(!err ? 'Access granted' : 'Shoosh!');
- });
-};
-
-Http.createServer(handler).listen(8000, 'example.com');
-```
-
-Bewit code generation:
-
-```javascript
-var Request = require('request');
-var Hawk = require('hawk');
-
-
-// Client credentials
-
-var credentials = {
- id: 'dh37fgj492je',
- key: 'werxhqb98rpaxn39848xrunpaw3489ruxnpa98w4rxn',
- algorithm: 'sha256'
-}
-
-// Generate bewit
-
-var duration = 60 * 5; // 5 Minutes
-var bewit = Hawk.uri.getBewit('http://example.com:8080/resource/1?b=1&a=2', { credentials: credentials, ttlSec: duration, ext: 'some-app-data' });
-var uri = 'http://example.com:8000/resource/1?b=1&a=2' + '&bewit=' + bewit;
-```
-
-
-# Security Considerations
-
-The greatest sources of security risks are usually found not in **Hawk** but in the policies and procedures surrounding its use.
-Implementers are strongly encouraged to assess how this module addresses their security requirements. This section includes
-an incomplete list of security considerations that must be reviewed and understood before deploying **Hawk** on the server.
-Many of the protections provided in **Hawk** depends on whether and how they are used.
-
-### MAC Keys Transmission
-
-**Hawk** does not provide any mechanism for obtaining or transmitting the set of shared credentials required. Any mechanism used
-to obtain **Hawk** credentials must ensure that these transmissions are protected using transport-layer mechanisms such as TLS.
-
-### Confidentiality of Requests
-
-While **Hawk** provides a mechanism for verifying the integrity of HTTP requests, it provides no guarantee of request
-confidentiality. Unless other precautions are taken, eavesdroppers will have full access to the request content. Servers should
-carefully consider the types of data likely to be sent as part of such requests, and employ transport-layer security mechanisms
-to protect sensitive resources.
-
-### Spoofing by Counterfeit Servers
-
-**Hawk** provides limited verification of the server authenticity. When receiving a response back from the server, the server
-may choose to include a response `Server-Authorization` header which the client can use to verify the response. However, it is up to
-the server to determine when such measure is included, to up to the client to enforce that policy.
-
-A hostile party could take advantage of this by intercepting the client's requests and returning misleading or otherwise
-incorrect responses. Service providers should consider such attacks when developing services using this protocol, and should
-require transport-layer security for any requests where the authenticity of the resource server or of server responses is an issue.
-
-### Plaintext Storage of Credentials
-
-The **Hawk** key functions the same way passwords do in traditional authentication systems. In order to compute the request MAC,
-the server must have access to the key in plaintext form. This is in contrast, for example, to modern operating systems, which
-store only a one-way hash of user credentials.
-
-If an attacker were to gain access to these keys - or worse, to the server's database of all such keys - he or she would be able
-to perform any action on behalf of any resource owner. Accordingly, it is critical that servers protect these keys from unauthorized
-access.
-
-### Entropy of Keys
-
-Unless a transport-layer security protocol is used, eavesdroppers will have full access to authenticated requests and request
-MAC values, and will thus be able to mount offline brute-force attacks to recover the key used. Servers should be careful to
-assign keys which are long enough, and random enough, to resist such attacks for at least the length of time that the **Hawk**
-credentials are valid.
-
-For example, if the credentials are valid for two weeks, servers should ensure that it is not possible to mount a brute force
-attack that recovers the key in less than two weeks. Of course, servers are urged to err on the side of caution, and use the
-longest key reasonable.
-
-It is equally important that the pseudo-random number generator (PRNG) used to generate these keys be of sufficiently high
-quality. Many PRNG implementations generate number sequences that may appear to be random, but which nevertheless exhibit
-patterns or other weaknesses which make cryptanalysis or brute force attacks easier. Implementers should be careful to use
-cryptographically secure PRNGs to avoid these problems.
-
-### Coverage Limitations
-
-The request MAC only covers the HTTP `Host` header and optionally the `Content-Type` header. It does not cover any other headers
-which can often affect how the request body is interpreted by the server. If the server behavior is influenced by the presence
-or value of such headers, an attacker can manipulate the request headers without being detected. Implementers should use the
-`ext` feature to pass application-specific information via the `Authorization` header which is protected by the request MAC.
-
-The response authentication, when performed, only covers the response payload, content-type, and the request information
-provided by the client in it's request (method, resource, timestamp, nonce, etc.). It does not cover the HTTP status code or
-any other response header field (e.g. Location) which can affect the client's behaviour.
-
-### Future Time Manipulation
-
-The protocol relies on a clock sync between the client and server. To accomplish this, the server informs the client of its
-current time when an invalid timestamp is received.
-
-If an attacker is able to manipulate this information and cause the client to use an incorrect time, it would be able to cause
-the client to generate authenticated requests using time in the future. Such requests will fail when sent by the client, and will
-not likely leave a trace on the server (given the common implementation of nonce, if at all enforced). The attacker will then
-be able to replay the request at the correct time without detection.
-
-The client must only use the time information provided by the server if:
-* it was delivered over a TLS connection and the server identity has been verified, or
-* the `tsm` MAC digest calculated using the same client credentials over the timestamp has been verified.
-
-### Client Clock Poisoning
-
-When receiving a request with a bad timestamp, the server provides the client with its current time. The client must never use
-the time received from the server to adjust its own clock, and must only use it to calculate an offset for communicating with
-that particular server.
-
-### Bewit Limitations
-
-Special care must be taken when issuing bewit credentials to third parties. Bewit credentials are valid until expiration and cannot
-be revoked or limited without using other means. Whatever resource they grant access to will be completely exposed to anyone with
-access to the bewit credentials which act as bearer credentials for that particular resource. While bewit usage is limited to GET
-requests only and therefore cannot be used to perform transactions or change server state, it can still be used to expose private
-and sensitive information.
-
-
-# Frequently Asked Questions
-
-### Where is the protocol specification?
-
-If you are looking for some prose explaining how all this works, **this is it**. **Hawk** is being developed as an open source
-project instead of a standard. In other words, the [code](/hueniverse/hawk/tree/master/lib) is the specification. Not sure about
-something? Open an issue!
-
-### Is it done?
-
-At if version 0.10.0, **Hawk** is feature-complete. However, until this module reaches version 1.0.0 it is considered experimental
-and is likely to change. This also means your feedback and contribution are very welcome. Feel free to open issues with questions
-and suggestions.
-
-### Where can I find **Hawk** implementations in other languages?
-
-**Hawk**'s only reference implementation is provided in JavaScript as a node.js module. However, others are actively porting it to other
-platforms. There is already a [PHP](https://github.com/alexbilbie/PHP-Hawk),
-[.NET](https://github.com/pcibraro/hawknet), and [JAVA](https://github.com/wealdtech/hawk) libraries available. The full list
-is maintained [here](https://github.com/hueniverse/hawk/issues?labels=port). Please add an issue if you are working on another
-port. A cross-platform test-suite is in the works.
-
-### Why isn't the algorithm part of the challenge or dynamically negotiated?
-
-The algorithm used is closely related to the key issued as different algorithms require different key sizes (and other
-requirements). While some keys can be used for multiple algorithm, the protocol is designed to closely bind the key and algorithm
-together as part of the issued credentials.
-
-### Why is Host and Content-Type the only headers covered by the request MAC?
-
-It is really hard to include other headers. Headers can be changed by proxies and other intermediaries and there is no
-well-established way to normalize them. Many platforms change the case of header field names and values. The only
-straight-forward solution is to include the headers in some blob (say, base64 encoded JSON) and include that with the request,
-an approach taken by JWT and other such formats. However, that design violates the HTTP header boundaries, repeats information,
-and introduces other security issues because firewalls will not be aware of these "hidden" headers. In addition, any information
-repeated must be compared to the duplicated information in the header and therefore only moves the problem elsewhere.
-
-### Why not just use HTTP Digest?
-
-Digest requires pre-negotiation to establish a nonce. This means you can't just make a request - you must first send
-a protocol handshake to the server. This pattern has become unacceptable for most web services, especially mobile
-where extra round-trip are costly.
-
-### Why bother with all this nonce and timestamp business?
-
-**Hawk** is an attempt to find a reasonable, practical compromise between security and usability. OAuth 1.0 got timestamp
-and nonces halfway right but failed when it came to scalability and consistent developer experience. **Hawk** addresses
-it by requiring the client to sync its clock, but provides it with tools to accomplish it.
-
-In general, replay protection is a matter of application-specific threat model. It is less of an issue on a TLS-protected
-system where the clients are implemented using best practices and are under the control of the server. Instead of dropping
-replay protection, **Hawk** offers a required time window and an optional nonce verification. Together, it provides developers
-with the ability to decide how to enforce their security policy without impacting the client's implementation.
-
-### What are `app` and `dlg` in the authorization header and normalized mac string?
-
-The original motivation for **Hawk** was to replace the OAuth 1.0 use cases. This included both a simple client-server mode which
-this module is specifically designed for, and a delegated access mode which is being developed separately in
-[Oz](https://github.com/hueniverse/oz). In addition to the **Hawk** use cases, Oz requires another attribute: the application id `app`.
-This provides binding between the credentials and the application in a way that prevents an attacker from tricking an application
-to use credentials issued to someone else. It also has an optional 'delegated-by' attribute `dlg` which is the application id of the
-application the credentials were directly issued to. The goal of these two additions is to allow Oz to utilize **Hawk** directly,
-but with the additional security of delegated credentials.
-
-### What is the purpose of the static strings used in each normalized MAC input?
-
-When calculating a hash or MAC, a static prefix (tag) is added. The prefix is used to prevent MAC values from being
-used or reused for a purpose other than what they were created for (i.e. prevents switching MAC values between a request,
-response, and a bewit use cases). It also protects against expliots created after a potential change in how the protocol
-creates the normalized string. For example, if a future version would switch the order of nonce and timestamp, it
-can create an exploit opportunity for cases where the nonce is similar in format to a timestamp.
-
-### Does **Hawk** have anything to do with OAuth?
-
-Short answer: no.
-
-**Hawk** was originally proposed as the OAuth MAC Token specification. However, the OAuth working group in its consistent
-incompetence failed to produce a final, usable solution to address one of the most popular use cases of OAuth 1.0 - using it
-to authenticate simple client-server transactions (i.e. two-legged). As you can guess, the OAuth working group is still hard
-at work to produce more garbage.
-
-**Hawk** provides a simple HTTP authentication scheme for making client-server requests. It does not address the OAuth use case
-of delegating access to a third party. If you are looking for an OAuth alternative, check out [Oz](https://github.com/hueniverse/oz).
-
-
-# Acknowledgements
-
-**Hawk** is a derivative work of the [HTTP MAC Authentication Scheme](http://tools.ietf.org/html/draft-hammer-oauth-v2-mac-token-05) proposal
-co-authored by Ben Adida, Adam Barth, and Eran Hammer, which in turn was based on the OAuth 1.0 community specification.
-
-Special thanks to Ben Laurie for his always insightful feedback and advice.
-
-The **Hawk** logo was created by [Chris Carrasco](http://chriscarrasco.com).
+![hawk Logo](https://raw.github.com/hueniverse/hawk/master/images/hawk.png)
+
+<img align="right" src="https://raw.github.com/hueniverse/hawk/master/images/logo.png" /> **Hawk** is an HTTP authentication scheme using a message authentication code (MAC) algorithm to provide partial
+HTTP request cryptographic verification. For more complex use cases such as access delegation, see [Oz](https://github.com/hueniverse/oz).
+
+Current version: **1.0**
+
+[![Build Status](https://secure.travis-ci.org/hueniverse/hawk.png)](http://travis-ci.org/hueniverse/hawk)
+
+# Table of Content
+
+- [**Introduction**](#introduction)
+ - [Replay Protection](#replay-protection)
+ - [Usage Example](#usage-example)
+ - [Protocol Example](#protocol-example)
+ - [Payload Validation](#payload-validation)
+ - [Response Payload Validation](#response-payload-validation)
+ - [Browser Support and Considerations](#browser-support-and-considerations)
+<p></p>
+- [**Single URI Authorization**](#single-uri-authorization)
+ - [Usage Example](#bewit-usage-example)
+<p></p>
+- [**Security Considerations**](#security-considerations)
+ - [MAC Keys Transmission](#mac-keys-transmission)
+ - [Confidentiality of Requests](#confidentiality-of-requests)
+ - [Spoofing by Counterfeit Servers](#spoofing-by-counterfeit-servers)
+ - [Plaintext Storage of Credentials](#plaintext-storage-of-credentials)
+ - [Entropy of Keys](#entropy-of-keys)
+ - [Coverage Limitations](#coverage-limitations)
+ - [Future Time Manipulation](#future-time-manipulation)
+ - [Client Clock Poisoning](#client-clock-poisoning)
+ - [Bewit Limitations](#bewit-limitations)
+ - [Host Header Forgery](#host-header-forgery)
+<p></p>
+- [**Frequently Asked Questions**](#frequently-asked-questions)
+<p></p>
+- [**Acknowledgements**](#acknowledgements)
+
+# Introduction
+
+**Hawk** is an HTTP authentication scheme providing mechanisms for making authenticated HTTP requests with
+partial cryptographic verification of the request and response, covering the HTTP method, request URI, host,
+and optionally the request payload.
+
+Similar to the HTTP [Digest access authentication schemes](http://www.ietf.org/rfc/rfc2617.txt), **Hawk** uses a set of
+client credentials which include an identifier (e.g. username) and key (e.g. password). Likewise, just as with the Digest scheme,
+the key is never included in authenticated requests. Instead, it is used to calculate a request MAC value which is
+included in its place.
+
+However, **Hawk** has several differences from Digest. In particular, while both use a nonce to limit the possibility of
+replay attacks, in **Hawk** the client generates the nonce and uses it in combination with a timestamp, leading to less
+"chattiness" (interaction with the server).
+
+Also unlike Digest, this scheme is not intended to protect the key itself (the password in Digest) because
+the client and server must both have access to the key material in the clear.
+
+The primary design goals of this scheme are to:
+* simplify and improve HTTP authentication for services that are unwilling or unable to deploy TLS for all resources,
+* secure credentials against leakage (e.g., when the client uses some form of dynamic configuration to determine where
+ to send an authenticated request), and
+* avoid the exposure of credentials sent to a malicious server over an unauthenticated secure channel due to client
+ failure to validate the server's identity as part of its TLS handshake.
+
+In addition, **Hawk** supports a method for granting third-parties temporary access to individual resources using
+a query parameter called _bewit_ (in falconry, a leather strap used to attach a tracking device to the leg of a hawk).
+
+The **Hawk** scheme requires the establishment of a shared symmetric key between the client and the server,
+which is beyond the scope of this module. Typically, the shared credentials are established via an initial
+TLS-protected phase or derived from some other shared confidential information available to both the client
+and the server.
+
+
+## Replay Protection
+
+Without replay protection, an attacker can use a compromised (but otherwise valid and authenticated) request more
+than once, gaining access to a protected resource. To mitigate this, clients include both a nonce and a timestamp when
+making requests. This gives the server enough information to prevent replay attacks.
+
+The nonce is generated by the client, and is a string unique across all requests with the same timestamp and
+key identifier combination.
+
+The timestamp enables the server to restrict the validity period of the credentials where requests occuring afterwards
+are rejected. It also removes the need for the server to retain an unbounded number of nonce values for future checks.
+By default, **Hawk** uses a time window of 1 minute to allow for time skew between the client and server (which in
+practice translates to a maximum of 2 minutes as the skew can be positive or negative).
+
+Using a timestamp requires the client's clock to be in sync with the server's clock. **Hawk** requires both the client
+clock and the server clock to use NTP to ensure synchronization. However, given the limitations of some client types
+(e.g. browsers) to deploy NTP, the server provides the client with its current time (in seconds precision) in response
+to a bad timestamp.
+
+There is no expectation that the client will adjust its system clock to match the server (in fact, this would be a
+potential attack vector). Instead, the client only uses the server's time to calculate an offset used only
+for communications with that particular server. The protocol rewards clients with synchronized clocks by reducing
+the number of round trips required to authenticate the first request.
+
+
+## Usage Example
+
+Server code:
+
+```javascript
+var Http = require('http');
+var Hawk = require('hawk');
+
+
+// Credentials lookup function
+
+var credentialsFunc = function (id, callback) {
+
+ var credentials = {
+ key: 'werxhqb98rpaxn39848xrunpaw3489ruxnpa98w4rxn',
+ algorithm: 'sha256',
+ user: 'Steve'
+ };
+
+ return callback(null, credentials);
+};
+
+// Create HTTP server
+
+var handler = function (req, res) {
+
+ // Authenticate incoming request
+
+ Hawk.server.authenticate(req, credentialsFunc, {}, function (err, credentials, artifacts) {
+
+ // Prepare response
+
+ var payload = (!err ? 'Hello ' + credentials.user + ' ' + artifacts.ext : 'Shoosh!');
+ var headers = { 'Content-Type': 'text/plain' };
+
+ // Generate Server-Authorization response header
+
+ var header = Hawk.server.header(credentials, artifacts, { payload: payload, contentType: headers['Content-Type'] });
+ headers['Server-Authorization'] = header;
+
+ // Send the response back
+
+ res.writeHead(!err ? 200 : 401, headers);
+ res.end(payload);
+ });
+};
+
+// Start server
+
+Http.createServer(handler).listen(8000, 'example.com');
+```
+
+Client code:
+
+```javascript
+var Request = require('request');
+var Hawk = require('hawk');
+
+
+// Client credentials
+
+var credentials = {
+ id: 'dh37fgj492je',
+ key: 'werxhqb98rpaxn39848xrunpaw3489ruxnpa98w4rxn',
+ algorithm: 'sha256'
+}
+
+// Request options
+
+var requestOptions = {
+ uri: 'http://example.com:8000/resource/1?b=1&a=2',
+ method: 'GET',
+ headers: {}
+};
+
+// Generate Authorization request header
+
+var header = Hawk.client.header('http://example.com:8000/resource/1?b=1&a=2', 'GET', { credentials: credentials, ext: 'some-app-data' });
+requestOptions.headers.Authorization = header.field;
+
+// Send authenticated request
+
+Request(requestOptions, function (error, response, body) {
+
+ // Authenticate the server's response
+
+ var isValid = Hawk.client.authenticate(response, credentials, header.artifacts, { payload: body });
+
+ // Output results
+
+ console.log(response.statusCode + ': ' + body + (isValid ? ' (valid)' : ' (invalid)'));
+});
+```
+
+**Hawk** utilized the [**SNTP**](https://github.com/hueniverse/sntp) module for time sync management. By default, the local
+machine time is used. To automatically retrieve and synchronice the clock within the application, use the SNTP 'start()' method.
+
+```javascript
+Hawk.sntp.start();
+```
+
+
+## Protocol Example
+
+The client attempts to access a protected resource without authentication, sending the following HTTP request to
+the resource server:
+
+```
+GET /resource/1?b=1&a=2 HTTP/1.1
+Host: example.com:8000
+```
+
+The resource server returns an authentication challenge.
+
+```
+HTTP/1.1 401 Unauthorized
+WWW-Authenticate: Hawk
+```
+
+The client has previously obtained a set of **Hawk** credentials for accessing resources on the "http://example.com/"
+server. The **Hawk** credentials issued to the client include the following attributes:
+
+* Key identifier: dh37fgj492je
+* Key: werxhqb98rpaxn39848xrunpaw3489ruxnpa98w4rxn
+* Algorithm: sha256
+
+The client generates the authentication header by calculating a timestamp (e.g. the number of seconds since January 1,
+1970 00:00:00 GMT), generating a nonce, and constructing the normalized request string (each value followed by a newline
+character):
+
+```
+hawk.1.header
+1353832234
+j4h3g2
+GET
+/resource/1?b=1&a=2
+example.com
+8000
+
+some-app-ext-data
+
+```
+
+The request MAC is calculated using HMAC with the specified hash algorithm "sha256" and the key over the normalized request string.
+The result is base64-encoded to produce the request MAC:
+
+```
+6R4rV5iE+NPoym+WwjeHzjAGXUtLNIxmo1vpMofpLAE=
+```
+
+The client includes the **Hawk** key identifier, timestamp, nonce, application specific data, and request MAC with the request using
+the HTTP `Authorization` request header field:
+
+```
+GET /resource/1?b=1&a=2 HTTP/1.1
+Host: example.com:8000
+Authorization: Hawk id="dh37fgj492je", ts="1353832234", nonce="j4h3g2", ext="some-app-ext-data", mac="6R4rV5iE+NPoym+WwjeHzjAGXUtLNIxmo1vpMofpLAE="
+```
+
+The server validates the request by calculating the request MAC again based on the request received and verifies the validity
+and scope of the **Hawk** credentials. If valid, the server responds with the requested resource.
+
+
+### Payload Validation
+
+**Hawk** provides optional payload validation. When generating the authentication header, the client calculates a payload hash
+using the specified hash algorithm. The hash is calculated over the concatenated value of (each followed by a newline character):
+* `hawk.1.payload`
+* the content-type in lowercase, without any parameters (e.g. `application/json`)
+* the request payload prior to any content encoding (the exact representation requirements should be specified by the server for payloads other than simple single-part ascii to ensure interoperability)
+
+For example:
+
+* Payload: `Thank you for flying Hawk`
+* Content Type: `text/plain`
+* Hash (sha256): `Yi9LfIIFRtBEPt74PVmbTF/xVAwPn7ub15ePICfgnuY=`
+
+Results in the following input to the payload hash function (newline terminated values):
+
+```
+hawk.1.payload
+text/plain
+Thank you for flying Hawk
+
+```
+
+Which produces the following hash value:
+
+```
+Yi9LfIIFRtBEPt74PVmbTF/xVAwPn7ub15ePICfgnuY=
+```
+
+The client constructs the normalized request string (newline terminated values):
+
+```
+hawk.1.header
+1353832234
+j4h3g2
+POST
+/resource/1?a=1&b=2
+example.com
+8000
+Yi9LfIIFRtBEPt74PVmbTF/xVAwPn7ub15ePICfgnuY=
+some-app-ext-data
+
+```
+
+Then calculates the request MAC and includes the **Hawk** key identifier, timestamp, nonce, payload hash, application specific data,
+and request MAC, with the request using the HTTP `Authorization` request header field:
+
+```
+POST /resource/1?a=1&b=2 HTTP/1.1
+Host: example.com:8000
+Authorization: Hawk id="dh37fgj492je", ts="1353832234", nonce="j4h3g2", hash="Yi9LfIIFRtBEPt74PVmbTF/xVAwPn7ub15ePICfgnuY=", ext="some-app-ext-data", mac="aSe1DERmZuRl3pI36/9BdZmnErTw3sNzOOAUlfeKjVw="
+```
+
+It is up to the server if and when it validates the payload for any given request, based solely on it's security policy
+and the nature of the data included.
+
+If the payload is available at the time of authentication, the server uses the hash value provided by the client to construct
+the normalized string and validates the MAC. If the MAC is valid, the server calculates the payload hash and compares the value
+with the provided payload hash in the header. In many cases, checking the MAC first is faster than calculating the payload hash.
+
+However, if the payload is not available at authentication time (e.g. too large to fit in memory, streamed elsewhere, or processed
+at a different stage in the application), the server may choose to defer payload validation for later by retaining the hash value
+provided by the client after validating the MAC.
+
+It is important to note that MAC validation does not mean the hash value provided by the client is valid, only that the value
+included in the header was not modified. Without calculating the payload hash on the server and comparing it to the value provided
+by the client, the payload may be modified by an attacker.
+
+
+## Response Payload Validation
+
+**Hawk** provides partial response payload validation. The server includes the `Server-Authorization` response header which enables the
+client to authenticate the response and ensure it is talking to the right server. **Hawk** defines the HTTP `Server-Authorization` header
+as a response header using the exact same syntax as the `Authorization` request header field.
+
+The header is contructed using the same process as the client's request header. The server uses the same credentials and other
+artifacts provided by the client to constructs the normalized request string. The `ext` and `hash` values are replaced with
+new values based on the server response. The rest as identical to those used by the client.
+
+The result MAC digest is included with the optional `hash` and `ext` values:
+
+```
+Server-Authorization: Hawk mac="XIJRsMl/4oL+nn+vKoeVZPdCHXB4yJkNnBbTbHFZUYE=", hash="f9cDF/TDm7TkYRLnGwRMfeDzT6LixQVLvrIKhh0vgmM=", ext="response-specific"
+```
+
+
+## Browser Support and Considerations
+
+A browser script is provided for including using a `<script>` tag in [lib/browser.js](/lib/browser.js).
+
+**Hawk** relies on the _Server-Authorization_ and _WWW-Authenticate_ headers in its response to communicate with the client.
+Therefore, in case of CORS requests, it is important to consider sending _Access-Control-Expose-Headers_ with the value
+_"WWW-Authenticate, Server-Authorization"_ on each response from your server. As explained in the
+[specifications](http://www.w3.org/TR/cors/#access-control-expose-headers-response-header), it will indicate that these headers
+can safely be accessed by the client (using getResponseHeader() on the XmlHttpRequest object). Otherwise you will be met with a
+["simple response header"](http://www.w3.org/TR/cors/#simple-response-header) which excludes these fields and would prevent the
+Hawk client from authenticating the requests.You can read more about the why and how in this
+[article](http://www.html5rocks.com/en/tutorials/cors/#toc-adding-cors-support-to-the-server)
+
+
+# Single URI Authorization
+
+There are cases in which limited and short-term access to a protected resource is granted to a third party which does not
+have access to the shared credentials. For example, displaying a protected image on a web page accessed by anyone. **Hawk**
+provides limited support for such URIs in the form of a _bewit_ - a URI query parameter appended to the request URI which contains
+the necessary credentials to authenticate the request.
+
+Because of the significant security risks involved in issuing such access, bewit usage is purposely limited only to GET requests
+and for a finite period of time. Both the client and server can issue bewit credentials, however, the server should not use the same
+credentials as the client to maintain clear traceability as to who issued which credentials.
+
+In order to simplify implementation, bewit credentials do not support single-use policy and can be replayed multiple times within
+the granted access timeframe.
+
+
+## Bewit Usage Example
+
+Server code:
+
+```javascript
+var Http = require('http');
+var Hawk = require('hawk');
+
+
+// Credentials lookup function
+
+var credentialsFunc = function (id, callback) {
+
+ var credentials = {
+ key: 'werxhqb98rpaxn39848xrunpaw3489ruxnpa98w4rxn',
+ algorithm: 'sha256'
+ };
+
+ return callback(null, credentials);
+};
+
+// Create HTTP server
+
+var handler = function (req, res) {
+
+ Hawk.uri.authenticate(req, credentialsFunc, {}, function (err, credentials, attributes) {
+
+ res.writeHead(!err ? 200 : 401, { 'Content-Type': 'text/plain' });
+ res.end(!err ? 'Access granted' : 'Shoosh!');
+ });
+};
+
+Http.createServer(handler).listen(8000, 'example.com');
+```
+
+Bewit code generation:
+
+```javascript
+var Request = require('request');
+var Hawk = require('hawk');
+
+
+// Client credentials
+
+var credentials = {
+ id: 'dh37fgj492je',
+ key: 'werxhqb98rpaxn39848xrunpaw3489ruxnpa98w4rxn',
+ algorithm: 'sha256'
+}
+
+// Generate bewit
+
+var duration = 60 * 5; // 5 Minutes
+var bewit = Hawk.uri.getBewit('http://example.com:8080/resource/1?b=1&a=2', { credentials: credentials, ttlSec: duration, ext: 'some-app-data' });
+var uri = 'http://example.com:8000/resource/1?b=1&a=2' + '&bewit=' + bewit;
+```
+
+
+# Security Considerations
+
+The greatest sources of security risks are usually found not in **Hawk** but in the policies and procedures surrounding its use.
+Implementers are strongly encouraged to assess how this module addresses their security requirements. This section includes
+an incomplete list of security considerations that must be reviewed and understood before deploying **Hawk** on the server.
+Many of the protections provided in **Hawk** depends on whether and how they are used.
+
+### MAC Keys Transmission
+
+**Hawk** does not provide any mechanism for obtaining or transmitting the set of shared credentials required. Any mechanism used
+to obtain **Hawk** credentials must ensure that these transmissions are protected using transport-layer mechanisms such as TLS.
+
+### Confidentiality of Requests
+
+While **Hawk** provides a mechanism for verifying the integrity of HTTP requests, it provides no guarantee of request
+confidentiality. Unless other precautions are taken, eavesdroppers will have full access to the request content. Servers should
+carefully consider the types of data likely to be sent as part of such requests, and employ transport-layer security mechanisms
+to protect sensitive resources.
+
+### Spoofing by Counterfeit Servers
+
+**Hawk** provides limited verification of the server authenticity. When receiving a response back from the server, the server
+may choose to include a response `Server-Authorization` header which the client can use to verify the response. However, it is up to
+the server to determine when such measure is included, to up to the client to enforce that policy.
+
+A hostile party could take advantage of this by intercepting the client's requests and returning misleading or otherwise
+incorrect responses. Service providers should consider such attacks when developing services using this protocol, and should
+require transport-layer security for any requests where the authenticity of the resource server or of server responses is an issue.
+
+### Plaintext Storage of Credentials
+
+The **Hawk** key functions the same way passwords do in traditional authentication systems. In order to compute the request MAC,
+the server must have access to the key in plaintext form. This is in contrast, for example, to modern operating systems, which
+store only a one-way hash of user credentials.
+
+If an attacker were to gain access to these keys - or worse, to the server's database of all such keys - he or she would be able
+to perform any action on behalf of any resource owner. Accordingly, it is critical that servers protect these keys from unauthorized
+access.
+
+### Entropy of Keys
+
+Unless a transport-layer security protocol is used, eavesdroppers will have full access to authenticated requests and request
+MAC values, and will thus be able to mount offline brute-force attacks to recover the key used. Servers should be careful to
+assign keys which are long enough, and random enough, to resist such attacks for at least the length of time that the **Hawk**
+credentials are valid.
+
+For example, if the credentials are valid for two weeks, servers should ensure that it is not possible to mount a brute force
+attack that recovers the key in less than two weeks. Of course, servers are urged to err on the side of caution, and use the
+longest key reasonable.
+
+It is equally important that the pseudo-random number generator (PRNG) used to generate these keys be of sufficiently high
+quality. Many PRNG implementations generate number sequences that may appear to be random, but which nevertheless exhibit
+patterns or other weaknesses which make cryptanalysis or brute force attacks easier. Implementers should be careful to use
+cryptographically secure PRNGs to avoid these problems.
+
+### Coverage Limitations
+
+The request MAC only covers the HTTP `Host` header and optionally the `Content-Type` header. It does not cover any other headers
+which can often affect how the request body is interpreted by the server. If the server behavior is influenced by the presence
+or value of such headers, an attacker can manipulate the request headers without being detected. Implementers should use the
+`ext` feature to pass application-specific information via the `Authorization` header which is protected by the request MAC.
+
+The response authentication, when performed, only covers the response payload, content-type, and the request information
+provided by the client in it's request (method, resource, timestamp, nonce, etc.). It does not cover the HTTP status code or
+any other response header field (e.g. Location) which can affect the client's behaviour.
+
+### Future Time Manipulation
+
+The protocol relies on a clock sync between the client and server. To accomplish this, the server informs the client of its
+current time when an invalid timestamp is received.
+
+If an attacker is able to manipulate this information and cause the client to use an incorrect time, it would be able to cause
+the client to generate authenticated requests using time in the future. Such requests will fail when sent by the client, and will
+not likely leave a trace on the server (given the common implementation of nonce, if at all enforced). The attacker will then
+be able to replay the request at the correct time without detection.
+
+The client must only use the time information provided by the server if:
+* it was delivered over a TLS connection and the server identity has been verified, or
+* the `tsm` MAC digest calculated using the same client credentials over the timestamp has been verified.
+
+### Client Clock Poisoning
+
+When receiving a request with a bad timestamp, the server provides the client with its current time. The client must never use
+the time received from the server to adjust its own clock, and must only use it to calculate an offset for communicating with
+that particular server.
+
+### Bewit Limitations
+
+Special care must be taken when issuing bewit credentials to third parties. Bewit credentials are valid until expiration and cannot
+be revoked or limited without using other means. Whatever resource they grant access to will be completely exposed to anyone with
+access to the bewit credentials which act as bearer credentials for that particular resource. While bewit usage is limited to GET
+requests only and therefore cannot be used to perform transactions or change server state, it can still be used to expose private
+and sensitive information.
+
+### Host Header Forgery
+
+Hawk validates the incoming request MAC against the incoming HTTP Host header. However, unless the optional `host` and `port`
+options are used with `server.authenticate()`, a malicous client can mint new host names pointing to the server's IP address and
+use that to craft an attack by sending a valid request that's meant for another hostname than the one used by the server. Server
+implementors must manually verify that the host header received matches their expectation (or use the options mentioned above).
+
+# Frequently Asked Questions
+
+### Where is the protocol specification?
+
+If you are looking for some prose explaining how all this works, **this is it**. **Hawk** is being developed as an open source
+project instead of a standard. In other words, the [code](/hueniverse/hawk/tree/master/lib) is the specification. Not sure about
+something? Open an issue!
+
+### Is it done?
+
+At if version 0.10.0, **Hawk** is feature-complete. However, until this module reaches version 1.0.0 it is considered experimental
+and is likely to change. This also means your feedback and contribution are very welcome. Feel free to open issues with questions
+and suggestions.
+
+### Where can I find **Hawk** implementations in other languages?
+
+**Hawk**'s only reference implementation is provided in JavaScript as a node.js module. However, others are actively porting it to other
+platforms. There is already a [PHP](https://github.com/alexbilbie/PHP-Hawk),
+[.NET](https://github.com/pcibraro/hawknet), and [JAVA](https://github.com/wealdtech/hawk) libraries available. The full list
+is maintained [here](https://github.com/hueniverse/hawk/issues?labels=port). Please add an issue if you are working on another
+port. A cross-platform test-suite is in the works.
+
+### Why isn't the algorithm part of the challenge or dynamically negotiated?
+
+The algorithm used is closely related to the key issued as different algorithms require different key sizes (and other
+requirements). While some keys can be used for multiple algorithm, the protocol is designed to closely bind the key and algorithm
+together as part of the issued credentials.
+
+### Why is Host and Content-Type the only headers covered by the request MAC?
+
+It is really hard to include other headers. Headers can be changed by proxies and other intermediaries and there is no
+well-established way to normalize them. Many platforms change the case of header field names and values. The only
+straight-forward solution is to include the headers in some blob (say, base64 encoded JSON) and include that with the request,
+an approach taken by JWT and other such formats. However, that design violates the HTTP header boundaries, repeats information,
+and introduces other security issues because firewalls will not be aware of these "hidden" headers. In addition, any information
+repeated must be compared to the duplicated information in the header and therefore only moves the problem elsewhere.
+
+### Why not just use HTTP Digest?
+
+Digest requires pre-negotiation to establish a nonce. This means you can't just make a request - you must first send
+a protocol handshake to the server. This pattern has become unacceptable for most web services, especially mobile
+where extra round-trip are costly.
+
+### Why bother with all this nonce and timestamp business?
+
+**Hawk** is an attempt to find a reasonable, practical compromise between security and usability. OAuth 1.0 got timestamp
+and nonces halfway right but failed when it came to scalability and consistent developer experience. **Hawk** addresses
+it by requiring the client to sync its clock, but provides it with tools to accomplish it.
+
+In general, replay protection is a matter of application-specific threat model. It is less of an issue on a TLS-protected
+system where the clients are implemented using best practices and are under the control of the server. Instead of dropping
+replay protection, **Hawk** offers a required time window and an optional nonce verification. Together, it provides developers
+with the ability to decide how to enforce their security policy without impacting the client's implementation.
+
+### What are `app` and `dlg` in the authorization header and normalized mac string?
+
+The original motivation for **Hawk** was to replace the OAuth 1.0 use cases. This included both a simple client-server mode which
+this module is specifically designed for, and a delegated access mode which is being developed separately in
+[Oz](https://github.com/hueniverse/oz). In addition to the **Hawk** use cases, Oz requires another attribute: the application id `app`.
+This provides binding between the credentials and the application in a way that prevents an attacker from tricking an application
+to use credentials issued to someone else. It also has an optional 'delegated-by' attribute `dlg` which is the application id of the
+application the credentials were directly issued to. The goal of these two additions is to allow Oz to utilize **Hawk** directly,
+but with the additional security of delegated credentials.
+
+### What is the purpose of the static strings used in each normalized MAC input?
+
+When calculating a hash or MAC, a static prefix (tag) is added. The prefix is used to prevent MAC values from being
+used or reused for a purpose other than what they were created for (i.e. prevents switching MAC values between a request,
+response, and a bewit use cases). It also protects against expliots created after a potential change in how the protocol
+creates the normalized string. For example, if a future version would switch the order of nonce and timestamp, it
+can create an exploit opportunity for cases where the nonce is similar in format to a timestamp.
+
+### Does **Hawk** have anything to do with OAuth?
+
+Short answer: no.
+
+**Hawk** was originally proposed as the OAuth MAC Token specification. However, the OAuth working group in its consistent
+incompetence failed to produce a final, usable solution to address one of the most popular use cases of OAuth 1.0 - using it
+to authenticate simple client-server transactions (i.e. two-legged). As you can guess, the OAuth working group is still hard
+at work to produce more garbage.
+
+**Hawk** provides a simple HTTP authentication scheme for making client-server requests. It does not address the OAuth use case
+of delegating access to a third party. If you are looking for an OAuth alternative, check out [Oz](https://github.com/hueniverse/oz).
+
+
+# Acknowledgements
+
+**Hawk** is a derivative work of the [HTTP MAC Authentication Scheme](http://tools.ietf.org/html/draft-hammer-oauth-v2-mac-token-05) proposal
+co-authored by Ben Adida, Adam Barth, and Eran Hammer, which in turn was based on the OAuth 1.0 community specification.
+
+Special thanks to Ben Laurie for his always insightful feedback and advice.
+
+The **Hawk** logo was created by [Chris Carrasco](http://chriscarrasco.com).
diff --git a/deps/npm/node_modules/request/node_modules/hawk/lib/browser.js b/deps/npm/node_modules/request/node_modules/hawk/lib/browser.js
index 6eeb2b15e..27494f23f 100755
--- a/deps/npm/node_modules/request/node_modules/hawk/lib/browser.js
+++ b/deps/npm/node_modules/request/node_modules/hawk/lib/browser.js
@@ -1,430 +1,485 @@
-/*
- HTTP Hawk Authentication Scheme
- Copyright (c) 2012-2013, Eran Hammer <eran@hueniverse.com>
- MIT Licensed
-*/
-
-
-// Declare namespace
-
-var hawk = {};
-
-
-// Export if used as a module
-
-if (typeof module !== "undefined" && module.exports) {
- module.exports = hawk;
-}
-
-// Generate an Authorization header for a given request
-
-/*
- uri: 'http://example.com/resource?a=b'
- method: HTTP verb (e.g. 'GET', 'POST')
- options: {
-
- // Required
-
- credentials: {
- id: 'dh37fgj492je',
- key: 'aoijedoaijsdlaksjdl',
- algorithm: 'sha256' // 'sha1', 'sha256'
- },
-
- // Optional
-
- ext: 'application-specific', // Application specific data sent via the ext attribute
- timestamp: Date.now() / 1000, // A pre-calculated timestamp in seconds
- nonce: '2334f34f', // A pre-generated nonce
- localtimeOffsetMsec: 400, // Time offset to sync with server time (ignored if timestamp provided)
- payload: '{"some":"payload"}', // UTF-8 encoded string for body hash generation (ignored if hash provided)
- contentType: 'application/json', // Payload content-type (ignored if hash provided)
- hash: 'U4MKKSmiVxk37JCCrAVIjV=', // Pre-calculated payload hash
- app: '24s23423f34dx', // Oz application id
- dlg: '234sz34tww3sd' // Oz delegated-by application id
- }
-*/
-
-hawk.client = {
-
- header: function (uri, method, options) {
-
- var result = {
- field: '',
- artifacts: {}
- };
-
- // Validate inputs
-
- if (!uri || (typeof uri !== 'string' && typeof uri !== 'object') ||
- !method || typeof method !== 'string' ||
- !options || typeof options !== 'object') {
-
- return result;
- }
-
- // Application time
-
- var timestamp = options.timestamp || Math.floor((hawk.utils.now() + (options.localtimeOffsetMsec || 0)) / 1000)
-
- // Validate credentials
-
- var credentials = options.credentials;
- if (!credentials ||
- !credentials.id ||
- !credentials.key ||
- !credentials.algorithm) {
-
- // Invalid credential object
- return result;
- }
-
- if (hawk.crypto.algorithms.indexOf(credentials.algorithm) === -1) {
- return result;
- }
-
- // Parse URI
-
- if (typeof uri === 'string') {
- uri = hawk.utils.parseUri(uri);
- }
-
- // Calculate signature
-
- var artifacts = {
- ts: timestamp,
- nonce: options.nonce || hawk.utils.randomString(6),
- method: method,
- resource: uri.relative,
- host: uri.hostname,
- port: uri.port,
- hash: options.hash,
- ext: options.ext,
- app: options.app,
- dlg: options.dlg
- };
-
- result.artifacts = artifacts;
-
- // Calculate payload hash
-
- if (!artifacts.hash &&
- options.hasOwnProperty('payload')) {
-
- artifacts.hash = hawk.crypto.calculatePayloadHash(options.payload, credentials.algorithm, options.contentType);
- }
-
- var mac = hawk.crypto.calculateMac('header', credentials, artifacts);
-
- // Construct header
-
- var hasExt = artifacts.ext !== null && artifacts.ext !== undefined && artifacts.ext !== ''; // Other falsey values allowed
- var header = 'Hawk id="' + credentials.id +
- '", ts="' + artifacts.ts +
- '", nonce="' + artifacts.nonce +
- (artifacts.hash ? '", hash="' + artifacts.hash : '') +
- (hasExt ? '", ext="' + hawk.utils.escapeHeaderAttribute(artifacts.ext) : '') +
- '", mac="' + mac + '"';
-
- if (artifacts.app) {
- header += ', app="' + artifacts.app +
- (artifacts.dlg ? '", dlg="' + artifacts.dlg : '') + '"';
- }
-
- result.field = header;
-
- return result;
- },
-
-
- // Validate server response
-
- /*
- request: object created via 'new XMLHttpRequest()' after response received
- artifacts: object recieved from header().artifacts
- options: {
- payload: optional payload received
- required: specifies if a Server-Authorization header is required. Defaults to 'false'
- }
- */
-
- authenticate: function (request, credentials, artifacts, options) {
-
- options = options || {};
-
- if (request.getResponseHeader('www-authenticate')) {
-
- // Parse HTTP WWW-Authenticate header
-
- var attributes = hawk.utils.parseAuthorizationHeader(request.getResponseHeader('www-authenticate'), ['ts', 'tsm', 'error']);
- if (!attributes) {
- return false;
- }
-
- if (attributes.ts) {
- var tsm = hawk.crypto.calculateTsMac(attributes.ts, credentials);
- if (tsm !== attributes.tsm) {
- return false;
- }
-
- hawk.utils.setNtpOffset(attributes.ts - Math.floor(Date.now() / 1000)); // Keep offset at 1 second precision
- }
- }
-
- // Parse HTTP Server-Authorization header
-
- if (!request.getResponseHeader('server-authorization') &&
- !options.required) {
-
- return true;
- }
-
- var attributes = hawk.utils.parseAuthorizationHeader(request.getResponseHeader('server-authorization'), ['mac', 'ext', 'hash']);
- if (!attributes) {
- return false;
- }
-
- var modArtifacts = {
- ts: artifacts.ts,
- nonce: artifacts.nonce,
- method: artifacts.method,
- resource: artifacts.resource,
- host: artifacts.host,
- port: artifacts.port,
- hash: attributes.hash,
- ext: attributes.ext,
- app: artifacts.app,
- dlg: artifacts.dlg
- };
-
- var mac = hawk.crypto.calculateMac('response', credentials, modArtifacts);
- if (mac !== attributes.mac) {
- return false;
- }
-
- if (!options.hasOwnProperty('payload')) {
- return true;
- }
-
- if (!attributes.hash) {
- return false;
- }
-
- var calculatedHash = hawk.crypto.calculatePayloadHash(options.payload, credentials.algorithm, request.getResponseHeader('content-type'));
- return (calculatedHash === attributes.hash);
- }
-};
-
-
-hawk.crypto = {
-
- headerVersion: '1',
-
- algorithms: ['sha1', 'sha256'],
-
- calculateMac: function (type, credentials, options) {
-
- var normalized = hawk.crypto.generateNormalizedString(type, options);
-
- var hmac = CryptoJS['Hmac' + credentials.algorithm.toUpperCase()](normalized, credentials.key);
- return hmac.toString(CryptoJS.enc.Base64);
- },
-
- generateNormalizedString: function (type, options) {
-
- var normalized = 'hawk.' + hawk.crypto.headerVersion + '.' + type + '\n' +
- options.ts + '\n' +
- options.nonce + '\n' +
- options.method.toUpperCase() + '\n' +
- options.resource + '\n' +
- options.host.toLowerCase() + '\n' +
- options.port + '\n' +
- (options.hash || '') + '\n';
-
- if (options.ext) {
- normalized += options.ext.replace('\\', '\\\\').replace('\n', '\\n');
- }
-
- normalized += '\n';
-
- if (options.app) {
- normalized += options.app + '\n' +
- (options.dlg || '') + '\n';
- }
-
- return normalized;
- },
-
- calculatePayloadHash: function (payload, algorithm, contentType) {
-
- var hash = CryptoJS.algo[algorithm.toUpperCase()].create();
- hash.update('hawk.' + hawk.crypto.headerVersion + '.payload\n');
- hash.update(hawk.utils.parseContentType(contentType) + '\n');
- hash.update(payload || '');
- hash.update('\n');
- return hash.finalize().toString(CryptoJS.enc.Base64);
- },
-
- calculateTsMac: function (ts, credentials) {
-
- var hash = CryptoJS['Hmac' + credentials.algorithm.toUpperCase()]('hawk.' + hawk.crypto.headerVersion + '.ts\n' + ts + '\n', credentials.key);
- return hash.toString(CryptoJS.enc.Base64);
- }
-};
-
-
-hawk.utils = {
-
- storage: { // localStorage compatible interface
- _cache: {},
- setItem: function (key, value) {
-
- hawk.utils.storage._cache[key] = value;
- },
- getItem: function (key) {
-
- return hawk.utils.storage._cache[key];
- }
- },
-
- setStorage: function (storage) {
-
- var ntpOffset = hawk.utils.getNtpOffset() || 0;
- hawk.utils.storage = storage;
- hawk.utils.setNtpOffset(ntpOffset);
- },
-
- setNtpOffset: function (offset) {
-
- hawk.utils.storage.setItem('hawk_ntp_offset', offset);
- },
-
- getNtpOffset: function () {
-
- return parseInt(hawk.utils.storage.getItem('hawk_ntp_offset') || '0', 10);
- },
-
- now: function () {
-
- return Date.now() + hawk.utils.getNtpOffset();
- },
-
- escapeHeaderAttribute: function (attribute) {
-
- return attribute.replace(/\\/g, '\\\\').replace(/\"/g, '\\"');
- },
-
- parseContentType: function (header) {
-
- if (!header) {
- return '';
- }
-
- return header.split(';')[0].trim().toLowerCase();
- },
-
- parseAuthorizationHeader: function (header, keys) {
-
- if (!header) {
- return null;
- }
-
- var headerParts = header.match(/^(\w+)(?:\s+(.*))?$/); // Header: scheme[ something]
- if (!headerParts) {
- return null;
- }
-
- var scheme = headerParts[1];
- if (scheme.toLowerCase() !== 'hawk') {
- return null;
- }
-
- var attributesString = headerParts[2];
- if (!attributesString) {
- return null;
- }
-
- var attributes = {};
- var verify = attributesString.replace(/(\w+)="([^"\\]*)"\s*(?:,\s*|$)/g, function ($0, $1, $2) {
-
- // Check valid attribute names
-
- if (keys.indexOf($1) === -1) {
- return;
- }
-
- // Allowed attribute value characters: !#$%&'()*+,-./:;<=>?@[]^_`{|}~ and space, a-z, A-Z, 0-9
-
- if ($2.match(/^[ \w\!#\$%&'\(\)\*\+,\-\.\/\:;<\=>\?@\[\]\^`\{\|\}~]+$/) === null) {
- return;
- }
-
- // Check for duplicates
-
- if (attributes.hasOwnProperty($1)) {
- return;
- }
-
- attributes[$1] = $2;
- return '';
- });
-
- if (verify !== '') {
- return null;
- }
-
- return attributes;
- },
-
- randomString: function (size) {
-
- var randomSource = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
- var len = randomSource.length;
-
- var result = [];
- for (var i = 0; i < size; ++i) {
- result[i] = randomSource[Math.floor(Math.random() * len)];
- }
-
- return result.join('');
- },
-
- parseUri: function (input) {
-
- // Based on: parseURI 1.2.2
- // http://blog.stevenlevithan.com/archives/parseuri
- // (c) Steven Levithan <stevenlevithan.com>
- // MIT License
-
- var keys = ['source', 'protocol', 'authority', 'userInfo', 'user', 'password', 'hostname', 'port', 'resource', 'relative', 'pathname', 'directory', 'file', 'query', 'fragment'];
-
- var uriRegex = /^(?:([^:\/?#]+):)?(?:\/\/((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?))?(((((?:[^?#\/]*\/)*)([^?#]*))(?:\?([^#]*))?)(?:#(.*))?)/;
- var uriByNumber = uriRegex.exec(input);
- var uri = {};
-
- var i = 15;
- while (i--) {
- uri[keys[i]] = uriByNumber[i] || '';
- }
-
- if (uri.port === null ||
- uri.port === '') {
-
- uri.port = (uri.protocol.toLowerCase() === 'http' ? '80' : (uri.protocol.toLowerCase() === 'https' ? '443' : ''));
- }
-
- return uri;
- }
-};
-
-
-// Based on: Crypto-JS v3.1.2
-// Copyright (c) 2009-2013, Jeff Mott. All rights reserved.
-// http://code.google.com/p/crypto-js/
-// http://code.google.com/p/crypto-js/wiki/License
-
-var CryptoJS=CryptoJS||function(h,r){var k={},l=k.lib={},n=function(){},f=l.Base={extend:function(a){n.prototype=this;var b=new n;a&&b.mixIn(a);b.hasOwnProperty("init")||(b.init=function(){b.$super.init.apply(this,arguments)});b.init.prototype=b;b.$super=this;return b},create:function(){var a=this.extend();a.init.apply(a,arguments);return a},init:function(){},mixIn:function(a){for(var b in a)a.hasOwnProperty(b)&&(this[b]=a[b]);a.hasOwnProperty("toString")&&(this.toString=a.toString)},clone:function(){return this.init.prototype.extend(this)}},j=l.WordArray=f.extend({init:function(a,b){a=this.words=a||[];this.sigBytes=b!=r?b:4*a.length},toString:function(a){return(a||s).stringify(this)},concat:function(a){var b=this.words,d=a.words,c=this.sigBytes;a=a.sigBytes;this.clamp();if(c%4)for(var e=0;e<a;e++)b[c+e>>>2]|=(d[e>>>2]>>>24-8*(e%4)&255)<<24-8*((c+e)%4);else if(65535<d.length)for(e=0;e<a;e+=4)b[c+e>>>2]=d[e>>>2];else b.push.apply(b,d);this.sigBytes+=a;return this},clamp:function(){var a=this.words,b=this.sigBytes;a[b>>>2]&=4294967295<<32-8*(b%4);a.length=h.ceil(b/4)},clone:function(){var a=f.clone.call(this);a.words=this.words.slice(0);return a},random:function(a){for(var b=[],d=0;d<a;d+=4)b.push(4294967296*h.random()|0);return new j.init(b,a)}}),m=k.enc={},s=m.Hex={stringify:function(a){var b=a.words;a=a.sigBytes;for(var d=[],c=0;c<a;c++){var e=b[c>>>2]>>>24-8*(c%4)&255;d.push((e>>>4).toString(16));d.push((e&15).toString(16))}return d.join("")},parse:function(a){for(var b=a.length,d=[],c=0;c<b;c+=2)d[c>>>3]|=parseInt(a.substr(c,2),16)<<24-4*(c%8);return new j.init(d,b/2)}},p=m.Latin1={stringify:function(a){var b=a.words;a=a.sigBytes;for(var d=[],c=0;c<a;c++)d.push(String.fromCharCode(b[c>>>2]>>>24-8*(c%4)&255));return d.join("")},parse:function(a){for(var b=a.length,d=[],c=0;c<b;c++)d[c>>>2]|=(a.charCodeAt(c)&255)<<24-8*(c%4);return new j.init(d,b)}},t=m.Utf8={stringify:function(a){try{return decodeURIComponent(escape(p.stringify(a)))}catch(b){throw Error("Malformed UTF-8 data");}},parse:function(a){return p.parse(unescape(encodeURIComponent(a)))}},q=l.BufferedBlockAlgorithm=f.extend({reset:function(){this._data=new j.init;this._nDataBytes=0},_append:function(a){"string"==typeof a&&(a=t.parse(a));this._data.concat(a);this._nDataBytes+=a.sigBytes},_process:function(a){var b=this._data,d=b.words,c=b.sigBytes,e=this.blockSize,f=c/(4*e),f=a?h.ceil(f):h.max((f|0)-this._minBufferSize,0);a=f*e;c=h.min(4*a,c);if(a){for(var g=0;g<a;g+=e)this._doProcessBlock(d,g);g=d.splice(0,a);b.sigBytes-=c}return new j.init(g,c)},clone:function(){var a=f.clone.call(this);a._data=this._data.clone();return a},_minBufferSize:0});l.Hasher=q.extend({cfg:f.extend(),init:function(a){this.cfg=this.cfg.extend(a);this.reset()},reset:function(){q.reset.call(this);this._doReset()},update:function(a){this._append(a);this._process();return this},finalize:function(a){a&&this._append(a);return this._doFinalize()},blockSize:16,_createHelper:function(a){return function(b,d){return(new a.init(d)).finalize(b)}},_createHmacHelper:function(a){return function(b,d){return(new u.HMAC.init(a,d)).finalize(b)}}});var u=k.algo={};return k}(Math);
-(function () { var k = CryptoJS, b = k.lib, m = b.WordArray, l = b.Hasher, d = [], b = k.algo.SHA1 = l.extend({ _doReset: function () { this._hash = new m.init([1732584193, 4023233417, 2562383102, 271733878, 3285377520]) }, _doProcessBlock: function (n, p) { for (var a = this._hash.words, e = a[0], f = a[1], h = a[2], j = a[3], b = a[4], c = 0; 80 > c; c++) { if (16 > c) d[c] = n[p + c] | 0; else { var g = d[c - 3] ^ d[c - 8] ^ d[c - 14] ^ d[c - 16]; d[c] = g << 1 | g >>> 31 } g = (e << 5 | e >>> 27) + b + d[c]; g = 20 > c ? g + ((f & h | ~f & j) + 1518500249) : 40 > c ? g + ((f ^ h ^ j) + 1859775393) : 60 > c ? g + ((f & h | f & j | h & j) - 1894007588) : g + ((f ^ h ^ j) - 899497514); b = j; j = h; h = f << 30 | f >>> 2; f = e; e = g } a[0] = a[0] + e | 0; a[1] = a[1] + f | 0; a[2] = a[2] + h | 0; a[3] = a[3] + j | 0; a[4] = a[4] + b | 0 }, _doFinalize: function () { var b = this._data, d = b.words, a = 8 * this._nDataBytes, e = 8 * b.sigBytes; d[e >>> 5] |= 128 << 24 - e % 32; d[(e + 64 >>> 9 << 4) + 14] = Math.floor(a / 4294967296); d[(e + 64 >>> 9 << 4) + 15] = a; b.sigBytes = 4 * d.length; this._process(); return this._hash }, clone: function () { var b = l.clone.call(this); b._hash = this._hash.clone(); return b } }); k.SHA1 = l._createHelper(b); k.HmacSHA1 = l._createHmacHelper(b) })();
-(function (k) { for (var g = CryptoJS, h = g.lib, v = h.WordArray, j = h.Hasher, h = g.algo, s = [], t = [], u = function (q) { return 4294967296 * (q - (q | 0)) | 0 }, l = 2, b = 0; 64 > b;) { var d; a: { d = l; for (var w = k.sqrt(d), r = 2; r <= w; r++) if (!(d % r)) { d = !1; break a } d = !0 } d && (8 > b && (s[b] = u(k.pow(l, 0.5))), t[b] = u(k.pow(l, 1 / 3)), b++); l++ } var n = [], h = h.SHA256 = j.extend({ _doReset: function () { this._hash = new v.init(s.slice(0)) }, _doProcessBlock: function (q, h) { for (var a = this._hash.words, c = a[0], d = a[1], b = a[2], k = a[3], f = a[4], g = a[5], j = a[6], l = a[7], e = 0; 64 > e; e++) { if (16 > e) n[e] = q[h + e] | 0; else { var m = n[e - 15], p = n[e - 2]; n[e] = ((m << 25 | m >>> 7) ^ (m << 14 | m >>> 18) ^ m >>> 3) + n[e - 7] + ((p << 15 | p >>> 17) ^ (p << 13 | p >>> 19) ^ p >>> 10) + n[e - 16] } m = l + ((f << 26 | f >>> 6) ^ (f << 21 | f >>> 11) ^ (f << 7 | f >>> 25)) + (f & g ^ ~f & j) + t[e] + n[e]; p = ((c << 30 | c >>> 2) ^ (c << 19 | c >>> 13) ^ (c << 10 | c >>> 22)) + (c & d ^ c & b ^ d & b); l = j; j = g; g = f; f = k + m | 0; k = b; b = d; d = c; c = m + p | 0 } a[0] = a[0] + c | 0; a[1] = a[1] + d | 0; a[2] = a[2] + b | 0; a[3] = a[3] + k | 0; a[4] = a[4] + f | 0; a[5] = a[5] + g | 0; a[6] = a[6] + j | 0; a[7] = a[7] + l | 0 }, _doFinalize: function () { var d = this._data, b = d.words, a = 8 * this._nDataBytes, c = 8 * d.sigBytes; b[c >>> 5] |= 128 << 24 - c % 32; b[(c + 64 >>> 9 << 4) + 14] = k.floor(a / 4294967296); b[(c + 64 >>> 9 << 4) + 15] = a; d.sigBytes = 4 * b.length; this._process(); return this._hash }, clone: function () { var b = j.clone.call(this); b._hash = this._hash.clone(); return b } }); g.SHA256 = j._createHelper(h); g.HmacSHA256 = j._createHmacHelper(h) })(Math);
-(function(){var c=CryptoJS,k=c.enc.Utf8;c.algo.HMAC=c.lib.Base.extend({init:function(a,b){a=this._hasher=new a.init;"string"==typeof b&&(b=k.parse(b));var c=a.blockSize,e=4*c;b.sigBytes>e&&(b=a.finalize(b));b.clamp();for(var f=this._oKey=b.clone(),g=this._iKey=b.clone(),h=f.words,j=g.words,d=0;d<c;d++)h[d]^=1549556828,j[d]^=909522486;f.sigBytes=g.sigBytes=e;this.reset()},reset:function(){var a=this._hasher;a.reset();a.update(this._iKey)},update:function(a){this._hasher.update(a);return this},finalize:function(a){var b=this._hasher;a=b.finalize(a);b.reset();return b.finalize(this._oKey.clone().concat(a))}})})();
-(function(){var h=CryptoJS,j=h.lib.WordArray;h.enc.Base64={stringify:function(b){var e=b.words,f=b.sigBytes,c=this._map;b.clamp();b=[];for(var a=0;a<f;a+=3)for(var d=(e[a>>>2]>>>24-8*(a%4)&255)<<16|(e[a+1>>>2]>>>24-8*((a+1)%4)&255)<<8|e[a+2>>>2]>>>24-8*((a+2)%4)&255,g=0;4>g&&a+0.75*g<f;g++)b.push(c.charAt(d>>>6*(3-g)&63));if(e=c.charAt(64))for(;b.length%4;)b.push(e);return b.join("")},parse:function(b){var e=b.length,f=this._map,c=f.charAt(64);c&&(c=b.indexOf(c),-1!=c&&(e=c));for(var c=[],a=0,d=0;d<e;d++)if(d%4){var g=f.indexOf(b.charAt(d-1))<<2*(d%4),h=f.indexOf(b.charAt(d))>>>6-2*(d%4);c[a>>>2]|=(g|h)<<24-8*(a%4);a++}return j.create(c,a)},_map:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="}})();
+/*
+ HTTP Hawk Authentication Scheme
+ Copyright (c) 2012-2013, Eran Hammer <eran@hueniverse.com>
+ MIT Licensed
+*/
+
+
+// Declare namespace
+
+var hawk = {};
+
+
+// Export if used as a module
+
+if (typeof module !== "undefined" && module.exports) {
+ module.exports = hawk;
+}
+
+hawk.client = {
+
+ // Generate an Authorization header for a given request
+
+ /*
+ uri: 'http://example.com/resource?a=b'
+ method: HTTP verb (e.g. 'GET', 'POST')
+ options: {
+
+ // Required
+
+ credentials: {
+ id: 'dh37fgj492je',
+ key: 'aoijedoaijsdlaksjdl',
+ algorithm: 'sha256' // 'sha1', 'sha256'
+ },
+
+ // Optional
+
+ ext: 'application-specific', // Application specific data sent via the ext attribute
+ timestamp: Date.now() / 1000, // A pre-calculated timestamp in seconds
+ nonce: '2334f34f', // A pre-generated nonce
+ localtimeOffsetMsec: 400, // Time offset to sync with server time (ignored if timestamp provided)
+ payload: '{"some":"payload"}', // UTF-8 encoded string for body hash generation (ignored if hash provided)
+ contentType: 'application/json', // Payload content-type (ignored if hash provided)
+ hash: 'U4MKKSmiVxk37JCCrAVIjV=', // Pre-calculated payload hash
+ app: '24s23423f34dx', // Oz application id
+ dlg: '234sz34tww3sd' // Oz delegated-by application id
+ }
+ */
+
+ header: function (uri, method, options) {
+
+ var result = {
+ field: '',
+ artifacts: {}
+ };
+
+ // Validate inputs
+
+ if (!uri || (typeof uri !== 'string' && typeof uri !== 'object') ||
+ !method || typeof method !== 'string' ||
+ !options || typeof options !== 'object') {
+
+ return result;
+ }
+
+ // Application time
+
+ var timestamp = options.timestamp || Math.floor((hawk.utils.now() + (options.localtimeOffsetMsec || 0)) / 1000)
+
+ // Validate credentials
+
+ var credentials = options.credentials;
+ if (!credentials ||
+ !credentials.id ||
+ !credentials.key ||
+ !credentials.algorithm) {
+
+ // Invalid credential object
+ return result;
+ }
+
+ if (hawk.crypto.algorithms.indexOf(credentials.algorithm) === -1) {
+ return result;
+ }
+
+ // Parse URI
+
+ if (typeof uri === 'string') {
+ uri = hawk.utils.parseUri(uri);
+ }
+
+ // Calculate signature
+
+ var artifacts = {
+ ts: timestamp,
+ nonce: options.nonce || hawk.utils.randomString(6),
+ method: method,
+ resource: uri.relative,
+ host: uri.hostname,
+ port: uri.port,
+ hash: options.hash,
+ ext: options.ext,
+ app: options.app,
+ dlg: options.dlg
+ };
+
+ result.artifacts = artifacts;
+
+ // Calculate payload hash
+
+ if (!artifacts.hash &&
+ options.hasOwnProperty('payload')) {
+
+ artifacts.hash = hawk.crypto.calculatePayloadHash(options.payload, credentials.algorithm, options.contentType);
+ }
+
+ var mac = hawk.crypto.calculateMac('header', credentials, artifacts);
+
+ // Construct header
+
+ var hasExt = artifacts.ext !== null && artifacts.ext !== undefined && artifacts.ext !== ''; // Other falsey values allowed
+ var header = 'Hawk id="' + credentials.id +
+ '", ts="' + artifacts.ts +
+ '", nonce="' + artifacts.nonce +
+ (artifacts.hash ? '", hash="' + artifacts.hash : '') +
+ (hasExt ? '", ext="' + hawk.utils.escapeHeaderAttribute(artifacts.ext) : '') +
+ '", mac="' + mac + '"';
+
+ if (artifacts.app) {
+ header += ', app="' + artifacts.app +
+ (artifacts.dlg ? '", dlg="' + artifacts.dlg : '') + '"';
+ }
+
+ result.field = header;
+
+ return result;
+ },
+
+
+ // Validate server response
+
+ /*
+ request: object created via 'new XMLHttpRequest()' after response received
+ artifacts: object recieved from header().artifacts
+ options: {
+ payload: optional payload received
+ required: specifies if a Server-Authorization header is required. Defaults to 'false'
+ }
+ */
+
+ authenticate: function (request, credentials, artifacts, options) {
+
+ options = options || {};
+
+ if (request.getResponseHeader('www-authenticate')) {
+
+ // Parse HTTP WWW-Authenticate header
+
+ var attributes = hawk.utils.parseAuthorizationHeader(request.getResponseHeader('www-authenticate'), ['ts', 'tsm', 'error']);
+ if (!attributes) {
+ return false;
+ }
+
+ if (attributes.ts) {
+ var tsm = hawk.crypto.calculateTsMac(attributes.ts, credentials);
+ if (tsm !== attributes.tsm) {
+ return false;
+ }
+
+ hawk.utils.setNtpOffset(attributes.ts - Math.floor(Date.now() / 1000)); // Keep offset at 1 second precision
+ }
+ }
+
+ // Parse HTTP Server-Authorization header
+
+ if (!request.getResponseHeader('server-authorization') &&
+ !options.required) {
+
+ return true;
+ }
+
+ var attributes = hawk.utils.parseAuthorizationHeader(request.getResponseHeader('server-authorization'), ['mac', 'ext', 'hash']);
+ if (!attributes) {
+ return false;
+ }
+
+ var modArtifacts = {
+ ts: artifacts.ts,
+ nonce: artifacts.nonce,
+ method: artifacts.method,
+ resource: artifacts.resource,
+ host: artifacts.host,
+ port: artifacts.port,
+ hash: attributes.hash,
+ ext: attributes.ext,
+ app: artifacts.app,
+ dlg: artifacts.dlg
+ };
+
+ var mac = hawk.crypto.calculateMac('response', credentials, modArtifacts);
+ if (mac !== attributes.mac) {
+ return false;
+ }
+
+ if (!options.hasOwnProperty('payload')) {
+ return true;
+ }
+
+ if (!attributes.hash) {
+ return false;
+ }
+
+ var calculatedHash = hawk.crypto.calculatePayloadHash(options.payload, credentials.algorithm, request.getResponseHeader('content-type'));
+ return (calculatedHash === attributes.hash);
+ },
+
+ message: function (host, port, message, options) {
+
+ // Validate inputs
+
+ if (!host || typeof host !== 'string' ||
+ !port || typeof port !== 'number' ||
+ message === null || message === undefined || typeof message !== 'string' ||
+ !options || typeof options !== 'object') {
+
+ return null;
+ }
+
+ // Application time
+
+ var timestamp = options.timestamp || Math.floor((hawk.utils.now() + (options.localtimeOffsetMsec || 0)) / 1000)
+
+ // Validate credentials
+
+ var credentials = options.credentials;
+ if (!credentials ||
+ !credentials.id ||
+ !credentials.key ||
+ !credentials.algorithm) {
+
+ // Invalid credential object
+ return null;
+ }
+
+ if (hawk.crypto.algorithms.indexOf(credentials.algorithm) === -1) {
+ return null;
+ }
+
+ // Calculate signature
+
+ var artifacts = {
+ ts: timestamp,
+ nonce: options.nonce || hawk.utils.randomString(6),
+ host: host,
+ port: port,
+ hash: hawk.crypto.calculatePayloadHash(message, credentials.algorithm)
+ };
+
+ // Construct authorization
+
+ var result = {
+ id: credentials.id,
+ ts: artifacts.ts,
+ nonce: artifacts.nonce,
+ hash: artifacts.hash,
+ mac: hawk.crypto.calculateMac('message', credentials, artifacts)
+ };
+
+ return result;
+ }
+};
+
+
+hawk.crypto = {
+
+ headerVersion: '1',
+
+ algorithms: ['sha1', 'sha256'],
+
+ calculateMac: function (type, credentials, options) {
+
+ var normalized = hawk.crypto.generateNormalizedString(type, options);
+
+ var hmac = CryptoJS['Hmac' + credentials.algorithm.toUpperCase()](normalized, credentials.key);
+ return hmac.toString(CryptoJS.enc.Base64);
+ },
+
+ generateNormalizedString: function (type, options) {
+
+ var normalized = 'hawk.' + hawk.crypto.headerVersion + '.' + type + '\n' +
+ options.ts + '\n' +
+ options.nonce + '\n' +
+ (options.method || '').toUpperCase() + '\n' +
+ (options.resource || '') + '\n' +
+ options.host.toLowerCase() + '\n' +
+ options.port + '\n' +
+ (options.hash || '') + '\n';
+
+ if (options.ext) {
+ normalized += options.ext.replace('\\', '\\\\').replace('\n', '\\n');
+ }
+
+ normalized += '\n';
+
+ if (options.app) {
+ normalized += options.app + '\n' +
+ (options.dlg || '') + '\n';
+ }
+
+ return normalized;
+ },
+
+ calculatePayloadHash: function (payload, algorithm, contentType) {
+
+ var hash = CryptoJS.algo[algorithm.toUpperCase()].create();
+ hash.update('hawk.' + hawk.crypto.headerVersion + '.payload\n');
+ hash.update(hawk.utils.parseContentType(contentType) + '\n');
+ hash.update(payload || '');
+ hash.update('\n');
+ return hash.finalize().toString(CryptoJS.enc.Base64);
+ },
+
+ calculateTsMac: function (ts, credentials) {
+
+ var hash = CryptoJS['Hmac' + credentials.algorithm.toUpperCase()]('hawk.' + hawk.crypto.headerVersion + '.ts\n' + ts + '\n', credentials.key);
+ return hash.toString(CryptoJS.enc.Base64);
+ }
+};
+
+
+hawk.utils = {
+
+ storage: { // localStorage compatible interface
+ _cache: {},
+ setItem: function (key, value) {
+
+ hawk.utils.storage._cache[key] = value;
+ },
+ getItem: function (key) {
+
+ return hawk.utils.storage._cache[key];
+ }
+ },
+
+ setStorage: function (storage) {
+
+ var ntpOffset = hawk.utils.getNtpOffset() || 0;
+ hawk.utils.storage = storage;
+ hawk.utils.setNtpOffset(ntpOffset);
+ },
+
+ setNtpOffset: function (offset) {
+
+ hawk.utils.storage.setItem('hawk_ntp_offset', offset);
+ },
+
+ getNtpOffset: function () {
+
+ return parseInt(hawk.utils.storage.getItem('hawk_ntp_offset') || '0', 10);
+ },
+
+ now: function () {
+
+ return Date.now() + hawk.utils.getNtpOffset();
+ },
+
+ escapeHeaderAttribute: function (attribute) {
+
+ return attribute.replace(/\\/g, '\\\\').replace(/\"/g, '\\"');
+ },
+
+ parseContentType: function (header) {
+
+ if (!header) {
+ return '';
+ }
+
+ return header.split(';')[0].trim().toLowerCase();
+ },
+
+ parseAuthorizationHeader: function (header, keys) {
+
+ if (!header) {
+ return null;
+ }
+
+ var headerParts = header.match(/^(\w+)(?:\s+(.*))?$/); // Header: scheme[ something]
+ if (!headerParts) {
+ return null;
+ }
+
+ var scheme = headerParts[1];
+ if (scheme.toLowerCase() !== 'hawk') {
+ return null;
+ }
+
+ var attributesString = headerParts[2];
+ if (!attributesString) {
+ return null;
+ }
+
+ var attributes = {};
+ var verify = attributesString.replace(/(\w+)="([^"\\]*)"\s*(?:,\s*|$)/g, function ($0, $1, $2) {
+
+ // Check valid attribute names
+
+ if (keys.indexOf($1) === -1) {
+ return;
+ }
+
+ // Allowed attribute value characters: !#$%&'()*+,-./:;<=>?@[]^_`{|}~ and space, a-z, A-Z, 0-9
+
+ if ($2.match(/^[ \w\!#\$%&'\(\)\*\+,\-\.\/\:;<\=>\?@\[\]\^`\{\|\}~]+$/) === null) {
+ return;
+ }
+
+ // Check for duplicates
+
+ if (attributes.hasOwnProperty($1)) {
+ return;
+ }
+
+ attributes[$1] = $2;
+ return '';
+ });
+
+ if (verify !== '') {
+ return null;
+ }
+
+ return attributes;
+ },
+
+ randomString: function (size) {
+
+ var randomSource = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
+ var len = randomSource.length;
+
+ var result = [];
+ for (var i = 0; i < size; ++i) {
+ result[i] = randomSource[Math.floor(Math.random() * len)];
+ }
+
+ return result.join('');
+ },
+
+ parseUri: function (input) {
+
+ // Based on: parseURI 1.2.2
+ // http://blog.stevenlevithan.com/archives/parseuri
+ // (c) Steven Levithan <stevenlevithan.com>
+ // MIT License
+
+ var keys = ['source', 'protocol', 'authority', 'userInfo', 'user', 'password', 'hostname', 'port', 'resource', 'relative', 'pathname', 'directory', 'file', 'query', 'fragment'];
+
+ var uriRegex = /^(?:([^:\/?#]+):)?(?:\/\/((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?))?(((((?:[^?#\/]*\/)*)([^?#]*))(?:\?([^#]*))?)(?:#(.*))?)/;
+ var uriByNumber = uriRegex.exec(input);
+ var uri = {};
+
+ var i = 15;
+ while (i--) {
+ uri[keys[i]] = uriByNumber[i] || '';
+ }
+
+ if (uri.port === null ||
+ uri.port === '') {
+
+ uri.port = (uri.protocol.toLowerCase() === 'http' ? '80' : (uri.protocol.toLowerCase() === 'https' ? '443' : ''));
+ }
+
+ return uri;
+ }
+};
+
+
+// Based on: Crypto-JS v3.1.2
+// Copyright (c) 2009-2013, Jeff Mott. All rights reserved.
+// http://code.google.com/p/crypto-js/
+// http://code.google.com/p/crypto-js/wiki/License
+
+var CryptoJS=CryptoJS||function(h,r){var k={},l=k.lib={},n=function(){},f=l.Base={extend:function(a){n.prototype=this;var b=new n;a&&b.mixIn(a);b.hasOwnProperty("init")||(b.init=function(){b.$super.init.apply(this,arguments)});b.init.prototype=b;b.$super=this;return b},create:function(){var a=this.extend();a.init.apply(a,arguments);return a},init:function(){},mixIn:function(a){for(var b in a)a.hasOwnProperty(b)&&(this[b]=a[b]);a.hasOwnProperty("toString")&&(this.toString=a.toString)},clone:function(){return this.init.prototype.extend(this)}},j=l.WordArray=f.extend({init:function(a,b){a=this.words=a||[];this.sigBytes=b!=r?b:4*a.length},toString:function(a){return(a||s).stringify(this)},concat:function(a){var b=this.words,d=a.words,c=this.sigBytes;a=a.sigBytes;this.clamp();if(c%4)for(var e=0;e<a;e++)b[c+e>>>2]|=(d[e>>>2]>>>24-8*(e%4)&255)<<24-8*((c+e)%4);else if(65535<d.length)for(e=0;e<a;e+=4)b[c+e>>>2]=d[e>>>2];else b.push.apply(b,d);this.sigBytes+=a;return this},clamp:function(){var a=this.words,b=this.sigBytes;a[b>>>2]&=4294967295<<32-8*(b%4);a.length=h.ceil(b/4)},clone:function(){var a=f.clone.call(this);a.words=this.words.slice(0);return a},random:function(a){for(var b=[],d=0;d<a;d+=4)b.push(4294967296*h.random()|0);return new j.init(b,a)}}),m=k.enc={},s=m.Hex={stringify:function(a){var b=a.words;a=a.sigBytes;for(var d=[],c=0;c<a;c++){var e=b[c>>>2]>>>24-8*(c%4)&255;d.push((e>>>4).toString(16));d.push((e&15).toString(16))}return d.join("")},parse:function(a){for(var b=a.length,d=[],c=0;c<b;c+=2)d[c>>>3]|=parseInt(a.substr(c,2),16)<<24-4*(c%8);return new j.init(d,b/2)}},p=m.Latin1={stringify:function(a){var b=a.words;a=a.sigBytes;for(var d=[],c=0;c<a;c++)d.push(String.fromCharCode(b[c>>>2]>>>24-8*(c%4)&255));return d.join("")},parse:function(a){for(var b=a.length,d=[],c=0;c<b;c++)d[c>>>2]|=(a.charCodeAt(c)&255)<<24-8*(c%4);return new j.init(d,b)}},t=m.Utf8={stringify:function(a){try{return decodeURIComponent(escape(p.stringify(a)))}catch(b){throw Error("Malformed UTF-8 data");}},parse:function(a){return p.parse(unescape(encodeURIComponent(a)))}},q=l.BufferedBlockAlgorithm=f.extend({reset:function(){this._data=new j.init;this._nDataBytes=0},_append:function(a){"string"==typeof a&&(a=t.parse(a));this._data.concat(a);this._nDataBytes+=a.sigBytes},_process:function(a){var b=this._data,d=b.words,c=b.sigBytes,e=this.blockSize,f=c/(4*e),f=a?h.ceil(f):h.max((f|0)-this._minBufferSize,0);a=f*e;c=h.min(4*a,c);if(a){for(var g=0;g<a;g+=e)this._doProcessBlock(d,g);g=d.splice(0,a);b.sigBytes-=c}return new j.init(g,c)},clone:function(){var a=f.clone.call(this);a._data=this._data.clone();return a},_minBufferSize:0});l.Hasher=q.extend({cfg:f.extend(),init:function(a){this.cfg=this.cfg.extend(a);this.reset()},reset:function(){q.reset.call(this);this._doReset()},update:function(a){this._append(a);this._process();return this},finalize:function(a){a&&this._append(a);return this._doFinalize()},blockSize:16,_createHelper:function(a){return function(b,d){return(new a.init(d)).finalize(b)}},_createHmacHelper:function(a){return function(b,d){return(new u.HMAC.init(a,d)).finalize(b)}}});var u=k.algo={};return k}(Math);
+(function () { var k = CryptoJS, b = k.lib, m = b.WordArray, l = b.Hasher, d = [], b = k.algo.SHA1 = l.extend({ _doReset: function () { this._hash = new m.init([1732584193, 4023233417, 2562383102, 271733878, 3285377520]) }, _doProcessBlock: function (n, p) { for (var a = this._hash.words, e = a[0], f = a[1], h = a[2], j = a[3], b = a[4], c = 0; 80 > c; c++) { if (16 > c) d[c] = n[p + c] | 0; else { var g = d[c - 3] ^ d[c - 8] ^ d[c - 14] ^ d[c - 16]; d[c] = g << 1 | g >>> 31 } g = (e << 5 | e >>> 27) + b + d[c]; g = 20 > c ? g + ((f & h | ~f & j) + 1518500249) : 40 > c ? g + ((f ^ h ^ j) + 1859775393) : 60 > c ? g + ((f & h | f & j | h & j) - 1894007588) : g + ((f ^ h ^ j) - 899497514); b = j; j = h; h = f << 30 | f >>> 2; f = e; e = g } a[0] = a[0] + e | 0; a[1] = a[1] + f | 0; a[2] = a[2] + h | 0; a[3] = a[3] + j | 0; a[4] = a[4] + b | 0 }, _doFinalize: function () { var b = this._data, d = b.words, a = 8 * this._nDataBytes, e = 8 * b.sigBytes; d[e >>> 5] |= 128 << 24 - e % 32; d[(e + 64 >>> 9 << 4) + 14] = Math.floor(a / 4294967296); d[(e + 64 >>> 9 << 4) + 15] = a; b.sigBytes = 4 * d.length; this._process(); return this._hash }, clone: function () { var b = l.clone.call(this); b._hash = this._hash.clone(); return b } }); k.SHA1 = l._createHelper(b); k.HmacSHA1 = l._createHmacHelper(b) })();
+(function (k) { for (var g = CryptoJS, h = g.lib, v = h.WordArray, j = h.Hasher, h = g.algo, s = [], t = [], u = function (q) { return 4294967296 * (q - (q | 0)) | 0 }, l = 2, b = 0; 64 > b;) { var d; a: { d = l; for (var w = k.sqrt(d), r = 2; r <= w; r++) if (!(d % r)) { d = !1; break a } d = !0 } d && (8 > b && (s[b] = u(k.pow(l, 0.5))), t[b] = u(k.pow(l, 1 / 3)), b++); l++ } var n = [], h = h.SHA256 = j.extend({ _doReset: function () { this._hash = new v.init(s.slice(0)) }, _doProcessBlock: function (q, h) { for (var a = this._hash.words, c = a[0], d = a[1], b = a[2], k = a[3], f = a[4], g = a[5], j = a[6], l = a[7], e = 0; 64 > e; e++) { if (16 > e) n[e] = q[h + e] | 0; else { var m = n[e - 15], p = n[e - 2]; n[e] = ((m << 25 | m >>> 7) ^ (m << 14 | m >>> 18) ^ m >>> 3) + n[e - 7] + ((p << 15 | p >>> 17) ^ (p << 13 | p >>> 19) ^ p >>> 10) + n[e - 16] } m = l + ((f << 26 | f >>> 6) ^ (f << 21 | f >>> 11) ^ (f << 7 | f >>> 25)) + (f & g ^ ~f & j) + t[e] + n[e]; p = ((c << 30 | c >>> 2) ^ (c << 19 | c >>> 13) ^ (c << 10 | c >>> 22)) + (c & d ^ c & b ^ d & b); l = j; j = g; g = f; f = k + m | 0; k = b; b = d; d = c; c = m + p | 0 } a[0] = a[0] + c | 0; a[1] = a[1] + d | 0; a[2] = a[2] + b | 0; a[3] = a[3] + k | 0; a[4] = a[4] + f | 0; a[5] = a[5] + g | 0; a[6] = a[6] + j | 0; a[7] = a[7] + l | 0 }, _doFinalize: function () { var d = this._data, b = d.words, a = 8 * this._nDataBytes, c = 8 * d.sigBytes; b[c >>> 5] |= 128 << 24 - c % 32; b[(c + 64 >>> 9 << 4) + 14] = k.floor(a / 4294967296); b[(c + 64 >>> 9 << 4) + 15] = a; d.sigBytes = 4 * b.length; this._process(); return this._hash }, clone: function () { var b = j.clone.call(this); b._hash = this._hash.clone(); return b } }); g.SHA256 = j._createHelper(h); g.HmacSHA256 = j._createHmacHelper(h) })(Math);
+(function(){var c=CryptoJS,k=c.enc.Utf8;c.algo.HMAC=c.lib.Base.extend({init:function(a,b){a=this._hasher=new a.init;"string"==typeof b&&(b=k.parse(b));var c=a.blockSize,e=4*c;b.sigBytes>e&&(b=a.finalize(b));b.clamp();for(var f=this._oKey=b.clone(),g=this._iKey=b.clone(),h=f.words,j=g.words,d=0;d<c;d++)h[d]^=1549556828,j[d]^=909522486;f.sigBytes=g.sigBytes=e;this.reset()},reset:function(){var a=this._hasher;a.reset();a.update(this._iKey)},update:function(a){this._hasher.update(a);return this},finalize:function(a){var b=this._hasher;a=b.finalize(a);b.reset();return b.finalize(this._oKey.clone().concat(a))}})})();
+(function(){var h=CryptoJS,j=h.lib.WordArray;h.enc.Base64={stringify:function(b){var e=b.words,f=b.sigBytes,c=this._map;b.clamp();b=[];for(var a=0;a<f;a+=3)for(var d=(e[a>>>2]>>>24-8*(a%4)&255)<<16|(e[a+1>>>2]>>>24-8*((a+1)%4)&255)<<8|e[a+2>>>2]>>>24-8*((a+2)%4)&255,g=0;4>g&&a+0.75*g<f;g++)b.push(c.charAt(d>>>6*(3-g)&63));if(e=c.charAt(64))for(;b.length%4;)b.push(e);return b.join("")},parse:function(b){var e=b.length,f=this._map,c=f.charAt(64);c&&(c=b.indexOf(c),-1!=c&&(e=c));for(var c=[],a=0,d=0;d<e;d++)if(d%4){var g=f.indexOf(b.charAt(d-1))<<2*(d%4),h=f.indexOf(b.charAt(d))>>>6-2*(d%4);c[a>>>2]|=(g|h)<<24-8*(a%4);a++}return j.create(c,a)},_map:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="}})();
diff --git a/deps/npm/node_modules/request/node_modules/hawk/lib/client.js b/deps/npm/node_modules/request/node_modules/hawk/lib/client.js
index 8b5bad566..41984582a 100755
--- a/deps/npm/node_modules/request/node_modules/hawk/lib/client.js
+++ b/deps/npm/node_modules/request/node_modules/hawk/lib/client.js
@@ -1,285 +1,367 @@
-// Load modules
-
-var Url = require('url');
-var Hoek = require('hoek');
-var Cryptiles = require('cryptiles');
-var Crypto = require('./crypto');
-var Utils = require('./utils');
-
-
-// Declare internals
-
-var internals = {};
-
-
-// Generate an Authorization header for a given request
-
-/*
- uri: 'http://example.com/resource?a=b' or object from Url.parse()
- method: HTTP verb (e.g. 'GET', 'POST')
- options: {
-
- // Required
-
- credentials: {
- id: 'dh37fgj492je',
- key: 'aoijedoaijsdlaksjdl',
- algorithm: 'sha256' // 'sha1', 'sha256'
- },
-
- // Optional
-
- ext: 'application-specific', // Application specific data sent via the ext attribute
- timestamp: Date.now(), // A pre-calculated timestamp
- nonce: '2334f34f', // A pre-generated nonce
- localtimeOffsetMsec: 400, // Time offset to sync with server time (ignored if timestamp provided)
- payload: '{"some":"payload"}', // UTF-8 encoded string for body hash generation (ignored if hash provided)
- contentType: 'application/json', // Payload content-type (ignored if hash provided)
- hash: 'U4MKKSmiVxk37JCCrAVIjV=', // Pre-calculated payload hash
- app: '24s23423f34dx', // Oz application id
- dlg: '234sz34tww3sd' // Oz delegated-by application id
- }
-*/
-
-exports.header = function (uri, method, options) {
-
- var result = {
- field: '',
- artifacts: {}
- };
-
- // Validate inputs
-
- if (!uri || (typeof uri !== 'string' && typeof uri !== 'object') ||
- !method || typeof method !== 'string' ||
- !options || typeof options !== 'object') {
-
- return result;
- }
-
- // Application time
-
- var timestamp = options.timestamp || Math.floor((Utils.now() + (options.localtimeOffsetMsec || 0)) / 1000)
-
- // Validate credentials
-
- var credentials = options.credentials;
- if (!credentials ||
- !credentials.id ||
- !credentials.key ||
- !credentials.algorithm) {
-
- // Invalid credential object
- return result;
- }
-
- if (Crypto.algorithms.indexOf(credentials.algorithm) === -1) {
- return result;
- }
-
- // Parse URI
-
- if (typeof uri === 'string') {
- uri = Url.parse(uri);
- }
-
- // Calculate signature
-
- var artifacts = {
- ts: timestamp,
- nonce: options.nonce || Cryptiles.randomString(6),
- method: method,
- resource: uri.pathname + (uri.search || ''), // Maintain trailing '?'
- host: uri.hostname,
- port: uri.port || (uri.protocol === 'http:' ? 80 : 443),
- hash: options.hash,
- ext: options.ext,
- app: options.app,
- dlg: options.dlg
- };
-
- result.artifacts = artifacts;
-
- // Calculate payload hash
-
- if (!artifacts.hash &&
- options.hasOwnProperty('payload')) {
-
- artifacts.hash = Crypto.calculatePayloadHash(options.payload, credentials.algorithm, options.contentType);
- }
-
- var mac = Crypto.calculateMac('header', credentials, artifacts);
-
- // Construct header
-
- var hasExt = artifacts.ext !== null && artifacts.ext !== undefined && artifacts.ext !== ''; // Other falsey values allowed
- var header = 'Hawk id="' + credentials.id +
- '", ts="' + artifacts.ts +
- '", nonce="' + artifacts.nonce +
- (artifacts.hash ? '", hash="' + artifacts.hash : '') +
- (hasExt ? '", ext="' + Utils.escapeHeaderAttribute(artifacts.ext) : '') +
- '", mac="' + mac + '"';
-
- if (artifacts.app) {
- header += ', app="' + artifacts.app +
- (artifacts.dlg ? '", dlg="' + artifacts.dlg : '') + '"';
- }
-
- result.field = header;
-
- return result;
-};
-
-
-// Validate server response
-
-/*
- res: node's response object
- artifacts: object recieved from header().artifacts
- options: {
- payload: optional payload received
- required: specifies if a Server-Authorization header is required. Defaults to 'false'
- }
-*/
-
-exports.authenticate = function (res, credentials, artifacts, options) {
-
- artifacts = Hoek.clone(artifacts);
- options = options || {};
-
- if (res.headers['www-authenticate']) {
-
- // Parse HTTP WWW-Authenticate header
-
- var attributes = Utils.parseAuthorizationHeader(res.headers['www-authenticate'], ['ts', 'tsm', 'error']);
- if (attributes instanceof Error) {
- return false;
- }
-
- if (attributes.ts) {
- var tsm = Crypto.calculateTsMac(attributes.ts, credentials);
- if (tsm !== attributes.tsm) {
- return false;
- }
- }
- }
-
- // Parse HTTP Server-Authorization header
-
- if (!res.headers['server-authorization'] &&
- !options.required) {
-
- return true;
- }
-
- var attributes = Utils.parseAuthorizationHeader(res.headers['server-authorization'], ['mac', 'ext', 'hash']);
- if (attributes instanceof Error) {
- return false;
- }
-
- artifacts.ext = attributes.ext;
- artifacts.hash = attributes.hash;
-
- var mac = Crypto.calculateMac('response', credentials, artifacts);
- if (mac !== attributes.mac) {
- return false;
- }
-
- if (!options.hasOwnProperty('payload')) {
- return true;
- }
-
- if (!attributes.hash) {
- return false;
- }
-
- var calculatedHash = Crypto.calculatePayloadHash(options.payload, credentials.algorithm, res.headers['content-type']);
- return (calculatedHash === attributes.hash);
-};
-
-
-// Generate a bewit value for a given URI
-
-/*
- * credentials is an object with the following keys: 'id, 'key', 'algorithm'.
- * options is an object with the following optional keys: 'ext', 'localtimeOffsetMsec'
- */
-/*
- uri: 'http://example.com/resource?a=b' or object from Url.parse()
- options: {
-
- // Required
-
- credentials: {
- id: 'dh37fgj492je',
- key: 'aoijedoaijsdlaksjdl',
- algorithm: 'sha256' // 'sha1', 'sha256'
- },
- ttlSec: 60 * 60, // TTL in seconds
-
- // Optional
-
- ext: 'application-specific', // Application specific data sent via the ext attribute
- localtimeOffsetMsec: 400 // Time offset to sync with server time
- };
-*/
-
-exports.getBewit = function (uri, options) {
-
- // Validate inputs
-
- if (!uri ||
- (typeof uri !== 'string' && typeof uri !== 'object') ||
- !options ||
- typeof options !== 'object' ||
- !options.ttlSec) {
-
- return '';
- }
-
- options.ext = (options.ext === null || options.ext === undefined ? '' : options.ext); // Zero is valid value
-
- // Application time
-
- var now = Utils.now() + (options.localtimeOffsetMsec || 0);
-
- // Validate credentials
-
- var credentials = options.credentials;
- if (!credentials ||
- !credentials.id ||
- !credentials.key ||
- !credentials.algorithm) {
-
- return '';
- }
-
- if (Crypto.algorithms.indexOf(credentials.algorithm) === -1) {
- return '';
- }
-
- // Parse URI
-
- if (typeof uri === 'string') {
- uri = Url.parse(uri);
- }
-
- // Calculate signature
-
- var exp = Math.floor(now / 1000) + options.ttlSec;
- var mac = Crypto.calculateMac('bewit', credentials, {
- ts: exp,
- nonce: '',
- method: 'GET',
- resource: uri.pathname + (uri.search || ''), // Maintain trailing '?'
- host: uri.hostname,
- port: uri.port || (uri.protocol === 'http:' ? 80 : 443),
- ext: options.ext
- });
-
- // Construct bewit: id\exp\mac\ext
-
- var bewit = credentials.id + '\\' + exp + '\\' + mac + '\\' + options.ext;
- return Utils.base64urlEncode(bewit);
-};
-
+// Load modules
+
+var Url = require('url');
+var Hoek = require('hoek');
+var Cryptiles = require('cryptiles');
+var Crypto = require('./crypto');
+var Utils = require('./utils');
+
+
+// Declare internals
+
+var internals = {};
+
+
+// Generate an Authorization header for a given request
+
+/*
+ uri: 'http://example.com/resource?a=b' or object from Url.parse()
+ method: HTTP verb (e.g. 'GET', 'POST')
+ options: {
+
+ // Required
+
+ credentials: {
+ id: 'dh37fgj492je',
+ key: 'aoijedoaijsdlaksjdl',
+ algorithm: 'sha256' // 'sha1', 'sha256'
+ },
+
+ // Optional
+
+ ext: 'application-specific', // Application specific data sent via the ext attribute
+ timestamp: Date.now(), // A pre-calculated timestamp
+ nonce: '2334f34f', // A pre-generated nonce
+ localtimeOffsetMsec: 400, // Time offset to sync with server time (ignored if timestamp provided)
+ payload: '{"some":"payload"}', // UTF-8 encoded string for body hash generation (ignored if hash provided)
+ contentType: 'application/json', // Payload content-type (ignored if hash provided)
+ hash: 'U4MKKSmiVxk37JCCrAVIjV=', // Pre-calculated payload hash
+ app: '24s23423f34dx', // Oz application id
+ dlg: '234sz34tww3sd' // Oz delegated-by application id
+ }
+*/
+
+exports.header = function (uri, method, options) {
+
+ var result = {
+ field: '',
+ artifacts: {}
+ };
+
+ // Validate inputs
+
+ if (!uri || (typeof uri !== 'string' && typeof uri !== 'object') ||
+ !method || typeof method !== 'string' ||
+ !options || typeof options !== 'object') {
+
+ return result;
+ }
+
+ // Application time
+
+ var timestamp = options.timestamp || Math.floor((Utils.now() + (options.localtimeOffsetMsec || 0)) / 1000)
+
+ // Validate credentials
+
+ var credentials = options.credentials;
+ if (!credentials ||
+ !credentials.id ||
+ !credentials.key ||
+ !credentials.algorithm) {
+
+ // Invalid credential object
+ return result;
+ }
+
+ if (Crypto.algorithms.indexOf(credentials.algorithm) === -1) {
+ return result;
+ }
+
+ // Parse URI
+
+ if (typeof uri === 'string') {
+ uri = Url.parse(uri);
+ }
+
+ // Calculate signature
+
+ var artifacts = {
+ ts: timestamp,
+ nonce: options.nonce || Cryptiles.randomString(6),
+ method: method,
+ resource: uri.pathname + (uri.search || ''), // Maintain trailing '?'
+ host: uri.hostname,
+ port: uri.port || (uri.protocol === 'http:' ? 80 : 443),
+ hash: options.hash,
+ ext: options.ext,
+ app: options.app,
+ dlg: options.dlg
+ };
+
+ result.artifacts = artifacts;
+
+ // Calculate payload hash
+
+ if (!artifacts.hash &&
+ options.hasOwnProperty('payload')) {
+
+ artifacts.hash = Crypto.calculatePayloadHash(options.payload, credentials.algorithm, options.contentType);
+ }
+
+ var mac = Crypto.calculateMac('header', credentials, artifacts);
+
+ // Construct header
+
+ var hasExt = artifacts.ext !== null && artifacts.ext !== undefined && artifacts.ext !== ''; // Other falsey values allowed
+ var header = 'Hawk id="' + credentials.id +
+ '", ts="' + artifacts.ts +
+ '", nonce="' + artifacts.nonce +
+ (artifacts.hash ? '", hash="' + artifacts.hash : '') +
+ (hasExt ? '", ext="' + Utils.escapeHeaderAttribute(artifacts.ext) : '') +
+ '", mac="' + mac + '"';
+
+ if (artifacts.app) {
+ header += ', app="' + artifacts.app +
+ (artifacts.dlg ? '", dlg="' + artifacts.dlg : '') + '"';
+ }
+
+ result.field = header;
+
+ return result;
+};
+
+
+// Validate server response
+
+/*
+ res: node's response object
+ artifacts: object recieved from header().artifacts
+ options: {
+ payload: optional payload received
+ required: specifies if a Server-Authorization header is required. Defaults to 'false'
+ }
+*/
+
+exports.authenticate = function (res, credentials, artifacts, options) {
+
+ artifacts = Hoek.clone(artifacts);
+ options = options || {};
+
+ if (res.headers['www-authenticate']) {
+
+ // Parse HTTP WWW-Authenticate header
+
+ var attributes = Utils.parseAuthorizationHeader(res.headers['www-authenticate'], ['ts', 'tsm', 'error']);
+ if (attributes instanceof Error) {
+ return false;
+ }
+
+ if (attributes.ts) {
+ var tsm = Crypto.calculateTsMac(attributes.ts, credentials);
+ if (tsm !== attributes.tsm) {
+ return false;
+ }
+ }
+ }
+
+ // Parse HTTP Server-Authorization header
+
+ if (!res.headers['server-authorization'] &&
+ !options.required) {
+
+ return true;
+ }
+
+ var attributes = Utils.parseAuthorizationHeader(res.headers['server-authorization'], ['mac', 'ext', 'hash']);
+ if (attributes instanceof Error) {
+ return false;
+ }
+
+ artifacts.ext = attributes.ext;
+ artifacts.hash = attributes.hash;
+
+ var mac = Crypto.calculateMac('response', credentials, artifacts);
+ if (mac !== attributes.mac) {
+ return false;
+ }
+
+ if (!options.hasOwnProperty('payload')) {
+ return true;
+ }
+
+ if (!attributes.hash) {
+ return false;
+ }
+
+ var calculatedHash = Crypto.calculatePayloadHash(options.payload, credentials.algorithm, res.headers['content-type']);
+ return (calculatedHash === attributes.hash);
+};
+
+
+// Generate a bewit value for a given URI
+
+/*
+ * credentials is an object with the following keys: 'id, 'key', 'algorithm'.
+ * options is an object with the following optional keys: 'ext', 'localtimeOffsetMsec'
+ */
+/*
+ uri: 'http://example.com/resource?a=b' or object from Url.parse()
+ options: {
+
+ // Required
+
+ credentials: {
+ id: 'dh37fgj492je',
+ key: 'aoijedoaijsdlaksjdl',
+ algorithm: 'sha256' // 'sha1', 'sha256'
+ },
+ ttlSec: 60 * 60, // TTL in seconds
+
+ // Optional
+
+ ext: 'application-specific', // Application specific data sent via the ext attribute
+ localtimeOffsetMsec: 400 // Time offset to sync with server time
+ };
+*/
+
+exports.getBewit = function (uri, options) {
+
+ // Validate inputs
+
+ if (!uri ||
+ (typeof uri !== 'string' && typeof uri !== 'object') ||
+ !options ||
+ typeof options !== 'object' ||
+ !options.ttlSec) {
+
+ return '';
+ }
+
+ options.ext = (options.ext === null || options.ext === undefined ? '' : options.ext); // Zero is valid value
+
+ // Application time
+
+ var now = Utils.now() + (options.localtimeOffsetMsec || 0);
+
+ // Validate credentials
+
+ var credentials = options.credentials;
+ if (!credentials ||
+ !credentials.id ||
+ !credentials.key ||
+ !credentials.algorithm) {
+
+ return '';
+ }
+
+ if (Crypto.algorithms.indexOf(credentials.algorithm) === -1) {
+ return '';
+ }
+
+ // Parse URI
+
+ if (typeof uri === 'string') {
+ uri = Url.parse(uri);
+ }
+
+ // Calculate signature
+
+ var exp = Math.floor(now / 1000) + options.ttlSec;
+ var mac = Crypto.calculateMac('bewit', credentials, {
+ ts: exp,
+ nonce: '',
+ method: 'GET',
+ resource: uri.pathname + (uri.search || ''), // Maintain trailing '?'
+ host: uri.hostname,
+ port: uri.port || (uri.protocol === 'http:' ? 80 : 443),
+ ext: options.ext
+ });
+
+ // Construct bewit: id\exp\mac\ext
+
+ var bewit = credentials.id + '\\' + exp + '\\' + mac + '\\' + options.ext;
+ return Utils.base64urlEncode(bewit);
+};
+
+
+// Generate an authorization string for a message
+
+/*
+ host: 'example.com',
+ port: 8000,
+ message: '{"some":"payload"}', // UTF-8 encoded string for body hash generation
+ options: {
+
+ // Required
+
+ credentials: {
+ id: 'dh37fgj492je',
+ key: 'aoijedoaijsdlaksjdl',
+ algorithm: 'sha256' // 'sha1', 'sha256'
+ },
+
+ // Optional
+
+ timestamp: Date.now(), // A pre-calculated timestamp
+ nonce: '2334f34f', // A pre-generated nonce
+ localtimeOffsetMsec: 400, // Time offset to sync with server time (ignored if timestamp provided)
+ }
+*/
+
+exports.message = function (host, port, message, options) {
+
+ // Validate inputs
+
+ if (!host || typeof host !== 'string' ||
+ !port || typeof port !== 'number' ||
+ message === null || message === undefined || typeof message !== 'string' ||
+ !options || typeof options !== 'object') {
+
+ return null;
+ }
+
+ // Application time
+
+ var timestamp = options.timestamp || Math.floor((Utils.now() + (options.localtimeOffsetMsec || 0)) / 1000)
+
+ // Validate credentials
+
+ var credentials = options.credentials;
+ if (!credentials ||
+ !credentials.id ||
+ !credentials.key ||
+ !credentials.algorithm) {
+
+ // Invalid credential object
+ return null;
+ }
+
+ if (Crypto.algorithms.indexOf(credentials.algorithm) === -1) {
+ return null;
+ }
+
+ // Calculate signature
+
+ var artifacts = {
+ ts: timestamp,
+ nonce: options.nonce || Cryptiles.randomString(6),
+ host: host,
+ port: port,
+ hash: Crypto.calculatePayloadHash(message, credentials.algorithm)
+ };
+
+ // Construct authorization
+
+ var result = {
+ id: credentials.id,
+ ts: artifacts.ts,
+ nonce: artifacts.nonce,
+ hash: artifacts.hash,
+ mac: Crypto.calculateMac('message', credentials, artifacts)
+ };
+
+ return result;
+};
+
+
+
diff --git a/deps/npm/node_modules/request/node_modules/hawk/lib/crypto.js b/deps/npm/node_modules/request/node_modules/hawk/lib/crypto.js
index 2f0b1d148..150340a33 100755
--- a/deps/npm/node_modules/request/node_modules/hawk/lib/crypto.js
+++ b/deps/npm/node_modules/request/node_modules/hawk/lib/crypto.js
@@ -1,111 +1,111 @@
-// Load modules
-
-var Crypto = require('crypto');
-var Url = require('url');
-var Utils = require('./utils');
-
-
-// Declare internals
-
-var internals = {};
-
-
-// MAC normalization format version
-
-exports.headerVersion = '1'; // Prevent comparison of mac values generated with different normalized string formats
-
-
-// Supported HMAC algorithms
-
-exports.algorithms = ['sha1', 'sha256'];
-
-
-// Calculate the request MAC
-
-/*
- type: 'header', // 'header', 'bewit', 'response'
- credentials: {
- key: 'aoijedoaijsdlaksjdl',
- algorithm: 'sha256' // 'sha1', 'sha256'
- },
- options: {
- method: 'GET',
- resource: '/resource?a=1&b=2',
- host: 'example.com',
- port: 8080,
- ts: 1357718381034,
- nonce: 'd3d345f',
- hash: 'U4MKKSmiVxk37JCCrAVIjV/OhB3y+NdwoCr6RShbVkE=',
- ext: 'app-specific-data',
- app: 'hf48hd83qwkj', // Application id (Oz)
- dlg: 'd8djwekds9cj' // Delegated by application id (Oz), requires options.app
- }
-*/
-
-exports.calculateMac = function (type, credentials, options) {
-
- var normalized = exports.generateNormalizedString(type, options);
-
- var hmac = Crypto.createHmac(credentials.algorithm, credentials.key).update(normalized);
- var digest = hmac.digest('base64');
- return digest;
-};
-
-
-exports.generateNormalizedString = function (type, options) {
-
- var normalized = 'hawk.' + exports.headerVersion + '.' + type + '\n' +
- options.ts + '\n' +
- options.nonce + '\n' +
- options.method.toUpperCase() + '\n' +
- options.resource + '\n' +
- options.host.toLowerCase() + '\n' +
- options.port + '\n' +
- (options.hash || '') + '\n';
-
- if (options.ext) {
- normalized += options.ext.replace('\\', '\\\\').replace('\n', '\\n');
- }
-
- normalized += '\n';
-
- if (options.app) {
- normalized += options.app + '\n' +
- (options.dlg || '') + '\n';
- }
-
- return normalized;
-};
-
-
-exports.calculatePayloadHash = function (payload, algorithm, contentType) {
-
- var hash = exports.initializePayloadHash(algorithm, contentType);
- hash.update(payload || '');
- return exports.finalizePayloadHash(hash);
-};
-
-
-exports.initializePayloadHash = function (algorithm, contentType) {
-
- var hash = Crypto.createHash(algorithm);
- hash.update('hawk.' + exports.headerVersion + '.payload\n');
- hash.update(Utils.parseContentType(contentType) + '\n');
- return hash;
-};
-
-
-exports.finalizePayloadHash = function (hash) {
-
- hash.update('\n');
- return hash.digest('base64');
-};
-
-
-exports.calculateTsMac = function (ts, credentials) {
-
- var hmac = Crypto.createHmac(credentials.algorithm, credentials.key);
- hmac.update('hawk.' + exports.headerVersion + '.ts\n' + ts + '\n');
- return hmac.digest('base64');
-};
-
+// Load modules
+
+var Crypto = require('crypto');
+var Url = require('url');
+var Utils = require('./utils');
+
+
+// Declare internals
+
+var internals = {};
+
+
+// MAC normalization format version
+
+exports.headerVersion = '1'; // Prevent comparison of mac values generated with different normalized string formats
+
+
+// Supported HMAC algorithms
+
+exports.algorithms = ['sha1', 'sha256'];
+
+
+// Calculate the request MAC
+
+/*
+ type: 'header', // 'header', 'bewit', 'response'
+ credentials: {
+ key: 'aoijedoaijsdlaksjdl',
+ algorithm: 'sha256' // 'sha1', 'sha256'
+ },
+ options: {
+ method: 'GET',
+ resource: '/resource?a=1&b=2',
+ host: 'example.com',
+ port: 8080,
+ ts: 1357718381034,
+ nonce: 'd3d345f',
+ hash: 'U4MKKSmiVxk37JCCrAVIjV/OhB3y+NdwoCr6RShbVkE=',
+ ext: 'app-specific-data',
+ app: 'hf48hd83qwkj', // Application id (Oz)
+ dlg: 'd8djwekds9cj' // Delegated by application id (Oz), requires options.app
+ }
+*/
+
+exports.calculateMac = function (type, credentials, options) {
+
+ var normalized = exports.generateNormalizedString(type, options);
+
+ var hmac = Crypto.createHmac(credentials.algorithm, credentials.key).update(normalized);
+ var digest = hmac.digest('base64');
+ return digest;
+};
+
+
+exports.generateNormalizedString = function (type, options) {
+
+ var normalized = 'hawk.' + exports.headerVersion + '.' + type + '\n' +
+ options.ts + '\n' +
+ options.nonce + '\n' +
+ (options.method || '').toUpperCase() + '\n' +
+ (options.resource || '') + '\n' +
+ options.host.toLowerCase() + '\n' +
+ options.port + '\n' +
+ (options.hash || '') + '\n';
+
+ if (options.ext) {
+ normalized += options.ext.replace('\\', '\\\\').replace('\n', '\\n');
+ }
+
+ normalized += '\n';
+
+ if (options.app) {
+ normalized += options.app + '\n' +
+ (options.dlg || '') + '\n';
+ }
+
+ return normalized;
+};
+
+
+exports.calculatePayloadHash = function (payload, algorithm, contentType) {
+
+ var hash = exports.initializePayloadHash(algorithm, contentType);
+ hash.update(payload || '');
+ return exports.finalizePayloadHash(hash);
+};
+
+
+exports.initializePayloadHash = function (algorithm, contentType) {
+
+ var hash = Crypto.createHash(algorithm);
+ hash.update('hawk.' + exports.headerVersion + '.payload\n');
+ hash.update(Utils.parseContentType(contentType) + '\n');
+ return hash;
+};
+
+
+exports.finalizePayloadHash = function (hash) {
+
+ hash.update('\n');
+ return hash.digest('base64');
+};
+
+
+exports.calculateTsMac = function (ts, credentials) {
+
+ var hmac = Crypto.createHmac(credentials.algorithm, credentials.key);
+ hmac.update('hawk.' + exports.headerVersion + '.ts\n' + ts + '\n');
+ return hmac.digest('base64');
+};
+
diff --git a/deps/npm/node_modules/request/node_modules/hawk/lib/index.js b/deps/npm/node_modules/request/node_modules/hawk/lib/index.js
index 5c90e33fe..1d713cb61 100755
--- a/deps/npm/node_modules/request/node_modules/hawk/lib/index.js
+++ b/deps/npm/node_modules/request/node_modules/hawk/lib/index.js
@@ -1,15 +1,15 @@
-// Export sub-modules
-
-exports.error = exports.Error = require('boom');
-exports.sntp = require('sntp');
-exports.server = require('./server');
-exports.client = require('./client');
-exports.crypto = require('./crypto');
-exports.utils = require('./utils');
-
-exports.uri = {
- authenticate: exports.server.authenticateBewit,
- getBewit: exports.client.getBewit
-};
-
-
+// Export sub-modules
+
+exports.error = exports.Error = require('boom');
+exports.sntp = require('sntp');
+exports.server = require('./server');
+exports.client = require('./client');
+exports.crypto = require('./crypto');
+exports.utils = require('./utils');
+
+exports.uri = {
+ authenticate: exports.server.authenticateBewit,
+ getBewit: exports.client.getBewit
+};
+
+
diff --git a/deps/npm/node_modules/request/node_modules/hawk/lib/server.js b/deps/npm/node_modules/request/node_modules/hawk/lib/server.js
index ec9ce0d4c..478c47b39 100755
--- a/deps/npm/node_modules/request/node_modules/hawk/lib/server.js
+++ b/deps/npm/node_modules/request/node_modules/hawk/lib/server.js
@@ -1,424 +1,524 @@
-// Load modules
-
-var Boom = require('boom');
-var Hoek = require('hoek');
-var Cryptiles = require('cryptiles');
-var Crypto = require('./crypto');
-var Utils = require('./utils');
-
-
-// Declare internals
-
-var internals = {};
-
-
-// Hawk authentication
-
-/*
- req: node's HTTP request object or an object as follows:
-
- var request = {
- method: 'GET',
- url: '/resource/4?a=1&b=2',
- host: 'example.com',
- port: 8080,
- authorization: 'Hawk id="dh37fgj492je", ts="1353832234", nonce="j4h3g2", ext="some-app-ext-data", mac="6R4rV5iE+NPoym+WwjeHzjAGXUtLNIxmo1vpMofpLAE="'
- };
-
- credentialsFunc: required function to lookup the set of Hawk credentials based on the provided credentials id.
- The credentials include the MAC key, MAC algorithm, and other attributes (such as username)
- needed by the application. This function is the equivalent of verifying the username and
- password in Basic authentication.
-
- var credentialsFunc = function (id, callback) {
-
- // Lookup credentials in database
- db.lookup(id, function (err, item) {
-
- if (err || !item) {
- return callback(err);
- }
-
- var credentials = {
- // Required
- key: item.key,
- algorithm: item.algorithm,
- // Application specific
- user: item.user
- };
-
- return callback(null, credentials);
- });
- };
-
- options: {
-
- hostHeaderName: optional header field name, used to override the default 'Host' header when used
- behind a cache of a proxy. Apache2 changes the value of the 'Host' header while preserving
- the original (which is what the module must verify) in the 'x-forwarded-host' header field.
- Only used when passed a node Http.ServerRequest object.
-
- nonceFunc: optional nonce validation function. The function signature is function(nonce, ts, callback)
- where 'callback' must be called using the signature function(err).
-
- timestampSkewSec: optional number of seconds of permitted clock skew for incoming timestamps. Defaults to 60 seconds.
- Provides a +/- skew which means actual allowed window is double the number of seconds.
-
- localtimeOffsetMsec: optional local clock time offset express in a number of milliseconds (positive or negative).
- Defaults to 0.
-
- payload: optional payload for validation. The client calculates the hash value and includes it via the 'hash'
- header attribute. The server always ensures the value provided has been included in the request
- MAC. When this option is provided, it validates the hash value itself. Validation is done by calculating
- a hash value over the entire payload (assuming it has already be normalized to the same format and
- encoding used by the client to calculate the hash on request). If the payload is not available at the time
- of authentication, the authenticatePayload() method can be used by passing it the credentials and
- attributes.hash returned in the authenticate callback.
- }
-
- callback: function (err, credentials, artifacts) { }
- */
-
-exports.authenticate = function (req, credentialsFunc, options, callback) {
-
- callback = Utils.nextTick(callback);
-
- // Default options
-
- options.nonceFunc = options.nonceFunc || function (nonce, ts, nonceCallback) { return nonceCallback(); }; // No validation
- options.timestampSkewSec = options.timestampSkewSec || 60; // 60 seconds
-
- // Application time
-
- var now = Utils.now() + (options.localtimeOffsetMsec || 0); // Measure now before any other processing
-
- // Convert node Http request object to a request configuration object
-
- var request = Utils.parseRequest(req, options);
- if (request instanceof Error) {
- return callback(Boom.badRequest(request.message));
- }
-
- // Parse HTTP Authorization header
-
- var attributes = Utils.parseAuthorizationHeader(request.authorization);
- if (attributes instanceof Error) {
- return callback(attributes);
- }
-
- // Construct artifacts container
-
- var artifacts = {
- method: request.method,
- host: request.host,
- port: request.port,
- resource: request.url,
- ts: attributes.ts,
- nonce: attributes.nonce,
- hash: attributes.hash,
- ext: attributes.ext,
- app: attributes.app,
- dlg: attributes.dlg,
- mac: attributes.mac,
- id: attributes.id
- };
-
- // Verify required header attributes
-
- if (!attributes.id ||
- !attributes.ts ||
- !attributes.nonce ||
- !attributes.mac) {
-
- return callback(Boom.badRequest('Missing attributes'), null, artifacts);
- }
-
- // Fetch Hawk credentials
-
- credentialsFunc(attributes.id, function (err, credentials) {
-
- if (err) {
- return callback(err, credentials || null, artifacts);
- }
-
- if (!credentials) {
- return callback(Boom.unauthorized('Unknown credentials', 'Hawk'), null, artifacts);
- }
-
- if (!credentials.key ||
- !credentials.algorithm) {
-
- return callback(Boom.internal('Invalid credentials'), credentials, artifacts);
- }
-
- if (Crypto.algorithms.indexOf(credentials.algorithm) === -1) {
- return callback(Boom.internal('Unknown algorithm'), credentials, artifacts);
- }
-
- // Calculate MAC
-
- var mac = Crypto.calculateMac('header', credentials, artifacts);
- if (!Cryptiles.fixedTimeComparison(mac, attributes.mac)) {
- return callback(Boom.unauthorized('Bad mac', 'Hawk'), credentials, artifacts);
- }
-
- // Check payload hash
-
- if (options.payload !== null &&
- options.payload !== undefined) { // '' is valid
-
- if (!attributes.hash) {
- return callback(Boom.unauthorized('Missing required payload hash', 'Hawk'), credentials, artifacts);
- }
-
- var hash = Crypto.calculatePayloadHash(options.payload, credentials.algorithm, request.contentType);
- if (!Cryptiles.fixedTimeComparison(hash, attributes.hash)) {
- return callback(Boom.unauthorized('Bad payload hash', 'Hawk'), credentials, artifacts);
- }
- }
-
- // Check nonce
-
- options.nonceFunc(attributes.nonce, attributes.ts, function (err) {
-
- if (err) {
- return callback(Boom.unauthorized('Invalid nonce', 'Hawk'), credentials, artifacts);
- }
-
- // Check timestamp staleness
-
- if (Math.abs((attributes.ts * 1000) - now) > (options.timestampSkewSec * 1000)) {
- var fresh = Math.floor((Utils.now() + (options.localtimeOffsetMsec || 0)) / 1000); // Get fresh now
- var tsm = Crypto.calculateTsMac(fresh, credentials);
- return callback(Boom.unauthorized('Stale timestamp', 'Hawk', { ts: fresh, tsm: tsm }), credentials, artifacts);
- }
-
- // Successful authentication
-
- return callback(null, credentials, artifacts);
- });
- });
-};
-
-
-// Authenticate payload hash - used when payload cannot be provided during authenticate()
-
-/*
- payload: raw request payload
- credentials: from authenticate callback
- artifacts: from authenticate callback
- contentType: req.headers['content-type']
-*/
-
-exports.authenticatePayload = function (payload, credentials, artifacts, contentType) {
-
- var calculatedHash = Crypto.calculatePayloadHash(payload, credentials.algorithm, contentType);
- return Cryptiles.fixedTimeComparison(calculatedHash, artifacts.hash);
-};
-
-
-// Generate a Server-Authorization header for a given response
-
-/*
- credentials: {}, // Object received from authenticate()
- artifacts: {} // Object received from authenticate(); 'mac', 'hash', and 'ext' - ignored
- options: {
- ext: 'application-specific', // Application specific data sent via the ext attribute
- payload: '{"some":"payload"}', // UTF-8 encoded string for body hash generation (ignored if hash provided)
- contentType: 'application/json', // Payload content-type (ignored if hash provided)
- hash: 'U4MKKSmiVxk37JCCrAVIjV=' // Pre-calculated payload hash
- }
-*/
-
-exports.header = function (credentials, artifacts, options) {
-
- // Prepare inputs
-
- options = options || {};
-
- if (!artifacts ||
- typeof artifacts !== 'object' ||
- typeof options !== 'object') {
-
- return '';
- }
-
- artifacts = Hoek.clone(artifacts);
- delete artifacts.mac;
- artifacts.hash = options.hash;
- artifacts.ext = options.ext;
-
- // Validate credentials
-
- if (!credentials ||
- !credentials.key ||
- !credentials.algorithm) {
-
- // Invalid credential object
- return '';
- }
-
- if (Crypto.algorithms.indexOf(credentials.algorithm) === -1) {
- return '';
- }
-
- // Calculate payload hash
-
- if (!artifacts.hash &&
- options.hasOwnProperty('payload')) {
-
- artifacts.hash = Crypto.calculatePayloadHash(options.payload, credentials.algorithm, options.contentType);
- }
-
- var mac = Crypto.calculateMac('response', credentials, artifacts);
-
- // Construct header
-
- var header = 'Hawk mac="' + mac + '"' +
- (artifacts.hash ? ', hash="' + artifacts.hash + '"' : '');
-
- if (artifacts.ext !== null &&
- artifacts.ext !== undefined &&
- artifacts.ext !== '') { // Other falsey values allowed
-
- header += ', ext="' + Utils.escapeHeaderAttribute(artifacts.ext) + '"';
- }
-
- return header;
-};
-
-
-/*
- * Arguments and options are the same as index.js with the exception that the only supported options are:
- * 'hostHeaderName', 'localtimeOffsetMsec'
- */
-
-exports.authenticateBewit = function (req, credentialsFunc, options, callback) {
-
- callback = Utils.nextTick(callback);
-
- // Application time
-
- var now = Utils.now() + (options.localtimeOffsetMsec || 0);
-
- // Convert node Http request object to a request configuration object
-
- var request = Utils.parseRequest(req, options);
- if (request instanceof Error) {
- return callback(Boom.badRequest(request.message));
- }
-
- // Extract bewit
-
- // 1 2 3 4
- var resource = request.url.match(/^(\/.*)([\?&])bewit\=([^&$]*)(?:&(.+))?$/);
- if (!resource) {
- return callback(Boom.unauthorized(null, 'Hawk'));
- }
-
- // Bewit not empty
-
- if (!resource[3]) {
- return callback(Boom.unauthorized('Empty bewit', 'Hawk'));
- }
-
- // Verify method is GET
-
- if (request.method !== 'GET' &&
- request.method !== 'HEAD') {
-
- return callback(Boom.unauthorized('Invalid method', 'Hawk'));
- }
-
- // No other authentication
-
- if (request.authorization) {
- return callback(Boom.badRequest('Multiple authentications', 'Hawk'));
- }
-
- // Parse bewit
-
- var bewitString = Utils.base64urlDecode(resource[3]);
- if (bewitString instanceof Error) {
- return callback(Boom.badRequest('Invalid bewit encoding'));
- }
-
- // Bewit format: id\exp\mac\ext ('\' is used because it is a reserved header attribute character)
-
- var bewitParts = bewitString.split('\\');
- if (!bewitParts ||
- bewitParts.length !== 4) {
-
- return callback(Boom.badRequest('Invalid bewit structure'));
- }
-
- var bewit = {
- id: bewitParts[0],
- exp: parseInt(bewitParts[1], 10),
- mac: bewitParts[2],
- ext: bewitParts[3] || ''
- };
-
- if (!bewit.id ||
- !bewit.exp ||
- !bewit.mac) {
-
- return callback(Boom.badRequest('Missing bewit attributes'));
- }
-
- // Construct URL without bewit
-
- var url = resource[1];
- if (resource[4]) {
- url += resource[2] + resource[4];
- }
-
- // Check expiration
-
- if (bewit.exp * 1000 <= now) {
- return callback(Boom.unauthorized('Access expired', 'Hawk'), null, bewit);
- }
-
- // Fetch Hawk credentials
-
- credentialsFunc(bewit.id, function (err, credentials) {
-
- if (err) {
- return callback(err, credentials || null, bewit.ext);
- }
-
- if (!credentials) {
- return callback(Boom.unauthorized('Unknown credentials', 'Hawk'), null, bewit);
- }
-
- if (!credentials.key ||
- !credentials.algorithm) {
-
- return callback(Boom.internal('Invalid credentials'), credentials, bewit);
- }
-
- if (Crypto.algorithms.indexOf(credentials.algorithm) === -1) {
- return callback(Boom.internal('Unknown algorithm'), credentials, bewit);
- }
-
- // Calculate MAC
-
- var mac = Crypto.calculateMac('bewit', credentials, {
- ts: bewit.exp,
- nonce: '',
- method: 'GET',
- resource: url,
- host: request.host,
- port: request.port,
- ext: bewit.ext
- });
-
- if (!Cryptiles.fixedTimeComparison(mac, bewit.mac)) {
- return callback(Boom.unauthorized('Bad mac', 'Hawk'), credentials, bewit);
- }
-
- // Successful authentication
-
- return callback(null, credentials, bewit);
- });
-};
+// Load modules
+
+var Boom = require('boom');
+var Hoek = require('hoek');
+var Cryptiles = require('cryptiles');
+var Crypto = require('./crypto');
+var Utils = require('./utils');
+
+
+// Declare internals
+
+var internals = {};
+
+
+// Hawk authentication
+
+/*
+ req: node's HTTP request object or an object as follows:
+
+ var request = {
+ method: 'GET',
+ url: '/resource/4?a=1&b=2',
+ host: 'example.com',
+ port: 8080,
+ authorization: 'Hawk id="dh37fgj492je", ts="1353832234", nonce="j4h3g2", ext="some-app-ext-data", mac="6R4rV5iE+NPoym+WwjeHzjAGXUtLNIxmo1vpMofpLAE="'
+ };
+
+ credentialsFunc: required function to lookup the set of Hawk credentials based on the provided credentials id.
+ The credentials include the MAC key, MAC algorithm, and other attributes (such as username)
+ needed by the application. This function is the equivalent of verifying the username and
+ password in Basic authentication.
+
+ var credentialsFunc = function (id, callback) {
+
+ // Lookup credentials in database
+ db.lookup(id, function (err, item) {
+
+ if (err || !item) {
+ return callback(err);
+ }
+
+ var credentials = {
+ // Required
+ key: item.key,
+ algorithm: item.algorithm,
+ // Application specific
+ user: item.user
+ };
+
+ return callback(null, credentials);
+ });
+ };
+
+ options: {
+
+ hostHeaderName: optional header field name, used to override the default 'Host' header when used
+ behind a cache of a proxy. Apache2 changes the value of the 'Host' header while preserving
+ the original (which is what the module must verify) in the 'x-forwarded-host' header field.
+ Only used when passed a node Http.ServerRequest object.
+
+ nonceFunc: optional nonce validation function. The function signature is function(nonce, ts, callback)
+ where 'callback' must be called using the signature function(err).
+
+ timestampSkewSec: optional number of seconds of permitted clock skew for incoming timestamps. Defaults to 60 seconds.
+ Provides a +/- skew which means actual allowed window is double the number of seconds.
+
+ localtimeOffsetMsec: optional local clock time offset express in a number of milliseconds (positive or negative).
+ Defaults to 0.
+
+ payload: optional payload for validation. The client calculates the hash value and includes it via the 'hash'
+ header attribute. The server always ensures the value provided has been included in the request
+ MAC. When this option is provided, it validates the hash value itself. Validation is done by calculating
+ a hash value over the entire payload (assuming it has already be normalized to the same format and
+ encoding used by the client to calculate the hash on request). If the payload is not available at the time
+ of authentication, the authenticatePayload() method can be used by passing it the credentials and
+ attributes.hash returned in the authenticate callback.
+
+ host: optional host name override. Only used when passed a node request object.
+ port: optional port override. Only used when passed a node request object.
+ }
+
+ callback: function (err, credentials, artifacts) { }
+ */
+
+exports.authenticate = function (req, credentialsFunc, options, callback) {
+
+ callback = Utils.nextTick(callback);
+
+ // Default options
+
+ options.nonceFunc = options.nonceFunc || function (nonce, ts, nonceCallback) { return nonceCallback(); }; // No validation
+ options.timestampSkewSec = options.timestampSkewSec || 60; // 60 seconds
+
+ // Application time
+
+ var now = Utils.now() + (options.localtimeOffsetMsec || 0); // Measure now before any other processing
+
+ // Convert node Http request object to a request configuration object
+
+ var request = Utils.parseRequest(req, options);
+ if (request instanceof Error) {
+ return callback(Boom.badRequest(request.message));
+ }
+
+ // Parse HTTP Authorization header
+
+ var attributes = Utils.parseAuthorizationHeader(request.authorization);
+ if (attributes instanceof Error) {
+ return callback(attributes);
+ }
+
+ // Construct artifacts container
+
+ var artifacts = {
+ method: request.method,
+ host: request.host,
+ port: request.port,
+ resource: request.url,
+ ts: attributes.ts,
+ nonce: attributes.nonce,
+ hash: attributes.hash,
+ ext: attributes.ext,
+ app: attributes.app,
+ dlg: attributes.dlg,
+ mac: attributes.mac,
+ id: attributes.id
+ };
+
+ // Verify required header attributes
+
+ if (!attributes.id ||
+ !attributes.ts ||
+ !attributes.nonce ||
+ !attributes.mac) {
+
+ return callback(Boom.badRequest('Missing attributes'), null, artifacts);
+ }
+
+ // Fetch Hawk credentials
+
+ credentialsFunc(attributes.id, function (err, credentials) {
+
+ if (err) {
+ return callback(err, credentials || null, artifacts);
+ }
+
+ if (!credentials) {
+ return callback(Boom.unauthorized('Unknown credentials', 'Hawk'), null, artifacts);
+ }
+
+ if (!credentials.key ||
+ !credentials.algorithm) {
+
+ return callback(Boom.internal('Invalid credentials'), credentials, artifacts);
+ }
+
+ if (Crypto.algorithms.indexOf(credentials.algorithm) === -1) {
+ return callback(Boom.internal('Unknown algorithm'), credentials, artifacts);
+ }
+
+ // Calculate MAC
+
+ var mac = Crypto.calculateMac('header', credentials, artifacts);
+ if (!Cryptiles.fixedTimeComparison(mac, attributes.mac)) {
+ return callback(Boom.unauthorized('Bad mac', 'Hawk'), credentials, artifacts);
+ }
+
+ // Check payload hash
+
+ if (options.payload !== null &&
+ options.payload !== undefined) { // '' is valid
+
+ if (!attributes.hash) {
+ return callback(Boom.unauthorized('Missing required payload hash', 'Hawk'), credentials, artifacts);
+ }
+
+ var hash = Crypto.calculatePayloadHash(options.payload, credentials.algorithm, request.contentType);
+ if (!Cryptiles.fixedTimeComparison(hash, attributes.hash)) {
+ return callback(Boom.unauthorized('Bad payload hash', 'Hawk'), credentials, artifacts);
+ }
+ }
+
+ // Check nonce
+
+ options.nonceFunc(attributes.nonce, attributes.ts, function (err) {
+
+ if (err) {
+ return callback(Boom.unauthorized('Invalid nonce', 'Hawk'), credentials, artifacts);
+ }
+
+ // Check timestamp staleness
+
+ if (Math.abs((attributes.ts * 1000) - now) > (options.timestampSkewSec * 1000)) {
+ var fresh = Math.floor((Utils.now() + (options.localtimeOffsetMsec || 0)) / 1000); // Get fresh now
+ var tsm = Crypto.calculateTsMac(fresh, credentials);
+ return callback(Boom.unauthorized('Stale timestamp', 'Hawk', { ts: fresh, tsm: tsm }), credentials, artifacts);
+ }
+
+ // Successful authentication
+
+ return callback(null, credentials, artifacts);
+ });
+ });
+};
+
+
+// Authenticate payload hash - used when payload cannot be provided during authenticate()
+
+/*
+ payload: raw request payload
+ credentials: from authenticate callback
+ artifacts: from authenticate callback
+ contentType: req.headers['content-type']
+*/
+
+exports.authenticatePayload = function (payload, credentials, artifacts, contentType) {
+
+ var calculatedHash = Crypto.calculatePayloadHash(payload, credentials.algorithm, contentType);
+ return Cryptiles.fixedTimeComparison(calculatedHash, artifacts.hash);
+};
+
+
+// Generate a Server-Authorization header for a given response
+
+/*
+ credentials: {}, // Object received from authenticate()
+ artifacts: {} // Object received from authenticate(); 'mac', 'hash', and 'ext' - ignored
+ options: {
+ ext: 'application-specific', // Application specific data sent via the ext attribute
+ payload: '{"some":"payload"}', // UTF-8 encoded string for body hash generation (ignored if hash provided)
+ contentType: 'application/json', // Payload content-type (ignored if hash provided)
+ hash: 'U4MKKSmiVxk37JCCrAVIjV=' // Pre-calculated payload hash
+ }
+*/
+
+exports.header = function (credentials, artifacts, options) {
+
+ // Prepare inputs
+
+ options = options || {};
+
+ if (!artifacts ||
+ typeof artifacts !== 'object' ||
+ typeof options !== 'object') {
+
+ return '';
+ }
+
+ artifacts = Hoek.clone(artifacts);
+ delete artifacts.mac;
+ artifacts.hash = options.hash;
+ artifacts.ext = options.ext;
+
+ // Validate credentials
+
+ if (!credentials ||
+ !credentials.key ||
+ !credentials.algorithm) {
+
+ // Invalid credential object
+ return '';
+ }
+
+ if (Crypto.algorithms.indexOf(credentials.algorithm) === -1) {
+ return '';
+ }
+
+ // Calculate payload hash
+
+ if (!artifacts.hash &&
+ options.hasOwnProperty('payload')) {
+
+ artifacts.hash = Crypto.calculatePayloadHash(options.payload, credentials.algorithm, options.contentType);
+ }
+
+ var mac = Crypto.calculateMac('response', credentials, artifacts);
+
+ // Construct header
+
+ var header = 'Hawk mac="' + mac + '"' +
+ (artifacts.hash ? ', hash="' + artifacts.hash + '"' : '');
+
+ if (artifacts.ext !== null &&
+ artifacts.ext !== undefined &&
+ artifacts.ext !== '') { // Other falsey values allowed
+
+ header += ', ext="' + Utils.escapeHeaderAttribute(artifacts.ext) + '"';
+ }
+
+ return header;
+};
+
+
+/*
+ * Arguments and options are the same as authenticate() with the exception that the only supported options are:
+ * 'hostHeaderName', 'localtimeOffsetMsec', 'host', 'port'
+ */
+
+exports.authenticateBewit = function (req, credentialsFunc, options, callback) {
+
+ callback = Utils.nextTick(callback);
+
+ // Application time
+
+ var now = Utils.now() + (options.localtimeOffsetMsec || 0);
+
+ // Convert node Http request object to a request configuration object
+
+ var request = Utils.parseRequest(req, options);
+ if (request instanceof Error) {
+ return callback(Boom.badRequest(request.message));
+ }
+
+ // Extract bewit
+
+ // 1 2 3 4
+ var resource = request.url.match(/^(\/.*)([\?&])bewit\=([^&$]*)(?:&(.+))?$/);
+ if (!resource) {
+ return callback(Boom.unauthorized(null, 'Hawk'));
+ }
+
+ // Bewit not empty
+
+ if (!resource[3]) {
+ return callback(Boom.unauthorized('Empty bewit', 'Hawk'));
+ }
+
+ // Verify method is GET
+
+ if (request.method !== 'GET' &&
+ request.method !== 'HEAD') {
+
+ return callback(Boom.unauthorized('Invalid method', 'Hawk'));
+ }
+
+ // No other authentication
+
+ if (request.authorization) {
+ return callback(Boom.badRequest('Multiple authentications', 'Hawk'));
+ }
+
+ // Parse bewit
+
+ var bewitString = Utils.base64urlDecode(resource[3]);
+ if (bewitString instanceof Error) {
+ return callback(Boom.badRequest('Invalid bewit encoding'));
+ }
+
+ // Bewit format: id\exp\mac\ext ('\' is used because it is a reserved header attribute character)
+
+ var bewitParts = bewitString.split('\\');
+ if (!bewitParts ||
+ bewitParts.length !== 4) {
+
+ return callback(Boom.badRequest('Invalid bewit structure'));
+ }
+
+ var bewit = {
+ id: bewitParts[0],
+ exp: parseInt(bewitParts[1], 10),
+ mac: bewitParts[2],
+ ext: bewitParts[3] || ''
+ };
+
+ if (!bewit.id ||
+ !bewit.exp ||
+ !bewit.mac) {
+
+ return callback(Boom.badRequest('Missing bewit attributes'));
+ }
+
+ // Construct URL without bewit
+
+ var url = resource[1];
+ if (resource[4]) {
+ url += resource[2] + resource[4];
+ }
+
+ // Check expiration
+
+ if (bewit.exp * 1000 <= now) {
+ return callback(Boom.unauthorized('Access expired', 'Hawk'), null, bewit);
+ }
+
+ // Fetch Hawk credentials
+
+ credentialsFunc(bewit.id, function (err, credentials) {
+
+ if (err) {
+ return callback(err, credentials || null, bewit.ext);
+ }
+
+ if (!credentials) {
+ return callback(Boom.unauthorized('Unknown credentials', 'Hawk'), null, bewit);
+ }
+
+ if (!credentials.key ||
+ !credentials.algorithm) {
+
+ return callback(Boom.internal('Invalid credentials'), credentials, bewit);
+ }
+
+ if (Crypto.algorithms.indexOf(credentials.algorithm) === -1) {
+ return callback(Boom.internal('Unknown algorithm'), credentials, bewit);
+ }
+
+ // Calculate MAC
+
+ var mac = Crypto.calculateMac('bewit', credentials, {
+ ts: bewit.exp,
+ nonce: '',
+ method: 'GET',
+ resource: url,
+ host: request.host,
+ port: request.port,
+ ext: bewit.ext
+ });
+
+ if (!Cryptiles.fixedTimeComparison(mac, bewit.mac)) {
+ return callback(Boom.unauthorized('Bad mac', 'Hawk'), credentials, bewit);
+ }
+
+ // Successful authentication
+
+ return callback(null, credentials, bewit);
+ });
+};
+
+
+/*
+ * options are the same as authenticate() with the exception that the only supported options are:
+ * 'nonceFunc', 'timestampSkewSec', 'localtimeOffsetMsec'
+ */
+
+exports.authenticateMessage = function (host, port, message, authorization, credentialsFunc, options, callback) {
+
+ callback = Utils.nextTick(callback);
+
+ // Default options
+
+ options.nonceFunc = options.nonceFunc || function (nonce, ts, nonceCallback) { return nonceCallback(); }; // No validation
+ options.timestampSkewSec = options.timestampSkewSec || 60; // 60 seconds
+
+ // Application time
+
+ var now = Utils.now() + (options.localtimeOffsetMsec || 0); // Measure now before any other processing
+
+ // Validate authorization
+
+ if (!authorization.id ||
+ !authorization.ts ||
+ !authorization.nonce ||
+ !authorization.hash ||
+ !authorization.mac) {
+
+ return callback(Boom.badRequest('Invalid authorization'))
+ }
+
+ // Fetch Hawk credentials
+
+ credentialsFunc(authorization.id, function (err, credentials) {
+
+ if (err) {
+ return callback(err, credentials || null);
+ }
+
+ if (!credentials) {
+ return callback(Boom.unauthorized('Unknown credentials', 'Hawk'));
+ }
+
+ if (!credentials.key ||
+ !credentials.algorithm) {
+
+ return callback(Boom.internal('Invalid credentials'), credentials);
+ }
+
+ if (Crypto.algorithms.indexOf(credentials.algorithm) === -1) {
+ return callback(Boom.internal('Unknown algorithm'), credentials);
+ }
+
+ // Construct artifacts container
+
+ var artifacts = {
+ ts: authorization.ts,
+ nonce: authorization.nonce,
+ host: host,
+ port: port,
+ hash: authorization.hash
+ };
+
+ // Calculate MAC
+
+ var mac = Crypto.calculateMac('message', credentials, artifacts);
+ if (!Cryptiles.fixedTimeComparison(mac, authorization.mac)) {
+ return callback(Boom.unauthorized('Bad mac', 'Hawk'), credentials);
+ }
+
+ // Check payload hash
+
+ var hash = Crypto.calculatePayloadHash(message, credentials.algorithm);
+ if (!Cryptiles.fixedTimeComparison(hash, authorization.hash)) {
+ return callback(Boom.unauthorized('Bad message hash', 'Hawk'), credentials);
+ }
+
+ // Check nonce
+
+ options.nonceFunc(authorization.nonce, authorization.ts, function (err) {
+
+ if (err) {
+ return callback(Boom.unauthorized('Invalid nonce', 'Hawk'), credentials);
+ }
+
+ // Check timestamp staleness
+
+ if (Math.abs((authorization.ts * 1000) - now) > (options.timestampSkewSec * 1000)) {
+ return callback(Boom.unauthorized('Stale timestamp'), credentials);
+ }
+
+ // Successful authentication
+
+ return callback(null, credentials);
+ });
+ });
+};
diff --git a/deps/npm/node_modules/request/node_modules/hawk/lib/utils.js b/deps/npm/node_modules/request/node_modules/hawk/lib/utils.js
index 024adba12..c8938fe82 100755
--- a/deps/npm/node_modules/request/node_modules/hawk/lib/utils.js
+++ b/deps/npm/node_modules/request/node_modules/hawk/lib/utils.js
@@ -42,7 +42,14 @@ exports.parseHost = function (req, hostHeaderName) {
return null;
}
- var hostHeaderRegex = /^(?:(?:\r\n)?[\t ])*([^:]+)(?::(\d+))?(?:(?:\r\n)?[\t ])*$/; // Does not support IPv6
+ var hostHeaderRegex;
+ if (hostHeader[0] === '[') {
+ hostHeaderRegex = /^(?:(?:\r\n)?\s)*(\[[^\]]+\])(?::(\d+))?(?:(?:\r\n)?\s)*$/; // IPv6
+ }
+ else {
+ hostHeaderRegex = /^(?:(?:\r\n)?\s)*([^:]+)(?::(\d+))?(?:(?:\r\n)?\s)*$/; // IPv4, hostname
+ }
+
var hostParts = hostHeader.match(hostHeaderRegex);
if (!hostParts ||
@@ -78,19 +85,21 @@ exports.parseRequest = function (req, options) {
if (!req.headers) {
return req;
}
-
+
// Obtain host and port information
- var host = exports.parseHost(req, options.hostHeaderName);
- if (!host) {
- return new Error('Invalid Host header');
+ if (!options.host || !options.port) {
+ var host = exports.parseHost(req, options.hostHeaderName);
+ if (!host) {
+ return new Error('Invalid Host header');
+ }
}
var request = {
method: req.method,
url: req.url,
- host: host.name,
- port: host.port,
+ host: options.host || host.name,
+ port: options.port || host.port,
authorization: req.headers.authorization,
contentType: req.headers['content-type'] || ''
};
diff --git a/deps/npm/node_modules/request/node_modules/hawk/node_modules/boom/node_modules/hoek/.npmignore b/deps/npm/node_modules/request/node_modules/hawk/node_modules/boom/node_modules/hoek/.npmignore
deleted file mode 100644
index 9966e5e63..000000000
--- a/deps/npm/node_modules/request/node_modules/hawk/node_modules/boom/node_modules/hoek/.npmignore
+++ /dev/null
@@ -1,18 +0,0 @@
-.idea
-*.iml
-npm-debug.log
-dump.rdb
-node_modules
-results.tap
-results.xml
-npm-shrinkwrap.json
-config.json
-.DS_Store
-*/.DS_Store
-*/*/.DS_Store
-._*
-*/._*
-*/*/._*
-coverage.*
-lib-cov
-complexity.md
diff --git a/deps/npm/node_modules/request/node_modules/hawk/node_modules/boom/node_modules/hoek/.travis.yml b/deps/npm/node_modules/request/node_modules/hawk/node_modules/boom/node_modules/hoek/.travis.yml
deleted file mode 100755
index 40ca59eee..000000000
--- a/deps/npm/node_modules/request/node_modules/hawk/node_modules/boom/node_modules/hoek/.travis.yml
+++ /dev/null
@@ -1,5 +0,0 @@
-language: node_js
-
-node_js:
- - 0.10
-
diff --git a/deps/npm/node_modules/request/node_modules/hawk/node_modules/boom/node_modules/hoek/LICENSE b/deps/npm/node_modules/request/node_modules/hawk/node_modules/boom/node_modules/hoek/LICENSE
deleted file mode 100755
index 394adcff2..000000000
--- a/deps/npm/node_modules/request/node_modules/hawk/node_modules/boom/node_modules/hoek/LICENSE
+++ /dev/null
@@ -1,33 +0,0 @@
-Copyright (c) 2011-2013, Walmart.
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
- * Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- * Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
- * Neither the name of Walmart nor the
- names of its contributors may be used to endorse or promote products
- derived from this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
-ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-DISCLAIMED. IN NO EVENT SHALL WALMART BE LIABLE FOR ANY
-DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
-ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-
- * * *
-
-
-Portions of this project were initially based on Postmile, Copyright (c) 2011, Yahoo Inc.
-Postmile is published at https://github.com/yahoo/postmile and its licensing terms are
-published at https://github.com/yahoo/postmile/blob/master/LICENSE.
-
diff --git a/deps/npm/node_modules/request/node_modules/hawk/node_modules/boom/node_modules/hoek/Makefile b/deps/npm/node_modules/request/node_modules/hawk/node_modules/boom/node_modules/hoek/Makefile
deleted file mode 100755
index e605d6c04..000000000
--- a/deps/npm/node_modules/request/node_modules/hawk/node_modules/boom/node_modules/hoek/Makefile
+++ /dev/null
@@ -1,10 +0,0 @@
-test:
- @node node_modules/lab/bin/lab
-test-cov:
- @node node_modules/lab/bin/lab -r threshold -t 100
-test-cov-html:
- @node node_modules/lab/bin/lab -r html -o coverage.html
-complexity:
- @node node_modules/complexity-report/src/cli.js -o complexity.md -f markdown lib
-
-.PHONY: test test-cov test-cov-html complexity
diff --git a/deps/npm/node_modules/request/node_modules/hawk/node_modules/boom/node_modules/hoek/README.md b/deps/npm/node_modules/request/node_modules/hawk/node_modules/boom/node_modules/hoek/README.md
deleted file mode 100755
index ac64e2fda..000000000
--- a/deps/npm/node_modules/request/node_modules/hawk/node_modules/boom/node_modules/hoek/README.md
+++ /dev/null
@@ -1,436 +0,0 @@
-<a href="https://github.com/spumko"><img src="https://raw.github.com/spumko/spumko/master/images/from.png" align="right" /></a>
-![hoek Logo](https://raw.github.com/spumko/hoek/master/images/hoek.png)
-
-General purpose node utilities
-
-[![Build Status](https://secure.travis-ci.org/spumko/hoek.png)](http://travis-ci.org/spumko/hoek)
-
-# Table of Contents
-
-* [Introduction](#introduction "Introduction")
-* [Object](#object "Object")
- * [clone](#cloneobj "clone")
- * [merge](#mergetarget-source-isnulloverride-ismergearrays "merge")
- * [applyToDefaults](#applytodefaultsdefaults-options "applyToDefaults")
- * [unique](#uniquearray-key "unique")
- * [mapToObject](#maptoobjectarray-key "mapToObject")
- * [intersect](#intersectarray1-array2 "intersect")
- * [matchKeys](#matchkeysobj-keys "matchKeys")
- * [flatten](#flattenarray-target "flatten")
- * [removeKeys](#removekeysobject-keys "removeKeys")
- * [reach](#reachobj-chain "reach")
- * [inheritAsync](#inheritasyncself-obj-keys "inheritAsync")
- * [rename](#renameobj-from-to "rename")
-* [Timer](#timer "Timer")
-* [Binary Encoding/Decoding](#binary "Binary Encoding/Decoding")
- * [base64urlEncode](#binary64urlEncodevalue "binary64urlEncode")
- * [base64urlDecode](#binary64urlDecodevalue "binary64urlDecode")
-* [Escaping Characters](#escaped "Escaping Characters")
- * [escapeHtml](#escapeHtmlstring "escapeHtml")
- * [escapeHeaderAttribute](#escapeHeaderAttributeattribute "escapeHeaderAttribute")
- * [escapeRegex](#escapeRegexstring "escapeRegex")
-* [Errors](#errors "Errors")
- * [assert](#assertmessage "assert")
- * [abort](#abortmessage "abort")
- * [displayStack](#displayStackslice "displayStack")
- * [callStack](#callStackslice "callStack")
- * [toss](#tosscondition "toss")
-* [Load files](#load-files "Load Files")
- * [loadPackage](#loadPackagedir "loadpackage")
- * [loadDirModules](#loadDirModulespath-excludefiles-target "loaddirmodules")
-
-
-
-# Introduction
-
-The *Hoek* general purpose node utilities library is used to aid in a variety of manners. It comes with useful methods for Arrays (clone, merge, applyToDefaults), Objects (removeKeys, copy), Asserting and more.
-
-For example, to use Hoek to set configuration with default options:
-```javascript
-var Hoek = require('hoek');
-
-var default = {url : "www.github.com", port : "8000", debug : true}
-
-var config = Hoek.applyToDefaults(default, {port : "3000", admin : true});
-
-// In this case, config would be { url: 'www.github.com', port: '3000', debug: true, admin: true }
-```
-
-Under each of the sections (such as Array), there are subsections which correspond to Hoek methods. Each subsection will explain how to use the corresponding method. In each js excerpt below, the var Hoek = require('hoek') is omitted for brevity.
-
-## Object
-
-Hoek provides several helpful methods for objects and arrays.
-
-### clone(obj)
-
-This method is used to clone an object or an array. A *deep copy* is made (duplicates everything, including values that are objects).
-
-```javascript
-
-var nestedObj = {
- w: /^something$/ig,
- x: {
- a: [1, 2, 3],
- b: 123456,
- c: new Date()
- },
- y: 'y',
- z: new Date()
- };
-
-var copy = Hoek.clone(nestedObj);
-
-copy.x.b = 100;
-
-console.log(copy.y) // results in 'y'
-console.log(nestedObj.x.b) // results in 123456
-console.log(copy.x.b) // results in 100
-```
-
-### merge(target, source, isNullOverride, isMergeArrays)
-isNullOverride, isMergeArrays default to true
-
-Merge all the properties of source into target, source wins in conflic, and by default null and undefined from source are applied
-
-
-```javascript
-
-var target = {a: 1, b : 2}
-var source = {a: 0, c: 5}
-var source2 = {a: null, c: 5}
-
-var targetArray = [1, 2, 3];
-var sourceArray = [4, 5];
-
-var newTarget = Hoek.merge(target, source); // results in {a: 0, b: 2, c: 5}
-newTarget = Hoek.merge(target, source2); // results in {a: null, b: 2, c: 5}
-newTarget = Hoek.merge(target, source2, false); // results in {a: 1, b: 2, c: 5}
-
-newTarget = Hoek.merge(targetArray, sourceArray) // results in [1, 2, 3, 4, 5]
-newTarget = Hoek.merge(targetArray, sourceArray, true, false) // results in [4, 5]
-
-
-
-
-```
-
-### applyToDefaults(defaults, options)
-
-Apply options to a copy of the defaults
-
-```javascript
-
-var defaults = {host: "localhost", port: 8000};
-var options = {port: 8080};
-
-var config = Hoek.applyToDefaults(defaults, options); // results in {host: "localhost", port: 8080};
-
-
-```
-
-### unique(array, key)
-
-Remove duplicate items from Array
-
-```javascript
-
-var array = [1, 2, 2, 3, 3, 4, 5, 6];
-
-var newArray = Hoek.unique(array); // results in [1,2,3,4,5,6];
-
-array = [{id: 1}, {id: 1}, {id: 2}];
-
-newArray = Hoek.unique(array, "id") // results in [{id: 1}, {id: 2}]
-
-```
-
-### mapToObject(array, key)
-
-Convert an Array into an Object
-
-```javascript
-
-var array = [1,2,3];
-var newObject = Hoek.mapToObject(array); // results in [{"1": true}, {"2": true}, {"3": true}]
-
-array = [{id: 1}, {id: 2}];
-newObject = Hoek.mapToObject(array, "id") // results in [{"id": 1}, {"id": 2}]
-
-```
-### intersect(array1, array2)
-
-Find the common unique items in two arrays
-
-```javascript
-
-var array1 = [1, 2, 3];
-var array2 = [1, 4, 5];
-
-var newArray = Hoek.intersect(array1, array2) // results in [1]
-
-```
-
-### matchKeys(obj, keys)
-
-Find which keys are present
-
-```javascript
-
-var obj = {a: 1, b: 2, c: 3};
-var keys = ["a", "e"];
-
-Hoek.matchKeys(obj, keys) // returns ["a"]
-
-```
-
-### flatten(array, target)
-
-Flatten an array
-
-```javascript
-
-var array = [1, 2, 3];
-var target = [4, 5];
-
-var flattenedArray = Hoek.flatten(array, target) // results in [4, 5, 1, 2, 3];
-
-```
-
-### removeKeys(object, keys)
-
-Remove keys
-
-```javascript
-
-var object = {a: 1, b: 2, c: 3, d: 4};
-
-var keys = ["a", "b"];
-
-Hoek.removeKeys(object, keys) // object is now {c: 3, d: 4}
-
-```
-
-### reach(obj, chain)
-
-Converts an object key chain string to reference
-
-```javascript
-
-var chain = 'a.b.c';
-var obj = {a : {b : { c : 1}}};
-
-Hoek.reach(obj, chain) // returns 1
-
-```
-
-### inheritAsync(self, obj, keys)
-
-Inherits a selected set of methods from an object, wrapping functions in asynchronous syntax and catching errors
-
-```javascript
-
-var targetFunc = function () { };
-
-var proto = {
- a: function () {
- return 'a!';
- },
- b: function () {
- return 'b!';
- },
- c: function () {
- throw new Error('c!');
- }
- };
-
-var keys = ['a', 'c'];
-
-Hoek.inheritAsync(targetFunc, proto, ['a', 'c']);
-
-var target = new targetFunc();
-
-target.a(function(err, result){console.log(result)} // returns 'a!'
-
-target.c(function(err, result){console.log(result)} // returns undefined
-
-target.b(function(err, result){console.log(result)} // gives error: Object [object Object] has no method 'b'
-
-```
-
-### rename(obj, from, to)
-
-Rename a key of an object
-
-```javascript
-
-var obj = {a : 1, b : 2};
-
-Hoek.rename(obj, "a", "c"); // obj is now {c : 1, b : 2}
-
-```
-
-
-# Timer
-
-A Timer object. Initializing a new timer object sets the ts to the number of milliseconds elapsed since 1 January 1970 00:00:00 UTC.
-
-```javascript
-
-
-example :
-
-
-var timerObj = new Hoek.Timer();
-console.log("Time is now: " + timerObj.ts)
-console.log("Elapsed time from initialization: " + timerObj.elapsed() + 'milliseconds')
-
-```
-
-# Binary Encoding/Decoding
-
-### base64urlEncode(value)
-
-Encodes value in Base64 or URL encoding
-
-### base64urlDecode(value)
-
-Decodes data in Base64 or URL encoding.
-# Escaping Characters
-
-Hoek provides convenient methods for escaping html characters. The escaped characters are as followed:
-
-```javascript
-
-internals.htmlEscaped = {
- '&': '&amp;',
- '<': '&lt;',
- '>': '&gt;',
- '"': '&quot;',
- "'": '&#x27;',
- '`': '&#x60;'
-};
-
-```
-
-### escapeHtml(string)
-
-```javascript
-
-var string = '<html> hey </html>';
-var escapedString = Hoek.escapeHtml(string); // returns &lt;html&gt; hey &lt;/html&gt;
-
-```
-
-### escapeHeaderAttribute(attribute)
-
-Escape attribute value for use in HTTP header
-
-```javascript
-
-var a = Hoek.escapeHeaderAttribute('I said "go w\\o me"'); //returns I said \"go w\\o me\"
-
-
-```
-
-
-### escapeRegex(string)
-
-Escape string for Regex construction
-
-```javascript
-
-var a = Hoek.escapeRegex('4^f$s.4*5+-_?%=#!:@|~\\/`"(>)[<]d{}s,'); // returns 4\^f\$s\.4\*5\+\-_\?%\=#\!\:@\|~\\\/`"\(>\)\[<\]d\{\}s\,
-
-
-
-```
-
-# Errors
-
-### assert(message)
-
-```javascript
-
-var a = 1, b =2;
-
-Hoek.assert(a === b, 'a should equal b'); // ABORT: a should equal b
-
-```
-
-### abort(message)
-
-First checks if process.env.NODE_ENV === 'test', and if so, throws error message. Otherwise,
-displays most recent stack and then exits process.
-
-
-
-### displayStack(slice)
-
-Displays the trace stack
-
-```javascript
-
-var stack = Hoek.displayStack();
-console.log(stack) // returns something like:
-
-[ 'null (/Users/user/Desktop/hoek/test.js:4:18)',
- 'Module._compile (module.js:449:26)',
- 'Module._extensions..js (module.js:467:10)',
- 'Module.load (module.js:356:32)',
- 'Module._load (module.js:312:12)',
- 'Module.runMain (module.js:492:10)',
- 'startup.processNextTick.process._tickCallback (node.js:244:9)' ]
-
-```
-
-### callStack(slice)
-
-Returns a trace stack array.
-
-```javascript
-
-var stack = Hoek.callStack();
-console.log(stack) // returns something like:
-
-[ [ '/Users/user/Desktop/hoek/test.js', 4, 18, null, false ],
- [ 'module.js', 449, 26, 'Module._compile', false ],
- [ 'module.js', 467, 10, 'Module._extensions..js', false ],
- [ 'module.js', 356, 32, 'Module.load', false ],
- [ 'module.js', 312, 12, 'Module._load', false ],
- [ 'module.js', 492, 10, 'Module.runMain', false ],
- [ 'node.js',
- 244,
- 9,
- 'startup.processNextTick.process._tickCallback',
- false ] ]
-
-
-```
-
-### toss(condition)
-
-toss(condition /*, [message], callback */)
-
-Return an error as first argument of a callback
-
-
-# Load Files
-
-### loadPackage(dir)
-
-Load and parse package.json process root or given directory
-
-```javascript
-
-var pack = Hoek.loadPackage(); // pack.name === 'hoek'
-
-```
-
-### loadDirModules(path, excludeFiles, target)
-
-Loads modules from a given path; option to exclude files (array).
-
-
-
-
diff --git a/deps/npm/node_modules/request/node_modules/hawk/node_modules/boom/node_modules/hoek/images/hoek.png b/deps/npm/node_modules/request/node_modules/hawk/node_modules/boom/node_modules/hoek/images/hoek.png
deleted file mode 100755
index 6ccfcb12b..000000000
--- a/deps/npm/node_modules/request/node_modules/hawk/node_modules/boom/node_modules/hoek/images/hoek.png
+++ /dev/null
Binary files differ
diff --git a/deps/npm/node_modules/request/node_modules/hawk/node_modules/boom/node_modules/hoek/index.js b/deps/npm/node_modules/request/node_modules/hawk/node_modules/boom/node_modules/hoek/index.js
deleted file mode 100755
index 4cc88b358..000000000
--- a/deps/npm/node_modules/request/node_modules/hawk/node_modules/boom/node_modules/hoek/index.js
+++ /dev/null
@@ -1 +0,0 @@
-module.exports = require('./lib'); \ No newline at end of file
diff --git a/deps/npm/node_modules/request/node_modules/hawk/node_modules/boom/node_modules/hoek/lib/escape.js b/deps/npm/node_modules/request/node_modules/hawk/node_modules/boom/node_modules/hoek/lib/escape.js
deleted file mode 100755
index 666b3dc82..000000000
--- a/deps/npm/node_modules/request/node_modules/hawk/node_modules/boom/node_modules/hoek/lib/escape.js
+++ /dev/null
@@ -1,132 +0,0 @@
-// Declare internals
-
-var internals = {};
-
-
-exports.escapeJavaScript = function (input) {
-
- if (!input) {
- return '';
- }
-
- var escaped = '';
-
- for (var i = 0, il = input.length; i < il; ++i) {
-
- var charCode = input.charCodeAt(i);
-
- if (internals.isSafe(charCode)) {
- escaped += input[i];
- }
- else {
- escaped += internals.escapeJavaScriptChar(charCode);
- }
- }
-
- return escaped;
-};
-
-
-exports.escapeHtml = function (input) {
-
- if (!input) {
- return '';
- }
-
- var escaped = '';
-
- for (var i = 0, il = input.length; i < il; ++i) {
-
- var charCode = input.charCodeAt(i);
-
- if (internals.isSafe(charCode)) {
- escaped += input[i];
- }
- else {
- escaped += internals.escapeHtmlChar(charCode);
- }
- }
-
- return escaped;
-};
-
-
-internals.escapeJavaScriptChar = function (charCode) {
-
- if (charCode >= 256) {
- return '\\u' + internals.padLeft('' + charCode, 4);
- }
-
- var hexValue = new Buffer(String.fromCharCode(charCode), 'ascii').toString('hex');
- return '\\x' + internals.padLeft(hexValue, 2);
-};
-
-
-internals.escapeHtmlChar = function (charCode) {
-
- var namedEscape = internals.namedHtml[charCode];
- if (typeof namedEscape !== 'undefined') {
- return namedEscape;
- }
-
- if (charCode >= 256) {
- return '&#' + charCode + ';';
- }
-
- var hexValue = new Buffer(String.fromCharCode(charCode), 'ascii').toString('hex');
- return '&#x' + internals.padLeft(hexValue, 2) + ';';
-};
-
-
-internals.padLeft = function (str, len) {
-
- while (str.length < len) {
- str = '0' + str;
- }
-
- return str;
-};
-
-
-internals.isSafe = function (charCode) {
-
- return (typeof internals.safeCharCodes[charCode] !== 'undefined');
-};
-
-
-internals.namedHtml = {
- '38': '&amp;',
- '60': '&lt;',
- '62': '&gt;',
- '34': '&quot;',
- '160': '&nbsp;',
- '162': '&cent;',
- '163': '&pound;',
- '164': '&curren;',
- '169': '&copy;',
- '174': '&reg;'
-};
-
-
-internals.safeCharCodes = (function () {
-
- var safe = {};
-
- for (var i = 32; i < 123; ++i) {
-
- if ((i >= 97 && i <= 122) || // a-z
- (i >= 65 && i <= 90) || // A-Z
- (i >= 48 && i <= 57) || // 0-9
- i === 32 || // space
- i === 46 || // .
- i === 44 || // ,
- i === 45 || // -
- i === 58 || // :
- i === 95) { // _
-
- safe[i] = null;
- }
- }
-
- return safe;
-}()); \ No newline at end of file
diff --git a/deps/npm/node_modules/request/node_modules/hawk/node_modules/boom/node_modules/hoek/lib/index.js b/deps/npm/node_modules/request/node_modules/hawk/node_modules/boom/node_modules/hoek/lib/index.js
deleted file mode 100755
index 806260d25..000000000
--- a/deps/npm/node_modules/request/node_modules/hawk/node_modules/boom/node_modules/hoek/lib/index.js
+++ /dev/null
@@ -1,585 +0,0 @@
-// Load modules
-
-var Fs = require('fs');
-var Escape = require('./escape');
-
-
-// Declare internals
-
-var internals = {};
-
-
-// Clone object or array
-
-exports.clone = function (obj, seen) {
-
- if (typeof obj !== 'object' ||
- obj === null) {
-
- return obj;
- }
-
- seen = seen || { orig: [], copy: [] };
-
- var lookup = seen.orig.indexOf(obj);
- if (lookup !== -1) {
- return seen.copy[lookup];
- }
-
- var newObj = (obj instanceof Array) ? [] : {};
-
- seen.orig.push(obj);
- seen.copy.push(newObj);
-
- for (var i in obj) {
- if (obj.hasOwnProperty(i)) {
- if (obj[i] instanceof Buffer) {
- newObj[i] = new Buffer(obj[i]);
- }
- else if (obj[i] instanceof Date) {
- newObj[i] = new Date(obj[i].getTime());
- }
- else if (obj[i] instanceof RegExp) {
- var flags = '' + (obj[i].global ? 'g' : '') + (obj[i].ignoreCase ? 'i' : '') + (obj[i].multiline ? 'm' : '');
- newObj[i] = new RegExp(obj[i].source, flags);
- }
- else {
- newObj[i] = exports.clone(obj[i], seen);
- }
- }
- }
-
- return newObj;
-};
-
-
-// Merge all the properties of source into target, source wins in conflic, and by default null and undefined from source are applied
-
-exports.merge = function (target, source, isNullOverride /* = true */, isMergeArrays /* = true */) {
-
- exports.assert(target && typeof target == 'object', 'Invalid target value: must be an object');
- exports.assert(source === null || source === undefined || typeof source === 'object', 'Invalid source value: must be null, undefined, or an object');
-
- if (!source) {
- return target;
- }
-
- if (source instanceof Array) {
- exports.assert(target instanceof Array, 'Cannot merge array onto an object');
- if (isMergeArrays === false) { // isMergeArrays defaults to true
- target.length = 0; // Must not change target assignment
- }
-
- for (var i = 0, il = source.length; i < il; ++i) {
- target.push(source[i]);
- }
-
- return target;
- }
-
- var keys = Object.keys(source);
- for (var k = 0, kl = keys.length; k < kl; ++k) {
- var key = keys[k];
- var value = source[key];
- if (value &&
- typeof value === 'object') {
-
- if (!target[key] ||
- typeof target[key] !== 'object') {
-
- target[key] = exports.clone(value);
- }
- else {
- exports.merge(target[key], source[key], isNullOverride, isMergeArrays);
- }
- }
- else {
- if (value !== null && value !== undefined) { // Explicit to preserve empty strings
- target[key] = value;
- }
- else if (isNullOverride !== false) { // Defaults to true
- target[key] = value;
- }
- }
- }
-
- return target;
-};
-
-
-// Apply options to a copy of the defaults
-
-exports.applyToDefaults = function (defaults, options) {
-
- exports.assert(defaults && typeof defaults == 'object', 'Invalid defaults value: must be an object');
- exports.assert(!options || options === true || typeof options === 'object', 'Invalid options value: must be true, falsy or an object');
-
- if (!options) { // If no options, return null
- return null;
- }
-
- var copy = exports.clone(defaults);
-
- if (options === true) { // If options is set to true, use defaults
- return copy;
- }
-
- return exports.merge(copy, options, false, false);
-};
-
-
-// Remove duplicate items from array
-
-exports.unique = function (array, key) {
-
- var index = {};
- var result = [];
-
- for (var i = 0, il = array.length; i < il; ++i) {
- var id = (key ? array[i][key] : array[i]);
- if (index[id] !== true) {
-
- result.push(array[i]);
- index[id] = true;
- }
- }
-
- return result;
-};
-
-
-// Convert array into object
-
-exports.mapToObject = function (array, key) {
-
- if (!array) {
- return null;
- }
-
- var obj = {};
- for (var i = 0, il = array.length; i < il; ++i) {
- if (key) {
- if (array[i][key]) {
- obj[array[i][key]] = true;
- }
- }
- else {
- obj[array[i]] = true;
- }
- }
-
- return obj;
-};
-
-
-// Find the common unique items in two arrays
-
-exports.intersect = function (array1, array2, justFirst) {
-
- if (!array1 || !array2) {
- return [];
- }
-
- var common = [];
- var hash = (array1 instanceof Array ? exports.mapToObject(array1) : array1);
- var found = {};
- for (var i = 0, il = array2.length; i < il; ++i) {
- if (hash[array2[i]] && !found[array2[i]]) {
- if (justFirst) {
- return array2[i];
- }
-
- common.push(array2[i]);
- found[array2[i]] = true;
- }
- }
-
- return (justFirst ? null : common);
-};
-
-
-// Find which keys are present
-
-exports.matchKeys = function (obj, keys) {
-
- var matched = [];
- for (var i = 0, il = keys.length; i < il; ++i) {
- if (obj.hasOwnProperty(keys[i])) {
- matched.push(keys[i]);
- }
- }
- return matched;
-};
-
-
-// Flatten array
-
-exports.flatten = function (array, target) {
-
- var result = target || [];
-
- for (var i = 0, il = array.length; i < il; ++i) {
- if (Array.isArray(array[i])) {
- exports.flatten(array[i], result);
- }
- else {
- result.push(array[i]);
- }
- }
-
- return result;
-};
-
-
-// Remove keys
-
-exports.removeKeys = function (object, keys) {
-
- for (var i = 0, il = keys.length; i < il; i++) {
- delete object[keys[i]];
- }
-};
-
-
-// Convert an object key chain string ('a.b.c') to reference (object[a][b][c])
-
-exports.reach = function (obj, chain) {
-
- var path = chain.split('.');
- var ref = obj;
- for (var i = 0, il = path.length; i < il; ++i) {
- if (ref) {
- ref = ref[path[i]];
- }
- }
-
- return ref;
-};
-
-
-// Inherits a selected set of methods from an object, wrapping functions in asynchronous syntax and catching errors
-
-exports.inheritAsync = function (self, obj, keys) {
-
- keys = keys || null;
-
- for (var i in obj) {
- if (obj.hasOwnProperty(i)) {
- if (keys instanceof Array &&
- keys.indexOf(i) < 0) {
-
- continue;
- }
-
- self.prototype[i] = (function (fn) {
-
- return function (next) {
-
- var result = null;
- try {
- result = fn();
- }
- catch (err) {
- return next(err);
- }
-
- return next(null, result);
- };
- })(obj[i]);
- }
- }
-};
-
-
-exports.formatStack = function (stack) {
-
- var trace = [];
- for (var i = 0, il = stack.length; i < il; ++i) {
- var item = stack[i];
- trace.push([item.getFileName(), item.getLineNumber(), item.getColumnNumber(), item.getFunctionName(), item.isConstructor()]);
- }
-
- return trace;
-};
-
-
-exports.formatTrace = function (trace) {
-
- var display = [];
-
- for (var i = 0, il = trace.length; i < il; ++i) {
- var row = trace[i];
- display.push((row[4] ? 'new ' : '') + row[3] + ' (' + row[0] + ':' + row[1] + ':' + row[2] + ')');
- }
-
- return display;
-};
-
-
-exports.callStack = function (slice) {
-
- // http://code.google.com/p/v8/wiki/JavaScriptStackTraceApi
-
- var v8 = Error.prepareStackTrace;
- Error.prepareStackTrace = function (err, stack) {
-
- return stack;
- };
-
- var capture = {};
- Error.captureStackTrace(capture, arguments.callee);
- var stack = capture.stack;
-
- Error.prepareStackTrace = v8;
-
- var trace = exports.formatStack(stack);
-
- if (slice) {
- return trace.slice(slice);
- }
-
- return trace;
-};
-
-
-exports.displayStack = function (slice) {
-
- var trace = exports.callStack(slice === undefined ? 1 : slice + 1);
-
- return exports.formatTrace(trace);
-};
-
-
-exports.abortThrow = false;
-
-
-exports.abort = function (message, hideStack) {
-
- if (process.env.NODE_ENV === 'test' || exports.abortThrow === true) {
- throw new Error(message || 'Unknown error');
- }
-
- var stack = '';
- if (!hideStack) {
- stack = exports.displayStack(1).join('\n\t');
- }
- console.log('ABORT: ' + message + '\n\t' + stack);
- process.exit(1);
-};
-
-
-exports.assert = function (condition /*, msg1, msg2, msg3 */) {
-
- if (condition) {
- return;
- }
-
- var msgs = Array.prototype.slice.call(arguments, 1);
- msgs = msgs.map(function (msg) {
-
- return typeof msg === 'string' ? msg : msg instanceof Error ? msg.message : JSON.stringify(msg);
- });
- throw new Error(msgs.join(' ') || 'Unknown error');
-};
-
-
-exports.loadDirModules = function (path, excludeFiles, target) { // target(filename, name, capName)
-
- var exclude = {};
- for (var i = 0, il = excludeFiles.length; i < il; ++i) {
- exclude[excludeFiles[i] + '.js'] = true;
- }
-
- var files = Fs.readdirSync(path);
- for (i = 0, il = files.length; i < il; ++i) {
- var filename = files[i];
- if (/\.js$/.test(filename) &&
- !exclude[filename]) {
-
- var name = filename.substr(0, filename.lastIndexOf('.'));
- var capName = name.charAt(0).toUpperCase() + name.substr(1).toLowerCase();
-
- if (typeof target !== 'function') {
- target[capName] = require(path + '/' + name);
- }
- else {
- target(path + '/' + name, name, capName);
- }
- }
- }
-};
-
-
-exports.rename = function (obj, from, to) {
-
- obj[to] = obj[from];
- delete obj[from];
-};
-
-
-exports.Timer = function () {
-
- this.reset();
-};
-
-
-exports.Timer.prototype.reset = function () {
-
- this.ts = Date.now();
-};
-
-
-exports.Timer.prototype.elapsed = function () {
-
- return Date.now() - this.ts;
-};
-
-
-// Load and parse package.json process root or given directory
-
-exports.loadPackage = function (dir) {
-
- var result = {};
- var filepath = (dir || process.env.PWD) + '/package.json';
- if (Fs.existsSync(filepath)) {
- try {
- result = JSON.parse(Fs.readFileSync(filepath));
- }
- catch (e) { }
- }
-
- return result;
-};
-
-
-// Escape string for Regex construction
-
-exports.escapeRegex = function (string) {
-
- // Escape ^$.*+-?=!:|\/()[]{},
- return string.replace(/[\^\$\.\*\+\-\?\=\!\:\|\\\/\(\)\[\]\{\}\,]/g, '\\$&');
-};
-
-
-// Return an error as first argument of a callback
-
-exports.toss = function (condition /*, [message], next */) {
-
- var message = (arguments.length === 3 ? arguments[1] : '');
- var next = (arguments.length === 3 ? arguments[2] : arguments[1]);
-
- var err = (message instanceof Error ? message : (message ? new Error(message) : (condition instanceof Error ? condition : new Error())));
-
- if (condition instanceof Error ||
- !condition) {
-
- return next(err);
- }
-};
-
-
-// Base64url (RFC 4648) encode
-
-exports.base64urlEncode = function (value) {
-
- return (new Buffer(value, 'binary')).toString('base64').replace(/\+/g, '-').replace(/\//g, '_').replace(/\=/g, '');
-};
-
-
-// Base64url (RFC 4648) decode
-
-exports.base64urlDecode = function (encoded) {
-
- if (encoded &&
- !encoded.match(/^[\w\-]*$/)) {
-
- return new Error('Invalid character');
- }
-
- try {
- return (new Buffer(encoded.replace(/-/g, '+').replace(/:/g, '/'), 'base64')).toString('binary');
- }
- catch (err) {
- return err;
- }
-};
-
-
-// Escape attribute value for use in HTTP header
-
-exports.escapeHeaderAttribute = function (attribute) {
-
- // Allowed value characters: !#$%&'()*+,-./:;<=>?@[]^_`{|}~ and space, a-z, A-Z, 0-9, \, "
-
- exports.assert(attribute.match(/^[ \w\!#\$%&'\(\)\*\+,\-\.\/\:;<\=>\?@\[\]\^`\{\|\}~\"\\]*$/), 'Bad attribute value (' + attribute + ')');
-
- return attribute.replace(/\\/g, '\\\\').replace(/\"/g, '\\"'); // Escape quotes and slash
-};
-
-
-exports.escapeHtml = function (string) {
-
- return Escape.escapeHtml(string);
-};
-
-
-exports.escapeJavaScript = function (string) {
-
- return Escape.escapeJavaScript(string);
-};
-
-
-/*
-var event = {
- timestamp: now.getTime(),
- tags: ['tag'],
- data: { some: 'data' }
-};
-*/
-
-exports.consoleFunc = console.log;
-
-exports.printEvent = function (event) {
-
- var pad = function (value) {
-
- return (value < 10 ? '0' : '') + value;
- };
-
- var now = new Date(event.timestamp);
- var timestring = (now.getYear() - 100).toString() +
- pad(now.getMonth() + 1) +
- pad(now.getDate()) +
- '/' +
- pad(now.getHours()) +
- pad(now.getMinutes()) +
- pad(now.getSeconds()) +
- '.' +
- now.getMilliseconds();
-
- var data = event.data;
- if (typeof event.data !== 'string') {
- try {
- data = JSON.stringify(event.data);
- }
- catch (e) {
- data = 'JSON Error: ' + e.message;
- }
- }
-
- var output = timestring + ', ' + event.tags[0] + ', ' + data;
- exports.consoleFunc(output);
-};
-
-
-exports.nextTick = function (callback) {
-
- return function () {
-
- var args = arguments;
- process.nextTick(function () {
-
- callback.apply(null, args);
- });
- };
-};
diff --git a/deps/npm/node_modules/request/node_modules/hawk/node_modules/boom/node_modules/hoek/package.json b/deps/npm/node_modules/request/node_modules/hawk/node_modules/boom/node_modules/hoek/package.json
deleted file mode 100755
index 152a5de7d..000000000
--- a/deps/npm/node_modules/request/node_modules/hawk/node_modules/boom/node_modules/hoek/package.json
+++ /dev/null
@@ -1,52 +0,0 @@
-{
- "name": "hoek",
- "description": "General purpose node utilities",
- "version": "0.9.1",
- "author": {
- "name": "Eran Hammer",
- "email": "eran@hueniverse.com",
- "url": "http://hueniverse.com"
- },
- "contributors": [
- {
- "name": "Van Nguyen",
- "email": "the.gol.effect@gmail.com"
- }
- ],
- "repository": {
- "type": "git",
- "url": "git://github.com/spumko/hoek"
- },
- "main": "index",
- "keywords": [
- "utilities"
- ],
- "engines": {
- "node": ">=0.8.0"
- },
- "dependencies": {},
- "devDependencies": {
- "lab": "0.1.x",
- "complexity-report": "0.x.x"
- },
- "scripts": {
- "test": "make test-cov"
- },
- "licenses": [
- {
- "type": "BSD",
- "url": "http://github.com/spumko/hoek/raw/master/LICENSE"
- }
- ],
- "readme": "<a href=\"https://github.com/spumko\"><img src=\"https://raw.github.com/spumko/spumko/master/images/from.png\" align=\"right\" /></a>\r\n![hoek Logo](https://raw.github.com/spumko/hoek/master/images/hoek.png)\r\n\r\nGeneral purpose node utilities\r\n\r\n[![Build Status](https://secure.travis-ci.org/spumko/hoek.png)](http://travis-ci.org/spumko/hoek)\r\n\r\n# Table of Contents\r\n\r\n* [Introduction](#introduction \"Introduction\")\r\n* [Object](#object \"Object\")\r\n * [clone](#cloneobj \"clone\")\r\n * [merge](#mergetarget-source-isnulloverride-ismergearrays \"merge\")\r\n * [applyToDefaults](#applytodefaultsdefaults-options \"applyToDefaults\")\r\n * [unique](#uniquearray-key \"unique\")\r\n * [mapToObject](#maptoobjectarray-key \"mapToObject\")\r\n * [intersect](#intersectarray1-array2 \"intersect\")\r\n * [matchKeys](#matchkeysobj-keys \"matchKeys\")\r\n * [flatten](#flattenarray-target \"flatten\")\r\n * [removeKeys](#removekeysobject-keys \"removeKeys\")\r\n * [reach](#reachobj-chain \"reach\")\r\n * [inheritAsync](#inheritasyncself-obj-keys \"inheritAsync\")\r\n * [rename](#renameobj-from-to \"rename\")\r\n* [Timer](#timer \"Timer\")\r\n* [Binary Encoding/Decoding](#binary \"Binary Encoding/Decoding\")\r\n * [base64urlEncode](#binary64urlEncodevalue \"binary64urlEncode\")\r\n * [base64urlDecode](#binary64urlDecodevalue \"binary64urlDecode\")\r\n* [Escaping Characters](#escaped \"Escaping Characters\")\r\n * [escapeHtml](#escapeHtmlstring \"escapeHtml\")\r\n * [escapeHeaderAttribute](#escapeHeaderAttributeattribute \"escapeHeaderAttribute\")\r\n * [escapeRegex](#escapeRegexstring \"escapeRegex\")\r\n* [Errors](#errors \"Errors\")\r\n * [assert](#assertmessage \"assert\")\r\n * [abort](#abortmessage \"abort\")\r\n * [displayStack](#displayStackslice \"displayStack\")\r\n * [callStack](#callStackslice \"callStack\")\r\n * [toss](#tosscondition \"toss\")\r\n* [Load files](#load-files \"Load Files\")\r\n * [loadPackage](#loadPackagedir \"loadpackage\")\r\n * [loadDirModules](#loadDirModulespath-excludefiles-target \"loaddirmodules\")\r\n\r\n\r\n\r\n# Introduction\r\n\r\nThe *Hoek* general purpose node utilities library is used to aid in a variety of manners. It comes with useful methods for Arrays (clone, merge, applyToDefaults), Objects (removeKeys, copy), Asserting and more. \r\n\r\nFor example, to use Hoek to set configuration with default options:\r\n```javascript\r\nvar Hoek = require('hoek');\r\n\r\nvar default = {url : \"www.github.com\", port : \"8000\", debug : true}\r\n\r\nvar config = Hoek.applyToDefaults(default, {port : \"3000\", admin : true});\r\n\r\n// In this case, config would be { url: 'www.github.com', port: '3000', debug: true, admin: true }\r\n```\r\n\r\nUnder each of the sections (such as Array), there are subsections which correspond to Hoek methods. Each subsection will explain how to use the corresponding method. In each js excerpt below, the var Hoek = require('hoek') is omitted for brevity.\r\n\r\n## Object\r\n\r\nHoek provides several helpful methods for objects and arrays.\r\n\r\n### clone(obj)\r\n\r\nThis method is used to clone an object or an array. A *deep copy* is made (duplicates everything, including values that are objects). \r\n\r\n```javascript\r\n\r\nvar nestedObj = {\r\n w: /^something$/ig,\r\n x: {\r\n a: [1, 2, 3],\r\n b: 123456,\r\n c: new Date()\r\n },\r\n y: 'y',\r\n z: new Date()\r\n };\r\n\r\nvar copy = Hoek.clone(nestedObj);\r\n\r\ncopy.x.b = 100;\r\n\r\nconsole.log(copy.y) // results in 'y'\r\nconsole.log(nestedObj.x.b) // results in 123456\r\nconsole.log(copy.x.b) // results in 100\r\n```\r\n\r\n### merge(target, source, isNullOverride, isMergeArrays)\r\nisNullOverride, isMergeArrays default to true\r\n\r\nMerge all the properties of source into target, source wins in conflic, and by default null and undefined from source are applied\r\n\r\n\r\n```javascript\r\n\r\nvar target = {a: 1, b : 2}\r\nvar source = {a: 0, c: 5}\r\nvar source2 = {a: null, c: 5}\r\n\r\nvar targetArray = [1, 2, 3];\r\nvar sourceArray = [4, 5];\r\n\r\nvar newTarget = Hoek.merge(target, source); // results in {a: 0, b: 2, c: 5}\r\nnewTarget = Hoek.merge(target, source2); // results in {a: null, b: 2, c: 5}\r\nnewTarget = Hoek.merge(target, source2, false); // results in {a: 1, b: 2, c: 5}\r\n\r\nnewTarget = Hoek.merge(targetArray, sourceArray) // results in [1, 2, 3, 4, 5]\r\nnewTarget = Hoek.merge(targetArray, sourceArray, true, false) // results in [4, 5]\r\n\r\n\r\n\r\n\r\n```\r\n\r\n### applyToDefaults(defaults, options)\r\n\r\nApply options to a copy of the defaults\r\n\r\n```javascript\r\n\r\nvar defaults = {host: \"localhost\", port: 8000};\r\nvar options = {port: 8080};\r\n\r\nvar config = Hoek.applyToDefaults(defaults, options); // results in {host: \"localhost\", port: 8080};\r\n\r\n\r\n```\r\n\r\n### unique(array, key)\r\n\r\nRemove duplicate items from Array\r\n\r\n```javascript\r\n\r\nvar array = [1, 2, 2, 3, 3, 4, 5, 6];\r\n\r\nvar newArray = Hoek.unique(array); // results in [1,2,3,4,5,6];\r\n\r\narray = [{id: 1}, {id: 1}, {id: 2}];\r\n\r\nnewArray = Hoek.unique(array, \"id\") // results in [{id: 1}, {id: 2}]\r\n\r\n```\r\n\r\n### mapToObject(array, key)\r\n\r\nConvert an Array into an Object\r\n\r\n```javascript\r\n\r\nvar array = [1,2,3];\r\nvar newObject = Hoek.mapToObject(array); // results in [{\"1\": true}, {\"2\": true}, {\"3\": true}]\r\n\r\narray = [{id: 1}, {id: 2}];\r\nnewObject = Hoek.mapToObject(array, \"id\") // results in [{\"id\": 1}, {\"id\": 2}]\r\n\r\n```\r\n### intersect(array1, array2)\r\n\r\nFind the common unique items in two arrays\r\n\r\n```javascript\r\n\r\nvar array1 = [1, 2, 3];\r\nvar array2 = [1, 4, 5];\r\n\r\nvar newArray = Hoek.intersect(array1, array2) // results in [1]\r\n\r\n```\r\n\r\n### matchKeys(obj, keys) \r\n\r\nFind which keys are present\r\n\r\n```javascript\r\n\r\nvar obj = {a: 1, b: 2, c: 3};\r\nvar keys = [\"a\", \"e\"];\r\n\r\nHoek.matchKeys(obj, keys) // returns [\"a\"]\r\n\r\n```\r\n\r\n### flatten(array, target)\r\n\r\nFlatten an array\r\n\r\n```javascript\r\n\r\nvar array = [1, 2, 3];\r\nvar target = [4, 5]; \r\n\r\nvar flattenedArray = Hoek.flatten(array, target) // results in [4, 5, 1, 2, 3];\r\n\r\n```\r\n\r\n### removeKeys(object, keys)\r\n\r\nRemove keys\r\n\r\n```javascript\r\n\r\nvar object = {a: 1, b: 2, c: 3, d: 4};\r\n\r\nvar keys = [\"a\", \"b\"];\r\n\r\nHoek.removeKeys(object, keys) // object is now {c: 3, d: 4}\r\n\r\n```\r\n\r\n### reach(obj, chain)\r\n\r\nConverts an object key chain string to reference\r\n\r\n```javascript\r\n\r\nvar chain = 'a.b.c';\r\nvar obj = {a : {b : { c : 1}}};\r\n\r\nHoek.reach(obj, chain) // returns 1\r\n\r\n```\r\n\r\n### inheritAsync(self, obj, keys) \r\n\r\nInherits a selected set of methods from an object, wrapping functions in asynchronous syntax and catching errors\r\n\r\n```javascript\r\n\r\nvar targetFunc = function () { };\r\n\r\nvar proto = {\r\n a: function () {\r\n return 'a!';\r\n },\r\n b: function () {\r\n return 'b!';\r\n },\r\n c: function () {\r\n throw new Error('c!');\r\n }\r\n };\r\n\r\nvar keys = ['a', 'c'];\r\n\r\nHoek.inheritAsync(targetFunc, proto, ['a', 'c']);\r\n\r\nvar target = new targetFunc();\r\n\r\ntarget.a(function(err, result){console.log(result)} // returns 'a!' \r\n\r\ntarget.c(function(err, result){console.log(result)} // returns undefined\r\n\r\ntarget.b(function(err, result){console.log(result)} // gives error: Object [object Object] has no method 'b'\r\n\r\n```\r\n\r\n### rename(obj, from, to)\r\n\r\nRename a key of an object\r\n\r\n```javascript\r\n\r\nvar obj = {a : 1, b : 2};\r\n\r\nHoek.rename(obj, \"a\", \"c\"); // obj is now {c : 1, b : 2}\r\n\r\n```\r\n\r\n\r\n# Timer\r\n\r\nA Timer object. Initializing a new timer object sets the ts to the number of milliseconds elapsed since 1 January 1970 00:00:00 UTC.\r\n\r\n```javascript\r\n\r\n\r\nexample : \r\n\r\n\r\nvar timerObj = new Hoek.Timer();\r\nconsole.log(\"Time is now: \" + timerObj.ts)\r\nconsole.log(\"Elapsed time from initialization: \" + timerObj.elapsed() + 'milliseconds')\r\n\r\n```\r\n\r\n# Binary Encoding/Decoding\r\n\r\n### base64urlEncode(value)\r\n\r\nEncodes value in Base64 or URL encoding\r\n\r\n### base64urlDecode(value)\r\n\r\nDecodes data in Base64 or URL encoding.\r\n# Escaping Characters\r\n\r\nHoek provides convenient methods for escaping html characters. The escaped characters are as followed:\r\n\r\n```javascript\r\n\r\ninternals.htmlEscaped = {\r\n '&': '&amp;',\r\n '<': '&lt;',\r\n '>': '&gt;',\r\n '\"': '&quot;',\r\n \"'\": '&#x27;',\r\n '`': '&#x60;'\r\n};\r\n\r\n```\r\n\r\n### escapeHtml(string)\r\n\r\n```javascript\r\n\r\nvar string = '<html> hey </html>';\r\nvar escapedString = Hoek.escapeHtml(string); // returns &lt;html&gt; hey &lt;/html&gt;\r\n\r\n```\r\n\r\n### escapeHeaderAttribute(attribute)\r\n\r\nEscape attribute value for use in HTTP header\r\n\r\n```javascript\r\n\r\nvar a = Hoek.escapeHeaderAttribute('I said \"go w\\\\o me\"'); //returns I said \\\"go w\\\\o me\\\"\r\n\r\n\r\n```\r\n\r\n\r\n### escapeRegex(string)\r\n\r\nEscape string for Regex construction\r\n\r\n```javascript\r\n\r\nvar a = Hoek.escapeRegex('4^f$s.4*5+-_?%=#!:@|~\\\\/`\"(>)[<]d{}s,'); // returns 4\\^f\\$s\\.4\\*5\\+\\-_\\?%\\=#\\!\\:@\\|~\\\\\\/`\"\\(>\\)\\[<\\]d\\{\\}s\\,\r\n\r\n\r\n\r\n```\r\n\r\n# Errors\r\n\r\n### assert(message)\r\n\r\n```javascript\r\n\r\nvar a = 1, b =2;\r\n\r\nHoek.assert(a === b, 'a should equal b'); // ABORT: a should equal b\r\n\r\n```\r\n\r\n### abort(message)\r\n\r\nFirst checks if process.env.NODE_ENV === 'test', and if so, throws error message. Otherwise,\r\ndisplays most recent stack and then exits process.\r\n\r\n\r\n\r\n### displayStack(slice)\r\n\r\nDisplays the trace stack\r\n\r\n```javascript\r\n\r\nvar stack = Hoek.displayStack();\r\nconsole.log(stack) // returns something like:\r\n\r\n[ 'null (/Users/user/Desktop/hoek/test.js:4:18)',\r\n 'Module._compile (module.js:449:26)',\r\n 'Module._extensions..js (module.js:467:10)',\r\n 'Module.load (module.js:356:32)',\r\n 'Module._load (module.js:312:12)',\r\n 'Module.runMain (module.js:492:10)',\r\n 'startup.processNextTick.process._tickCallback (node.js:244:9)' ]\r\n\r\n```\r\n\r\n### callStack(slice)\r\n\r\nReturns a trace stack array.\r\n\r\n```javascript\r\n\r\nvar stack = Hoek.callStack();\r\nconsole.log(stack) // returns something like:\r\n\r\n[ [ '/Users/user/Desktop/hoek/test.js', 4, 18, null, false ],\r\n [ 'module.js', 449, 26, 'Module._compile', false ],\r\n [ 'module.js', 467, 10, 'Module._extensions..js', false ],\r\n [ 'module.js', 356, 32, 'Module.load', false ],\r\n [ 'module.js', 312, 12, 'Module._load', false ],\r\n [ 'module.js', 492, 10, 'Module.runMain', false ],\r\n [ 'node.js',\r\n 244,\r\n 9,\r\n 'startup.processNextTick.process._tickCallback',\r\n false ] ]\r\n\r\n\r\n```\r\n\r\n### toss(condition)\r\n\r\ntoss(condition /*, [message], callback */)\r\n\r\nReturn an error as first argument of a callback\r\n\r\n\r\n# Load Files\r\n\r\n### loadPackage(dir)\r\n\r\nLoad and parse package.json process root or given directory\r\n\r\n```javascript\r\n\r\nvar pack = Hoek.loadPackage(); // pack.name === 'hoek'\r\n\r\n```\r\n\r\n### loadDirModules(path, excludeFiles, target) \r\n\r\nLoads modules from a given path; option to exclude files (array).\r\n\r\n\r\n\r\n\r\n",
- "readmeFilename": "README.md",
- "bugs": {
- "url": "https://github.com/spumko/hoek/issues"
- },
- "_id": "hoek@0.9.1",
- "dist": {
- "shasum": "396f2118033eabc93ae5c2cd6ca75f0a89c03592"
- },
- "_from": "hoek@0.9.x",
- "_resolved": "https://registry.npmjs.org/hoek/-/hoek-0.9.1.tgz"
-}
diff --git a/deps/npm/node_modules/request/node_modules/hawk/node_modules/boom/node_modules/hoek/test/escaper.js b/deps/npm/node_modules/request/node_modules/hawk/node_modules/boom/node_modules/hoek/test/escaper.js
deleted file mode 100644
index 4dddd77dc..000000000
--- a/deps/npm/node_modules/request/node_modules/hawk/node_modules/boom/node_modules/hoek/test/escaper.js
+++ /dev/null
@@ -1,86 +0,0 @@
-// Load modules
-
-var Lab = require('lab');
-var Hoek = require('../lib');
-
-
-// Declare internals
-
-var internals = {};
-
-
-// Test shortcuts
-
-var expect = Lab.expect;
-var before = Lab.before;
-var after = Lab.after;
-var describe = Lab.experiment;
-var it = Lab.test;
-
-
-describe('Hoek', function () {
-
- describe('#escapeJavaScript', function () {
-
- it('encodes / characters', function (done) {
-
- var encoded = Hoek.escapeJavaScript('<script>alert(1)</script>');
- expect(encoded).to.equal('\\x3cscript\\x3ealert\\x281\\x29\\x3c\\x2fscript\\x3e');
- done();
- });
-
- it('encodes \' characters', function (done) {
-
- var encoded = Hoek.escapeJavaScript('something(\'param\')');
- expect(encoded).to.equal('something\\x28\\x27param\\x27\\x29');
- done();
- });
-
- it('encodes large unicode characters with the correct padding', function (done) {
-
- var encoded = Hoek.escapeJavaScript(String.fromCharCode(500) + String.fromCharCode(1000));
- expect(encoded).to.equal('\\u0500\\u1000');
- done();
- });
-
- it('doesn\'t throw an exception when passed null', function (done) {
-
- var encoded = Hoek.escapeJavaScript(null);
- expect(encoded).to.equal('');
- done();
- });
- });
-
- describe('#escapeHtml', function () {
-
- it('encodes / characters', function (done) {
-
- var encoded = Hoek.escapeHtml('<script>alert(1)</script>');
- expect(encoded).to.equal('&lt;script&gt;alert&#x28;1&#x29;&lt;&#x2f;script&gt;');
- done();
- });
-
- it('encodes < and > as named characters', function (done) {
-
- var encoded = Hoek.escapeHtml('<script><>');
- expect(encoded).to.equal('&lt;script&gt;&lt;&gt;');
- done();
- });
-
- it('encodes large unicode characters', function (done) {
-
- var encoded = Hoek.escapeHtml(String.fromCharCode(500) + String.fromCharCode(1000));
- expect(encoded).to.equal('&#500;&#1000;');
- done();
- });
-
- it('doesn\'t throw an exception when passed null', function (done) {
-
- var encoded = Hoek.escapeHtml(null);
- expect(encoded).to.equal('');
- done();
- });
- });
-});
-
-
diff --git a/deps/npm/node_modules/request/node_modules/hawk/node_modules/boom/node_modules/hoek/test/index.js b/deps/npm/node_modules/request/node_modules/hawk/node_modules/boom/node_modules/hoek/test/index.js
deleted file mode 100755
index c40e3ad9a..000000000
--- a/deps/npm/node_modules/request/node_modules/hawk/node_modules/boom/node_modules/hoek/test/index.js
+++ /dev/null
@@ -1,1078 +0,0 @@
-// Load modules
-
-var Lab = require('lab');
-var Hoek = require('../lib');
-
-
-// Declare internals
-
-var internals = {};
-
-
-// Test shortcuts
-
-var expect = Lab.expect;
-var before = Lab.before;
-var after = Lab.after;
-var describe = Lab.experiment;
-var it = Lab.test;
-
-
-describe('Hoek', function () {
-
- var nestedObj = {
- v: [7,8,9],
- w: /^something$/igm,
- x: {
- a: [1, 2, 3],
- b: 123456,
- c: new Date(),
- d: /hi/igm,
- e: /hello/
- },
- y: 'y',
- z: new Date()
- };
-
- var dupsArray = [nestedObj, { z: 'z' }, nestedObj];
- var reducedDupsArray = [nestedObj, { z: 'z' }];
-
- describe('#clone', function () {
-
- it('should clone a nested object', function (done) {
-
- var a = nestedObj;
- var b = Hoek.clone(a);
-
- expect(a).to.deep.equal(b);
- expect(a.z.getTime()).to.equal(b.z.getTime());
- done();
- });
-
- it('should clone a null object', function (done) {
-
- var b = Hoek.clone(null);
-
- expect(b).to.equal(null);
- done();
- });
-
- it('should not convert undefined properties to null', function (done) {
-
- var obj = { something: undefined };
- var b = Hoek.clone(obj);
-
- expect(typeof b.something).to.equal('undefined');
- done();
- });
-
- it('should not throw on circular reference', function (done) {
-
- var a = {};
- a.x = a;
-
- var test = (function () {
-
- var b = Hoek.clone(a);
- });
-
- expect(test).to.not.throw();
- done();
- });
-
- it('should properly clone circular reference', function (done) {
-
- var x = {
- 'z': new Date()
- };
- x.y = x;
-
- var b = Hoek.clone(x);
- expect(Object.keys(b.y)).to.deep.equal(Object.keys(x))
- expect(b.z).to.not.equal(x.z);
- expect(b.y).to.not.equal(x.y);
- expect(b.y.z).to.not.equal(x.y.z);
- expect(b.y).to.equal(b);
- expect(b.y.y.y.y).to.equal(b);
- done();
- });
-
- it('should properly clone deeply nested object', function (done) {
-
- var a = {
- x: {
- y: {
- a: [1, 2, 3],
- b: 123456,
- c: new Date(),
- d: /hi/igm,
- e: /hello/
- },
- }
- };
-
- var b = Hoek.clone(a);
-
- expect(a).to.deep.equal(b);
- expect(a.x.y.c.getTime()).to.equal(b.x.y.c.getTime());
- done();
- });
-
- it('should properly clone arrays', function (done) {
-
- var a = [1,2,3];
-
- var b = Hoek.clone(a);
-
- expect(a).to.deep.equal(b);
- done();
- });
-
- it('should perform actual copy for shallow keys (no pass by reference)', function (done) {
-
- var x = Hoek.clone(nestedObj);
- var y = Hoek.clone(nestedObj);
-
- // Date
- expect(x.z).to.not.equal(nestedObj.z);
- expect(x.z).to.not.equal(y.z);
-
- // Regex
- expect(x.w).to.not.equal(nestedObj.w);
- expect(x.w).to.not.equal(y.w);
-
- // Array
- expect(x.v).to.not.equal(nestedObj.v);
- expect(x.v).to.not.equal(y.v);
-
- // Immutable(s)
- x.y = 5;
- expect(x.y).to.not.equal(nestedObj.y);
- expect(x.y).to.not.equal(y.y);
-
- done();
- });
-
- it('should perform actual copy for deep keys (no pass by reference)', function (done) {
-
- var x = Hoek.clone(nestedObj);
- var y = Hoek.clone(nestedObj);
-
- expect(x.x.c).to.not.equal(nestedObj.x.c);
- expect(x.x.c).to.not.equal(y.x.c);
-
- expect(x.x.c.getTime()).to.equal(nestedObj.x.c.getTime());
- expect(x.x.c.getTime()).to.equal(y.x.c.getTime());
- done();
- });
-
- it('copies functions with properties', function (done) {
-
- var a = {
- x: function () { return 1; },
- y: {}
- };
- a.x.z = 'string in function';
- a.x.v = function () { return 2; };
- a.y.u = a.x;
-
- var b = Hoek.clone(a);
- expect(b.x()).to.equal(1);
- expect(b.x.v()).to.equal(2);
- expect(b.y.u).to.equal(b.x);
- expect(b.x.z).to.equal('string in function');
- done();
- });
-
- it('should copy a buffer', function(done){
- var tls = {
- key: new Buffer([1,2,3,4,5]),
- cert: new Buffer([1,2,3,4,5,6,10])
- }
-
- copiedTls = Hoek.clone(tls);
- expect(Buffer.isBuffer(copiedTls.key)).to.equal(true);
- expect(JSON.stringify(copiedTls.key)).to.equal(JSON.stringify(tls.key))
- expect(Buffer.isBuffer(copiedTls.cert)).to.equal(true);
- expect(JSON.stringify(copiedTls.cert)).to.equal(JSON.stringify(tls.cert))
- done();
- });
- });
-
- describe('#merge', function () {
-
- it('does not throw if source is null', function (done) {
-
- var a = {};
- var b = null;
- var c = null;
-
- expect(function () {
-
- c = Hoek.merge(a, b);
- }).to.not.throw();
-
- expect(c).to.equal(a);
- done();
- });
-
- it('does not throw if source is undefined', function (done) {
-
- var a = {};
- var b = undefined;
- var c = null;
-
- expect(function () {
-
- c = Hoek.merge(a, b);
- }).to.not.throw();
-
- expect(c).to.equal(a);
- done();
- });
-
- it('throws if source is not an object', function (done) {
-
- expect(function () {
-
- var a = {};
- var b = 0;
-
- Hoek.merge(a, b);
- }).to.throw('Invalid source value: must be null, undefined, or an object');
- done();
- });
-
- it('throws if target is not an object', function (done) {
-
- expect(function () {
-
- var a = 0;
- var b = {};
-
- Hoek.merge(a, b);
- }).to.throw('Invalid target value: must be an object');
- done();
- });
-
- it('throws if target is not an array and source is', function (done) {
-
- expect(function () {
-
- var a = {};
- var b = [1, 2];
-
- Hoek.merge(a, b);
- }).to.throw('Cannot merge array onto an object');
- done();
- });
-
- it('returns the same object when merging arrays', function (done) {
-
- var a = [];
- var b = [1, 2];
-
- expect(Hoek.merge(a, b)).to.equal(a);
- done();
- });
-
- it('should combine an empty object with a non-empty object', function (done) {
-
- var a = {};
- var b = nestedObj;
-
- var c = Hoek.merge(a, b);
- expect(a).to.deep.equal(b);
- expect(c).to.deep.equal(b);
- done();
- });
-
- it('should override values in target', function (done) {
-
- var a = { x: 1, y: 2, z: 3, v: 5, t: 'test', m: 'abc' };
- var b = { x: null, z: 4, v: 0, t: { u: 6 }, m: '123' };
-
- var c = Hoek.merge(a, b);
- expect(c.x).to.equal(null);
- expect(c.y).to.equal(2);
- expect(c.z).to.equal(4);
- expect(c.v).to.equal(0);
- expect(c.m).to.equal('123');
- expect(c.t).to.deep.equal({ u: 6 });
- done();
- });
-
- it('should override values in target (flip)', function (done) {
-
- var a = { x: 1, y: 2, z: 3, v: 5, t: 'test', m: 'abc' };
- var b = { x: null, z: 4, v: 0, t: { u: 6 }, m: '123' };
-
- var d = Hoek.merge(b, a);
- expect(d.x).to.equal(1);
- expect(d.y).to.equal(2);
- expect(d.z).to.equal(3);
- expect(d.v).to.equal(5);
- expect(d.m).to.equal('abc');
- expect(d.t).to.deep.equal('test');
- done();
- });
- });
-
- describe('#applyToDefaults', function () {
-
- var defaults = {
- a: 1,
- b: 2,
- c: {
- d: 3,
- e: [5, 6]
- },
- f: 6,
- g: 'test'
- };
-
- it('should return null if options is false', function (done) {
-
- var result = Hoek.applyToDefaults(defaults, false);
- expect(result).to.equal(null);
- done();
- });
-
- it('should return a copy of defaults if options is true', function (done) {
-
- var result = Hoek.applyToDefaults(defaults, true);
- expect(result).to.deep.equal(result);
- done();
- });
-
- it('should apply object to defaults', function (done) {
-
- var obj = {
- a: null,
- c: {
- e: [4]
- },
- f: 0,
- g: {
- h: 5
- }
- };
-
- var result = Hoek.applyToDefaults(defaults, obj);
- expect(result.c.e).to.deep.equal([4]);
- expect(result.a).to.equal(1);
- expect(result.b).to.equal(2);
- expect(result.f).to.equal(0);
- expect(result.g).to.deep.equal({ h: 5 });
- done();
- });
- });
-
- describe('#unique', function () {
-
- it('should ensure uniqueness within array of objects based on subkey', function (done) {
-
- var a = Hoek.unique(dupsArray, 'x');
- expect(a).to.deep.equal(reducedDupsArray);
- done();
- });
-
- it('removes duplicated without key', function (done) {
-
- expect(Hoek.unique([1, 2, 3, 4, 2, 1, 5])).to.deep.equal([1, 2, 3, 4, 5]);
- done();
- });
- });
-
- describe('#mapToObject', function () {
-
- it('should return null on null array', function (done) {
-
- var a = Hoek.mapToObject(null);
- expect(a).to.equal(null);
- done();
- });
-
- it('should convert basic array to existential object', function (done) {
-
- var keys = [1, 2, 3, 4];
- var a = Hoek.mapToObject(keys);
- for (var i in keys) {
- expect(a[keys[i]]).to.equal(true);
- }
- done();
- });
-
- it('should convert array of objects to existential object', function (done) {
-
- var keys = [{ x: 1 }, { x: 2 }, { x: 3 }];
- var subkey = 'x';
- var a = Hoek.mapToObject(keys, subkey);
- for (var i in keys) {
- expect(a[keys[i][subkey]]).to.equal(true);
- }
- done();
- });
- });
-
- describe('#intersect', function () {
-
- it('should return the common objects of two arrays', function (done) {
-
- var array1 = [1, 2, 3, 4, 4, 5, 5];
- var array2 = [5, 4, 5, 6, 7];
- var common = Hoek.intersect(array1, array2);
- expect(common.length).to.equal(2);
- done();
- });
-
- it('should return just the first common object of two arrays', function (done) {
-
- var array1 = [1, 2, 3, 4, 4, 5, 5];
- var array2 = [5, 4, 5, 6, 7];
- var common = Hoek.intersect(array1, array2, true);
- expect(common).to.equal(5);
- done();
- });
-
- it('should return an empty array if either input is null', function (done) {
-
- expect(Hoek.intersect([1], null).length).to.equal(0);
- expect(Hoek.intersect(null, [1]).length).to.equal(0);
- done();
- });
-
- it('should return the common objects of object and array', function (done) {
-
- var array1 = [1, 2, 3, 4, 4, 5, 5];
- var array2 = [5, 4, 5, 6, 7];
- var common = Hoek.intersect(Hoek.mapToObject(array1), array2);
- expect(common.length).to.equal(2);
- done();
- });
- });
-
- describe('#matchKeys', function () {
-
- it('should match the existing object keys', function (done) {
-
- var obj = {
- a: 1,
- b: 2,
- c: 3,
- d: null
- };
-
- expect(Hoek.matchKeys(obj, ['b', 'c', 'd', 'e'])).to.deep.equal(['b', 'c', 'd']);
- done();
- });
- });
-
- describe('#flatten', function () {
-
- it('should return a flat array', function (done) {
-
- var result = Hoek.flatten([1, 2, [3, 4, [5, 6], [7], 8], [9], [10, [11, 12]], 13]);
- expect(result.length).to.equal(13);
- expect(result).to.deep.equal([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]);
- done();
- });
- });
-
- describe('#removeKeys', function () {
-
- var objWithHiddenKeys = {
- location: {
- name: 'San Bruno'
- },
- company: {
- name: '@WalmartLabs'
- }
- };
-
- it('should delete params with definition\'s hide set to true', function (done) {
-
- var a = Hoek.removeKeys(objWithHiddenKeys, ['location']);
- expect(objWithHiddenKeys.location).to.not.exist;
- expect(objWithHiddenKeys.company).to.exist;
- done();
- });
- });
-
- describe('#reach', function () {
-
- var obj = {
- a: {
- b: {
- c: {
- d: 1,
- e: 2
- },
- f: 'hello'
- },
- g: {
- h: 3
- }
- },
- i: function () { }
- };
-
- it('returns a valid member', function (done) {
-
- expect(Hoek.reach(obj, 'a.b.c.d')).to.equal(1);
- done();
- });
-
- it('returns null on null object', function (done) {
-
- expect(Hoek.reach(null, 'a.b.c.d')).to.not.exist;
- done();
- });
-
- it('returns null on missing member', function (done) {
-
- expect(Hoek.reach(obj, 'a.b.c.d.x')).to.not.exist;
- done();
- });
-
- it('returns null on invalid member', function (done) {
-
- expect(Hoek.reach(obj, 'a.b.c.d-.x')).to.not.exist;
- done();
- });
-
- it('returns function member', function (done) {
-
- expect(typeof Hoek.reach(obj, 'i')).to.equal('function');
- done();
- });
- });
-
- describe('#inheritAsync', function () {
-
- it('should inherit selected methods and wrap in async call', function (done) {
-
- var proto = {
- a: function () {
- return 'a!';
- },
- b: function () {
- return 'b!';
- },
- c: function () {
- throw new Error('c!');
- }
- };
-
- var targetFunc = function () { };
- targetFunc.prototype.c = function () {
-
- return 'oops';
- };
-
- Hoek.inheritAsync(targetFunc, proto, ['a', 'c']);
- var target = new targetFunc();
-
- expect(typeof target.a).to.equal('function');
- expect(typeof target.c).to.equal('function');
- expect(target.b).to.not.exist;
-
- target.a(function (err, result) {
-
- expect(err).to.not.exist;
- expect(result).to.equal('a!');
-
- target.c(function (err, result) {
-
- expect(result).to.not.exist;
- expect(err.message).to.equal('c!');
- done();
- });
- });
- });
- });
-
- describe('#callStack', function () {
-
- it('should return the full call stack', function (done) {
-
- var stack = Hoek.callStack();
- expect(stack[0][0]).to.contain('index.js');
- expect(stack[0][2]).to.equal(30);
- done();
- });
- });
-
- describe('#displayStack ', function () {
-
- it('should return the full call stack for display', function (done) {
-
- var stack = Hoek.displayStack();
- expect(stack[0]).to.contain('test/index.js:');
- done();
- });
-
- it('should include constructor functions correctly', function (done) {
-
- var Something = function (next) {
-
- next();
- };
-
- var something = new Something(function () {
-
- var stack = Hoek.displayStack();
- expect(stack[1]).to.contain('new Something');
- done();
- });
- });
- });
-
- describe('#abort', function () {
-
- it('should exit process when not in test mode', function (done) {
-
- var env = process.env.NODE_ENV;
- var write = process.stdout.write;
- var exit = process.exit;
-
- process.env.NODE_ENV = 'nottatest';
- process.stdout.write = function () { };
- process.exit = function (state) {
-
- process.exit = exit;
- process.env.NODE_ENV = env;
- process.stdout.write = write;
-
- expect(state).to.equal(1);
- done();
- };
-
- Hoek.abort('Boom');
- });
-
- it('should throw when not in test mode and abortThrow is true', function (done) {
-
- var env = process.env.NODE_ENV;
- process.env.NODE_ENV = 'nottatest';
- Hoek.abortThrow = true;
-
- var fn = function () {
-
- Hoek.abort('my error message');
- };
-
- expect(fn).to.throw('my error message');
- Hoek.abortThrow = false;
- process.env.NODE_ENV = env;
-
- done();
- });
-
-
- it('should respect hideStack argument', function (done) {
-
- var env = process.env.NODE_ENV;
- var write = process.stdout.write;
- var exit = process.exit;
- var output = '';
-
- process.exit = function () { };
- process.env.NODE_ENV = '';
- process.stdout.write = function (message) {
-
- output = message;
- };
-
- Hoek.abort('my error message', true);
-
- process.env.NODE_ENV = env;
- process.stdout.write = write;
- process.exit = exit;
-
- expect(output).to.equal('ABORT: my error message\n\t\n');
-
- done();
- });
-
- it('should default to showing stack', function (done) {
-
- var env = process.env.NODE_ENV;
- var write = process.stdout.write;
- var exit = process.exit;
- var output = '';
-
- process.exit = function () { };
- process.env.NODE_ENV = '';
- process.stdout.write = function (message) {
-
- output = message;
- };
-
- Hoek.abort('my error message');
-
- process.env.NODE_ENV = env;
- process.stdout.write = write;
- process.exit = exit;
-
- expect(output).to.contain('index.js');
-
- done();
- });
- });
-
- describe('#assert', function () {
-
- it('should throw an Error when using assert in a test', function (done) {
-
- var fn = function () {
-
- Hoek.assert(false, 'my error message');
- };
-
- expect(fn).to.throw('my error message');
- done();
- });
-
- it('should throw an Error when using assert in a test with no message', function (done) {
-
- var fn = function () {
-
- Hoek.assert(false);
- };
-
- expect(fn).to.throw('Unknown error');
- done();
- });
-
- it('should throw an Error when using assert in a test with multipart message', function (done) {
-
- var fn = function () {
-
- Hoek.assert(false, 'This', 'is', 'my message');
- };
-
- expect(fn).to.throw('This is my message');
- done();
- });
-
- it('should throw an Error when using assert in a test with object message', function (done) {
-
- var fn = function () {
-
- Hoek.assert(false, 'This', 'is', { spinal: 'tap' });
- };
-
- expect(fn).to.throw('This is {"spinal":"tap"}');
- done();
- });
-
- it('should throw an Error when using assert in a test with error object message', function (done) {
-
- var fn = function () {
-
- Hoek.assert(false, new Error('This is spinal tap'));
- };
-
- expect(fn).to.throw('This is spinal tap');
- done();
- });
- });
-
- describe('#loadDirModules', function () {
-
- it('should load modules from directory', function (done) {
-
- var target = {};
- Hoek.loadDirModules(__dirname + '/modules', ['test2'], target);
- expect(target.Test1.x).to.equal(1);
- expect(target.Test2).to.not.exist;
- expect(target.Test3.z).to.equal(3);
- done();
- });
-
- it('should list modules from directory into function', function (done) {
-
- var target = {};
- Hoek.loadDirModules(__dirname + '/modules', ['test2'], function (path, name, capName) {
-
- target[name] = capName;
- });
-
- expect(target.test1).to.equal('Test1');
- expect(target.test2).to.not.exist;
- expect(target.test3).to.equal('Test3');
- done();
- });
- });
-
- describe('#rename', function () {
-
- it('should rename object key', function (done) {
-
- var a = { b: 'c' };
- Hoek.rename(a, 'b', 'x');
- expect(a.b).to.not.exist;
- expect(a.x).to.equal('c');
- done();
- });
- });
-
- describe('Timer', function () {
-
- it('should return time elapsed', function (done) {
-
- var timer = new Hoek.Timer();
- setTimeout(function () {
-
- expect(timer.elapsed()).to.be.above(9);
- done();
- }, 12);
- });
- });
-
- describe('#loadPackage', function () {
-
- it('should', function (done) {
-
- var pack = Hoek.loadPackage();
- expect(pack.name).to.equal('hoek');
- done();
- });
- });
-
- describe('#escapeRegex', function () {
-
- it('should escape all special regular expression characters', function (done) {
-
- var a = Hoek.escapeRegex('4^f$s.4*5+-_?%=#!:@|~\\/`"(>)[<]d{}s,');
- expect(a).to.equal('4\\^f\\$s\\.4\\*5\\+\\-_\\?%\\=#\\!\\:@\\|~\\\\\\/`"\\(>\\)\\[<\\]d\\{\\}s\\,');
- done();
- });
- });
-
- describe('#toss', function () {
-
- it('should call callback with new error', function (done) {
-
- var callback = function (err) {
-
- expect(err).to.exist;
- expect(err.message).to.equal('bug');
- done();
- };
-
- Hoek.toss(true, 'feature', callback);
- Hoek.toss(false, 'bug', callback);
- });
-
- it('should call callback with new error and no message', function (done) {
-
- Hoek.toss(false, function (err) {
-
- expect(err).to.exist;
- expect(err.message).to.equal('');
- done();
- });
- });
-
- it('should call callback with error condition', function (done) {
-
- Hoek.toss(new Error('boom'), function (err) {
-
- expect(err).to.exist;
- expect(err.message).to.equal('boom');
- done();
- });
- });
-
- it('should call callback with new error using message with error condition', function (done) {
-
- Hoek.toss(new Error('ka'), 'boom', function (err) {
-
- expect(err).to.exist;
- expect(err.message).to.equal('boom');
- done();
- });
- });
-
- it('should call callback with new error using passed error with error condition', function (done) {
-
- Hoek.toss(new Error('ka'), new Error('boom'), function (err) {
-
- expect(err).to.exist;
- expect(err.message).to.equal('boom');
- done();
- });
- });
- });
-
- describe('Base64Url', function () {
-
- var base64str = 'AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0-P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9fn-AgYKDhIWGh4iJiouMjY6PkJGSk5SVlpeYmZqbnJ2en6ChoqOkpaanqKmqq6ytrq-wsbKztLW2t7i5uru8vb6_wMHCw8TFxsfIycrLzM3Oz9DR0tPU1dbX2Nna29zd3t_g4eLj5OXm5-jp6uvs7e7v8PHy8_T19vf4-fr7_P3-_w';
- var str = unescape('%00%01%02%03%04%05%06%07%08%09%0A%0B%0C%0D%0E%0F%10%11%12%13%14%15%16%17%18%19%1A%1B%1C%1D%1E%1F%20%21%22%23%24%25%26%27%28%29*+%2C-./0123456789%3A%3B%3C%3D%3E%3F@ABCDEFGHIJKLMNOPQRSTUVWXYZ%5B%5C%5D%5E_%60abcdefghijklmnopqrstuvwxyz%7B%7C%7D%7E%7F%80%81%82%83%84%85%86%87%88%89%8A%8B%8C%8D%8E%8F%90%91%92%93%94%95%96%97%98%99%9A%9B%9C%9D%9E%9F%A0%A1%A2%A3%A4%A5%A6%A7%A8%A9%AA%AB%AC%AD%AE%AF%B0%B1%B2%B3%B4%B5%B6%B7%B8%B9%BA%BB%BC%BD%BE%BF%C0%C1%C2%C3%C4%C5%C6%C7%C8%C9%CA%CB%CC%CD%CE%CF%D0%D1%D2%D3%D4%D5%D6%D7%D8%D9%DA%DB%DC%DD%DE%DF%E0%E1%E2%E3%E4%E5%E6%E7%E8%E9%EA%EB%EC%ED%EE%EF%F0%F1%F2%F3%F4%F5%F6%F7%F8%F9%FA%FB%FC%FD%FE%FF');
-
- describe('#base64urlEncode', function () {
-
- it('should base64 URL-safe a string', function (done) {
-
- expect(Hoek.base64urlEncode(str)).to.equal(base64str);
- done();
- });
- });
-
- describe('#base64urlDecode', function () {
-
- it('should un-base64 URL-safe a string', function (done) {
-
- expect(Hoek.base64urlDecode(base64str)).to.equal(str);
- done();
- });
-
- it('should return error on undefined input', function (done) {
-
- expect(Hoek.base64urlDecode().message).to.exist;
- done();
- });
-
- it('should return error on invalid input', function (done) {
-
- expect(Hoek.base64urlDecode('*').message).to.exist;
- done();
- });
- });
- });
-
- describe('#escapeHeaderAttribute', function () {
-
- it('should not alter ascii values', function (done) {
-
- var a = Hoek.escapeHeaderAttribute('My Value');
- expect(a).to.equal('My Value');
- done();
- });
-
- it('should escape all special HTTP header attribute characters', function (done) {
-
- var a = Hoek.escapeHeaderAttribute('I said go!!!#"' + String.fromCharCode(92));
- expect(a).to.equal('I said go!!!#\\"\\\\');
- done();
- });
-
- it('should throw on large unicode characters', function (done) {
-
- var fn = function () {
-
- Hoek.escapeHeaderAttribute('this is a test' + String.fromCharCode(500) + String.fromCharCode(300));
- };
-
- expect(fn).to.throw(Error);
- done();
- });
-
- it('should throw on CRLF to prevent response splitting', function (done) {
-
- var fn = function () {
-
- Hoek.escapeHeaderAttribute('this is a test\r\n');
- };
-
- expect(fn).to.throw(Error);
- done();
- });
- });
-
- describe('#escapeHtml', function () {
-
- it('should escape all special HTML characters', function (done) {
-
- var a = Hoek.escapeHtml('&<>"\'`');
- expect(a).to.equal('&amp;&lt;&gt;&quot;&#x27;&#x60;');
- done();
- });
-
- it('should return empty string on falsy input', function (done) {
-
- var a = Hoek.escapeHtml('');
- expect(a).to.equal('');
- done();
- });
-
- it('should return unchanged string on no reserved input', function (done) {
-
- var a = Hoek.escapeHtml('abc');
- expect(a).to.equal('abc');
- done();
- });
- });
-
- describe('#printEvent', function () {
-
- it('outputs event as string', function (done) {
-
- var event = {
- timestamp: (new Date(2013, 1, 1, 6, 30, 45, 123)).getTime(),
- tags: ['a', 'b', 'c'],
- data: { some: 'data' }
- };
-
- Hoek.consoleFunc = function (string) {
-
- Hoek.consoleFunc = console.log;
- expect(string).to.equal('130201/063045.123, a, {"some":"data"}');
- done();
- };
-
- Hoek.printEvent(event);
- });
-
- it('outputs JSON error', function (done) {
-
- var event = {
- timestamp: (new Date(2013, 1, 1, 6, 30, 45, 123)).getTime(),
- tags: ['a', 'b', 'c'],
- data: { some: 'data' }
- };
-
- event.data.a = event.data;
-
- Hoek.consoleFunc = function (string) {
-
- Hoek.consoleFunc = console.log;
- expect(string).to.equal('130201/063045.123, a, JSON Error: Converting circular structure to JSON');
- done();
- };
-
- Hoek.printEvent(event);
- });
- });
-
- describe('#nextTick', function () {
-
- it('calls the provided callback on nextTick', function (done) {
-
- var a = 0;
-
- var inc = function (step, next) {
-
- a += step;
- next();
- };
-
- var ticked = Hoek.nextTick(inc);
-
- ticked(5, function () {
-
- expect(a).to.equal(6);
- done();
- });
-
- expect(a).to.equal(0);
- inc(1, function () {
-
- expect(a).to.equal(1);
- });
- });
- });
-});
-
diff --git a/deps/npm/node_modules/request/node_modules/hawk/node_modules/boom/node_modules/hoek/test/modules/test1.js b/deps/npm/node_modules/request/node_modules/hawk/node_modules/boom/node_modules/hoek/test/modules/test1.js
deleted file mode 100755
index 3f41e601e..000000000
--- a/deps/npm/node_modules/request/node_modules/hawk/node_modules/boom/node_modules/hoek/test/modules/test1.js
+++ /dev/null
@@ -1 +0,0 @@
-exports.x = 1;
diff --git a/deps/npm/node_modules/request/node_modules/hawk/node_modules/boom/node_modules/hoek/test/modules/test2.js b/deps/npm/node_modules/request/node_modules/hawk/node_modules/boom/node_modules/hoek/test/modules/test2.js
deleted file mode 100755
index 38556b274..000000000
--- a/deps/npm/node_modules/request/node_modules/hawk/node_modules/boom/node_modules/hoek/test/modules/test2.js
+++ /dev/null
@@ -1 +0,0 @@
-exports.y = 2;
diff --git a/deps/npm/node_modules/request/node_modules/hawk/node_modules/boom/node_modules/hoek/test/modules/test3.js b/deps/npm/node_modules/request/node_modules/hawk/node_modules/boom/node_modules/hoek/test/modules/test3.js
deleted file mode 100755
index 436b860b8..000000000
--- a/deps/npm/node_modules/request/node_modules/hawk/node_modules/boom/node_modules/hoek/test/modules/test3.js
+++ /dev/null
@@ -1 +0,0 @@
-exports.z = 3;
diff --git a/deps/npm/node_modules/request/node_modules/hawk/node_modules/boom/package.json b/deps/npm/node_modules/request/node_modules/hawk/node_modules/boom/package.json
index d9f9e42c2..c57a11a39 100755
--- a/deps/npm/node_modules/request/node_modules/hawk/node_modules/boom/package.json
+++ b/deps/npm/node_modules/request/node_modules/hawk/node_modules/boom/package.json
@@ -41,6 +41,7 @@
"bugs": {
"url": "https://github.com/spumko/boom/issues"
},
+ "homepage": "https://github.com/spumko/boom",
"_id": "boom@0.4.2",
"_from": "boom@0.4.x"
}
diff --git a/deps/npm/node_modules/request/node_modules/hawk/node_modules/cryptiles/.npmignore b/deps/npm/node_modules/request/node_modules/hawk/node_modules/cryptiles/.npmignore
index 77ba16cb0..b3bb51763 100644
--- a/deps/npm/node_modules/request/node_modules/hawk/node_modules/cryptiles/.npmignore
+++ b/deps/npm/node_modules/request/node_modules/hawk/node_modules/cryptiles/.npmignore
@@ -1,18 +1,18 @@
-.idea
-*.iml
-npm-debug.log
-dump.rdb
-node_modules
-results.tap
-results.xml
-npm-shrinkwrap.json
-config.json
-.DS_Store
-*/.DS_Store
-*/*/.DS_Store
-._*
-*/._*
-*/*/._*
-coverage.*
-lib-cov
-
+.idea
+*.iml
+npm-debug.log
+dump.rdb
+node_modules
+results.tap
+results.xml
+npm-shrinkwrap.json
+config.json
+.DS_Store
+*/.DS_Store
+*/*/.DS_Store
+._*
+*/._*
+*/*/._*
+coverage.*
+lib-cov
+
diff --git a/deps/npm/node_modules/request/node_modules/hawk/node_modules/cryptiles/.travis.yml b/deps/npm/node_modules/request/node_modules/hawk/node_modules/cryptiles/.travis.yml
index 047f7e3d5..40ca59eee 100755
--- a/deps/npm/node_modules/request/node_modules/hawk/node_modules/cryptiles/.travis.yml
+++ b/deps/npm/node_modules/request/node_modules/hawk/node_modules/cryptiles/.travis.yml
@@ -1,5 +1,5 @@
-language: node_js
-
-node_js:
- - 0.10
-
+language: node_js
+
+node_js:
+ - 0.10
+
diff --git a/deps/npm/node_modules/request/node_modules/hawk/node_modules/cryptiles/lib/index.js b/deps/npm/node_modules/request/node_modules/hawk/node_modules/cryptiles/lib/index.js
index 4a3773681..dcf2bc38f 100755
--- a/deps/npm/node_modules/request/node_modules/hawk/node_modules/cryptiles/lib/index.js
+++ b/deps/npm/node_modules/request/node_modules/hawk/node_modules/cryptiles/lib/index.js
@@ -45,6 +45,12 @@ exports.randomBits = function (bits) {
exports.fixedTimeComparison = function (a, b) {
+ if (typeof a !== 'string' ||
+ typeof b !== 'string') {
+
+ return false;
+ }
+
var mismatch = (a.length === b.length ? 0 : 1);
if (mismatch) {
b = a;
diff --git a/deps/npm/node_modules/request/node_modules/hawk/node_modules/cryptiles/package.json b/deps/npm/node_modules/request/node_modules/hawk/node_modules/cryptiles/package.json
index c3673dd77..cc1f73938 100755
--- a/deps/npm/node_modules/request/node_modules/hawk/node_modules/cryptiles/package.json
+++ b/deps/npm/node_modules/request/node_modules/hawk/node_modules/cryptiles/package.json
@@ -1,7 +1,7 @@
{
"name": "cryptiles",
"description": "General purpose crypto utilities",
- "version": "0.2.1",
+ "version": "0.2.2",
"author": {
"name": "Eran Hammer",
"email": "eran@hueniverse.com",
@@ -42,6 +42,7 @@
"bugs": {
"url": "https://github.com/hueniverse/cryptiles/issues"
},
- "_id": "cryptiles@0.2.1",
+ "homepage": "https://github.com/hueniverse/cryptiles",
+ "_id": "cryptiles@0.2.2",
"_from": "cryptiles@0.2.x"
}
diff --git a/deps/npm/node_modules/request/node_modules/hawk/node_modules/cryptiles/test/index.js b/deps/npm/node_modules/request/node_modules/hawk/node_modules/cryptiles/test/index.js
index 0d6b73c89..58aaa70b3 100755
--- a/deps/npm/node_modules/request/node_modules/hawk/node_modules/cryptiles/test/index.js
+++ b/deps/npm/node_modules/request/node_modules/hawk/node_modules/cryptiles/test/index.js
@@ -89,6 +89,12 @@ describe('Cryptiles', function () {
expect(Cryptiles.fixedTimeComparison(a + 'x', a + 'y')).to.equal(false);
done();
});
+
+ it('should return false when not a string', function (done) {
+
+ expect(Cryptiles.fixedTimeComparison('x', null)).to.equal(false);
+ done();
+ });
});
});
diff --git a/deps/npm/node_modules/request/node_modules/hawk/node_modules/hoek/.travis.yml b/deps/npm/node_modules/request/node_modules/hawk/node_modules/hoek/.travis.yml
index 047f7e3d5..40ca59eee 100755
--- a/deps/npm/node_modules/request/node_modules/hawk/node_modules/hoek/.travis.yml
+++ b/deps/npm/node_modules/request/node_modules/hawk/node_modules/hoek/.travis.yml
@@ -1,5 +1,5 @@
-language: node_js
-
-node_js:
- - 0.10
-
+language: node_js
+
+node_js:
+ - 0.10
+
diff --git a/deps/npm/node_modules/request/node_modules/hawk/node_modules/hoek/LICENSE b/deps/npm/node_modules/request/node_modules/hawk/node_modules/hoek/LICENSE
index 87c1f4e11..394adcff2 100755
--- a/deps/npm/node_modules/request/node_modules/hawk/node_modules/hoek/LICENSE
+++ b/deps/npm/node_modules/request/node_modules/hawk/node_modules/hoek/LICENSE
@@ -1,33 +1,33 @@
-Copyright (c) 2011-2013, Walmart.
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
- * Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- * Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
- * Neither the name of Walmart nor the
- names of its contributors may be used to endorse or promote products
- derived from this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
-ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-DISCLAIMED. IN NO EVENT SHALL WALMART BE LIABLE FOR ANY
-DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
-ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-
- * * *
-
-
-Portions of this project were initially based on Postmile, Copyright (c) 2011, Yahoo Inc.
-Postmile is published at https://github.com/yahoo/postmile and its licensing terms are
-published at https://github.com/yahoo/postmile/blob/master/LICENSE.
-
+Copyright (c) 2011-2013, Walmart.
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ * Neither the name of Walmart nor the
+ names of its contributors may be used to endorse or promote products
+ derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL WALMART BE LIABLE FOR ANY
+DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+ * * *
+
+
+Portions of this project were initially based on Postmile, Copyright (c) 2011, Yahoo Inc.
+Postmile is published at https://github.com/yahoo/postmile and its licensing terms are
+published at https://github.com/yahoo/postmile/blob/master/LICENSE.
+
diff --git a/deps/npm/node_modules/request/node_modules/hawk/node_modules/hoek/Makefile b/deps/npm/node_modules/request/node_modules/hawk/node_modules/hoek/Makefile
index 48ee48e73..e605d6c04 100755
--- a/deps/npm/node_modules/request/node_modules/hawk/node_modules/hoek/Makefile
+++ b/deps/npm/node_modules/request/node_modules/hawk/node_modules/hoek/Makefile
@@ -1,10 +1,10 @@
-test:
- @./node_modules/.bin/lab
-test-cov:
- @./node_modules/.bin/lab -r threshold -t 100
-test-cov-html:
- @./node_modules/.bin/lab -r html -o coverage.html
-complexity:
- @./node_modules/.bin/cr -o complexity.md -f markdown lib
-
-.PHONY: test test-cov test-cov-html complexity \ No newline at end of file
+test:
+ @node node_modules/lab/bin/lab
+test-cov:
+ @node node_modules/lab/bin/lab -r threshold -t 100
+test-cov-html:
+ @node node_modules/lab/bin/lab -r html -o coverage.html
+complexity:
+ @node node_modules/complexity-report/src/cli.js -o complexity.md -f markdown lib
+
+.PHONY: test test-cov test-cov-html complexity
diff --git a/deps/npm/node_modules/request/node_modules/hawk/node_modules/hoek/lib/escape.js b/deps/npm/node_modules/request/node_modules/hawk/node_modules/hoek/lib/escape.js
index e5a47708a..666b3dc82 100755
--- a/deps/npm/node_modules/request/node_modules/hawk/node_modules/hoek/lib/escape.js
+++ b/deps/npm/node_modules/request/node_modules/hawk/node_modules/hoek/lib/escape.js
@@ -1,132 +1,132 @@
-// Declare internals
-
-var internals = {};
-
-
-exports.escapeJavaScript = function (input) {
-
- if (!input) {
- return '';
- }
-
- var escaped = '';
-
- for (var i = 0, il = input.length; i < il; ++i) {
-
- var charCode = input.charCodeAt(i);
-
- if (internals.isSafe(charCode)) {
- escaped += input[i];
- }
- else {
- escaped += internals.escapeJavaScriptChar(charCode);
- }
- }
-
- return escaped;
-};
-
-
-exports.escapeHtml = function (input) {
-
- if (!input) {
- return '';
- }
-
- var escaped = '';
-
- for (var i = 0, il = input.length; i < il; ++i) {
-
- var charCode = input.charCodeAt(i);
-
- if (internals.isSafe(charCode)) {
- escaped += input[i];
- }
- else {
- escaped += internals.escapeHtmlChar(charCode);
- }
- }
-
- return escaped;
-};
-
-
-internals.escapeJavaScriptChar = function (charCode) {
-
- if (charCode >= 256) {
- return '\\u' + internals.padLeft('' + charCode, 4);
- }
-
- var hexValue = new Buffer(String.fromCharCode(charCode), 'ascii').toString('hex');
- return '\\x' + internals.padLeft(hexValue, 2);
-};
-
-
-internals.escapeHtmlChar = function (charCode) {
-
- var namedEscape = internals.namedHtml[charCode];
- if (typeof namedEscape !== 'undefined') {
- return namedEscape;
- }
-
- if (charCode >= 256) {
- return '&#' + charCode + ';';
- }
-
- var hexValue = new Buffer(String.fromCharCode(charCode), 'ascii').toString('hex');
- return '&#x' + internals.padLeft(hexValue, 2) + ';';
-};
-
-
-internals.padLeft = function (str, len) {
-
- while (str.length < len) {
- str = '0' + str;
- }
-
- return str;
-};
-
-
-internals.isSafe = function (charCode) {
-
- return (typeof internals.safeCharCodes[charCode] !== 'undefined');
-};
-
-
-internals.namedHtml = {
- '38': '&amp;',
- '60': '&lt;',
- '62': '&gt;',
- '34': '&quot;',
- '160': '&nbsp;',
- '162': '&cent;',
- '163': '&pound;',
- '164': '&curren;',
- '169': '&copy;',
- '174': '&reg;'
-};
-
-
-internals.safeCharCodes = (function () {
-
- var safe = {};
-
- for (var i = 32; i < 123; ++i) {
-
- if ((i >= 97 && i <= 122) || // a-z
- (i >= 65 && i <= 90) || // A-Z
- (i >= 48 && i <= 57) || // 0-9
- i === 32 || // space
- i === 46 || // .
- i === 44 || // ,
- i === 45 || // -
- i === 58 || // :
- i === 95) { // _
-
- safe[i] = null;
- }
- }
-
- return safe;
+// Declare internals
+
+var internals = {};
+
+
+exports.escapeJavaScript = function (input) {
+
+ if (!input) {
+ return '';
+ }
+
+ var escaped = '';
+
+ for (var i = 0, il = input.length; i < il; ++i) {
+
+ var charCode = input.charCodeAt(i);
+
+ if (internals.isSafe(charCode)) {
+ escaped += input[i];
+ }
+ else {
+ escaped += internals.escapeJavaScriptChar(charCode);
+ }
+ }
+
+ return escaped;
+};
+
+
+exports.escapeHtml = function (input) {
+
+ if (!input) {
+ return '';
+ }
+
+ var escaped = '';
+
+ for (var i = 0, il = input.length; i < il; ++i) {
+
+ var charCode = input.charCodeAt(i);
+
+ if (internals.isSafe(charCode)) {
+ escaped += input[i];
+ }
+ else {
+ escaped += internals.escapeHtmlChar(charCode);
+ }
+ }
+
+ return escaped;
+};
+
+
+internals.escapeJavaScriptChar = function (charCode) {
+
+ if (charCode >= 256) {
+ return '\\u' + internals.padLeft('' + charCode, 4);
+ }
+
+ var hexValue = new Buffer(String.fromCharCode(charCode), 'ascii').toString('hex');
+ return '\\x' + internals.padLeft(hexValue, 2);
+};
+
+
+internals.escapeHtmlChar = function (charCode) {
+
+ var namedEscape = internals.namedHtml[charCode];
+ if (typeof namedEscape !== 'undefined') {
+ return namedEscape;
+ }
+
+ if (charCode >= 256) {
+ return '&#' + charCode + ';';
+ }
+
+ var hexValue = new Buffer(String.fromCharCode(charCode), 'ascii').toString('hex');
+ return '&#x' + internals.padLeft(hexValue, 2) + ';';
+};
+
+
+internals.padLeft = function (str, len) {
+
+ while (str.length < len) {
+ str = '0' + str;
+ }
+
+ return str;
+};
+
+
+internals.isSafe = function (charCode) {
+
+ return (typeof internals.safeCharCodes[charCode] !== 'undefined');
+};
+
+
+internals.namedHtml = {
+ '38': '&amp;',
+ '60': '&lt;',
+ '62': '&gt;',
+ '34': '&quot;',
+ '160': '&nbsp;',
+ '162': '&cent;',
+ '163': '&pound;',
+ '164': '&curren;',
+ '169': '&copy;',
+ '174': '&reg;'
+};
+
+
+internals.safeCharCodes = (function () {
+
+ var safe = {};
+
+ for (var i = 32; i < 123; ++i) {
+
+ if ((i >= 97 && i <= 122) || // a-z
+ (i >= 65 && i <= 90) || // A-Z
+ (i >= 48 && i <= 57) || // 0-9
+ i === 32 || // space
+ i === 46 || // .
+ i === 44 || // ,
+ i === 45 || // -
+ i === 58 || // :
+ i === 95) { // _
+
+ safe[i] = null;
+ }
+ }
+
+ return safe;
}()); \ No newline at end of file
diff --git a/deps/npm/node_modules/request/node_modules/hawk/node_modules/hoek/lib/index.js b/deps/npm/node_modules/request/node_modules/hawk/node_modules/hoek/lib/index.js
index ebe5da9b9..806260d25 100755
--- a/deps/npm/node_modules/request/node_modules/hawk/node_modules/hoek/lib/index.js
+++ b/deps/npm/node_modules/request/node_modules/hawk/node_modules/hoek/lib/index.js
@@ -70,16 +70,16 @@ exports.merge = function (target, source, isNullOverride /* = true */, isMergeAr
target.length = 0; // Must not change target assignment
}
- source.forEach(function (item) {
-
- target.push(item);
- });
+ for (var i = 0, il = source.length; i < il; ++i) {
+ target.push(source[i]);
+ }
return target;
}
- Object.keys(source).forEach(function (key) {
-
+ var keys = Object.keys(source);
+ for (var k = 0, kl = keys.length; k < kl; ++k) {
+ var key = keys[k];
var value = source[key];
if (value &&
typeof value === 'object') {
@@ -101,7 +101,7 @@ exports.merge = function (target, source, isNullOverride /* = true */, isMergeAr
target[key] = value;
}
}
- });
+ }
return target;
};
@@ -174,7 +174,7 @@ exports.mapToObject = function (array, key) {
// Find the common unique items in two arrays
-exports.intersect = function (array1, array2) {
+exports.intersect = function (array1, array2, justFirst) {
if (!array1 || !array2) {
return [];
@@ -185,12 +185,16 @@ exports.intersect = function (array1, array2) {
var found = {};
for (var i = 0, il = array2.length; i < il; ++i) {
if (hash[array2[i]] && !found[array2[i]]) {
+ if (justFirst) {
+ return array2[i];
+ }
+
common.push(array2[i]);
found[array2[i]] = true;
}
}
- return common;
+ return (justFirst ? null : common);
};
@@ -243,12 +247,11 @@ exports.reach = function (obj, chain) {
var path = chain.split('.');
var ref = obj;
- path.forEach(function (level) {
-
+ for (var i = 0, il = path.length; i < il; ++i) {
if (ref) {
- ref = ref[level];
+ ref = ref[path[i]];
}
- });
+ }
return ref;
};
@@ -291,10 +294,10 @@ exports.inheritAsync = function (self, obj, keys) {
exports.formatStack = function (stack) {
var trace = [];
- stack.forEach(function (item) {
-
+ for (var i = 0, il = stack.length; i < il; ++i) {
+ var item = stack[i];
trace.push([item.getFileName(), item.getLineNumber(), item.getColumnNumber(), item.getFunctionName(), item.isConstructor()]);
- });
+ }
return trace;
};
@@ -303,10 +306,11 @@ exports.formatStack = function (stack) {
exports.formatTrace = function (trace) {
var display = [];
- trace.forEach(function (row) {
+ for (var i = 0, il = trace.length; i < il; ++i) {
+ var row = trace[i];
display.push((row[4] ? 'new ' : '') + row[3] + ' (' + row[0] + ':' + row[1] + ':' + row[2] + ')');
- });
+ }
return display;
};
@@ -386,8 +390,9 @@ exports.loadDirModules = function (path, excludeFiles, target) { // target(
exclude[excludeFiles[i] + '.js'] = true;
}
- Fs.readdirSync(path).forEach(function (filename) {
-
+ var files = Fs.readdirSync(path);
+ for (i = 0, il = files.length; i < il; ++i) {
+ var filename = files[i];
if (/\.js$/.test(filename) &&
!exclude[filename]) {
@@ -401,7 +406,7 @@ exports.loadDirModules = function (path, excludeFiles, target) { // target(
target(path + '/' + name, name, capName);
}
}
- });
+ }
};
diff --git a/deps/npm/node_modules/request/node_modules/hawk/node_modules/hoek/package.json b/deps/npm/node_modules/request/node_modules/hawk/node_modules/hoek/package.json
index 8ef9bace7..e18f14859 100755
--- a/deps/npm/node_modules/request/node_modules/hawk/node_modules/hoek/package.json
+++ b/deps/npm/node_modules/request/node_modules/hawk/node_modules/hoek/package.json
@@ -1,7 +1,7 @@
{
"name": "hoek",
"description": "General purpose node utilities",
- "version": "0.8.5",
+ "version": "0.9.1",
"author": {
"name": "Eran Hammer",
"email": "eran@hueniverse.com",
@@ -43,6 +43,7 @@
"bugs": {
"url": "https://github.com/spumko/hoek/issues"
},
- "_id": "hoek@0.8.5",
- "_from": "hoek@0.8.x"
+ "homepage": "https://github.com/spumko/hoek",
+ "_id": "hoek@0.9.1",
+ "_from": "hoek@0.9.x"
}
diff --git a/deps/npm/node_modules/request/node_modules/hawk/node_modules/hoek/test/escaper.js b/deps/npm/node_modules/request/node_modules/hawk/node_modules/hoek/test/escaper.js
index 4d1d67ac7..4dddd77dc 100644
--- a/deps/npm/node_modules/request/node_modules/hawk/node_modules/hoek/test/escaper.js
+++ b/deps/npm/node_modules/request/node_modules/hawk/node_modules/hoek/test/escaper.js
@@ -1,86 +1,86 @@
-// Load modules
-
-var Lab = require('lab');
-var Hoek = require('../lib');
-
-
-// Declare internals
-
-var internals = {};
-
-
-// Test shortcuts
-
-var expect = Lab.expect;
-var before = Lab.before;
-var after = Lab.after;
-var describe = Lab.experiment;
-var it = Lab.test;
-
-
-describe('Hoek', function () {
-
- describe('#escapeJavaScript', function () {
-
- it('encodes / characters', function (done) {
-
- var encoded = Hoek.escapeJavaScript('<script>alert(1)</script>');
- expect(encoded).to.equal('\\x3cscript\\x3ealert\\x281\\x29\\x3c\\x2fscript\\x3e');
- done();
- });
-
- it('encodes \' characters', function (done) {
-
- var encoded = Hoek.escapeJavaScript('something(\'param\')');
- expect(encoded).to.equal('something\\x28\\x27param\\x27\\x29');
- done();
- });
-
- it('encodes large unicode characters with the correct padding', function (done) {
-
- var encoded = Hoek.escapeJavaScript(String.fromCharCode(500) + String.fromCharCode(1000));
- expect(encoded).to.equal('\\u0500\\u1000');
- done();
- });
-
- it('doesn\'t throw an exception when passed null', function (done) {
-
- var encoded = Hoek.escapeJavaScript(null);
- expect(encoded).to.equal('');
- done();
- });
- });
-
- describe('#escapeHtml', function () {
-
- it('encodes / characters', function (done) {
-
- var encoded = Hoek.escapeHtml('<script>alert(1)</script>');
- expect(encoded).to.equal('&lt;script&gt;alert&#x28;1&#x29;&lt;&#x2f;script&gt;');
- done();
- });
-
- it('encodes < and > as named characters', function (done) {
-
- var encoded = Hoek.escapeHtml('<script><>');
- expect(encoded).to.equal('&lt;script&gt;&lt;&gt;');
- done();
- });
-
- it('encodes large unicode characters', function (done) {
-
- var encoded = Hoek.escapeHtml(String.fromCharCode(500) + String.fromCharCode(1000));
- expect(encoded).to.equal('&#500;&#1000;');
- done();
- });
-
- it('doesn\'t throw an exception when passed null', function (done) {
-
- var encoded = Hoek.escapeHtml(null);
- expect(encoded).to.equal('');
- done();
- });
- });
-});
-
-
+// Load modules
+
+var Lab = require('lab');
+var Hoek = require('../lib');
+
+
+// Declare internals
+
+var internals = {};
+
+
+// Test shortcuts
+
+var expect = Lab.expect;
+var before = Lab.before;
+var after = Lab.after;
+var describe = Lab.experiment;
+var it = Lab.test;
+
+
+describe('Hoek', function () {
+
+ describe('#escapeJavaScript', function () {
+
+ it('encodes / characters', function (done) {
+
+ var encoded = Hoek.escapeJavaScript('<script>alert(1)</script>');
+ expect(encoded).to.equal('\\x3cscript\\x3ealert\\x281\\x29\\x3c\\x2fscript\\x3e');
+ done();
+ });
+
+ it('encodes \' characters', function (done) {
+
+ var encoded = Hoek.escapeJavaScript('something(\'param\')');
+ expect(encoded).to.equal('something\\x28\\x27param\\x27\\x29');
+ done();
+ });
+
+ it('encodes large unicode characters with the correct padding', function (done) {
+
+ var encoded = Hoek.escapeJavaScript(String.fromCharCode(500) + String.fromCharCode(1000));
+ expect(encoded).to.equal('\\u0500\\u1000');
+ done();
+ });
+
+ it('doesn\'t throw an exception when passed null', function (done) {
+
+ var encoded = Hoek.escapeJavaScript(null);
+ expect(encoded).to.equal('');
+ done();
+ });
+ });
+
+ describe('#escapeHtml', function () {
+
+ it('encodes / characters', function (done) {
+
+ var encoded = Hoek.escapeHtml('<script>alert(1)</script>');
+ expect(encoded).to.equal('&lt;script&gt;alert&#x28;1&#x29;&lt;&#x2f;script&gt;');
+ done();
+ });
+
+ it('encodes < and > as named characters', function (done) {
+
+ var encoded = Hoek.escapeHtml('<script><>');
+ expect(encoded).to.equal('&lt;script&gt;&lt;&gt;');
+ done();
+ });
+
+ it('encodes large unicode characters', function (done) {
+
+ var encoded = Hoek.escapeHtml(String.fromCharCode(500) + String.fromCharCode(1000));
+ expect(encoded).to.equal('&#500;&#1000;');
+ done();
+ });
+
+ it('doesn\'t throw an exception when passed null', function (done) {
+
+ var encoded = Hoek.escapeHtml(null);
+ expect(encoded).to.equal('');
+ done();
+ });
+ });
+});
+
+
diff --git a/deps/npm/node_modules/request/node_modules/hawk/node_modules/hoek/test/index.js b/deps/npm/node_modules/request/node_modules/hawk/node_modules/hoek/test/index.js
index cd93e7657..c40e3ad9a 100755
--- a/deps/npm/node_modules/request/node_modules/hawk/node_modules/hoek/test/index.js
+++ b/deps/npm/node_modules/request/node_modules/hawk/node_modules/hoek/test/index.js
@@ -426,6 +426,15 @@ describe('Hoek', function () {
done();
});
+ it('should return just the first common object of two arrays', function (done) {
+
+ var array1 = [1, 2, 3, 4, 4, 5, 5];
+ var array2 = [5, 4, 5, 6, 7];
+ var common = Hoek.intersect(array1, array2, true);
+ expect(common).to.equal(5);
+ done();
+ });
+
it('should return an empty array if either input is null', function (done) {
expect(Hoek.intersect([1], null).length).to.equal(0);
diff --git a/deps/npm/node_modules/request/node_modules/hawk/node_modules/hoek/test/modules/test1.js b/deps/npm/node_modules/request/node_modules/hawk/node_modules/hoek/test/modules/test1.js
index fa4e06abe..3f41e601e 100755
--- a/deps/npm/node_modules/request/node_modules/hawk/node_modules/hoek/test/modules/test1.js
+++ b/deps/npm/node_modules/request/node_modules/hawk/node_modules/hoek/test/modules/test1.js
@@ -1 +1 @@
-exports.x = 1;
+exports.x = 1;
diff --git a/deps/npm/node_modules/request/node_modules/hawk/node_modules/hoek/test/modules/test2.js b/deps/npm/node_modules/request/node_modules/hawk/node_modules/hoek/test/modules/test2.js
index 88e9166e8..38556b274 100755
--- a/deps/npm/node_modules/request/node_modules/hawk/node_modules/hoek/test/modules/test2.js
+++ b/deps/npm/node_modules/request/node_modules/hawk/node_modules/hoek/test/modules/test2.js
@@ -1 +1 @@
-exports.y = 2;
+exports.y = 2;
diff --git a/deps/npm/node_modules/request/node_modules/hawk/node_modules/hoek/test/modules/test3.js b/deps/npm/node_modules/request/node_modules/hawk/node_modules/hoek/test/modules/test3.js
index 670e724a6..436b860b8 100755
--- a/deps/npm/node_modules/request/node_modules/hawk/node_modules/hoek/test/modules/test3.js
+++ b/deps/npm/node_modules/request/node_modules/hawk/node_modules/hoek/test/modules/test3.js
@@ -1 +1 @@
-exports.z = 3;
+exports.z = 3;
diff --git a/deps/npm/node_modules/request/node_modules/hawk/node_modules/sntp/node_modules/hoek/.npmignore b/deps/npm/node_modules/request/node_modules/hawk/node_modules/sntp/node_modules/hoek/.npmignore
deleted file mode 100644
index 9966e5e63..000000000
--- a/deps/npm/node_modules/request/node_modules/hawk/node_modules/sntp/node_modules/hoek/.npmignore
+++ /dev/null
@@ -1,18 +0,0 @@
-.idea
-*.iml
-npm-debug.log
-dump.rdb
-node_modules
-results.tap
-results.xml
-npm-shrinkwrap.json
-config.json
-.DS_Store
-*/.DS_Store
-*/*/.DS_Store
-._*
-*/._*
-*/*/._*
-coverage.*
-lib-cov
-complexity.md
diff --git a/deps/npm/node_modules/request/node_modules/hawk/node_modules/sntp/node_modules/hoek/.travis.yml b/deps/npm/node_modules/request/node_modules/hawk/node_modules/sntp/node_modules/hoek/.travis.yml
deleted file mode 100755
index 40ca59eee..000000000
--- a/deps/npm/node_modules/request/node_modules/hawk/node_modules/sntp/node_modules/hoek/.travis.yml
+++ /dev/null
@@ -1,5 +0,0 @@
-language: node_js
-
-node_js:
- - 0.10
-
diff --git a/deps/npm/node_modules/request/node_modules/hawk/node_modules/sntp/node_modules/hoek/LICENSE b/deps/npm/node_modules/request/node_modules/hawk/node_modules/sntp/node_modules/hoek/LICENSE
deleted file mode 100755
index 394adcff2..000000000
--- a/deps/npm/node_modules/request/node_modules/hawk/node_modules/sntp/node_modules/hoek/LICENSE
+++ /dev/null
@@ -1,33 +0,0 @@
-Copyright (c) 2011-2013, Walmart.
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
- * Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- * Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
- * Neither the name of Walmart nor the
- names of its contributors may be used to endorse or promote products
- derived from this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
-ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-DISCLAIMED. IN NO EVENT SHALL WALMART BE LIABLE FOR ANY
-DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
-ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-
- * * *
-
-
-Portions of this project were initially based on Postmile, Copyright (c) 2011, Yahoo Inc.
-Postmile is published at https://github.com/yahoo/postmile and its licensing terms are
-published at https://github.com/yahoo/postmile/blob/master/LICENSE.
-
diff --git a/deps/npm/node_modules/request/node_modules/hawk/node_modules/sntp/node_modules/hoek/Makefile b/deps/npm/node_modules/request/node_modules/hawk/node_modules/sntp/node_modules/hoek/Makefile
deleted file mode 100755
index e605d6c04..000000000
--- a/deps/npm/node_modules/request/node_modules/hawk/node_modules/sntp/node_modules/hoek/Makefile
+++ /dev/null
@@ -1,10 +0,0 @@
-test:
- @node node_modules/lab/bin/lab
-test-cov:
- @node node_modules/lab/bin/lab -r threshold -t 100
-test-cov-html:
- @node node_modules/lab/bin/lab -r html -o coverage.html
-complexity:
- @node node_modules/complexity-report/src/cli.js -o complexity.md -f markdown lib
-
-.PHONY: test test-cov test-cov-html complexity
diff --git a/deps/npm/node_modules/request/node_modules/hawk/node_modules/sntp/node_modules/hoek/README.md b/deps/npm/node_modules/request/node_modules/hawk/node_modules/sntp/node_modules/hoek/README.md
deleted file mode 100755
index ac64e2fda..000000000
--- a/deps/npm/node_modules/request/node_modules/hawk/node_modules/sntp/node_modules/hoek/README.md
+++ /dev/null
@@ -1,436 +0,0 @@
-<a href="https://github.com/spumko"><img src="https://raw.github.com/spumko/spumko/master/images/from.png" align="right" /></a>
-![hoek Logo](https://raw.github.com/spumko/hoek/master/images/hoek.png)
-
-General purpose node utilities
-
-[![Build Status](https://secure.travis-ci.org/spumko/hoek.png)](http://travis-ci.org/spumko/hoek)
-
-# Table of Contents
-
-* [Introduction](#introduction "Introduction")
-* [Object](#object "Object")
- * [clone](#cloneobj "clone")
- * [merge](#mergetarget-source-isnulloverride-ismergearrays "merge")
- * [applyToDefaults](#applytodefaultsdefaults-options "applyToDefaults")
- * [unique](#uniquearray-key "unique")
- * [mapToObject](#maptoobjectarray-key "mapToObject")
- * [intersect](#intersectarray1-array2 "intersect")
- * [matchKeys](#matchkeysobj-keys "matchKeys")
- * [flatten](#flattenarray-target "flatten")
- * [removeKeys](#removekeysobject-keys "removeKeys")
- * [reach](#reachobj-chain "reach")
- * [inheritAsync](#inheritasyncself-obj-keys "inheritAsync")
- * [rename](#renameobj-from-to "rename")
-* [Timer](#timer "Timer")
-* [Binary Encoding/Decoding](#binary "Binary Encoding/Decoding")
- * [base64urlEncode](#binary64urlEncodevalue "binary64urlEncode")
- * [base64urlDecode](#binary64urlDecodevalue "binary64urlDecode")
-* [Escaping Characters](#escaped "Escaping Characters")
- * [escapeHtml](#escapeHtmlstring "escapeHtml")
- * [escapeHeaderAttribute](#escapeHeaderAttributeattribute "escapeHeaderAttribute")
- * [escapeRegex](#escapeRegexstring "escapeRegex")
-* [Errors](#errors "Errors")
- * [assert](#assertmessage "assert")
- * [abort](#abortmessage "abort")
- * [displayStack](#displayStackslice "displayStack")
- * [callStack](#callStackslice "callStack")
- * [toss](#tosscondition "toss")
-* [Load files](#load-files "Load Files")
- * [loadPackage](#loadPackagedir "loadpackage")
- * [loadDirModules](#loadDirModulespath-excludefiles-target "loaddirmodules")
-
-
-
-# Introduction
-
-The *Hoek* general purpose node utilities library is used to aid in a variety of manners. It comes with useful methods for Arrays (clone, merge, applyToDefaults), Objects (removeKeys, copy), Asserting and more.
-
-For example, to use Hoek to set configuration with default options:
-```javascript
-var Hoek = require('hoek');
-
-var default = {url : "www.github.com", port : "8000", debug : true}
-
-var config = Hoek.applyToDefaults(default, {port : "3000", admin : true});
-
-// In this case, config would be { url: 'www.github.com', port: '3000', debug: true, admin: true }
-```
-
-Under each of the sections (such as Array), there are subsections which correspond to Hoek methods. Each subsection will explain how to use the corresponding method. In each js excerpt below, the var Hoek = require('hoek') is omitted for brevity.
-
-## Object
-
-Hoek provides several helpful methods for objects and arrays.
-
-### clone(obj)
-
-This method is used to clone an object or an array. A *deep copy* is made (duplicates everything, including values that are objects).
-
-```javascript
-
-var nestedObj = {
- w: /^something$/ig,
- x: {
- a: [1, 2, 3],
- b: 123456,
- c: new Date()
- },
- y: 'y',
- z: new Date()
- };
-
-var copy = Hoek.clone(nestedObj);
-
-copy.x.b = 100;
-
-console.log(copy.y) // results in 'y'
-console.log(nestedObj.x.b) // results in 123456
-console.log(copy.x.b) // results in 100
-```
-
-### merge(target, source, isNullOverride, isMergeArrays)
-isNullOverride, isMergeArrays default to true
-
-Merge all the properties of source into target, source wins in conflic, and by default null and undefined from source are applied
-
-
-```javascript
-
-var target = {a: 1, b : 2}
-var source = {a: 0, c: 5}
-var source2 = {a: null, c: 5}
-
-var targetArray = [1, 2, 3];
-var sourceArray = [4, 5];
-
-var newTarget = Hoek.merge(target, source); // results in {a: 0, b: 2, c: 5}
-newTarget = Hoek.merge(target, source2); // results in {a: null, b: 2, c: 5}
-newTarget = Hoek.merge(target, source2, false); // results in {a: 1, b: 2, c: 5}
-
-newTarget = Hoek.merge(targetArray, sourceArray) // results in [1, 2, 3, 4, 5]
-newTarget = Hoek.merge(targetArray, sourceArray, true, false) // results in [4, 5]
-
-
-
-
-```
-
-### applyToDefaults(defaults, options)
-
-Apply options to a copy of the defaults
-
-```javascript
-
-var defaults = {host: "localhost", port: 8000};
-var options = {port: 8080};
-
-var config = Hoek.applyToDefaults(defaults, options); // results in {host: "localhost", port: 8080};
-
-
-```
-
-### unique(array, key)
-
-Remove duplicate items from Array
-
-```javascript
-
-var array = [1, 2, 2, 3, 3, 4, 5, 6];
-
-var newArray = Hoek.unique(array); // results in [1,2,3,4,5,6];
-
-array = [{id: 1}, {id: 1}, {id: 2}];
-
-newArray = Hoek.unique(array, "id") // results in [{id: 1}, {id: 2}]
-
-```
-
-### mapToObject(array, key)
-
-Convert an Array into an Object
-
-```javascript
-
-var array = [1,2,3];
-var newObject = Hoek.mapToObject(array); // results in [{"1": true}, {"2": true}, {"3": true}]
-
-array = [{id: 1}, {id: 2}];
-newObject = Hoek.mapToObject(array, "id") // results in [{"id": 1}, {"id": 2}]
-
-```
-### intersect(array1, array2)
-
-Find the common unique items in two arrays
-
-```javascript
-
-var array1 = [1, 2, 3];
-var array2 = [1, 4, 5];
-
-var newArray = Hoek.intersect(array1, array2) // results in [1]
-
-```
-
-### matchKeys(obj, keys)
-
-Find which keys are present
-
-```javascript
-
-var obj = {a: 1, b: 2, c: 3};
-var keys = ["a", "e"];
-
-Hoek.matchKeys(obj, keys) // returns ["a"]
-
-```
-
-### flatten(array, target)
-
-Flatten an array
-
-```javascript
-
-var array = [1, 2, 3];
-var target = [4, 5];
-
-var flattenedArray = Hoek.flatten(array, target) // results in [4, 5, 1, 2, 3];
-
-```
-
-### removeKeys(object, keys)
-
-Remove keys
-
-```javascript
-
-var object = {a: 1, b: 2, c: 3, d: 4};
-
-var keys = ["a", "b"];
-
-Hoek.removeKeys(object, keys) // object is now {c: 3, d: 4}
-
-```
-
-### reach(obj, chain)
-
-Converts an object key chain string to reference
-
-```javascript
-
-var chain = 'a.b.c';
-var obj = {a : {b : { c : 1}}};
-
-Hoek.reach(obj, chain) // returns 1
-
-```
-
-### inheritAsync(self, obj, keys)
-
-Inherits a selected set of methods from an object, wrapping functions in asynchronous syntax and catching errors
-
-```javascript
-
-var targetFunc = function () { };
-
-var proto = {
- a: function () {
- return 'a!';
- },
- b: function () {
- return 'b!';
- },
- c: function () {
- throw new Error('c!');
- }
- };
-
-var keys = ['a', 'c'];
-
-Hoek.inheritAsync(targetFunc, proto, ['a', 'c']);
-
-var target = new targetFunc();
-
-target.a(function(err, result){console.log(result)} // returns 'a!'
-
-target.c(function(err, result){console.log(result)} // returns undefined
-
-target.b(function(err, result){console.log(result)} // gives error: Object [object Object] has no method 'b'
-
-```
-
-### rename(obj, from, to)
-
-Rename a key of an object
-
-```javascript
-
-var obj = {a : 1, b : 2};
-
-Hoek.rename(obj, "a", "c"); // obj is now {c : 1, b : 2}
-
-```
-
-
-# Timer
-
-A Timer object. Initializing a new timer object sets the ts to the number of milliseconds elapsed since 1 January 1970 00:00:00 UTC.
-
-```javascript
-
-
-example :
-
-
-var timerObj = new Hoek.Timer();
-console.log("Time is now: " + timerObj.ts)
-console.log("Elapsed time from initialization: " + timerObj.elapsed() + 'milliseconds')
-
-```
-
-# Binary Encoding/Decoding
-
-### base64urlEncode(value)
-
-Encodes value in Base64 or URL encoding
-
-### base64urlDecode(value)
-
-Decodes data in Base64 or URL encoding.
-# Escaping Characters
-
-Hoek provides convenient methods for escaping html characters. The escaped characters are as followed:
-
-```javascript
-
-internals.htmlEscaped = {
- '&': '&amp;',
- '<': '&lt;',
- '>': '&gt;',
- '"': '&quot;',
- "'": '&#x27;',
- '`': '&#x60;'
-};
-
-```
-
-### escapeHtml(string)
-
-```javascript
-
-var string = '<html> hey </html>';
-var escapedString = Hoek.escapeHtml(string); // returns &lt;html&gt; hey &lt;/html&gt;
-
-```
-
-### escapeHeaderAttribute(attribute)
-
-Escape attribute value for use in HTTP header
-
-```javascript
-
-var a = Hoek.escapeHeaderAttribute('I said "go w\\o me"'); //returns I said \"go w\\o me\"
-
-
-```
-
-
-### escapeRegex(string)
-
-Escape string for Regex construction
-
-```javascript
-
-var a = Hoek.escapeRegex('4^f$s.4*5+-_?%=#!:@|~\\/`"(>)[<]d{}s,'); // returns 4\^f\$s\.4\*5\+\-_\?%\=#\!\:@\|~\\\/`"\(>\)\[<\]d\{\}s\,
-
-
-
-```
-
-# Errors
-
-### assert(message)
-
-```javascript
-
-var a = 1, b =2;
-
-Hoek.assert(a === b, 'a should equal b'); // ABORT: a should equal b
-
-```
-
-### abort(message)
-
-First checks if process.env.NODE_ENV === 'test', and if so, throws error message. Otherwise,
-displays most recent stack and then exits process.
-
-
-
-### displayStack(slice)
-
-Displays the trace stack
-
-```javascript
-
-var stack = Hoek.displayStack();
-console.log(stack) // returns something like:
-
-[ 'null (/Users/user/Desktop/hoek/test.js:4:18)',
- 'Module._compile (module.js:449:26)',
- 'Module._extensions..js (module.js:467:10)',
- 'Module.load (module.js:356:32)',
- 'Module._load (module.js:312:12)',
- 'Module.runMain (module.js:492:10)',
- 'startup.processNextTick.process._tickCallback (node.js:244:9)' ]
-
-```
-
-### callStack(slice)
-
-Returns a trace stack array.
-
-```javascript
-
-var stack = Hoek.callStack();
-console.log(stack) // returns something like:
-
-[ [ '/Users/user/Desktop/hoek/test.js', 4, 18, null, false ],
- [ 'module.js', 449, 26, 'Module._compile', false ],
- [ 'module.js', 467, 10, 'Module._extensions..js', false ],
- [ 'module.js', 356, 32, 'Module.load', false ],
- [ 'module.js', 312, 12, 'Module._load', false ],
- [ 'module.js', 492, 10, 'Module.runMain', false ],
- [ 'node.js',
- 244,
- 9,
- 'startup.processNextTick.process._tickCallback',
- false ] ]
-
-
-```
-
-### toss(condition)
-
-toss(condition /*, [message], callback */)
-
-Return an error as first argument of a callback
-
-
-# Load Files
-
-### loadPackage(dir)
-
-Load and parse package.json process root or given directory
-
-```javascript
-
-var pack = Hoek.loadPackage(); // pack.name === 'hoek'
-
-```
-
-### loadDirModules(path, excludeFiles, target)
-
-Loads modules from a given path; option to exclude files (array).
-
-
-
-
diff --git a/deps/npm/node_modules/request/node_modules/hawk/node_modules/sntp/node_modules/hoek/images/hoek.png b/deps/npm/node_modules/request/node_modules/hawk/node_modules/sntp/node_modules/hoek/images/hoek.png
deleted file mode 100755
index 6ccfcb12b..000000000
--- a/deps/npm/node_modules/request/node_modules/hawk/node_modules/sntp/node_modules/hoek/images/hoek.png
+++ /dev/null
Binary files differ
diff --git a/deps/npm/node_modules/request/node_modules/hawk/node_modules/sntp/node_modules/hoek/index.js b/deps/npm/node_modules/request/node_modules/hawk/node_modules/sntp/node_modules/hoek/index.js
deleted file mode 100755
index 4cc88b358..000000000
--- a/deps/npm/node_modules/request/node_modules/hawk/node_modules/sntp/node_modules/hoek/index.js
+++ /dev/null
@@ -1 +0,0 @@
-module.exports = require('./lib'); \ No newline at end of file
diff --git a/deps/npm/node_modules/request/node_modules/hawk/node_modules/sntp/node_modules/hoek/lib/escape.js b/deps/npm/node_modules/request/node_modules/hawk/node_modules/sntp/node_modules/hoek/lib/escape.js
deleted file mode 100755
index 666b3dc82..000000000
--- a/deps/npm/node_modules/request/node_modules/hawk/node_modules/sntp/node_modules/hoek/lib/escape.js
+++ /dev/null
@@ -1,132 +0,0 @@
-// Declare internals
-
-var internals = {};
-
-
-exports.escapeJavaScript = function (input) {
-
- if (!input) {
- return '';
- }
-
- var escaped = '';
-
- for (var i = 0, il = input.length; i < il; ++i) {
-
- var charCode = input.charCodeAt(i);
-
- if (internals.isSafe(charCode)) {
- escaped += input[i];
- }
- else {
- escaped += internals.escapeJavaScriptChar(charCode);
- }
- }
-
- return escaped;
-};
-
-
-exports.escapeHtml = function (input) {
-
- if (!input) {
- return '';
- }
-
- var escaped = '';
-
- for (var i = 0, il = input.length; i < il; ++i) {
-
- var charCode = input.charCodeAt(i);
-
- if (internals.isSafe(charCode)) {
- escaped += input[i];
- }
- else {
- escaped += internals.escapeHtmlChar(charCode);
- }
- }
-
- return escaped;
-};
-
-
-internals.escapeJavaScriptChar = function (charCode) {
-
- if (charCode >= 256) {
- return '\\u' + internals.padLeft('' + charCode, 4);
- }
-
- var hexValue = new Buffer(String.fromCharCode(charCode), 'ascii').toString('hex');
- return '\\x' + internals.padLeft(hexValue, 2);
-};
-
-
-internals.escapeHtmlChar = function (charCode) {
-
- var namedEscape = internals.namedHtml[charCode];
- if (typeof namedEscape !== 'undefined') {
- return namedEscape;
- }
-
- if (charCode >= 256) {
- return '&#' + charCode + ';';
- }
-
- var hexValue = new Buffer(String.fromCharCode(charCode), 'ascii').toString('hex');
- return '&#x' + internals.padLeft(hexValue, 2) + ';';
-};
-
-
-internals.padLeft = function (str, len) {
-
- while (str.length < len) {
- str = '0' + str;
- }
-
- return str;
-};
-
-
-internals.isSafe = function (charCode) {
-
- return (typeof internals.safeCharCodes[charCode] !== 'undefined');
-};
-
-
-internals.namedHtml = {
- '38': '&amp;',
- '60': '&lt;',
- '62': '&gt;',
- '34': '&quot;',
- '160': '&nbsp;',
- '162': '&cent;',
- '163': '&pound;',
- '164': '&curren;',
- '169': '&copy;',
- '174': '&reg;'
-};
-
-
-internals.safeCharCodes = (function () {
-
- var safe = {};
-
- for (var i = 32; i < 123; ++i) {
-
- if ((i >= 97 && i <= 122) || // a-z
- (i >= 65 && i <= 90) || // A-Z
- (i >= 48 && i <= 57) || // 0-9
- i === 32 || // space
- i === 46 || // .
- i === 44 || // ,
- i === 45 || // -
- i === 58 || // :
- i === 95) { // _
-
- safe[i] = null;
- }
- }
-
- return safe;
-}()); \ No newline at end of file
diff --git a/deps/npm/node_modules/request/node_modules/hawk/node_modules/sntp/node_modules/hoek/lib/index.js b/deps/npm/node_modules/request/node_modules/hawk/node_modules/sntp/node_modules/hoek/lib/index.js
deleted file mode 100755
index 806260d25..000000000
--- a/deps/npm/node_modules/request/node_modules/hawk/node_modules/sntp/node_modules/hoek/lib/index.js
+++ /dev/null
@@ -1,585 +0,0 @@
-// Load modules
-
-var Fs = require('fs');
-var Escape = require('./escape');
-
-
-// Declare internals
-
-var internals = {};
-
-
-// Clone object or array
-
-exports.clone = function (obj, seen) {
-
- if (typeof obj !== 'object' ||
- obj === null) {
-
- return obj;
- }
-
- seen = seen || { orig: [], copy: [] };
-
- var lookup = seen.orig.indexOf(obj);
- if (lookup !== -1) {
- return seen.copy[lookup];
- }
-
- var newObj = (obj instanceof Array) ? [] : {};
-
- seen.orig.push(obj);
- seen.copy.push(newObj);
-
- for (var i in obj) {
- if (obj.hasOwnProperty(i)) {
- if (obj[i] instanceof Buffer) {
- newObj[i] = new Buffer(obj[i]);
- }
- else if (obj[i] instanceof Date) {
- newObj[i] = new Date(obj[i].getTime());
- }
- else if (obj[i] instanceof RegExp) {
- var flags = '' + (obj[i].global ? 'g' : '') + (obj[i].ignoreCase ? 'i' : '') + (obj[i].multiline ? 'm' : '');
- newObj[i] = new RegExp(obj[i].source, flags);
- }
- else {
- newObj[i] = exports.clone(obj[i], seen);
- }
- }
- }
-
- return newObj;
-};
-
-
-// Merge all the properties of source into target, source wins in conflic, and by default null and undefined from source are applied
-
-exports.merge = function (target, source, isNullOverride /* = true */, isMergeArrays /* = true */) {
-
- exports.assert(target && typeof target == 'object', 'Invalid target value: must be an object');
- exports.assert(source === null || source === undefined || typeof source === 'object', 'Invalid source value: must be null, undefined, or an object');
-
- if (!source) {
- return target;
- }
-
- if (source instanceof Array) {
- exports.assert(target instanceof Array, 'Cannot merge array onto an object');
- if (isMergeArrays === false) { // isMergeArrays defaults to true
- target.length = 0; // Must not change target assignment
- }
-
- for (var i = 0, il = source.length; i < il; ++i) {
- target.push(source[i]);
- }
-
- return target;
- }
-
- var keys = Object.keys(source);
- for (var k = 0, kl = keys.length; k < kl; ++k) {
- var key = keys[k];
- var value = source[key];
- if (value &&
- typeof value === 'object') {
-
- if (!target[key] ||
- typeof target[key] !== 'object') {
-
- target[key] = exports.clone(value);
- }
- else {
- exports.merge(target[key], source[key], isNullOverride, isMergeArrays);
- }
- }
- else {
- if (value !== null && value !== undefined) { // Explicit to preserve empty strings
- target[key] = value;
- }
- else if (isNullOverride !== false) { // Defaults to true
- target[key] = value;
- }
- }
- }
-
- return target;
-};
-
-
-// Apply options to a copy of the defaults
-
-exports.applyToDefaults = function (defaults, options) {
-
- exports.assert(defaults && typeof defaults == 'object', 'Invalid defaults value: must be an object');
- exports.assert(!options || options === true || typeof options === 'object', 'Invalid options value: must be true, falsy or an object');
-
- if (!options) { // If no options, return null
- return null;
- }
-
- var copy = exports.clone(defaults);
-
- if (options === true) { // If options is set to true, use defaults
- return copy;
- }
-
- return exports.merge(copy, options, false, false);
-};
-
-
-// Remove duplicate items from array
-
-exports.unique = function (array, key) {
-
- var index = {};
- var result = [];
-
- for (var i = 0, il = array.length; i < il; ++i) {
- var id = (key ? array[i][key] : array[i]);
- if (index[id] !== true) {
-
- result.push(array[i]);
- index[id] = true;
- }
- }
-
- return result;
-};
-
-
-// Convert array into object
-
-exports.mapToObject = function (array, key) {
-
- if (!array) {
- return null;
- }
-
- var obj = {};
- for (var i = 0, il = array.length; i < il; ++i) {
- if (key) {
- if (array[i][key]) {
- obj[array[i][key]] = true;
- }
- }
- else {
- obj[array[i]] = true;
- }
- }
-
- return obj;
-};
-
-
-// Find the common unique items in two arrays
-
-exports.intersect = function (array1, array2, justFirst) {
-
- if (!array1 || !array2) {
- return [];
- }
-
- var common = [];
- var hash = (array1 instanceof Array ? exports.mapToObject(array1) : array1);
- var found = {};
- for (var i = 0, il = array2.length; i < il; ++i) {
- if (hash[array2[i]] && !found[array2[i]]) {
- if (justFirst) {
- return array2[i];
- }
-
- common.push(array2[i]);
- found[array2[i]] = true;
- }
- }
-
- return (justFirst ? null : common);
-};
-
-
-// Find which keys are present
-
-exports.matchKeys = function (obj, keys) {
-
- var matched = [];
- for (var i = 0, il = keys.length; i < il; ++i) {
- if (obj.hasOwnProperty(keys[i])) {
- matched.push(keys[i]);
- }
- }
- return matched;
-};
-
-
-// Flatten array
-
-exports.flatten = function (array, target) {
-
- var result = target || [];
-
- for (var i = 0, il = array.length; i < il; ++i) {
- if (Array.isArray(array[i])) {
- exports.flatten(array[i], result);
- }
- else {
- result.push(array[i]);
- }
- }
-
- return result;
-};
-
-
-// Remove keys
-
-exports.removeKeys = function (object, keys) {
-
- for (var i = 0, il = keys.length; i < il; i++) {
- delete object[keys[i]];
- }
-};
-
-
-// Convert an object key chain string ('a.b.c') to reference (object[a][b][c])
-
-exports.reach = function (obj, chain) {
-
- var path = chain.split('.');
- var ref = obj;
- for (var i = 0, il = path.length; i < il; ++i) {
- if (ref) {
- ref = ref[path[i]];
- }
- }
-
- return ref;
-};
-
-
-// Inherits a selected set of methods from an object, wrapping functions in asynchronous syntax and catching errors
-
-exports.inheritAsync = function (self, obj, keys) {
-
- keys = keys || null;
-
- for (var i in obj) {
- if (obj.hasOwnProperty(i)) {
- if (keys instanceof Array &&
- keys.indexOf(i) < 0) {
-
- continue;
- }
-
- self.prototype[i] = (function (fn) {
-
- return function (next) {
-
- var result = null;
- try {
- result = fn();
- }
- catch (err) {
- return next(err);
- }
-
- return next(null, result);
- };
- })(obj[i]);
- }
- }
-};
-
-
-exports.formatStack = function (stack) {
-
- var trace = [];
- for (var i = 0, il = stack.length; i < il; ++i) {
- var item = stack[i];
- trace.push([item.getFileName(), item.getLineNumber(), item.getColumnNumber(), item.getFunctionName(), item.isConstructor()]);
- }
-
- return trace;
-};
-
-
-exports.formatTrace = function (trace) {
-
- var display = [];
-
- for (var i = 0, il = trace.length; i < il; ++i) {
- var row = trace[i];
- display.push((row[4] ? 'new ' : '') + row[3] + ' (' + row[0] + ':' + row[1] + ':' + row[2] + ')');
- }
-
- return display;
-};
-
-
-exports.callStack = function (slice) {
-
- // http://code.google.com/p/v8/wiki/JavaScriptStackTraceApi
-
- var v8 = Error.prepareStackTrace;
- Error.prepareStackTrace = function (err, stack) {
-
- return stack;
- };
-
- var capture = {};
- Error.captureStackTrace(capture, arguments.callee);
- var stack = capture.stack;
-
- Error.prepareStackTrace = v8;
-
- var trace = exports.formatStack(stack);
-
- if (slice) {
- return trace.slice(slice);
- }
-
- return trace;
-};
-
-
-exports.displayStack = function (slice) {
-
- var trace = exports.callStack(slice === undefined ? 1 : slice + 1);
-
- return exports.formatTrace(trace);
-};
-
-
-exports.abortThrow = false;
-
-
-exports.abort = function (message, hideStack) {
-
- if (process.env.NODE_ENV === 'test' || exports.abortThrow === true) {
- throw new Error(message || 'Unknown error');
- }
-
- var stack = '';
- if (!hideStack) {
- stack = exports.displayStack(1).join('\n\t');
- }
- console.log('ABORT: ' + message + '\n\t' + stack);
- process.exit(1);
-};
-
-
-exports.assert = function (condition /*, msg1, msg2, msg3 */) {
-
- if (condition) {
- return;
- }
-
- var msgs = Array.prototype.slice.call(arguments, 1);
- msgs = msgs.map(function (msg) {
-
- return typeof msg === 'string' ? msg : msg instanceof Error ? msg.message : JSON.stringify(msg);
- });
- throw new Error(msgs.join(' ') || 'Unknown error');
-};
-
-
-exports.loadDirModules = function (path, excludeFiles, target) { // target(filename, name, capName)
-
- var exclude = {};
- for (var i = 0, il = excludeFiles.length; i < il; ++i) {
- exclude[excludeFiles[i] + '.js'] = true;
- }
-
- var files = Fs.readdirSync(path);
- for (i = 0, il = files.length; i < il; ++i) {
- var filename = files[i];
- if (/\.js$/.test(filename) &&
- !exclude[filename]) {
-
- var name = filename.substr(0, filename.lastIndexOf('.'));
- var capName = name.charAt(0).toUpperCase() + name.substr(1).toLowerCase();
-
- if (typeof target !== 'function') {
- target[capName] = require(path + '/' + name);
- }
- else {
- target(path + '/' + name, name, capName);
- }
- }
- }
-};
-
-
-exports.rename = function (obj, from, to) {
-
- obj[to] = obj[from];
- delete obj[from];
-};
-
-
-exports.Timer = function () {
-
- this.reset();
-};
-
-
-exports.Timer.prototype.reset = function () {
-
- this.ts = Date.now();
-};
-
-
-exports.Timer.prototype.elapsed = function () {
-
- return Date.now() - this.ts;
-};
-
-
-// Load and parse package.json process root or given directory
-
-exports.loadPackage = function (dir) {
-
- var result = {};
- var filepath = (dir || process.env.PWD) + '/package.json';
- if (Fs.existsSync(filepath)) {
- try {
- result = JSON.parse(Fs.readFileSync(filepath));
- }
- catch (e) { }
- }
-
- return result;
-};
-
-
-// Escape string for Regex construction
-
-exports.escapeRegex = function (string) {
-
- // Escape ^$.*+-?=!:|\/()[]{},
- return string.replace(/[\^\$\.\*\+\-\?\=\!\:\|\\\/\(\)\[\]\{\}\,]/g, '\\$&');
-};
-
-
-// Return an error as first argument of a callback
-
-exports.toss = function (condition /*, [message], next */) {
-
- var message = (arguments.length === 3 ? arguments[1] : '');
- var next = (arguments.length === 3 ? arguments[2] : arguments[1]);
-
- var err = (message instanceof Error ? message : (message ? new Error(message) : (condition instanceof Error ? condition : new Error())));
-
- if (condition instanceof Error ||
- !condition) {
-
- return next(err);
- }
-};
-
-
-// Base64url (RFC 4648) encode
-
-exports.base64urlEncode = function (value) {
-
- return (new Buffer(value, 'binary')).toString('base64').replace(/\+/g, '-').replace(/\//g, '_').replace(/\=/g, '');
-};
-
-
-// Base64url (RFC 4648) decode
-
-exports.base64urlDecode = function (encoded) {
-
- if (encoded &&
- !encoded.match(/^[\w\-]*$/)) {
-
- return new Error('Invalid character');
- }
-
- try {
- return (new Buffer(encoded.replace(/-/g, '+').replace(/:/g, '/'), 'base64')).toString('binary');
- }
- catch (err) {
- return err;
- }
-};
-
-
-// Escape attribute value for use in HTTP header
-
-exports.escapeHeaderAttribute = function (attribute) {
-
- // Allowed value characters: !#$%&'()*+,-./:;<=>?@[]^_`{|}~ and space, a-z, A-Z, 0-9, \, "
-
- exports.assert(attribute.match(/^[ \w\!#\$%&'\(\)\*\+,\-\.\/\:;<\=>\?@\[\]\^`\{\|\}~\"\\]*$/), 'Bad attribute value (' + attribute + ')');
-
- return attribute.replace(/\\/g, '\\\\').replace(/\"/g, '\\"'); // Escape quotes and slash
-};
-
-
-exports.escapeHtml = function (string) {
-
- return Escape.escapeHtml(string);
-};
-
-
-exports.escapeJavaScript = function (string) {
-
- return Escape.escapeJavaScript(string);
-};
-
-
-/*
-var event = {
- timestamp: now.getTime(),
- tags: ['tag'],
- data: { some: 'data' }
-};
-*/
-
-exports.consoleFunc = console.log;
-
-exports.printEvent = function (event) {
-
- var pad = function (value) {
-
- return (value < 10 ? '0' : '') + value;
- };
-
- var now = new Date(event.timestamp);
- var timestring = (now.getYear() - 100).toString() +
- pad(now.getMonth() + 1) +
- pad(now.getDate()) +
- '/' +
- pad(now.getHours()) +
- pad(now.getMinutes()) +
- pad(now.getSeconds()) +
- '.' +
- now.getMilliseconds();
-
- var data = event.data;
- if (typeof event.data !== 'string') {
- try {
- data = JSON.stringify(event.data);
- }
- catch (e) {
- data = 'JSON Error: ' + e.message;
- }
- }
-
- var output = timestring + ', ' + event.tags[0] + ', ' + data;
- exports.consoleFunc(output);
-};
-
-
-exports.nextTick = function (callback) {
-
- return function () {
-
- var args = arguments;
- process.nextTick(function () {
-
- callback.apply(null, args);
- });
- };
-};
diff --git a/deps/npm/node_modules/request/node_modules/hawk/node_modules/sntp/node_modules/hoek/package.json b/deps/npm/node_modules/request/node_modules/hawk/node_modules/sntp/node_modules/hoek/package.json
deleted file mode 100755
index 152a5de7d..000000000
--- a/deps/npm/node_modules/request/node_modules/hawk/node_modules/sntp/node_modules/hoek/package.json
+++ /dev/null
@@ -1,52 +0,0 @@
-{
- "name": "hoek",
- "description": "General purpose node utilities",
- "version": "0.9.1",
- "author": {
- "name": "Eran Hammer",
- "email": "eran@hueniverse.com",
- "url": "http://hueniverse.com"
- },
- "contributors": [
- {
- "name": "Van Nguyen",
- "email": "the.gol.effect@gmail.com"
- }
- ],
- "repository": {
- "type": "git",
- "url": "git://github.com/spumko/hoek"
- },
- "main": "index",
- "keywords": [
- "utilities"
- ],
- "engines": {
- "node": ">=0.8.0"
- },
- "dependencies": {},
- "devDependencies": {
- "lab": "0.1.x",
- "complexity-report": "0.x.x"
- },
- "scripts": {
- "test": "make test-cov"
- },
- "licenses": [
- {
- "type": "BSD",
- "url": "http://github.com/spumko/hoek/raw/master/LICENSE"
- }
- ],
- "readme": "<a href=\"https://github.com/spumko\"><img src=\"https://raw.github.com/spumko/spumko/master/images/from.png\" align=\"right\" /></a>\r\n![hoek Logo](https://raw.github.com/spumko/hoek/master/images/hoek.png)\r\n\r\nGeneral purpose node utilities\r\n\r\n[![Build Status](https://secure.travis-ci.org/spumko/hoek.png)](http://travis-ci.org/spumko/hoek)\r\n\r\n# Table of Contents\r\n\r\n* [Introduction](#introduction \"Introduction\")\r\n* [Object](#object \"Object\")\r\n * [clone](#cloneobj \"clone\")\r\n * [merge](#mergetarget-source-isnulloverride-ismergearrays \"merge\")\r\n * [applyToDefaults](#applytodefaultsdefaults-options \"applyToDefaults\")\r\n * [unique](#uniquearray-key \"unique\")\r\n * [mapToObject](#maptoobjectarray-key \"mapToObject\")\r\n * [intersect](#intersectarray1-array2 \"intersect\")\r\n * [matchKeys](#matchkeysobj-keys \"matchKeys\")\r\n * [flatten](#flattenarray-target \"flatten\")\r\n * [removeKeys](#removekeysobject-keys \"removeKeys\")\r\n * [reach](#reachobj-chain \"reach\")\r\n * [inheritAsync](#inheritasyncself-obj-keys \"inheritAsync\")\r\n * [rename](#renameobj-from-to \"rename\")\r\n* [Timer](#timer \"Timer\")\r\n* [Binary Encoding/Decoding](#binary \"Binary Encoding/Decoding\")\r\n * [base64urlEncode](#binary64urlEncodevalue \"binary64urlEncode\")\r\n * [base64urlDecode](#binary64urlDecodevalue \"binary64urlDecode\")\r\n* [Escaping Characters](#escaped \"Escaping Characters\")\r\n * [escapeHtml](#escapeHtmlstring \"escapeHtml\")\r\n * [escapeHeaderAttribute](#escapeHeaderAttributeattribute \"escapeHeaderAttribute\")\r\n * [escapeRegex](#escapeRegexstring \"escapeRegex\")\r\n* [Errors](#errors \"Errors\")\r\n * [assert](#assertmessage \"assert\")\r\n * [abort](#abortmessage \"abort\")\r\n * [displayStack](#displayStackslice \"displayStack\")\r\n * [callStack](#callStackslice \"callStack\")\r\n * [toss](#tosscondition \"toss\")\r\n* [Load files](#load-files \"Load Files\")\r\n * [loadPackage](#loadPackagedir \"loadpackage\")\r\n * [loadDirModules](#loadDirModulespath-excludefiles-target \"loaddirmodules\")\r\n\r\n\r\n\r\n# Introduction\r\n\r\nThe *Hoek* general purpose node utilities library is used to aid in a variety of manners. It comes with useful methods for Arrays (clone, merge, applyToDefaults), Objects (removeKeys, copy), Asserting and more. \r\n\r\nFor example, to use Hoek to set configuration with default options:\r\n```javascript\r\nvar Hoek = require('hoek');\r\n\r\nvar default = {url : \"www.github.com\", port : \"8000\", debug : true}\r\n\r\nvar config = Hoek.applyToDefaults(default, {port : \"3000\", admin : true});\r\n\r\n// In this case, config would be { url: 'www.github.com', port: '3000', debug: true, admin: true }\r\n```\r\n\r\nUnder each of the sections (such as Array), there are subsections which correspond to Hoek methods. Each subsection will explain how to use the corresponding method. In each js excerpt below, the var Hoek = require('hoek') is omitted for brevity.\r\n\r\n## Object\r\n\r\nHoek provides several helpful methods for objects and arrays.\r\n\r\n### clone(obj)\r\n\r\nThis method is used to clone an object or an array. A *deep copy* is made (duplicates everything, including values that are objects). \r\n\r\n```javascript\r\n\r\nvar nestedObj = {\r\n w: /^something$/ig,\r\n x: {\r\n a: [1, 2, 3],\r\n b: 123456,\r\n c: new Date()\r\n },\r\n y: 'y',\r\n z: new Date()\r\n };\r\n\r\nvar copy = Hoek.clone(nestedObj);\r\n\r\ncopy.x.b = 100;\r\n\r\nconsole.log(copy.y) // results in 'y'\r\nconsole.log(nestedObj.x.b) // results in 123456\r\nconsole.log(copy.x.b) // results in 100\r\n```\r\n\r\n### merge(target, source, isNullOverride, isMergeArrays)\r\nisNullOverride, isMergeArrays default to true\r\n\r\nMerge all the properties of source into target, source wins in conflic, and by default null and undefined from source are applied\r\n\r\n\r\n```javascript\r\n\r\nvar target = {a: 1, b : 2}\r\nvar source = {a: 0, c: 5}\r\nvar source2 = {a: null, c: 5}\r\n\r\nvar targetArray = [1, 2, 3];\r\nvar sourceArray = [4, 5];\r\n\r\nvar newTarget = Hoek.merge(target, source); // results in {a: 0, b: 2, c: 5}\r\nnewTarget = Hoek.merge(target, source2); // results in {a: null, b: 2, c: 5}\r\nnewTarget = Hoek.merge(target, source2, false); // results in {a: 1, b: 2, c: 5}\r\n\r\nnewTarget = Hoek.merge(targetArray, sourceArray) // results in [1, 2, 3, 4, 5]\r\nnewTarget = Hoek.merge(targetArray, sourceArray, true, false) // results in [4, 5]\r\n\r\n\r\n\r\n\r\n```\r\n\r\n### applyToDefaults(defaults, options)\r\n\r\nApply options to a copy of the defaults\r\n\r\n```javascript\r\n\r\nvar defaults = {host: \"localhost\", port: 8000};\r\nvar options = {port: 8080};\r\n\r\nvar config = Hoek.applyToDefaults(defaults, options); // results in {host: \"localhost\", port: 8080};\r\n\r\n\r\n```\r\n\r\n### unique(array, key)\r\n\r\nRemove duplicate items from Array\r\n\r\n```javascript\r\n\r\nvar array = [1, 2, 2, 3, 3, 4, 5, 6];\r\n\r\nvar newArray = Hoek.unique(array); // results in [1,2,3,4,5,6];\r\n\r\narray = [{id: 1}, {id: 1}, {id: 2}];\r\n\r\nnewArray = Hoek.unique(array, \"id\") // results in [{id: 1}, {id: 2}]\r\n\r\n```\r\n\r\n### mapToObject(array, key)\r\n\r\nConvert an Array into an Object\r\n\r\n```javascript\r\n\r\nvar array = [1,2,3];\r\nvar newObject = Hoek.mapToObject(array); // results in [{\"1\": true}, {\"2\": true}, {\"3\": true}]\r\n\r\narray = [{id: 1}, {id: 2}];\r\nnewObject = Hoek.mapToObject(array, \"id\") // results in [{\"id\": 1}, {\"id\": 2}]\r\n\r\n```\r\n### intersect(array1, array2)\r\n\r\nFind the common unique items in two arrays\r\n\r\n```javascript\r\n\r\nvar array1 = [1, 2, 3];\r\nvar array2 = [1, 4, 5];\r\n\r\nvar newArray = Hoek.intersect(array1, array2) // results in [1]\r\n\r\n```\r\n\r\n### matchKeys(obj, keys) \r\n\r\nFind which keys are present\r\n\r\n```javascript\r\n\r\nvar obj = {a: 1, b: 2, c: 3};\r\nvar keys = [\"a\", \"e\"];\r\n\r\nHoek.matchKeys(obj, keys) // returns [\"a\"]\r\n\r\n```\r\n\r\n### flatten(array, target)\r\n\r\nFlatten an array\r\n\r\n```javascript\r\n\r\nvar array = [1, 2, 3];\r\nvar target = [4, 5]; \r\n\r\nvar flattenedArray = Hoek.flatten(array, target) // results in [4, 5, 1, 2, 3];\r\n\r\n```\r\n\r\n### removeKeys(object, keys)\r\n\r\nRemove keys\r\n\r\n```javascript\r\n\r\nvar object = {a: 1, b: 2, c: 3, d: 4};\r\n\r\nvar keys = [\"a\", \"b\"];\r\n\r\nHoek.removeKeys(object, keys) // object is now {c: 3, d: 4}\r\n\r\n```\r\n\r\n### reach(obj, chain)\r\n\r\nConverts an object key chain string to reference\r\n\r\n```javascript\r\n\r\nvar chain = 'a.b.c';\r\nvar obj = {a : {b : { c : 1}}};\r\n\r\nHoek.reach(obj, chain) // returns 1\r\n\r\n```\r\n\r\n### inheritAsync(self, obj, keys) \r\n\r\nInherits a selected set of methods from an object, wrapping functions in asynchronous syntax and catching errors\r\n\r\n```javascript\r\n\r\nvar targetFunc = function () { };\r\n\r\nvar proto = {\r\n a: function () {\r\n return 'a!';\r\n },\r\n b: function () {\r\n return 'b!';\r\n },\r\n c: function () {\r\n throw new Error('c!');\r\n }\r\n };\r\n\r\nvar keys = ['a', 'c'];\r\n\r\nHoek.inheritAsync(targetFunc, proto, ['a', 'c']);\r\n\r\nvar target = new targetFunc();\r\n\r\ntarget.a(function(err, result){console.log(result)} // returns 'a!' \r\n\r\ntarget.c(function(err, result){console.log(result)} // returns undefined\r\n\r\ntarget.b(function(err, result){console.log(result)} // gives error: Object [object Object] has no method 'b'\r\n\r\n```\r\n\r\n### rename(obj, from, to)\r\n\r\nRename a key of an object\r\n\r\n```javascript\r\n\r\nvar obj = {a : 1, b : 2};\r\n\r\nHoek.rename(obj, \"a\", \"c\"); // obj is now {c : 1, b : 2}\r\n\r\n```\r\n\r\n\r\n# Timer\r\n\r\nA Timer object. Initializing a new timer object sets the ts to the number of milliseconds elapsed since 1 January 1970 00:00:00 UTC.\r\n\r\n```javascript\r\n\r\n\r\nexample : \r\n\r\n\r\nvar timerObj = new Hoek.Timer();\r\nconsole.log(\"Time is now: \" + timerObj.ts)\r\nconsole.log(\"Elapsed time from initialization: \" + timerObj.elapsed() + 'milliseconds')\r\n\r\n```\r\n\r\n# Binary Encoding/Decoding\r\n\r\n### base64urlEncode(value)\r\n\r\nEncodes value in Base64 or URL encoding\r\n\r\n### base64urlDecode(value)\r\n\r\nDecodes data in Base64 or URL encoding.\r\n# Escaping Characters\r\n\r\nHoek provides convenient methods for escaping html characters. The escaped characters are as followed:\r\n\r\n```javascript\r\n\r\ninternals.htmlEscaped = {\r\n '&': '&amp;',\r\n '<': '&lt;',\r\n '>': '&gt;',\r\n '\"': '&quot;',\r\n \"'\": '&#x27;',\r\n '`': '&#x60;'\r\n};\r\n\r\n```\r\n\r\n### escapeHtml(string)\r\n\r\n```javascript\r\n\r\nvar string = '<html> hey </html>';\r\nvar escapedString = Hoek.escapeHtml(string); // returns &lt;html&gt; hey &lt;/html&gt;\r\n\r\n```\r\n\r\n### escapeHeaderAttribute(attribute)\r\n\r\nEscape attribute value for use in HTTP header\r\n\r\n```javascript\r\n\r\nvar a = Hoek.escapeHeaderAttribute('I said \"go w\\\\o me\"'); //returns I said \\\"go w\\\\o me\\\"\r\n\r\n\r\n```\r\n\r\n\r\n### escapeRegex(string)\r\n\r\nEscape string for Regex construction\r\n\r\n```javascript\r\n\r\nvar a = Hoek.escapeRegex('4^f$s.4*5+-_?%=#!:@|~\\\\/`\"(>)[<]d{}s,'); // returns 4\\^f\\$s\\.4\\*5\\+\\-_\\?%\\=#\\!\\:@\\|~\\\\\\/`\"\\(>\\)\\[<\\]d\\{\\}s\\,\r\n\r\n\r\n\r\n```\r\n\r\n# Errors\r\n\r\n### assert(message)\r\n\r\n```javascript\r\n\r\nvar a = 1, b =2;\r\n\r\nHoek.assert(a === b, 'a should equal b'); // ABORT: a should equal b\r\n\r\n```\r\n\r\n### abort(message)\r\n\r\nFirst checks if process.env.NODE_ENV === 'test', and if so, throws error message. Otherwise,\r\ndisplays most recent stack and then exits process.\r\n\r\n\r\n\r\n### displayStack(slice)\r\n\r\nDisplays the trace stack\r\n\r\n```javascript\r\n\r\nvar stack = Hoek.displayStack();\r\nconsole.log(stack) // returns something like:\r\n\r\n[ 'null (/Users/user/Desktop/hoek/test.js:4:18)',\r\n 'Module._compile (module.js:449:26)',\r\n 'Module._extensions..js (module.js:467:10)',\r\n 'Module.load (module.js:356:32)',\r\n 'Module._load (module.js:312:12)',\r\n 'Module.runMain (module.js:492:10)',\r\n 'startup.processNextTick.process._tickCallback (node.js:244:9)' ]\r\n\r\n```\r\n\r\n### callStack(slice)\r\n\r\nReturns a trace stack array.\r\n\r\n```javascript\r\n\r\nvar stack = Hoek.callStack();\r\nconsole.log(stack) // returns something like:\r\n\r\n[ [ '/Users/user/Desktop/hoek/test.js', 4, 18, null, false ],\r\n [ 'module.js', 449, 26, 'Module._compile', false ],\r\n [ 'module.js', 467, 10, 'Module._extensions..js', false ],\r\n [ 'module.js', 356, 32, 'Module.load', false ],\r\n [ 'module.js', 312, 12, 'Module._load', false ],\r\n [ 'module.js', 492, 10, 'Module.runMain', false ],\r\n [ 'node.js',\r\n 244,\r\n 9,\r\n 'startup.processNextTick.process._tickCallback',\r\n false ] ]\r\n\r\n\r\n```\r\n\r\n### toss(condition)\r\n\r\ntoss(condition /*, [message], callback */)\r\n\r\nReturn an error as first argument of a callback\r\n\r\n\r\n# Load Files\r\n\r\n### loadPackage(dir)\r\n\r\nLoad and parse package.json process root or given directory\r\n\r\n```javascript\r\n\r\nvar pack = Hoek.loadPackage(); // pack.name === 'hoek'\r\n\r\n```\r\n\r\n### loadDirModules(path, excludeFiles, target) \r\n\r\nLoads modules from a given path; option to exclude files (array).\r\n\r\n\r\n\r\n\r\n",
- "readmeFilename": "README.md",
- "bugs": {
- "url": "https://github.com/spumko/hoek/issues"
- },
- "_id": "hoek@0.9.1",
- "dist": {
- "shasum": "396f2118033eabc93ae5c2cd6ca75f0a89c03592"
- },
- "_from": "hoek@0.9.x",
- "_resolved": "https://registry.npmjs.org/hoek/-/hoek-0.9.1.tgz"
-}
diff --git a/deps/npm/node_modules/request/node_modules/hawk/node_modules/sntp/node_modules/hoek/test/escaper.js b/deps/npm/node_modules/request/node_modules/hawk/node_modules/sntp/node_modules/hoek/test/escaper.js
deleted file mode 100644
index 4dddd77dc..000000000
--- a/deps/npm/node_modules/request/node_modules/hawk/node_modules/sntp/node_modules/hoek/test/escaper.js
+++ /dev/null
@@ -1,86 +0,0 @@
-// Load modules
-
-var Lab = require('lab');
-var Hoek = require('../lib');
-
-
-// Declare internals
-
-var internals = {};
-
-
-// Test shortcuts
-
-var expect = Lab.expect;
-var before = Lab.before;
-var after = Lab.after;
-var describe = Lab.experiment;
-var it = Lab.test;
-
-
-describe('Hoek', function () {
-
- describe('#escapeJavaScript', function () {
-
- it('encodes / characters', function (done) {
-
- var encoded = Hoek.escapeJavaScript('<script>alert(1)</script>');
- expect(encoded).to.equal('\\x3cscript\\x3ealert\\x281\\x29\\x3c\\x2fscript\\x3e');
- done();
- });
-
- it('encodes \' characters', function (done) {
-
- var encoded = Hoek.escapeJavaScript('something(\'param\')');
- expect(encoded).to.equal('something\\x28\\x27param\\x27\\x29');
- done();
- });
-
- it('encodes large unicode characters with the correct padding', function (done) {
-
- var encoded = Hoek.escapeJavaScript(String.fromCharCode(500) + String.fromCharCode(1000));
- expect(encoded).to.equal('\\u0500\\u1000');
- done();
- });
-
- it('doesn\'t throw an exception when passed null', function (done) {
-
- var encoded = Hoek.escapeJavaScript(null);
- expect(encoded).to.equal('');
- done();
- });
- });
-
- describe('#escapeHtml', function () {
-
- it('encodes / characters', function (done) {
-
- var encoded = Hoek.escapeHtml('<script>alert(1)</script>');
- expect(encoded).to.equal('&lt;script&gt;alert&#x28;1&#x29;&lt;&#x2f;script&gt;');
- done();
- });
-
- it('encodes < and > as named characters', function (done) {
-
- var encoded = Hoek.escapeHtml('<script><>');
- expect(encoded).to.equal('&lt;script&gt;&lt;&gt;');
- done();
- });
-
- it('encodes large unicode characters', function (done) {
-
- var encoded = Hoek.escapeHtml(String.fromCharCode(500) + String.fromCharCode(1000));
- expect(encoded).to.equal('&#500;&#1000;');
- done();
- });
-
- it('doesn\'t throw an exception when passed null', function (done) {
-
- var encoded = Hoek.escapeHtml(null);
- expect(encoded).to.equal('');
- done();
- });
- });
-});
-
-
diff --git a/deps/npm/node_modules/request/node_modules/hawk/node_modules/sntp/node_modules/hoek/test/index.js b/deps/npm/node_modules/request/node_modules/hawk/node_modules/sntp/node_modules/hoek/test/index.js
deleted file mode 100755
index c40e3ad9a..000000000
--- a/deps/npm/node_modules/request/node_modules/hawk/node_modules/sntp/node_modules/hoek/test/index.js
+++ /dev/null
@@ -1,1078 +0,0 @@
-// Load modules
-
-var Lab = require('lab');
-var Hoek = require('../lib');
-
-
-// Declare internals
-
-var internals = {};
-
-
-// Test shortcuts
-
-var expect = Lab.expect;
-var before = Lab.before;
-var after = Lab.after;
-var describe = Lab.experiment;
-var it = Lab.test;
-
-
-describe('Hoek', function () {
-
- var nestedObj = {
- v: [7,8,9],
- w: /^something$/igm,
- x: {
- a: [1, 2, 3],
- b: 123456,
- c: new Date(),
- d: /hi/igm,
- e: /hello/
- },
- y: 'y',
- z: new Date()
- };
-
- var dupsArray = [nestedObj, { z: 'z' }, nestedObj];
- var reducedDupsArray = [nestedObj, { z: 'z' }];
-
- describe('#clone', function () {
-
- it('should clone a nested object', function (done) {
-
- var a = nestedObj;
- var b = Hoek.clone(a);
-
- expect(a).to.deep.equal(b);
- expect(a.z.getTime()).to.equal(b.z.getTime());
- done();
- });
-
- it('should clone a null object', function (done) {
-
- var b = Hoek.clone(null);
-
- expect(b).to.equal(null);
- done();
- });
-
- it('should not convert undefined properties to null', function (done) {
-
- var obj = { something: undefined };
- var b = Hoek.clone(obj);
-
- expect(typeof b.something).to.equal('undefined');
- done();
- });
-
- it('should not throw on circular reference', function (done) {
-
- var a = {};
- a.x = a;
-
- var test = (function () {
-
- var b = Hoek.clone(a);
- });
-
- expect(test).to.not.throw();
- done();
- });
-
- it('should properly clone circular reference', function (done) {
-
- var x = {
- 'z': new Date()
- };
- x.y = x;
-
- var b = Hoek.clone(x);
- expect(Object.keys(b.y)).to.deep.equal(Object.keys(x))
- expect(b.z).to.not.equal(x.z);
- expect(b.y).to.not.equal(x.y);
- expect(b.y.z).to.not.equal(x.y.z);
- expect(b.y).to.equal(b);
- expect(b.y.y.y.y).to.equal(b);
- done();
- });
-
- it('should properly clone deeply nested object', function (done) {
-
- var a = {
- x: {
- y: {
- a: [1, 2, 3],
- b: 123456,
- c: new Date(),
- d: /hi/igm,
- e: /hello/
- },
- }
- };
-
- var b = Hoek.clone(a);
-
- expect(a).to.deep.equal(b);
- expect(a.x.y.c.getTime()).to.equal(b.x.y.c.getTime());
- done();
- });
-
- it('should properly clone arrays', function (done) {
-
- var a = [1,2,3];
-
- var b = Hoek.clone(a);
-
- expect(a).to.deep.equal(b);
- done();
- });
-
- it('should perform actual copy for shallow keys (no pass by reference)', function (done) {
-
- var x = Hoek.clone(nestedObj);
- var y = Hoek.clone(nestedObj);
-
- // Date
- expect(x.z).to.not.equal(nestedObj.z);
- expect(x.z).to.not.equal(y.z);
-
- // Regex
- expect(x.w).to.not.equal(nestedObj.w);
- expect(x.w).to.not.equal(y.w);
-
- // Array
- expect(x.v).to.not.equal(nestedObj.v);
- expect(x.v).to.not.equal(y.v);
-
- // Immutable(s)
- x.y = 5;
- expect(x.y).to.not.equal(nestedObj.y);
- expect(x.y).to.not.equal(y.y);
-
- done();
- });
-
- it('should perform actual copy for deep keys (no pass by reference)', function (done) {
-
- var x = Hoek.clone(nestedObj);
- var y = Hoek.clone(nestedObj);
-
- expect(x.x.c).to.not.equal(nestedObj.x.c);
- expect(x.x.c).to.not.equal(y.x.c);
-
- expect(x.x.c.getTime()).to.equal(nestedObj.x.c.getTime());
- expect(x.x.c.getTime()).to.equal(y.x.c.getTime());
- done();
- });
-
- it('copies functions with properties', function (done) {
-
- var a = {
- x: function () { return 1; },
- y: {}
- };
- a.x.z = 'string in function';
- a.x.v = function () { return 2; };
- a.y.u = a.x;
-
- var b = Hoek.clone(a);
- expect(b.x()).to.equal(1);
- expect(b.x.v()).to.equal(2);
- expect(b.y.u).to.equal(b.x);
- expect(b.x.z).to.equal('string in function');
- done();
- });
-
- it('should copy a buffer', function(done){
- var tls = {
- key: new Buffer([1,2,3,4,5]),
- cert: new Buffer([1,2,3,4,5,6,10])
- }
-
- copiedTls = Hoek.clone(tls);
- expect(Buffer.isBuffer(copiedTls.key)).to.equal(true);
- expect(JSON.stringify(copiedTls.key)).to.equal(JSON.stringify(tls.key))
- expect(Buffer.isBuffer(copiedTls.cert)).to.equal(true);
- expect(JSON.stringify(copiedTls.cert)).to.equal(JSON.stringify(tls.cert))
- done();
- });
- });
-
- describe('#merge', function () {
-
- it('does not throw if source is null', function (done) {
-
- var a = {};
- var b = null;
- var c = null;
-
- expect(function () {
-
- c = Hoek.merge(a, b);
- }).to.not.throw();
-
- expect(c).to.equal(a);
- done();
- });
-
- it('does not throw if source is undefined', function (done) {
-
- var a = {};
- var b = undefined;
- var c = null;
-
- expect(function () {
-
- c = Hoek.merge(a, b);
- }).to.not.throw();
-
- expect(c).to.equal(a);
- done();
- });
-
- it('throws if source is not an object', function (done) {
-
- expect(function () {
-
- var a = {};
- var b = 0;
-
- Hoek.merge(a, b);
- }).to.throw('Invalid source value: must be null, undefined, or an object');
- done();
- });
-
- it('throws if target is not an object', function (done) {
-
- expect(function () {
-
- var a = 0;
- var b = {};
-
- Hoek.merge(a, b);
- }).to.throw('Invalid target value: must be an object');
- done();
- });
-
- it('throws if target is not an array and source is', function (done) {
-
- expect(function () {
-
- var a = {};
- var b = [1, 2];
-
- Hoek.merge(a, b);
- }).to.throw('Cannot merge array onto an object');
- done();
- });
-
- it('returns the same object when merging arrays', function (done) {
-
- var a = [];
- var b = [1, 2];
-
- expect(Hoek.merge(a, b)).to.equal(a);
- done();
- });
-
- it('should combine an empty object with a non-empty object', function (done) {
-
- var a = {};
- var b = nestedObj;
-
- var c = Hoek.merge(a, b);
- expect(a).to.deep.equal(b);
- expect(c).to.deep.equal(b);
- done();
- });
-
- it('should override values in target', function (done) {
-
- var a = { x: 1, y: 2, z: 3, v: 5, t: 'test', m: 'abc' };
- var b = { x: null, z: 4, v: 0, t: { u: 6 }, m: '123' };
-
- var c = Hoek.merge(a, b);
- expect(c.x).to.equal(null);
- expect(c.y).to.equal(2);
- expect(c.z).to.equal(4);
- expect(c.v).to.equal(0);
- expect(c.m).to.equal('123');
- expect(c.t).to.deep.equal({ u: 6 });
- done();
- });
-
- it('should override values in target (flip)', function (done) {
-
- var a = { x: 1, y: 2, z: 3, v: 5, t: 'test', m: 'abc' };
- var b = { x: null, z: 4, v: 0, t: { u: 6 }, m: '123' };
-
- var d = Hoek.merge(b, a);
- expect(d.x).to.equal(1);
- expect(d.y).to.equal(2);
- expect(d.z).to.equal(3);
- expect(d.v).to.equal(5);
- expect(d.m).to.equal('abc');
- expect(d.t).to.deep.equal('test');
- done();
- });
- });
-
- describe('#applyToDefaults', function () {
-
- var defaults = {
- a: 1,
- b: 2,
- c: {
- d: 3,
- e: [5, 6]
- },
- f: 6,
- g: 'test'
- };
-
- it('should return null if options is false', function (done) {
-
- var result = Hoek.applyToDefaults(defaults, false);
- expect(result).to.equal(null);
- done();
- });
-
- it('should return a copy of defaults if options is true', function (done) {
-
- var result = Hoek.applyToDefaults(defaults, true);
- expect(result).to.deep.equal(result);
- done();
- });
-
- it('should apply object to defaults', function (done) {
-
- var obj = {
- a: null,
- c: {
- e: [4]
- },
- f: 0,
- g: {
- h: 5
- }
- };
-
- var result = Hoek.applyToDefaults(defaults, obj);
- expect(result.c.e).to.deep.equal([4]);
- expect(result.a).to.equal(1);
- expect(result.b).to.equal(2);
- expect(result.f).to.equal(0);
- expect(result.g).to.deep.equal({ h: 5 });
- done();
- });
- });
-
- describe('#unique', function () {
-
- it('should ensure uniqueness within array of objects based on subkey', function (done) {
-
- var a = Hoek.unique(dupsArray, 'x');
- expect(a).to.deep.equal(reducedDupsArray);
- done();
- });
-
- it('removes duplicated without key', function (done) {
-
- expect(Hoek.unique([1, 2, 3, 4, 2, 1, 5])).to.deep.equal([1, 2, 3, 4, 5]);
- done();
- });
- });
-
- describe('#mapToObject', function () {
-
- it('should return null on null array', function (done) {
-
- var a = Hoek.mapToObject(null);
- expect(a).to.equal(null);
- done();
- });
-
- it('should convert basic array to existential object', function (done) {
-
- var keys = [1, 2, 3, 4];
- var a = Hoek.mapToObject(keys);
- for (var i in keys) {
- expect(a[keys[i]]).to.equal(true);
- }
- done();
- });
-
- it('should convert array of objects to existential object', function (done) {
-
- var keys = [{ x: 1 }, { x: 2 }, { x: 3 }];
- var subkey = 'x';
- var a = Hoek.mapToObject(keys, subkey);
- for (var i in keys) {
- expect(a[keys[i][subkey]]).to.equal(true);
- }
- done();
- });
- });
-
- describe('#intersect', function () {
-
- it('should return the common objects of two arrays', function (done) {
-
- var array1 = [1, 2, 3, 4, 4, 5, 5];
- var array2 = [5, 4, 5, 6, 7];
- var common = Hoek.intersect(array1, array2);
- expect(common.length).to.equal(2);
- done();
- });
-
- it('should return just the first common object of two arrays', function (done) {
-
- var array1 = [1, 2, 3, 4, 4, 5, 5];
- var array2 = [5, 4, 5, 6, 7];
- var common = Hoek.intersect(array1, array2, true);
- expect(common).to.equal(5);
- done();
- });
-
- it('should return an empty array if either input is null', function (done) {
-
- expect(Hoek.intersect([1], null).length).to.equal(0);
- expect(Hoek.intersect(null, [1]).length).to.equal(0);
- done();
- });
-
- it('should return the common objects of object and array', function (done) {
-
- var array1 = [1, 2, 3, 4, 4, 5, 5];
- var array2 = [5, 4, 5, 6, 7];
- var common = Hoek.intersect(Hoek.mapToObject(array1), array2);
- expect(common.length).to.equal(2);
- done();
- });
- });
-
- describe('#matchKeys', function () {
-
- it('should match the existing object keys', function (done) {
-
- var obj = {
- a: 1,
- b: 2,
- c: 3,
- d: null
- };
-
- expect(Hoek.matchKeys(obj, ['b', 'c', 'd', 'e'])).to.deep.equal(['b', 'c', 'd']);
- done();
- });
- });
-
- describe('#flatten', function () {
-
- it('should return a flat array', function (done) {
-
- var result = Hoek.flatten([1, 2, [3, 4, [5, 6], [7], 8], [9], [10, [11, 12]], 13]);
- expect(result.length).to.equal(13);
- expect(result).to.deep.equal([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]);
- done();
- });
- });
-
- describe('#removeKeys', function () {
-
- var objWithHiddenKeys = {
- location: {
- name: 'San Bruno'
- },
- company: {
- name: '@WalmartLabs'
- }
- };
-
- it('should delete params with definition\'s hide set to true', function (done) {
-
- var a = Hoek.removeKeys(objWithHiddenKeys, ['location']);
- expect(objWithHiddenKeys.location).to.not.exist;
- expect(objWithHiddenKeys.company).to.exist;
- done();
- });
- });
-
- describe('#reach', function () {
-
- var obj = {
- a: {
- b: {
- c: {
- d: 1,
- e: 2
- },
- f: 'hello'
- },
- g: {
- h: 3
- }
- },
- i: function () { }
- };
-
- it('returns a valid member', function (done) {
-
- expect(Hoek.reach(obj, 'a.b.c.d')).to.equal(1);
- done();
- });
-
- it('returns null on null object', function (done) {
-
- expect(Hoek.reach(null, 'a.b.c.d')).to.not.exist;
- done();
- });
-
- it('returns null on missing member', function (done) {
-
- expect(Hoek.reach(obj, 'a.b.c.d.x')).to.not.exist;
- done();
- });
-
- it('returns null on invalid member', function (done) {
-
- expect(Hoek.reach(obj, 'a.b.c.d-.x')).to.not.exist;
- done();
- });
-
- it('returns function member', function (done) {
-
- expect(typeof Hoek.reach(obj, 'i')).to.equal('function');
- done();
- });
- });
-
- describe('#inheritAsync', function () {
-
- it('should inherit selected methods and wrap in async call', function (done) {
-
- var proto = {
- a: function () {
- return 'a!';
- },
- b: function () {
- return 'b!';
- },
- c: function () {
- throw new Error('c!');
- }
- };
-
- var targetFunc = function () { };
- targetFunc.prototype.c = function () {
-
- return 'oops';
- };
-
- Hoek.inheritAsync(targetFunc, proto, ['a', 'c']);
- var target = new targetFunc();
-
- expect(typeof target.a).to.equal('function');
- expect(typeof target.c).to.equal('function');
- expect(target.b).to.not.exist;
-
- target.a(function (err, result) {
-
- expect(err).to.not.exist;
- expect(result).to.equal('a!');
-
- target.c(function (err, result) {
-
- expect(result).to.not.exist;
- expect(err.message).to.equal('c!');
- done();
- });
- });
- });
- });
-
- describe('#callStack', function () {
-
- it('should return the full call stack', function (done) {
-
- var stack = Hoek.callStack();
- expect(stack[0][0]).to.contain('index.js');
- expect(stack[0][2]).to.equal(30);
- done();
- });
- });
-
- describe('#displayStack ', function () {
-
- it('should return the full call stack for display', function (done) {
-
- var stack = Hoek.displayStack();
- expect(stack[0]).to.contain('test/index.js:');
- done();
- });
-
- it('should include constructor functions correctly', function (done) {
-
- var Something = function (next) {
-
- next();
- };
-
- var something = new Something(function () {
-
- var stack = Hoek.displayStack();
- expect(stack[1]).to.contain('new Something');
- done();
- });
- });
- });
-
- describe('#abort', function () {
-
- it('should exit process when not in test mode', function (done) {
-
- var env = process.env.NODE_ENV;
- var write = process.stdout.write;
- var exit = process.exit;
-
- process.env.NODE_ENV = 'nottatest';
- process.stdout.write = function () { };
- process.exit = function (state) {
-
- process.exit = exit;
- process.env.NODE_ENV = env;
- process.stdout.write = write;
-
- expect(state).to.equal(1);
- done();
- };
-
- Hoek.abort('Boom');
- });
-
- it('should throw when not in test mode and abortThrow is true', function (done) {
-
- var env = process.env.NODE_ENV;
- process.env.NODE_ENV = 'nottatest';
- Hoek.abortThrow = true;
-
- var fn = function () {
-
- Hoek.abort('my error message');
- };
-
- expect(fn).to.throw('my error message');
- Hoek.abortThrow = false;
- process.env.NODE_ENV = env;
-
- done();
- });
-
-
- it('should respect hideStack argument', function (done) {
-
- var env = process.env.NODE_ENV;
- var write = process.stdout.write;
- var exit = process.exit;
- var output = '';
-
- process.exit = function () { };
- process.env.NODE_ENV = '';
- process.stdout.write = function (message) {
-
- output = message;
- };
-
- Hoek.abort('my error message', true);
-
- process.env.NODE_ENV = env;
- process.stdout.write = write;
- process.exit = exit;
-
- expect(output).to.equal('ABORT: my error message\n\t\n');
-
- done();
- });
-
- it('should default to showing stack', function (done) {
-
- var env = process.env.NODE_ENV;
- var write = process.stdout.write;
- var exit = process.exit;
- var output = '';
-
- process.exit = function () { };
- process.env.NODE_ENV = '';
- process.stdout.write = function (message) {
-
- output = message;
- };
-
- Hoek.abort('my error message');
-
- process.env.NODE_ENV = env;
- process.stdout.write = write;
- process.exit = exit;
-
- expect(output).to.contain('index.js');
-
- done();
- });
- });
-
- describe('#assert', function () {
-
- it('should throw an Error when using assert in a test', function (done) {
-
- var fn = function () {
-
- Hoek.assert(false, 'my error message');
- };
-
- expect(fn).to.throw('my error message');
- done();
- });
-
- it('should throw an Error when using assert in a test with no message', function (done) {
-
- var fn = function () {
-
- Hoek.assert(false);
- };
-
- expect(fn).to.throw('Unknown error');
- done();
- });
-
- it('should throw an Error when using assert in a test with multipart message', function (done) {
-
- var fn = function () {
-
- Hoek.assert(false, 'This', 'is', 'my message');
- };
-
- expect(fn).to.throw('This is my message');
- done();
- });
-
- it('should throw an Error when using assert in a test with object message', function (done) {
-
- var fn = function () {
-
- Hoek.assert(false, 'This', 'is', { spinal: 'tap' });
- };
-
- expect(fn).to.throw('This is {"spinal":"tap"}');
- done();
- });
-
- it('should throw an Error when using assert in a test with error object message', function (done) {
-
- var fn = function () {
-
- Hoek.assert(false, new Error('This is spinal tap'));
- };
-
- expect(fn).to.throw('This is spinal tap');
- done();
- });
- });
-
- describe('#loadDirModules', function () {
-
- it('should load modules from directory', function (done) {
-
- var target = {};
- Hoek.loadDirModules(__dirname + '/modules', ['test2'], target);
- expect(target.Test1.x).to.equal(1);
- expect(target.Test2).to.not.exist;
- expect(target.Test3.z).to.equal(3);
- done();
- });
-
- it('should list modules from directory into function', function (done) {
-
- var target = {};
- Hoek.loadDirModules(__dirname + '/modules', ['test2'], function (path, name, capName) {
-
- target[name] = capName;
- });
-
- expect(target.test1).to.equal('Test1');
- expect(target.test2).to.not.exist;
- expect(target.test3).to.equal('Test3');
- done();
- });
- });
-
- describe('#rename', function () {
-
- it('should rename object key', function (done) {
-
- var a = { b: 'c' };
- Hoek.rename(a, 'b', 'x');
- expect(a.b).to.not.exist;
- expect(a.x).to.equal('c');
- done();
- });
- });
-
- describe('Timer', function () {
-
- it('should return time elapsed', function (done) {
-
- var timer = new Hoek.Timer();
- setTimeout(function () {
-
- expect(timer.elapsed()).to.be.above(9);
- done();
- }, 12);
- });
- });
-
- describe('#loadPackage', function () {
-
- it('should', function (done) {
-
- var pack = Hoek.loadPackage();
- expect(pack.name).to.equal('hoek');
- done();
- });
- });
-
- describe('#escapeRegex', function () {
-
- it('should escape all special regular expression characters', function (done) {
-
- var a = Hoek.escapeRegex('4^f$s.4*5+-_?%=#!:@|~\\/`"(>)[<]d{}s,');
- expect(a).to.equal('4\\^f\\$s\\.4\\*5\\+\\-_\\?%\\=#\\!\\:@\\|~\\\\\\/`"\\(>\\)\\[<\\]d\\{\\}s\\,');
- done();
- });
- });
-
- describe('#toss', function () {
-
- it('should call callback with new error', function (done) {
-
- var callback = function (err) {
-
- expect(err).to.exist;
- expect(err.message).to.equal('bug');
- done();
- };
-
- Hoek.toss(true, 'feature', callback);
- Hoek.toss(false, 'bug', callback);
- });
-
- it('should call callback with new error and no message', function (done) {
-
- Hoek.toss(false, function (err) {
-
- expect(err).to.exist;
- expect(err.message).to.equal('');
- done();
- });
- });
-
- it('should call callback with error condition', function (done) {
-
- Hoek.toss(new Error('boom'), function (err) {
-
- expect(err).to.exist;
- expect(err.message).to.equal('boom');
- done();
- });
- });
-
- it('should call callback with new error using message with error condition', function (done) {
-
- Hoek.toss(new Error('ka'), 'boom', function (err) {
-
- expect(err).to.exist;
- expect(err.message).to.equal('boom');
- done();
- });
- });
-
- it('should call callback with new error using passed error with error condition', function (done) {
-
- Hoek.toss(new Error('ka'), new Error('boom'), function (err) {
-
- expect(err).to.exist;
- expect(err.message).to.equal('boom');
- done();
- });
- });
- });
-
- describe('Base64Url', function () {
-
- var base64str = 'AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0-P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9fn-AgYKDhIWGh4iJiouMjY6PkJGSk5SVlpeYmZqbnJ2en6ChoqOkpaanqKmqq6ytrq-wsbKztLW2t7i5uru8vb6_wMHCw8TFxsfIycrLzM3Oz9DR0tPU1dbX2Nna29zd3t_g4eLj5OXm5-jp6uvs7e7v8PHy8_T19vf4-fr7_P3-_w';
- var str = unescape('%00%01%02%03%04%05%06%07%08%09%0A%0B%0C%0D%0E%0F%10%11%12%13%14%15%16%17%18%19%1A%1B%1C%1D%1E%1F%20%21%22%23%24%25%26%27%28%29*+%2C-./0123456789%3A%3B%3C%3D%3E%3F@ABCDEFGHIJKLMNOPQRSTUVWXYZ%5B%5C%5D%5E_%60abcdefghijklmnopqrstuvwxyz%7B%7C%7D%7E%7F%80%81%82%83%84%85%86%87%88%89%8A%8B%8C%8D%8E%8F%90%91%92%93%94%95%96%97%98%99%9A%9B%9C%9D%9E%9F%A0%A1%A2%A3%A4%A5%A6%A7%A8%A9%AA%AB%AC%AD%AE%AF%B0%B1%B2%B3%B4%B5%B6%B7%B8%B9%BA%BB%BC%BD%BE%BF%C0%C1%C2%C3%C4%C5%C6%C7%C8%C9%CA%CB%CC%CD%CE%CF%D0%D1%D2%D3%D4%D5%D6%D7%D8%D9%DA%DB%DC%DD%DE%DF%E0%E1%E2%E3%E4%E5%E6%E7%E8%E9%EA%EB%EC%ED%EE%EF%F0%F1%F2%F3%F4%F5%F6%F7%F8%F9%FA%FB%FC%FD%FE%FF');
-
- describe('#base64urlEncode', function () {
-
- it('should base64 URL-safe a string', function (done) {
-
- expect(Hoek.base64urlEncode(str)).to.equal(base64str);
- done();
- });
- });
-
- describe('#base64urlDecode', function () {
-
- it('should un-base64 URL-safe a string', function (done) {
-
- expect(Hoek.base64urlDecode(base64str)).to.equal(str);
- done();
- });
-
- it('should return error on undefined input', function (done) {
-
- expect(Hoek.base64urlDecode().message).to.exist;
- done();
- });
-
- it('should return error on invalid input', function (done) {
-
- expect(Hoek.base64urlDecode('*').message).to.exist;
- done();
- });
- });
- });
-
- describe('#escapeHeaderAttribute', function () {
-
- it('should not alter ascii values', function (done) {
-
- var a = Hoek.escapeHeaderAttribute('My Value');
- expect(a).to.equal('My Value');
- done();
- });
-
- it('should escape all special HTTP header attribute characters', function (done) {
-
- var a = Hoek.escapeHeaderAttribute('I said go!!!#"' + String.fromCharCode(92));
- expect(a).to.equal('I said go!!!#\\"\\\\');
- done();
- });
-
- it('should throw on large unicode characters', function (done) {
-
- var fn = function () {
-
- Hoek.escapeHeaderAttribute('this is a test' + String.fromCharCode(500) + String.fromCharCode(300));
- };
-
- expect(fn).to.throw(Error);
- done();
- });
-
- it('should throw on CRLF to prevent response splitting', function (done) {
-
- var fn = function () {
-
- Hoek.escapeHeaderAttribute('this is a test\r\n');
- };
-
- expect(fn).to.throw(Error);
- done();
- });
- });
-
- describe('#escapeHtml', function () {
-
- it('should escape all special HTML characters', function (done) {
-
- var a = Hoek.escapeHtml('&<>"\'`');
- expect(a).to.equal('&amp;&lt;&gt;&quot;&#x27;&#x60;');
- done();
- });
-
- it('should return empty string on falsy input', function (done) {
-
- var a = Hoek.escapeHtml('');
- expect(a).to.equal('');
- done();
- });
-
- it('should return unchanged string on no reserved input', function (done) {
-
- var a = Hoek.escapeHtml('abc');
- expect(a).to.equal('abc');
- done();
- });
- });
-
- describe('#printEvent', function () {
-
- it('outputs event as string', function (done) {
-
- var event = {
- timestamp: (new Date(2013, 1, 1, 6, 30, 45, 123)).getTime(),
- tags: ['a', 'b', 'c'],
- data: { some: 'data' }
- };
-
- Hoek.consoleFunc = function (string) {
-
- Hoek.consoleFunc = console.log;
- expect(string).to.equal('130201/063045.123, a, {"some":"data"}');
- done();
- };
-
- Hoek.printEvent(event);
- });
-
- it('outputs JSON error', function (done) {
-
- var event = {
- timestamp: (new Date(2013, 1, 1, 6, 30, 45, 123)).getTime(),
- tags: ['a', 'b', 'c'],
- data: { some: 'data' }
- };
-
- event.data.a = event.data;
-
- Hoek.consoleFunc = function (string) {
-
- Hoek.consoleFunc = console.log;
- expect(string).to.equal('130201/063045.123, a, JSON Error: Converting circular structure to JSON');
- done();
- };
-
- Hoek.printEvent(event);
- });
- });
-
- describe('#nextTick', function () {
-
- it('calls the provided callback on nextTick', function (done) {
-
- var a = 0;
-
- var inc = function (step, next) {
-
- a += step;
- next();
- };
-
- var ticked = Hoek.nextTick(inc);
-
- ticked(5, function () {
-
- expect(a).to.equal(6);
- done();
- });
-
- expect(a).to.equal(0);
- inc(1, function () {
-
- expect(a).to.equal(1);
- });
- });
- });
-});
-
diff --git a/deps/npm/node_modules/request/node_modules/hawk/node_modules/sntp/node_modules/hoek/test/modules/test1.js b/deps/npm/node_modules/request/node_modules/hawk/node_modules/sntp/node_modules/hoek/test/modules/test1.js
deleted file mode 100755
index 3f41e601e..000000000
--- a/deps/npm/node_modules/request/node_modules/hawk/node_modules/sntp/node_modules/hoek/test/modules/test1.js
+++ /dev/null
@@ -1 +0,0 @@
-exports.x = 1;
diff --git a/deps/npm/node_modules/request/node_modules/hawk/node_modules/sntp/node_modules/hoek/test/modules/test2.js b/deps/npm/node_modules/request/node_modules/hawk/node_modules/sntp/node_modules/hoek/test/modules/test2.js
deleted file mode 100755
index 38556b274..000000000
--- a/deps/npm/node_modules/request/node_modules/hawk/node_modules/sntp/node_modules/hoek/test/modules/test2.js
+++ /dev/null
@@ -1 +0,0 @@
-exports.y = 2;
diff --git a/deps/npm/node_modules/request/node_modules/hawk/node_modules/sntp/node_modules/hoek/test/modules/test3.js b/deps/npm/node_modules/request/node_modules/hawk/node_modules/sntp/node_modules/hoek/test/modules/test3.js
deleted file mode 100755
index 436b860b8..000000000
--- a/deps/npm/node_modules/request/node_modules/hawk/node_modules/sntp/node_modules/hoek/test/modules/test3.js
+++ /dev/null
@@ -1 +0,0 @@
-exports.z = 3;
diff --git a/deps/npm/node_modules/request/node_modules/hawk/node_modules/sntp/package.json b/deps/npm/node_modules/request/node_modules/hawk/node_modules/sntp/package.json
index baacddc8e..4c4b2f579 100755
--- a/deps/npm/node_modules/request/node_modules/hawk/node_modules/sntp/package.json
+++ b/deps/npm/node_modules/request/node_modules/hawk/node_modules/sntp/package.json
@@ -42,6 +42,7 @@
"bugs": {
"url": "https://github.com/hueniverse/sntp/issues"
},
+ "homepage": "https://github.com/hueniverse/sntp",
"_id": "sntp@0.2.4",
"_from": "sntp@0.2.x"
}
diff --git a/deps/npm/node_modules/request/node_modules/hawk/package.json b/deps/npm/node_modules/request/node_modules/hawk/package.json
index 6c6ba75a7..16feb783c 100755
--- a/deps/npm/node_modules/request/node_modules/hawk/package.json
+++ b/deps/npm/node_modules/request/node_modules/hawk/package.json
@@ -1,7 +1,7 @@
{
"name": "hawk",
"description": "HTTP Hawk Authentication Scheme",
- "version": "0.13.1",
+ "version": "1.0.0",
"author": {
"name": "Eran Hammer",
"email": "eran@hueniverse.com",
@@ -23,7 +23,7 @@
"node": ">=0.8.0"
},
"dependencies": {
- "hoek": "0.8.x",
+ "hoek": "0.9.x",
"boom": "0.4.x",
"cryptiles": "0.2.x",
"sntp": "0.2.x"
@@ -42,11 +42,12 @@
"url": "http://github.com/hueniverse/hawk/raw/master/LICENSE"
}
],
- "readme": "![hawk Logo](https://raw.github.com/hueniverse/hawk/master/images/hawk.png)\r\n\r\n<img align=\"right\" src=\"https://raw.github.com/hueniverse/hawk/master/images/logo.png\" /> **Hawk** is an HTTP authentication scheme using a message authentication code (MAC) algorithm to provide partial\r\nHTTP request cryptographic verification. For more complex use cases such as access delegation, see [Oz](https://github.com/hueniverse/oz).\r\n\r\nCurrent version: **0.13**\r\n\r\n[![Build Status](https://secure.travis-ci.org/hueniverse/hawk.png)](http://travis-ci.org/hueniverse/hawk)\r\n\r\n# Table of Content\r\n\r\n- [**Introduction**](#introduction)\r\n - [Replay Protection](#replay-protection)\r\n - [Usage Example](#usage-example)\r\n - [Protocol Example](#protocol-example)\r\n - [Payload Validation](#payload-validation)\r\n - [Response Payload Validation](#response-payload-validation)\r\n - [Browser Support and Considerations](#browser-support-and-considerations)\r\n<p></p>\r\n- [**Single URI Authorization**](#single-uri-authorization)\r\n - [Usage Example](#bewit-usage-example)\r\n<p></p>\r\n- [**Security Considerations**](#security-considerations)\r\n - [MAC Keys Transmission](#mac-keys-transmission)\r\n - [Confidentiality of Requests](#confidentiality-of-requests)\r\n - [Spoofing by Counterfeit Servers](#spoofing-by-counterfeit-servers)\r\n - [Plaintext Storage of Credentials](#plaintext-storage-of-credentials)\r\n - [Entropy of Keys](#entropy-of-keys)\r\n - [Coverage Limitations](#coverage-limitations)\r\n - [Future Time Manipulation](#future-time-manipulation)\r\n - [Client Clock Poisoning](#client-clock-poisoning)\r\n - [Bewit Limitations](#bewit-limitations)\r\n<p></p>\r\n- [**Frequently Asked Questions**](#frequently-asked-questions)\r\n<p></p>\r\n- [**Acknowledgements**](#acknowledgements)\r\n\r\n# Introduction\r\n\r\n**Hawk** is an HTTP authentication scheme providing mechanisms for making authenticated HTTP requests with\r\npartial cryptographic verification of the request and response, covering the HTTP method, request URI, host,\r\nand optionally the request payload.\r\n\r\nSimilar to the HTTP [Digest access authentication schemes](http://www.ietf.org/rfc/rfc2617.txt), **Hawk** uses a set of\r\nclient credentials which include an identifier (e.g. username) and key (e.g. password). Likewise, just as with the Digest scheme,\r\nthe key is never included in authenticated requests. Instead, it is used to calculate a request MAC value which is\r\nincluded in its place.\r\n\r\nHowever, **Hawk** has several differences from Digest. In particular, while both use a nonce to limit the possibility of\r\nreplay attacks, in **Hawk** the client generates the nonce and uses it in combination with a timestamp, leading to less\r\n\"chattiness\" (interaction with the server).\r\n\r\nAlso unlike Digest, this scheme is not intended to protect the key itself (the password in Digest) because\r\nthe client and server must both have access to the key material in the clear.\r\n\r\nThe primary design goals of this scheme are to:\r\n* simplify and improve HTTP authentication for services that are unwilling or unable to deploy TLS for all resources,\r\n* secure credentials against leakage (e.g., when the client uses some form of dynamic configuration to determine where\r\n to send an authenticated request), and\r\n* avoid the exposure of credentials sent to a malicious server over an unauthenticated secure channel due to client\r\n failure to validate the server's identity as part of its TLS handshake.\r\n\r\nIn addition, **Hawk** supports a method for granting third-parties temporary access to individual resources using\r\na query parameter called _bewit_ (in falconry, a leather strap used to attach a tracking device to the leg of a hawk).\r\n\r\nThe **Hawk** scheme requires the establishment of a shared symmetric key between the client and the server,\r\nwhich is beyond the scope of this module. Typically, the shared credentials are established via an initial\r\nTLS-protected phase or derived from some other shared confidential information available to both the client\r\nand the server.\r\n\r\n\r\n## Replay Protection\r\n\r\nWithout replay protection, an attacker can use a compromised (but otherwise valid and authenticated) request more \r\nthan once, gaining access to a protected resource. To mitigate this, clients include both a nonce and a timestamp when \r\nmaking requests. This gives the server enough information to prevent replay attacks.\r\n\r\nThe nonce is generated by the client, and is a string unique across all requests with the same timestamp and\r\nkey identifier combination. \r\n\r\nThe timestamp enables the server to restrict the validity period of the credentials where requests occuring afterwards\r\nare rejected. It also removes the need for the server to retain an unbounded number of nonce values for future checks.\r\nBy default, **Hawk** uses a time window of 1 minute to allow for time skew between the client and server (which in\r\npractice translates to a maximum of 2 minutes as the skew can be positive or negative).\r\n\r\nUsing a timestamp requires the client's clock to be in sync with the server's clock. **Hawk** requires both the client\r\nclock and the server clock to use NTP to ensure synchronization. However, given the limitations of some client types\r\n(e.g. browsers) to deploy NTP, the server provides the client with its current time (in seconds precision) in response\r\nto a bad timestamp.\r\n\r\nThere is no expectation that the client will adjust its system clock to match the server (in fact, this would be a\r\npotential attack vector). Instead, the client only uses the server's time to calculate an offset used only\r\nfor communications with that particular server. The protocol rewards clients with synchronized clocks by reducing\r\nthe number of round trips required to authenticate the first request.\r\n\r\n\r\n## Usage Example\r\n\r\nServer code:\r\n\r\n```javascript\r\nvar Http = require('http');\r\nvar Hawk = require('hawk');\r\n\r\n\r\n// Credentials lookup function\r\n\r\nvar credentialsFunc = function (id, callback) {\r\n\r\n var credentials = {\r\n key: 'werxhqb98rpaxn39848xrunpaw3489ruxnpa98w4rxn',\r\n algorithm: 'sha256',\r\n user: 'Steve'\r\n };\r\n\r\n return callback(null, credentials);\r\n};\r\n\r\n// Create HTTP server\r\n\r\nvar handler = function (req, res) {\r\n\r\n // Authenticate incoming request\r\n\r\n Hawk.server.authenticate(req, credentialsFunc, {}, function (err, credentials, artifacts) {\r\n\r\n // Prepare response\r\n\r\n var payload = (!err ? 'Hello ' + credentials.user + ' ' + artifacts.ext : 'Shoosh!');\r\n var headers = { 'Content-Type': 'text/plain' };\r\n\r\n // Generate Server-Authorization response header\r\n\r\n var header = Hawk.server.header(credentials, artifacts, { payload: payload, contentType: headers['Content-Type'] });\r\n headers['Server-Authorization'] = header;\r\n\r\n // Send the response back\r\n\r\n res.writeHead(!err ? 200 : 401, headers);\r\n res.end(payload);\r\n });\r\n};\r\n\r\n// Start server\r\n\r\nHttp.createServer(handler).listen(8000, 'example.com');\r\n```\r\n\r\nClient code:\r\n\r\n```javascript\r\nvar Request = require('request');\r\nvar Hawk = require('hawk');\r\n\r\n\r\n// Client credentials\r\n\r\nvar credentials = {\r\n id: 'dh37fgj492je',\r\n key: 'werxhqb98rpaxn39848xrunpaw3489ruxnpa98w4rxn',\r\n algorithm: 'sha256'\r\n}\r\n\r\n// Request options\r\n\r\nvar requestOptions = {\r\n uri: 'http://example.com:8000/resource/1?b=1&a=2',\r\n method: 'GET',\r\n headers: {}\r\n};\r\n\r\n// Generate Authorization request header\r\n\r\nvar header = Hawk.client.header('http://example.com:8000/resource/1?b=1&a=2', 'GET', { credentials: credentials, ext: 'some-app-data' });\r\nrequestOptions.headers.Authorization = header.field;\r\n\r\n// Send authenticated request\r\n\r\nRequest(requestOptions, function (error, response, body) {\r\n\r\n // Authenticate the server's response\r\n\r\n var isValid = Hawk.client.authenticate(response, credentials, header.artifacts, { payload: body });\r\n\r\n // Output results\r\n\r\n console.log(response.statusCode + ': ' + body + (isValid ? ' (valid)' : ' (invalid)'));\r\n});\r\n```\r\n\r\n**Hawk** utilized the [**SNTP**](https://github.com/hueniverse/sntp) module for time sync management. By default, the local\r\nmachine time is used. To automatically retrieve and synchronice the clock within the application, use the SNTP 'start()' method.\r\n\r\n```javascript\r\nHawk.sntp.start();\r\n```\r\n\r\n\r\n## Protocol Example\r\n\r\nThe client attempts to access a protected resource without authentication, sending the following HTTP request to\r\nthe resource server:\r\n\r\n```\r\nGET /resource/1?b=1&a=2 HTTP/1.1\r\nHost: example.com:8000\r\n```\r\n\r\nThe resource server returns an authentication challenge.\r\n\r\n```\r\nHTTP/1.1 401 Unauthorized\r\nWWW-Authenticate: Hawk\r\n```\r\n\r\nThe client has previously obtained a set of **Hawk** credentials for accessing resources on the \"http://example.com/\"\r\nserver. The **Hawk** credentials issued to the client include the following attributes:\r\n\r\n* Key identifier: dh37fgj492je\r\n* Key: werxhqb98rpaxn39848xrunpaw3489ruxnpa98w4rxn\r\n* Algorithm: sha256\r\n\r\nThe client generates the authentication header by calculating a timestamp (e.g. the number of seconds since January 1,\r\n1970 00:00:00 GMT), generating a nonce, and constructing the normalized request string (each value followed by a newline\r\ncharacter):\r\n\r\n```\r\nhawk.1.header\r\n1353832234\r\nj4h3g2\r\nGET\r\n/resource?a=1&b=2\r\nexample.com\r\n8000\r\n\r\nsome-app-ext-data\r\n\r\n```\r\n\r\nThe request MAC is calculated using HMAC with the specified hash algorithm \"sha256\" and the key over the normalized request string.\r\nThe result is base64-encoded to produce the request MAC:\r\n\r\n```\r\n6R4rV5iE+NPoym+WwjeHzjAGXUtLNIxmo1vpMofpLAE=\r\n```\r\n\r\nThe client includes the **Hawk** key identifier, timestamp, nonce, application specific data, and request MAC with the request using\r\nthe HTTP `Authorization` request header field:\r\n\r\n```\r\nGET /resource/1?b=1&a=2 HTTP/1.1\r\nHost: example.com:8000\r\nAuthorization: Hawk id=\"dh37fgj492je\", ts=\"1353832234\", nonce=\"j4h3g2\", ext=\"some-app-ext-data\", mac=\"6R4rV5iE+NPoym+WwjeHzjAGXUtLNIxmo1vpMofpLAE=\"\r\n```\r\n\r\nThe server validates the request by calculating the request MAC again based on the request received and verifies the validity\r\nand scope of the **Hawk** credentials. If valid, the server responds with the requested resource.\r\n\r\n\r\n### Payload Validation\r\n\r\n**Hawk** provides optional payload validation. When generating the authentication header, the client calculates a payload hash\r\nusing the specified hash algorithm. The hash is calculated over the concatenated value of (each followed by a newline character):\r\n* `hawk.1.payload`\r\n* the content-type in lowercase, without any parameters (e.g. `application/json`)\r\n* the request payload prior to any content encoding (the exact representation requirements should be specified by the server for payloads other than simple single-part ascii to ensure interoperability)\r\n\r\nFor example:\r\n\r\n* Payload: `Thank you for flying Hawk`\r\n* Content Type: `text/plain`\r\n* Hash (sha256): `Yi9LfIIFRtBEPt74PVmbTF/xVAwPn7ub15ePICfgnuY=`\r\n\r\nResults in the following input to the payload hash function (newline terminated values):\r\n\r\n```\r\nhawk.1.payload\r\ntext/plain\r\nThank you for flying Hawk\r\n\r\n```\r\n\r\nWhich produces the following hash value:\r\n\r\n```\r\nYi9LfIIFRtBEPt74PVmbTF/xVAwPn7ub15ePICfgnuY=\r\n```\r\n\r\nThe client constructs the normalized request string (newline terminated values):\r\n\r\n```\r\nhawk.1.header\r\n1353832234\r\nj4h3g2\r\nPOST\r\n/resource?a=1&b=2\r\nexample.com\r\n8000\r\nYi9LfIIFRtBEPt74PVmbTF/xVAwPn7ub15ePICfgnuY=\r\nsome-app-ext-data\r\n\r\n```\r\n\r\nThen calculates the request MAC and includes the **Hawk** key identifier, timestamp, nonce, payload hash, application specific data,\r\nand request MAC, with the request using the HTTP `Authorization` request header field:\r\n\r\n```\r\nPOST /resource/1 HTTP/1.1\r\nHost: example.com:8000\r\nAuthorization: Hawk id=\"dh37fgj492je\", ts=\"1353832234\", nonce=\"j4h3g2\", hash=\"Yi9LfIIFRtBEPt74PVmbTF/xVAwPn7ub15ePICfgnuY=\", ext=\"some-app-ext-data\", mac=\"aSe1DERmZuRl3pI36/9BdZmnErTw3sNzOOAUlfeKjVw=\"\r\n```\r\n\r\nIt is up to the server if and when it validates the payload for any given request, based solely on it's security policy\r\nand the nature of the data included.\r\n\r\nIf the payload is available at the time of authentication, the server uses the hash value provided by the client to construct\r\nthe normalized string and validates the MAC. If the MAC is valid, the server calculates the payload hash and compares the value\r\nwith the provided payload hash in the header. In many cases, checking the MAC first is faster than calculating the payload hash.\r\n\r\nHowever, if the payload is not available at authentication time (e.g. too large to fit in memory, streamed elsewhere, or processed\r\nat a different stage in the application), the server may choose to defer payload validation for later by retaining the hash value\r\nprovided by the client after validating the MAC.\r\n\r\nIt is important to note that MAC validation does not mean the hash value provided by the client is valid, only that the value\r\nincluded in the header was not modified. Without calculating the payload hash on the server and comparing it to the value provided\r\nby the client, the payload may be modified by an attacker.\r\n\r\n\r\n## Response Payload Validation\r\n\r\n**Hawk** provides partial response payload validation. The server includes the `Server-Authorization` response header which enables the\r\nclient to authenticate the response and ensure it is talking to the right server. **Hawk** defines the HTTP `Server-Authorization` header\r\nas a response header using the exact same syntax as the `Authorization` request header field.\r\n\r\nThe header is contructed using the same process as the client's request header. The server uses the same credentials and other\r\nartifacts provided by the client to constructs the normalized request string. The `ext` and `hash` values are replaced with\r\nnew values based on the server response. The rest as identical to those used by the client.\r\n\r\nThe result MAC digest is included with the optional `hash` and `ext` values:\r\n\r\n```\r\nServer-Authorization: Hawk mac=\"XIJRsMl/4oL+nn+vKoeVZPdCHXB4yJkNnBbTbHFZUYE=\", hash=\"f9cDF/TDm7TkYRLnGwRMfeDzT6LixQVLvrIKhh0vgmM=\", ext=\"response-specific\"\r\n```\r\n\r\n\r\n## Browser Support and Considerations\r\n\r\nA browser script is provided for including using a `<script>` tag in [lib/browser.js](/lib/browser.js).\r\n\r\n**Hawk** relies on the _Server-Authorization_ and _WWW-Authenticate_ headers in its response to communicate with the client.\r\nTherefore, in case of CORS requests, it is important to consider sending _Access-Control-Expose-Headers_ with the value\r\n_\"WWW-Authenticate, Server-Authorization\"_ on each response from your server. As explained in the\r\n[specifications](http://www.w3.org/TR/cors/#access-control-expose-headers-response-header), it will indicate that these headers\r\ncan safely be accessed by the client (using getResponseHeader() on the XmlHttpRequest object). Otherwise you will be met with a\r\n[\"simple response header\"](http://www.w3.org/TR/cors/#simple-response-header) which excludes these fields and would prevent the\r\nHawk client from authenticating the requests.You can read more about the why and how in this\r\n[article](http://www.html5rocks.com/en/tutorials/cors/#toc-adding-cors-support-to-the-server)\r\n\r\n\r\n# Single URI Authorization\r\n\r\nThere are cases in which limited and short-term access to a protected resource is granted to a third party which does not\r\nhave access to the shared credentials. For example, displaying a protected image on a web page accessed by anyone. **Hawk**\r\nprovides limited support for such URIs in the form of a _bewit_ - a URI query parameter appended to the request URI which contains\r\nthe necessary credentials to authenticate the request.\r\n\r\nBecause of the significant security risks involved in issuing such access, bewit usage is purposely limited only to GET requests\r\nand for a finite period of time. Both the client and server can issue bewit credentials, however, the server should not use the same\r\ncredentials as the client to maintain clear traceability as to who issued which credentials.\r\n\r\nIn order to simplify implementation, bewit credentials do not support single-use policy and can be replayed multiple times within\r\nthe granted access timeframe. \r\n\r\n\r\n## Bewit Usage Example\r\n\r\nServer code:\r\n\r\n```javascript\r\nvar Http = require('http');\r\nvar Hawk = require('hawk');\r\n\r\n\r\n// Credentials lookup function\r\n\r\nvar credentialsFunc = function (id, callback) {\r\n\r\n var credentials = {\r\n key: 'werxhqb98rpaxn39848xrunpaw3489ruxnpa98w4rxn',\r\n algorithm: 'sha256'\r\n };\r\n\r\n return callback(null, credentials);\r\n};\r\n\r\n// Create HTTP server\r\n\r\nvar handler = function (req, res) {\r\n\r\n Hawk.uri.authenticate(req, credentialsFunc, {}, function (err, credentials, attributes) {\r\n\r\n res.writeHead(!err ? 200 : 401, { 'Content-Type': 'text/plain' });\r\n res.end(!err ? 'Access granted' : 'Shoosh!');\r\n });\r\n};\r\n\r\nHttp.createServer(handler).listen(8000, 'example.com');\r\n```\r\n\r\nBewit code generation:\r\n\r\n```javascript\r\nvar Request = require('request');\r\nvar Hawk = require('hawk');\r\n\r\n\r\n// Client credentials\r\n\r\nvar credentials = {\r\n id: 'dh37fgj492je',\r\n key: 'werxhqb98rpaxn39848xrunpaw3489ruxnpa98w4rxn',\r\n algorithm: 'sha256'\r\n}\r\n\r\n// Generate bewit\r\n\r\nvar duration = 60 * 5; // 5 Minutes\r\nvar bewit = Hawk.uri.getBewit('http://example.com:8080/resource/1?b=1&a=2', { credentials: credentials, ttlSec: duration, ext: 'some-app-data' });\r\nvar uri = 'http://example.com:8000/resource/1?b=1&a=2' + '&bewit=' + bewit;\r\n```\r\n\r\n\r\n# Security Considerations\r\n\r\nThe greatest sources of security risks are usually found not in **Hawk** but in the policies and procedures surrounding its use.\r\nImplementers are strongly encouraged to assess how this module addresses their security requirements. This section includes\r\nan incomplete list of security considerations that must be reviewed and understood before deploying **Hawk** on the server.\r\nMany of the protections provided in **Hawk** depends on whether and how they are used.\r\n\r\n### MAC Keys Transmission\r\n\r\n**Hawk** does not provide any mechanism for obtaining or transmitting the set of shared credentials required. Any mechanism used\r\nto obtain **Hawk** credentials must ensure that these transmissions are protected using transport-layer mechanisms such as TLS.\r\n\r\n### Confidentiality of Requests\r\n\r\nWhile **Hawk** provides a mechanism for verifying the integrity of HTTP requests, it provides no guarantee of request\r\nconfidentiality. Unless other precautions are taken, eavesdroppers will have full access to the request content. Servers should\r\ncarefully consider the types of data likely to be sent as part of such requests, and employ transport-layer security mechanisms\r\nto protect sensitive resources.\r\n\r\n### Spoofing by Counterfeit Servers\r\n\r\n**Hawk** provides limited verification of the server authenticity. When receiving a response back from the server, the server\r\nmay choose to include a response `Server-Authorization` header which the client can use to verify the response. However, it is up to\r\nthe server to determine when such measure is included, to up to the client to enforce that policy.\r\n\r\nA hostile party could take advantage of this by intercepting the client's requests and returning misleading or otherwise\r\nincorrect responses. Service providers should consider such attacks when developing services using this protocol, and should\r\nrequire transport-layer security for any requests where the authenticity of the resource server or of server responses is an issue.\r\n\r\n### Plaintext Storage of Credentials\r\n\r\nThe **Hawk** key functions the same way passwords do in traditional authentication systems. In order to compute the request MAC,\r\nthe server must have access to the key in plaintext form. This is in contrast, for example, to modern operating systems, which\r\nstore only a one-way hash of user credentials.\r\n\r\nIf an attacker were to gain access to these keys - or worse, to the server's database of all such keys - he or she would be able\r\nto perform any action on behalf of any resource owner. Accordingly, it is critical that servers protect these keys from unauthorized\r\naccess.\r\n\r\n### Entropy of Keys\r\n\r\nUnless a transport-layer security protocol is used, eavesdroppers will have full access to authenticated requests and request\r\nMAC values, and will thus be able to mount offline brute-force attacks to recover the key used. Servers should be careful to\r\nassign keys which are long enough, and random enough, to resist such attacks for at least the length of time that the **Hawk**\r\ncredentials are valid.\r\n\r\nFor example, if the credentials are valid for two weeks, servers should ensure that it is not possible to mount a brute force\r\nattack that recovers the key in less than two weeks. Of course, servers are urged to err on the side of caution, and use the\r\nlongest key reasonable.\r\n\r\nIt is equally important that the pseudo-random number generator (PRNG) used to generate these keys be of sufficiently high\r\nquality. Many PRNG implementations generate number sequences that may appear to be random, but which nevertheless exhibit\r\npatterns or other weaknesses which make cryptanalysis or brute force attacks easier. Implementers should be careful to use\r\ncryptographically secure PRNGs to avoid these problems.\r\n\r\n### Coverage Limitations\r\n\r\nThe request MAC only covers the HTTP `Host` header and optionally the `Content-Type` header. It does not cover any other headers\r\nwhich can often affect how the request body is interpreted by the server. If the server behavior is influenced by the presence\r\nor value of such headers, an attacker can manipulate the request headers without being detected. Implementers should use the\r\n`ext` feature to pass application-specific information via the `Authorization` header which is protected by the request MAC.\r\n\r\nThe response authentication, when performed, only covers the response payload, content-type, and the request information \r\nprovided by the client in it's request (method, resource, timestamp, nonce, etc.). It does not cover the HTTP status code or\r\nany other response header field (e.g. Location) which can affect the client's behaviour.\r\n\r\n### Future Time Manipulation\r\n\r\nThe protocol relies on a clock sync between the client and server. To accomplish this, the server informs the client of its\r\ncurrent time when an invalid timestamp is received.\r\n\r\nIf an attacker is able to manipulate this information and cause the client to use an incorrect time, it would be able to cause\r\nthe client to generate authenticated requests using time in the future. Such requests will fail when sent by the client, and will\r\nnot likely leave a trace on the server (given the common implementation of nonce, if at all enforced). The attacker will then\r\nbe able to replay the request at the correct time without detection.\r\n\r\nThe client must only use the time information provided by the server if:\r\n* it was delivered over a TLS connection and the server identity has been verified, or\r\n* the `tsm` MAC digest calculated using the same client credentials over the timestamp has been verified.\r\n\r\n### Client Clock Poisoning\r\n\r\nWhen receiving a request with a bad timestamp, the server provides the client with its current time. The client must never use\r\nthe time received from the server to adjust its own clock, and must only use it to calculate an offset for communicating with\r\nthat particular server.\r\n\r\n### Bewit Limitations\r\n\r\nSpecial care must be taken when issuing bewit credentials to third parties. Bewit credentials are valid until expiration and cannot\r\nbe revoked or limited without using other means. Whatever resource they grant access to will be completely exposed to anyone with\r\naccess to the bewit credentials which act as bearer credentials for that particular resource. While bewit usage is limited to GET\r\nrequests only and therefore cannot be used to perform transactions or change server state, it can still be used to expose private\r\nand sensitive information.\r\n\r\n\r\n# Frequently Asked Questions\r\n\r\n### Where is the protocol specification?\r\n\r\nIf you are looking for some prose explaining how all this works, **this is it**. **Hawk** is being developed as an open source\r\nproject instead of a standard. In other words, the [code](/hueniverse/hawk/tree/master/lib) is the specification. Not sure about\r\nsomething? Open an issue!\r\n\r\n### Is it done?\r\n\r\nAt if version 0.10.0, **Hawk** is feature-complete. However, until this module reaches version 1.0.0 it is considered experimental\r\nand is likely to change. This also means your feedback and contribution are very welcome. Feel free to open issues with questions\r\nand suggestions.\r\n\r\n### Where can I find **Hawk** implementations in other languages?\r\n\r\n**Hawk**'s only reference implementation is provided in JavaScript as a node.js module. However, others are actively porting it to other\r\nplatforms. There is already a [PHP](https://github.com/alexbilbie/PHP-Hawk),\r\n[.NET](https://github.com/pcibraro/hawknet), and [JAVA](https://github.com/wealdtech/hawk) libraries available. The full list\r\nis maintained [here](https://github.com/hueniverse/hawk/issues?labels=port). Please add an issue if you are working on another\r\nport. A cross-platform test-suite is in the works.\r\n\r\n### Why isn't the algorithm part of the challenge or dynamically negotiated?\r\n\r\nThe algorithm used is closely related to the key issued as different algorithms require different key sizes (and other\r\nrequirements). While some keys can be used for multiple algorithm, the protocol is designed to closely bind the key and algorithm\r\ntogether as part of the issued credentials.\r\n\r\n### Why is Host and Content-Type the only headers covered by the request MAC?\r\n\r\nIt is really hard to include other headers. Headers can be changed by proxies and other intermediaries and there is no\r\nwell-established way to normalize them. Many platforms change the case of header field names and values. The only\r\nstraight-forward solution is to include the headers in some blob (say, base64 encoded JSON) and include that with the request,\r\nan approach taken by JWT and other such formats. However, that design violates the HTTP header boundaries, repeats information,\r\nand introduces other security issues because firewalls will not be aware of these \"hidden\" headers. In addition, any information\r\nrepeated must be compared to the duplicated information in the header and therefore only moves the problem elsewhere.\r\n\r\n### Why not just use HTTP Digest?\r\n\r\nDigest requires pre-negotiation to establish a nonce. This means you can't just make a request - you must first send\r\na protocol handshake to the server. This pattern has become unacceptable for most web services, especially mobile\r\nwhere extra round-trip are costly.\r\n\r\n### Why bother with all this nonce and timestamp business?\r\n\r\n**Hawk** is an attempt to find a reasonable, practical compromise between security and usability. OAuth 1.0 got timestamp\r\nand nonces halfway right but failed when it came to scalability and consistent developer experience. **Hawk** addresses\r\nit by requiring the client to sync its clock, but provides it with tools to accomplish it.\r\n\r\nIn general, replay protection is a matter of application-specific threat model. It is less of an issue on a TLS-protected\r\nsystem where the clients are implemented using best practices and are under the control of the server. Instead of dropping\r\nreplay protection, **Hawk** offers a required time window and an optional nonce verification. Together, it provides developers\r\nwith the ability to decide how to enforce their security policy without impacting the client's implementation.\r\n\r\n### What are `app` and `dlg` in the authorization header and normalized mac string?\r\n\r\nThe original motivation for **Hawk** was to replace the OAuth 1.0 use cases. This included both a simple client-server mode which\r\nthis module is specifically designed for, and a delegated access mode which is being developed separately in\r\n[Oz](https://github.com/hueniverse/oz). In addition to the **Hawk** use cases, Oz requires another attribute: the application id `app`.\r\nThis provides binding between the credentials and the application in a way that prevents an attacker from tricking an application\r\nto use credentials issued to someone else. It also has an optional 'delegated-by' attribute `dlg` which is the application id of the\r\napplication the credentials were directly issued to. The goal of these two additions is to allow Oz to utilize **Hawk** directly,\r\nbut with the additional security of delegated credentials.\r\n\r\n### What is the purpose of the static strings used in each normalized MAC input?\r\n\r\nWhen calculating a hash or MAC, a static prefix (tag) is added. The prefix is used to prevent MAC values from being\r\nused or reused for a purpose other than what they were created for (i.e. prevents switching MAC values between a request,\r\nresponse, and a bewit use cases). It also protects against expliots created after a potential change in how the protocol\r\ncreates the normalized string. For example, if a future version would switch the order of nonce and timestamp, it\r\ncan create an exploit opportunity for cases where the nonce is similar in format to a timestamp.\r\n\r\n### Does **Hawk** have anything to do with OAuth?\r\n\r\nShort answer: no.\r\n\r\n**Hawk** was originally proposed as the OAuth MAC Token specification. However, the OAuth working group in its consistent\r\nincompetence failed to produce a final, usable solution to address one of the most popular use cases of OAuth 1.0 - using it\r\nto authenticate simple client-server transactions (i.e. two-legged). As you can guess, the OAuth working group is still hard\r\nat work to produce more garbage.\r\n\r\n**Hawk** provides a simple HTTP authentication scheme for making client-server requests. It does not address the OAuth use case\r\nof delegating access to a third party. If you are looking for an OAuth alternative, check out [Oz](https://github.com/hueniverse/oz).\r\n\r\n\r\n# Acknowledgements\r\n\r\n**Hawk** is a derivative work of the [HTTP MAC Authentication Scheme](http://tools.ietf.org/html/draft-hammer-oauth-v2-mac-token-05) proposal\r\nco-authored by Ben Adida, Adam Barth, and Eran Hammer, which in turn was based on the OAuth 1.0 community specification.\r\n\r\nSpecial thanks to Ben Laurie for his always insightful feedback and advice.\r\n\r\nThe **Hawk** logo was created by [Chris Carrasco](http://chriscarrasco.com).\r\n",
+ "readme": "![hawk Logo](https://raw.github.com/hueniverse/hawk/master/images/hawk.png)\n\n<img align=\"right\" src=\"https://raw.github.com/hueniverse/hawk/master/images/logo.png\" /> **Hawk** is an HTTP authentication scheme using a message authentication code (MAC) algorithm to provide partial\nHTTP request cryptographic verification. For more complex use cases such as access delegation, see [Oz](https://github.com/hueniverse/oz).\n\nCurrent version: **1.0**\n\n[![Build Status](https://secure.travis-ci.org/hueniverse/hawk.png)](http://travis-ci.org/hueniverse/hawk)\n\n# Table of Content\n\n- [**Introduction**](#introduction)\n - [Replay Protection](#replay-protection)\n - [Usage Example](#usage-example)\n - [Protocol Example](#protocol-example)\n - [Payload Validation](#payload-validation)\n - [Response Payload Validation](#response-payload-validation)\n - [Browser Support and Considerations](#browser-support-and-considerations)\n<p></p>\n- [**Single URI Authorization**](#single-uri-authorization)\n - [Usage Example](#bewit-usage-example)\n<p></p>\n- [**Security Considerations**](#security-considerations)\n - [MAC Keys Transmission](#mac-keys-transmission)\n - [Confidentiality of Requests](#confidentiality-of-requests)\n - [Spoofing by Counterfeit Servers](#spoofing-by-counterfeit-servers)\n - [Plaintext Storage of Credentials](#plaintext-storage-of-credentials)\n - [Entropy of Keys](#entropy-of-keys)\n - [Coverage Limitations](#coverage-limitations)\n - [Future Time Manipulation](#future-time-manipulation)\n - [Client Clock Poisoning](#client-clock-poisoning)\n - [Bewit Limitations](#bewit-limitations)\n - [Host Header Forgery](#host-header-forgery)\n<p></p>\n- [**Frequently Asked Questions**](#frequently-asked-questions)\n<p></p>\n- [**Acknowledgements**](#acknowledgements)\n\n# Introduction\n\n**Hawk** is an HTTP authentication scheme providing mechanisms for making authenticated HTTP requests with\npartial cryptographic verification of the request and response, covering the HTTP method, request URI, host,\nand optionally the request payload.\n\nSimilar to the HTTP [Digest access authentication schemes](http://www.ietf.org/rfc/rfc2617.txt), **Hawk** uses a set of\nclient credentials which include an identifier (e.g. username) and key (e.g. password). Likewise, just as with the Digest scheme,\nthe key is never included in authenticated requests. Instead, it is used to calculate a request MAC value which is\nincluded in its place.\n\nHowever, **Hawk** has several differences from Digest. In particular, while both use a nonce to limit the possibility of\nreplay attacks, in **Hawk** the client generates the nonce and uses it in combination with a timestamp, leading to less\n\"chattiness\" (interaction with the server).\n\nAlso unlike Digest, this scheme is not intended to protect the key itself (the password in Digest) because\nthe client and server must both have access to the key material in the clear.\n\nThe primary design goals of this scheme are to:\n* simplify and improve HTTP authentication for services that are unwilling or unable to deploy TLS for all resources,\n* secure credentials against leakage (e.g., when the client uses some form of dynamic configuration to determine where\n to send an authenticated request), and\n* avoid the exposure of credentials sent to a malicious server over an unauthenticated secure channel due to client\n failure to validate the server's identity as part of its TLS handshake.\n\nIn addition, **Hawk** supports a method for granting third-parties temporary access to individual resources using\na query parameter called _bewit_ (in falconry, a leather strap used to attach a tracking device to the leg of a hawk).\n\nThe **Hawk** scheme requires the establishment of a shared symmetric key between the client and the server,\nwhich is beyond the scope of this module. Typically, the shared credentials are established via an initial\nTLS-protected phase or derived from some other shared confidential information available to both the client\nand the server.\n\n\n## Replay Protection\n\nWithout replay protection, an attacker can use a compromised (but otherwise valid and authenticated) request more \nthan once, gaining access to a protected resource. To mitigate this, clients include both a nonce and a timestamp when \nmaking requests. This gives the server enough information to prevent replay attacks.\n\nThe nonce is generated by the client, and is a string unique across all requests with the same timestamp and\nkey identifier combination. \n\nThe timestamp enables the server to restrict the validity period of the credentials where requests occuring afterwards\nare rejected. It also removes the need for the server to retain an unbounded number of nonce values for future checks.\nBy default, **Hawk** uses a time window of 1 minute to allow for time skew between the client and server (which in\npractice translates to a maximum of 2 minutes as the skew can be positive or negative).\n\nUsing a timestamp requires the client's clock to be in sync with the server's clock. **Hawk** requires both the client\nclock and the server clock to use NTP to ensure synchronization. However, given the limitations of some client types\n(e.g. browsers) to deploy NTP, the server provides the client with its current time (in seconds precision) in response\nto a bad timestamp.\n\nThere is no expectation that the client will adjust its system clock to match the server (in fact, this would be a\npotential attack vector). Instead, the client only uses the server's time to calculate an offset used only\nfor communications with that particular server. The protocol rewards clients with synchronized clocks by reducing\nthe number of round trips required to authenticate the first request.\n\n\n## Usage Example\n\nServer code:\n\n```javascript\nvar Http = require('http');\nvar Hawk = require('hawk');\n\n\n// Credentials lookup function\n\nvar credentialsFunc = function (id, callback) {\n\n var credentials = {\n key: 'werxhqb98rpaxn39848xrunpaw3489ruxnpa98w4rxn',\n algorithm: 'sha256',\n user: 'Steve'\n };\n\n return callback(null, credentials);\n};\n\n// Create HTTP server\n\nvar handler = function (req, res) {\n\n // Authenticate incoming request\n\n Hawk.server.authenticate(req, credentialsFunc, {}, function (err, credentials, artifacts) {\n\n // Prepare response\n\n var payload = (!err ? 'Hello ' + credentials.user + ' ' + artifacts.ext : 'Shoosh!');\n var headers = { 'Content-Type': 'text/plain' };\n\n // Generate Server-Authorization response header\n\n var header = Hawk.server.header(credentials, artifacts, { payload: payload, contentType: headers['Content-Type'] });\n headers['Server-Authorization'] = header;\n\n // Send the response back\n\n res.writeHead(!err ? 200 : 401, headers);\n res.end(payload);\n });\n};\n\n// Start server\n\nHttp.createServer(handler).listen(8000, 'example.com');\n```\n\nClient code:\n\n```javascript\nvar Request = require('request');\nvar Hawk = require('hawk');\n\n\n// Client credentials\n\nvar credentials = {\n id: 'dh37fgj492je',\n key: 'werxhqb98rpaxn39848xrunpaw3489ruxnpa98w4rxn',\n algorithm: 'sha256'\n}\n\n// Request options\n\nvar requestOptions = {\n uri: 'http://example.com:8000/resource/1?b=1&a=2',\n method: 'GET',\n headers: {}\n};\n\n// Generate Authorization request header\n\nvar header = Hawk.client.header('http://example.com:8000/resource/1?b=1&a=2', 'GET', { credentials: credentials, ext: 'some-app-data' });\nrequestOptions.headers.Authorization = header.field;\n\n// Send authenticated request\n\nRequest(requestOptions, function (error, response, body) {\n\n // Authenticate the server's response\n\n var isValid = Hawk.client.authenticate(response, credentials, header.artifacts, { payload: body });\n\n // Output results\n\n console.log(response.statusCode + ': ' + body + (isValid ? ' (valid)' : ' (invalid)'));\n});\n```\n\n**Hawk** utilized the [**SNTP**](https://github.com/hueniverse/sntp) module for time sync management. By default, the local\nmachine time is used. To automatically retrieve and synchronice the clock within the application, use the SNTP 'start()' method.\n\n```javascript\nHawk.sntp.start();\n```\n\n\n## Protocol Example\n\nThe client attempts to access a protected resource without authentication, sending the following HTTP request to\nthe resource server:\n\n```\nGET /resource/1?b=1&a=2 HTTP/1.1\nHost: example.com:8000\n```\n\nThe resource server returns an authentication challenge.\n\n```\nHTTP/1.1 401 Unauthorized\nWWW-Authenticate: Hawk\n```\n\nThe client has previously obtained a set of **Hawk** credentials for accessing resources on the \"http://example.com/\"\nserver. The **Hawk** credentials issued to the client include the following attributes:\n\n* Key identifier: dh37fgj492je\n* Key: werxhqb98rpaxn39848xrunpaw3489ruxnpa98w4rxn\n* Algorithm: sha256\n\nThe client generates the authentication header by calculating a timestamp (e.g. the number of seconds since January 1,\n1970 00:00:00 GMT), generating a nonce, and constructing the normalized request string (each value followed by a newline\ncharacter):\n\n```\nhawk.1.header\n1353832234\nj4h3g2\nGET\n/resource/1?b=1&a=2\nexample.com\n8000\n\nsome-app-ext-data\n\n```\n\nThe request MAC is calculated using HMAC with the specified hash algorithm \"sha256\" and the key over the normalized request string.\nThe result is base64-encoded to produce the request MAC:\n\n```\n6R4rV5iE+NPoym+WwjeHzjAGXUtLNIxmo1vpMofpLAE=\n```\n\nThe client includes the **Hawk** key identifier, timestamp, nonce, application specific data, and request MAC with the request using\nthe HTTP `Authorization` request header field:\n\n```\nGET /resource/1?b=1&a=2 HTTP/1.1\nHost: example.com:8000\nAuthorization: Hawk id=\"dh37fgj492je\", ts=\"1353832234\", nonce=\"j4h3g2\", ext=\"some-app-ext-data\", mac=\"6R4rV5iE+NPoym+WwjeHzjAGXUtLNIxmo1vpMofpLAE=\"\n```\n\nThe server validates the request by calculating the request MAC again based on the request received and verifies the validity\nand scope of the **Hawk** credentials. If valid, the server responds with the requested resource.\n\n\n### Payload Validation\n\n**Hawk** provides optional payload validation. When generating the authentication header, the client calculates a payload hash\nusing the specified hash algorithm. The hash is calculated over the concatenated value of (each followed by a newline character):\n* `hawk.1.payload`\n* the content-type in lowercase, without any parameters (e.g. `application/json`)\n* the request payload prior to any content encoding (the exact representation requirements should be specified by the server for payloads other than simple single-part ascii to ensure interoperability)\n\nFor example:\n\n* Payload: `Thank you for flying Hawk`\n* Content Type: `text/plain`\n* Hash (sha256): `Yi9LfIIFRtBEPt74PVmbTF/xVAwPn7ub15ePICfgnuY=`\n\nResults in the following input to the payload hash function (newline terminated values):\n\n```\nhawk.1.payload\ntext/plain\nThank you for flying Hawk\n\n```\n\nWhich produces the following hash value:\n\n```\nYi9LfIIFRtBEPt74PVmbTF/xVAwPn7ub15ePICfgnuY=\n```\n\nThe client constructs the normalized request string (newline terminated values):\n\n```\nhawk.1.header\n1353832234\nj4h3g2\nPOST\n/resource/1?a=1&b=2\nexample.com\n8000\nYi9LfIIFRtBEPt74PVmbTF/xVAwPn7ub15ePICfgnuY=\nsome-app-ext-data\n\n```\n\nThen calculates the request MAC and includes the **Hawk** key identifier, timestamp, nonce, payload hash, application specific data,\nand request MAC, with the request using the HTTP `Authorization` request header field:\n\n```\nPOST /resource/1?a=1&b=2 HTTP/1.1\nHost: example.com:8000\nAuthorization: Hawk id=\"dh37fgj492je\", ts=\"1353832234\", nonce=\"j4h3g2\", hash=\"Yi9LfIIFRtBEPt74PVmbTF/xVAwPn7ub15ePICfgnuY=\", ext=\"some-app-ext-data\", mac=\"aSe1DERmZuRl3pI36/9BdZmnErTw3sNzOOAUlfeKjVw=\"\n```\n\nIt is up to the server if and when it validates the payload for any given request, based solely on it's security policy\nand the nature of the data included.\n\nIf the payload is available at the time of authentication, the server uses the hash value provided by the client to construct\nthe normalized string and validates the MAC. If the MAC is valid, the server calculates the payload hash and compares the value\nwith the provided payload hash in the header. In many cases, checking the MAC first is faster than calculating the payload hash.\n\nHowever, if the payload is not available at authentication time (e.g. too large to fit in memory, streamed elsewhere, or processed\nat a different stage in the application), the server may choose to defer payload validation for later by retaining the hash value\nprovided by the client after validating the MAC.\n\nIt is important to note that MAC validation does not mean the hash value provided by the client is valid, only that the value\nincluded in the header was not modified. Without calculating the payload hash on the server and comparing it to the value provided\nby the client, the payload may be modified by an attacker.\n\n\n## Response Payload Validation\n\n**Hawk** provides partial response payload validation. The server includes the `Server-Authorization` response header which enables the\nclient to authenticate the response and ensure it is talking to the right server. **Hawk** defines the HTTP `Server-Authorization` header\nas a response header using the exact same syntax as the `Authorization` request header field.\n\nThe header is contructed using the same process as the client's request header. The server uses the same credentials and other\nartifacts provided by the client to constructs the normalized request string. The `ext` and `hash` values are replaced with\nnew values based on the server response. The rest as identical to those used by the client.\n\nThe result MAC digest is included with the optional `hash` and `ext` values:\n\n```\nServer-Authorization: Hawk mac=\"XIJRsMl/4oL+nn+vKoeVZPdCHXB4yJkNnBbTbHFZUYE=\", hash=\"f9cDF/TDm7TkYRLnGwRMfeDzT6LixQVLvrIKhh0vgmM=\", ext=\"response-specific\"\n```\n\n\n## Browser Support and Considerations\n\nA browser script is provided for including using a `<script>` tag in [lib/browser.js](/lib/browser.js).\n\n**Hawk** relies on the _Server-Authorization_ and _WWW-Authenticate_ headers in its response to communicate with the client.\nTherefore, in case of CORS requests, it is important to consider sending _Access-Control-Expose-Headers_ with the value\n_\"WWW-Authenticate, Server-Authorization\"_ on each response from your server. As explained in the\n[specifications](http://www.w3.org/TR/cors/#access-control-expose-headers-response-header), it will indicate that these headers\ncan safely be accessed by the client (using getResponseHeader() on the XmlHttpRequest object). Otherwise you will be met with a\n[\"simple response header\"](http://www.w3.org/TR/cors/#simple-response-header) which excludes these fields and would prevent the\nHawk client from authenticating the requests.You can read more about the why and how in this\n[article](http://www.html5rocks.com/en/tutorials/cors/#toc-adding-cors-support-to-the-server)\n\n\n# Single URI Authorization\n\nThere are cases in which limited and short-term access to a protected resource is granted to a third party which does not\nhave access to the shared credentials. For example, displaying a protected image on a web page accessed by anyone. **Hawk**\nprovides limited support for such URIs in the form of a _bewit_ - a URI query parameter appended to the request URI which contains\nthe necessary credentials to authenticate the request.\n\nBecause of the significant security risks involved in issuing such access, bewit usage is purposely limited only to GET requests\nand for a finite period of time. Both the client and server can issue bewit credentials, however, the server should not use the same\ncredentials as the client to maintain clear traceability as to who issued which credentials.\n\nIn order to simplify implementation, bewit credentials do not support single-use policy and can be replayed multiple times within\nthe granted access timeframe. \n\n\n## Bewit Usage Example\n\nServer code:\n\n```javascript\nvar Http = require('http');\nvar Hawk = require('hawk');\n\n\n// Credentials lookup function\n\nvar credentialsFunc = function (id, callback) {\n\n var credentials = {\n key: 'werxhqb98rpaxn39848xrunpaw3489ruxnpa98w4rxn',\n algorithm: 'sha256'\n };\n\n return callback(null, credentials);\n};\n\n// Create HTTP server\n\nvar handler = function (req, res) {\n\n Hawk.uri.authenticate(req, credentialsFunc, {}, function (err, credentials, attributes) {\n\n res.writeHead(!err ? 200 : 401, { 'Content-Type': 'text/plain' });\n res.end(!err ? 'Access granted' : 'Shoosh!');\n });\n};\n\nHttp.createServer(handler).listen(8000, 'example.com');\n```\n\nBewit code generation:\n\n```javascript\nvar Request = require('request');\nvar Hawk = require('hawk');\n\n\n// Client credentials\n\nvar credentials = {\n id: 'dh37fgj492je',\n key: 'werxhqb98rpaxn39848xrunpaw3489ruxnpa98w4rxn',\n algorithm: 'sha256'\n}\n\n// Generate bewit\n\nvar duration = 60 * 5; // 5 Minutes\nvar bewit = Hawk.uri.getBewit('http://example.com:8080/resource/1?b=1&a=2', { credentials: credentials, ttlSec: duration, ext: 'some-app-data' });\nvar uri = 'http://example.com:8000/resource/1?b=1&a=2' + '&bewit=' + bewit;\n```\n\n\n# Security Considerations\n\nThe greatest sources of security risks are usually found not in **Hawk** but in the policies and procedures surrounding its use.\nImplementers are strongly encouraged to assess how this module addresses their security requirements. This section includes\nan incomplete list of security considerations that must be reviewed and understood before deploying **Hawk** on the server.\nMany of the protections provided in **Hawk** depends on whether and how they are used.\n\n### MAC Keys Transmission\n\n**Hawk** does not provide any mechanism for obtaining or transmitting the set of shared credentials required. Any mechanism used\nto obtain **Hawk** credentials must ensure that these transmissions are protected using transport-layer mechanisms such as TLS.\n\n### Confidentiality of Requests\n\nWhile **Hawk** provides a mechanism for verifying the integrity of HTTP requests, it provides no guarantee of request\nconfidentiality. Unless other precautions are taken, eavesdroppers will have full access to the request content. Servers should\ncarefully consider the types of data likely to be sent as part of such requests, and employ transport-layer security mechanisms\nto protect sensitive resources.\n\n### Spoofing by Counterfeit Servers\n\n**Hawk** provides limited verification of the server authenticity. When receiving a response back from the server, the server\nmay choose to include a response `Server-Authorization` header which the client can use to verify the response. However, it is up to\nthe server to determine when such measure is included, to up to the client to enforce that policy.\n\nA hostile party could take advantage of this by intercepting the client's requests and returning misleading or otherwise\nincorrect responses. Service providers should consider such attacks when developing services using this protocol, and should\nrequire transport-layer security for any requests where the authenticity of the resource server or of server responses is an issue.\n\n### Plaintext Storage of Credentials\n\nThe **Hawk** key functions the same way passwords do in traditional authentication systems. In order to compute the request MAC,\nthe server must have access to the key in plaintext form. This is in contrast, for example, to modern operating systems, which\nstore only a one-way hash of user credentials.\n\nIf an attacker were to gain access to these keys - or worse, to the server's database of all such keys - he or she would be able\nto perform any action on behalf of any resource owner. Accordingly, it is critical that servers protect these keys from unauthorized\naccess.\n\n### Entropy of Keys\n\nUnless a transport-layer security protocol is used, eavesdroppers will have full access to authenticated requests and request\nMAC values, and will thus be able to mount offline brute-force attacks to recover the key used. Servers should be careful to\nassign keys which are long enough, and random enough, to resist such attacks for at least the length of time that the **Hawk**\ncredentials are valid.\n\nFor example, if the credentials are valid for two weeks, servers should ensure that it is not possible to mount a brute force\nattack that recovers the key in less than two weeks. Of course, servers are urged to err on the side of caution, and use the\nlongest key reasonable.\n\nIt is equally important that the pseudo-random number generator (PRNG) used to generate these keys be of sufficiently high\nquality. Many PRNG implementations generate number sequences that may appear to be random, but which nevertheless exhibit\npatterns or other weaknesses which make cryptanalysis or brute force attacks easier. Implementers should be careful to use\ncryptographically secure PRNGs to avoid these problems.\n\n### Coverage Limitations\n\nThe request MAC only covers the HTTP `Host` header and optionally the `Content-Type` header. It does not cover any other headers\nwhich can often affect how the request body is interpreted by the server. If the server behavior is influenced by the presence\nor value of such headers, an attacker can manipulate the request headers without being detected. Implementers should use the\n`ext` feature to pass application-specific information via the `Authorization` header which is protected by the request MAC.\n\nThe response authentication, when performed, only covers the response payload, content-type, and the request information \nprovided by the client in it's request (method, resource, timestamp, nonce, etc.). It does not cover the HTTP status code or\nany other response header field (e.g. Location) which can affect the client's behaviour.\n\n### Future Time Manipulation\n\nThe protocol relies on a clock sync between the client and server. To accomplish this, the server informs the client of its\ncurrent time when an invalid timestamp is received.\n\nIf an attacker is able to manipulate this information and cause the client to use an incorrect time, it would be able to cause\nthe client to generate authenticated requests using time in the future. Such requests will fail when sent by the client, and will\nnot likely leave a trace on the server (given the common implementation of nonce, if at all enforced). The attacker will then\nbe able to replay the request at the correct time without detection.\n\nThe client must only use the time information provided by the server if:\n* it was delivered over a TLS connection and the server identity has been verified, or\n* the `tsm` MAC digest calculated using the same client credentials over the timestamp has been verified.\n\n### Client Clock Poisoning\n\nWhen receiving a request with a bad timestamp, the server provides the client with its current time. The client must never use\nthe time received from the server to adjust its own clock, and must only use it to calculate an offset for communicating with\nthat particular server.\n\n### Bewit Limitations\n\nSpecial care must be taken when issuing bewit credentials to third parties. Bewit credentials are valid until expiration and cannot\nbe revoked or limited without using other means. Whatever resource they grant access to will be completely exposed to anyone with\naccess to the bewit credentials which act as bearer credentials for that particular resource. While bewit usage is limited to GET\nrequests only and therefore cannot be used to perform transactions or change server state, it can still be used to expose private\nand sensitive information.\n\n### Host Header Forgery\n\nHawk validates the incoming request MAC against the incoming HTTP Host header. However, unless the optional `host` and `port`\noptions are used with `server.authenticate()`, a malicous client can mint new host names pointing to the server's IP address and\nuse that to craft an attack by sending a valid request that's meant for another hostname than the one used by the server. Server\nimplementors must manually verify that the host header received matches their expectation (or use the options mentioned above).\n\n# Frequently Asked Questions\n\n### Where is the protocol specification?\n\nIf you are looking for some prose explaining how all this works, **this is it**. **Hawk** is being developed as an open source\nproject instead of a standard. In other words, the [code](/hueniverse/hawk/tree/master/lib) is the specification. Not sure about\nsomething? Open an issue!\n\n### Is it done?\n\nAt if version 0.10.0, **Hawk** is feature-complete. However, until this module reaches version 1.0.0 it is considered experimental\nand is likely to change. This also means your feedback and contribution are very welcome. Feel free to open issues with questions\nand suggestions.\n\n### Where can I find **Hawk** implementations in other languages?\n\n**Hawk**'s only reference implementation is provided in JavaScript as a node.js module. However, others are actively porting it to other\nplatforms. There is already a [PHP](https://github.com/alexbilbie/PHP-Hawk),\n[.NET](https://github.com/pcibraro/hawknet), and [JAVA](https://github.com/wealdtech/hawk) libraries available. The full list\nis maintained [here](https://github.com/hueniverse/hawk/issues?labels=port). Please add an issue if you are working on another\nport. A cross-platform test-suite is in the works.\n\n### Why isn't the algorithm part of the challenge or dynamically negotiated?\n\nThe algorithm used is closely related to the key issued as different algorithms require different key sizes (and other\nrequirements). While some keys can be used for multiple algorithm, the protocol is designed to closely bind the key and algorithm\ntogether as part of the issued credentials.\n\n### Why is Host and Content-Type the only headers covered by the request MAC?\n\nIt is really hard to include other headers. Headers can be changed by proxies and other intermediaries and there is no\nwell-established way to normalize them. Many platforms change the case of header field names and values. The only\nstraight-forward solution is to include the headers in some blob (say, base64 encoded JSON) and include that with the request,\nan approach taken by JWT and other such formats. However, that design violates the HTTP header boundaries, repeats information,\nand introduces other security issues because firewalls will not be aware of these \"hidden\" headers. In addition, any information\nrepeated must be compared to the duplicated information in the header and therefore only moves the problem elsewhere.\n\n### Why not just use HTTP Digest?\n\nDigest requires pre-negotiation to establish a nonce. This means you can't just make a request - you must first send\na protocol handshake to the server. This pattern has become unacceptable for most web services, especially mobile\nwhere extra round-trip are costly.\n\n### Why bother with all this nonce and timestamp business?\n\n**Hawk** is an attempt to find a reasonable, practical compromise between security and usability. OAuth 1.0 got timestamp\nand nonces halfway right but failed when it came to scalability and consistent developer experience. **Hawk** addresses\nit by requiring the client to sync its clock, but provides it with tools to accomplish it.\n\nIn general, replay protection is a matter of application-specific threat model. It is less of an issue on a TLS-protected\nsystem where the clients are implemented using best practices and are under the control of the server. Instead of dropping\nreplay protection, **Hawk** offers a required time window and an optional nonce verification. Together, it provides developers\nwith the ability to decide how to enforce their security policy without impacting the client's implementation.\n\n### What are `app` and `dlg` in the authorization header and normalized mac string?\n\nThe original motivation for **Hawk** was to replace the OAuth 1.0 use cases. This included both a simple client-server mode which\nthis module is specifically designed for, and a delegated access mode which is being developed separately in\n[Oz](https://github.com/hueniverse/oz). In addition to the **Hawk** use cases, Oz requires another attribute: the application id `app`.\nThis provides binding between the credentials and the application in a way that prevents an attacker from tricking an application\nto use credentials issued to someone else. It also has an optional 'delegated-by' attribute `dlg` which is the application id of the\napplication the credentials were directly issued to. The goal of these two additions is to allow Oz to utilize **Hawk** directly,\nbut with the additional security of delegated credentials.\n\n### What is the purpose of the static strings used in each normalized MAC input?\n\nWhen calculating a hash or MAC, a static prefix (tag) is added. The prefix is used to prevent MAC values from being\nused or reused for a purpose other than what they were created for (i.e. prevents switching MAC values between a request,\nresponse, and a bewit use cases). It also protects against expliots created after a potential change in how the protocol\ncreates the normalized string. For example, if a future version would switch the order of nonce and timestamp, it\ncan create an exploit opportunity for cases where the nonce is similar in format to a timestamp.\n\n### Does **Hawk** have anything to do with OAuth?\n\nShort answer: no.\n\n**Hawk** was originally proposed as the OAuth MAC Token specification. However, the OAuth working group in its consistent\nincompetence failed to produce a final, usable solution to address one of the most popular use cases of OAuth 1.0 - using it\nto authenticate simple client-server transactions (i.e. two-legged). As you can guess, the OAuth working group is still hard\nat work to produce more garbage.\n\n**Hawk** provides a simple HTTP authentication scheme for making client-server requests. It does not address the OAuth use case\nof delegating access to a third party. If you are looking for an OAuth alternative, check out [Oz](https://github.com/hueniverse/oz).\n\n\n# Acknowledgements\n\n**Hawk** is a derivative work of the [HTTP MAC Authentication Scheme](http://tools.ietf.org/html/draft-hammer-oauth-v2-mac-token-05) proposal\nco-authored by Ben Adida, Adam Barth, and Eran Hammer, which in turn was based on the OAuth 1.0 community specification.\n\nSpecial thanks to Ben Laurie for his always insightful feedback and advice.\n\nThe **Hawk** logo was created by [Chris Carrasco](http://chriscarrasco.com).\n",
"readmeFilename": "README.md",
"bugs": {
"url": "https://github.com/hueniverse/hawk/issues"
},
- "_id": "hawk@0.13.1",
- "_from": "hawk@~0.13.0"
+ "homepage": "https://github.com/hueniverse/hawk",
+ "_id": "hawk@1.0.0",
+ "_from": "hawk@~1.0.0"
}
diff --git a/deps/npm/node_modules/request/node_modules/hawk/test/browser.js b/deps/npm/node_modules/request/node_modules/hawk/test/browser.js
index 33e020386..b25a10fd9 100755
--- a/deps/npm/node_modules/request/node_modules/hawk/test/browser.js
+++ b/deps/npm/node_modules/request/node_modules/hawk/test/browser.js
@@ -1,723 +1,771 @@
-// Load modules
-
-var Lab = require('lab');
-var Hawk = require('../lib');
-var Browser = require('../lib/browser');
-var LocalStorage = require('localStorage');
-
-
-// Declare internals
-
-var internals = {};
-
-
-// Test shortcuts
-
-var expect = Lab.expect;
-var before = Lab.before;
-var after = Lab.after;
-var describe = Lab.experiment;
-var it = Lab.test;
-
-
-describe('Browser', function () {
-
- var credentialsFunc = function (id, callback) {
-
- var credentials = {
- id: id,
- key: 'werxhqb98rpaxn39848xrunpaw3489ruxnpa98w4rxn',
- algorithm: (id === '1' ? 'sha1' : 'sha256'),
- user: 'steve'
- };
-
- return callback(null, credentials);
- };
-
- it('should generate a header then successfully parse it (configuration)', function (done) {
-
- var req = {
- method: 'GET',
- url: '/resource/4?filter=a',
- host: 'example.com',
- port: 8080
- };
-
- credentialsFunc('123456', function (err, credentials) {
-
- req.authorization = Browser.client.header('http://example.com:8080/resource/4?filter=a', req.method, { credentials: credentials, ext: 'some-app-data' }).field;
- expect(req.authorization).to.exist;
-
- Hawk.server.authenticate(req, credentialsFunc, {}, function (err, credentials, artifacts) {
-
- expect(err).to.not.exist;
- expect(credentials.user).to.equal('steve');
- expect(artifacts.ext).to.equal('some-app-data');
- done();
- });
- });
- });
-
- it('should generate a header then successfully parse it (node request)', function (done) {
-
- var req = {
- method: 'POST',
- url: '/resource/4?filter=a',
- headers: {
- host: 'example.com:8080',
- 'content-type': 'text/plain;x=y'
- }
- };
-
- var payload = 'some not so random text';
-
- credentialsFunc('123456', function (err, credentials) {
-
- var reqHeader = Browser.client.header('http://example.com:8080/resource/4?filter=a', req.method, { credentials: credentials, ext: 'some-app-data', payload: payload, contentType: req.headers['content-type'] });
- req.headers.authorization = reqHeader.field;
-
- Hawk.server.authenticate(req, credentialsFunc, {}, function (err, credentials, artifacts) {
-
- expect(err).to.not.exist;
- expect(credentials.user).to.equal('steve');
- expect(artifacts.ext).to.equal('some-app-data');
- expect(Hawk.server.authenticatePayload(payload, credentials, artifacts, req.headers['content-type'])).to.equal(true);
-
- var res = {
- headers: {
- 'content-type': 'text/plain'
- },
- getResponseHeader: function (header) {
-
- return res.headers[header.toLowerCase()];
- }
- };
-
- res.headers['server-authorization'] = Hawk.server.header(credentials, artifacts, { payload: 'some reply', contentType: 'text/plain', ext: 'response-specific' });
- expect(res.headers['server-authorization']).to.exist;
-
- expect(Browser.client.authenticate(res, credentials, artifacts, { payload: 'some reply' })).to.equal(true);
- done();
- });
- });
- });
-
- it('should generate a header then successfully parse it (no server header options)', function (done) {
-
- var req = {
- method: 'POST',
- url: '/resource/4?filter=a',
- headers: {
- host: 'example.com:8080',
- 'content-type': 'text/plain;x=y'
- }
- };
-
- var payload = 'some not so random text';
-
- credentialsFunc('123456', function (err, credentials) {
-
- var reqHeader = Browser.client.header('http://example.com:8080/resource/4?filter=a', req.method, { credentials: credentials, ext: 'some-app-data', payload: payload, contentType: req.headers['content-type'] });
- req.headers.authorization = reqHeader.field;
-
- Hawk.server.authenticate(req, credentialsFunc, {}, function (err, credentials, artifacts) {
-
- expect(err).to.not.exist;
- expect(credentials.user).to.equal('steve');
- expect(artifacts.ext).to.equal('some-app-data');
- expect(Hawk.server.authenticatePayload(payload, credentials, artifacts, req.headers['content-type'])).to.equal(true);
-
- var res = {
- headers: {
- 'content-type': 'text/plain'
- },
- getResponseHeader: function (header) {
-
- return res.headers[header.toLowerCase()];
- }
- };
-
- res.headers['server-authorization'] = Hawk.server.header(credentials, artifacts);
- expect(res.headers['server-authorization']).to.exist;
-
- expect(Browser.client.authenticate(res, credentials, artifacts)).to.equal(true);
- done();
- });
- });
- });
-
- it('should generate a header then successfully parse it (no server header)', function (done) {
-
- var req = {
- method: 'POST',
- url: '/resource/4?filter=a',
- headers: {
- host: 'example.com:8080',
- 'content-type': 'text/plain;x=y'
- }
- };
-
- var payload = 'some not so random text';
-
- credentialsFunc('123456', function (err, credentials) {
-
- var reqHeader = Browser.client.header('http://example.com:8080/resource/4?filter=a', req.method, { credentials: credentials, ext: 'some-app-data', payload: payload, contentType: req.headers['content-type'] });
- req.headers.authorization = reqHeader.field;
-
- Hawk.server.authenticate(req, credentialsFunc, {}, function (err, credentials, artifacts) {
-
- expect(err).to.not.exist;
- expect(credentials.user).to.equal('steve');
- expect(artifacts.ext).to.equal('some-app-data');
- expect(Hawk.server.authenticatePayload(payload, credentials, artifacts, req.headers['content-type'])).to.equal(true);
-
- var res = {
- headers: {
- 'content-type': 'text/plain'
- },
- getResponseHeader: function (header) {
-
- return res.headers[header.toLowerCase()];
- }
- };
-
- expect(Browser.client.authenticate(res, credentials, artifacts)).to.equal(true);
- done();
- });
- });
- });
-
- it('should generate a header with stale ts and successfully authenticate on second call', function (done) {
-
- var req = {
- method: 'GET',
- url: '/resource/4?filter=a',
- host: 'example.com',
- port: 8080
- };
-
- credentialsFunc('123456', function (err, credentials) {
-
- Browser.utils.setNtpOffset(60 * 60 * 1000);
- var header = Browser.client.header('http://example.com:8080/resource/4?filter=a', req.method, { credentials: credentials, ext: 'some-app-data' });
- req.authorization = header.field;
- expect(req.authorization).to.exist;
-
- Hawk.server.authenticate(req, credentialsFunc, {}, function (err, credentials, artifacts) {
-
- expect(err).to.exist;
- expect(err.message).to.equal('Stale timestamp');
-
- var res = {
- headers: {
- 'www-authenticate': err.response.headers['WWW-Authenticate']
- },
- getResponseHeader: function (header) {
-
- return res.headers[header.toLowerCase()];
- }
- };
-
- expect(Browser.utils.getNtpOffset()).to.equal(60 * 60 * 1000);
- expect(Browser.client.authenticate(res, credentials, header.artifacts)).to.equal(true);
- expect(Browser.utils.getNtpOffset()).to.equal(0);
-
- req.authorization = Browser.client.header('http://example.com:8080/resource/4?filter=a', req.method, { credentials: credentials, ext: 'some-app-data' }).field;
- expect(req.authorization).to.exist;
-
- Hawk.server.authenticate(req, credentialsFunc, {}, function (err, credentials, artifacts) {
-
- expect(err).to.not.exist;
- expect(credentials.user).to.equal('steve');
- expect(artifacts.ext).to.equal('some-app-data');
- done();
- });
- });
- });
- });
-
- it('should generate a header with stale ts and successfully authenticate on second call (manual localStorage)', function (done) {
-
- var req = {
- method: 'GET',
- url: '/resource/4?filter=a',
- host: 'example.com',
- port: 8080
- };
-
- credentialsFunc('123456', function (err, credentials) {
- Browser.utils.setStorage(LocalStorage)
-
- Browser.utils.setNtpOffset(60 * 60 * 1000);
- var header = Browser.client.header('http://example.com:8080/resource/4?filter=a', req.method, { credentials: credentials, ext: 'some-app-data' });
- req.authorization = header.field;
- expect(req.authorization).to.exist;
-
- Hawk.server.authenticate(req, credentialsFunc, {}, function (err, credentials, artifacts) {
-
- expect(err).to.exist;
- expect(err.message).to.equal('Stale timestamp');
-
- var res = {
- headers: {
- 'www-authenticate': err.response.headers['WWW-Authenticate']
- },
- getResponseHeader: function (header) {
-
- return res.headers[header.toLowerCase()];
- }
- };
-
- expect(parseInt(LocalStorage.getItem('hawk_ntp_offset'))).to.equal(60 * 60 * 1000);
- expect(Browser.utils.getNtpOffset()).to.equal(60 * 60 * 1000);
- expect(Browser.client.authenticate(res, credentials, header.artifacts)).to.equal(true);
- expect(Browser.utils.getNtpOffset()).to.equal(0);
- expect(parseInt(LocalStorage.getItem('hawk_ntp_offset'))).to.equal(0);
-
- req.authorization = Browser.client.header('http://example.com:8080/resource/4?filter=a', req.method, { credentials: credentials, ext: 'some-app-data' }).field;
- expect(req.authorization).to.exist;
-
- Hawk.server.authenticate(req, credentialsFunc, {}, function (err, credentials, artifacts) {
-
- expect(err).to.not.exist;
- expect(credentials.user).to.equal('steve');
- expect(artifacts.ext).to.equal('some-app-data');
- done();
- });
- });
- });
- });
-
- it('should generate a header then fails to parse it (missing server header hash)', function (done) {
-
- var req = {
- method: 'POST',
- url: '/resource/4?filter=a',
- headers: {
- host: 'example.com:8080',
- 'content-type': 'text/plain;x=y'
- }
- };
-
- var payload = 'some not so random text';
-
- credentialsFunc('123456', function (err, credentials) {
-
- var reqHeader = Browser.client.header('http://example.com:8080/resource/4?filter=a', req.method, { credentials: credentials, ext: 'some-app-data', payload: payload, contentType: req.headers['content-type'] });
- req.headers.authorization = reqHeader.field;
-
- Hawk.server.authenticate(req, credentialsFunc, {}, function (err, credentials, artifacts) {
-
- expect(err).to.not.exist;
- expect(credentials.user).to.equal('steve');
- expect(artifacts.ext).to.equal('some-app-data');
- expect(Hawk.server.authenticatePayload(payload, credentials, artifacts, req.headers['content-type'])).to.equal(true);
-
- var res = {
- headers: {
- 'content-type': 'text/plain'
- },
- getResponseHeader: function (header) {
-
- return res.headers[header.toLowerCase()];
- }
- };
-
- res.headers['server-authorization'] = Hawk.server.header(credentials, artifacts);
- expect(res.headers['server-authorization']).to.exist;
-
- expect(Browser.client.authenticate(res, credentials, artifacts, { payload: 'some reply' })).to.equal(false);
- done();
- });
- });
- });
-
- it('should generate a header then successfully parse it (with hash)', function (done) {
-
- var req = {
- method: 'GET',
- url: '/resource/4?filter=a',
- host: 'example.com',
- port: 8080
- };
-
- credentialsFunc('123456', function (err, credentials) {
-
- req.authorization = Browser.client.header('http://example.com:8080/resource/4?filter=a', req.method, { credentials: credentials, payload: 'hola!', ext: 'some-app-data' }).field;
- Hawk.server.authenticate(req, credentialsFunc, {}, function (err, credentials, artifacts) {
-
- expect(err).to.not.exist;
- expect(credentials.user).to.equal('steve');
- expect(artifacts.ext).to.equal('some-app-data');
- done();
- });
- });
- });
-
- it('should generate a header then successfully parse it then validate payload', function (done) {
-
- var req = {
- method: 'GET',
- url: '/resource/4?filter=a',
- host: 'example.com',
- port: 8080
- };
-
- credentialsFunc('123456', function (err, credentials) {
-
- req.authorization = Browser.client.header('http://example.com:8080/resource/4?filter=a', req.method, { credentials: credentials, payload: 'hola!', ext: 'some-app-data' }).field;
- Hawk.server.authenticate(req, credentialsFunc, {}, function (err, credentials, artifacts) {
-
- expect(err).to.not.exist;
- expect(credentials.user).to.equal('steve');
- expect(artifacts.ext).to.equal('some-app-data');
- expect(Hawk.server.authenticatePayload('hola!', credentials, artifacts)).to.be.true;
- expect(Hawk.server.authenticatePayload('hello!', credentials, artifacts)).to.be.false;
- done();
- });
- });
- });
-
- it('should generate a header then successfully parse it (app)', function (done) {
-
- var req = {
- method: 'GET',
- url: '/resource/4?filter=a',
- host: 'example.com',
- port: 8080
- };
-
- credentialsFunc('123456', function (err, credentials) {
-
- req.authorization = Browser.client.header('http://example.com:8080/resource/4?filter=a', req.method, { credentials: credentials, ext: 'some-app-data', app: 'asd23ased' }).field;
- Hawk.server.authenticate(req, credentialsFunc, {}, function (err, credentials, artifacts) {
-
- expect(err).to.not.exist;
- expect(credentials.user).to.equal('steve');
- expect(artifacts.ext).to.equal('some-app-data');
- expect(artifacts.app).to.equal('asd23ased');
- done();
- });
- });
- });
-
- it('should generate a header then successfully parse it (app, dlg)', function (done) {
-
- var req = {
- method: 'GET',
- url: '/resource/4?filter=a',
- host: 'example.com',
- port: 8080
- };
-
- credentialsFunc('123456', function (err, credentials) {
-
- req.authorization = Browser.client.header('http://example.com:8080/resource/4?filter=a', req.method, { credentials: credentials, ext: 'some-app-data', app: 'asd23ased', dlg: '23434szr3q4d' }).field;
- Hawk.server.authenticate(req, credentialsFunc, {}, function (err, credentials, artifacts) {
-
- expect(err).to.not.exist;
- expect(credentials.user).to.equal('steve');
- expect(artifacts.ext).to.equal('some-app-data');
- expect(artifacts.app).to.equal('asd23ased');
- expect(artifacts.dlg).to.equal('23434szr3q4d');
- done();
- });
- });
- });
-
- it('should generate a header then fail authentication due to bad hash', function (done) {
-
- var req = {
- method: 'GET',
- url: '/resource/4?filter=a',
- host: 'example.com',
- port: 8080
- };
-
- credentialsFunc('123456', function (err, credentials) {
-
- req.authorization = Browser.client.header('http://example.com:8080/resource/4?filter=a', req.method, { credentials: credentials, payload: 'hola!', ext: 'some-app-data' }).field;
- Hawk.server.authenticate(req, credentialsFunc, { payload: 'byebye!' }, function (err, credentials, artifacts) {
-
- expect(err).to.exist;
- expect(err.response.payload.message).to.equal('Bad payload hash');
- done();
- });
- });
- });
-
- it('should generate a header for one resource then fail to authenticate another', function (done) {
-
- var req = {
- method: 'GET',
- url: '/resource/4?filter=a',
- host: 'example.com',
- port: 8080
- };
-
- credentialsFunc('123456', function (err, credentials) {
-
- req.authorization = Browser.client.header('http://example.com:8080/resource/4?filter=a', req.method, { credentials: credentials, ext: 'some-app-data' }).field;
- req.url = '/something/else';
-
- Hawk.server.authenticate(req, credentialsFunc, {}, function (err, credentials, artifacts) {
-
- expect(err).to.exist;
- expect(credentials).to.exist;
- done();
- });
- });
- });
-
- describe('client', function () {
-
- describe('#header', function () {
-
- it('should return a valid authorization header (sha1)', function (done) {
-
- var credentials = {
- id: '123456',
- key: '2983d45yun89q',
- algorithm: 'sha1'
- };
-
- var header = Browser.client.header('http://example.net/somewhere/over/the/rainbow', 'POST', { credentials: credentials, ext: 'Bazinga!', timestamp: 1353809207, nonce: 'Ygvqdz', payload: 'something to write about' }).field;
- expect(header).to.equal('Hawk id="123456", ts="1353809207", nonce="Ygvqdz", hash="bsvY3IfUllw6V5rvk4tStEvpBhE=", ext="Bazinga!", mac="qbf1ZPG/r/e06F4ht+T77LXi5vw="');
- done();
- });
-
- it('should return a valid authorization header (sha256)', function (done) {
-
- var credentials = {
- id: '123456',
- key: '2983d45yun89q',
- algorithm: 'sha256'
- };
-
- var header = Browser.client.header('https://example.net/somewhere/over/the/rainbow', 'POST', { credentials: credentials, ext: 'Bazinga!', timestamp: 1353809207, nonce: 'Ygvqdz', payload: 'something to write about', contentType: 'text/plain' }).field;
- expect(header).to.equal('Hawk id="123456", ts="1353809207", nonce="Ygvqdz", hash="2QfCt3GuY9HQnHWyWD3wX68ZOKbynqlfYmuO2ZBRqtY=", ext="Bazinga!", mac="q1CwFoSHzPZSkbIvl0oYlD+91rBUEvFk763nMjMndj8="');
- done();
- });
-
- it('should return a valid authorization header (no ext)', function (done) {
-
- var credentials = {
- id: '123456',
- key: '2983d45yun89q',
- algorithm: 'sha256'
- };
-
- var header = Browser.client.header('https://example.net/somewhere/over/the/rainbow', 'POST', { credentials: credentials, timestamp: 1353809207, nonce: 'Ygvqdz', payload: 'something to write about', contentType: 'text/plain' }).field;
- expect(header).to.equal('Hawk id="123456", ts="1353809207", nonce="Ygvqdz", hash="2QfCt3GuY9HQnHWyWD3wX68ZOKbynqlfYmuO2ZBRqtY=", mac="HTgtd0jPI6E4izx8e4OHdO36q00xFCU0FolNq3RiCYs="');
- done();
- });
-
- it('should return an empty authorization header on missing options', function (done) {
-
- var header = Browser.client.header('https://example.net/somewhere/over/the/rainbow', 'POST').field;
- expect(header).to.equal('');
- done();
- });
-
- it('should return an empty authorization header on invalid credentials', function (done) {
-
- var credentials = {
- key: '2983d45yun89q',
- algorithm: 'sha256'
- };
-
- var header = Browser.client.header('https://example.net/somewhere/over/the/rainbow', 'POST', { credentials: credentials, ext: 'Bazinga!', timestamp: 1353809207 }).field;
- expect(header).to.equal('');
- done();
- });
-
- it('should return an empty authorization header on invalid algorithm', function (done) {
-
- var credentials = {
- id: '123456',
- key: '2983d45yun89q',
- algorithm: 'hmac-sha-0'
- };
-
- var header = Browser.client.header('https://example.net/somewhere/over/the/rainbow', 'POST', { credentials: credentials, payload: 'something, anything!', ext: 'Bazinga!', timestamp: 1353809207 }).field;
- expect(header).to.equal('');
- done();
- });
- });
-
- describe('#authenticate', function () {
-
- it('should return false on invalid header', function (done) {
-
- var res = {
- headers: {
- 'server-authorization': 'Hawk mac="abc", bad="xyz"'
- },
- getResponseHeader: function (header) {
-
- return res.headers[header.toLowerCase()];
- }
- };
-
- expect(Browser.client.authenticate(res, {})).to.equal(false);
- done();
- });
-
- it('should return false on invalid mac', function (done) {
-
- var res = {
- headers: {
- 'content-type': 'text/plain',
- 'server-authorization': 'Hawk mac="_IJRsMl/4oL+nn+vKoeVZPdCHXB4yJkNnBbTbHFZUYE=", hash="f9cDF/TDm7TkYRLnGwRMfeDzT6LixQVLvrIKhh0vgmM=", ext="response-specific"'
- },
- getResponseHeader: function (header) {
-
- return res.headers[header.toLowerCase()];
- }
- };
-
- var artifacts = {
- method: 'POST',
- host: 'example.com',
- port: '8080',
- resource: '/resource/4?filter=a',
- ts: '1362336900',
- nonce: 'eb5S_L',
- hash: 'nJjkVtBE5Y/Bk38Aiokwn0jiJxt/0S2WRSUwWLCf5xk=',
- ext: 'some-app-data',
- app: undefined,
- dlg: undefined,
- mac: 'BlmSe8K+pbKIb6YsZCnt4E1GrYvY1AaYayNR82dGpIk=',
- id: '123456'
- };
-
- var credentials = {
- id: '123456',
- key: 'werxhqb98rpaxn39848xrunpaw3489ruxnpa98w4rxn',
- algorithm: 'sha256',
- user: 'steve'
- };
-
- expect(Browser.client.authenticate(res, credentials, artifacts)).to.equal(false);
- done();
- });
-
- it('should return true on ignoring hash', function (done) {
-
- var res = {
- headers: {
- 'content-type': 'text/plain',
- 'server-authorization': 'Hawk mac="XIJRsMl/4oL+nn+vKoeVZPdCHXB4yJkNnBbTbHFZUYE=", hash="f9cDF/TDm7TkYRLnGwRMfeDzT6LixQVLvrIKhh0vgmM=", ext="response-specific"'
- },
- getResponseHeader: function (header) {
-
- return res.headers[header.toLowerCase()];
- }
- };
-
- var artifacts = {
- method: 'POST',
- host: 'example.com',
- port: '8080',
- resource: '/resource/4?filter=a',
- ts: '1362336900',
- nonce: 'eb5S_L',
- hash: 'nJjkVtBE5Y/Bk38Aiokwn0jiJxt/0S2WRSUwWLCf5xk=',
- ext: 'some-app-data',
- app: undefined,
- dlg: undefined,
- mac: 'BlmSe8K+pbKIb6YsZCnt4E1GrYvY1AaYayNR82dGpIk=',
- id: '123456'
- };
-
- var credentials = {
- id: '123456',
- key: 'werxhqb98rpaxn39848xrunpaw3489ruxnpa98w4rxn',
- algorithm: 'sha256',
- user: 'steve'
- };
-
- expect(Browser.client.authenticate(res, credentials, artifacts)).to.equal(true);
- done();
- });
-
- it('should fail on invalid WWW-Authenticate header format', function (done) {
-
- var res = {
- headers: {
- 'www-authenticate': 'Hawk ts="1362346425875", tsm="PhwayS28vtnn3qbv0mqRBYSXebN/zggEtucfeZ620Zo=", x="Stale timestamp"'
- },
- getResponseHeader: function (header) {
-
- return res.headers[header.toLowerCase()];
- }
- };
-
- expect(Browser.client.authenticate(res, {})).to.equal(false);
- done();
- });
-
- it('should fail on invalid WWW-Authenticate header format', function (done) {
-
- var credentials = {
- id: '123456',
- key: 'werxhqb98rpaxn39848xrunpaw3489ruxnpa98w4rxn',
- algorithm: 'sha256',
- user: 'steve'
- };
-
- var res = {
- headers: {
- 'www-authenticate': 'Hawk ts="1362346425875", tsm="hwayS28vtnn3qbv0mqRBYSXebN/zggEtucfeZ620Zo=", error="Stale timestamp"'
- },
- getResponseHeader: function (header) {
-
- return res.headers[header.toLowerCase()];
- }
- };
-
- expect(Browser.client.authenticate(res, credentials)).to.equal(false);
- done();
- });
- });
- });
-
- describe('#parseAuthorizationHeader', function (done) {
-
- it('returns null on missing header', function (done) {
-
- expect(Browser.utils.parseAuthorizationHeader()).to.equal(null);
- done();
- });
-
- it('returns null on bad header syntax (structure)', function (done) {
-
- expect(Browser.utils.parseAuthorizationHeader('Hawk')).to.equal(null);
- done();
- });
-
- it('returns null on bad header syntax (parts)', function (done) {
-
- expect(Browser.utils.parseAuthorizationHeader(' ')).to.equal(null);
- done();
- });
-
- it('returns null on bad scheme name', function (done) {
-
- expect(Browser.utils.parseAuthorizationHeader('Basic asdasd')).to.equal(null);
- done();
- });
-
- it('returns null on bad attribute value', function (done) {
-
- expect(Browser.utils.parseAuthorizationHeader('Hawk test="\t"', ['test'])).to.equal(null);
- done();
- });
-
- it('returns null on duplicated attribute', function (done) {
-
- expect(Browser.utils.parseAuthorizationHeader('Hawk test="a", test="b"', ['test'])).to.equal(null);
- done();
- });
- });
-});
+// Load modules
+
+var Lab = require('lab');
+var Hoek = require('hoek');
+var Hawk = require('../lib');
+var Browser = require('../lib/browser');
+var LocalStorage = require('localStorage');
+
+
+// Declare internals
+
+var internals = {};
+
+
+// Test shortcuts
+
+var expect = Lab.expect;
+var before = Lab.before;
+var after = Lab.after;
+var describe = Lab.experiment;
+var it = Lab.test;
+
+
+describe('Browser', function () {
+
+ var credentialsFunc = function (id, callback) {
+
+ var credentials = {
+ id: id,
+ key: 'werxhqb98rpaxn39848xrunpaw3489ruxnpa98w4rxn',
+ algorithm: (id === '1' ? 'sha1' : 'sha256'),
+ user: 'steve'
+ };
+
+ return callback(null, credentials);
+ };
+
+ it('should generate a header then successfully parse it (configuration)', function (done) {
+
+ var req = {
+ method: 'GET',
+ url: '/resource/4?filter=a',
+ host: 'example.com',
+ port: 8080
+ };
+
+ credentialsFunc('123456', function (err, credentials) {
+
+ req.authorization = Browser.client.header('http://example.com:8080/resource/4?filter=a', req.method, { credentials: credentials, ext: 'some-app-data' }).field;
+ expect(req.authorization).to.exist;
+
+ Hawk.server.authenticate(req, credentialsFunc, {}, function (err, credentials, artifacts) {
+
+ expect(err).to.not.exist;
+ expect(credentials.user).to.equal('steve');
+ expect(artifacts.ext).to.equal('some-app-data');
+ done();
+ });
+ });
+ });
+
+ it('should generate a header then successfully parse it (node request)', function (done) {
+
+ var req = {
+ method: 'POST',
+ url: '/resource/4?filter=a',
+ headers: {
+ host: 'example.com:8080',
+ 'content-type': 'text/plain;x=y'
+ }
+ };
+
+ var payload = 'some not so random text';
+
+ credentialsFunc('123456', function (err, credentials) {
+
+ var reqHeader = Browser.client.header('http://example.com:8080/resource/4?filter=a', req.method, { credentials: credentials, ext: 'some-app-data', payload: payload, contentType: req.headers['content-type'] });
+ req.headers.authorization = reqHeader.field;
+
+ Hawk.server.authenticate(req, credentialsFunc, {}, function (err, credentials, artifacts) {
+
+ expect(err).to.not.exist;
+ expect(credentials.user).to.equal('steve');
+ expect(artifacts.ext).to.equal('some-app-data');
+ expect(Hawk.server.authenticatePayload(payload, credentials, artifacts, req.headers['content-type'])).to.equal(true);
+
+ var res = {
+ headers: {
+ 'content-type': 'text/plain'
+ },
+ getResponseHeader: function (header) {
+
+ return res.headers[header.toLowerCase()];
+ }
+ };
+
+ res.headers['server-authorization'] = Hawk.server.header(credentials, artifacts, { payload: 'some reply', contentType: 'text/plain', ext: 'response-specific' });
+ expect(res.headers['server-authorization']).to.exist;
+
+ expect(Browser.client.authenticate(res, credentials, artifacts, { payload: 'some reply' })).to.equal(true);
+ done();
+ });
+ });
+ });
+
+ it('should generate a header then successfully parse it (no server header options)', function (done) {
+
+ var req = {
+ method: 'POST',
+ url: '/resource/4?filter=a',
+ headers: {
+ host: 'example.com:8080',
+ 'content-type': 'text/plain;x=y'
+ }
+ };
+
+ var payload = 'some not so random text';
+
+ credentialsFunc('123456', function (err, credentials) {
+
+ var reqHeader = Browser.client.header('http://example.com:8080/resource/4?filter=a', req.method, { credentials: credentials, ext: 'some-app-data', payload: payload, contentType: req.headers['content-type'] });
+ req.headers.authorization = reqHeader.field;
+
+ Hawk.server.authenticate(req, credentialsFunc, {}, function (err, credentials, artifacts) {
+
+ expect(err).to.not.exist;
+ expect(credentials.user).to.equal('steve');
+ expect(artifacts.ext).to.equal('some-app-data');
+ expect(Hawk.server.authenticatePayload(payload, credentials, artifacts, req.headers['content-type'])).to.equal(true);
+
+ var res = {
+ headers: {
+ 'content-type': 'text/plain'
+ },
+ getResponseHeader: function (header) {
+
+ return res.headers[header.toLowerCase()];
+ }
+ };
+
+ res.headers['server-authorization'] = Hawk.server.header(credentials, artifacts);
+ expect(res.headers['server-authorization']).to.exist;
+
+ expect(Browser.client.authenticate(res, credentials, artifacts)).to.equal(true);
+ done();
+ });
+ });
+ });
+
+ it('should generate a header then successfully parse it (no server header)', function (done) {
+
+ var req = {
+ method: 'POST',
+ url: '/resource/4?filter=a',
+ headers: {
+ host: 'example.com:8080',
+ 'content-type': 'text/plain;x=y'
+ }
+ };
+
+ var payload = 'some not so random text';
+
+ credentialsFunc('123456', function (err, credentials) {
+
+ var reqHeader = Browser.client.header('http://example.com:8080/resource/4?filter=a', req.method, { credentials: credentials, ext: 'some-app-data', payload: payload, contentType: req.headers['content-type'] });
+ req.headers.authorization = reqHeader.field;
+
+ Hawk.server.authenticate(req, credentialsFunc, {}, function (err, credentials, artifacts) {
+
+ expect(err).to.not.exist;
+ expect(credentials.user).to.equal('steve');
+ expect(artifacts.ext).to.equal('some-app-data');
+ expect(Hawk.server.authenticatePayload(payload, credentials, artifacts, req.headers['content-type'])).to.equal(true);
+
+ var res = {
+ headers: {
+ 'content-type': 'text/plain'
+ },
+ getResponseHeader: function (header) {
+
+ return res.headers[header.toLowerCase()];
+ }
+ };
+
+ expect(Browser.client.authenticate(res, credentials, artifacts)).to.equal(true);
+ done();
+ });
+ });
+ });
+
+ it('should generate a header with stale ts and successfully authenticate on second call', function (done) {
+
+ var req = {
+ method: 'GET',
+ url: '/resource/4?filter=a',
+ host: 'example.com',
+ port: 8080
+ };
+
+ credentialsFunc('123456', function (err, credentials) {
+
+ Browser.utils.setNtpOffset(60 * 60 * 1000);
+ var header = Browser.client.header('http://example.com:8080/resource/4?filter=a', req.method, { credentials: credentials, ext: 'some-app-data' });
+ req.authorization = header.field;
+ expect(req.authorization).to.exist;
+
+ Hawk.server.authenticate(req, credentialsFunc, {}, function (err, credentials, artifacts) {
+
+ expect(err).to.exist;
+ expect(err.message).to.equal('Stale timestamp');
+
+ var res = {
+ headers: {
+ 'www-authenticate': err.response.headers['WWW-Authenticate']
+ },
+ getResponseHeader: function (header) {
+
+ return res.headers[header.toLowerCase()];
+ }
+ };
+
+ expect(Browser.utils.getNtpOffset()).to.equal(60 * 60 * 1000);
+ expect(Browser.client.authenticate(res, credentials, header.artifacts)).to.equal(true);
+ expect(Browser.utils.getNtpOffset()).to.equal(0);
+
+ req.authorization = Browser.client.header('http://example.com:8080/resource/4?filter=a', req.method, { credentials: credentials, ext: 'some-app-data' }).field;
+ expect(req.authorization).to.exist;
+
+ Hawk.server.authenticate(req, credentialsFunc, {}, function (err, credentials, artifacts) {
+
+ expect(err).to.not.exist;
+ expect(credentials.user).to.equal('steve');
+ expect(artifacts.ext).to.equal('some-app-data');
+ done();
+ });
+ });
+ });
+ });
+
+ it('should generate a header with stale ts and successfully authenticate on second call (manual localStorage)', function (done) {
+
+ var req = {
+ method: 'GET',
+ url: '/resource/4?filter=a',
+ host: 'example.com',
+ port: 8080
+ };
+
+ credentialsFunc('123456', function (err, credentials) {
+ Browser.utils.setStorage(LocalStorage)
+
+ Browser.utils.setNtpOffset(60 * 60 * 1000);
+ var header = Browser.client.header('http://example.com:8080/resource/4?filter=a', req.method, { credentials: credentials, ext: 'some-app-data' });
+ req.authorization = header.field;
+ expect(req.authorization).to.exist;
+
+ Hawk.server.authenticate(req, credentialsFunc, {}, function (err, credentials, artifacts) {
+
+ expect(err).to.exist;
+ expect(err.message).to.equal('Stale timestamp');
+
+ var res = {
+ headers: {
+ 'www-authenticate': err.response.headers['WWW-Authenticate']
+ },
+ getResponseHeader: function (header) {
+
+ return res.headers[header.toLowerCase()];
+ }
+ };
+
+ expect(parseInt(LocalStorage.getItem('hawk_ntp_offset'))).to.equal(60 * 60 * 1000);
+ expect(Browser.utils.getNtpOffset()).to.equal(60 * 60 * 1000);
+ expect(Browser.client.authenticate(res, credentials, header.artifacts)).to.equal(true);
+ expect(Browser.utils.getNtpOffset()).to.equal(0);
+ expect(parseInt(LocalStorage.getItem('hawk_ntp_offset'))).to.equal(0);
+
+ req.authorization = Browser.client.header('http://example.com:8080/resource/4?filter=a', req.method, { credentials: credentials, ext: 'some-app-data' }).field;
+ expect(req.authorization).to.exist;
+
+ Hawk.server.authenticate(req, credentialsFunc, {}, function (err, credentials, artifacts) {
+
+ expect(err).to.not.exist;
+ expect(credentials.user).to.equal('steve');
+ expect(artifacts.ext).to.equal('some-app-data');
+ done();
+ });
+ });
+ });
+ });
+
+ it('should generate a header then fails to parse it (missing server header hash)', function (done) {
+
+ var req = {
+ method: 'POST',
+ url: '/resource/4?filter=a',
+ headers: {
+ host: 'example.com:8080',
+ 'content-type': 'text/plain;x=y'
+ }
+ };
+
+ var payload = 'some not so random text';
+
+ credentialsFunc('123456', function (err, credentials) {
+
+ var reqHeader = Browser.client.header('http://example.com:8080/resource/4?filter=a', req.method, { credentials: credentials, ext: 'some-app-data', payload: payload, contentType: req.headers['content-type'] });
+ req.headers.authorization = reqHeader.field;
+
+ Hawk.server.authenticate(req, credentialsFunc, {}, function (err, credentials, artifacts) {
+
+ expect(err).to.not.exist;
+ expect(credentials.user).to.equal('steve');
+ expect(artifacts.ext).to.equal('some-app-data');
+ expect(Hawk.server.authenticatePayload(payload, credentials, artifacts, req.headers['content-type'])).to.equal(true);
+
+ var res = {
+ headers: {
+ 'content-type': 'text/plain'
+ },
+ getResponseHeader: function (header) {
+
+ return res.headers[header.toLowerCase()];
+ }
+ };
+
+ res.headers['server-authorization'] = Hawk.server.header(credentials, artifacts);
+ expect(res.headers['server-authorization']).to.exist;
+
+ expect(Browser.client.authenticate(res, credentials, artifacts, { payload: 'some reply' })).to.equal(false);
+ done();
+ });
+ });
+ });
+
+ it('should generate a header then successfully parse it (with hash)', function (done) {
+
+ var req = {
+ method: 'GET',
+ url: '/resource/4?filter=a',
+ host: 'example.com',
+ port: 8080
+ };
+
+ credentialsFunc('123456', function (err, credentials) {
+
+ req.authorization = Browser.client.header('http://example.com:8080/resource/4?filter=a', req.method, { credentials: credentials, payload: 'hola!', ext: 'some-app-data' }).field;
+ Hawk.server.authenticate(req, credentialsFunc, {}, function (err, credentials, artifacts) {
+
+ expect(err).to.not.exist;
+ expect(credentials.user).to.equal('steve');
+ expect(artifacts.ext).to.equal('some-app-data');
+ done();
+ });
+ });
+ });
+
+ it('should generate a header then successfully parse it then validate payload', function (done) {
+
+ var req = {
+ method: 'GET',
+ url: '/resource/4?filter=a',
+ host: 'example.com',
+ port: 8080
+ };
+
+ credentialsFunc('123456', function (err, credentials) {
+
+ req.authorization = Browser.client.header('http://example.com:8080/resource/4?filter=a', req.method, { credentials: credentials, payload: 'hola!', ext: 'some-app-data' }).field;
+ Hawk.server.authenticate(req, credentialsFunc, {}, function (err, credentials, artifacts) {
+
+ expect(err).to.not.exist;
+ expect(credentials.user).to.equal('steve');
+ expect(artifacts.ext).to.equal('some-app-data');
+ expect(Hawk.server.authenticatePayload('hola!', credentials, artifacts)).to.be.true;
+ expect(Hawk.server.authenticatePayload('hello!', credentials, artifacts)).to.be.false;
+ done();
+ });
+ });
+ });
+
+ it('should generate a header then successfully parse it (app)', function (done) {
+
+ var req = {
+ method: 'GET',
+ url: '/resource/4?filter=a',
+ host: 'example.com',
+ port: 8080
+ };
+
+ credentialsFunc('123456', function (err, credentials) {
+
+ req.authorization = Browser.client.header('http://example.com:8080/resource/4?filter=a', req.method, { credentials: credentials, ext: 'some-app-data', app: 'asd23ased' }).field;
+ Hawk.server.authenticate(req, credentialsFunc, {}, function (err, credentials, artifacts) {
+
+ expect(err).to.not.exist;
+ expect(credentials.user).to.equal('steve');
+ expect(artifacts.ext).to.equal('some-app-data');
+ expect(artifacts.app).to.equal('asd23ased');
+ done();
+ });
+ });
+ });
+
+ it('should generate a header then successfully parse it (app, dlg)', function (done) {
+
+ var req = {
+ method: 'GET',
+ url: '/resource/4?filter=a',
+ host: 'example.com',
+ port: 8080
+ };
+
+ credentialsFunc('123456', function (err, credentials) {
+
+ req.authorization = Browser.client.header('http://example.com:8080/resource/4?filter=a', req.method, { credentials: credentials, ext: 'some-app-data', app: 'asd23ased', dlg: '23434szr3q4d' }).field;
+ Hawk.server.authenticate(req, credentialsFunc, {}, function (err, credentials, artifacts) {
+
+ expect(err).to.not.exist;
+ expect(credentials.user).to.equal('steve');
+ expect(artifacts.ext).to.equal('some-app-data');
+ expect(artifacts.app).to.equal('asd23ased');
+ expect(artifacts.dlg).to.equal('23434szr3q4d');
+ done();
+ });
+ });
+ });
+
+ it('should generate a header then fail authentication due to bad hash', function (done) {
+
+ var req = {
+ method: 'GET',
+ url: '/resource/4?filter=a',
+ host: 'example.com',
+ port: 8080
+ };
+
+ credentialsFunc('123456', function (err, credentials) {
+
+ req.authorization = Browser.client.header('http://example.com:8080/resource/4?filter=a', req.method, { credentials: credentials, payload: 'hola!', ext: 'some-app-data' }).field;
+ Hawk.server.authenticate(req, credentialsFunc, { payload: 'byebye!' }, function (err, credentials, artifacts) {
+
+ expect(err).to.exist;
+ expect(err.response.payload.message).to.equal('Bad payload hash');
+ done();
+ });
+ });
+ });
+
+ it('should generate a header for one resource then fail to authenticate another', function (done) {
+
+ var req = {
+ method: 'GET',
+ url: '/resource/4?filter=a',
+ host: 'example.com',
+ port: 8080
+ };
+
+ credentialsFunc('123456', function (err, credentials) {
+
+ req.authorization = Browser.client.header('http://example.com:8080/resource/4?filter=a', req.method, { credentials: credentials, ext: 'some-app-data' }).field;
+ req.url = '/something/else';
+
+ Hawk.server.authenticate(req, credentialsFunc, {}, function (err, credentials, artifacts) {
+
+ expect(err).to.exist;
+ expect(credentials).to.exist;
+ done();
+ });
+ });
+ });
+
+ describe('client', function () {
+
+ describe('#header', function () {
+
+ it('should return a valid authorization header (sha1)', function (done) {
+
+ var credentials = {
+ id: '123456',
+ key: '2983d45yun89q',
+ algorithm: 'sha1'
+ };
+
+ var header = Browser.client.header('http://example.net/somewhere/over/the/rainbow', 'POST', { credentials: credentials, ext: 'Bazinga!', timestamp: 1353809207, nonce: 'Ygvqdz', payload: 'something to write about' }).field;
+ expect(header).to.equal('Hawk id="123456", ts="1353809207", nonce="Ygvqdz", hash="bsvY3IfUllw6V5rvk4tStEvpBhE=", ext="Bazinga!", mac="qbf1ZPG/r/e06F4ht+T77LXi5vw="');
+ done();
+ });
+
+ it('should return a valid authorization header (sha256)', function (done) {
+
+ var credentials = {
+ id: '123456',
+ key: '2983d45yun89q',
+ algorithm: 'sha256'
+ };
+
+ var header = Browser.client.header('https://example.net/somewhere/over/the/rainbow', 'POST', { credentials: credentials, ext: 'Bazinga!', timestamp: 1353809207, nonce: 'Ygvqdz', payload: 'something to write about', contentType: 'text/plain' }).field;
+ expect(header).to.equal('Hawk id="123456", ts="1353809207", nonce="Ygvqdz", hash="2QfCt3GuY9HQnHWyWD3wX68ZOKbynqlfYmuO2ZBRqtY=", ext="Bazinga!", mac="q1CwFoSHzPZSkbIvl0oYlD+91rBUEvFk763nMjMndj8="');
+ done();
+ });
+
+ it('should return a valid authorization header (no ext)', function (done) {
+
+ var credentials = {
+ id: '123456',
+ key: '2983d45yun89q',
+ algorithm: 'sha256'
+ };
+
+ var header = Browser.client.header('https://example.net/somewhere/over/the/rainbow', 'POST', { credentials: credentials, timestamp: 1353809207, nonce: 'Ygvqdz', payload: 'something to write about', contentType: 'text/plain' }).field;
+ expect(header).to.equal('Hawk id="123456", ts="1353809207", nonce="Ygvqdz", hash="2QfCt3GuY9HQnHWyWD3wX68ZOKbynqlfYmuO2ZBRqtY=", mac="HTgtd0jPI6E4izx8e4OHdO36q00xFCU0FolNq3RiCYs="');
+ done();
+ });
+
+ it('should return an empty authorization header on missing options', function (done) {
+
+ var header = Browser.client.header('https://example.net/somewhere/over/the/rainbow', 'POST').field;
+ expect(header).to.equal('');
+ done();
+ });
+
+ it('should return an empty authorization header on invalid credentials', function (done) {
+
+ var credentials = {
+ key: '2983d45yun89q',
+ algorithm: 'sha256'
+ };
+
+ var header = Browser.client.header('https://example.net/somewhere/over/the/rainbow', 'POST', { credentials: credentials, ext: 'Bazinga!', timestamp: 1353809207 }).field;
+ expect(header).to.equal('');
+ done();
+ });
+
+ it('should return an empty authorization header on invalid algorithm', function (done) {
+
+ var credentials = {
+ id: '123456',
+ key: '2983d45yun89q',
+ algorithm: 'hmac-sha-0'
+ };
+
+ var header = Browser.client.header('https://example.net/somewhere/over/the/rainbow', 'POST', { credentials: credentials, payload: 'something, anything!', ext: 'Bazinga!', timestamp: 1353809207 }).field;
+ expect(header).to.equal('');
+ done();
+ });
+ });
+
+ describe('#authenticate', function () {
+
+ it('should return false on invalid header', function (done) {
+
+ var res = {
+ headers: {
+ 'server-authorization': 'Hawk mac="abc", bad="xyz"'
+ },
+ getResponseHeader: function (header) {
+
+ return res.headers[header.toLowerCase()];
+ }
+ };
+
+ expect(Browser.client.authenticate(res, {})).to.equal(false);
+ done();
+ });
+
+ it('should return false on invalid mac', function (done) {
+
+ var res = {
+ headers: {
+ 'content-type': 'text/plain',
+ 'server-authorization': 'Hawk mac="_IJRsMl/4oL+nn+vKoeVZPdCHXB4yJkNnBbTbHFZUYE=", hash="f9cDF/TDm7TkYRLnGwRMfeDzT6LixQVLvrIKhh0vgmM=", ext="response-specific"'
+ },
+ getResponseHeader: function (header) {
+
+ return res.headers[header.toLowerCase()];
+ }
+ };
+
+ var artifacts = {
+ method: 'POST',
+ host: 'example.com',
+ port: '8080',
+ resource: '/resource/4?filter=a',
+ ts: '1362336900',
+ nonce: 'eb5S_L',
+ hash: 'nJjkVtBE5Y/Bk38Aiokwn0jiJxt/0S2WRSUwWLCf5xk=',
+ ext: 'some-app-data',
+ app: undefined,
+ dlg: undefined,
+ mac: 'BlmSe8K+pbKIb6YsZCnt4E1GrYvY1AaYayNR82dGpIk=',
+ id: '123456'
+ };
+
+ var credentials = {
+ id: '123456',
+ key: 'werxhqb98rpaxn39848xrunpaw3489ruxnpa98w4rxn',
+ algorithm: 'sha256',
+ user: 'steve'
+ };
+
+ expect(Browser.client.authenticate(res, credentials, artifacts)).to.equal(false);
+ done();
+ });
+
+ it('should return true on ignoring hash', function (done) {
+
+ var res = {
+ headers: {
+ 'content-type': 'text/plain',
+ 'server-authorization': 'Hawk mac="XIJRsMl/4oL+nn+vKoeVZPdCHXB4yJkNnBbTbHFZUYE=", hash="f9cDF/TDm7TkYRLnGwRMfeDzT6LixQVLvrIKhh0vgmM=", ext="response-specific"'
+ },
+ getResponseHeader: function (header) {
+
+ return res.headers[header.toLowerCase()];
+ }
+ };
+
+ var artifacts = {
+ method: 'POST',
+ host: 'example.com',
+ port: '8080',
+ resource: '/resource/4?filter=a',
+ ts: '1362336900',
+ nonce: 'eb5S_L',
+ hash: 'nJjkVtBE5Y/Bk38Aiokwn0jiJxt/0S2WRSUwWLCf5xk=',
+ ext: 'some-app-data',
+ app: undefined,
+ dlg: undefined,
+ mac: 'BlmSe8K+pbKIb6YsZCnt4E1GrYvY1AaYayNR82dGpIk=',
+ id: '123456'
+ };
+
+ var credentials = {
+ id: '123456',
+ key: 'werxhqb98rpaxn39848xrunpaw3489ruxnpa98w4rxn',
+ algorithm: 'sha256',
+ user: 'steve'
+ };
+
+ expect(Browser.client.authenticate(res, credentials, artifacts)).to.equal(true);
+ done();
+ });
+
+ it('should fail on invalid WWW-Authenticate header format', function (done) {
+
+ var res = {
+ headers: {
+ 'www-authenticate': 'Hawk ts="1362346425875", tsm="PhwayS28vtnn3qbv0mqRBYSXebN/zggEtucfeZ620Zo=", x="Stale timestamp"'
+ },
+ getResponseHeader: function (header) {
+
+ return res.headers[header.toLowerCase()];
+ }
+ };
+
+ expect(Browser.client.authenticate(res, {})).to.equal(false);
+ done();
+ });
+
+ it('should fail on invalid WWW-Authenticate header format', function (done) {
+
+ var credentials = {
+ id: '123456',
+ key: 'werxhqb98rpaxn39848xrunpaw3489ruxnpa98w4rxn',
+ algorithm: 'sha256',
+ user: 'steve'
+ };
+
+ var res = {
+ headers: {
+ 'www-authenticate': 'Hawk ts="1362346425875", tsm="hwayS28vtnn3qbv0mqRBYSXebN/zggEtucfeZ620Zo=", error="Stale timestamp"'
+ },
+ getResponseHeader: function (header) {
+
+ return res.headers[header.toLowerCase()];
+ }
+ };
+
+ expect(Browser.client.authenticate(res, credentials)).to.equal(false);
+ done();
+ });
+ });
+
+ describe('#message', function () {
+ it('should generate an authorization then successfully parse it', function (done) {
+
+ credentialsFunc('123456', function (err, credentials) {
+
+ var auth = Browser.client.message('example.com', 8080, 'some message', { credentials: credentials });
+ expect(auth).to.exist;
+
+ Hawk.server.authenticateMessage('example.com', 8080, 'some message', auth, credentialsFunc, {}, function (err, credentials) {
+
+ expect(err).to.not.exist;
+ expect(credentials.user).to.equal('steve');
+ done();
+ });
+ });
+ });
+
+ it('should fail on missing host', function (done) {
+
+ credentialsFunc('123456', function (err, credentials) {
+
+ var auth = Browser.client.message(null, 8080, 'some message', { credentials: credentials });
+ expect(auth).to.not.exist;
+ done();
+ });
+ });
+
+ it('should fail on missing credentials', function (done) {
+
+ var auth = Browser.client.message('example.com', 8080, 'some message', {});
+ expect(auth).to.not.exist;
+ done();
+ });
+
+ it('should fail on invalid algorithm', function (done) {
+
+ credentialsFunc('123456', function (err, credentials) {
+
+ var creds = Hoek.clone(credentials);
+ creds.algorithm = 'blah';
+ var auth = Browser.client.message('example.com', 8080, 'some message', { credentials: creds });
+ expect(auth).to.not.exist;
+ done();
+ });
+ });
+ });
+ });
+
+ describe('#parseAuthorizationHeader', function (done) {
+
+ it('returns null on missing header', function (done) {
+
+ expect(Browser.utils.parseAuthorizationHeader()).to.equal(null);
+ done();
+ });
+
+ it('returns null on bad header syntax (structure)', function (done) {
+
+ expect(Browser.utils.parseAuthorizationHeader('Hawk')).to.equal(null);
+ done();
+ });
+
+ it('returns null on bad header syntax (parts)', function (done) {
+
+ expect(Browser.utils.parseAuthorizationHeader(' ')).to.equal(null);
+ done();
+ });
+
+ it('returns null on bad scheme name', function (done) {
+
+ expect(Browser.utils.parseAuthorizationHeader('Basic asdasd')).to.equal(null);
+ done();
+ });
+
+ it('returns null on bad attribute value', function (done) {
+
+ expect(Browser.utils.parseAuthorizationHeader('Hawk test="\t"', ['test'])).to.equal(null);
+ done();
+ });
+
+ it('returns null on duplicated attribute', function (done) {
+
+ expect(Browser.utils.parseAuthorizationHeader('Hawk test="a", test="b"', ['test'])).to.equal(null);
+ done();
+ });
+ });
+});
diff --git a/deps/npm/node_modules/request/node_modules/hawk/test/message.js b/deps/npm/node_modules/request/node_modules/hawk/test/message.js
new file mode 100755
index 000000000..04b91d412
--- /dev/null
+++ b/deps/npm/node_modules/request/node_modules/hawk/test/message.js
@@ -0,0 +1,246 @@
+// Load modules
+
+var Url = require('url');
+var Lab = require('lab');
+var Hoek = require('hoek');
+var Hawk = require('../lib');
+
+
+// Declare internals
+
+var internals = {};
+
+
+// Test shortcuts
+
+var expect = Lab.expect;
+var before = Lab.before;
+var after = Lab.after;
+var describe = Lab.experiment;
+var it = Lab.test;
+
+
+describe('Hawk', function () {
+
+ var credentialsFunc = function (id, callback) {
+
+ var credentials = {
+ id: id,
+ key: 'werxhqb98rpaxn39848xrunpaw3489ruxnpa98w4rxn',
+ algorithm: (id === '1' ? 'sha1' : 'sha256'),
+ user: 'steve'
+ };
+
+ return callback(null, credentials);
+ };
+
+ it('should generate an authorization then successfully parse it', function (done) {
+
+ credentialsFunc('123456', function (err, credentials) {
+
+ var auth = Hawk.client.message('example.com', 8080, 'some message', { credentials: credentials });
+ expect(auth).to.exist;
+
+ Hawk.server.authenticateMessage('example.com', 8080, 'some message', auth, credentialsFunc, {}, function (err, credentials) {
+
+ expect(err).to.not.exist;
+ expect(credentials.user).to.equal('steve');
+ done();
+ });
+ });
+ });
+
+ it('should fail authorization on mismatching host', function (done) {
+
+ credentialsFunc('123456', function (err, credentials) {
+
+ var auth = Hawk.client.message('example.com', 8080, 'some message', { credentials: credentials });
+ expect(auth).to.exist;
+
+ Hawk.server.authenticateMessage('example1.com', 8080, 'some message', auth, credentialsFunc, {}, function (err, credentials) {
+
+ expect(err).to.exist;
+ expect(err.message).to.equal('Bad mac');
+ done();
+ });
+ });
+ });
+
+ it('should fail authorization on stale timestamp', function (done) {
+
+ credentialsFunc('123456', function (err, credentials) {
+
+ var auth = Hawk.client.message('example.com', 8080, 'some message', { credentials: credentials });
+ expect(auth).to.exist;
+
+ Hawk.server.authenticateMessage('example.com', 8080, 'some message', auth, credentialsFunc, { localtimeOffsetMsec: 100000 }, function (err, credentials) {
+
+ expect(err).to.exist;
+ expect(err.message).to.equal('Stale timestamp');
+ done();
+ });
+ });
+ });
+
+ it('should fail authorization on invalid authorization', function (done) {
+
+ credentialsFunc('123456', function (err, credentials) {
+
+ var auth = Hawk.client.message('example.com', 8080, 'some message', { credentials: credentials });
+ expect(auth).to.exist;
+ delete auth.id;
+
+ Hawk.server.authenticateMessage('example.com', 8080, 'some message', auth, credentialsFunc, {}, function (err, credentials) {
+
+ expect(err).to.exist;
+ expect(err.message).to.equal('Invalid authorization');
+ done();
+ });
+ });
+ });
+
+ it('should fail authorization on bad hash', function (done) {
+
+ credentialsFunc('123456', function (err, credentials) {
+
+ var auth = Hawk.client.message('example.com', 8080, 'some message', { credentials: credentials });
+ expect(auth).to.exist;
+
+ Hawk.server.authenticateMessage('example.com', 8080, 'some message1', auth, credentialsFunc, {}, function (err, credentials) {
+
+ expect(err).to.exist;
+ expect(err.message).to.equal('Bad message hash');
+ done();
+ });
+ });
+ });
+
+ it('should fail authorization on nonce error', function (done) {
+
+ credentialsFunc('123456', function (err, credentials) {
+
+ var auth = Hawk.client.message('example.com', 8080, 'some message', { credentials: credentials });
+ expect(auth).to.exist;
+
+ Hawk.server.authenticateMessage('example.com', 8080, 'some message', auth, credentialsFunc, { nonceFunc: function (nonce, ts, callback) { callback (new Error('kaboom')); } }, function (err, credentials) {
+
+ expect(err).to.exist;
+ expect(err.message).to.equal('Invalid nonce');
+ done();
+ });
+ });
+ });
+
+ it('should fail authorization on credentials error', function (done) {
+
+ credentialsFunc('123456', function (err, credentials) {
+
+ var auth = Hawk.client.message('example.com', 8080, 'some message', { credentials: credentials });
+ expect(auth).to.exist;
+
+ var errFunc = function (id, callback) {
+
+ callback(new Error('kablooey'));
+ };
+
+ Hawk.server.authenticateMessage('example.com', 8080, 'some message', auth, errFunc, {}, function (err, credentials) {
+
+ expect(err).to.exist;
+ expect(err.message).to.equal('kablooey');
+ done();
+ });
+ });
+ });
+
+ it('should fail authorization on missing credentials', function (done) {
+
+ credentialsFunc('123456', function (err, credentials) {
+
+ var auth = Hawk.client.message('example.com', 8080, 'some message', { credentials: credentials });
+ expect(auth).to.exist;
+
+ var errFunc = function (id, callback) {
+
+ callback();
+ };
+
+ Hawk.server.authenticateMessage('example.com', 8080, 'some message', auth, errFunc, {}, function (err, credentials) {
+
+ expect(err).to.exist;
+ expect(err.message).to.equal('Unknown credentials');
+ done();
+ });
+ });
+ });
+
+ it('should fail authorization on invalid credentials', function (done) {
+
+ credentialsFunc('123456', function (err, credentials) {
+
+ var auth = Hawk.client.message('example.com', 8080, 'some message', { credentials: credentials });
+ expect(auth).to.exist;
+
+ var errFunc = function (id, callback) {
+
+ callback(null, {});
+ };
+
+ Hawk.server.authenticateMessage('example.com', 8080, 'some message', auth, errFunc, {}, function (err, credentials) {
+
+ expect(err).to.exist;
+ expect(err.message).to.equal('Invalid credentials');
+ done();
+ });
+ });
+ });
+
+ it('should fail authorization on invalid credentials algorithm', function (done) {
+
+ credentialsFunc('123456', function (err, credentials) {
+
+ var auth = Hawk.client.message('example.com', 8080, 'some message', { credentials: credentials });
+ expect(auth).to.exist;
+
+ var errFunc = function (id, callback) {
+
+ callback(null, { key: '123', algorithm: '456' });
+ };
+
+ Hawk.server.authenticateMessage('example.com', 8080, 'some message', auth, errFunc, {}, function (err, credentials) {
+
+ expect(err).to.exist;
+ expect(err.message).to.equal('Unknown algorithm');
+ done();
+ });
+ });
+ });
+
+ it('should fail on missing host', function (done) {
+
+ credentialsFunc('123456', function (err, credentials) {
+
+ var auth = Hawk.client.message(null, 8080, 'some message', { credentials: credentials });
+ expect(auth).to.not.exist;
+ done();
+ });
+ });
+
+ it('should fail on missing credentials', function (done) {
+
+ var auth = Hawk.client.message('example.com', 8080, 'some message', {});
+ expect(auth).to.not.exist;
+ done();
+ });
+
+ it('should fail on invalid algorithm', function (done) {
+
+ credentialsFunc('123456', function (err, credentials) {
+
+ var creds = Hoek.clone(credentials);
+ creds.algorithm = 'blah';
+ var auth = Hawk.client.message('example.com', 8080, 'some message', { credentials: creds });
+ expect(auth).to.not.exist;
+ done();
+ });
+ });
+});
diff --git a/deps/npm/node_modules/request/node_modules/hawk/test/server.js b/deps/npm/node_modules/request/node_modules/hawk/test/server.js
index 404674fb3..3e92427a8 100755
--- a/deps/npm/node_modules/request/node_modules/hawk/test/server.js
+++ b/deps/npm/node_modules/request/node_modules/hawk/test/server.js
@@ -44,7 +44,7 @@ describe('Hawk', function () {
url: '/resource/4?filter=a',
host: 'example.com',
port: 8080,
- authorization: 'Hawk id="1", ts="1353788437", nonce="k3j4h2", mac="zy79QQ5/EYFmQqutVnYb73gAc/U=", ext="hello"',
+ authorization: 'Hawk id="1", ts="1353788437", nonce="k3j4h2", mac="zy79QQ5/EYFmQqutVnYb73gAc/U=", ext="hello"'
};
Hawk.server.authenticate(req, credentialsFunc, { localtimeOffsetMsec: 1353788437000 - Hawk.utils.now() }, function (err, credentials, artifacts) {
@@ -62,7 +62,7 @@ describe('Hawk', function () {
url: '/resource/1?b=1&a=2',
host: 'example.com',
port: 8000,
- authorization: 'Hawk id="dh37fgj492je", ts="1353832234", nonce="j4h3g2", mac="m8r1rHbXN6NgO+KIIhjO7sFRyd78RNGVUwehe8Cp2dU=", ext="some-app-data"',
+ authorization: 'Hawk id="dh37fgj492je", ts="1353832234", nonce="j4h3g2", mac="m8r1rHbXN6NgO+KIIhjO7sFRyd78RNGVUwehe8Cp2dU=", ext="some-app-data"'
};
Hawk.server.authenticate(req, credentialsFunc, { localtimeOffsetMsec: 1353832234000 - Hawk.utils.now() }, function (err, credentials, artifacts) {
@@ -73,6 +73,44 @@ describe('Hawk', function () {
});
});
+ it('should parse a valid authentication header (host override)', function (done) {
+
+ var req = {
+ method: 'GET',
+ url: '/resource/4?filter=a',
+ headers: {
+ host: 'example1.com:8080',
+ authorization: 'Hawk id="1", ts="1353788437", nonce="k3j4h2", mac="zy79QQ5/EYFmQqutVnYb73gAc/U=", ext="hello"'
+ }
+ };
+
+ Hawk.server.authenticate(req, credentialsFunc, { host: 'example.com', localtimeOffsetMsec: 1353788437000 - Hawk.utils.now() }, function (err, credentials, artifacts) {
+
+ expect(err).to.not.exist;
+ expect(credentials.user).to.equal('steve');
+ done();
+ });
+ });
+
+ it('should parse a valid authentication header (host port override)', function (done) {
+
+ var req = {
+ method: 'GET',
+ url: '/resource/4?filter=a',
+ headers: {
+ host: 'example1.com:80',
+ authorization: 'Hawk id="1", ts="1353788437", nonce="k3j4h2", mac="zy79QQ5/EYFmQqutVnYb73gAc/U=", ext="hello"'
+ }
+ };
+
+ Hawk.server.authenticate(req, credentialsFunc, { host: 'example.com', port: 8080, localtimeOffsetMsec: 1353788437000 - Hawk.utils.now() }, function (err, credentials, artifacts) {
+
+ expect(err).to.not.exist;
+ expect(credentials.user).to.equal('steve');
+ done();
+ });
+ });
+
it('should parse a valid authentication header (POST with payload)', function (done) {
var req = {
@@ -80,7 +118,7 @@ describe('Hawk', function () {
url: '/resource/4?filter=a',
host: 'example.com',
port: 8080,
- authorization: 'Hawk id="123456", ts="1357926341", nonce="1AwuJD", hash="qAiXIVv+yjDATneWxZP2YCTa9aHRgQdnH9b3Wc+o3dg=", ext="some-app-data", mac="UeYcj5UoTVaAWXNvJfLVia7kU3VabxCqrccXP8sUGC4="',
+ authorization: 'Hawk id="123456", ts="1357926341", nonce="1AwuJD", hash="qAiXIVv+yjDATneWxZP2YCTa9aHRgQdnH9b3Wc+o3dg=", ext="some-app-data", mac="UeYcj5UoTVaAWXNvJfLVia7kU3VabxCqrccXP8sUGC4="'
};
Hawk.server.authenticate(req, credentialsFunc, { localtimeOffsetMsec: 1357926341000 - Hawk.utils.now() }, function (err, credentials, artifacts) {
@@ -98,7 +136,7 @@ describe('Hawk', function () {
url: '/resource/1?b=1&a=2',
host: 'example.com',
port: 8000,
- authorization: 'Hawk id="dh37fgj492je", ts="1353832234", nonce="j4h3g2", mac="m8r1rHbXN6NgO+KIIhjO7sFRyd78RNGVUwehe8Cp2dU=", ext="some-app-data"',
+ authorization: 'Hawk id="dh37fgj492je", ts="1353832234", nonce="j4h3g2", mac="m8r1rHbXN6NgO+KIIhjO7sFRyd78RNGVUwehe8Cp2dU=", ext="some-app-data"'
};
Hawk.server.authenticate(req, credentialsFunc, { payload: 'body', localtimeOffsetMsec: 1353832234000 - Hawk.utils.now() }, function (err, credentials, artifacts) {
@@ -116,7 +154,7 @@ describe('Hawk', function () {
url: '/resource/4?filter=a',
host: 'example.com',
port: 8080,
- authorization: 'Hawk id="123456", ts="1362337299", nonce="UzmxSs", ext="some-app-data", mac="wnNUxchvvryMH2RxckTdZ/gY3ijzvccx4keVvELC61w="',
+ authorization: 'Hawk id="123456", ts="1362337299", nonce="UzmxSs", ext="some-app-data", mac="wnNUxchvvryMH2RxckTdZ/gY3ijzvccx4keVvELC61w="'
};
Hawk.server.authenticate(req, credentialsFunc, {}, function (err, credentials, artifacts) {
@@ -146,7 +184,7 @@ describe('Hawk', function () {
url: '/resource/4?filter=a',
host: 'example.com',
port: 8080,
- authorization: 'Hawk id="123", ts="1353788437", nonce="k3j4h2", mac="bXx7a7p1h9QYQNZ8x7QhvDQym8ACgab4m3lVSFn4DBw=", ext="hello"',
+ authorization: 'Hawk id="123", ts="1353788437", nonce="k3j4h2", mac="bXx7a7p1h9QYQNZ8x7QhvDQym8ACgab4m3lVSFn4DBw=", ext="hello"'
};
var memoryCache = {};
diff --git a/deps/npm/node_modules/request/node_modules/hawk/test/utils.js b/deps/npm/node_modules/request/node_modules/hawk/test/utils.js
index e6e6dfa40..0f5fef775 100755
--- a/deps/npm/node_modules/request/node_modules/hawk/test/utils.js
+++ b/deps/npm/node_modules/request/node_modules/hawk/test/utils.js
@@ -57,6 +57,44 @@ describe('Hawk', function () {
expect(Hawk.utils.parseHost(req, 'Host').port).to.equal(443);
done();
});
+
+ it('returns port 443 for non tls node request (IPv6)', function (done) {
+
+ var req = {
+ method: 'POST',
+ url: '/resource/4?filter=a',
+ headers: {
+ host: '[123:123:123]',
+ 'content-type': 'text/plain;x=y'
+ },
+ connection: {
+ encrypted: true
+ }
+ };
+
+ expect(Hawk.utils.parseHost(req, 'Host').port).to.equal(443);
+ done();
+ });
+
+ it('parses IPv6 headers', function (done) {
+
+ var req = {
+ method: 'POST',
+ url: '/resource/4?filter=a',
+ headers: {
+ host: '[123:123:123]:8000',
+ 'content-type': 'text/plain;x=y'
+ },
+ connection: {
+ encrypted: true
+ }
+ };
+
+ var host = Hawk.utils.parseHost(req, 'Host');
+ expect(host.port).to.equal('8000');
+ expect(host.name).to.equal('[123:123:123]');
+ done();
+ });
});
describe('#version', function () {
@@ -68,14 +106,14 @@ describe('Hawk', function () {
});
});
- describe('#unauthorized', function () {
+ describe('#unauthorized', function () {
- it('returns a hawk 401', function (done) {
+ it('returns a hawk 401', function (done) {
expect(Hawk.utils.unauthorized('kaboom').response.headers['WWW-Authenticate']).to.equal('Hawk error="kaboom"');
- done();
- });
- });
+ done();
+ });
+ });
});
});
diff --git a/deps/npm/node_modules/request/node_modules/http-signature/.npmignore b/deps/npm/node_modules/request/node_modules/http-signature/.npmignore
index 486127c70..c143fb3a4 100644
--- a/deps/npm/node_modules/request/node_modules/http-signature/.npmignore
+++ b/deps/npm/node_modules/request/node_modules/http-signature/.npmignore
@@ -1,6 +1,7 @@
.gitmodules
-Makefile
deps
docs
+Makefile
+node_modules
test
tools \ No newline at end of file
diff --git a/deps/npm/node_modules/request/node_modules/http-signature/README.md b/deps/npm/node_modules/request/node_modules/http-signature/README.md
index 3ed2e4640..0c7071492 100644
--- a/deps/npm/node_modules/request/node_modules/http-signature/README.md
+++ b/deps/npm/node_modules/request/node_modules/http-signature/README.md
@@ -1,5 +1,7 @@
+# node-http-signature
+
node-http-signature is a node.js library that has client and server components
-for Joyent's `HTTP Signature Scheme`.
+for Joyent's [HTTP Signature Scheme](http_signing.md).
## Usage
diff --git a/deps/npm/node_modules/request/node_modules/http-signature/http_signing.md b/deps/npm/node_modules/request/node_modules/http-signature/http_signing.md
index 585926cad..ba7321da1 100644
--- a/deps/npm/node_modules/request/node_modules/http-signature/http_signing.md
+++ b/deps/npm/node_modules/request/node_modules/http-signature/http_signing.md
@@ -46,14 +46,15 @@ HTTP `Date` header.
The client is expected to send an Authorization header (as defined in RFC 2617)
with the following parameterization:
- credentials := "Signature" params digitalSignature
- params := 1#(keyId | [algorithm] | [headers] | [ext])
+ credentials := "Signature" params
+ params := 1#(keyId | algorithm | [headers] | [ext] | signature)
digitalSignature := plain-string
keyId := "keyId" "=" <"> plain-string <">
algorithm := "algorithm" "=" <"> plain-string <">
headers := "headers" "=" <"> 1#headers-value <">
ext := "ext" "=" <"> plain-string <">
+ signature := "signature" "=" <"> plain-string <">
headers-value := plain-string
plain-string = 1*( %x20-21 / %x23-5B / %x5D-7E )
@@ -92,20 +93,26 @@ OPTIONAL. The `extensions` parameter is used to include additional information
which is covered by the request. The content and format of the string is out of
scope for this document, and expected to be specified by implementors.
-### Digital Signature
+#### signature
-The `digitalSignature` portion of the credentials is a REQUIRED field, and is
+REQUIRED. The `signature` parameter is a `Base64` encoded digital signature
generated by the client. The client uses the `algorithm` and `headers` request
parameters to form a canonicalized `signing string`. This `signing string` is
-then signed with the key associated with `keyId` and the algorithm corresponding
-to `algorithm`. The result is then `Base64` encoded.
+then signed with the key associated with `keyId` and the algorithm
+corresponding to `algorithm`. The `signature` parameter is then set to the
+`Base64` encoding of the signature.
### Signing String Composition
-In order to generate the string that is signed with a key, the client MUST
-take the values of each HTTP header specified by `headers`, in the order they
-appear, and separate with an ASCII newline `\n`. The last header in the list
-MUST NOT include a trailing ASCII newline.
+In order to generate the string that is signed with a key, the client MUST take
+the values of each HTTP header specified by `headers` in the order they appear.
+
+1. If the header name is not `request-line` then append the lowercased header
+ name followed with an ASCII colon `:` and an ASCII space ` `.
+2. If the header name is `request-line` then appened the HTTP request line,
+ otherwise append the header value.
+3. If value is not the last value then append an ASCII newline `\n`. The string
+ MUST NOT include a trailing ASCII newline.
# Example Requests
@@ -118,24 +125,43 @@ All requests refer to the following request (body ommitted):
Content-MD5: h0auK8hnYJKmHTLhKtMTkQ==
Content-Length: 123
+The "rsa-key-1" keyId refers to a private key known to the client and a public
+key known to the server. The "hmac-key-1" keyId refers to key known to the
+client and server.
+
## Default parameterization
- Authorization: Signature keyId="123" Base64(RSA-SHA256(Tue, 07 Jun 2011 20:51:35 GMT))
+The authorization header and signature would be generated as:
+
+ Authorization: Signature keyId="rsa-key-1",algorithm="rsa-sha256",signature="Base64(RSA-SHA256(signing string))"
+
+The client would compose the signing string as:
+
+ date: Tue, 07 Jun 2011 20:51:35 GMT
## Header List
- Authorization: Signature keyId="123",headers="content-type Date content-md5" Base64(RSA-SHA256(Tue, 07 Jun 2011 20:51:35 GMT))
+The authorization header and signature would be generated as:
+
+ Authorization: Signature keyId="rsa-key-1",algorithm="rsa-sha256",headers="request-line date content-type content-md5",signature="Base64(RSA-SHA256(signing string))"
The client would compose the signing string as (`+ "\n"` inserted for
readability):
- application/json + "\n"
- Tue, 07 Jun 2011 20:51:35 GMT + "\n"
- h0auK8hnYJKmHTLhKtMTkQ==
+ POST /foo HTTP/1.1 + "\n"
+ date: Tue, 07 Jun 2011 20:51:35 GMT + "\n"
+ content-type: application/json + "\n"
+ content-md5: h0auK8hnYJKmHTLhKtMTkQ==
## Algorithm
- Authorization: Signature keyId="123",algorithm="hmac-sha1" Base64(HMAC-SHA1(Tue, 07 Jun 2011 20:51:35 GMT))
+The authorization header and signature would be generated as:
+
+ Authorization: Signature keyId="hmac-key-1",algorithm="hmac-sha1",signature="Base64(HMAC-SHA1(signing string))"
+
+The client would compose the signing string as:
+
+ date: Tue, 07 Jun 2011 20:51:35 GMT
# Signing Algorithms
@@ -144,6 +170,7 @@ Currently supported algorithm names are:
* rsa-sha1
* rsa-sha256
* rsa-sha512
+* dsa-sha1
* hmac-sha1
* hmac-sha256
* hmac-sha512
@@ -245,29 +272,25 @@ And all examples use this request:
The string to sign would be:
-```
-Thu, 05 Jan 2012 21:31:40 GMT
-```
+ date: Thu, 05 Jan 2012 21:31:40 GMT
The Authorization header would be:
- Authorization: Signature keyId="Test",algorithm="rsa-sha256" MDyO5tSvin5FBVdq3gMBTwtVgE8U/JpzSwFvY7gu7Q2tiZ5TvfHzf/RzmRoYwO8PoV1UGaw6IMwWzxDQkcoYOwvG/w4ljQBBoNusO/mYSvKrbqxUmZi8rNtrMcb82MS33bai5IeLnOGl31W1UbL4qE/wL8U9wCPGRJlCFLsTgD8=
+ Authorization: Signature keyId="Test",algorithm="rsa-sha256",signature="JldXnt8W9t643M2Sce10gqCh/+E7QIYLiI+bSjnFBGCti7s+mPPvOjVb72sbd1FjeOUwPTDpKbrQQORrm+xBYfAwCxF3LBSSzORvyJ5nRFCFxfJ3nlQD6Kdxhw8wrVZX5nSem4A/W3C8qH5uhFTRwF4ruRjh+ENHWuovPgO/HGQ="
### All Headers
-Parameterized to include all headers, the string to sign would be:
+Parameterized to include all headers, the string to sign would be (`+ "\n"`
+inserted for readability):
-```
-/foo?param=value&pet=dog HTTP/1.1
-example.com
-Thu, 05 Jan 2012 21:31:40 GMT
-application/json
-Sd/dVLAcvNLSq16eXua5uQ==
-18
-```
+ POST /foo?param=value&pet=dog HTTP/1.1 + "\n"
+ host: example.com + "\n"
+ date: Thu, 05 Jan 2012 21:31:40 GMT + "\n"
+ content-type: application/json + "\n"
+ content-md5: Sd/dVLAcvNLSq16eXua5uQ== + "\n"
+ content-length: 18
The Authorization header would be:
- Authorization: Signature
- keyId="Test",algorithm="rsa-sha256",headers="request-line host date content-type content-md5 content-length" gVrKP7wVh1+FmWbNlhj0pNXIe9XmeOA6EcnoOKAvUILnwaMFzaKaam9UmeDPwjC9TdT+jSRqjtyZE49kZcSpYAHxGlPQ4ziXFRfPprlN/3Xwg3sUOGqbBiS3WFuY3QOOWv4tzc5p70g74U/QvHNNiYMcjoz89vRJhefbFSNwCDs=
+ Authorization: Signature keyId="Test",algorithm="rsa-sha256",headers="request-line host date content-type content-md5 content-length",signature="Gm7W/r+e90REDpWytALMrft4MqZxCmslOTOvwJX17ViEBA5E65QqvWI0vIH3l/vSsGiaMVmuUgzYsJLYMLcm5dGrv1+a+0fCoUdVKPZWHyImQEqpLkopVwqEH67LVECFBqFTAKlQgBn676zrfXQbb+b/VebAsNUtvQMe6cTjnDY="
diff --git a/deps/npm/node_modules/request/node_modules/http-signature/lib/parser.js b/deps/npm/node_modules/request/node_modules/http-signature/lib/parser.js
index 98a5ee5dc..fd9ac1022 100644
--- a/deps/npm/node_modules/request/node_modules/http-signature/lib/parser.js
+++ b/deps/npm/node_modules/request/node_modules/http-signature/lib/parser.js
@@ -19,13 +19,14 @@ var Algorithms = {
var State = {
New: 0,
- Params: 1,
- Signature: 2
+ Params: 1
};
var ParamsState = {
Name: 0,
- Value: 1
+ Quote: 1,
+ Value: 2,
+ Comma: 3
};
@@ -88,9 +89,9 @@ module.exports = {
* "headers": [
* "date" or "x-date",
* "content-md5"
- * ]
+ * ],
+ * "signature": "base64"
* },
- * "signature": "base64",
* "signingString": "ready to be passed to crypto.verify()"
* }
*
@@ -138,7 +139,6 @@ module.exports = {
var parsed = {
scheme: '',
params: {},
- signature: '',
signingString: '',
get algorithm() {
@@ -166,24 +166,44 @@ module.exports = {
switch (Number(substate)) {
case ParamsState.Name:
+ var code = c.charCodeAt(0);
+ // restricted name of A-Z / a-z
+ if ((code >= 0x41 && code <= 0x5a) || // A-Z
+ (code >= 0x61 && code <= 0x7a)) { // a-z
+ tmpName += c;
+ } else if (c === '=') {
+ if (tmpName.length === 0)
+ throw new InvalidHeaderError('bad param format');
+ substate = ParamsState.Quote;
+ } else {
+ throw new InvalidHeaderError('bad param format');
+ }
+ break;
+
+ case ParamsState.Quote:
if (c === '"') {
- parsed.params[tmpName] = '';
tmpValue = '';
substate = ParamsState.Value;
- } else if (c === ' ') {
- state = State.Signature;
- } else if (c !== '=' && c !== ',') {
- tmpName += c;
+ } else {
+ throw new InvalidHeaderError('bad param format');
}
break;
case ParamsState.Value:
if (c === '"') {
parsed.params[tmpName] = tmpValue;
+ substate = ParamsState.Comma;
+ } else {
+ tmpValue += c;
+ }
+ break;
+
+ case ParamsState.Comma:
+ if (c === ',') {
tmpName = '';
substate = ParamsState.Name;
} else {
- tmpValue += c;
+ throw new InvalidHeaderError('bad param format');
}
break;
@@ -192,11 +212,6 @@ module.exports = {
}
break;
-
- case State.Signature:
- parsed.signature += c;
- break;
-
default:
throw new Error('Invalid substate');
}
@@ -223,8 +238,8 @@ module.exports = {
if (!parsed.params.algorithm)
throw new InvalidHeaderError('algorithm was not specified');
- if (!parsed.signature)
- throw new InvalidHeaderError('signature was empty');
+ if (!parsed.params.signature)
+ throw new InvalidHeaderError('signature was not specified');
// Check the algorithm against the official list
parsed.params.algorithm = parsed.params.algorithm.toLowerCase();
@@ -237,17 +252,16 @@ module.exports = {
var h = parsed.params.headers[i].toLowerCase();
parsed.params.headers[i] = h;
- var value;
if (h !== 'request-line') {
- value = request.headers[h];
+ var value = request.headers[h];
if (!value)
throw new MissingHeaderError(h + ' was not in the request');
+ parsed.signingString += h + ': ' + value;
} else {
- value =
+ parsed.signingString +=
request.method + ' ' + request.url + ' HTTP/' + request.httpVersion;
}
- parsed.signingString += value;
if ((i + 1) < parsed.params.headers.length)
parsed.signingString += '\n';
}
diff --git a/deps/npm/node_modules/request/node_modules/http-signature/lib/signer.js b/deps/npm/node_modules/request/node_modules/http-signature/lib/signer.js
index cc750ce73..8095f0d17 100644
--- a/deps/npm/node_modules/request/node_modules/http-signature/lib/signer.js
+++ b/deps/npm/node_modules/request/node_modules/http-signature/lib/signer.js
@@ -20,7 +20,8 @@ var Algorithms = {
'hmac-sha512': true
};
-var Authorization = 'Signature keyId="%s",algorithm="%s",headers="%s" %s';
+var Authorization =
+ 'Signature keyId="%s",algorithm="%s",headers="%s",signature="%s"';
@@ -101,6 +102,7 @@ module.exports = {
* - {String} key required (either a PEM or HMAC key).
* - {Array} headers optional; defaults to ['date'].
* - {String} algorithm optional; defaults to 'rsa-sha256'.
+ * - {String} httpVersion optional; defaults to '1.1'.
* @return {Boolean} true if Authorization (and optionally Date) were added.
* @throws {TypeError} on bad parameter types (input).
* @throws {InvalidAlgorithmError} if algorithm was bad.
@@ -113,6 +115,7 @@ module.exports = {
assert.optionalString(options.algorithm, 'options.algorithm');
assert.string(options.keyId, 'options.keyId');
assert.optionalArrayOfString(options.headers, 'options.headers');
+ assert.optionalString(options.httpVersion, 'options.httpVersion');
if (!request.getHeader('Date'))
request.setHeader('Date', _rfc1123());
@@ -120,6 +123,8 @@ module.exports = {
options.headers = ['date'];
if (!options.algorithm)
options.algorithm = 'rsa-sha256';
+ if (!options.httpVersion)
+ options.httpVersion = '1.1';
options.algorithm = options.algorithm.toLowerCase();
@@ -133,18 +138,19 @@ module.exports = {
throw new TypeError('options.headers must be an array of Strings');
var h = options.headers[i].toLowerCase();
- request.getHeader(h);
- var value = request.getHeader(h);
- if (!value) {
- if (h === 'request-line') {
- value = request.method + ' ' + request.path + ' HTTP/1.1';
- } else {
+ if (h !== 'request-line') {
+ var value = request.getHeader(h);
+ if (!value) {
throw new MissingHeaderError(h + ' was not in the request');
}
+ stringToSign += h + ': ' + value;
+ } else {
+ value =
+ stringToSign +=
+ request.method + ' ' + request.path + ' HTTP/' + options.httpVersion;
}
- stringToSign += value;
if ((i + 1) < options.headers.length)
stringToSign += '\n';
}
diff --git a/deps/npm/node_modules/request/node_modules/http-signature/lib/verify.js b/deps/npm/node_modules/request/node_modules/http-signature/lib/verify.js
index 0846c7980..5bf958964 100644
--- a/deps/npm/node_modules/request/node_modules/http-signature/lib/verify.js
+++ b/deps/npm/node_modules/request/node_modules/http-signature/lib/verify.js
@@ -29,13 +29,13 @@ module.exports = {
parsedSignature.algorithm);
if (alg[1] === 'HMAC') {
- var hmac = crypto.createHmac(alg[2].toLowerCase(), key);
+ var hmac = crypto.createHmac(alg[2].toUpperCase(), key);
hmac.update(parsedSignature.signingString);
- return (hmac.digest('base64') === parsedSignature.signature);
+ return (hmac.digest('base64') === parsedSignature.params.signature);
} else {
var verify = crypto.createVerify(alg[0]);
verify.update(parsedSignature.signingString);
- return verify.verify(key, parsedSignature.signature, 'base64');
+ return verify.verify(key, parsedSignature.params.signature, 'base64');
}
}
diff --git a/deps/npm/node_modules/request/node_modules/http-signature/node_modules/asn1/package.json b/deps/npm/node_modules/request/node_modules/http-signature/node_modules/asn1/package.json
index 5d7916827..79f0b054f 100644
--- a/deps/npm/node_modules/request/node_modules/http-signature/node_modules/asn1/package.json
+++ b/deps/npm/node_modules/request/node_modules/http-signature/node_modules/asn1/package.json
@@ -37,6 +37,7 @@
"bugs": {
"url": "https://github.com/mcavage/node-asn1/issues"
},
+ "homepage": "https://github.com/mcavage/node-asn1",
"_id": "asn1@0.1.11",
"_from": "asn1@0.1.11"
}
diff --git a/deps/npm/node_modules/request/node_modules/http-signature/package.json b/deps/npm/node_modules/request/node_modules/http-signature/package.json
index 4fe460403..94bd8e79f 100644
--- a/deps/npm/node_modules/request/node_modules/http-signature/package.json
+++ b/deps/npm/node_modules/request/node_modules/http-signature/package.json
@@ -4,7 +4,7 @@
},
"name": "http-signature",
"description": "Reference implementation of Joyent's HTTP Signature Scheme",
- "version": "0.9.11",
+ "version": "0.10.0",
"repository": {
"type": "git",
"url": "git://github.com/joyent/node-http-signature.git"
@@ -23,13 +23,14 @@
},
"devDependencies": {
"node-uuid": "1.4.0",
- "tap": "0.3.1"
+ "tap": "0.4.2"
},
- "readme": "node-http-signature is a node.js library that has client and server components\nfor Joyent's `HTTP Signature Scheme`.\n\n## Usage\n\nNote the example below signs a request with the same key/cert used to start an\nHTTP server. This is almost certainly not what you actaully want, but is just\nused to illustrate the API calls; you will need to provide your own key\nmanagement in addition to this library.\n\n### Client\n\n var fs = require('fs');\n var https = require('https');\n var httpSignature = require('http-signature');\n\n var key = fs.readFileSync('./key.pem', 'ascii');\n\n var options = {\n host: 'localhost',\n port: 8443,\n path: '/',\n method: 'GET',\n headers: {}\n };\n\n // Adds a 'Date' header in, signs it, and adds the\n // 'Authorization' header in.\n var req = https.request(options, function(res) {\n console.log(res.statusCode);\n });\n\n\n httpSignature.sign(req, {\n key: key,\n keyId: './cert.pem'\n });\n\n req.end();\n\n### Server\n\n var fs = require('fs');\n var https = require('https');\n var httpSignature = require('http-signature');\n\n var options = {\n key: fs.readFileSync('./key.pem'),\n cert: fs.readFileSync('./cert.pem')\n };\n\n https.createServer(options, function (req, res) {\n var rc = 200;\n var parsed = httpSignature.parseRequest(req);\n var pub = fs.readFileSync(parsed.keyId, 'ascii');\n if (!httpSignature.verifySignature(parsed, pub))\n rc = 401;\n\n res.writeHead(rc);\n res.end();\n }).listen(8443);\n\n## Installation\n\n npm install http-signature\n\n## License\n\nMIT.\n\n## Bugs\n\nSee <https://github.com/joyent/node-http-signature/issues>.\n",
+ "readme": "# node-http-signature\n\nnode-http-signature is a node.js library that has client and server components\nfor Joyent's [HTTP Signature Scheme](http_signing.md).\n\n## Usage\n\nNote the example below signs a request with the same key/cert used to start an\nHTTP server. This is almost certainly not what you actaully want, but is just\nused to illustrate the API calls; you will need to provide your own key\nmanagement in addition to this library.\n\n### Client\n\n var fs = require('fs');\n var https = require('https');\n var httpSignature = require('http-signature');\n\n var key = fs.readFileSync('./key.pem', 'ascii');\n\n var options = {\n host: 'localhost',\n port: 8443,\n path: '/',\n method: 'GET',\n headers: {}\n };\n\n // Adds a 'Date' header in, signs it, and adds the\n // 'Authorization' header in.\n var req = https.request(options, function(res) {\n console.log(res.statusCode);\n });\n\n\n httpSignature.sign(req, {\n key: key,\n keyId: './cert.pem'\n });\n\n req.end();\n\n### Server\n\n var fs = require('fs');\n var https = require('https');\n var httpSignature = require('http-signature');\n\n var options = {\n key: fs.readFileSync('./key.pem'),\n cert: fs.readFileSync('./cert.pem')\n };\n\n https.createServer(options, function (req, res) {\n var rc = 200;\n var parsed = httpSignature.parseRequest(req);\n var pub = fs.readFileSync(parsed.keyId, 'ascii');\n if (!httpSignature.verifySignature(parsed, pub))\n rc = 401;\n\n res.writeHead(rc);\n res.end();\n }).listen(8443);\n\n## Installation\n\n npm install http-signature\n\n## License\n\nMIT.\n\n## Bugs\n\nSee <https://github.com/joyent/node-http-signature/issues>.\n",
"readmeFilename": "README.md",
"bugs": {
"url": "https://github.com/joyent/node-http-signature/issues"
},
- "_id": "http-signature@0.9.11",
- "_from": "http-signature@~0.9.11"
+ "homepage": "https://github.com/joyent/node-http-signature",
+ "_id": "http-signature@0.10.0",
+ "_from": "http-signature@~0.10.0"
}
diff --git a/deps/npm/node_modules/request/node_modules/json-stringify-safe/README.md b/deps/npm/node_modules/request/node_modules/json-stringify-safe/README.md
index c0537a9c3..5d764f3a4 100644
--- a/deps/npm/node_modules/request/node_modules/json-stringify-safe/README.md
+++ b/deps/npm/node_modules/request/node_modules/json-stringify-safe/README.md
@@ -25,3 +25,25 @@ Output:
]
}
```
+
+## Details
+
+```
+stringify(obj, serializer, indent, decycler)
+```
+
+The first three arguments are the same as to JSON.stringify. The last
+is an argument that's only used when the object has been seen already.
+
+The default `decycler` function returns the string `'[Circular]'`.
+If, for example, you pass in `function(k,v){}` (return nothing) then it
+will prune cycles. If you pass in `function(k,v){ return {foo: 'bar'}}`,
+then cyclical objects will always be represented as `{"foo":"bar"}` in
+the result.
+
+```
+stringify.getSerialize(serializer, decycler)
+```
+
+Returns a serializer that can be used elsewhere. This is the actual
+function that's passed to JSON.stringify.
diff --git a/deps/npm/node_modules/request/node_modules/json-stringify-safe/package.json b/deps/npm/node_modules/request/node_modules/json-stringify-safe/package.json
index faaaadc47..322c23a5a 100644
--- a/deps/npm/node_modules/request/node_modules/json-stringify-safe/package.json
+++ b/deps/npm/node_modules/request/node_modules/json-stringify-safe/package.json
@@ -1,6 +1,6 @@
{
"name": "json-stringify-safe",
- "version": "4.0.0",
+ "version": "5.0.0",
"description": "Like JSON.stringify, but doesn't blow up on circular refs",
"main": "stringify.js",
"scripts": {
@@ -23,10 +23,11 @@
},
"license": "BSD",
"readmeFilename": "README.md",
- "readme": "# json-stringify-safe\n\nLike JSON.stringify, but doesn't throw on circular references.\n\n## Usage\n\nTakes the same arguments as `JSON.stringify`.\n\n```javascript\nvar stringify = require('json-stringify-safe');\nvar circularObj = {};\ncircularObj.circularRef = circularObj;\ncircularObj.list = [ circularObj, circularObj ];\nconsole.log(stringify(circularObj, null, 2));\n```\n\nOutput:\n\n```json\n{\n \"circularRef\": \"[Circular]\",\n \"list\": [\n \"[Circular]\",\n \"[Circular]\"\n ]\n}\n```\n",
+ "readme": "# json-stringify-safe\n\nLike JSON.stringify, but doesn't throw on circular references.\n\n## Usage\n\nTakes the same arguments as `JSON.stringify`.\n\n```javascript\nvar stringify = require('json-stringify-safe');\nvar circularObj = {};\ncircularObj.circularRef = circularObj;\ncircularObj.list = [ circularObj, circularObj ];\nconsole.log(stringify(circularObj, null, 2));\n```\n\nOutput:\n\n```json\n{\n \"circularRef\": \"[Circular]\",\n \"list\": [\n \"[Circular]\",\n \"[Circular]\"\n ]\n}\n```\n\n## Details\n\n```\nstringify(obj, serializer, indent, decycler)\n```\n\nThe first three arguments are the same as to JSON.stringify. The last\nis an argument that's only used when the object has been seen already.\n\nThe default `decycler` function returns the string `'[Circular]'`.\nIf, for example, you pass in `function(k,v){}` (return nothing) then it\nwill prune cycles. If you pass in `function(k,v){ return {foo: 'bar'}}`,\nthen cyclical objects will always be represented as `{\"foo\":\"bar\"}` in\nthe result.\n\n```\nstringify.getSerialize(serializer, decycler)\n```\n\nReturns a serializer that can be used elsewhere. This is the actual\nfunction that's passed to JSON.stringify.\n",
"bugs": {
"url": "https://github.com/isaacs/json-stringify-safe/issues"
},
- "_id": "json-stringify-safe@4.0.0",
- "_from": "json-stringify-safe@~4.0.0"
+ "homepage": "https://github.com/isaacs/json-stringify-safe",
+ "_id": "json-stringify-safe@5.0.0",
+ "_from": "json-stringify-safe@~5.0.0"
}
diff --git a/deps/npm/node_modules/request/node_modules/json-stringify-safe/stringify.js b/deps/npm/node_modules/request/node_modules/json-stringify-safe/stringify.js
index de14349ad..853ef9b23 100644
--- a/deps/npm/node_modules/request/node_modules/json-stringify-safe/stringify.js
+++ b/deps/npm/node_modules/request/node_modules/json-stringify-safe/stringify.js
@@ -1,23 +1,37 @@
module.exports = stringify;
function getSerialize (fn, decycle) {
- var seen = [];
+ var seen = [], keys = [];
decycle = decycle || function(key, value) {
- return '[Circular]';
+ return '[Circular ' + getPath(value, seen, keys) + ']'
};
return function(key, value) {
var ret = value;
if (typeof value === 'object' && value) {
if (seen.indexOf(value) !== -1)
ret = decycle(key, value);
- else
+ else {
seen.push(value);
+ keys.push(key);
+ }
}
if (fn) ret = fn(key, ret);
return ret;
}
}
+function getPath (value, seen, keys) {
+ var index = seen.indexOf(value);
+ var path = [ keys[index] ];
+ for (index--; index >= 0; index--) {
+ if (seen[index][ path[0] ] === value) {
+ value = seen[index];
+ path.unshift(keys[index]);
+ }
+ }
+ return '~' + path.join('.');
+}
+
function stringify(obj, fn, spaces, decycle) {
return JSON.stringify(obj, getSerialize(fn, decycle), spaces);
}
diff --git a/deps/npm/node_modules/request/node_modules/json-stringify-safe/test.js b/deps/npm/node_modules/request/node_modules/json-stringify-safe/test.js
index 7f6a01cb7..991e9197c 100644
--- a/deps/npm/node_modules/request/node_modules/json-stringify-safe/test.js
+++ b/deps/npm/node_modules/request/node_modules/json-stringify-safe/test.js
@@ -8,10 +8,10 @@ circularObj.list = [ circularObj, circularObj ];
// default
var testObj = {
"a": "b",
- "circularRef": "[Circular]",
+ "circularRef": "[Circular ~]",
"list": [
- "[Circular]",
- "[Circular]"
+ "[Circular ~]",
+ "[Circular ~]"
]
};
@@ -91,6 +91,38 @@ assert.equal(JSON.stringify(testObj, null, 2),
stringify(circularObj, null, 2, signer));
+///////
+//multi
+var a = { x: 1 };
+a.a = a;
+var b = { x: 2 };
+b.a = a;
+
+var c = { a: a, b: b };
+var d = { list: [ a, b, c ] };
+d.d = d;
+
+var multi = {
+ "list": [
+ {
+ "x": 1,
+ "a": "[Circular ~.list.0]"
+ },
+ {
+ "x": 2,
+ "a": "[Circular ~.list.0]"
+ },
+ {
+ "a": "[Circular ~.list.0]",
+ "b": "[Circular ~.list.1]"
+ }
+ ],
+ "d": "[Circular ~]"
+};
+
+assert.equal(JSON.stringify(multi, null, 2),
+ stringify(d, null, 2));
+
////////
// pass!
console.log('ok');
diff --git a/deps/npm/node_modules/request/node_modules/mime/README.md b/deps/npm/node_modules/request/node_modules/mime/README.md
index b90552a3b..6ca19bd1e 100644
--- a/deps/npm/node_modules/request/node_modules/mime/README.md
+++ b/deps/npm/node_modules/request/node_modules/mime/README.md
@@ -11,7 +11,7 @@ Install with [npm](http://github.com/isaacs/npm):
## API - Queries
### mime.lookup(path)
-Get the mime type associated with a file. Performs a case-insensitive lookup using the extension in `path` (the substring after the last '/' or '.'). E.g.
+Get the mime type associated with a file, if no mime type is found `application/octet-stream` is returned. Performs a case-insensitive lookup using the extension in `path` (the substring after the last '/' or '.'). E.g.
var mime = require('mime');
@@ -20,6 +20,9 @@ Get the mime type associated with a file. Performs a case-insensitive lookup usi
mime.lookup('.TXT'); // => 'text/plain'
mime.lookup('htm'); // => 'text/html'
+### mime.default_type
+Sets the mime type returned when `mime.lookup` fails to find the extension searched for. (Default is `application/octet-stream`.)
+
### mime.extension(type)
Get the default extension for `type`
diff --git a/deps/npm/node_modules/request/node_modules/mime/mime.js b/deps/npm/node_modules/request/node_modules/mime/mime.js
index 70a638424..48be0c5e4 100644
--- a/deps/npm/node_modules/request/node_modules/mime/mime.js
+++ b/deps/npm/node_modules/request/node_modules/mime/mime.js
@@ -69,7 +69,7 @@ Mime.prototype.load = function(file) {
* Lookup a mime type based on extension
*/
Mime.prototype.lookup = function(path, fallback) {
- var ext = path.replace(/.*[\.\/]/, '').toLowerCase();
+ var ext = path.replace(/.*[\.\/\\]/, '').toLowerCase();
return this.types[ext] || fallback || this.default_type;
};
@@ -78,7 +78,8 @@ Mime.prototype.lookup = function(path, fallback) {
* Return file extension associated with a mime type
*/
Mime.prototype.extension = function(mimeType) {
- return this.extensions[mimeType];
+ var type = mimeType.match(/^\s*([^;\s]*)(?:;|\s|$)/)[1].toLowerCase();
+ return this.extensions[type];
};
// Default instance
diff --git a/deps/npm/node_modules/request/node_modules/mime/package.json b/deps/npm/node_modules/request/node_modules/mime/package.json
index dfa9ef5a9..a97593921 100644
--- a/deps/npm/node_modules/request/node_modules/mime/package.json
+++ b/deps/npm/node_modules/request/node_modules/mime/package.json
@@ -24,12 +24,13 @@
"url": "https://github.com/broofa/node-mime",
"type": "git"
},
- "version": "1.2.9",
- "readme": "# mime\n\nComprehensive MIME type mapping API. Includes all 600+ types and 800+ extensions defined by the Apache project, plus additional types submitted by the node.js community.\n\n## Install\n\nInstall with [npm](http://github.com/isaacs/npm):\n\n npm install mime\n\n## API - Queries\n\n### mime.lookup(path)\nGet the mime type associated with a file. Performs a case-insensitive lookup using the extension in `path` (the substring after the last '/' or '.'). E.g.\n\n var mime = require('mime');\n\n mime.lookup('/path/to/file.txt'); // => 'text/plain'\n mime.lookup('file.txt'); // => 'text/plain'\n mime.lookup('.TXT'); // => 'text/plain'\n mime.lookup('htm'); // => 'text/html'\n\n### mime.extension(type)\nGet the default extension for `type`\n\n mime.extension('text/html'); // => 'html'\n mime.extension('application/octet-stream'); // => 'bin'\n\n### mime.charsets.lookup()\n\nMap mime-type to charset\n\n mime.charsets.lookup('text/plain'); // => 'UTF-8'\n\n(The logic for charset lookups is pretty rudimentary. Feel free to suggest improvements.)\n\n## API - Defining Custom Types\n\nThe following APIs allow you to add your own type mappings within your project. If you feel a type should be included as part of node-mime, see [requesting new types](https://github.com/broofa/node-mime/wiki/Requesting-New-Types).\n\n### mime.define()\n\nAdd custom mime/extension mappings\n\n mime.define({\n 'text/x-some-format': ['x-sf', 'x-sft', 'x-sfml'],\n 'application/x-my-type': ['x-mt', 'x-mtt'],\n // etc ...\n });\n\n mime.lookup('x-sft'); // => 'text/x-some-format'\n\nThe first entry in the extensions array is returned by `mime.extension()`. E.g.\n\n mime.extension('text/x-some-format'); // => 'x-sf'\n\n### mime.load(filepath)\n\nLoad mappings from an Apache \".types\" format file\n\n mime.load('./my_project.types');\n\nThe .types file format is simple - See the `types` dir for examples.\n",
+ "version": "1.2.11",
+ "readme": "# mime\n\nComprehensive MIME type mapping API. Includes all 600+ types and 800+ extensions defined by the Apache project, plus additional types submitted by the node.js community.\n\n## Install\n\nInstall with [npm](http://github.com/isaacs/npm):\n\n npm install mime\n\n## API - Queries\n\n### mime.lookup(path)\nGet the mime type associated with a file, if no mime type is found `application/octet-stream` is returned. Performs a case-insensitive lookup using the extension in `path` (the substring after the last '/' or '.'). E.g.\n\n var mime = require('mime');\n\n mime.lookup('/path/to/file.txt'); // => 'text/plain'\n mime.lookup('file.txt'); // => 'text/plain'\n mime.lookup('.TXT'); // => 'text/plain'\n mime.lookup('htm'); // => 'text/html'\n\n### mime.default_type\nSets the mime type returned when `mime.lookup` fails to find the extension searched for. (Default is `application/octet-stream`.)\n\n### mime.extension(type)\nGet the default extension for `type`\n\n mime.extension('text/html'); // => 'html'\n mime.extension('application/octet-stream'); // => 'bin'\n\n### mime.charsets.lookup()\n\nMap mime-type to charset\n\n mime.charsets.lookup('text/plain'); // => 'UTF-8'\n\n(The logic for charset lookups is pretty rudimentary. Feel free to suggest improvements.)\n\n## API - Defining Custom Types\n\nThe following APIs allow you to add your own type mappings within your project. If you feel a type should be included as part of node-mime, see [requesting new types](https://github.com/broofa/node-mime/wiki/Requesting-New-Types).\n\n### mime.define()\n\nAdd custom mime/extension mappings\n\n mime.define({\n 'text/x-some-format': ['x-sf', 'x-sft', 'x-sfml'],\n 'application/x-my-type': ['x-mt', 'x-mtt'],\n // etc ...\n });\n\n mime.lookup('x-sft'); // => 'text/x-some-format'\n\nThe first entry in the extensions array is returned by `mime.extension()`. E.g.\n\n mime.extension('text/x-some-format'); // => 'x-sf'\n\n### mime.load(filepath)\n\nLoad mappings from an Apache \".types\" format file\n\n mime.load('./my_project.types');\n\nThe .types file format is simple - See the `types` dir for examples.\n",
"readmeFilename": "README.md",
"bugs": {
"url": "https://github.com/broofa/node-mime/issues"
},
- "_id": "mime@1.2.9",
+ "homepage": "https://github.com/broofa/node-mime",
+ "_id": "mime@1.2.11",
"_from": "mime@~1.2.9"
}
diff --git a/deps/npm/node_modules/request/node_modules/mime/test.js b/deps/npm/node_modules/request/node_modules/mime/test.js
index cbad034a1..2cda1c7ad 100644
--- a/deps/npm/node_modules/request/node_modules/mime/test.js
+++ b/deps/npm/node_modules/request/node_modules/mime/test.js
@@ -4,6 +4,7 @@
var mime = require('./mime');
var assert = require('assert');
+var path = require('path');
function eq(a, b) {
console.log('Test: ' + a + ' === ' + b);
@@ -17,16 +18,16 @@ console.log(Object.keys(mime.types).length + ' extensions\n');
// Test mime lookups
//
-eq('text/plain', mime.lookup('text.txt'));
-eq('text/plain', mime.lookup('.text.txt'));
-eq('text/plain', mime.lookup('.txt'));
-eq('text/plain', mime.lookup('txt'));
-eq('application/octet-stream', mime.lookup('text.nope'));
-eq('fallback', mime.lookup('text.fallback', 'fallback'));
-eq('application/octet-stream', mime.lookup('constructor'));
-eq('text/plain', mime.lookup('TEXT.TXT'));
-eq('text/event-stream', mime.lookup('text/event-stream'));
-eq('application/x-web-app-manifest+json', mime.lookup('text.webapp'));
+eq('text/plain', mime.lookup('text.txt')); // normal file
+eq('text/plain', mime.lookup('TEXT.TXT')); // uppercase
+eq('text/plain', mime.lookup('dir/text.txt')); // dir + file
+eq('text/plain', mime.lookup('.text.txt')); // hidden file
+eq('text/plain', mime.lookup('.txt')); // nameless
+eq('text/plain', mime.lookup('txt')); // extension-only
+eq('text/plain', mime.lookup('/txt')); // extension-less ()
+eq('text/plain', mime.lookup('\\txt')); // Windows, extension-less
+eq('application/octet-stream', mime.lookup('text.nope')); // unrecognized
+eq('fallback', mime.lookup('text.fallback', 'fallback')); // alternate default
//
// Test extensions
@@ -35,14 +36,23 @@ eq('application/x-web-app-manifest+json', mime.lookup('text.webapp'));
eq('txt', mime.extension(mime.types.text));
eq('html', mime.extension(mime.types.htm));
eq('bin', mime.extension('application/octet-stream'));
-eq(undefined, mime.extension('constructor'));
+eq('bin', mime.extension('application/octet-stream '));
+eq('html', mime.extension(' text/html; charset=UTF-8'));
+eq('html', mime.extension('text/html; charset=UTF-8 '));
+eq('html', mime.extension('text/html; charset=UTF-8'));
+eq('html', mime.extension('text/html ; charset=UTF-8'));
+eq('html', mime.extension('text/html;charset=UTF-8'));
+eq('html', mime.extension('text/Html;charset=UTF-8'));
+eq(undefined, mime.extension('unrecognized'));
//
-// Test node types
+// Test node.types lookups
//
+eq('application/font-woff', mime.lookup('file.woff'));
eq('application/octet-stream', mime.lookup('file.buffer'));
eq('audio/mp4', mime.lookup('file.m4a'));
+eq('font/opentype', mime.lookup('file.otf'));
//
// Test charsets
@@ -52,4 +62,23 @@ eq('UTF-8', mime.charsets.lookup('text/plain'));
eq(undefined, mime.charsets.lookup(mime.types.js));
eq('fallback', mime.charsets.lookup('application/octet-stream', 'fallback'));
+//
+// Test for overlaps between mime.types and node.types
+//
+
+var apacheTypes = new mime.Mime(), nodeTypes = new mime.Mime();
+apacheTypes.load(path.join(__dirname, 'types/mime.types'));
+nodeTypes.load(path.join(__dirname, 'types/node.types'));
+
+var keys = [].concat(Object.keys(apacheTypes.types))
+ .concat(Object.keys(nodeTypes.types));
+keys.sort();
+for (var i = 1; i < keys.length; i++) {
+ if (keys[i] == keys[i-1]) {
+ console.warn('Warning: ' +
+ 'node.types defines ' + keys[i] + '->' + nodeTypes.types[keys[i]] +
+ ', mime.types defines ' + keys[i] + '->' + apacheTypes.types[keys[i]]);
+ }
+}
+
console.log('\nOK');
diff --git a/deps/npm/node_modules/request/node_modules/mime/types/mime.types b/deps/npm/node_modules/request/node_modules/mime/types/mime.types
index b90b16587..da8cd6918 100644
--- a/deps/npm/node_modules/request/node_modules/mime/types/mime.types
+++ b/deps/npm/node_modules/request/node_modules/mime/types/mime.types
@@ -1054,7 +1054,7 @@ application/x-font-snf snf
# application/x-font-sunos-news
application/x-font-ttf ttf ttc
application/x-font-type1 pfa pfb pfm afm
-application/x-font-woff woff
+application/font-woff woff
# application/x-font-vfont
application/x-freearc arc
application/x-futuresplash spl
diff --git a/deps/npm/node_modules/request/node_modules/mime/types/node.types b/deps/npm/node_modules/request/node_modules/mime/types/node.types
index 970a1bd85..55b2cf794 100644
--- a/deps/npm/node_modules/request/node_modules/mime/types/node.types
+++ b/deps/npm/node_modules/request/node_modules/mime/types/node.types
@@ -15,11 +15,11 @@ application/x-chrome-extension crx
# Added by: niftylettuce
text/x-component htc
-# What: HTML5 application cache manifest
+# What: HTML5 application cache manifes ('.manifest' extension)
# Why: De-facto standard. Required by Mozilla browser when serving HTML5 apps
# per https://developer.mozilla.org/en/offline_resources_in_firefox
# Added by: louisremi
-text/cache-manifest appcache manifest
+text/cache-manifest manifest
# What: node binary buffer format
# Why: semi-standard extension w/in the node community
@@ -58,3 +58,20 @@ application/x-lua-bytecode luac
# Why: http://stackoverflow.com/questions/10701983/what-is-the-mime-type-for-markdown
# Added by: avoidwork
text/x-markdown markdown md mkd
+
+# What: ini files
+# Why: because they're just text files
+# Added by: Matthew Kastor
+text/plain ini
+
+# What: DASH Adaptive Streaming manifest
+# Why: https://developer.mozilla.org/en-US/docs/DASH_Adaptive_Streaming_for_HTML_5_Video
+# Added by: eelcocramer
+application/dash+xml mdp
+
+# What: OpenType font files - http://www.microsoft.com/typography/otspec/
+# Why: Browsers usually ignore the font MIME types and sniff the content,
+# but Chrome, shows a warning if OpenType fonts aren't served with
+# the `font/opentype` MIME type: http://i.imgur.com/8c5RN8M.png.
+# Added by: alrra
+font/opentype otf
diff --git a/deps/npm/node_modules/request/node_modules/node-uuid/LICENSE.md b/deps/npm/node_modules/request/node_modules/node-uuid/LICENSE.md
index bcdddf9a0..f039427fa 100644
--- a/deps/npm/node_modules/request/node_modules/node-uuid/LICENSE.md
+++ b/deps/npm/node_modules/request/node_modules/node-uuid/LICENSE.md
@@ -1,3 +1,2 @@
-Copyright (c) 2010 Robert Kieffer
-
-Dual licensed under the [MIT](http://en.wikipedia.org/wiki/MIT_License) and [GPL](http://en.wikipedia.org/wiki/GNU_General_Public_License) licenses.
+Copyright (c) 2010-2012 Robert Kieffer
+MIT License - http://opensource.org/licenses/mit-license.php
diff --git a/deps/npm/node_modules/request/node_modules/node-uuid/README.md b/deps/npm/node_modules/request/node_modules/node-uuid/README.md
index d62f7a14d..e436a89f8 100644
--- a/deps/npm/node_modules/request/node_modules/node-uuid/README.md
+++ b/deps/npm/node_modules/request/node_modules/node-uuid/README.md
@@ -6,6 +6,7 @@ Features:
* Generate RFC4122 version 1 or version 4 UUIDs
* Runs in node.js and all browsers.
+* Registered as a [ComponentJS](https://github.com/component/component) [component](https://github.com/component/component/wiki/Components) ('broofa/node-uuid').
* Cryptographically strong random # generation on supporting platforms
* 1.1K minified and gzip'ed (Want something smaller? Check this [crazy shit](https://gist.github.com/982883) out! )
* [Annotated source code](http://broofa.github.com/node-uuid/docs/uuid.html)
@@ -189,15 +190,18 @@ For browser performance [checkout the JSPerf tests](http://jsperf.com/node-uuid-
## Release notes
-v1.4
+### 1.4.0
+
* Improved module context detection
* Removed public RNG functions
-v1.3.2:
+### 1.3.2
+
* Improve tests and handling of v1() options (Issue #24)
* Expose RNG option to allow for perf testing with different generators
-v1.3:
+### 1.3.0
+
* Support for version 1 ids, thanks to [@ctavan](https://github.com/ctavan)!
* Support for node.js crypto API
* De-emphasizing performance in favor of a) cryptographic quality PRNGs where available and b) more manageable code
diff --git a/deps/npm/node_modules/request/node_modules/node-uuid/component.json b/deps/npm/node_modules/request/node_modules/node-uuid/component.json
new file mode 100644
index 000000000..ace213481
--- /dev/null
+++ b/deps/npm/node_modules/request/node_modules/node-uuid/component.json
@@ -0,0 +1,18 @@
+{
+ "name": "node-uuid",
+ "repo": "broofa/node-uuid",
+ "description": "Rigorous implementation of RFC4122 (v1 and v4) UUIDs.",
+ "version": "1.4.0",
+ "author": "Robert Kieffer <robert@broofa.com>",
+ "contributors": [
+ {"name": "Christoph Tavan <dev@tavan.de>", "github": "https://github.com/ctavan"}
+ ],
+ "keywords": ["uuid", "guid", "rfc4122"],
+ "dependencies": {},
+ "development": {},
+ "main": "uuid.js",
+ "scripts": [
+ "uuid.js"
+ ],
+ "license": "MIT"
+} \ No newline at end of file
diff --git a/deps/npm/node_modules/request/node_modules/node-uuid/package.json b/deps/npm/node_modules/request/node_modules/node-uuid/package.json
index 11733e8f5..22ea8648d 100644
--- a/deps/npm/node_modules/request/node_modules/node-uuid/package.json
+++ b/deps/npm/node_modules/request/node_modules/node-uuid/package.json
@@ -23,12 +23,13 @@
"type": "git",
"url": "https://github.com/broofa/node-uuid.git"
},
- "version": "1.4.0",
- "readme": "# node-uuid\n\nSimple, fast generation of [RFC4122](http://www.ietf.org/rfc/rfc4122.txt) UUIDS.\n\nFeatures:\n\n* Generate RFC4122 version 1 or version 4 UUIDs\n* Runs in node.js and all browsers.\n* Cryptographically strong random # generation on supporting platforms\n* 1.1K minified and gzip'ed (Want something smaller? Check this [crazy shit](https://gist.github.com/982883) out! )\n* [Annotated source code](http://broofa.github.com/node-uuid/docs/uuid.html)\n\n## Getting Started\n\nInstall it in your browser:\n\n```html\n<script src=\"uuid.js\"></script>\n```\n\nOr in node.js:\n\n```\nnpm install node-uuid\n```\n\n```javascript\nvar uuid = require('node-uuid');\n```\n\nThen create some ids ...\n\n```javascript\n// Generate a v1 (time-based) id\nuuid.v1(); // -> '6c84fb90-12c4-11e1-840d-7b25c5ee775a'\n\n// Generate a v4 (random) id\nuuid.v4(); // -> '110ec58a-a0f2-4ac4-8393-c866d813b8d1'\n```\n\n## API\n\n### uuid.v1([`options` [, `buffer` [, `offset`]]])\n\nGenerate and return a RFC4122 v1 (timestamp-based) UUID.\n\n* `options` - (Object) Optional uuid state to apply. Properties may include:\n\n * `node` - (Array) Node id as Array of 6 bytes (per 4.1.6). Default: Randomly generated ID. See note 1.\n * `clockseq` - (Number between 0 - 0x3fff) RFC clock sequence. Default: An internally maintained clockseq is used.\n * `msecs` - (Number | Date) Time in milliseconds since unix Epoch. Default: The current time is used.\n * `nsecs` - (Number between 0-9999) additional time, in 100-nanosecond units. Ignored if `msecs` is unspecified. Default: internal uuid counter is used, as per 4.2.1.2.\n\n* `buffer` - (Array | Buffer) Array or buffer where UUID bytes are to be written.\n* `offset` - (Number) Starting index in `buffer` at which to begin writing.\n\nReturns `buffer`, if specified, otherwise the string form of the UUID\n\nNotes:\n\n1. The randomly generated node id is only guaranteed to stay constant for the lifetime of the current JS runtime. (Future versions of this module may use persistent storage mechanisms to extend this guarantee.)\n\nExample: Generate string UUID with fully-specified options\n\n```javascript\nuuid.v1({\n node: [0x01, 0x23, 0x45, 0x67, 0x89, 0xab],\n clockseq: 0x1234,\n msecs: new Date('2011-11-01').getTime(),\n nsecs: 5678\n}); // -> \"710b962e-041c-11e1-9234-0123456789ab\"\n```\n\nExample: In-place generation of two binary IDs\n\n```javascript\n// Generate two ids in an array\nvar arr = new Array(32); // -> []\nuuid.v1(null, arr, 0); // -> [02 a2 ce 90 14 32 11 e1 85 58 0b 48 8e 4f c1 15]\nuuid.v1(null, arr, 16); // -> [02 a2 ce 90 14 32 11 e1 85 58 0b 48 8e 4f c1 15 02 a3 1c b0 14 32 11 e1 85 58 0b 48 8e 4f c1 15]\n\n// Optionally use uuid.unparse() to get stringify the ids\nuuid.unparse(buffer); // -> '02a2ce90-1432-11e1-8558-0b488e4fc115'\nuuid.unparse(buffer, 16) // -> '02a31cb0-1432-11e1-8558-0b488e4fc115'\n```\n\n### uuid.v4([`options` [, `buffer` [, `offset`]]])\n\nGenerate and return a RFC4122 v4 UUID.\n\n* `options` - (Object) Optional uuid state to apply. Properties may include:\n\n * `random` - (Number[16]) Array of 16 numbers (0-255) to use in place of randomly generated values\n * `rng` - (Function) Random # generator to use. Set to one of the built-in generators - `uuid.mathRNG` (all platforms), `uuid.nodeRNG` (node.js only), `uuid.whatwgRNG` (WebKit only) - or a custom function that returns an array[16] of byte values.\n\n* `buffer` - (Array | Buffer) Array or buffer where UUID bytes are to be written.\n* `offset` - (Number) Starting index in `buffer` at which to begin writing.\n\nReturns `buffer`, if specified, otherwise the string form of the UUID\n\nExample: Generate string UUID with fully-specified options\n\n```javascript\nuuid.v4({\n random: [\n 0x10, 0x91, 0x56, 0xbe, 0xc4, 0xfb, 0xc1, 0xea,\n 0x71, 0xb4, 0xef, 0xe1, 0x67, 0x1c, 0x58, 0x36\n ]\n});\n// -> \"109156be-c4fb-41ea-b1b4-efe1671c5836\"\n```\n\nExample: Generate two IDs in a single buffer\n\n```javascript\nvar buffer = new Array(32); // (or 'new Buffer' in node.js)\nuuid.v4(null, buffer, 0);\nuuid.v4(null, buffer, 16);\n```\n\n### uuid.parse(id[, buffer[, offset]])\n### uuid.unparse(buffer[, offset])\n\nParse and unparse UUIDs\n\n * `id` - (String) UUID(-like) string\n * `buffer` - (Array | Buffer) Array or buffer where UUID bytes are to be written. Default: A new Array or Buffer is used\n * `offset` - (Number) Starting index in `buffer` at which to begin writing. Default: 0\n\nExample parsing and unparsing a UUID string\n\n```javascript\nvar bytes = uuid.parse('797ff043-11eb-11e1-80d6-510998755d10'); // -> <Buffer 79 7f f0 43 11 eb 11 e1 80 d6 51 09 98 75 5d 10>\nvar string = uuid.unparse(bytes); // -> '797ff043-11eb-11e1-80d6-510998755d10'\n```\n\n### uuid.noConflict()\n\n(Browsers only) Set `uuid` property back to it's previous value.\n\nReturns the node-uuid object.\n\nExample:\n\n```javascript\nvar myUuid = uuid.noConflict();\nmyUuid.v1(); // -> '6c84fb90-12c4-11e1-840d-7b25c5ee775a'\n```\n\n## Deprecated APIs\n\nSupport for the following v1.2 APIs is available in v1.3, but is deprecated and will be removed in the next major version.\n\n### uuid([format [, buffer [, offset]]])\n\nuuid() has become uuid.v4(), and the `format` argument is now implicit in the `buffer` argument. (i.e. if you specify a buffer, the format is assumed to be binary).\n\n### uuid.BufferClass\n\nThe class of container created when generating binary uuid data if no buffer argument is specified. This is expected to go away, with no replacement API.\n\n## Testing\n\nIn node.js\n\n```\n> cd test\n> node test.js\n```\n\nIn Browser\n\n```\nopen test/test.html\n```\n\n### Benchmarking\n\nRequires node.js\n\n```\nnpm install uuid uuid-js\nnode benchmark/benchmark.js\n```\n\nFor a more complete discussion of node-uuid performance, please see the `benchmark/README.md` file, and the [benchmark wiki](https://github.com/broofa/node-uuid/wiki/Benchmark)\n\nFor browser performance [checkout the JSPerf tests](http://jsperf.com/node-uuid-performance).\n\n## Release notes\n\nv1.4\n* Improved module context detection\n* Removed public RNG functions\n\nv1.3.2:\n* Improve tests and handling of v1() options (Issue #24)\n* Expose RNG option to allow for perf testing with different generators\n\nv1.3:\n* Support for version 1 ids, thanks to [@ctavan](https://github.com/ctavan)!\n* Support for node.js crypto API\n* De-emphasizing performance in favor of a) cryptographic quality PRNGs where available and b) more manageable code\n",
+ "version": "1.4.1",
+ "readme": "# node-uuid\n\nSimple, fast generation of [RFC4122](http://www.ietf.org/rfc/rfc4122.txt) UUIDS.\n\nFeatures:\n\n* Generate RFC4122 version 1 or version 4 UUIDs\n* Runs in node.js and all browsers.\n* Registered as a [ComponentJS](https://github.com/component/component) [component](https://github.com/component/component/wiki/Components) ('broofa/node-uuid').\n* Cryptographically strong random # generation on supporting platforms\n* 1.1K minified and gzip'ed (Want something smaller? Check this [crazy shit](https://gist.github.com/982883) out! )\n* [Annotated source code](http://broofa.github.com/node-uuid/docs/uuid.html)\n\n## Getting Started\n\nInstall it in your browser:\n\n```html\n<script src=\"uuid.js\"></script>\n```\n\nOr in node.js:\n\n```\nnpm install node-uuid\n```\n\n```javascript\nvar uuid = require('node-uuid');\n```\n\nThen create some ids ...\n\n```javascript\n// Generate a v1 (time-based) id\nuuid.v1(); // -> '6c84fb90-12c4-11e1-840d-7b25c5ee775a'\n\n// Generate a v4 (random) id\nuuid.v4(); // -> '110ec58a-a0f2-4ac4-8393-c866d813b8d1'\n```\n\n## API\n\n### uuid.v1([`options` [, `buffer` [, `offset`]]])\n\nGenerate and return a RFC4122 v1 (timestamp-based) UUID.\n\n* `options` - (Object) Optional uuid state to apply. Properties may include:\n\n * `node` - (Array) Node id as Array of 6 bytes (per 4.1.6). Default: Randomly generated ID. See note 1.\n * `clockseq` - (Number between 0 - 0x3fff) RFC clock sequence. Default: An internally maintained clockseq is used.\n * `msecs` - (Number | Date) Time in milliseconds since unix Epoch. Default: The current time is used.\n * `nsecs` - (Number between 0-9999) additional time, in 100-nanosecond units. Ignored if `msecs` is unspecified. Default: internal uuid counter is used, as per 4.2.1.2.\n\n* `buffer` - (Array | Buffer) Array or buffer where UUID bytes are to be written.\n* `offset` - (Number) Starting index in `buffer` at which to begin writing.\n\nReturns `buffer`, if specified, otherwise the string form of the UUID\n\nNotes:\n\n1. The randomly generated node id is only guaranteed to stay constant for the lifetime of the current JS runtime. (Future versions of this module may use persistent storage mechanisms to extend this guarantee.)\n\nExample: Generate string UUID with fully-specified options\n\n```javascript\nuuid.v1({\n node: [0x01, 0x23, 0x45, 0x67, 0x89, 0xab],\n clockseq: 0x1234,\n msecs: new Date('2011-11-01').getTime(),\n nsecs: 5678\n}); // -> \"710b962e-041c-11e1-9234-0123456789ab\"\n```\n\nExample: In-place generation of two binary IDs\n\n```javascript\n// Generate two ids in an array\nvar arr = new Array(32); // -> []\nuuid.v1(null, arr, 0); // -> [02 a2 ce 90 14 32 11 e1 85 58 0b 48 8e 4f c1 15]\nuuid.v1(null, arr, 16); // -> [02 a2 ce 90 14 32 11 e1 85 58 0b 48 8e 4f c1 15 02 a3 1c b0 14 32 11 e1 85 58 0b 48 8e 4f c1 15]\n\n// Optionally use uuid.unparse() to get stringify the ids\nuuid.unparse(buffer); // -> '02a2ce90-1432-11e1-8558-0b488e4fc115'\nuuid.unparse(buffer, 16) // -> '02a31cb0-1432-11e1-8558-0b488e4fc115'\n```\n\n### uuid.v4([`options` [, `buffer` [, `offset`]]])\n\nGenerate and return a RFC4122 v4 UUID.\n\n* `options` - (Object) Optional uuid state to apply. Properties may include:\n\n * `random` - (Number[16]) Array of 16 numbers (0-255) to use in place of randomly generated values\n * `rng` - (Function) Random # generator to use. Set to one of the built-in generators - `uuid.mathRNG` (all platforms), `uuid.nodeRNG` (node.js only), `uuid.whatwgRNG` (WebKit only) - or a custom function that returns an array[16] of byte values.\n\n* `buffer` - (Array | Buffer) Array or buffer where UUID bytes are to be written.\n* `offset` - (Number) Starting index in `buffer` at which to begin writing.\n\nReturns `buffer`, if specified, otherwise the string form of the UUID\n\nExample: Generate string UUID with fully-specified options\n\n```javascript\nuuid.v4({\n random: [\n 0x10, 0x91, 0x56, 0xbe, 0xc4, 0xfb, 0xc1, 0xea,\n 0x71, 0xb4, 0xef, 0xe1, 0x67, 0x1c, 0x58, 0x36\n ]\n});\n// -> \"109156be-c4fb-41ea-b1b4-efe1671c5836\"\n```\n\nExample: Generate two IDs in a single buffer\n\n```javascript\nvar buffer = new Array(32); // (or 'new Buffer' in node.js)\nuuid.v4(null, buffer, 0);\nuuid.v4(null, buffer, 16);\n```\n\n### uuid.parse(id[, buffer[, offset]])\n### uuid.unparse(buffer[, offset])\n\nParse and unparse UUIDs\n\n * `id` - (String) UUID(-like) string\n * `buffer` - (Array | Buffer) Array or buffer where UUID bytes are to be written. Default: A new Array or Buffer is used\n * `offset` - (Number) Starting index in `buffer` at which to begin writing. Default: 0\n\nExample parsing and unparsing a UUID string\n\n```javascript\nvar bytes = uuid.parse('797ff043-11eb-11e1-80d6-510998755d10'); // -> <Buffer 79 7f f0 43 11 eb 11 e1 80 d6 51 09 98 75 5d 10>\nvar string = uuid.unparse(bytes); // -> '797ff043-11eb-11e1-80d6-510998755d10'\n```\n\n### uuid.noConflict()\n\n(Browsers only) Set `uuid` property back to it's previous value.\n\nReturns the node-uuid object.\n\nExample:\n\n```javascript\nvar myUuid = uuid.noConflict();\nmyUuid.v1(); // -> '6c84fb90-12c4-11e1-840d-7b25c5ee775a'\n```\n\n## Deprecated APIs\n\nSupport for the following v1.2 APIs is available in v1.3, but is deprecated and will be removed in the next major version.\n\n### uuid([format [, buffer [, offset]]])\n\nuuid() has become uuid.v4(), and the `format` argument is now implicit in the `buffer` argument. (i.e. if you specify a buffer, the format is assumed to be binary).\n\n### uuid.BufferClass\n\nThe class of container created when generating binary uuid data if no buffer argument is specified. This is expected to go away, with no replacement API.\n\n## Testing\n\nIn node.js\n\n```\n> cd test\n> node test.js\n```\n\nIn Browser\n\n```\nopen test/test.html\n```\n\n### Benchmarking\n\nRequires node.js\n\n```\nnpm install uuid uuid-js\nnode benchmark/benchmark.js\n```\n\nFor a more complete discussion of node-uuid performance, please see the `benchmark/README.md` file, and the [benchmark wiki](https://github.com/broofa/node-uuid/wiki/Benchmark)\n\nFor browser performance [checkout the JSPerf tests](http://jsperf.com/node-uuid-performance).\n\n## Release notes\n\n### 1.4.0\n\n* Improved module context detection\n* Removed public RNG functions\n\n### 1.3.2\n\n* Improve tests and handling of v1() options (Issue #24)\n* Expose RNG option to allow for perf testing with different generators\n\n### 1.3.0\n\n* Support for version 1 ids, thanks to [@ctavan](https://github.com/ctavan)!\n* Support for node.js crypto API\n* De-emphasizing performance in favor of a) cryptographic quality PRNGs where available and b) more manageable code\n",
"readmeFilename": "README.md",
"bugs": {
"url": "https://github.com/broofa/node-uuid/issues"
},
- "_id": "node-uuid@1.4.0",
+ "homepage": "https://github.com/broofa/node-uuid",
+ "_id": "node-uuid@1.4.1",
"_from": "node-uuid@~1.4.0"
}
diff --git a/deps/npm/node_modules/request/node_modules/node-uuid/uuid.js b/deps/npm/node_modules/request/node_modules/node-uuid/uuid.js
index 4795b9d8a..2fac6dc4b 100644
--- a/deps/npm/node_modules/request/node_modules/node-uuid/uuid.js
+++ b/deps/npm/node_modules/request/node_modules/node-uuid/uuid.js
@@ -1,8 +1,8 @@
// uuid.js
//
-// (c) 2010-2012 Robert Kieffer
-// MIT License
-// https://github.com/broofa/node-uuid
+// Copyright (c) 2010-2012 Robert Kieffer
+// MIT License - http://opensource.org/licenses/mit-license.php
+
(function() {
var _global = this;
@@ -224,7 +224,7 @@
uuid.unparse = unparse;
uuid.BufferClass = BufferClass;
- if (_global.define && define.amd) {
+ if (typeof define === 'function' && define.amd) {
// Publish as AMD module
define(function() {return uuid;});
} else if (typeof(module) != 'undefined' && module.exports) {
@@ -242,4 +242,4 @@
_global.uuid = uuid;
}
-}());
+}).call(this);
diff --git a/deps/npm/node_modules/request/node_modules/oauth-sign/package.json b/deps/npm/node_modules/request/node_modules/oauth-sign/package.json
index f211ed34e..dc99a4ec7 100644
--- a/deps/npm/node_modules/request/node_modules/oauth-sign/package.json
+++ b/deps/npm/node_modules/request/node_modules/oauth-sign/package.json
@@ -25,6 +25,7 @@
"bugs": {
"url": "https://github.com/mikeal/oauth-sign/issues"
},
+ "homepage": "https://github.com/mikeal/oauth-sign",
"_id": "oauth-sign@0.3.0",
"_from": "oauth-sign@~0.3.0"
}
diff --git a/deps/npm/node_modules/request/node_modules/qs/index.js b/deps/npm/node_modules/request/node_modules/qs/index.js
index 590491e31..b05938acc 100644
--- a/deps/npm/node_modules/request/node_modules/qs/index.js
+++ b/deps/npm/node_modules/request/node_modules/qs/index.js
@@ -37,7 +37,11 @@ var isArray = Array.isArray || function(arr) {
var objectKeys = Object.keys || function(obj) {
var ret = [];
- for (var key in obj) ret.push(key);
+ for (var key in obj) {
+ if (obj.hasOwnProperty(key)) {
+ ret.push(key);
+ }
+ }
return ret;
};
@@ -63,24 +67,14 @@ var reduce = function(arr, fn, initial) {
};
/**
- * Create a nullary object if possible
- */
-
-function createObject() {
- return Object.create
- ? Object.create(null)
- : {};
-}
-
-/**
* Cache non-integer test regexp.
*/
var isint = /^[0-9]+$/;
function promote(parent, key) {
- if (parent[key].length == 0) return parent[key] = createObject();
- var t = createObject();
+ if (parent[key].length == 0) return parent[key] = {}
+ var t = {};
for (var i in parent[key]) {
if (hasOwnProperty.call(parent[key], i)) {
t[i] = parent[key][i];
@@ -92,6 +86,10 @@ function promote(parent, key) {
function parse(parts, parent, key, val) {
var part = parts.shift();
+
+ // illegal
+ if (Object.getOwnPropertyDescriptor(Object.prototype, key)) return;
+
// end
if (!part) {
if (isArray(parent[key])) {
@@ -140,7 +138,7 @@ function merge(parent, key, val){
// optimize
} else {
if (!isint.test(key) && isArray(parent.base)) {
- var t = createObject();
+ var t = {};
for (var k in parent.base) t[k] = parent.base[k];
parent.base = t;
}
@@ -177,26 +175,6 @@ function compact(obj) {
}
/**
- * Restore Object.prototype.
- * see pull-request #58
- */
-
-function restoreProto(obj) {
- if (!Object.create) return obj;
- if (isArray(obj)) return obj;
- if (obj && 'object' != typeof obj) return obj;
-
- for (var key in obj) {
- if (hasOwnProperty.call(obj, key)) {
- obj[key] = restoreProto(obj[key]);
- }
- }
-
- obj.__proto__ = Object.prototype;
- return obj;
-}
-
-/**
* Parse the given obj.
*/
@@ -227,9 +205,9 @@ function parseString(str){
if ('' == key) return ret;
return merge(ret, decode(key), decode(val));
- }, { base: createObject() }).base;
+ }, { base: {} }).base;
- return restoreProto(compact(ret));
+ return compact(ret);
}
/**
@@ -341,6 +319,7 @@ function stringifyObject(obj, prefix) {
function set(obj, key, val) {
var v = obj[key];
+ if (Object.getOwnPropertyDescriptor(Object.prototype, key)) return;
if (undefined === v) {
obj[key] = val;
} else if (isArray(v)) {
diff --git a/deps/npm/node_modules/request/node_modules/qs/package.json b/deps/npm/node_modules/request/node_modules/qs/package.json
index d1475f934..313485c0e 100644
--- a/deps/npm/node_modules/request/node_modules/qs/package.json
+++ b/deps/npm/node_modules/request/node_modules/qs/package.json
@@ -1,7 +1,7 @@
{
"name": "qs",
"description": "querystring parser",
- "version": "0.6.5",
+ "version": "0.6.6",
"keywords": [
"query string",
"parser",
@@ -32,6 +32,7 @@
"bugs": {
"url": "https://github.com/visionmedia/node-querystring/issues"
},
- "_id": "qs@0.6.5",
+ "homepage": "https://github.com/visionmedia/node-querystring",
+ "_id": "qs@0.6.6",
"_from": "qs@~0.6.0"
}
diff --git a/deps/npm/node_modules/request/node_modules/tough-cookie/.jshintrc b/deps/npm/node_modules/request/node_modules/tough-cookie/.jshintrc
new file mode 100644
index 000000000..8fcead4f8
--- /dev/null
+++ b/deps/npm/node_modules/request/node_modules/tough-cookie/.jshintrc
@@ -0,0 +1,72 @@
+{
+ // Settings
+ "passfail" : false, // Stop on first error.
+ "maxerr" : 100, // Maximum error before stopping.
+
+
+ // Predefined globals whom JSHint will ignore.
+ "browser" : false, // Standard browser globals e.g. `window`, `document`.
+ "node" : true,
+ "rhino" : false,
+ "couch" : false,
+ "wsh" : false, // Windows Scripting Host.
+
+ "jquery" : false,
+ "prototypejs" : false,
+ "mootools" : false,
+ "dojo" : false,
+
+ "predef" : [ // Custom globals.
+ "escape", "unescape" // aren't picked up by node flag above :/
+ ],
+
+
+ // Development.
+ "debug" : false, // Allow debugger statements e.g. browser breakpoints.
+ "devel" : false, // Allow developments statements e.g. `console.log();`.
+
+
+ // EcmaScript 5.
+ "es5" : true, // Allow EcmaScript 5 syntax.
+ "esnext" : true, // Allow ES "next" syntax, specifically 'const' (V8 has this)
+ "strict" : false, // Require `use strict` pragma in every file.
+ "globalstrict" : false, // Allow global "use strict" (also enables 'strict').
+
+
+ // The Good Parts.
+ "asi" : false, // Tolerate Automatic Semicolon Insertion (no semicolons).
+ "laxbreak" : false, // Tolerate unsafe line breaks e.g. `return [\n] x` without semicolons.
+ "bitwise" : true, // Prohibit bitwise operators (&, |, ^, etc.).
+ "boss" : false, // Tolerate assignments inside if, for & while. Usually conditions & loops are for comparison, not assignments.
+ "curly" : false, // Require {} for every new block or scope.
+ "eqeqeq" : false, // Require triple equals i.e. `===`.
+ "eqnull" : true, // Tolerate use of `== null`.
+ "evil" : false, // Tolerate use of `eval`.
+ "expr" : true, // Tolerate `ExpressionStatement` as Programs.
+ "forin" : false, // Tolerate `for in` loops without `hasOwnPrototype`.
+ "immed" : true, // Require immediate invocations to be wrapped in parens e.g. `( function(){}() );`
+ "latedef" : false, // Prohibit variable use before definition.
+ "loopfunc" : false, // Allow functions to be defined within loops.
+ "noarg" : true, // Prohibit use of `arguments.caller` and `arguments.callee`.
+ "regexp" : true, // Prohibit `.` and `[^...]` in regular expressions.
+ "regexdash" : false, // Tolerate unescaped last dash i.e. `[-...]`.
+ "scripturl" : true, // Tolerate script-targeted URLs.
+ "shadow" : false, // Allows re-define variables later in code e.g. `var x=1; x=2;`.
+ "supernew" : false, // Tolerate `new function () { ... };` and `new Object;`.
+ "undef" : true, // Require all non-global variables be declared before they are used.
+
+
+ // Personal styling prefrences.
+ "lastsemic" : true, // Prohibit missing semicolon for the last statement in a one-line block
+ "newcap" : false, // Require capitalization of all constructor functions e.g. `new F()`.
+ "noempty" : true, // Prohipit use of empty blocks.
+ "nonew" : true, // Prohibit use of constructors for side-effects.
+ "nomen" : false, // Prohibit use of initial or trailing underbars in names.
+ "onevar" : false, // Allow only one `var` statement per function.
+ "onecase" : false, // Allow switches with one case statement
+ "plusplus" : false, // Prohibit use of `++` & `--`.
+ "proto" : false, // Allow use of __proto__
+ "sub" : true, // Tolerate all forms of subscript notation besides dot notation e.g. `dict['key']` instead of `dict.key`.
+ "trailing" : true, // Prohibit trailing whitespaces.
+ "white" : false // Check against strict whitespace and indentation rules.
+}
diff --git a/deps/npm/node_modules/request/node_modules/tough-cookie/.npmignore b/deps/npm/node_modules/request/node_modules/tough-cookie/.npmignore
new file mode 100644
index 000000000..54efff98f
--- /dev/null
+++ b/deps/npm/node_modules/request/node_modules/tough-cookie/.npmignore
@@ -0,0 +1,3 @@
+node_modules/
+.*.sw[nmop]
+npm-debug.log
diff --git a/deps/npm/node_modules/request/node_modules/tough-cookie/LICENSE b/deps/npm/node_modules/request/node_modules/tough-cookie/LICENSE
new file mode 100644
index 000000000..3fac4c85c
--- /dev/null
+++ b/deps/npm/node_modules/request/node_modules/tough-cookie/LICENSE
@@ -0,0 +1,78 @@
+Copyright GoInstant, Inc. and other contributors. All rights reserved.
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to
+deal in the Software without restriction, including without limitation the
+rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+sell copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+IN THE SOFTWARE.
+
+The following exceptions apply:
+
+===
+
+`pubSufTest()` of generate-pubsuffix.js is in the public domain.
+
+ // Any copyright is dedicated to the Public Domain.
+ // http://creativecommons.org/publicdomain/zero/1.0/
+
+===
+
+`public-suffix.txt` was obtained from
+<https://mxr.mozilla.org/mozilla-central/source/netwerk/dns/effective_tld_names.dat?raw=1>
+via <http://publicsuffix.org>.
+
+That file contains the usual Mozilla triple-license, for which this project uses it
+under the terms of the MPL 1.1:
+
+ // ***** BEGIN LICENSE BLOCK *****
+ // Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ //
+ // The contents of this file are subject to the Mozilla Public License Version
+ // 1.1 (the "License"); you may not use this file except in compliance with
+ // the License. You may obtain a copy of the License at
+ // http://www.mozilla.org/MPL/
+ //
+ // Software distributed under the License is distributed on an "AS IS" basis,
+ // WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ // for the specific language governing rights and limitations under the
+ // License.
+ //
+ // The Original Code is the Public Suffix List.
+ //
+ // The Initial Developer of the Original Code is
+ // Jo Hermans <jo.hermans@gmail.com>.
+ // Portions created by the Initial Developer are Copyright (C) 2007
+ // the Initial Developer. All Rights Reserved.
+ //
+ // Contributor(s):
+ // Ruben Arakelyan <ruben@rubenarakelyan.com>
+ // Gervase Markham <gerv@gerv.net>
+ // Pamela Greene <pamg.bugs@gmail.com>
+ // David Triendl <david@triendl.name>
+ // Jothan Frakes <jothan@gmail.com>
+ // The kind representatives of many TLD registries
+ //
+ // Alternatively, the contents of this file may be used under the terms of
+ // either the GNU General Public License Version 2 or later (the "GPL"), or
+ // the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ // in which case the provisions of the GPL or the LGPL are applicable instead
+ // of those above. If you wish to allow use of your version of this file only
+ // under the terms of either the GPL or the LGPL, and not to allow others to
+ // use your version of this file under the terms of the MPL, indicate your
+ // decision by deleting the provisions above and replace them with the notice
+ // and other provisions required by the GPL or the LGPL. If you do not delete
+ // the provisions above, a recipient may use your version of this file under
+ // the terms of any one of the MPL, the GPL or the LGPL.
+ //
+ // ***** END LICENSE BLOCK *****
diff --git a/deps/npm/node_modules/request/node_modules/tough-cookie/README.md b/deps/npm/node_modules/request/node_modules/tough-cookie/README.md
new file mode 100644
index 000000000..fd1dbb1df
--- /dev/null
+++ b/deps/npm/node_modules/request/node_modules/tough-cookie/README.md
@@ -0,0 +1,380 @@
+[RFC6265](http://tools.ietf.org/html/rfc6265) Cookies and CookieJar for Node.js
+
+![Tough Cookie](http://www.goinstant.com.s3.amazonaws.com/tough-cookie.jpg)
+
+# Synopsis
+
+``` javascript
+var cookies = require('tough-cookie'); // note: not 'cookie', 'cookies' or 'node-cookie'
+var Cookie = cookies.Cookie;
+var cookie = Cookie.parse(header);
+cookie.value = 'somethingdifferent';
+header = cookie.toString();
+
+var cookiejar = new cookies.CookieJar();
+cookiejar.setCookie(cookie, 'http://currentdomain.example.com/path', cb);
+// ...
+cookiejar.getCookies('http://example.com/otherpath',function(err,cookies) {
+ res.headers['cookie'] = cookies.join('; ');
+});
+```
+
+# Installation
+
+It's _so_ easy!
+
+`npm install tough-cookie`
+
+Requires `punycode`, which should get installed automatically for you. Note that node.js v0.6.2+ bundles punycode by default.
+
+Why the name? NPM modules `cookie`, `cookies` and `cookiejar` were already taken.
+
+# API
+
+cookies
+=======
+
+Functions on the module you get from `require('tough-cookie')`. All can be used as pure functions and don't need to be "bound".
+
+parseDate(string[,strict])
+-----------------
+
+Parse a cookie date string into a `Date`. Parses according to RFC6265 Section 5.1.1, not `Date.parse()`. If strict is set to true then leading/trailing non-seperator characters around the time part will cause the parsing to fail (e.g. "Thu, 01 Jan 1970 00:00:010 GMT" has an extra trailing zero but Chrome, an assumedly RFC-compliant browser, treats this as valid).
+
+formatDate(date)
+----------------
+
+Format a Date into a RFC1123 string (the RFC6265-recommended format).
+
+canonicalDomain(str)
+--------------------
+
+Transforms a domain-name into a canonical domain-name. The canonical domain-name is a trimmed, lowercased, stripped-of-leading-dot and optionally punycode-encoded domain-name (Section 5.1.2 of RFC6265). For the most part, this function is idempotent (can be run again on its output without ill effects).
+
+domainMatch(str,domStr[,canonicalize=true])
+-------------------------------------------
+
+Answers "does this real domain match the domain in a cookie?". The `str` is the "current" domain-name and the `domStr` is the "cookie" domain-name. Matches according to RFC6265 Section 5.1.3, but it helps to think of it as a "suffix match".
+
+The `canonicalize` parameter will run the other two paramters through `canonicalDomain` or not.
+
+defaultPath(path)
+-----------------
+
+Given a current request/response path, gives the Path apropriate for storing in a cookie. This is basically the "directory" of a "file" in the path, but is specified by Section 5.1.4 of the RFC.
+
+The `path` parameter MUST be _only_ the pathname part of a URI (i.e. excludes the hostname, query, fragment, etc.). This is the `.pathname` property of node's `uri.parse()` output.
+
+pathMatch(reqPath,cookiePath)
+-----------------------------
+
+Answers "does the request-path path-match a given cookie-path?" as per RFC6265 Section 5.1.4. Returns a boolean.
+
+This is essentially a prefix-match where `cookiePath` is a prefix of `reqPath`.
+
+parse(header[,strict=false])
+----------------------------
+
+alias for `Cookie.parse(header[,strict])`
+
+fromJSON(string)
+----------------
+
+alias for `Cookie.fromJSON(string)`
+
+getPublicSuffix(hostname)
+-------------------------
+
+Returns the public suffix of this hostname. The public suffix is the shortest domain-name upon which a cookie can be set. Returns `null` if the hostname cannot have cookies set for it.
+
+For example: `www.example.com` and `www.subdomain.example.com` both have public suffix `example.com`.
+
+For further information, see http://publicsuffix.org/. This module derives its list from that site.
+
+cookieCompare(a,b)
+------------------
+
+For use with `.sort()`, sorts a list of cookies into the recommended order given in the RFC (Section 5.4 step 2). Longest `.path`s go first, then sorted oldest to youngest.
+
+``` javascript
+var cookies = [ /* unsorted array of Cookie objects */ ];
+cookies = cookies.sort(cookieCompare);
+```
+
+permuteDomain(domain)
+---------------------
+
+Generates a list of all possible domains that `domainMatch()` the parameter. May be handy for implementing cookie stores.
+
+
+permutePath(path)
+-----------------
+
+Generates a list of all possible paths that `pathMatch()` the parameter. May be handy for implementing cookie stores.
+
+Cookie
+======
+
+Cookie.parse(header[,strict=false])
+-----------------------------------
+
+Parses a single Cookie or Set-Cookie HTTP header into a `Cookie` object. Returns `undefined` if the string can't be parsed. If in strict mode, returns `undefined` if the cookie doesn't follow the guidelines in section 4 of RFC6265. Generally speaking, strict mode can be used to validate your own generated Set-Cookie headers, but acting as a client you want to be lenient and leave strict mode off.
+
+Here's how to process the Set-Cookie header(s) on a node HTTP/HTTPS response:
+
+``` javascript
+if (res.headers['set-cookie'] instanceof Array)
+ cookies = res.headers['set-cookie'].map(Cookie.parse);
+else
+ cookies = [Cookie.parse(res.headers['set-cookie'])];
+```
+
+Cookie.fromJSON(string)
+-----------------------
+
+Convert a JSON string to a `Cookie` object. Does a `JSON.parse()` and converts the `.created`, `.lastAccessed` and `.expires` properties into `Date` objects.
+
+Properties
+==========
+
+ * _key_ - string - the name or key of the cookie (default "")
+ * _value_ - string - the value of the cookie (default "")
+ * _expires_ - `Date` - if set, the `Expires=` attribute of the cookie (defaults to the string `"Infinity"`). See `setExpires()`
+ * _maxAge_ - seconds - if set, the `Max-Age=` attribute _in seconds_ of the cookie. May also be set to strings `"Infinity"` and `"-Infinity"` for non-expiry and immediate-expiry, respectively. See `setMaxAge()`
+ * _domain_ - string - the `Domain=` attribute of the cookie
+ * _path_ - string - the `Path=` of the cookie
+ * _secure_ - boolean - the `Secure` cookie flag
+ * _httpOnly_ - boolean - the `HttpOnly` cookie flag
+ * _extensions_ - `Array` - any unrecognized cookie attributes as strings (even if equal-signs inside)
+
+After a cookie has been passed through `CookieJar.setCookie()` it will have the following additional attributes:
+
+ * _hostOnly_ - boolean - is this a host-only cookie (i.e. no Domain field was set, but was instead implied)
+ * _pathIsDefault_ - boolean - if true, there was no Path field on the cookie and `defaultPath()` was used to derive one.
+ * _created_ - `Date` - when this cookie was added to the jar
+ * _lastAccessed_ - `Date` - last time the cookie got accessed. Will affect cookie cleaning once implemented. Using `cookiejar.getCookies(...)` will update this attribute.
+
+Construction([{options}])
+------------
+
+Receives an options object that can contain any Cookie properties, uses the default for unspecified properties.
+
+.toString()
+-----------
+
+encode to a Set-Cookie header value. The Expires cookie field is set using `formatDate()`, but is omitted entirely if `.expires` is `Infinity`.
+
+.cookieString()
+---------------
+
+encode to a Cookie header value (i.e. the `.key` and `.value` properties joined with '=').
+
+.setExpires(String)
+-------------------
+
+sets the expiry based on a date-string passed through `parseDate()`. If parseDate returns `null` (i.e. can't parse this date string), `.expires` is set to `"Infinity"` (a string) is set.
+
+.setMaxAge(number)
+-------------------
+
+sets the maxAge in seconds. Coerces `-Infinity` to `"-Infinity"` and `Infinity` to `"Infinity"` so it JSON serializes correctly.
+
+.expiryTime([now=Date.now()])
+-----------------------------
+
+.expiryDate([now=Date.now()])
+-----------------------------
+
+expiryTime() Computes the absolute unix-epoch milliseconds that this cookie expires. expiryDate() works similarly, except it returns a `Date` object. Note that in both cases the `now` parameter should be milliseconds.
+
+Max-Age takes precedence over Expires (as per the RFC). The `.created` attribute -- or, by default, the `now` paramter -- is used to offset the `.maxAge` attribute.
+
+If Expires (`.expires`) is set, that's returned.
+
+Otherwise, `expiryTime()` returns `Infinity` and `expiryDate()` returns a `Date` object for "Tue, 19 Jan 2038 03:14:07 GMT" (latest date that can be expressed by a 32-bit `time_t`; the common limit for most user-agents).
+
+.TTL([now=Date.now()])
+---------
+
+compute the TTL relative to `now` (milliseconds). The same precedence rules as for `expiryTime`/`expiryDate` apply.
+
+The "number" `Infinity` is returned for cookies without an explicit expiry and `0` is returned if the cookie is expired. Otherwise a time-to-live in milliseconds is returned.
+
+.canonicalizedDoman()
+---------------------
+
+.cdomain()
+----------
+
+return the canonicalized `.domain` field. This is lower-cased and punycode (RFC3490) encoded if the domain has any non-ASCII characters.
+
+.validate()
+-----------
+
+Status: *IN PROGRESS*. Works for a few things, but is by no means comprehensive.
+
+validates cookie attributes for semantic correctness. Useful for "lint" checking any Set-Cookie headers you generate. For now, it returns a boolean, but eventually could return a reason string -- you can future-proof with this construct:
+
+``` javascript
+if (cookie.validate() === true) {
+ // it's tasty
+} else {
+ // yuck!
+}
+```
+
+CookieJar
+=========
+
+Construction([store = new MemoryCookieStore()][, rejectPublicSuffixes])
+------------
+
+Simply use `new CookieJar()`. If you'd like to use a custom store, pass that to the constructor otherwise a `MemoryCookieStore` will be created and used.
+
+
+Attributes
+----------
+
+ * _rejectPublicSuffixes_ - boolean - reject cookies with domains like "com" and "co.uk" (default: `true`)
+
+Since eventually this module would like to support database/remote/etc. CookieJars, continuation passing style is used for CookieJar methods.
+
+.setCookie(cookieOrString, currentUrl, [{options},] cb(err,cookie))
+-------------------------------------------------------------------
+
+Attempt to set the cookie in the cookie jar. If the operation fails, an error will be given to the callback `cb`, otherwise the cookie is passed through. The cookie will have updated `.created`, `.lastAccessed` and `.hostOnly` properties.
+
+The `options` object can be omitted and can have the following properties:
+
+ * _http_ - boolean - default `true` - indicates if this is an HTTP or non-HTTP API. Affects HttpOnly cookies.
+ * _secure_ - boolean - autodetect from url - indicates if this is a "Secure" API. If the currentUrl starts with `https:` or `wss:` then this is defaulted to `true`, otherwise `false`.
+ * _now_ - Date - default `new Date()` - what to use for the creation/access time of cookies
+ * _strict_ - boolean - default `false` - perform extra checks
+ * _ignoreError_ - boolean - default `false` - silently ignore things like parse errors and invalid domains. CookieStore errors aren't ignored by this option.
+
+As per the RFC, the `.hostOnly` property is set if there was no "Domain=" parameter in the cookie string (or `.domain` was null on the Cookie object). The `.domain` property is set to the fully-qualified hostname of `currentUrl` in this case. Matching this cookie requires an exact hostname match (not a `domainMatch` as per usual).
+
+.storeCookie(cookie, [{options},] cb(err,cookie))
+-------------------------------------------------
+
+__REMOVED__ removed in lieu of the CookieStore API below
+
+.getCookies(currentUrl, [{options},] cb(err,cookies))
+-----------------------------------------------------
+
+Retrieve the list of cookies that can be sent in a Cookie header for the current url.
+
+If an error is encountered, that's passed as `err` to the callback, otherwise an `Array` of `Cookie` objects is passed. The array is sorted with `cookieCompare()` unless the `{sort:false}` option is given.
+
+The `options` object can be omitted and can have the following properties:
+
+ * _http_ - boolean - default `true` - indicates if this is an HTTP or non-HTTP API. Affects HttpOnly cookies.
+ * _secure_ - boolean - autodetect from url - indicates if this is a "Secure" API. If the currentUrl starts with `https:` or `wss:` then this is defaulted to `true`, otherwise `false`.
+ * _now_ - Date - default `new Date()` - what to use for the creation/access time of cookies
+ * _expire_ - boolean - default `true` - perform expiry-time checking of cookies and asynchronously remove expired cookies from the store. Using `false` will return expired cookies and **not** remove them from the store (which is useful for replaying Set-Cookie headers, potentially).
+ * _allPaths_ - boolean - default `false` - if `true`, do not scope cookies by path. The default uses RFC-compliant path scoping. **Note**: may not be supported by the CookieStore `fetchCookies` function (the default MemoryCookieStore supports it).
+
+The `.lastAccessed` property of the returned cookies will have been updated.
+
+.getCookieString(...)
+---------------------
+
+Accepts the same options as `.getCookies()` but passes a string suitable for a Cookie header rather than an array to the callback. Simply maps the `Cookie` array via `.cookieString()`.
+
+.getSetCookieStrings(...)
+-------------------------
+
+Accepts the same options as `.getCookies()` but passes an array of strings suitable for Set-Cookie headers (rather than an array of `Cookie`s) to the callback. Simply maps the cookie array via `.toString()`.
+
+# CookieStore API
+
+The storage model for each `CookieJar` instance can be replaced with a custom implementation. The default is `MemoryCookieStore` which can be found in the `lib/memstore.js` file. The API uses continuation-passing-style to allow for asynchronous stores.
+
+All `domain` parameters will have been normalized before calling.
+
+The Cookie store must have all of the following methods.
+
+store.findCookie(domain, path, key, cb(err,cookie))
+---------------------------------------------------
+
+Retrieve a cookie with the given domain, path and key (a.k.a. name). The RFC maintains that exactly one of these cookies should exist in a store. If the store is using versioning, this means that the latest/newest such cookie should be returned.
+
+Callback takes an error and the resulting `Cookie` object. If no cookie is found then `null` MUST be passed instead (i.e. not an error).
+
+store.findCookies(domain, path, cb(err,cookies))
+------------------------------------------------
+
+Locates cookies matching the given domain and path. This is most often called in the context of `cookiejar.getCookies()` above.
+
+If no cookies are found, the callback MUST be passed an empty array.
+
+The resulting list will be checked for applicability to the current request according to the RFC (domain-match, path-match, http-only-flag, secure-flag, expiry, etc.), so it's OK to use an optimistic search algorithm when implementing this method. However, the search algorithm used SHOULD try to find cookies that `domainMatch()` the domain and `pathMatch()` the path in order to limit the amount of checking that needs to be done.
+
+As of version 0.9.12, the `allPaths` option to `cookiejar.getCookies()` above will cause the path here to be `null`. If the path is `null`, path-matching MUST NOT be performed (i.e. domain-matching only).
+
+store.putCookie(cookie, cb(err))
+--------------------------------
+
+Adds a new cookie to the store. The implementation SHOULD replace any existing cookie with the same `.domain`, `.path`, and `.key` properties -- depending on the nature of the implementation, it's possible that between the call to `fetchCookie` and `putCookie` that a duplicate `putCookie` can occur.
+
+The `cookie` object MUST NOT be modified; the caller will have already updated the `.creation` and `.lastAccessed` properties.
+
+Pass an error if the cookie cannot be stored.
+
+store.updateCookie(oldCookie, newCookie, cb(err))
+-------------------------------------------------
+
+Update an existing cookie. The implementation MUST update the `.value` for a cookie with the same `domain`, `.path` and `.key`. The implementation SHOULD check that the old value in the store is equivalent to `oldCookie` - how the conflict is resolved is up to the store.
+
+The `.lastAccessed` property will always be different between the two objects and `.created` will always be the same. Stores MAY ignore or defer the `.lastAccessed` change at the cost of affecting how cookies are sorted (or selected for deletion).
+
+Stores may wish to optimize changing the `.value` of the cookie in the store versus storing a new cookie. If the implementation doesn't define this method a stub that calls `putCookie(newCookie,cb)` will be added to the store object.
+
+The `newCookie` and `oldCookie` objects MUST NOT be modified.
+
+Pass an error if the newCookie cannot be stored.
+
+store.removeCookie(domain, path, key, cb(err))
+----------------------------------------------
+
+Remove a cookie from the store (see notes on `findCookie` about the uniqueness constraint).
+
+The implementation MUST NOT pass an error if the cookie doesn't exist; only pass an error due to the failure to remove an existing cookie.
+
+store.removeCookies(domain, path, cb(err))
+------------------------------------------
+
+Removes matching cookies from the store. The `path` paramter is optional, and if missing means all paths in a domain should be removed.
+
+Pass an error ONLY if removing any existing cookies failed.
+
+# TODO
+
+ * _full_ RFC5890/RFC5891 canonicalization for domains in `cdomain()`
+ * the optional `punycode` requirement implements RFC3492, but RFC6265 requires RFC5891
+ * better tests for `validate()`?
+
+# Copyright and License
+
+(tl;dr: MIT with some MPL/1.1)
+
+Copyright GoInstant, Inc. and other contributors. All rights reserved.
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to
+deal in the Software without restriction, including without limitation the
+rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+sell copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+IN THE SOFTWARE.
+
+Portions may be licensed under different licenses (in particular public-suffix.txt is MPL/1.1); please read the LICENSE file for full details.
diff --git a/deps/npm/node_modules/request/node_modules/tough-cookie/generate-pubsuffix.js b/deps/npm/node_modules/request/node_modules/tough-cookie/generate-pubsuffix.js
new file mode 100644
index 000000000..a7fa54527
--- /dev/null
+++ b/deps/npm/node_modules/request/node_modules/tough-cookie/generate-pubsuffix.js
@@ -0,0 +1,230 @@
+/*
+ * Copyright GoInstant, Inc. and other contributors. All rights reserved.
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to
+ * deal in the Software without restriction, including without limitation the
+ * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+ * sell copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+ * IN THE SOFTWARE.
+ */
+
+var fs = require('fs');
+var assert = require('assert');
+var punycode = require('punycode');
+
+fs.readFile('./public-suffix.txt', 'utf8', function(err,string) {
+ if (err) throw err;
+ var lines = string.split("\n");
+ process.nextTick(function() {
+ processList(lines);
+ });
+});
+
+var index = {};
+
+var COMMENT = new RegExp('//.+');
+function processList(lines) {
+ while (lines.length) {
+ var line = lines.shift();
+ line = line.replace(COMMENT,'').trim();
+ if (!line) continue;
+ addToIndex(index,line);
+ }
+
+ pubSufTest();
+
+ var w = fs.createWriteStream('./lib/pubsuffix.js',{
+ flags: 'w',
+ encoding: 'utf8',
+ mode: 0644,
+ });
+ w.on('end', process.exit);
+ w.write("/****************************************************\n");
+ w.write(" * AUTOMATICALLY GENERATED by generate-pubsuffix.js *\n");
+ w.write(" * DO NOT EDIT! *\n");
+ w.write(" ****************************************************/\n\n");
+
+ w.write("module.exports.getPublicSuffix = ");
+ w.write(getPublicSuffix.toString());
+ w.write(";\n\n");
+
+ w.write("// The following generated structure is used under the MPL version 1.1\n");
+ w.write("// See public-suffix.txt for more information\n\n");
+ w.write("var index = module.exports.index = Object.freeze(\n");
+ w.write(JSON.stringify(index));
+ w.write(");\n\n");
+ w.write("// END of automatically generated file\n");
+
+ w.end();
+}
+
+function addToIndex(index,line) {
+ var prefix = '';
+ if (line.replace(/^(!|\*\.)/)) {
+ prefix = RegExp.$1;
+ line = line.slice(prefix.length);
+ }
+ line = prefix + punycode.toASCII(line);
+
+ if (line.substr(0,1) == '!')
+ index[line.substr(1)] = false;
+ else
+ index[line] = true;
+}
+
+// include the licence in the function since it gets written to pubsuffix.js
+function getPublicSuffix(domain) {
+ /*
+ * Copyright GoInstant, Inc. and other contributors. All rights reserved.
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to
+ * deal in the Software without restriction, including without limitation the
+ * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+ * sell copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+ * IN THE SOFTWARE.
+ */
+ if (!domain) return null;
+ if (domain.match(/^\./)) return null;
+
+ domain = domain.toLowerCase();
+ var parts = domain.split('.').reverse();
+
+ var suffix = '';
+ var suffixLen = 0;
+ for (var i=0; i<parts.length; i++) {
+ var part = parts[i];
+ var starstr = '*'+suffix;
+ var partstr = part+suffix;
+
+ if (index[starstr]) { // star rule matches
+ suffixLen = i+1;
+ if (index[partstr] === false) { // exception rule matches (NB: false, not undefined)
+ suffixLen--;
+ }
+ } else if (index[partstr]) { // exact match, not exception
+ suffixLen = i+1;
+ }
+
+ suffix = '.'+part+suffix;
+ }
+
+ if (index['*'+suffix]) { // *.domain exists (e.g. *.kyoto.jp for domain='kyoto.jp');
+ return null;
+ }
+
+ if (suffixLen && parts.length > suffixLen) {
+ return parts.slice(0,suffixLen+1).reverse().join('.');
+ }
+
+ return null;
+}
+
+function checkPublicSuffix(give,get) {
+ var got = getPublicSuffix(give);
+ assert.equal(got, get, give+' should be '+(get==null?'NULL':get)+' but got '+got);
+}
+
+// pubSufTest() was converted to JavaScript from http://publicsuffix.org/list/test.txt
+function pubSufTest() {
+ // For this function-scope and this function-scope ONLY:
+ // Any copyright is dedicated to the Public Domain.
+ // http://creativecommons.org/publicdomain/zero/1.0/
+
+ // NULL input.
+ checkPublicSuffix(null, null);
+ // Mixed case.
+ checkPublicSuffix('COM', null);
+ checkPublicSuffix('example.COM', 'example.com');
+ checkPublicSuffix('WwW.example.COM', 'example.com');
+ // Leading dot.
+ checkPublicSuffix('.com', null);
+ checkPublicSuffix('.example', null);
+ checkPublicSuffix('.example.com', null);
+ checkPublicSuffix('.example.example', null);
+ // Unlisted TLD.
+ checkPublicSuffix('example', null);
+ checkPublicSuffix('example.example', null);
+ checkPublicSuffix('b.example.example', null);
+ checkPublicSuffix('a.b.example.example', null);
+ // Listed, but non-Internet, TLD.
+ checkPublicSuffix('local', null);
+ checkPublicSuffix('example.local', null);
+ checkPublicSuffix('b.example.local', null);
+ checkPublicSuffix('a.b.example.local', null);
+ // TLD with only 1 rule.
+ checkPublicSuffix('biz', null);
+ checkPublicSuffix('domain.biz', 'domain.biz');
+ checkPublicSuffix('b.domain.biz', 'domain.biz');
+ checkPublicSuffix('a.b.domain.biz', 'domain.biz');
+ // TLD with some 2-level rules.
+ checkPublicSuffix('com', null);
+ checkPublicSuffix('example.com', 'example.com');
+ checkPublicSuffix('b.example.com', 'example.com');
+ checkPublicSuffix('a.b.example.com', 'example.com');
+ checkPublicSuffix('uk.com', null);
+ checkPublicSuffix('example.uk.com', 'example.uk.com');
+ checkPublicSuffix('b.example.uk.com', 'example.uk.com');
+ checkPublicSuffix('a.b.example.uk.com', 'example.uk.com');
+ checkPublicSuffix('test.ac', 'test.ac');
+ // TLD with only 1 (wildcard) rule.
+ checkPublicSuffix('cy', null);
+ checkPublicSuffix('c.cy', null);
+ checkPublicSuffix('b.c.cy', 'b.c.cy');
+ checkPublicSuffix('a.b.c.cy', 'b.c.cy');
+ // More complex TLD.
+ checkPublicSuffix('jp', null);
+ checkPublicSuffix('test.jp', 'test.jp');
+ checkPublicSuffix('www.test.jp', 'test.jp');
+ checkPublicSuffix('ac.jp', null);
+ checkPublicSuffix('test.ac.jp', 'test.ac.jp');
+ checkPublicSuffix('www.test.ac.jp', 'test.ac.jp');
+ checkPublicSuffix('kyoto.jp', null);
+ checkPublicSuffix('c.kyoto.jp', null);
+ checkPublicSuffix('b.c.kyoto.jp', 'b.c.kyoto.jp');
+ checkPublicSuffix('a.b.c.kyoto.jp', 'b.c.kyoto.jp');
+ checkPublicSuffix('pref.kyoto.jp', 'pref.kyoto.jp'); // Exception rule.
+ checkPublicSuffix('www.pref.kyoto.jp', 'pref.kyoto.jp'); // Exception rule.
+ checkPublicSuffix('city.kyoto.jp', 'city.kyoto.jp'); // Exception rule.
+ checkPublicSuffix('www.city.kyoto.jp', 'city.kyoto.jp'); // Exception rule.
+ // TLD with a wildcard rule and exceptions.
+ checkPublicSuffix('om', null);
+ checkPublicSuffix('test.om', null);
+ checkPublicSuffix('b.test.om', 'b.test.om');
+ checkPublicSuffix('a.b.test.om', 'b.test.om');
+ checkPublicSuffix('songfest.om', 'songfest.om');
+ checkPublicSuffix('www.songfest.om', 'songfest.om');
+ // US K12.
+ checkPublicSuffix('us', null);
+ checkPublicSuffix('test.us', 'test.us');
+ checkPublicSuffix('www.test.us', 'test.us');
+ checkPublicSuffix('ak.us', null);
+ checkPublicSuffix('test.ak.us', 'test.ak.us');
+ checkPublicSuffix('www.test.ak.us', 'test.ak.us');
+ checkPublicSuffix('k12.ak.us', null);
+ checkPublicSuffix('test.k12.ak.us', 'test.k12.ak.us');
+ checkPublicSuffix('www.test.k12.ak.us', 'test.k12.ak.us');
+
+
+}
diff --git a/deps/npm/node_modules/request/node_modules/tough-cookie/lib/cookie.js b/deps/npm/node_modules/request/node_modules/tough-cookie/lib/cookie.js
new file mode 100644
index 000000000..1d8615b58
--- /dev/null
+++ b/deps/npm/node_modules/request/node_modules/tough-cookie/lib/cookie.js
@@ -0,0 +1,947 @@
+/*
+ * Copyright GoInstant, Inc. and other contributors. All rights reserved.
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to
+ * deal in the Software without restriction, including without limitation the
+ * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+ * sell copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+ * IN THE SOFTWARE.
+ */
+
+/*jshint regexp:false */
+var net = require('net');
+var urlParse = require('url').parse;
+var pubsuffix = require('./pubsuffix');
+
+var punycode;
+try {
+ punycode = require('punycode');
+} catch(e) {
+ console.warn("cookie: can't load punycode; won't use punycode for domain normalization");
+}
+
+var DATE_DELIM = /[\x09\x20-\x2F\x3B-\x40\x5B-\x60\x7B-\x7E]/;
+
+// From RFC2616 S2.2:
+var TOKEN = /[\x21\x23-\x26\x2A\x2B\x2D\x2E\x30-\x39\x41-\x5A\x5E-\x7A\x7C\x7E]/;
+
+// From RFC6265 S4.1.1
+// note that it excludes \x3B ";"
+var COOKIE_OCTET = /[\x21\x23-\x2B\x2D-\x3A\x3C-\x5B\x5D-\x7E]/;
+var COOKIE_OCTETS = /^[\x21\x23-\x2B\x2D-\x3A\x3C-\x5B\x5D-\x7E]+$/;
+
+// The name/key cannot be empty but the value can (S5.2):
+var COOKIE_PAIR_STRICT = new RegExp('^('+TOKEN.source+'+)=("?)('+COOKIE_OCTET.source+'*)\\2');
+var COOKIE_PAIR = /^([^=\s]+)\s*=\s*("?)\s*(.*)\s*\2/;
+
+// RFC6265 S4.1.1 defines extension-av as 'any CHAR except CTLs or ";"'
+// Note ';' is \x3B
+var NON_CTL_SEMICOLON = /[\x20-\x3A\x3C-\x7E]+/;
+var EXTENSION_AV = NON_CTL_SEMICOLON;
+var PATH_VALUE = NON_CTL_SEMICOLON;
+
+// Used for checking whether or not there is a trailing semi-colon
+var TRAILING_SEMICOLON = /;+$/;
+
+/* RFC6265 S5.1.1.5:
+ * [fail if] the day-of-month-value is less than 1 or greater than 31
+ */
+var DAY_OF_MONTH = /^(0?[1-9]|[12][0-9]|3[01])$/;
+
+/* RFC6265 S5.1.1.5:
+ * [fail if]
+ * * the hour-value is greater than 23,
+ * * the minute-value is greater than 59, or
+ * * the second-value is greater than 59.
+ */
+var TIME = /(0?[0-9]|1[0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])/;
+var STRICT_TIME = /^(0?[0-9]|1[0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])$/;
+
+var MONTH = /^(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)$/i;
+var MONTH_TO_NUM = {
+ jan:0, feb:1, mar:2, apr:3, may:4, jun:5, jul:6, aug:7, sep:8, oct:9, nov:10, dec:11
+};
+var NUM_TO_MONTH = [
+ 'Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'
+];
+var NUM_TO_DAY = [
+ 'Sun','Mon','Tue','Wed','Thu','Fri','Sat'
+];
+
+var YEAR = /^([1-9][0-9]{1,3})$/; // 2 to 4 digits (will check range when parsing)
+
+var MAX_TIME = 2147483647000; // 31-bit max
+var MAX_DATE = new Date(CookieJar.MAX_TIME); // 31-bit max
+var MIN_TIME = 0; // 31-bit min
+var MIN_DATE = new Date(CookieJar.MIN_TIME); // 31-bit min
+
+
+// RFC6265 S5.1.1 date parser:
+function parseDate(str,strict) {
+ if (!str) return;
+ var found_time, found_dom, found_month, found_year;
+
+ /* RFC6265 S5.1.1:
+ * 2. Process each date-token sequentially in the order the date-tokens
+ * appear in the cookie-date
+ */
+ var tokens = str.split(DATE_DELIM);
+ if (!tokens) return;
+
+ var date = new Date();
+ date.setMilliseconds(0);
+
+ for (var i=0; i<tokens.length; i++) {
+ var token = tokens[i].trim();
+ if (!token.length) continue;
+
+ var result;
+
+ /* 2.1. If the found-time flag is not set and the token matches the time
+ * production, set the found-time flag and set the hour- value,
+ * minute-value, and second-value to the numbers denoted by the digits in
+ * the date-token, respectively. Skip the remaining sub-steps and continue
+ * to the next date-token.
+ */
+ if (!found_time) {
+ result = (strict ? STRICT_TIME : TIME).exec(token);
+ if (result) {
+ found_time = true;
+ date.setUTCHours(result[1]);
+ date.setUTCMinutes(result[2]);
+ date.setUTCSeconds(result[3]);
+ continue;
+ }
+ }
+
+ /* 2.2. If the found-day-of-month flag is not set and the date-token matches
+ * the day-of-month production, set the found-day-of- month flag and set
+ * the day-of-month-value to the number denoted by the date-token. Skip
+ * the remaining sub-steps and continue to the next date-token.
+ */
+ if (!found_dom) {
+ result = DAY_OF_MONTH.exec(token);
+ if (result) {
+ found_dom = true;
+ date.setUTCDate(result[1]);
+ continue;
+ }
+ }
+
+ /* 2.3. If the found-month flag is not set and the date-token matches the
+ * month production, set the found-month flag and set the month-value to
+ * the month denoted by the date-token. Skip the remaining sub-steps and
+ * continue to the next date-token.
+ */
+ if (!found_month) {
+ result = MONTH.exec(token);
+ if (result) {
+ found_month = true;
+ date.setUTCMonth(MONTH_TO_NUM[result[1].toLowerCase()]);
+ continue;
+ }
+ }
+
+ /* 2.4. If the found-year flag is not set and the date-token matches the year
+ * production, set the found-year flag and set the year-value to the number
+ * denoted by the date-token. Skip the remaining sub-steps and continue to
+ * the next date-token.
+ */
+ if (!found_year) {
+ result = YEAR.exec(token);
+ if (result) {
+ var year = result[0];
+ /* From S5.1.1:
+ * 3. If the year-value is greater than or equal to 70 and less
+ * than or equal to 99, increment the year-value by 1900.
+ * 4. If the year-value is greater than or equal to 0 and less
+ * than or equal to 69, increment the year-value by 2000.
+ */
+ if (70 <= year && year <= 99)
+ year += 1900;
+ else if (0 <= year && year <= 69)
+ year += 2000;
+
+ if (year < 1601)
+ return; // 5. ... the year-value is less than 1601
+
+ found_year = true;
+ date.setUTCFullYear(year);
+ continue;
+ }
+ }
+ }
+
+ if (!(found_time && found_dom && found_month && found_year)) {
+ return; // 5. ... at least one of the found-day-of-month, found-month, found-
+ // year, or found-time flags is not set,
+ }
+
+ return date;
+}
+
+function formatDate(date) {
+ var d = date.getUTCDate(); d = d >= 10 ? d : '0'+d;
+ var h = date.getUTCHours(); h = h >= 10 ? h : '0'+h;
+ var m = date.getUTCMinutes(); m = m >= 10 ? m : '0'+m;
+ var s = date.getUTCSeconds(); s = s >= 10 ? s : '0'+s;
+ return NUM_TO_DAY[date.getUTCDay()] + ', ' +
+ d+' '+ NUM_TO_MONTH[date.getUTCMonth()] +' '+ date.getUTCFullYear() +' '+
+ h+':'+m+':'+s+' GMT';
+}
+
+// S5.1.2 Canonicalized Host Names
+function canonicalDomain(str) {
+ if (str == null) return null;
+ str = str.trim().replace(/^\./,''); // S4.1.2.3 & S5.2.3: ignore leading .
+
+ // convert to IDN if any non-ASCII characters
+ if (punycode && /[^\u0001-\u007f]/.test(str))
+ str = punycode.toASCII(str);
+
+ return str.toLowerCase();
+}
+
+// S5.1.3 Domain Matching
+function domainMatch(str, domStr, canonicalize) {
+ if (str == null || domStr == null) return null;
+ if (canonicalize !== false) {
+ str = canonicalDomain(str);
+ domStr = canonicalDomain(domStr);
+ }
+
+ /*
+ * "The domain string and the string are identical. (Note that both the
+ * domain string and the string will have been canonicalized to lower case at
+ * this point)"
+ */
+ if (str == domStr) return true;
+
+ /* "All of the following [three] conditions hold:" (order adjusted from the RFC) */
+
+ /* "* The string is a host name (i.e., not an IP address)." */
+ if (net.isIP(str)) return false;
+
+ /* "* The domain string is a suffix of the string" */
+ var idx = str.indexOf(domStr);
+ if (idx <= 0) return false; // it's a non-match (-1) or prefix (0)
+
+ // e.g "a.b.c".indexOf("b.c") === 2
+ // 5 === 3+2
+ if (str.length !== domStr.length + idx) // it's not a suffix
+ return false;
+
+ /* "* The last character of the string that is not included in the domain
+ * string is a %x2E (".") character." */
+ if (str.substr(idx-1,1) !== '.') return false;
+ return true;
+}
+
+
+// RFC6265 S5.1.4 Paths and Path-Match
+
+/*
+ * "The user agent MUST use an algorithm equivalent to the following algorithm
+ * to compute the default-path of a cookie:"
+ *
+ * Assumption: the path (and not query part or absolute uri) is passed in.
+ */
+function defaultPath(path) {
+ // "2. If the uri-path is empty or if the first character of the uri-path is not
+ // a %x2F ("/") character, output %x2F ("/") and skip the remaining steps.
+ if (!path || path.substr(0,1) !== "/") return "/";
+
+ // "3. If the uri-path contains no more than one %x2F ("/") character, output
+ // %x2F ("/") and skip the remaining step."
+ if (path === "/") return path;
+
+ var rightSlash = path.lastIndexOf("/");
+ if (rightSlash === 0) return "/";
+
+ // "4. Output the characters of the uri-path from the first character up to,
+ // but not including, the right-most %x2F ("/")."
+ return path.slice(0, rightSlash);
+}
+
+/*
+ * "A request-path path-matches a given cookie-path if at least one of the
+ * following conditions holds:"
+ */
+function pathMatch(reqPath,cookiePath) {
+ // "o The cookie-path and the request-path are identical."
+ if (cookiePath === reqPath)
+ return true;
+
+ var idx = reqPath.indexOf(cookiePath);
+ if (idx === 0) {
+ // "o The cookie-path is a prefix of the request-path, and the last
+ // character of the cookie-path is %x2F ("/")."
+ if (cookiePath.substr(-1) === "/")
+ return true;
+
+ // " o The cookie-path is a prefix of the request-path, and the first
+ // character of the request-path that is not included in the cookie- path
+ // is a %x2F ("/") character."
+ if (reqPath.substr(cookiePath.length,1) === "/")
+ return true;
+ }
+
+ return false;
+}
+
+function parse(str, strict) {
+ str = str.trim();
+
+ // S4.1.1 Trailing semi-colons are not part of the specification.
+ // If we are not in strict mode we remove the trailing semi-colons.
+ var semiColonCheck = TRAILING_SEMICOLON.exec(str);
+ if (semiColonCheck) {
+ if (strict) return;
+ str = str.slice(0, semiColonCheck.index);
+ }
+
+ // We use a regex to parse the "name-value-pair" part of S5.2
+ var firstSemi = str.indexOf(';'); // S5.2 step 1
+ var pairRx = strict ? COOKIE_PAIR_STRICT : COOKIE_PAIR;
+ var result = pairRx.exec(firstSemi === -1 ? str : str.substr(0,firstSemi));
+
+ // Rx satisfies the "the name string is empty" and "lacks a %x3D ("=")"
+ // constraints as well as trimming any whitespace.
+ if (!result) return;
+
+ var c = new Cookie();
+ c.key = result[1]; // the regexp should trim() already
+ c.value = result[3]; // [2] is quotes or empty-string
+
+ if (firstSemi === -1) return c;
+
+ // S5.2.3 "unparsed-attributes consist of the remainder of the set-cookie-string
+ // (including the %x3B (";") in question)." plus later on in the same section
+ // "discard the first ";" and trim".
+ var unparsed = str.slice(firstSemi).replace(/^\s*;\s*/,'').trim();
+
+ // "If the unparsed-attributes string is empty, skip the rest of these
+ // steps."
+ if (unparsed.length === 0) return c;
+
+ /*
+ * S5.2 says that when looping over the items "[p]rocess the attribute-name
+ * and attribute-value according to the requirements in the following
+ * subsections" for every item. Plus, for many of the individual attributes
+ * in S5.3 it says to use the "attribute-value of the last attribute in the
+ * cookie-attribute-list". Therefore, in this implementation, we overwrite
+ * the previous value.
+ */
+ var cookie_avs = unparsed.split(/\s*;\s*/);
+ while (cookie_avs.length) {
+ var av = cookie_avs.shift();
+
+ if (strict && !EXTENSION_AV.test(av)) return;
+
+ var av_sep = av.indexOf('=');
+ var av_key, av_value;
+ if (av_sep === -1) {
+ av_key = av;
+ av_value = null;
+ } else {
+ av_key = av.substr(0,av_sep);
+ av_value = av.substr(av_sep+1);
+ }
+
+ av_key = av_key.trim().toLowerCase();
+ if (av_value) av_value = av_value.trim();
+
+ switch(av_key) {
+ case 'expires': // S5.2.1
+ if (!av_value) { if(strict){return}else{break;} }
+ var exp = parseDate(av_value,strict);
+ // "If the attribute-value failed to parse as a cookie date, ignore the
+ // cookie-av."
+ if (exp == null) { if(strict){return}else{break;} }
+ c.expires = exp;
+ // over and underflow not realistically a concern: V8's getTime() seems to
+ // store something larger than a 32-bit time_t (even with 32-bit node)
+ break;
+
+ case 'max-age': // S5.2.2
+ if (!av_value) { if(strict){return}else{break;} }
+ // "If the first character of the attribute-value is not a DIGIT or a "-"
+ // character ...[or]... If the remainder of attribute-value contains a
+ // non-DIGIT character, ignore the cookie-av."
+ if (!/^-?[0-9]+$/.test(av_value)) { if(strict){return}else{break;} }
+ var delta = parseInt(av_value,10);
+ if (strict && delta <= 0) return; // S4.1.1
+ // "If delta-seconds is less than or equal to zero (0), let expiry-time
+ // be the earliest representable date and time."
+ c.setMaxAge(delta);
+ break;
+
+ case 'domain': // S5.2.3
+ // "If the attribute-value is empty, the behavior is undefined. However,
+ // the user agent SHOULD ignore the cookie-av entirely."
+ if (!av_value) { if(strict){return}else{break;} }
+ // S5.2.3 "Let cookie-domain be the attribute-value without the leading %x2E
+ // (".") character."
+ var domain = av_value.trim().replace(/^\./,'');
+ if (!domain) { if(strict){return}else{break;} } // see "is empty" above
+ // "Convert the cookie-domain to lower case."
+ c.domain = domain.toLowerCase();
+ break;
+
+ case 'path': // S5.2.4
+ /*
+ * "If the attribute-value is empty or if the first character of the
+ * attribute-value is not %x2F ("/"):
+ * Let cookie-path be the default-path.
+ * Otherwise:
+ * Let cookie-path be the attribute-value."
+ *
+ * We'll represent the default-path as null since it depends on the
+ * context of the parsing.
+ */
+ if (!av_value || av_value.substr(0,1) != "/") { if(strict){return}else{break;} }
+ c.path = av_value;
+ break;
+
+ case 'secure': // S5.2.5
+ /*
+ * "If the attribute-name case-insensitively matches the string "Secure",
+ * the user agent MUST append an attribute to the cookie-attribute-list
+ * with an attribute-name of Secure and an empty attribute-value."
+ */
+ if (av_value != null) { if(strict){return} }
+ c.secure = true;
+ break;
+
+ case 'httponly': // S5.2.6 -- effectively the same as 'secure'
+ if (av_value != null) { if(strict){return} }
+ c.httpOnly = true;
+ break;
+
+ default:
+ c.extensions = c.extensions || [];
+ c.extensions.push(av);
+ break;
+ }
+ }
+
+ // ensure a default date for sorting:
+ c.creation = new Date();
+ return c;
+}
+
+function fromJSON(str) {
+ if (!str) return null;
+
+ var obj;
+ try {
+ obj = JSON.parse(str);
+ } catch (e) {
+ return null;
+ }
+
+ var c = new Cookie();
+ for (var i=0; i<numCookieProperties; i++) {
+ var prop = cookieProperties[i];
+ if (obj[prop] == null) continue;
+ if (prop === 'expires' ||
+ prop === 'creation' ||
+ prop === 'lastAccessed')
+ {
+ c[prop] = obj[prop] == "Infinity" ? "Infinity" : new Date(obj[prop]);
+ } else {
+ c[prop] = obj[prop];
+ }
+ }
+
+
+ // ensure a default date for sorting:
+ c.creation = c.creation || new Date();
+
+ return c;
+}
+
+/* Section 5.4 part 2:
+ * "* Cookies with longer paths are listed before cookies with
+ * shorter paths.
+ *
+ * * Among cookies that have equal-length path fields, cookies with
+ * earlier creation-times are listed before cookies with later
+ * creation-times."
+ */
+
+function cookieCompare(a,b) {
+ // descending for length: b CMP a
+ var deltaLen = (b.path ? b.path.length : 0) - (a.path ? a.path.length : 0);
+ if (deltaLen !== 0) return deltaLen;
+ // ascending for time: a CMP b
+ return (a.creation ? a.creation.getTime() : MAX_TIME) -
+ (b.creation ? b.creation.getTime() : MAX_TIME);
+}
+
+// Gives the permutation of all possible domainMatch()es of a given domain. The
+// array is in shortest-to-longest order. Handy for indexing.
+function permuteDomain(domain) {
+ var pubSuf = pubsuffix.getPublicSuffix(domain);
+ if (!pubSuf) return null;
+ if (pubSuf == domain) return [domain];
+
+ var prefix = domain.slice(0,-(pubSuf.length+1)); // ".example.com"
+ var parts = prefix.split('.').reverse();
+ var cur = pubSuf;
+ var permutations = [cur];
+ while (parts.length) {
+ cur = parts.shift()+'.'+cur;
+ permutations.push(cur);
+ }
+ return permutations;
+}
+
+// Gives the permutation of all possible pathMatch()es of a given path. The
+// array is in longest-to-shortest order. Handy for indexing.
+function permutePath(path) {
+ var origPath = path;
+ if (path === '/') return ['/'];
+ if (path.lastIndexOf('/') === path.length-1)
+ path = path.substr(0,path.length-1);
+ var permutations = [path];
+ while (path.length > 1) {
+ var lindex = path.lastIndexOf('/');
+ if (lindex === 0) break;
+ path = path.substr(0,lindex);
+ permutations.push(path);
+ }
+ permutations.push('/');
+ return permutations;
+}
+
+
+function Cookie (opts) {
+ if (typeof opts !== "object") return;
+ Object.keys(opts).forEach(function (key) {
+ if (Cookie.prototype.hasOwnProperty(key)) {
+ this[key] = opts[key] || Cookie.prototype[key];
+ }
+ }.bind(this));
+}
+
+Cookie.parse = parse;
+Cookie.fromJSON = fromJSON;
+
+Cookie.prototype.key = "";
+Cookie.prototype.value = "";
+
+// the order in which the RFC has them:
+Cookie.prototype.expires = "Infinity"; // coerces to literal Infinity
+Cookie.prototype.maxAge = null; // takes precedence over expires for TTL
+Cookie.prototype.domain = null;
+Cookie.prototype.path = null;
+Cookie.prototype.secure = false;
+Cookie.prototype.httpOnly = false;
+Cookie.prototype.extensions = null;
+
+// set by the CookieJar:
+Cookie.prototype.hostOnly = null; // boolean when set
+Cookie.prototype.pathIsDefault = null; // boolean when set
+Cookie.prototype.creation = null; // Date when set; defaulted by Cookie.parse
+Cookie.prototype.lastAccessed = null; // Date when set
+
+var cookieProperties = Object.freeze(Object.keys(Cookie.prototype).map(function(p) {
+ if (p instanceof Function) return;
+ return p;
+}));
+var numCookieProperties = cookieProperties.length;
+
+Cookie.prototype.inspect = function inspect() {
+ var now = Date.now();
+ return 'Cookie="'+this.toString() +
+ '; hostOnly='+(this.hostOnly != null ? this.hostOnly : '?') +
+ '; aAge='+(this.lastAccessed ? (now-this.lastAccessed.getTime())+'ms' : '?') +
+ '; cAge='+(this.creation ? (now-this.creation.getTime())+'ms' : '?') +
+ '"';
+};
+
+Cookie.prototype.validate = function validate() {
+ if (!COOKIE_OCTETS.test(this.value))
+ return false;
+ if (this.expires != Infinity && !(this.expires instanceof Date) && !parseDate(this.expires,true))
+ return false;
+ if (this.maxAge != null && this.maxAge <= 0)
+ return false; // "Max-Age=" non-zero-digit *DIGIT
+ if (this.path != null && !PATH_VALUE.test(this.path))
+ return false;
+
+ var cdomain = this.cdomain();
+ if (cdomain) {
+ if (cdomain.match(/\.$/))
+ return false; // S4.1.2.3 suggests that this is bad. domainMatch() tests confirm this
+ var suffix = pubsuffix.getPublicSuffix(cdomain);
+ if (suffix == null) // it's a public suffix
+ return false;
+ }
+ return true;
+};
+
+Cookie.prototype.setExpires = function setExpires(exp) {
+ if (exp instanceof Date) this.expires = exp;
+ else this.expires = parseDate(exp) || "Infinity";
+};
+
+Cookie.prototype.setMaxAge = function setMaxAge(age) {
+ if (age === Infinity || age === -Infinity)
+ this.maxAge = age.toString(); // so JSON.stringify() works
+ else
+ this.maxAge = age;
+};
+
+// gives Cookie header format
+Cookie.prototype.cookieString = function cookieString() {
+ var val = this.value;
+ if (val == null) val = '';
+ if (!val.length || COOKIE_OCTETS.test(val))
+ return this.key+'='+val;
+ else
+ return this.key+'="'+val+'"';
+};
+
+// gives Set-Cookie header format
+Cookie.prototype.toString = function toString() {
+ var str = this.cookieString();
+
+ if (this.expires != Infinity) {
+ if (this.expires instanceof Date)
+ str += '; Expires='+formatDate(this.expires);
+ else
+ str += '; Expires='+this.expires;
+ }
+
+ if (this.maxAge != null && this.maxAge != Infinity)
+ str += '; Max-Age='+this.maxAge;
+
+ if (this.domain && !this.hostOnly)
+ str += '; Domain='+this.domain;
+ if (this.path)
+ str += '; Path='+this.path;
+
+ if (this.secure) str += '; Secure';
+ if (this.httpOnly) str += '; HttpOnly';
+ if (this.extensions) {
+ this.extensions.forEach(function(ext) {
+ str += '; '+ext;
+ });
+ }
+
+ return str;
+};
+
+// TTL() partially replaces the "expiry-time" parts of S5.3 step 3 (setCookie()
+// elsewhere)
+// S5.3 says to give the "latest representable date" for which we use Infinity
+// For "expired" we use 0
+Cookie.prototype.TTL = function TTL(now) {
+ /* RFC6265 S4.1.2.2 If a cookie has both the Max-Age and the Expires
+ * attribute, the Max-Age attribute has precedence and controls the
+ * expiration date of the cookie.
+ * (Concurs with S5.3 step 3)
+ */
+ if (this.maxAge != null) {
+ return this.maxAge<=0 ? 0 : this.maxAge*1000;
+ }
+
+ var expires = this.expires;
+ if (expires != Infinity) {
+ if (!(expires instanceof Date)) {
+ expires = parseDate(expires) || Infinity;
+ }
+
+ if (expires == Infinity)
+ return Infinity;
+
+ return expires.getTime() - (now || Date.now());
+ }
+
+ return Infinity;
+};
+
+// expiryTime() replaces the "expiry-time" parts of S5.3 step 3 (setCookie()
+// elsewhere)
+Cookie.prototype.expiryTime = function expiryTime(now) {
+ if (this.maxAge != null) {
+ var relativeTo = this.creation || now || new Date();
+ var age = (this.maxAge <= 0) ? -Infinity : this.maxAge*1000;
+ return relativeTo.getTime() + age;
+ }
+
+ if (this.expires == Infinity) return Infinity;
+ return this.expires.getTime();
+};
+
+// expiryDate() replaces the "expiry-time" parts of S5.3 step 3 (setCookie()
+// elsewhere), except it returns a Date
+Cookie.prototype.expiryDate = function expiryDate(now) {
+ var millisec = this.expiryTime(now);
+ if (millisec == Infinity) return new Date(MAX_TIME);
+ else if (millisec == -Infinity) return new Date(MIN_TIME);
+ else return new Date(millisec);
+};
+
+// This replaces the "persistent-flag" parts of S5.3 step 3
+Cookie.prototype.isPersistent = function isPersistent() {
+ return (this.maxAge != null || this.expires != Infinity);
+};
+
+// Mostly S5.1.2 and S5.2.3:
+Cookie.prototype.cdomain =
+Cookie.prototype.canonicalizedDomain = function canonicalizedDomain() {
+ if (this.domain == null) return null;
+ return canonicalDomain(this.domain);
+};
+
+
+var memstore;
+function CookieJar(store, rejectPublicSuffixes) {
+ if (rejectPublicSuffixes != null) this.rejectPublicSuffixes = rejectPublicSuffixes;
+ if (!store) {
+ memstore = memstore || require('./memstore');
+ store = new memstore.MemoryCookieStore();
+ }
+ this.store = store;
+}
+CookieJar.prototype.store = null;
+CookieJar.prototype.rejectPublicSuffixes = true;
+
+CookieJar.prototype.setCookie = function setCookie(cookie, url, options, cb) {
+ var err;
+ var context = (url instanceof Object) ? url : urlParse(url);
+ if (options instanceof Function) {
+ cb = options;
+ options = {};
+ }
+
+ var host = canonicalDomain(context.hostname);
+
+ // S5.3 step 1
+ if (!(cookie instanceof Cookie))
+ cookie = Cookie.parse(cookie, options.strict === true);
+ if (!cookie) {
+ err = new Error("Cookie failed to parse");
+ return cb(options.ignoreError ? null : err);
+ }
+
+ // S5.3 step 2
+ var now = options.now || new Date(); // will assign later to save effort in the face of errors
+
+ // S5.3 step 3: NOOP; persistent-flag and expiry-time is handled by getCookie()
+
+ // S5.3 step 4: NOOP; domain is null by default
+
+ // S5.3 step 5: public suffixes
+ if (this.rejectPublicSuffixes && cookie.domain) {
+ var suffix = pubsuffix.getPublicSuffix(cookie.cdomain());
+ if (suffix == null) { // e.g. "com"
+ err = new Error("Cookie has domain set to a public suffix");
+ return cb(options.ignoreError ? null : err);
+ }
+ }
+
+ // S5.3 step 6:
+ if (cookie.domain) {
+ if (!domainMatch(host, cookie.cdomain(), false)) {
+ err = new Error("Cookie not in this host's domain. Cookie:"+cookie.cdomain()+" Request:"+host);
+ return cb(options.ignoreError ? null : err);
+ }
+
+ if (cookie.hostOnly == null) // don't reset if already set
+ cookie.hostOnly = false;
+
+ } else {
+ cookie.hostOnly = true;
+ cookie.domain = host;
+ }
+
+ // S5.3 step 7: "Otherwise, set the cookie's path to the default-path of the
+ // request-uri"
+ if (!cookie.path) {
+ cookie.path = defaultPath(context.pathname);
+ cookie.pathIsDefault = true;
+ } else {
+ if (cookie.path.length > 1 && cookie.path.substr(-1) == '/')
+ cookie.path = cookie.path.slice(0,-1);
+ }
+
+ // S5.3 step 8: NOOP; secure attribute
+ // S5.3 step 9: NOOP; httpOnly attribute
+
+ // S5.3 step 10
+ if (options.http === false && cookie.httpOnly) {
+ err = new Error("Cookie is HttpOnly and this isn't an HTTP API");
+ return cb(options.ignoreError ? null : err);
+ }
+
+ var store = this.store;
+
+ if (!store.updateCookie) {
+ store.updateCookie = function stubUpdateCookie(oldCookie, newCookie, cb) {
+ this.putCookie(newCookie, cb);
+ };
+ }
+
+ store.findCookie(cookie.domain, cookie.path, cookie.key, function(err,oldCookie) {
+ if (err) return cb(err);
+
+ var next = function(err) {
+ if (err) return cb(err);
+ else cb(null, cookie);
+ };
+
+ if (oldCookie) {
+ // S5.3 step 11 - "If the cookie store contains a cookie with the same name,
+ // domain, and path as the newly created cookie:"
+ if (options.http === false && oldCookie.httpOnly) { // step 11.2
+ err = new Error("old Cookie is HttpOnly and this isn't an HTTP API");
+ return cb(options.ignoreError ? null : err);
+ }
+ cookie.creation = oldCookie.creation; // step 11.3
+ cookie.lastAccessed = now;
+ // Step 11.4 (delete cookie) is implied by just setting the new one:
+ store.updateCookie(oldCookie, cookie, next); // step 12
+
+ } else {
+ cookie.creation = cookie.lastAccessed = now;
+ store.putCookie(cookie, next); // step 12
+ }
+ });
+};
+
+// RFC6365 S5.4
+CookieJar.prototype.getCookies = function getCookies(url, options, cb) {
+ var context = (url instanceof Object) ? url : urlParse(url);
+ if (options instanceof Function) {
+ cb = options;
+ options = {};
+ }
+
+ var host = canonicalDomain(context.hostname);
+ var path = context.pathname || '/';
+
+ var secure = options.secure;
+ if (secure == null && context.protocol &&
+ (context.protocol == 'https:' || context.protocol == 'wss:'))
+ {
+ secure = true;
+ }
+
+ var http = options.http;
+ if (http == null) http = true;
+
+ var now = options.now || Date.now();
+ var expireCheck = options.expire !== false;
+ var allPaths = !!options.allPaths;
+ var store = this.store;
+
+ function matchingCookie(c) {
+ // "Either:
+ // The cookie's host-only-flag is true and the canonicalized
+ // request-host is identical to the cookie's domain.
+ // Or:
+ // The cookie's host-only-flag is false and the canonicalized
+ // request-host domain-matches the cookie's domain."
+ if (c.hostOnly) {
+ if (c.domain != host) return false;
+ } else {
+ if (!domainMatch(host, c.domain, false)) return false;
+ }
+
+ // "The request-uri's path path-matches the cookie's path."
+ if (!allPaths && !pathMatch(path, c.path))
+ return false;
+
+ // "If the cookie's secure-only-flag is true, then the request-uri's
+ // scheme must denote a "secure" protocol"
+ if (c.secure && !secure)
+ return false;
+
+ // "If the cookie's http-only-flag is true, then exclude the cookie if the
+ // cookie-string is being generated for a "non-HTTP" API"
+ if (c.httpOnly && !http)
+ return false;
+
+ // deferred from S5.3
+ // non-RFC: allow retention of expired cookies by choice
+ if (expireCheck && c.expiryTime() <= now) {
+ store.removeCookie(c.domain, c.path, c.key, function(){}); // result ignored
+ return false;
+ }
+
+ return true;
+ }
+
+ store.findCookies(host, allPaths ? null : path, function(err,cookies) {
+ if (err) return cb(err);
+
+ cookies = cookies.filter(matchingCookie);
+
+ // sorting of S5.4 part 2
+ if (options.sort !== false)
+ cookies = cookies.sort(cookieCompare);
+
+ // S5.4 part 3
+ var now = new Date();
+ cookies.forEach(function(c) { c.lastAccessed = now });
+ // TODO persist lastAccessed
+
+ cb(null,cookies);
+ });
+};
+
+CookieJar.prototype.getCookieString = function(/*..., cb*/) {
+ var args = Array.prototype.slice.call(arguments,0);
+ var cb = args.pop();
+ var next = function(err,cookies) {
+ if (err) cb(err);
+ else cb(null, cookies.map(function(c){return c.cookieString()}).join('; '));
+ };
+ args.push(next);
+ this.getCookies.apply(this,args);
+};
+
+CookieJar.prototype.getSetCookieStrings = function(/*..., cb*/) {
+ var args = Array.prototype.slice.call(arguments,0);
+ var cb = args.pop();
+ var next = function(err,cookies) {
+ if (err) cb(err);
+ else cb(null, cookies.map(function(c){return c.toString()}));
+ };
+ args.push(next);
+ this.getCookies.apply(this,args);
+};
+
+
+
+module.exports = {
+ CookieJar: CookieJar,
+ Cookie: Cookie,
+ parseDate: parseDate,
+ formatDate: formatDate,
+ parse: parse,
+ fromJSON: fromJSON,
+ domainMatch: domainMatch,
+ defaultPath: defaultPath,
+ pathMatch: pathMatch,
+ getPublicSuffix: pubsuffix.getPublicSuffix,
+ cookieCompare: cookieCompare,
+ permuteDomain: permuteDomain,
+ permutePath: permutePath,
+ canonicalDomain: canonicalDomain,
+};
diff --git a/deps/npm/node_modules/request/node_modules/tough-cookie/lib/memstore.js b/deps/npm/node_modules/request/node_modules/tough-cookie/lib/memstore.js
new file mode 100644
index 000000000..66abb3760
--- /dev/null
+++ b/deps/npm/node_modules/request/node_modules/tough-cookie/lib/memstore.js
@@ -0,0 +1,102 @@
+var tough = require('./cookie');
+var permuteDomain = tough.permuteDomain;
+var permutePath = tough.permutePath;
+var util = require('util');
+
+function MemoryCookieStore() {
+ this.idx = {};
+}
+module.exports.MemoryCookieStore = MemoryCookieStore;
+MemoryCookieStore.prototype.idx = null;
+
+// force a default depth:
+MemoryCookieStore.prototype.inspect = function inspect() {
+ return "{ idx: "+util.inspect(this.idx, false, 2)+' }';
+};
+
+MemoryCookieStore.prototype.findCookie = function findCookie(domain, path, key, cb) {
+ if (!this.idx[domain]) return cb(null,undefined);
+ if (!this.idx[domain][path]) return cb(null,undefined);
+ return cb(null,this.idx[domain][path][key]||null);
+};
+
+MemoryCookieStore.prototype.findCookies = function findCookies(domain, path, cb) {
+ var results = [];
+ if (!domain) return cb(null,[]);
+
+ var pathMatcher;
+ if (!path) {
+ // null or '/' means "all paths"
+ pathMatcher = function matchAll(domainIndex) {
+ for (var curPath in domainIndex) {
+ var pathIndex = domainIndex[curPath];
+ for (var key in pathIndex) {
+ results.push(pathIndex[key]);
+ }
+ }
+ };
+
+ } else if (path === '/') {
+ pathMatcher = function matchSlash(domainIndex) {
+ var pathIndex = domainIndex['/'];
+ if (!pathIndex) return;
+ for (var key in pathIndex) {
+ results.push(pathIndex[key]);
+ }
+ };
+
+ } else {
+ var paths = permutePath(path) || [path];
+ pathMatcher = function matchRFC(domainIndex) {
+ paths.forEach(function(curPath) {
+ var pathIndex = domainIndex[curPath];
+ if (!pathIndex) return;
+ for (var key in pathIndex) {
+ results.push(pathIndex[key]);
+ }
+ });
+ };
+ }
+
+ var domains = permuteDomain(domain) || [domain];
+ var idx = this.idx;
+ domains.forEach(function(curDomain) {
+ var domainIndex = idx[curDomain];
+ if (!domainIndex) return;
+ pathMatcher(domainIndex);
+ });
+
+ cb(null,results);
+};
+
+MemoryCookieStore.prototype.putCookie = function putCookie(cookie, cb) {
+ if (!this.idx[cookie.domain]) this.idx[cookie.domain] = {};
+ if (!this.idx[cookie.domain][cookie.path]) this.idx[cookie.domain][cookie.path] = {};
+ this.idx[cookie.domain][cookie.path][cookie.key] = cookie;
+ cb(null);
+};
+
+MemoryCookieStore.prototype.updateCookie = function updateCookie(oldCookie, newCookie, cb) {
+ // updateCookie() may avoid updating cookies that are identical. For example,
+ // lastAccessed may not be important to some stores and an equality
+ // comparison could exclude that field.
+ this.putCookie(newCookie,cb);
+};
+
+MemoryCookieStore.prototype.removeCookie = function removeCookie(domain, path, key, cb) {
+ if (this.idx[domain] && this.idx[domain][path] && this.idx[domain][path][key]) {
+ delete this.idx[domain][path][key];
+ }
+ cb(null);
+};
+
+MemoryCookieStore.prototype.removeCookies = function removeCookies(domain, path, cb) {
+ if (!this.idx[domain]) {
+ if (path) {
+ delete this.idx[domain][path];
+ } else {
+ delete this.idx[domain];
+ }
+ }
+ return cb(null);
+};
diff --git a/deps/npm/node_modules/request/node_modules/tough-cookie/lib/pubsuffix.js b/deps/npm/node_modules/request/node_modules/tough-cookie/lib/pubsuffix.js
new file mode 100644
index 000000000..a7031473b
--- /dev/null
+++ b/deps/npm/node_modules/request/node_modules/tough-cookie/lib/pubsuffix.js
@@ -0,0 +1,69 @@
+/****************************************************
+ * AUTOMATICALLY GENERATED by generate-pubsuffix.js *
+ * DO NOT EDIT! *
+ ****************************************************/
+
+module.exports.getPublicSuffix = function getPublicSuffix(domain) {
+ /*
+ * Copyright GoInstant, Inc. and other contributors. All rights reserved.
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to
+ * deal in the Software without restriction, including without limitation the
+ * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+ * sell copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+ * IN THE SOFTWARE.
+ */
+ if (!domain) return null;
+ if (domain.match(/^\./)) return null;
+
+ domain = domain.toLowerCase();
+ var parts = domain.split('.').reverse();
+
+ var suffix = '';
+ var suffixLen = 0;
+ for (var i=0; i<parts.length; i++) {
+ var part = parts[i];
+ var starstr = '*'+suffix;
+ var partstr = part+suffix;
+
+ if (index[starstr]) { // star rule matches
+ suffixLen = i+1;
+ if (index[partstr] === false) { // exception rule matches (NB: false, not undefined)
+ suffixLen--;
+ }
+ } else if (index[partstr]) { // exact match, not exception
+ suffixLen = i+1;
+ }
+
+ suffix = '.'+part+suffix;
+ }
+
+ if (index['*'+suffix]) { // *.domain exists (e.g. *.kyoto.jp for domain='kyoto.jp');
+ return null;
+ }
+
+ if (suffixLen && parts.length > suffixLen) {
+ return parts.slice(0,suffixLen+1).reverse().join('.');
+ }
+
+ return null;
+};
+
+// The following generated structure is used under the MPL version 1.1
+// See public-suffix.txt for more information
+
+var index = module.exports.index = Object.freeze(
+{"ac":true,"com.ac":true,"edu.ac":true,"gov.ac":true,"net.ac":true,"mil.ac":true,"org.ac":true,"ad":true,"nom.ad":true,"ae":true,"co.ae":true,"net.ae":true,"org.ae":true,"sch.ae":true,"ac.ae":true,"gov.ae":true,"mil.ae":true,"aero":true,"accident-investigation.aero":true,"accident-prevention.aero":true,"aerobatic.aero":true,"aeroclub.aero":true,"aerodrome.aero":true,"agents.aero":true,"aircraft.aero":true,"airline.aero":true,"airport.aero":true,"air-surveillance.aero":true,"airtraffic.aero":true,"air-traffic-control.aero":true,"ambulance.aero":true,"amusement.aero":true,"association.aero":true,"author.aero":true,"ballooning.aero":true,"broker.aero":true,"caa.aero":true,"cargo.aero":true,"catering.aero":true,"certification.aero":true,"championship.aero":true,"charter.aero":true,"civilaviation.aero":true,"club.aero":true,"conference.aero":true,"consultant.aero":true,"consulting.aero":true,"control.aero":true,"council.aero":true,"crew.aero":true,"design.aero":true,"dgca.aero":true,"educator.aero":true,"emergency.aero":true,"engine.aero":true,"engineer.aero":true,"entertainment.aero":true,"equipment.aero":true,"exchange.aero":true,"express.aero":true,"federation.aero":true,"flight.aero":true,"freight.aero":true,"fuel.aero":true,"gliding.aero":true,"government.aero":true,"groundhandling.aero":true,"group.aero":true,"hanggliding.aero":true,"homebuilt.aero":true,"insurance.aero":true,"journal.aero":true,"journalist.aero":true,"leasing.aero":true,"logistics.aero":true,"magazine.aero":true,"maintenance.aero":true,"marketplace.aero":true,"media.aero":true,"microlight.aero":true,"modelling.aero":true,"navigation.aero":true,"parachuting.aero":true,"paragliding.aero":true,"passenger-association.aero":true,"pilot.aero":true,"press.aero":true,"production.aero":true,"recreation.aero":true,"repbody.aero":true,"res.aero":true,"research.aero":true,"rotorcraft.aero":true,"safety.aero":true,"scientist.aero":true,"services.aero":true,"show.aero":true,"skydiving.aero":true,"software.aero":true,"student.aero":true,"taxi.aero":true,"trader.aero":true,"trading.aero":true,"trainer.aero":true,"union.aero":true,"workinggroup.aero":true,"works.aero":true,"af":true,"gov.af":true,"com.af":true,"org.af":true,"net.af":true,"edu.af":true,"ag":true,"com.ag":true,"org.ag":true,"net.ag":true,"co.ag":true,"nom.ag":true,"ai":true,"off.ai":true,"com.ai":true,"net.ai":true,"org.ai":true,"al":true,"com.al":true,"edu.al":true,"gov.al":true,"mil.al":true,"net.al":true,"org.al":true,"am":true,"an":true,"com.an":true,"net.an":true,"org.an":true,"edu.an":true,"ao":true,"ed.ao":true,"gv.ao":true,"og.ao":true,"co.ao":true,"pb.ao":true,"it.ao":true,"aq":true,"*.ar":true,"congresodelalengua3.ar":false,"educ.ar":false,"gobiernoelectronico.ar":false,"mecon.ar":false,"nacion.ar":false,"nic.ar":false,"promocion.ar":false,"retina.ar":false,"uba.ar":false,"e164.arpa":true,"in-addr.arpa":true,"ip6.arpa":true,"iris.arpa":true,"uri.arpa":true,"urn.arpa":true,"as":true,"gov.as":true,"asia":true,"at":true,"ac.at":true,"co.at":true,"gv.at":true,"or.at":true,"com.au":true,"net.au":true,"org.au":true,"edu.au":true,"gov.au":true,"csiro.au":true,"asn.au":true,"id.au":true,"info.au":true,"conf.au":true,"oz.au":true,"act.au":true,"nsw.au":true,"nt.au":true,"qld.au":true,"sa.au":true,"tas.au":true,"vic.au":true,"wa.au":true,"act.edu.au":true,"nsw.edu.au":true,"nt.edu.au":true,"qld.edu.au":true,"sa.edu.au":true,"tas.edu.au":true,"vic.edu.au":true,"wa.edu.au":true,"act.gov.au":true,"nt.gov.au":true,"qld.gov.au":true,"sa.gov.au":true,"tas.gov.au":true,"vic.gov.au":true,"wa.gov.au":true,"aw":true,"com.aw":true,"ax":true,"az":true,"com.az":true,"net.az":true,"int.az":true,"gov.az":true,"org.az":true,"edu.az":true,"info.az":true,"pp.az":true,"mil.az":true,"name.az":true,"pro.az":true,"biz.az":true,"ba":true,"org.ba":true,"net.ba":true,"edu.ba":true,"gov.ba":true,"mil.ba":true,"unsa.ba":true,"unbi.ba":true,"co.ba":true,"com.ba":true,"rs.ba":true,"bb":true,"biz.bb":true,"com.bb":true,"edu.bb":true,"gov.bb":true,"info.bb":true,"net.bb":true,"org.bb":true,"store.bb":true,"*.bd":true,"be":true,"ac.be":true,"bf":true,"gov.bf":true,"bg":true,"a.bg":true,"b.bg":true,"c.bg":true,"d.bg":true,"e.bg":true,"f.bg":true,"g.bg":true,"h.bg":true,"i.bg":true,"j.bg":true,"k.bg":true,"l.bg":true,"m.bg":true,"n.bg":true,"o.bg":true,"p.bg":true,"q.bg":true,"r.bg":true,"s.bg":true,"t.bg":true,"u.bg":true,"v.bg":true,"w.bg":true,"x.bg":true,"y.bg":true,"z.bg":true,"0.bg":true,"1.bg":true,"2.bg":true,"3.bg":true,"4.bg":true,"5.bg":true,"6.bg":true,"7.bg":true,"8.bg":true,"9.bg":true,"bh":true,"com.bh":true,"edu.bh":true,"net.bh":true,"org.bh":true,"gov.bh":true,"bi":true,"co.bi":true,"com.bi":true,"edu.bi":true,"or.bi":true,"org.bi":true,"biz":true,"bj":true,"asso.bj":true,"barreau.bj":true,"gouv.bj":true,"bm":true,"com.bm":true,"edu.bm":true,"gov.bm":true,"net.bm":true,"org.bm":true,"*.bn":true,"bo":true,"com.bo":true,"edu.bo":true,"gov.bo":true,"gob.bo":true,"int.bo":true,"org.bo":true,"net.bo":true,"mil.bo":true,"tv.bo":true,"br":true,"adm.br":true,"adv.br":true,"agr.br":true,"am.br":true,"arq.br":true,"art.br":true,"ato.br":true,"b.br":true,"bio.br":true,"blog.br":true,"bmd.br":true,"can.br":true,"cim.br":true,"cng.br":true,"cnt.br":true,"com.br":true,"coop.br":true,"ecn.br":true,"edu.br":true,"emp.br":true,"eng.br":true,"esp.br":true,"etc.br":true,"eti.br":true,"far.br":true,"flog.br":true,"fm.br":true,"fnd.br":true,"fot.br":true,"fst.br":true,"g12.br":true,"ggf.br":true,"gov.br":true,"imb.br":true,"ind.br":true,"inf.br":true,"jor.br":true,"jus.br":true,"lel.br":true,"mat.br":true,"med.br":true,"mil.br":true,"mus.br":true,"net.br":true,"nom.br":true,"not.br":true,"ntr.br":true,"odo.br":true,"org.br":true,"ppg.br":true,"pro.br":true,"psc.br":true,"psi.br":true,"qsl.br":true,"radio.br":true,"rec.br":true,"slg.br":true,"srv.br":true,"taxi.br":true,"teo.br":true,"tmp.br":true,"trd.br":true,"tur.br":true,"tv.br":true,"vet.br":true,"vlog.br":true,"wiki.br":true,"zlg.br":true,"bs":true,"com.bs":true,"net.bs":true,"org.bs":true,"edu.bs":true,"gov.bs":true,"bt":true,"com.bt":true,"edu.bt":true,"gov.bt":true,"net.bt":true,"org.bt":true,"bw":true,"co.bw":true,"org.bw":true,"by":true,"gov.by":true,"mil.by":true,"com.by":true,"of.by":true,"bz":true,"com.bz":true,"net.bz":true,"org.bz":true,"edu.bz":true,"gov.bz":true,"ca":true,"ab.ca":true,"bc.ca":true,"mb.ca":true,"nb.ca":true,"nf.ca":true,"nl.ca":true,"ns.ca":true,"nt.ca":true,"nu.ca":true,"on.ca":true,"pe.ca":true,"qc.ca":true,"sk.ca":true,"yk.ca":true,"gc.ca":true,"cat":true,"cc":true,"cd":true,"gov.cd":true,"cf":true,"cg":true,"ch":true,"ci":true,"org.ci":true,"or.ci":true,"com.ci":true,"co.ci":true,"edu.ci":true,"ed.ci":true,"ac.ci":true,"net.ci":true,"go.ci":true,"asso.ci":true,"xn--aroport-bya.ci":true,"int.ci":true,"presse.ci":true,"md.ci":true,"gouv.ci":true,"*.ck":true,"www.ck":false,"cl":true,"gov.cl":true,"gob.cl":true,"co.cl":true,"mil.cl":true,"cm":true,"gov.cm":true,"cn":true,"ac.cn":true,"com.cn":true,"edu.cn":true,"gov.cn":true,"net.cn":true,"org.cn":true,"mil.cn":true,"xn--55qx5d.cn":true,"xn--io0a7i.cn":true,"xn--od0alg.cn":true,"ah.cn":true,"bj.cn":true,"cq.cn":true,"fj.cn":true,"gd.cn":true,"gs.cn":true,"gz.cn":true,"gx.cn":true,"ha.cn":true,"hb.cn":true,"he.cn":true,"hi.cn":true,"hl.cn":true,"hn.cn":true,"jl.cn":true,"js.cn":true,"jx.cn":true,"ln.cn":true,"nm.cn":true,"nx.cn":true,"qh.cn":true,"sc.cn":true,"sd.cn":true,"sh.cn":true,"sn.cn":true,"sx.cn":true,"tj.cn":true,"xj.cn":true,"xz.cn":true,"yn.cn":true,"zj.cn":true,"hk.cn":true,"mo.cn":true,"tw.cn":true,"co":true,"arts.co":true,"com.co":true,"edu.co":true,"firm.co":true,"gov.co":true,"info.co":true,"int.co":true,"mil.co":true,"net.co":true,"nom.co":true,"org.co":true,"rec.co":true,"web.co":true,"com":true,"coop":true,"cr":true,"ac.cr":true,"co.cr":true,"ed.cr":true,"fi.cr":true,"go.cr":true,"or.cr":true,"sa.cr":true,"cu":true,"com.cu":true,"edu.cu":true,"org.cu":true,"net.cu":true,"gov.cu":true,"inf.cu":true,"cv":true,"cx":true,"gov.cx":true,"*.cy":true,"cz":true,"de":true,"dj":true,"dk":true,"dm":true,"com.dm":true,"net.dm":true,"org.dm":true,"edu.dm":true,"gov.dm":true,"do":true,"art.do":true,"com.do":true,"edu.do":true,"gob.do":true,"gov.do":true,"mil.do":true,"net.do":true,"org.do":true,"sld.do":true,"web.do":true,"dz":true,"com.dz":true,"org.dz":true,"net.dz":true,"gov.dz":true,"edu.dz":true,"asso.dz":true,"pol.dz":true,"art.dz":true,"ec":true,"com.ec":true,"info.ec":true,"net.ec":true,"fin.ec":true,"k12.ec":true,"med.ec":true,"pro.ec":true,"org.ec":true,"edu.ec":true,"gov.ec":true,"gob.ec":true,"mil.ec":true,"edu":true,"ee":true,"edu.ee":true,"gov.ee":true,"riik.ee":true,"lib.ee":true,"med.ee":true,"com.ee":true,"pri.ee":true,"aip.ee":true,"org.ee":true,"fie.ee":true,"eg":true,"com.eg":true,"edu.eg":true,"eun.eg":true,"gov.eg":true,"mil.eg":true,"name.eg":true,"net.eg":true,"org.eg":true,"sci.eg":true,"*.er":true,"es":true,"com.es":true,"nom.es":true,"org.es":true,"gob.es":true,"edu.es":true,"*.et":true,"eu":true,"fi":true,"aland.fi":true,"*.fj":true,"*.fk":true,"fm":true,"fo":true,"fr":true,"com.fr":true,"asso.fr":true,"nom.fr":true,"prd.fr":true,"presse.fr":true,"tm.fr":true,"aeroport.fr":true,"assedic.fr":true,"avocat.fr":true,"avoues.fr":true,"cci.fr":true,"chambagri.fr":true,"chirurgiens-dentistes.fr":true,"experts-comptables.fr":true,"geometre-expert.fr":true,"gouv.fr":true,"greta.fr":true,"huissier-justice.fr":true,"medecin.fr":true,"notaires.fr":true,"pharmacien.fr":true,"port.fr":true,"veterinaire.fr":true,"ga":true,"gd":true,"ge":true,"com.ge":true,"edu.ge":true,"gov.ge":true,"org.ge":true,"mil.ge":true,"net.ge":true,"pvt.ge":true,"gf":true,"gg":true,"co.gg":true,"org.gg":true,"net.gg":true,"sch.gg":true,"gov.gg":true,"gh":true,"com.gh":true,"edu.gh":true,"gov.gh":true,"org.gh":true,"mil.gh":true,"gi":true,"com.gi":true,"ltd.gi":true,"gov.gi":true,"mod.gi":true,"edu.gi":true,"org.gi":true,"gl":true,"gm":true,"ac.gn":true,"com.gn":true,"edu.gn":true,"gov.gn":true,"org.gn":true,"net.gn":true,"gov":true,"gp":true,"com.gp":true,"net.gp":true,"mobi.gp":true,"edu.gp":true,"org.gp":true,"asso.gp":true,"gq":true,"gr":true,"com.gr":true,"edu.gr":true,"net.gr":true,"org.gr":true,"gov.gr":true,"gs":true,"*.gt":true,"www.gt":false,"*.gu":true,"gw":true,"gy":true,"co.gy":true,"com.gy":true,"net.gy":true,"hk":true,"com.hk":true,"edu.hk":true,"gov.hk":true,"idv.hk":true,"net.hk":true,"org.hk":true,"xn--55qx5d.hk":true,"xn--wcvs22d.hk":true,"xn--lcvr32d.hk":true,"xn--mxtq1m.hk":true,"xn--gmqw5a.hk":true,"xn--ciqpn.hk":true,"xn--gmq050i.hk":true,"xn--zf0avx.hk":true,"xn--io0a7i.hk":true,"xn--mk0axi.hk":true,"xn--od0alg.hk":true,"xn--od0aq3b.hk":true,"xn--tn0ag.hk":true,"xn--uc0atv.hk":true,"xn--uc0ay4a.hk":true,"hm":true,"hn":true,"com.hn":true,"edu.hn":true,"org.hn":true,"net.hn":true,"mil.hn":true,"gob.hn":true,"hr":true,"iz.hr":true,"from.hr":true,"name.hr":true,"com.hr":true,"ht":true,"com.ht":true,"shop.ht":true,"firm.ht":true,"info.ht":true,"adult.ht":true,"net.ht":true,"pro.ht":true,"org.ht":true,"med.ht":true,"art.ht":true,"coop.ht":true,"pol.ht":true,"asso.ht":true,"edu.ht":true,"rel.ht":true,"gouv.ht":true,"perso.ht":true,"hu":true,"co.hu":true,"info.hu":true,"org.hu":true,"priv.hu":true,"sport.hu":true,"tm.hu":true,"2000.hu":true,"agrar.hu":true,"bolt.hu":true,"casino.hu":true,"city.hu":true,"erotica.hu":true,"erotika.hu":true,"film.hu":true,"forum.hu":true,"games.hu":true,"hotel.hu":true,"ingatlan.hu":true,"jogasz.hu":true,"konyvelo.hu":true,"lakas.hu":true,"media.hu":true,"news.hu":true,"reklam.hu":true,"sex.hu":true,"shop.hu":true,"suli.hu":true,"szex.hu":true,"tozsde.hu":true,"utazas.hu":true,"video.hu":true,"id":true,"ac.id":true,"co.id":true,"go.id":true,"mil.id":true,"net.id":true,"or.id":true,"sch.id":true,"web.id":true,"ie":true,"gov.ie":true,"*.il":true,"im":true,"co.im":true,"ltd.co.im":true,"plc.co.im":true,"net.im":true,"gov.im":true,"org.im":true,"nic.im":true,"ac.im":true,"in":true,"co.in":true,"firm.in":true,"net.in":true,"org.in":true,"gen.in":true,"ind.in":true,"nic.in":true,"ac.in":true,"edu.in":true,"res.in":true,"gov.in":true,"mil.in":true,"info":true,"int":true,"eu.int":true,"io":true,"com.io":true,"iq":true,"gov.iq":true,"edu.iq":true,"mil.iq":true,"com.iq":true,"org.iq":true,"net.iq":true,"ir":true,"ac.ir":true,"co.ir":true,"gov.ir":true,"id.ir":true,"net.ir":true,"org.ir":true,"sch.ir":true,"xn--mgba3a4f16a.ir":true,"xn--mgba3a4fra.ir":true,"is":true,"net.is":true,"com.is":true,"edu.is":true,"gov.is":true,"org.is":true,"int.is":true,"it":true,"gov.it":true,"edu.it":true,"agrigento.it":true,"ag.it":true,"alessandria.it":true,"al.it":true,"ancona.it":true,"an.it":true,"aosta.it":true,"aoste.it":true,"ao.it":true,"arezzo.it":true,"ar.it":true,"ascoli-piceno.it":true,"ascolipiceno.it":true,"ap.it":true,"asti.it":true,"at.it":true,"avellino.it":true,"av.it":true,"bari.it":true,"ba.it":true,"andria-barletta-trani.it":true,"andriabarlettatrani.it":true,"trani-barletta-andria.it":true,"tranibarlettaandria.it":true,"barletta-trani-andria.it":true,"barlettatraniandria.it":true,"andria-trani-barletta.it":true,"andriatranibarletta.it":true,"trani-andria-barletta.it":true,"traniandriabarletta.it":true,"bt.it":true,"belluno.it":true,"bl.it":true,"benevento.it":true,"bn.it":true,"bergamo.it":true,"bg.it":true,"biella.it":true,"bi.it":true,"bologna.it":true,"bo.it":true,"bolzano.it":true,"bozen.it":true,"balsan.it":true,"alto-adige.it":true,"altoadige.it":true,"suedtirol.it":true,"bz.it":true,"brescia.it":true,"bs.it":true,"brindisi.it":true,"br.it":true,"cagliari.it":true,"ca.it":true,"caltanissetta.it":true,"cl.it":true,"campobasso.it":true,"cb.it":true,"carboniaiglesias.it":true,"carbonia-iglesias.it":true,"iglesias-carbonia.it":true,"iglesiascarbonia.it":true,"ci.it":true,"caserta.it":true,"ce.it":true,"catania.it":true,"ct.it":true,"catanzaro.it":true,"cz.it":true,"chieti.it":true,"ch.it":true,"como.it":true,"co.it":true,"cosenza.it":true,"cs.it":true,"cremona.it":true,"cr.it":true,"crotone.it":true,"kr.it":true,"cuneo.it":true,"cn.it":true,"dell-ogliastra.it":true,"dellogliastra.it":true,"ogliastra.it":true,"og.it":true,"enna.it":true,"en.it":true,"ferrara.it":true,"fe.it":true,"fermo.it":true,"fm.it":true,"firenze.it":true,"florence.it":true,"fi.it":true,"foggia.it":true,"fg.it":true,"forli-cesena.it":true,"forlicesena.it":true,"cesena-forli.it":true,"cesenaforli.it":true,"fc.it":true,"frosinone.it":true,"fr.it":true,"genova.it":true,"genoa.it":true,"ge.it":true,"gorizia.it":true,"go.it":true,"grosseto.it":true,"gr.it":true,"imperia.it":true,"im.it":true,"isernia.it":true,"is.it":true,"laquila.it":true,"aquila.it":true,"aq.it":true,"la-spezia.it":true,"laspezia.it":true,"sp.it":true,"latina.it":true,"lt.it":true,"lecce.it":true,"le.it":true,"lecco.it":true,"lc.it":true,"livorno.it":true,"li.it":true,"lodi.it":true,"lo.it":true,"lucca.it":true,"lu.it":true,"macerata.it":true,"mc.it":true,"mantova.it":true,"mn.it":true,"massa-carrara.it":true,"massacarrara.it":true,"carrara-massa.it":true,"carraramassa.it":true,"ms.it":true,"matera.it":true,"mt.it":true,"medio-campidano.it":true,"mediocampidano.it":true,"campidano-medio.it":true,"campidanomedio.it":true,"vs.it":true,"messina.it":true,"me.it":true,"milano.it":true,"milan.it":true,"mi.it":true,"modena.it":true,"mo.it":true,"monza.it":true,"monza-brianza.it":true,"monzabrianza.it":true,"monzaebrianza.it":true,"monzaedellabrianza.it":true,"monza-e-della-brianza.it":true,"mb.it":true,"napoli.it":true,"naples.it":true,"na.it":true,"novara.it":true,"no.it":true,"nuoro.it":true,"nu.it":true,"oristano.it":true,"or.it":true,"padova.it":true,"padua.it":true,"pd.it":true,"palermo.it":true,"pa.it":true,"parma.it":true,"pr.it":true,"pavia.it":true,"pv.it":true,"perugia.it":true,"pg.it":true,"pescara.it":true,"pe.it":true,"pesaro-urbino.it":true,"pesarourbino.it":true,"urbino-pesaro.it":true,"urbinopesaro.it":true,"pu.it":true,"piacenza.it":true,"pc.it":true,"pisa.it":true,"pi.it":true,"pistoia.it":true,"pt.it":true,"pordenone.it":true,"pn.it":true,"potenza.it":true,"pz.it":true,"prato.it":true,"po.it":true,"ragusa.it":true,"rg.it":true,"ravenna.it":true,"ra.it":true,"reggio-calabria.it":true,"reggiocalabria.it":true,"rc.it":true,"reggio-emilia.it":true,"reggioemilia.it":true,"re.it":true,"rieti.it":true,"ri.it":true,"rimini.it":true,"rn.it":true,"roma.it":true,"rome.it":true,"rm.it":true,"rovigo.it":true,"ro.it":true,"salerno.it":true,"sa.it":true,"sassari.it":true,"ss.it":true,"savona.it":true,"sv.it":true,"siena.it":true,"si.it":true,"siracusa.it":true,"sr.it":true,"sondrio.it":true,"so.it":true,"taranto.it":true,"ta.it":true,"tempio-olbia.it":true,"tempioolbia.it":true,"olbia-tempio.it":true,"olbiatempio.it":true,"ot.it":true,"teramo.it":true,"te.it":true,"terni.it":true,"tr.it":true,"torino.it":true,"turin.it":true,"to.it":true,"trapani.it":true,"tp.it":true,"trento.it":true,"trentino.it":true,"tn.it":true,"treviso.it":true,"tv.it":true,"trieste.it":true,"ts.it":true,"udine.it":true,"ud.it":true,"varese.it":true,"va.it":true,"venezia.it":true,"venice.it":true,"ve.it":true,"verbania.it":true,"vb.it":true,"vercelli.it":true,"vc.it":true,"verona.it":true,"vr.it":true,"vibo-valentia.it":true,"vibovalentia.it":true,"vv.it":true,"vicenza.it":true,"vi.it":true,"viterbo.it":true,"vt.it":true,"je":true,"co.je":true,"org.je":true,"net.je":true,"sch.je":true,"gov.je":true,"*.jm":true,"jo":true,"com.jo":true,"org.jo":true,"net.jo":true,"edu.jo":true,"sch.jo":true,"gov.jo":true,"mil.jo":true,"name.jo":true,"jobs":true,"jp":true,"ac.jp":true,"ad.jp":true,"co.jp":true,"ed.jp":true,"go.jp":true,"gr.jp":true,"lg.jp":true,"ne.jp":true,"or.jp":true,"*.aichi.jp":true,"*.akita.jp":true,"*.aomori.jp":true,"*.chiba.jp":true,"*.ehime.jp":true,"*.fukui.jp":true,"*.fukuoka.jp":true,"*.fukushima.jp":true,"*.gifu.jp":true,"*.gunma.jp":true,"*.hiroshima.jp":true,"*.hokkaido.jp":true,"*.hyogo.jp":true,"*.ibaraki.jp":true,"*.ishikawa.jp":true,"*.iwate.jp":true,"*.kagawa.jp":true,"*.kagoshima.jp":true,"*.kanagawa.jp":true,"*.kawasaki.jp":true,"*.kitakyushu.jp":true,"*.kobe.jp":true,"*.kochi.jp":true,"*.kumamoto.jp":true,"*.kyoto.jp":true,"*.mie.jp":true,"*.miyagi.jp":true,"*.miyazaki.jp":true,"*.nagano.jp":true,"*.nagasaki.jp":true,"*.nagoya.jp":true,"*.nara.jp":true,"*.niigata.jp":true,"*.oita.jp":true,"*.okayama.jp":true,"*.okinawa.jp":true,"*.osaka.jp":true,"*.saga.jp":true,"*.saitama.jp":true,"*.sapporo.jp":true,"*.sendai.jp":true,"*.shiga.jp":true,"*.shimane.jp":true,"*.shizuoka.jp":true,"*.tochigi.jp":true,"*.tokushima.jp":true,"*.tokyo.jp":true,"*.tottori.jp":true,"*.toyama.jp":true,"*.wakayama.jp":true,"*.yamagata.jp":true,"*.yamaguchi.jp":true,"*.yamanashi.jp":true,"*.yokohama.jp":true,"metro.tokyo.jp":false,"pref.aichi.jp":false,"pref.akita.jp":false,"pref.aomori.jp":false,"pref.chiba.jp":false,"pref.ehime.jp":false,"pref.fukui.jp":false,"pref.fukuoka.jp":false,"pref.fukushima.jp":false,"pref.gifu.jp":false,"pref.gunma.jp":false,"pref.hiroshima.jp":false,"pref.hokkaido.jp":false,"pref.hyogo.jp":false,"pref.ibaraki.jp":false,"pref.ishikawa.jp":false,"pref.iwate.jp":false,"pref.kagawa.jp":false,"pref.kagoshima.jp":false,"pref.kanagawa.jp":false,"pref.kochi.jp":false,"pref.kumamoto.jp":false,"pref.kyoto.jp":false,"pref.mie.jp":false,"pref.miyagi.jp":false,"pref.miyazaki.jp":false,"pref.nagano.jp":false,"pref.nagasaki.jp":false,"pref.nara.jp":false,"pref.niigata.jp":false,"pref.oita.jp":false,"pref.okayama.jp":false,"pref.okinawa.jp":false,"pref.osaka.jp":false,"pref.saga.jp":false,"pref.saitama.jp":false,"pref.shiga.jp":false,"pref.shimane.jp":false,"pref.shizuoka.jp":false,"pref.tochigi.jp":false,"pref.tokushima.jp":false,"pref.tottori.jp":false,"pref.toyama.jp":false,"pref.wakayama.jp":false,"pref.yamagata.jp":false,"pref.yamaguchi.jp":false,"pref.yamanashi.jp":false,"city.chiba.jp":false,"city.fukuoka.jp":false,"city.hiroshima.jp":false,"city.kawasaki.jp":false,"city.kitakyushu.jp":false,"city.kobe.jp":false,"city.kyoto.jp":false,"city.nagoya.jp":false,"city.niigata.jp":false,"city.okayama.jp":false,"city.osaka.jp":false,"city.saitama.jp":false,"city.sapporo.jp":false,"city.sendai.jp":false,"city.shizuoka.jp":false,"city.yokohama.jp":false,"*.ke":true,"kg":true,"org.kg":true,"net.kg":true,"com.kg":true,"edu.kg":true,"gov.kg":true,"mil.kg":true,"*.kh":true,"ki":true,"edu.ki":true,"biz.ki":true,"net.ki":true,"org.ki":true,"gov.ki":true,"info.ki":true,"com.ki":true,"km":true,"org.km":true,"nom.km":true,"gov.km":true,"prd.km":true,"tm.km":true,"edu.km":true,"mil.km":true,"ass.km":true,"com.km":true,"coop.km":true,"asso.km":true,"presse.km":true,"medecin.km":true,"notaires.km":true,"pharmaciens.km":true,"veterinaire.km":true,"gouv.km":true,"kn":true,"net.kn":true,"org.kn":true,"edu.kn":true,"gov.kn":true,"com.kp":true,"edu.kp":true,"gov.kp":true,"org.kp":true,"rep.kp":true,"tra.kp":true,"kr":true,"ac.kr":true,"co.kr":true,"es.kr":true,"go.kr":true,"hs.kr":true,"kg.kr":true,"mil.kr":true,"ms.kr":true,"ne.kr":true,"or.kr":true,"pe.kr":true,"re.kr":true,"sc.kr":true,"busan.kr":true,"chungbuk.kr":true,"chungnam.kr":true,"daegu.kr":true,"daejeon.kr":true,"gangwon.kr":true,"gwangju.kr":true,"gyeongbuk.kr":true,"gyeonggi.kr":true,"gyeongnam.kr":true,"incheon.kr":true,"jeju.kr":true,"jeonbuk.kr":true,"jeonnam.kr":true,"seoul.kr":true,"ulsan.kr":true,"*.kw":true,"ky":true,"edu.ky":true,"gov.ky":true,"com.ky":true,"org.ky":true,"net.ky":true,"kz":true,"org.kz":true,"edu.kz":true,"net.kz":true,"gov.kz":true,"mil.kz":true,"com.kz":true,"la":true,"int.la":true,"net.la":true,"info.la":true,"edu.la":true,"gov.la":true,"per.la":true,"com.la":true,"org.la":true,"com.lb":true,"edu.lb":true,"gov.lb":true,"net.lb":true,"org.lb":true,"lc":true,"com.lc":true,"net.lc":true,"co.lc":true,"org.lc":true,"edu.lc":true,"gov.lc":true,"li":true,"lk":true,"gov.lk":true,"sch.lk":true,"net.lk":true,"int.lk":true,"com.lk":true,"org.lk":true,"edu.lk":true,"ngo.lk":true,"soc.lk":true,"web.lk":true,"ltd.lk":true,"assn.lk":true,"grp.lk":true,"hotel.lk":true,"com.lr":true,"edu.lr":true,"gov.lr":true,"org.lr":true,"net.lr":true,"ls":true,"co.ls":true,"org.ls":true,"lt":true,"gov.lt":true,"lu":true,"lv":true,"com.lv":true,"edu.lv":true,"gov.lv":true,"org.lv":true,"mil.lv":true,"id.lv":true,"net.lv":true,"asn.lv":true,"conf.lv":true,"ly":true,"com.ly":true,"net.ly":true,"gov.ly":true,"plc.ly":true,"edu.ly":true,"sch.ly":true,"med.ly":true,"org.ly":true,"id.ly":true,"ma":true,"co.ma":true,"net.ma":true,"gov.ma":true,"org.ma":true,"ac.ma":true,"press.ma":true,"mc":true,"tm.mc":true,"asso.mc":true,"md":true,"me":true,"co.me":true,"net.me":true,"org.me":true,"edu.me":true,"ac.me":true,"gov.me":true,"its.me":true,"priv.me":true,"mg":true,"org.mg":true,"nom.mg":true,"gov.mg":true,"prd.mg":true,"tm.mg":true,"edu.mg":true,"mil.mg":true,"com.mg":true,"mh":true,"mil":true,"mk":true,"com.mk":true,"org.mk":true,"net.mk":true,"edu.mk":true,"gov.mk":true,"inf.mk":true,"name.mk":true,"ml":true,"com.ml":true,"edu.ml":true,"gouv.ml":true,"gov.ml":true,"net.ml":true,"org.ml":true,"presse.ml":true,"*.mm":true,"mn":true,"gov.mn":true,"edu.mn":true,"org.mn":true,"mo":true,"com.mo":true,"net.mo":true,"org.mo":true,"edu.mo":true,"gov.mo":true,"mobi":true,"mp":true,"mq":true,"mr":true,"gov.mr":true,"ms":true,"*.mt":true,"mu":true,"com.mu":true,"net.mu":true,"org.mu":true,"gov.mu":true,"ac.mu":true,"co.mu":true,"or.mu":true,"museum":true,"academy.museum":true,"agriculture.museum":true,"air.museum":true,"airguard.museum":true,"alabama.museum":true,"alaska.museum":true,"amber.museum":true,"ambulance.museum":true,"american.museum":true,"americana.museum":true,"americanantiques.museum":true,"americanart.museum":true,"amsterdam.museum":true,"and.museum":true,"annefrank.museum":true,"anthro.museum":true,"anthropology.museum":true,"antiques.museum":true,"aquarium.museum":true,"arboretum.museum":true,"archaeological.museum":true,"archaeology.museum":true,"architecture.museum":true,"art.museum":true,"artanddesign.museum":true,"artcenter.museum":true,"artdeco.museum":true,"arteducation.museum":true,"artgallery.museum":true,"arts.museum":true,"artsandcrafts.museum":true,"asmatart.museum":true,"assassination.museum":true,"assisi.museum":true,"association.museum":true,"astronomy.museum":true,"atlanta.museum":true,"austin.museum":true,"australia.museum":true,"automotive.museum":true,"aviation.museum":true,"axis.museum":true,"badajoz.museum":true,"baghdad.museum":true,"bahn.museum":true,"bale.museum":true,"baltimore.museum":true,"barcelona.museum":true,"baseball.museum":true,"basel.museum":true,"baths.museum":true,"bauern.museum":true,"beauxarts.museum":true,"beeldengeluid.museum":true,"bellevue.museum":true,"bergbau.museum":true,"berkeley.museum":true,"berlin.museum":true,"bern.museum":true,"bible.museum":true,"bilbao.museum":true,"bill.museum":true,"birdart.museum":true,"birthplace.museum":true,"bonn.museum":true,"boston.museum":true,"botanical.museum":true,"botanicalgarden.museum":true,"botanicgarden.museum":true,"botany.museum":true,"brandywinevalley.museum":true,"brasil.museum":true,"bristol.museum":true,"british.museum":true,"britishcolumbia.museum":true,"broadcast.museum":true,"brunel.museum":true,"brussel.museum":true,"brussels.museum":true,"bruxelles.museum":true,"building.museum":true,"burghof.museum":true,"bus.museum":true,"bushey.museum":true,"cadaques.museum":true,"california.museum":true,"cambridge.museum":true,"can.museum":true,"canada.museum":true,"capebreton.museum":true,"carrier.museum":true,"cartoonart.museum":true,"casadelamoneda.museum":true,"castle.museum":true,"castres.museum":true,"celtic.museum":true,"center.museum":true,"chattanooga.museum":true,"cheltenham.museum":true,"chesapeakebay.museum":true,"chicago.museum":true,"children.museum":true,"childrens.museum":true,"childrensgarden.museum":true,"chiropractic.museum":true,"chocolate.museum":true,"christiansburg.museum":true,"cincinnati.museum":true,"cinema.museum":true,"circus.museum":true,"civilisation.museum":true,"civilization.museum":true,"civilwar.museum":true,"clinton.museum":true,"clock.museum":true,"coal.museum":true,"coastaldefence.museum":true,"cody.museum":true,"coldwar.museum":true,"collection.museum":true,"colonialwilliamsburg.museum":true,"coloradoplateau.museum":true,"columbia.museum":true,"columbus.museum":true,"communication.museum":true,"communications.museum":true,"community.museum":true,"computer.museum":true,"computerhistory.museum":true,"xn--comunicaes-v6a2o.museum":true,"contemporary.museum":true,"contemporaryart.museum":true,"convent.museum":true,"copenhagen.museum":true,"corporation.museum":true,"xn--correios-e-telecomunicaes-ghc29a.museum":true,"corvette.museum":true,"costume.museum":true,"countryestate.museum":true,"county.museum":true,"crafts.museum":true,"cranbrook.museum":true,"creation.museum":true,"cultural.museum":true,"culturalcenter.museum":true,"culture.museum":true,"cyber.museum":true,"cymru.museum":true,"dali.museum":true,"dallas.museum":true,"database.museum":true,"ddr.museum":true,"decorativearts.museum":true,"delaware.museum":true,"delmenhorst.museum":true,"denmark.museum":true,"depot.museum":true,"design.museum":true,"detroit.museum":true,"dinosaur.museum":true,"discovery.museum":true,"dolls.museum":true,"donostia.museum":true,"durham.museum":true,"eastafrica.museum":true,"eastcoast.museum":true,"education.museum":true,"educational.museum":true,"egyptian.museum":true,"eisenbahn.museum":true,"elburg.museum":true,"elvendrell.museum":true,"embroidery.museum":true,"encyclopedic.museum":true,"england.museum":true,"entomology.museum":true,"environment.museum":true,"environmentalconservation.museum":true,"epilepsy.museum":true,"essex.museum":true,"estate.museum":true,"ethnology.museum":true,"exeter.museum":true,"exhibition.museum":true,"family.museum":true,"farm.museum":true,"farmequipment.museum":true,"farmers.museum":true,"farmstead.museum":true,"field.museum":true,"figueres.museum":true,"filatelia.museum":true,"film.museum":true,"fineart.museum":true,"finearts.museum":true,"finland.museum":true,"flanders.museum":true,"florida.museum":true,"force.museum":true,"fortmissoula.museum":true,"fortworth.museum":true,"foundation.museum":true,"francaise.museum":true,"frankfurt.museum":true,"franziskaner.museum":true,"freemasonry.museum":true,"freiburg.museum":true,"fribourg.museum":true,"frog.museum":true,"fundacio.museum":true,"furniture.museum":true,"gallery.museum":true,"garden.museum":true,"gateway.museum":true,"geelvinck.museum":true,"gemological.museum":true,"geology.museum":true,"georgia.museum":true,"giessen.museum":true,"glas.museum":true,"glass.museum":true,"gorge.museum":true,"grandrapids.museum":true,"graz.museum":true,"guernsey.museum":true,"halloffame.museum":true,"hamburg.museum":true,"handson.museum":true,"harvestcelebration.museum":true,"hawaii.museum":true,"health.museum":true,"heimatunduhren.museum":true,"hellas.museum":true,"helsinki.museum":true,"hembygdsforbund.museum":true,"heritage.museum":true,"histoire.museum":true,"historical.museum":true,"historicalsociety.museum":true,"historichouses.museum":true,"historisch.museum":true,"historisches.museum":true,"history.museum":true,"historyofscience.museum":true,"horology.museum":true,"house.museum":true,"humanities.museum":true,"illustration.museum":true,"imageandsound.museum":true,"indian.museum":true,"indiana.museum":true,"indianapolis.museum":true,"indianmarket.museum":true,"intelligence.museum":true,"interactive.museum":true,"iraq.museum":true,"iron.museum":true,"isleofman.museum":true,"jamison.museum":true,"jefferson.museum":true,"jerusalem.museum":true,"jewelry.museum":true,"jewish.museum":true,"jewishart.museum":true,"jfk.museum":true,"journalism.museum":true,"judaica.museum":true,"judygarland.museum":true,"juedisches.museum":true,"juif.museum":true,"karate.museum":true,"karikatur.museum":true,"kids.museum":true,"koebenhavn.museum":true,"koeln.museum":true,"kunst.museum":true,"kunstsammlung.museum":true,"kunstunddesign.museum":true,"labor.museum":true,"labour.museum":true,"lajolla.museum":true,"lancashire.museum":true,"landes.museum":true,"lans.museum":true,"xn--lns-qla.museum":true,"larsson.museum":true,"lewismiller.museum":true,"lincoln.museum":true,"linz.museum":true,"living.museum":true,"livinghistory.museum":true,"localhistory.museum":true,"london.museum":true,"losangeles.museum":true,"louvre.museum":true,"loyalist.museum":true,"lucerne.museum":true,"luxembourg.museum":true,"luzern.museum":true,"mad.museum":true,"madrid.museum":true,"mallorca.museum":true,"manchester.museum":true,"mansion.museum":true,"mansions.museum":true,"manx.museum":true,"marburg.museum":true,"maritime.museum":true,"maritimo.museum":true,"maryland.museum":true,"marylhurst.museum":true,"media.museum":true,"medical.museum":true,"medizinhistorisches.museum":true,"meeres.museum":true,"memorial.museum":true,"mesaverde.museum":true,"michigan.museum":true,"midatlantic.museum":true,"military.museum":true,"mill.museum":true,"miners.museum":true,"mining.museum":true,"minnesota.museum":true,"missile.museum":true,"missoula.museum":true,"modern.museum":true,"moma.museum":true,"money.museum":true,"monmouth.museum":true,"monticello.museum":true,"montreal.museum":true,"moscow.museum":true,"motorcycle.museum":true,"muenchen.museum":true,"muenster.museum":true,"mulhouse.museum":true,"muncie.museum":true,"museet.museum":true,"museumcenter.museum":true,"museumvereniging.museum":true,"music.museum":true,"national.museum":true,"nationalfirearms.museum":true,"nationalheritage.museum":true,"nativeamerican.museum":true,"naturalhistory.museum":true,"naturalhistorymuseum.museum":true,"naturalsciences.museum":true,"nature.museum":true,"naturhistorisches.museum":true,"natuurwetenschappen.museum":true,"naumburg.museum":true,"naval.museum":true,"nebraska.museum":true,"neues.museum":true,"newhampshire.museum":true,"newjersey.museum":true,"newmexico.museum":true,"newport.museum":true,"newspaper.museum":true,"newyork.museum":true,"niepce.museum":true,"norfolk.museum":true,"north.museum":true,"nrw.museum":true,"nuernberg.museum":true,"nuremberg.museum":true,"nyc.museum":true,"nyny.museum":true,"oceanographic.museum":true,"oceanographique.museum":true,"omaha.museum":true,"online.museum":true,"ontario.museum":true,"openair.museum":true,"oregon.museum":true,"oregontrail.museum":true,"otago.museum":true,"oxford.museum":true,"pacific.museum":true,"paderborn.museum":true,"palace.museum":true,"paleo.museum":true,"palmsprings.museum":true,"panama.museum":true,"paris.museum":true,"pasadena.museum":true,"pharmacy.museum":true,"philadelphia.museum":true,"philadelphiaarea.museum":true,"philately.museum":true,"phoenix.museum":true,"photography.museum":true,"pilots.museum":true,"pittsburgh.museum":true,"planetarium.museum":true,"plantation.museum":true,"plants.museum":true,"plaza.museum":true,"portal.museum":true,"portland.museum":true,"portlligat.museum":true,"posts-and-telecommunications.museum":true,"preservation.museum":true,"presidio.museum":true,"press.museum":true,"project.museum":true,"public.museum":true,"pubol.museum":true,"quebec.museum":true,"railroad.museum":true,"railway.museum":true,"research.museum":true,"resistance.museum":true,"riodejaneiro.museum":true,"rochester.museum":true,"rockart.museum":true,"roma.museum":true,"russia.museum":true,"saintlouis.museum":true,"salem.museum":true,"salvadordali.museum":true,"salzburg.museum":true,"sandiego.museum":true,"sanfrancisco.museum":true,"santabarbara.museum":true,"santacruz.museum":true,"santafe.museum":true,"saskatchewan.museum":true,"satx.museum":true,"savannahga.museum":true,"schlesisches.museum":true,"schoenbrunn.museum":true,"schokoladen.museum":true,"school.museum":true,"schweiz.museum":true,"science.museum":true,"scienceandhistory.museum":true,"scienceandindustry.museum":true,"sciencecenter.museum":true,"sciencecenters.museum":true,"science-fiction.museum":true,"sciencehistory.museum":true,"sciences.museum":true,"sciencesnaturelles.museum":true,"scotland.museum":true,"seaport.museum":true,"settlement.museum":true,"settlers.museum":true,"shell.museum":true,"sherbrooke.museum":true,"sibenik.museum":true,"silk.museum":true,"ski.museum":true,"skole.museum":true,"society.museum":true,"sologne.museum":true,"soundandvision.museum":true,"southcarolina.museum":true,"southwest.museum":true,"space.museum":true,"spy.museum":true,"square.museum":true,"stadt.museum":true,"stalbans.museum":true,"starnberg.museum":true,"state.museum":true,"stateofdelaware.museum":true,"station.museum":true,"steam.museum":true,"steiermark.museum":true,"stjohn.museum":true,"stockholm.museum":true,"stpetersburg.museum":true,"stuttgart.museum":true,"suisse.museum":true,"surgeonshall.museum":true,"surrey.museum":true,"svizzera.museum":true,"sweden.museum":true,"sydney.museum":true,"tank.museum":true,"tcm.museum":true,"technology.museum":true,"telekommunikation.museum":true,"television.museum":true,"texas.museum":true,"textile.museum":true,"theater.museum":true,"time.museum":true,"timekeeping.museum":true,"topology.museum":true,"torino.museum":true,"touch.museum":true,"town.museum":true,"transport.museum":true,"tree.museum":true,"trolley.museum":true,"trust.museum":true,"trustee.museum":true,"uhren.museum":true,"ulm.museum":true,"undersea.museum":true,"university.museum":true,"usa.museum":true,"usantiques.museum":true,"usarts.museum":true,"uscountryestate.museum":true,"usculture.museum":true,"usdecorativearts.museum":true,"usgarden.museum":true,"ushistory.museum":true,"ushuaia.museum":true,"uslivinghistory.museum":true,"utah.museum":true,"uvic.museum":true,"valley.museum":true,"vantaa.museum":true,"versailles.museum":true,"viking.museum":true,"village.museum":true,"virginia.museum":true,"virtual.museum":true,"virtuel.museum":true,"vlaanderen.museum":true,"volkenkunde.museum":true,"wales.museum":true,"wallonie.museum":true,"war.museum":true,"washingtondc.museum":true,"watchandclock.museum":true,"watch-and-clock.museum":true,"western.museum":true,"westfalen.museum":true,"whaling.museum":true,"wildlife.museum":true,"williamsburg.museum":true,"windmill.museum":true,"workshop.museum":true,"york.museum":true,"yorkshire.museum":true,"yosemite.museum":true,"youth.museum":true,"zoological.museum":true,"zoology.museum":true,"xn--9dbhblg6di.museum":true,"xn--h1aegh.museum":true,"mv":true,"aero.mv":true,"biz.mv":true,"com.mv":true,"coop.mv":true,"edu.mv":true,"gov.mv":true,"info.mv":true,"int.mv":true,"mil.mv":true,"museum.mv":true,"name.mv":true,"net.mv":true,"org.mv":true,"pro.mv":true,"mw":true,"ac.mw":true,"biz.mw":true,"co.mw":true,"com.mw":true,"coop.mw":true,"edu.mw":true,"gov.mw":true,"int.mw":true,"museum.mw":true,"net.mw":true,"org.mw":true,"mx":true,"com.mx":true,"org.mx":true,"gob.mx":true,"edu.mx":true,"net.mx":true,"my":true,"com.my":true,"net.my":true,"org.my":true,"gov.my":true,"edu.my":true,"mil.my":true,"name.my":true,"*.mz":true,"na":true,"info.na":true,"pro.na":true,"name.na":true,"school.na":true,"or.na":true,"dr.na":true,"us.na":true,"mx.na":true,"ca.na":true,"in.na":true,"cc.na":true,"tv.na":true,"ws.na":true,"mobi.na":true,"co.na":true,"com.na":true,"org.na":true,"name":true,"nc":true,"asso.nc":true,"ne":true,"net":true,"nf":true,"com.nf":true,"net.nf":true,"per.nf":true,"rec.nf":true,"web.nf":true,"arts.nf":true,"firm.nf":true,"info.nf":true,"other.nf":true,"store.nf":true,"ac.ng":true,"com.ng":true,"edu.ng":true,"gov.ng":true,"net.ng":true,"org.ng":true,"*.ni":true,"nl":true,"bv.nl":true,"no":true,"fhs.no":true,"vgs.no":true,"fylkesbibl.no":true,"folkebibl.no":true,"museum.no":true,"idrett.no":true,"priv.no":true,"mil.no":true,"stat.no":true,"dep.no":true,"kommune.no":true,"herad.no":true,"aa.no":true,"ah.no":true,"bu.no":true,"fm.no":true,"hl.no":true,"hm.no":true,"jan-mayen.no":true,"mr.no":true,"nl.no":true,"nt.no":true,"of.no":true,"ol.no":true,"oslo.no":true,"rl.no":true,"sf.no":true,"st.no":true,"svalbard.no":true,"tm.no":true,"tr.no":true,"va.no":true,"vf.no":true,"gs.aa.no":true,"gs.ah.no":true,"gs.bu.no":true,"gs.fm.no":true,"gs.hl.no":true,"gs.hm.no":true,"gs.jan-mayen.no":true,"gs.mr.no":true,"gs.nl.no":true,"gs.nt.no":true,"gs.of.no":true,"gs.ol.no":true,"gs.oslo.no":true,"gs.rl.no":true,"gs.sf.no":true,"gs.st.no":true,"gs.svalbard.no":true,"gs.tm.no":true,"gs.tr.no":true,"gs.va.no":true,"gs.vf.no":true,"akrehamn.no":true,"xn--krehamn-dxa.no":true,"algard.no":true,"xn--lgrd-poac.no":true,"arna.no":true,"brumunddal.no":true,"bryne.no":true,"bronnoysund.no":true,"xn--brnnysund-m8ac.no":true,"drobak.no":true,"xn--drbak-wua.no":true,"egersund.no":true,"fetsund.no":true,"floro.no":true,"xn--flor-jra.no":true,"fredrikstad.no":true,"hokksund.no":true,"honefoss.no":true,"xn--hnefoss-q1a.no":true,"jessheim.no":true,"jorpeland.no":true,"xn--jrpeland-54a.no":true,"kirkenes.no":true,"kopervik.no":true,"krokstadelva.no":true,"langevag.no":true,"xn--langevg-jxa.no":true,"leirvik.no":true,"mjondalen.no":true,"xn--mjndalen-64a.no":true,"mo-i-rana.no":true,"mosjoen.no":true,"xn--mosjen-eya.no":true,"nesoddtangen.no":true,"orkanger.no":true,"osoyro.no":true,"xn--osyro-wua.no":true,"raholt.no":true,"xn--rholt-mra.no":true,"sandnessjoen.no":true,"xn--sandnessjen-ogb.no":true,"skedsmokorset.no":true,"slattum.no":true,"spjelkavik.no":true,"stathelle.no":true,"stavern.no":true,"stjordalshalsen.no":true,"xn--stjrdalshalsen-sqb.no":true,"tananger.no":true,"tranby.no":true,"vossevangen.no":true,"afjord.no":true,"xn--fjord-lra.no":true,"agdenes.no":true,"al.no":true,"xn--l-1fa.no":true,"alesund.no":true,"xn--lesund-hua.no":true,"alstahaug.no":true,"alta.no":true,"xn--lt-liac.no":true,"alaheadju.no":true,"xn--laheadju-7ya.no":true,"alvdal.no":true,"amli.no":true,"xn--mli-tla.no":true,"amot.no":true,"xn--mot-tla.no":true,"andebu.no":true,"andoy.no":true,"xn--andy-ira.no":true,"andasuolo.no":true,"ardal.no":true,"xn--rdal-poa.no":true,"aremark.no":true,"arendal.no":true,"xn--s-1fa.no":true,"aseral.no":true,"xn--seral-lra.no":true,"asker.no":true,"askim.no":true,"askvoll.no":true,"askoy.no":true,"xn--asky-ira.no":true,"asnes.no":true,"xn--snes-poa.no":true,"audnedaln.no":true,"aukra.no":true,"aure.no":true,"aurland.no":true,"aurskog-holand.no":true,"xn--aurskog-hland-jnb.no":true,"austevoll.no":true,"austrheim.no":true,"averoy.no":true,"xn--avery-yua.no":true,"balestrand.no":true,"ballangen.no":true,"balat.no":true,"xn--blt-elab.no":true,"balsfjord.no":true,"bahccavuotna.no":true,"xn--bhccavuotna-k7a.no":true,"bamble.no":true,"bardu.no":true,"beardu.no":true,"beiarn.no":true,"bajddar.no":true,"xn--bjddar-pta.no":true,"baidar.no":true,"xn--bidr-5nac.no":true,"berg.no":true,"bergen.no":true,"berlevag.no":true,"xn--berlevg-jxa.no":true,"bearalvahki.no":true,"xn--bearalvhki-y4a.no":true,"bindal.no":true,"birkenes.no":true,"bjarkoy.no":true,"xn--bjarky-fya.no":true,"bjerkreim.no":true,"bjugn.no":true,"bodo.no":true,"xn--bod-2na.no":true,"badaddja.no":true,"xn--bdddj-mrabd.no":true,"budejju.no":true,"bokn.no":true,"bremanger.no":true,"bronnoy.no":true,"xn--brnny-wuac.no":true,"bygland.no":true,"bykle.no":true,"barum.no":true,"xn--brum-voa.no":true,"bo.telemark.no":true,"xn--b-5ga.telemark.no":true,"bo.nordland.no":true,"xn--b-5ga.nordland.no":true,"bievat.no":true,"xn--bievt-0qa.no":true,"bomlo.no":true,"xn--bmlo-gra.no":true,"batsfjord.no":true,"xn--btsfjord-9za.no":true,"bahcavuotna.no":true,"xn--bhcavuotna-s4a.no":true,"dovre.no":true,"drammen.no":true,"drangedal.no":true,"dyroy.no":true,"xn--dyry-ira.no":true,"donna.no":true,"xn--dnna-gra.no":true,"eid.no":true,"eidfjord.no":true,"eidsberg.no":true,"eidskog.no":true,"eidsvoll.no":true,"eigersund.no":true,"elverum.no":true,"enebakk.no":true,"engerdal.no":true,"etne.no":true,"etnedal.no":true,"evenes.no":true,"evenassi.no":true,"xn--eveni-0qa01ga.no":true,"evje-og-hornnes.no":true,"farsund.no":true,"fauske.no":true,"fuossko.no":true,"fuoisku.no":true,"fedje.no":true,"fet.no":true,"finnoy.no":true,"xn--finny-yua.no":true,"fitjar.no":true,"fjaler.no":true,"fjell.no":true,"flakstad.no":true,"flatanger.no":true,"flekkefjord.no":true,"flesberg.no":true,"flora.no":true,"fla.no":true,"xn--fl-zia.no":true,"folldal.no":true,"forsand.no":true,"fosnes.no":true,"frei.no":true,"frogn.no":true,"froland.no":true,"frosta.no":true,"frana.no":true,"xn--frna-woa.no":true,"froya.no":true,"xn--frya-hra.no":true,"fusa.no":true,"fyresdal.no":true,"forde.no":true,"xn--frde-gra.no":true,"gamvik.no":true,"gangaviika.no":true,"xn--ggaviika-8ya47h.no":true,"gaular.no":true,"gausdal.no":true,"gildeskal.no":true,"xn--gildeskl-g0a.no":true,"giske.no":true,"gjemnes.no":true,"gjerdrum.no":true,"gjerstad.no":true,"gjesdal.no":true,"gjovik.no":true,"xn--gjvik-wua.no":true,"gloppen.no":true,"gol.no":true,"gran.no":true,"grane.no":true,"granvin.no":true,"gratangen.no":true,"grimstad.no":true,"grong.no":true,"kraanghke.no":true,"xn--kranghke-b0a.no":true,"grue.no":true,"gulen.no":true,"hadsel.no":true,"halden.no":true,"halsa.no":true,"hamar.no":true,"hamaroy.no":true,"habmer.no":true,"xn--hbmer-xqa.no":true,"hapmir.no":true,"xn--hpmir-xqa.no":true,"hammerfest.no":true,"hammarfeasta.no":true,"xn--hmmrfeasta-s4ac.no":true,"haram.no":true,"hareid.no":true,"harstad.no":true,"hasvik.no":true,"aknoluokta.no":true,"xn--koluokta-7ya57h.no":true,"hattfjelldal.no":true,"aarborte.no":true,"haugesund.no":true,"hemne.no":true,"hemnes.no":true,"hemsedal.no":true,"heroy.more-og-romsdal.no":true,"xn--hery-ira.xn--mre-og-romsdal-qqb.no":true,"heroy.nordland.no":true,"xn--hery-ira.nordland.no":true,"hitra.no":true,"hjartdal.no":true,"hjelmeland.no":true,"hobol.no":true,"xn--hobl-ira.no":true,"hof.no":true,"hol.no":true,"hole.no":true,"holmestrand.no":true,"holtalen.no":true,"xn--holtlen-hxa.no":true,"hornindal.no":true,"horten.no":true,"hurdal.no":true,"hurum.no":true,"hvaler.no":true,"hyllestad.no":true,"hagebostad.no":true,"xn--hgebostad-g3a.no":true,"hoyanger.no":true,"xn--hyanger-q1a.no":true,"hoylandet.no":true,"xn--hylandet-54a.no":true,"ha.no":true,"xn--h-2fa.no":true,"ibestad.no":true,"inderoy.no":true,"xn--indery-fya.no":true,"iveland.no":true,"jevnaker.no":true,"jondal.no":true,"jolster.no":true,"xn--jlster-bya.no":true,"karasjok.no":true,"karasjohka.no":true,"xn--krjohka-hwab49j.no":true,"karlsoy.no":true,"galsa.no":true,"xn--gls-elac.no":true,"karmoy.no":true,"xn--karmy-yua.no":true,"kautokeino.no":true,"guovdageaidnu.no":true,"klepp.no":true,"klabu.no":true,"xn--klbu-woa.no":true,"kongsberg.no":true,"kongsvinger.no":true,"kragero.no":true,"xn--krager-gya.no":true,"kristiansand.no":true,"kristiansund.no":true,"krodsherad.no":true,"xn--krdsherad-m8a.no":true,"kvalsund.no":true,"rahkkeravju.no":true,"xn--rhkkervju-01af.no":true,"kvam.no":true,"kvinesdal.no":true,"kvinnherad.no":true,"kviteseid.no":true,"kvitsoy.no":true,"xn--kvitsy-fya.no":true,"kvafjord.no":true,"xn--kvfjord-nxa.no":true,"giehtavuoatna.no":true,"kvanangen.no":true,"xn--kvnangen-k0a.no":true,"navuotna.no":true,"xn--nvuotna-hwa.no":true,"kafjord.no":true,"xn--kfjord-iua.no":true,"gaivuotna.no":true,"xn--givuotna-8ya.no":true,"larvik.no":true,"lavangen.no":true,"lavagis.no":true,"loabat.no":true,"xn--loabt-0qa.no":true,"lebesby.no":true,"davvesiida.no":true,"leikanger.no":true,"leirfjord.no":true,"leka.no":true,"leksvik.no":true,"lenvik.no":true,"leangaviika.no":true,"xn--leagaviika-52b.no":true,"lesja.no":true,"levanger.no":true,"lier.no":true,"lierne.no":true,"lillehammer.no":true,"lillesand.no":true,"lindesnes.no":true,"lindas.no":true,"xn--linds-pra.no":true,"lom.no":true,"loppa.no":true,"lahppi.no":true,"xn--lhppi-xqa.no":true,"lund.no":true,"lunner.no":true,"luroy.no":true,"xn--lury-ira.no":true,"luster.no":true,"lyngdal.no":true,"lyngen.no":true,"ivgu.no":true,"lardal.no":true,"lerdal.no":true,"xn--lrdal-sra.no":true,"lodingen.no":true,"xn--ldingen-q1a.no":true,"lorenskog.no":true,"xn--lrenskog-54a.no":true,"loten.no":true,"xn--lten-gra.no":true,"malvik.no":true,"masoy.no":true,"xn--msy-ula0h.no":true,"muosat.no":true,"xn--muost-0qa.no":true,"mandal.no":true,"marker.no":true,"marnardal.no":true,"masfjorden.no":true,"meland.no":true,"meldal.no":true,"melhus.no":true,"meloy.no":true,"xn--mely-ira.no":true,"meraker.no":true,"xn--merker-kua.no":true,"moareke.no":true,"xn--moreke-jua.no":true,"midsund.no":true,"midtre-gauldal.no":true,"modalen.no":true,"modum.no":true,"molde.no":true,"moskenes.no":true,"moss.no":true,"mosvik.no":true,"malselv.no":true,"xn--mlselv-iua.no":true,"malatvuopmi.no":true,"xn--mlatvuopmi-s4a.no":true,"namdalseid.no":true,"aejrie.no":true,"namsos.no":true,"namsskogan.no":true,"naamesjevuemie.no":true,"xn--nmesjevuemie-tcba.no":true,"laakesvuemie.no":true,"nannestad.no":true,"narvik.no":true,"narviika.no":true,"naustdal.no":true,"nedre-eiker.no":true,"nes.akershus.no":true,"nes.buskerud.no":true,"nesna.no":true,"nesodden.no":true,"nesseby.no":true,"unjarga.no":true,"xn--unjrga-rta.no":true,"nesset.no":true,"nissedal.no":true,"nittedal.no":true,"nord-aurdal.no":true,"nord-fron.no":true,"nord-odal.no":true,"norddal.no":true,"nordkapp.no":true,"davvenjarga.no":true,"xn--davvenjrga-y4a.no":true,"nordre-land.no":true,"nordreisa.no":true,"raisa.no":true,"xn--risa-5na.no":true,"nore-og-uvdal.no":true,"notodden.no":true,"naroy.no":true,"xn--nry-yla5g.no":true,"notteroy.no":true,"xn--nttery-byae.no":true,"odda.no":true,"oksnes.no":true,"xn--ksnes-uua.no":true,"oppdal.no":true,"oppegard.no":true,"xn--oppegrd-ixa.no":true,"orkdal.no":true,"orland.no":true,"xn--rland-uua.no":true,"orskog.no":true,"xn--rskog-uua.no":true,"orsta.no":true,"xn--rsta-fra.no":true,"os.hedmark.no":true,"os.hordaland.no":true,"osen.no":true,"osteroy.no":true,"xn--ostery-fya.no":true,"ostre-toten.no":true,"xn--stre-toten-zcb.no":true,"overhalla.no":true,"ovre-eiker.no":true,"xn--vre-eiker-k8a.no":true,"oyer.no":true,"xn--yer-zna.no":true,"oygarden.no":true,"xn--ygarden-p1a.no":true,"oystre-slidre.no":true,"xn--ystre-slidre-ujb.no":true,"porsanger.no":true,"porsangu.no":true,"xn--porsgu-sta26f.no":true,"porsgrunn.no":true,"radoy.no":true,"xn--rady-ira.no":true,"rakkestad.no":true,"rana.no":true,"ruovat.no":true,"randaberg.no":true,"rauma.no":true,"rendalen.no":true,"rennebu.no":true,"rennesoy.no":true,"xn--rennesy-v1a.no":true,"rindal.no":true,"ringebu.no":true,"ringerike.no":true,"ringsaker.no":true,"rissa.no":true,"risor.no":true,"xn--risr-ira.no":true,"roan.no":true,"rollag.no":true,"rygge.no":true,"ralingen.no":true,"xn--rlingen-mxa.no":true,"rodoy.no":true,"xn--rdy-0nab.no":true,"romskog.no":true,"xn--rmskog-bya.no":true,"roros.no":true,"xn--rros-gra.no":true,"rost.no":true,"xn--rst-0na.no":true,"royken.no":true,"xn--ryken-vua.no":true,"royrvik.no":true,"xn--ryrvik-bya.no":true,"rade.no":true,"xn--rde-ula.no":true,"salangen.no":true,"siellak.no":true,"saltdal.no":true,"salat.no":true,"xn--slt-elab.no":true,"xn--slat-5na.no":true,"samnanger.no":true,"sande.more-og-romsdal.no":true,"sande.xn--mre-og-romsdal-qqb.no":true,"sande.vestfold.no":true,"sandefjord.no":true,"sandnes.no":true,"sandoy.no":true,"xn--sandy-yua.no":true,"sarpsborg.no":true,"sauda.no":true,"sauherad.no":true,"sel.no":true,"selbu.no":true,"selje.no":true,"seljord.no":true,"sigdal.no":true,"siljan.no":true,"sirdal.no":true,"skaun.no":true,"skedsmo.no":true,"ski.no":true,"skien.no":true,"skiptvet.no":true,"skjervoy.no":true,"xn--skjervy-v1a.no":true,"skierva.no":true,"xn--skierv-uta.no":true,"skjak.no":true,"xn--skjk-soa.no":true,"skodje.no":true,"skanland.no":true,"xn--sknland-fxa.no":true,"skanit.no":true,"xn--sknit-yqa.no":true,"smola.no":true,"xn--smla-hra.no":true,"snillfjord.no":true,"snasa.no":true,"xn--snsa-roa.no":true,"snoasa.no":true,"snaase.no":true,"xn--snase-nra.no":true,"sogndal.no":true,"sokndal.no":true,"sola.no":true,"solund.no":true,"songdalen.no":true,"sortland.no":true,"spydeberg.no":true,"stange.no":true,"stavanger.no":true,"steigen.no":true,"steinkjer.no":true,"stjordal.no":true,"xn--stjrdal-s1a.no":true,"stokke.no":true,"stor-elvdal.no":true,"stord.no":true,"stordal.no":true,"storfjord.no":true,"omasvuotna.no":true,"strand.no":true,"stranda.no":true,"stryn.no":true,"sula.no":true,"suldal.no":true,"sund.no":true,"sunndal.no":true,"surnadal.no":true,"sveio.no":true,"svelvik.no":true,"sykkylven.no":true,"sogne.no":true,"xn--sgne-gra.no":true,"somna.no":true,"xn--smna-gra.no":true,"sondre-land.no":true,"xn--sndre-land-0cb.no":true,"sor-aurdal.no":true,"xn--sr-aurdal-l8a.no":true,"sor-fron.no":true,"xn--sr-fron-q1a.no":true,"sor-odal.no":true,"xn--sr-odal-q1a.no":true,"sor-varanger.no":true,"xn--sr-varanger-ggb.no":true,"matta-varjjat.no":true,"xn--mtta-vrjjat-k7af.no":true,"sorfold.no":true,"xn--srfold-bya.no":true,"sorreisa.no":true,"xn--srreisa-q1a.no":true,"sorum.no":true,"xn--srum-gra.no":true,"tana.no":true,"deatnu.no":true,"time.no":true,"tingvoll.no":true,"tinn.no":true,"tjeldsund.no":true,"dielddanuorri.no":true,"tjome.no":true,"xn--tjme-hra.no":true,"tokke.no":true,"tolga.no":true,"torsken.no":true,"tranoy.no":true,"xn--trany-yua.no":true,"tromso.no":true,"xn--troms-zua.no":true,"tromsa.no":true,"romsa.no":true,"trondheim.no":true,"troandin.no":true,"trysil.no":true,"trana.no":true,"xn--trna-woa.no":true,"trogstad.no":true,"xn--trgstad-r1a.no":true,"tvedestrand.no":true,"tydal.no":true,"tynset.no":true,"tysfjord.no":true,"divtasvuodna.no":true,"divttasvuotna.no":true,"tysnes.no":true,"tysvar.no":true,"xn--tysvr-vra.no":true,"tonsberg.no":true,"xn--tnsberg-q1a.no":true,"ullensaker.no":true,"ullensvang.no":true,"ulvik.no":true,"utsira.no":true,"vadso.no":true,"xn--vads-jra.no":true,"cahcesuolo.no":true,"xn--hcesuolo-7ya35b.no":true,"vaksdal.no":true,"valle.no":true,"vang.no":true,"vanylven.no":true,"vardo.no":true,"xn--vard-jra.no":true,"varggat.no":true,"xn--vrggt-xqad.no":true,"vefsn.no":true,"vaapste.no":true,"vega.no":true,"vegarshei.no":true,"xn--vegrshei-c0a.no":true,"vennesla.no":true,"verdal.no":true,"verran.no":true,"vestby.no":true,"vestnes.no":true,"vestre-slidre.no":true,"vestre-toten.no":true,"vestvagoy.no":true,"xn--vestvgy-ixa6o.no":true,"vevelstad.no":true,"vik.no":true,"vikna.no":true,"vindafjord.no":true,"volda.no":true,"voss.no":true,"varoy.no":true,"xn--vry-yla5g.no":true,"vagan.no":true,"xn--vgan-qoa.no":true,"voagat.no":true,"vagsoy.no":true,"xn--vgsy-qoa0j.no":true,"vaga.no":true,"xn--vg-yiab.no":true,"valer.ostfold.no":true,"xn--vler-qoa.xn--stfold-9xa.no":true,"valer.hedmark.no":true,"xn--vler-qoa.hedmark.no":true,"*.np":true,"nr":true,"biz.nr":true,"info.nr":true,"gov.nr":true,"edu.nr":true,"org.nr":true,"net.nr":true,"com.nr":true,"nu":true,"*.nz":true,"*.om":true,"mediaphone.om":false,"nawrastelecom.om":false,"nawras.om":false,"omanmobile.om":false,"omanpost.om":false,"omantel.om":false,"rakpetroleum.om":false,"siemens.om":false,"songfest.om":false,"statecouncil.om":false,"org":true,"pa":true,"ac.pa":true,"gob.pa":true,"com.pa":true,"org.pa":true,"sld.pa":true,"edu.pa":true,"net.pa":true,"ing.pa":true,"abo.pa":true,"med.pa":true,"nom.pa":true,"pe":true,"edu.pe":true,"gob.pe":true,"nom.pe":true,"mil.pe":true,"org.pe":true,"com.pe":true,"net.pe":true,"pf":true,"com.pf":true,"org.pf":true,"edu.pf":true,"*.pg":true,"ph":true,"com.ph":true,"net.ph":true,"org.ph":true,"gov.ph":true,"edu.ph":true,"ngo.ph":true,"mil.ph":true,"i.ph":true,"pk":true,"com.pk":true,"net.pk":true,"edu.pk":true,"org.pk":true,"fam.pk":true,"biz.pk":true,"web.pk":true,"gov.pk":true,"gob.pk":true,"gok.pk":true,"gon.pk":true,"gop.pk":true,"gos.pk":true,"info.pk":true,"pl":true,"aid.pl":true,"agro.pl":true,"atm.pl":true,"auto.pl":true,"biz.pl":true,"com.pl":true,"edu.pl":true,"gmina.pl":true,"gsm.pl":true,"info.pl":true,"mail.pl":true,"miasta.pl":true,"media.pl":true,"mil.pl":true,"net.pl":true,"nieruchomosci.pl":true,"nom.pl":true,"org.pl":true,"pc.pl":true,"powiat.pl":true,"priv.pl":true,"realestate.pl":true,"rel.pl":true,"sex.pl":true,"shop.pl":true,"sklep.pl":true,"sos.pl":true,"szkola.pl":true,"targi.pl":true,"tm.pl":true,"tourism.pl":true,"travel.pl":true,"turystyka.pl":true,"6bone.pl":true,"art.pl":true,"mbone.pl":true,"gov.pl":true,"uw.gov.pl":true,"um.gov.pl":true,"ug.gov.pl":true,"upow.gov.pl":true,"starostwo.gov.pl":true,"so.gov.pl":true,"sr.gov.pl":true,"po.gov.pl":true,"pa.gov.pl":true,"ngo.pl":true,"irc.pl":true,"usenet.pl":true,"augustow.pl":true,"babia-gora.pl":true,"bedzin.pl":true,"beskidy.pl":true,"bialowieza.pl":true,"bialystok.pl":true,"bielawa.pl":true,"bieszczady.pl":true,"boleslawiec.pl":true,"bydgoszcz.pl":true,"bytom.pl":true,"cieszyn.pl":true,"czeladz.pl":true,"czest.pl":true,"dlugoleka.pl":true,"elblag.pl":true,"elk.pl":true,"glogow.pl":true,"gniezno.pl":true,"gorlice.pl":true,"grajewo.pl":true,"ilawa.pl":true,"jaworzno.pl":true,"jelenia-gora.pl":true,"jgora.pl":true,"kalisz.pl":true,"kazimierz-dolny.pl":true,"karpacz.pl":true,"kartuzy.pl":true,"kaszuby.pl":true,"katowice.pl":true,"kepno.pl":true,"ketrzyn.pl":true,"klodzko.pl":true,"kobierzyce.pl":true,"kolobrzeg.pl":true,"konin.pl":true,"konskowola.pl":true,"kutno.pl":true,"lapy.pl":true,"lebork.pl":true,"legnica.pl":true,"lezajsk.pl":true,"limanowa.pl":true,"lomza.pl":true,"lowicz.pl":true,"lubin.pl":true,"lukow.pl":true,"malbork.pl":true,"malopolska.pl":true,"mazowsze.pl":true,"mazury.pl":true,"mielec.pl":true,"mielno.pl":true,"mragowo.pl":true,"naklo.pl":true,"nowaruda.pl":true,"nysa.pl":true,"olawa.pl":true,"olecko.pl":true,"olkusz.pl":true,"olsztyn.pl":true,"opoczno.pl":true,"opole.pl":true,"ostroda.pl":true,"ostroleka.pl":true,"ostrowiec.pl":true,"ostrowwlkp.pl":true,"pila.pl":true,"pisz.pl":true,"podhale.pl":true,"podlasie.pl":true,"polkowice.pl":true,"pomorze.pl":true,"pomorskie.pl":true,"prochowice.pl":true,"pruszkow.pl":true,"przeworsk.pl":true,"pulawy.pl":true,"radom.pl":true,"rawa-maz.pl":true,"rybnik.pl":true,"rzeszow.pl":true,"sanok.pl":true,"sejny.pl":true,"siedlce.pl":true,"slask.pl":true,"slupsk.pl":true,"sosnowiec.pl":true,"stalowa-wola.pl":true,"skoczow.pl":true,"starachowice.pl":true,"stargard.pl":true,"suwalki.pl":true,"swidnica.pl":true,"swiebodzin.pl":true,"swinoujscie.pl":true,"szczecin.pl":true,"szczytno.pl":true,"tarnobrzeg.pl":true,"tgory.pl":true,"turek.pl":true,"tychy.pl":true,"ustka.pl":true,"walbrzych.pl":true,"warmia.pl":true,"warszawa.pl":true,"waw.pl":true,"wegrow.pl":true,"wielun.pl":true,"wlocl.pl":true,"wloclawek.pl":true,"wodzislaw.pl":true,"wolomin.pl":true,"wroclaw.pl":true,"zachpomor.pl":true,"zagan.pl":true,"zarow.pl":true,"zgora.pl":true,"zgorzelec.pl":true,"gda.pl":true,"gdansk.pl":true,"gdynia.pl":true,"med.pl":true,"sopot.pl":true,"gliwice.pl":true,"krakow.pl":true,"poznan.pl":true,"wroc.pl":true,"zakopane.pl":true,"pm":true,"pn":true,"gov.pn":true,"co.pn":true,"org.pn":true,"edu.pn":true,"net.pn":true,"pr":true,"com.pr":true,"net.pr":true,"org.pr":true,"gov.pr":true,"edu.pr":true,"isla.pr":true,"pro.pr":true,"biz.pr":true,"info.pr":true,"name.pr":true,"est.pr":true,"prof.pr":true,"ac.pr":true,"pro":true,"aca.pro":true,"bar.pro":true,"cpa.pro":true,"jur.pro":true,"law.pro":true,"med.pro":true,"eng.pro":true,"ps":true,"edu.ps":true,"gov.ps":true,"sec.ps":true,"plo.ps":true,"com.ps":true,"org.ps":true,"net.ps":true,"pt":true,"net.pt":true,"gov.pt":true,"org.pt":true,"edu.pt":true,"int.pt":true,"publ.pt":true,"com.pt":true,"nome.pt":true,"pw":true,"co.pw":true,"ne.pw":true,"or.pw":true,"ed.pw":true,"go.pw":true,"belau.pw":true,"*.py":true,"qa":true,"com.qa":true,"edu.qa":true,"gov.qa":true,"mil.qa":true,"name.qa":true,"net.qa":true,"org.qa":true,"sch.qa":true,"re":true,"com.re":true,"asso.re":true,"nom.re":true,"ro":true,"com.ro":true,"org.ro":true,"tm.ro":true,"nt.ro":true,"nom.ro":true,"info.ro":true,"rec.ro":true,"arts.ro":true,"firm.ro":true,"store.ro":true,"www.ro":true,"rs":true,"co.rs":true,"org.rs":true,"edu.rs":true,"ac.rs":true,"gov.rs":true,"in.rs":true,"ru":true,"ac.ru":true,"com.ru":true,"edu.ru":true,"int.ru":true,"net.ru":true,"org.ru":true,"pp.ru":true,"adygeya.ru":true,"altai.ru":true,"amur.ru":true,"arkhangelsk.ru":true,"astrakhan.ru":true,"bashkiria.ru":true,"belgorod.ru":true,"bir.ru":true,"bryansk.ru":true,"buryatia.ru":true,"cbg.ru":true,"chel.ru":true,"chelyabinsk.ru":true,"chita.ru":true,"chukotka.ru":true,"chuvashia.ru":true,"dagestan.ru":true,"dudinka.ru":true,"e-burg.ru":true,"grozny.ru":true,"irkutsk.ru":true,"ivanovo.ru":true,"izhevsk.ru":true,"jar.ru":true,"joshkar-ola.ru":true,"kalmykia.ru":true,"kaluga.ru":true,"kamchatka.ru":true,"karelia.ru":true,"kazan.ru":true,"kchr.ru":true,"kemerovo.ru":true,"khabarovsk.ru":true,"khakassia.ru":true,"khv.ru":true,"kirov.ru":true,"koenig.ru":true,"komi.ru":true,"kostroma.ru":true,"krasnoyarsk.ru":true,"kuban.ru":true,"kurgan.ru":true,"kursk.ru":true,"lipetsk.ru":true,"magadan.ru":true,"mari.ru":true,"mari-el.ru":true,"marine.ru":true,"mordovia.ru":true,"mosreg.ru":true,"msk.ru":true,"murmansk.ru":true,"nalchik.ru":true,"nnov.ru":true,"nov.ru":true,"novosibirsk.ru":true,"nsk.ru":true,"omsk.ru":true,"orenburg.ru":true,"oryol.ru":true,"palana.ru":true,"penza.ru":true,"perm.ru":true,"pskov.ru":true,"ptz.ru":true,"rnd.ru":true,"ryazan.ru":true,"sakhalin.ru":true,"samara.ru":true,"saratov.ru":true,"simbirsk.ru":true,"smolensk.ru":true,"spb.ru":true,"stavropol.ru":true,"stv.ru":true,"surgut.ru":true,"tambov.ru":true,"tatarstan.ru":true,"tom.ru":true,"tomsk.ru":true,"tsaritsyn.ru":true,"tsk.ru":true,"tula.ru":true,"tuva.ru":true,"tver.ru":true,"tyumen.ru":true,"udm.ru":true,"udmurtia.ru":true,"ulan-ude.ru":true,"vladikavkaz.ru":true,"vladimir.ru":true,"vladivostok.ru":true,"volgograd.ru":true,"vologda.ru":true,"voronezh.ru":true,"vrn.ru":true,"vyatka.ru":true,"yakutia.ru":true,"yamal.ru":true,"yaroslavl.ru":true,"yekaterinburg.ru":true,"yuzhno-sakhalinsk.ru":true,"amursk.ru":true,"baikal.ru":true,"cmw.ru":true,"fareast.ru":true,"jamal.ru":true,"kms.ru":true,"k-uralsk.ru":true,"kustanai.ru":true,"kuzbass.ru":true,"magnitka.ru":true,"mytis.ru":true,"nakhodka.ru":true,"nkz.ru":true,"norilsk.ru":true,"oskol.ru":true,"pyatigorsk.ru":true,"rubtsovsk.ru":true,"snz.ru":true,"syzran.ru":true,"vdonsk.ru":true,"zgrad.ru":true,"gov.ru":true,"mil.ru":true,"test.ru":true,"rw":true,"gov.rw":true,"net.rw":true,"edu.rw":true,"ac.rw":true,"com.rw":true,"co.rw":true,"int.rw":true,"mil.rw":true,"gouv.rw":true,"sa":true,"com.sa":true,"net.sa":true,"org.sa":true,"gov.sa":true,"med.sa":true,"pub.sa":true,"edu.sa":true,"sch.sa":true,"sb":true,"com.sb":true,"edu.sb":true,"gov.sb":true,"net.sb":true,"org.sb":true,"sc":true,"com.sc":true,"gov.sc":true,"net.sc":true,"org.sc":true,"edu.sc":true,"sd":true,"com.sd":true,"net.sd":true,"org.sd":true,"edu.sd":true,"med.sd":true,"gov.sd":true,"info.sd":true,"se":true,"a.se":true,"ac.se":true,"b.se":true,"bd.se":true,"brand.se":true,"c.se":true,"d.se":true,"e.se":true,"f.se":true,"fh.se":true,"fhsk.se":true,"fhv.se":true,"g.se":true,"h.se":true,"i.se":true,"k.se":true,"komforb.se":true,"kommunalforbund.se":true,"komvux.se":true,"l.se":true,"lanbib.se":true,"m.se":true,"n.se":true,"naturbruksgymn.se":true,"o.se":true,"org.se":true,"p.se":true,"parti.se":true,"pp.se":true,"press.se":true,"r.se":true,"s.se":true,"sshn.se":true,"t.se":true,"tm.se":true,"u.se":true,"w.se":true,"x.se":true,"y.se":true,"z.se":true,"sg":true,"com.sg":true,"net.sg":true,"org.sg":true,"gov.sg":true,"edu.sg":true,"per.sg":true,"sh":true,"si":true,"sk":true,"sl":true,"com.sl":true,"net.sl":true,"edu.sl":true,"gov.sl":true,"org.sl":true,"sm":true,"sn":true,"art.sn":true,"com.sn":true,"edu.sn":true,"gouv.sn":true,"org.sn":true,"perso.sn":true,"univ.sn":true,"so":true,"com.so":true,"net.so":true,"org.so":true,"sr":true,"st":true,"co.st":true,"com.st":true,"consulado.st":true,"edu.st":true,"embaixada.st":true,"gov.st":true,"mil.st":true,"net.st":true,"org.st":true,"principe.st":true,"saotome.st":true,"store.st":true,"su":true,"*.sv":true,"sy":true,"edu.sy":true,"gov.sy":true,"net.sy":true,"mil.sy":true,"com.sy":true,"org.sy":true,"sz":true,"co.sz":true,"ac.sz":true,"org.sz":true,"tc":true,"td":true,"tel":true,"tf":true,"tg":true,"th":true,"ac.th":true,"co.th":true,"go.th":true,"in.th":true,"mi.th":true,"net.th":true,"or.th":true,"tj":true,"ac.tj":true,"biz.tj":true,"co.tj":true,"com.tj":true,"edu.tj":true,"go.tj":true,"gov.tj":true,"int.tj":true,"mil.tj":true,"name.tj":true,"net.tj":true,"nic.tj":true,"org.tj":true,"test.tj":true,"web.tj":true,"tk":true,"tl":true,"gov.tl":true,"tm":true,"tn":true,"com.tn":true,"ens.tn":true,"fin.tn":true,"gov.tn":true,"ind.tn":true,"intl.tn":true,"nat.tn":true,"net.tn":true,"org.tn":true,"info.tn":true,"perso.tn":true,"tourism.tn":true,"edunet.tn":true,"rnrt.tn":true,"rns.tn":true,"rnu.tn":true,"mincom.tn":true,"agrinet.tn":true,"defense.tn":true,"turen.tn":true,"to":true,"com.to":true,"gov.to":true,"net.to":true,"org.to":true,"edu.to":true,"mil.to":true,"*.tr":true,"nic.tr":false,"gov.nc.tr":true,"travel":true,"tt":true,"co.tt":true,"com.tt":true,"org.tt":true,"net.tt":true,"biz.tt":true,"info.tt":true,"pro.tt":true,"int.tt":true,"coop.tt":true,"jobs.tt":true,"mobi.tt":true,"travel.tt":true,"museum.tt":true,"aero.tt":true,"name.tt":true,"gov.tt":true,"edu.tt":true,"tv":true,"tw":true,"edu.tw":true,"gov.tw":true,"mil.tw":true,"com.tw":true,"net.tw":true,"org.tw":true,"idv.tw":true,"game.tw":true,"ebiz.tw":true,"club.tw":true,"xn--zf0ao64a.tw":true,"xn--uc0atv.tw":true,"xn--czrw28b.tw":true,"ac.tz":true,"co.tz":true,"go.tz":true,"mil.tz":true,"ne.tz":true,"or.tz":true,"sc.tz":true,"ua":true,"com.ua":true,"edu.ua":true,"gov.ua":true,"in.ua":true,"net.ua":true,"org.ua":true,"cherkassy.ua":true,"chernigov.ua":true,"chernovtsy.ua":true,"ck.ua":true,"cn.ua":true,"crimea.ua":true,"cv.ua":true,"dn.ua":true,"dnepropetrovsk.ua":true,"donetsk.ua":true,"dp.ua":true,"if.ua":true,"ivano-frankivsk.ua":true,"kh.ua":true,"kharkov.ua":true,"kherson.ua":true,"khmelnitskiy.ua":true,"kiev.ua":true,"kirovograd.ua":true,"km.ua":true,"kr.ua":true,"ks.ua":true,"kv.ua":true,"lg.ua":true,"lugansk.ua":true,"lutsk.ua":true,"lviv.ua":true,"mk.ua":true,"nikolaev.ua":true,"od.ua":true,"odessa.ua":true,"pl.ua":true,"poltava.ua":true,"rovno.ua":true,"rv.ua":true,"sebastopol.ua":true,"sumy.ua":true,"te.ua":true,"ternopil.ua":true,"uzhgorod.ua":true,"vinnica.ua":true,"vn.ua":true,"zaporizhzhe.ua":true,"zp.ua":true,"zhitomir.ua":true,"zt.ua":true,"co.ua":true,"pp.ua":true,"ug":true,"co.ug":true,"ac.ug":true,"sc.ug":true,"go.ug":true,"ne.ug":true,"or.ug":true,"*.uk":true,"*.sch.uk":true,"bl.uk":false,"british-library.uk":false,"icnet.uk":false,"jet.uk":false,"mod.uk":false,"nel.uk":false,"nhs.uk":false,"nic.uk":false,"nls.uk":false,"national-library-scotland.uk":false,"parliament.uk":false,"police.uk":false,"us":true,"dni.us":true,"fed.us":true,"isa.us":true,"kids.us":true,"nsn.us":true,"ak.us":true,"al.us":true,"ar.us":true,"as.us":true,"az.us":true,"ca.us":true,"co.us":true,"ct.us":true,"dc.us":true,"de.us":true,"fl.us":true,"ga.us":true,"gu.us":true,"hi.us":true,"ia.us":true,"id.us":true,"il.us":true,"in.us":true,"ks.us":true,"ky.us":true,"la.us":true,"ma.us":true,"md.us":true,"me.us":true,"mi.us":true,"mn.us":true,"mo.us":true,"ms.us":true,"mt.us":true,"nc.us":true,"nd.us":true,"ne.us":true,"nh.us":true,"nj.us":true,"nm.us":true,"nv.us":true,"ny.us":true,"oh.us":true,"ok.us":true,"or.us":true,"pa.us":true,"pr.us":true,"ri.us":true,"sc.us":true,"sd.us":true,"tn.us":true,"tx.us":true,"ut.us":true,"vi.us":true,"vt.us":true,"va.us":true,"wa.us":true,"wi.us":true,"wv.us":true,"wy.us":true,"k12.ak.us":true,"k12.al.us":true,"k12.ar.us":true,"k12.as.us":true,"k12.az.us":true,"k12.ca.us":true,"k12.co.us":true,"k12.ct.us":true,"k12.dc.us":true,"k12.de.us":true,"k12.fl.us":true,"k12.ga.us":true,"k12.gu.us":true,"k12.ia.us":true,"k12.id.us":true,"k12.il.us":true,"k12.in.us":true,"k12.ks.us":true,"k12.ky.us":true,"k12.la.us":true,"k12.ma.us":true,"k12.md.us":true,"k12.me.us":true,"k12.mi.us":true,"k12.mn.us":true,"k12.mo.us":true,"k12.ms.us":true,"k12.mt.us":true,"k12.nc.us":true,"k12.nd.us":true,"k12.ne.us":true,"k12.nh.us":true,"k12.nj.us":true,"k12.nm.us":true,"k12.nv.us":true,"k12.ny.us":true,"k12.oh.us":true,"k12.ok.us":true,"k12.or.us":true,"k12.pa.us":true,"k12.pr.us":true,"k12.ri.us":true,"k12.sc.us":true,"k12.sd.us":true,"k12.tn.us":true,"k12.tx.us":true,"k12.ut.us":true,"k12.vi.us":true,"k12.vt.us":true,"k12.va.us":true,"k12.wa.us":true,"k12.wi.us":true,"k12.wv.us":true,"k12.wy.us":true,"cc.ak.us":true,"cc.al.us":true,"cc.ar.us":true,"cc.as.us":true,"cc.az.us":true,"cc.ca.us":true,"cc.co.us":true,"cc.ct.us":true,"cc.dc.us":true,"cc.de.us":true,"cc.fl.us":true,"cc.ga.us":true,"cc.gu.us":true,"cc.hi.us":true,"cc.ia.us":true,"cc.id.us":true,"cc.il.us":true,"cc.in.us":true,"cc.ks.us":true,"cc.ky.us":true,"cc.la.us":true,"cc.ma.us":true,"cc.md.us":true,"cc.me.us":true,"cc.mi.us":true,"cc.mn.us":true,"cc.mo.us":true,"cc.ms.us":true,"cc.mt.us":true,"cc.nc.us":true,"cc.nd.us":true,"cc.ne.us":true,"cc.nh.us":true,"cc.nj.us":true,"cc.nm.us":true,"cc.nv.us":true,"cc.ny.us":true,"cc.oh.us":true,"cc.ok.us":true,"cc.or.us":true,"cc.pa.us":true,"cc.pr.us":true,"cc.ri.us":true,"cc.sc.us":true,"cc.sd.us":true,"cc.tn.us":true,"cc.tx.us":true,"cc.ut.us":true,"cc.vi.us":true,"cc.vt.us":true,"cc.va.us":true,"cc.wa.us":true,"cc.wi.us":true,"cc.wv.us":true,"cc.wy.us":true,"lib.ak.us":true,"lib.al.us":true,"lib.ar.us":true,"lib.as.us":true,"lib.az.us":true,"lib.ca.us":true,"lib.co.us":true,"lib.ct.us":true,"lib.dc.us":true,"lib.de.us":true,"lib.fl.us":true,"lib.ga.us":true,"lib.gu.us":true,"lib.hi.us":true,"lib.ia.us":true,"lib.id.us":true,"lib.il.us":true,"lib.in.us":true,"lib.ks.us":true,"lib.ky.us":true,"lib.la.us":true,"lib.ma.us":true,"lib.md.us":true,"lib.me.us":true,"lib.mi.us":true,"lib.mn.us":true,"lib.mo.us":true,"lib.ms.us":true,"lib.mt.us":true,"lib.nc.us":true,"lib.nd.us":true,"lib.ne.us":true,"lib.nh.us":true,"lib.nj.us":true,"lib.nm.us":true,"lib.nv.us":true,"lib.ny.us":true,"lib.oh.us":true,"lib.ok.us":true,"lib.or.us":true,"lib.pa.us":true,"lib.pr.us":true,"lib.ri.us":true,"lib.sc.us":true,"lib.sd.us":true,"lib.tn.us":true,"lib.tx.us":true,"lib.ut.us":true,"lib.vi.us":true,"lib.vt.us":true,"lib.va.us":true,"lib.wa.us":true,"lib.wi.us":true,"lib.wv.us":true,"lib.wy.us":true,"pvt.k12.ma.us":true,"chtr.k12.ma.us":true,"paroch.k12.ma.us":true,"*.uy":true,"uz":true,"com.uz":true,"co.uz":true,"va":true,"vc":true,"com.vc":true,"net.vc":true,"org.vc":true,"gov.vc":true,"mil.vc":true,"edu.vc":true,"*.ve":true,"vg":true,"vi":true,"co.vi":true,"com.vi":true,"k12.vi":true,"net.vi":true,"org.vi":true,"vn":true,"com.vn":true,"net.vn":true,"org.vn":true,"edu.vn":true,"gov.vn":true,"int.vn":true,"ac.vn":true,"biz.vn":true,"info.vn":true,"name.vn":true,"pro.vn":true,"health.vn":true,"vu":true,"wf":true,"ws":true,"com.ws":true,"net.ws":true,"org.ws":true,"gov.ws":true,"edu.ws":true,"yt":true,"xn--mgbaam7a8h":true,"xn--54b7fta0cc":true,"xn--fiqs8s":true,"xn--fiqz9s":true,"xn--lgbbat1ad8j":true,"xn--wgbh1c":true,"xn--node":true,"xn--j6w193g":true,"xn--h2brj9c":true,"xn--mgbbh1a71e":true,"xn--fpcrj9c3d":true,"xn--gecrj9c":true,"xn--s9brj9c":true,"xn--45brj9c":true,"xn--xkc2dl3a5ee0h":true,"xn--mgba3a4f16a":true,"xn--mgba3a4fra":true,"xn--mgbayh7gpa":true,"xn--3e0b707e":true,"xn--fzc2c9e2c":true,"xn--xkc2al3hye2a":true,"xn--mgbc0a9azcg":true,"xn--mgb9awbf":true,"xn--ygbi2ammx":true,"xn--90a3ac":true,"xn--p1ai":true,"xn--wgbl6a":true,"xn--mgberp4a5d4ar":true,"xn--mgberp4a5d4a87g":true,"xn--mgbqly7c0a67fbc":true,"xn--mgbqly7cvafr":true,"xn--ogbpf8fl":true,"xn--mgbtf8fl":true,"xn--yfro4i67o":true,"xn--clchc0ea0b2g2a9gcd":true,"xn--o3cw4h":true,"xn--pgbs0dh":true,"xn--kpry57d":true,"xn--kprw13d":true,"xn--nnx388a":true,"xn--j1amh":true,"xn--mgb2ddes":true,"xxx":true,"*.ye":true,"*.za":true,"*.zm":true,"*.zw":true,"biz.at":true,"info.at":true,"priv.at":true,"co.ca":true,"ar.com":true,"br.com":true,"cn.com":true,"de.com":true,"eu.com":true,"gb.com":true,"gr.com":true,"hu.com":true,"jpn.com":true,"kr.com":true,"no.com":true,"qc.com":true,"ru.com":true,"sa.com":true,"se.com":true,"uk.com":true,"us.com":true,"uy.com":true,"za.com":true,"gb.net":true,"jp.net":true,"se.net":true,"uk.net":true,"ae.org":true,"us.org":true,"com.de":true,"operaunite.com":true,"appspot.com":true,"iki.fi":true,"c.la":true,"za.net":true,"za.org":true,"co.nl":true,"co.no":true,"co.pl":true,"dyndns-at-home.com":true,"dyndns-at-work.com":true,"dyndns-blog.com":true,"dyndns-free.com":true,"dyndns-home.com":true,"dyndns-ip.com":true,"dyndns-mail.com":true,"dyndns-office.com":true,"dyndns-pics.com":true,"dyndns-remote.com":true,"dyndns-server.com":true,"dyndns-web.com":true,"dyndns-wiki.com":true,"dyndns-work.com":true,"dyndns.biz":true,"dyndns.info":true,"dyndns.org":true,"dyndns.tv":true,"at-band-camp.net":true,"ath.cx":true,"barrel-of-knowledge.info":true,"barrell-of-knowledge.info":true,"better-than.tv":true,"blogdns.com":true,"blogdns.net":true,"blogdns.org":true,"blogsite.org":true,"boldlygoingnowhere.org":true,"broke-it.net":true,"buyshouses.net":true,"cechire.com":true,"dnsalias.com":true,"dnsalias.net":true,"dnsalias.org":true,"dnsdojo.com":true,"dnsdojo.net":true,"dnsdojo.org":true,"does-it.net":true,"doesntexist.com":true,"doesntexist.org":true,"dontexist.com":true,"dontexist.net":true,"dontexist.org":true,"doomdns.com":true,"doomdns.org":true,"dvrdns.org":true,"dyn-o-saur.com":true,"dynalias.com":true,"dynalias.net":true,"dynalias.org":true,"dynathome.net":true,"dyndns.ws":true,"endofinternet.net":true,"endofinternet.org":true,"endoftheinternet.org":true,"est-a-la-maison.com":true,"est-a-la-masion.com":true,"est-le-patron.com":true,"est-mon-blogueur.com":true,"for-better.biz":true,"for-more.biz":true,"for-our.info":true,"for-some.biz":true,"for-the.biz":true,"forgot.her.name":true,"forgot.his.name":true,"from-ak.com":true,"from-al.com":true,"from-ar.com":true,"from-az.net":true,"from-ca.com":true,"from-co.net":true,"from-ct.com":true,"from-dc.com":true,"from-de.com":true,"from-fl.com":true,"from-ga.com":true,"from-hi.com":true,"from-ia.com":true,"from-id.com":true,"from-il.com":true,"from-in.com":true,"from-ks.com":true,"from-ky.com":true,"from-la.net":true,"from-ma.com":true,"from-md.com":true,"from-me.org":true,"from-mi.com":true,"from-mn.com":true,"from-mo.com":true,"from-ms.com":true,"from-mt.com":true,"from-nc.com":true,"from-nd.com":true,"from-ne.com":true,"from-nh.com":true,"from-nj.com":true,"from-nm.com":true,"from-nv.com":true,"from-ny.net":true,"from-oh.com":true,"from-ok.com":true,"from-or.com":true,"from-pa.com":true,"from-pr.com":true,"from-ri.com":true,"from-sc.com":true,"from-sd.com":true,"from-tn.com":true,"from-tx.com":true,"from-ut.com":true,"from-va.com":true,"from-vt.com":true,"from-wa.com":true,"from-wi.com":true,"from-wv.com":true,"from-wy.com":true,"ftpaccess.cc":true,"fuettertdasnetz.de":true,"game-host.org":true,"game-server.cc":true,"getmyip.com":true,"gets-it.net":true,"go.dyndns.org":true,"gotdns.com":true,"gotdns.org":true,"groks-the.info":true,"groks-this.info":true,"ham-radio-op.net":true,"here-for-more.info":true,"hobby-site.com":true,"hobby-site.org":true,"home.dyndns.org":true,"homedns.org":true,"homeftp.net":true,"homeftp.org":true,"homeip.net":true,"homelinux.com":true,"homelinux.net":true,"homelinux.org":true,"homeunix.com":true,"homeunix.net":true,"homeunix.org":true,"iamallama.com":true,"in-the-band.net":true,"is-a-anarchist.com":true,"is-a-blogger.com":true,"is-a-bookkeeper.com":true,"is-a-bruinsfan.org":true,"is-a-bulls-fan.com":true,"is-a-candidate.org":true,"is-a-caterer.com":true,"is-a-celticsfan.org":true,"is-a-chef.com":true,"is-a-chef.net":true,"is-a-chef.org":true,"is-a-conservative.com":true,"is-a-cpa.com":true,"is-a-cubicle-slave.com":true,"is-a-democrat.com":true,"is-a-designer.com":true,"is-a-doctor.com":true,"is-a-financialadvisor.com":true,"is-a-geek.com":true,"is-a-geek.net":true,"is-a-geek.org":true,"is-a-green.com":true,"is-a-guru.com":true,"is-a-hard-worker.com":true,"is-a-hunter.com":true,"is-a-knight.org":true,"is-a-landscaper.com":true,"is-a-lawyer.com":true,"is-a-liberal.com":true,"is-a-libertarian.com":true,"is-a-linux-user.org":true,"is-a-llama.com":true,"is-a-musician.com":true,"is-a-nascarfan.com":true,"is-a-nurse.com":true,"is-a-painter.com":true,"is-a-patsfan.org":true,"is-a-personaltrainer.com":true,"is-a-photographer.com":true,"is-a-player.com":true,"is-a-republican.com":true,"is-a-rockstar.com":true,"is-a-socialist.com":true,"is-a-soxfan.org":true,"is-a-student.com":true,"is-a-teacher.com":true,"is-a-techie.com":true,"is-a-therapist.com":true,"is-an-accountant.com":true,"is-an-actor.com":true,"is-an-actress.com":true,"is-an-anarchist.com":true,"is-an-artist.com":true,"is-an-engineer.com":true,"is-an-entertainer.com":true,"is-by.us":true,"is-certified.com":true,"is-found.org":true,"is-gone.com":true,"is-into-anime.com":true,"is-into-cars.com":true,"is-into-cartoons.com":true,"is-into-games.com":true,"is-leet.com":true,"is-lost.org":true,"is-not-certified.com":true,"is-saved.org":true,"is-slick.com":true,"is-uberleet.com":true,"is-very-bad.org":true,"is-very-evil.org":true,"is-very-good.org":true,"is-very-nice.org":true,"is-very-sweet.org":true,"is-with-theband.com":true,"isa-geek.com":true,"isa-geek.net":true,"isa-geek.org":true,"isa-hockeynut.com":true,"issmarterthanyou.com":true,"isteingeek.de":true,"istmein.de":true,"kicks-ass.net":true,"kicks-ass.org":true,"knowsitall.info":true,"land-4-sale.us":true,"lebtimnetz.de":true,"leitungsen.de":true,"likes-pie.com":true,"likescandy.com":true,"merseine.nu":true,"mine.nu":true,"misconfused.org":true,"mypets.ws":true,"myphotos.cc":true,"neat-url.com":true,"office-on-the.net":true,"on-the-web.tv":true,"podzone.net":true,"podzone.org":true,"readmyblog.org":true,"saves-the-whales.com":true,"scrapper-site.net":true,"scrapping.cc":true,"selfip.biz":true,"selfip.com":true,"selfip.info":true,"selfip.net":true,"selfip.org":true,"sells-for-less.com":true,"sells-for-u.com":true,"sells-it.net":true,"sellsyourhome.org":true,"servebbs.com":true,"servebbs.net":true,"servebbs.org":true,"serveftp.net":true,"serveftp.org":true,"servegame.org":true,"shacknet.nu":true,"simple-url.com":true,"space-to-rent.com":true,"stuff-4-sale.org":true,"stuff-4-sale.us":true,"teaches-yoga.com":true,"thruhere.net":true,"traeumtgerade.de":true,"webhop.biz":true,"webhop.info":true,"webhop.net":true,"webhop.org":true,"worse-than.tv":true,"writesthisblog.com":true});
+
+// END of automatically generated file
diff --git a/deps/npm/node_modules/request/node_modules/tough-cookie/node_modules/punycode/LICENSE-GPL.txt b/deps/npm/node_modules/request/node_modules/tough-cookie/node_modules/punycode/LICENSE-GPL.txt
new file mode 100644
index 000000000..11dddd00e
--- /dev/null
+++ b/deps/npm/node_modules/request/node_modules/tough-cookie/node_modules/punycode/LICENSE-GPL.txt
@@ -0,0 +1,278 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Lesser General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
diff --git a/deps/npm/node_modules/request/node_modules/tough-cookie/node_modules/punycode/LICENSE-MIT.txt b/deps/npm/node_modules/request/node_modules/tough-cookie/node_modules/punycode/LICENSE-MIT.txt
new file mode 100644
index 000000000..97067e546
--- /dev/null
+++ b/deps/npm/node_modules/request/node_modules/tough-cookie/node_modules/punycode/LICENSE-MIT.txt
@@ -0,0 +1,20 @@
+Copyright Mathias Bynens <http://mathiasbynens.be/>
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/deps/npm/node_modules/request/node_modules/tough-cookie/node_modules/punycode/package.json b/deps/npm/node_modules/request/node_modules/tough-cookie/node_modules/punycode/package.json
new file mode 100644
index 000000000..0cc83fb22
--- /dev/null
+++ b/deps/npm/node_modules/request/node_modules/tough-cookie/node_modules/punycode/package.json
@@ -0,0 +1,73 @@
+{
+ "name": "punycode",
+ "version": "1.2.3",
+ "description": "A robust Punycode converter that fully complies to RFC 3492 and RFC 5891, and works on nearly all JavaScript platforms.",
+ "homepage": "http://mths.be/punycode",
+ "main": "punycode.js",
+ "keywords": [
+ "punycode",
+ "unicode",
+ "idn",
+ "idna",
+ "dns",
+ "url",
+ "domain"
+ ],
+ "licenses": [
+ {
+ "type": "MIT",
+ "url": "http://mths.be/mit"
+ },
+ {
+ "type": "GPL",
+ "url": "http://mths.be/gpl"
+ }
+ ],
+ "author": {
+ "name": "Mathias Bynens",
+ "email": "mathias@qiwi.be",
+ "url": "http://mathiasbynens.be/"
+ },
+ "contributors": [
+ {
+ "name": "Mathias Bynens",
+ "email": "mathias@qiwi.be",
+ "url": "http://mathiasbynens.be/"
+ },
+ {
+ "name": "John-David Dalton",
+ "email": "john.david.dalton@gmail.com",
+ "url": "http://allyoucanleet.com/"
+ }
+ ],
+ "bugs": {
+ "url": "https://github.com/bestiejs/punycode.js/issues"
+ },
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/bestiejs/punycode.js.git"
+ },
+ "engines": [
+ "node",
+ "rhino"
+ ],
+ "directories": {
+ "doc": "docs",
+ "test": "tests"
+ },
+ "scripts": {
+ "test": "node tests/tests.js"
+ },
+ "devDependencies": {
+ "grunt": "~0.4.1",
+ "grunt-contrib-uglify": "~0.2.2",
+ "grunt-shell": "~0.2.2",
+ "istanbul": "~0.1.37",
+ "qunit-clib": "~1.3.0",
+ "qunitjs": "~1.11.0",
+ "requirejs": "~2.1.6"
+ },
+ "readme": "ERROR: No README data found!",
+ "_id": "punycode@1.2.3",
+ "_from": "punycode@>=0.2.0"
+}
diff --git a/deps/npm/node_modules/request/node_modules/tough-cookie/node_modules/punycode/punycode.js b/deps/npm/node_modules/request/node_modules/tough-cookie/node_modules/punycode/punycode.js
new file mode 100644
index 000000000..41803ba42
--- /dev/null
+++ b/deps/npm/node_modules/request/node_modules/tough-cookie/node_modules/punycode/punycode.js
@@ -0,0 +1,508 @@
+/*! http://mths.be/punycode v1.2.3 by @mathias */
+;(function(root) {
+
+ /** Detect free variables */
+ var freeExports = typeof exports == 'object' && exports;
+ var freeModule = typeof module == 'object' && module &&
+ module.exports == freeExports && module;
+ var freeGlobal = typeof global == 'object' && global;
+ if (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {
+ root = freeGlobal;
+ }
+
+ /**
+ * The `punycode` object.
+ * @name punycode
+ * @type Object
+ */
+ var punycode,
+
+ /** Highest positive signed 32-bit float value */
+ maxInt = 2147483647, // aka. 0x7FFFFFFF or 2^31-1
+
+ /** Bootstring parameters */
+ base = 36,
+ tMin = 1,
+ tMax = 26,
+ skew = 38,
+ damp = 700,
+ initialBias = 72,
+ initialN = 128, // 0x80
+ delimiter = '-', // '\x2D'
+
+ /** Regular expressions */
+ regexPunycode = /^xn--/,
+ regexNonASCII = /[^ -~]/, // unprintable ASCII chars + non-ASCII chars
+ regexSeparators = /\x2E|\u3002|\uFF0E|\uFF61/g, // RFC 3490 separators
+
+ /** Error messages */
+ errors = {
+ 'overflow': 'Overflow: input needs wider integers to process',
+ 'not-basic': 'Illegal input >= 0x80 (not a basic code point)',
+ 'invalid-input': 'Invalid input'
+ },
+
+ /** Convenience shortcuts */
+ baseMinusTMin = base - tMin,
+ floor = Math.floor,
+ stringFromCharCode = String.fromCharCode,
+
+ /** Temporary variable */
+ key;
+
+ /*--------------------------------------------------------------------------*/
+
+ /**
+ * A generic error utility function.
+ * @private
+ * @param {String} type The error type.
+ * @returns {Error} Throws a `RangeError` with the applicable error message.
+ */
+ function error(type) {
+ throw RangeError(errors[type]);
+ }
+
+ /**
+ * A generic `Array#map` utility function.
+ * @private
+ * @param {Array} array The array to iterate over.
+ * @param {Function} callback The function that gets called for every array
+ * item.
+ * @returns {Array} A new array of values returned by the callback function.
+ */
+ function map(array, fn) {
+ var length = array.length;
+ while (length--) {
+ array[length] = fn(array[length]);
+ }
+ return array;
+ }
+
+ /**
+ * A simple `Array#map`-like wrapper to work with domain name strings.
+ * @private
+ * @param {String} domain The domain name.
+ * @param {Function} callback The function that gets called for every
+ * character.
+ * @returns {Array} A new string of characters returned by the callback
+ * function.
+ */
+ function mapDomain(string, fn) {
+ return map(string.split(regexSeparators), fn).join('.');
+ }
+
+ /**
+ * Creates an array containing the numeric code points of each Unicode
+ * character in the string. While JavaScript uses UCS-2 internally,
+ * this function will convert a pair of surrogate halves (each of which
+ * UCS-2 exposes as separate characters) into a single code point,
+ * matching UTF-16.
+ * @see `punycode.ucs2.encode`
+ * @see <http://mathiasbynens.be/notes/javascript-encoding>
+ * @memberOf punycode.ucs2
+ * @name decode
+ * @param {String} string The Unicode input string (UCS-2).
+ * @returns {Array} The new array of code points.
+ */
+ function ucs2decode(string) {
+ var output = [],
+ counter = 0,
+ length = string.length,
+ value,
+ extra;
+ while (counter < length) {
+ value = string.charCodeAt(counter++);
+ if (value >= 0xD800 && value <= 0xDBFF && counter < length) {
+ // high surrogate, and there is a next character
+ extra = string.charCodeAt(counter++);
+ if ((extra & 0xFC00) == 0xDC00) { // low surrogate
+ output.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);
+ } else {
+ // unmatched surrogate; only append this code unit, in case the next
+ // code unit is the high surrogate of a surrogate pair
+ output.push(value);
+ counter--;
+ }
+ } else {
+ output.push(value);
+ }
+ }
+ return output;
+ }
+
+ /**
+ * Creates a string based on an array of numeric code points.
+ * @see `punycode.ucs2.decode`
+ * @memberOf punycode.ucs2
+ * @name encode
+ * @param {Array} codePoints The array of numeric code points.
+ * @returns {String} The new Unicode string (UCS-2).
+ */
+ function ucs2encode(array) {
+ return map(array, function(value) {
+ var output = '';
+ if (value > 0xFFFF) {
+ value -= 0x10000;
+ output += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);
+ value = 0xDC00 | value & 0x3FF;
+ }
+ output += stringFromCharCode(value);
+ return output;
+ }).join('');
+ }
+
+ /**
+ * Converts a basic code point into a digit/integer.
+ * @see `digitToBasic()`
+ * @private
+ * @param {Number} codePoint The basic numeric code point value.
+ * @returns {Number} The numeric value of a basic code point (for use in
+ * representing integers) in the range `0` to `base - 1`, or `base` if
+ * the code point does not represent a value.
+ */
+ function basicToDigit(codePoint) {
+ if (codePoint - 48 < 10) {
+ return codePoint - 22;
+ }
+ if (codePoint - 65 < 26) {
+ return codePoint - 65;
+ }
+ if (codePoint - 97 < 26) {
+ return codePoint - 97;
+ }
+ return base;
+ }
+
+ /**
+ * Converts a digit/integer into a basic code point.
+ * @see `basicToDigit()`
+ * @private
+ * @param {Number} digit The numeric value of a basic code point.
+ * @returns {Number} The basic code point whose value (when used for
+ * representing integers) is `digit`, which needs to be in the range
+ * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is
+ * used; else, the lowercase form is used. The behavior is undefined
+ * if `flag` is non-zero and `digit` has no uppercase form.
+ */
+ function digitToBasic(digit, flag) {
+ // 0..25 map to ASCII a..z or A..Z
+ // 26..35 map to ASCII 0..9
+ return digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5);
+ }
+
+ /**
+ * Bias adaptation function as per section 3.4 of RFC 3492.
+ * http://tools.ietf.org/html/rfc3492#section-3.4
+ * @private
+ */
+ function adapt(delta, numPoints, firstTime) {
+ var k = 0;
+ delta = firstTime ? floor(delta / damp) : delta >> 1;
+ delta += floor(delta / numPoints);
+ for (/* no initialization */; delta > baseMinusTMin * tMax >> 1; k += base) {
+ delta = floor(delta / baseMinusTMin);
+ }
+ return floor(k + (baseMinusTMin + 1) * delta / (delta + skew));
+ }
+
+ /**
+ * Converts a Punycode string of ASCII-only symbols to a string of Unicode
+ * symbols.
+ * @memberOf punycode
+ * @param {String} input The Punycode string of ASCII-only symbols.
+ * @returns {String} The resulting string of Unicode symbols.
+ */
+ function decode(input) {
+ // Don't use UCS-2
+ var output = [],
+ inputLength = input.length,
+ out,
+ i = 0,
+ n = initialN,
+ bias = initialBias,
+ basic,
+ j,
+ index,
+ oldi,
+ w,
+ k,
+ digit,
+ t,
+ length,
+ /** Cached calculation results */
+ baseMinusT;
+
+ // Handle the basic code points: let `basic` be the number of input code
+ // points before the last delimiter, or `0` if there is none, then copy
+ // the first basic code points to the output.
+
+ basic = input.lastIndexOf(delimiter);
+ if (basic < 0) {
+ basic = 0;
+ }
+
+ for (j = 0; j < basic; ++j) {
+ // if it's not a basic code point
+ if (input.charCodeAt(j) >= 0x80) {
+ error('not-basic');
+ }
+ output.push(input.charCodeAt(j));
+ }
+
+ // Main decoding loop: start just after the last delimiter if any basic code
+ // points were copied; start at the beginning otherwise.
+
+ for (index = basic > 0 ? basic + 1 : 0; index < inputLength; /* no final expression */) {
+
+ // `index` is the index of the next character to be consumed.
+ // Decode a generalized variable-length integer into `delta`,
+ // which gets added to `i`. The overflow checking is easier
+ // if we increase `i` as we go, then subtract off its starting
+ // value at the end to obtain `delta`.
+ for (oldi = i, w = 1, k = base; /* no condition */; k += base) {
+
+ if (index >= inputLength) {
+ error('invalid-input');
+ }
+
+ digit = basicToDigit(input.charCodeAt(index++));
+
+ if (digit >= base || digit > floor((maxInt - i) / w)) {
+ error('overflow');
+ }
+
+ i += digit * w;
+ t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);
+
+ if (digit < t) {
+ break;
+ }
+
+ baseMinusT = base - t;
+ if (w > floor(maxInt / baseMinusT)) {
+ error('overflow');
+ }
+
+ w *= baseMinusT;
+
+ }
+
+ out = output.length + 1;
+ bias = adapt(i - oldi, out, oldi == 0);
+
+ // `i` was supposed to wrap around from `out` to `0`,
+ // incrementing `n` each time, so we'll fix that now:
+ if (floor(i / out) > maxInt - n) {
+ error('overflow');
+ }
+
+ n += floor(i / out);
+ i %= out;
+
+ // Insert `n` at position `i` of the output
+ output.splice(i++, 0, n);
+
+ }
+
+ return ucs2encode(output);
+ }
+
+ /**
+ * Converts a string of Unicode symbols to a Punycode string of ASCII-only
+ * symbols.
+ * @memberOf punycode
+ * @param {String} input The string of Unicode symbols.
+ * @returns {String} The resulting Punycode string of ASCII-only symbols.
+ */
+ function encode(input) {
+ var n,
+ delta,
+ handledCPCount,
+ basicLength,
+ bias,
+ j,
+ m,
+ q,
+ k,
+ t,
+ currentValue,
+ output = [],
+ /** `inputLength` will hold the number of code points in `input`. */
+ inputLength,
+ /** Cached calculation results */
+ handledCPCountPlusOne,
+ baseMinusT,
+ qMinusT;
+
+ // Convert the input in UCS-2 to Unicode
+ input = ucs2decode(input);
+
+ // Cache the length
+ inputLength = input.length;
+
+ // Initialize the state
+ n = initialN;
+ delta = 0;
+ bias = initialBias;
+
+ // Handle the basic code points
+ for (j = 0; j < inputLength; ++j) {
+ currentValue = input[j];
+ if (currentValue < 0x80) {
+ output.push(stringFromCharCode(currentValue));
+ }
+ }
+
+ handledCPCount = basicLength = output.length;
+
+ // `handledCPCount` is the number of code points that have been handled;
+ // `basicLength` is the number of basic code points.
+
+ // Finish the basic string - if it is not empty - with a delimiter
+ if (basicLength) {
+ output.push(delimiter);
+ }
+
+ // Main encoding loop:
+ while (handledCPCount < inputLength) {
+
+ // All non-basic code points < n have been handled already. Find the next
+ // larger one:
+ for (m = maxInt, j = 0; j < inputLength; ++j) {
+ currentValue = input[j];
+ if (currentValue >= n && currentValue < m) {
+ m = currentValue;
+ }
+ }
+
+ // Increase `delta` enough to advance the decoder's <n,i> state to <m,0>,
+ // but guard against overflow
+ handledCPCountPlusOne = handledCPCount + 1;
+ if (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) {
+ error('overflow');
+ }
+
+ delta += (m - n) * handledCPCountPlusOne;
+ n = m;
+
+ for (j = 0; j < inputLength; ++j) {
+ currentValue = input[j];
+
+ if (currentValue < n && ++delta > maxInt) {
+ error('overflow');
+ }
+
+ if (currentValue == n) {
+ // Represent delta as a generalized variable-length integer
+ for (q = delta, k = base; /* no condition */; k += base) {
+ t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);
+ if (q < t) {
+ break;
+ }
+ qMinusT = q - t;
+ baseMinusT = base - t;
+ output.push(
+ stringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0))
+ );
+ q = floor(qMinusT / baseMinusT);
+ }
+
+ output.push(stringFromCharCode(digitToBasic(q, 0)));
+ bias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength);
+ delta = 0;
+ ++handledCPCount;
+ }
+ }
+
+ ++delta;
+ ++n;
+
+ }
+ return output.join('');
+ }
+
+ /**
+ * Converts a Punycode string representing a domain name to Unicode. Only the
+ * Punycoded parts of the domain name will be converted, i.e. it doesn't
+ * matter if you call it on a string that has already been converted to
+ * Unicode.
+ * @memberOf punycode
+ * @param {String} domain The Punycode domain name to convert to Unicode.
+ * @returns {String} The Unicode representation of the given Punycode
+ * string.
+ */
+ function toUnicode(domain) {
+ return mapDomain(domain, function(string) {
+ return regexPunycode.test(string)
+ ? decode(string.slice(4).toLowerCase())
+ : string;
+ });
+ }
+
+ /**
+ * Converts a Unicode string representing a domain name to Punycode. Only the
+ * non-ASCII parts of the domain name will be converted, i.e. it doesn't
+ * matter if you call it with a domain that's already in ASCII.
+ * @memberOf punycode
+ * @param {String} domain The domain name to convert, as a Unicode string.
+ * @returns {String} The Punycode representation of the given domain name.
+ */
+ function toASCII(domain) {
+ return mapDomain(domain, function(string) {
+ return regexNonASCII.test(string)
+ ? 'xn--' + encode(string)
+ : string;
+ });
+ }
+
+ /*--------------------------------------------------------------------------*/
+
+ /** Define the public API */
+ punycode = {
+ /**
+ * A string representing the current Punycode.js version number.
+ * @memberOf punycode
+ * @type String
+ */
+ 'version': '1.2.3',
+ /**
+ * An object of methods to convert from JavaScript's internal character
+ * representation (UCS-2) to Unicode code points, and back.
+ * @see <http://mathiasbynens.be/notes/javascript-encoding>
+ * @memberOf punycode
+ * @type Object
+ */
+ 'ucs2': {
+ 'decode': ucs2decode,
+ 'encode': ucs2encode
+ },
+ 'decode': decode,
+ 'encode': encode,
+ 'toASCII': toASCII,
+ 'toUnicode': toUnicode
+ };
+
+ /** Expose `punycode` */
+ // Some AMD build optimizers, like r.js, check for specific condition patterns
+ // like the following:
+ if (
+ typeof define == 'function' &&
+ typeof define.amd == 'object' &&
+ define.amd
+ ) {
+ define(function() {
+ return punycode;
+ });
+ } else if (freeExports && !freeExports.nodeType) {
+ if (freeModule) { // in Node.js or RingoJS v0.8.0+
+ freeModule.exports = punycode;
+ } else { // in Narwhal or RingoJS v0.7.0-
+ for (key in punycode) {
+ punycode.hasOwnProperty(key) && (freeExports[key] = punycode[key]);
+ }
+ }
+ } else { // in Rhino or a web browser
+ root.punycode = punycode;
+ }
+
+}(this));
diff --git a/deps/npm/node_modules/request/node_modules/tough-cookie/node_modules/punycode/punycode.min.js b/deps/npm/node_modules/request/node_modules/tough-cookie/node_modules/punycode/punycode.min.js
new file mode 100644
index 000000000..ac5d914a1
--- /dev/null
+++ b/deps/npm/node_modules/request/node_modules/tough-cookie/node_modules/punycode/punycode.min.js
@@ -0,0 +1,2 @@
+/*! http://mths.be/punycode v1.2.3 by @mathias */
+(function(o){function e(o){throw RangeError(L[o])}function n(o,e){for(var n=o.length;n--;)o[n]=e(o[n]);return o}function t(o,e){return n(o.split(S),e).join(".")}function r(o){for(var e,n,t=[],r=0,u=o.length;u>r;)e=o.charCodeAt(r++),e>=55296&&56319>=e&&u>r?(n=o.charCodeAt(r++),56320==(64512&n)?t.push(((1023&e)<<10)+(1023&n)+65536):(t.push(e),r--)):t.push(e);return t}function u(o){return n(o,function(o){var e="";return o>65535&&(o-=65536,e+=R(55296|1023&o>>>10),o=56320|1023&o),e+=R(o)}).join("")}function i(o){return 10>o-48?o-22:26>o-65?o-65:26>o-97?o-97:x}function f(o,e){return o+22+75*(26>o)-((0!=e)<<5)}function c(o,e,n){var t=0;for(o=n?P(o/m):o>>1,o+=P(o/e);o>M*y>>1;t+=x)o=P(o/M);return P(t+(M+1)*o/(o+j))}function l(o){var n,t,r,f,l,d,s,a,p,h,v=[],g=o.length,w=0,j=I,m=A;for(t=o.lastIndexOf(F),0>t&&(t=0),r=0;t>r;++r)o.charCodeAt(r)>=128&&e("not-basic"),v.push(o.charCodeAt(r));for(f=t>0?t+1:0;g>f;){for(l=w,d=1,s=x;f>=g&&e("invalid-input"),a=i(o.charCodeAt(f++)),(a>=x||a>P((b-w)/d))&&e("overflow"),w+=a*d,p=m>=s?C:s>=m+y?y:s-m,!(p>a);s+=x)h=x-p,d>P(b/h)&&e("overflow"),d*=h;n=v.length+1,m=c(w-l,n,0==l),P(w/n)>b-j&&e("overflow"),j+=P(w/n),w%=n,v.splice(w++,0,j)}return u(v)}function d(o){var n,t,u,i,l,d,s,a,p,h,v,g,w,j,m,E=[];for(o=r(o),g=o.length,n=I,t=0,l=A,d=0;g>d;++d)v=o[d],128>v&&E.push(R(v));for(u=i=E.length,i&&E.push(F);g>u;){for(s=b,d=0;g>d;++d)v=o[d],v>=n&&s>v&&(s=v);for(w=u+1,s-n>P((b-t)/w)&&e("overflow"),t+=(s-n)*w,n=s,d=0;g>d;++d)if(v=o[d],n>v&&++t>b&&e("overflow"),v==n){for(a=t,p=x;h=l>=p?C:p>=l+y?y:p-l,!(h>a);p+=x)m=a-h,j=x-h,E.push(R(f(h+m%j,0))),a=P(m/j);E.push(R(f(a,0))),l=c(t,w,u==i),t=0,++u}++t,++n}return E.join("")}function s(o){return t(o,function(o){return E.test(o)?l(o.slice(4).toLowerCase()):o})}function a(o){return t(o,function(o){return O.test(o)?"xn--"+d(o):o})}var p="object"==typeof exports&&exports,h="object"==typeof module&&module&&module.exports==p&&module,v="object"==typeof global&&global;(v.global===v||v.window===v)&&(o=v);var g,w,b=2147483647,x=36,C=1,y=26,j=38,m=700,A=72,I=128,F="-",E=/^xn--/,O=/[^ -~]/,S=/\x2E|\u3002|\uFF0E|\uFF61/g,L={overflow:"Overflow: input needs wider integers to process","not-basic":"Illegal input >= 0x80 (not a basic code point)","invalid-input":"Invalid input"},M=x-C,P=Math.floor,R=String.fromCharCode;if(g={version:"1.2.3",ucs2:{decode:r,encode:u},decode:l,encode:d,toASCII:a,toUnicode:s},"function"==typeof define&&"object"==typeof define.amd&&define.amd)define(function(){return g});else if(p&&!p.nodeType)if(h)h.exports=g;else for(w in g)g.hasOwnProperty(w)&&(p[w]=g[w]);else o.punycode=g})(this); \ No newline at end of file
diff --git a/deps/npm/node_modules/request/node_modules/tough-cookie/node_modules/punycode/vendor/docdown/LICENSE.txt b/deps/npm/node_modules/request/node_modules/tough-cookie/node_modules/punycode/vendor/docdown/LICENSE.txt
new file mode 100644
index 000000000..a7501f98d
--- /dev/null
+++ b/deps/npm/node_modules/request/node_modules/tough-cookie/node_modules/punycode/vendor/docdown/LICENSE.txt
@@ -0,0 +1,20 @@
+Copyright 2011-2013 John-David Dalton <http://allyoucanleet.com/>
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file
diff --git a/deps/npm/node_modules/request/node_modules/tough-cookie/node_modules/punycode/vendor/docdown/README.md b/deps/npm/node_modules/request/node_modules/tough-cookie/node_modules/punycode/vendor/docdown/README.md
new file mode 100644
index 000000000..fbddce918
--- /dev/null
+++ b/deps/npm/node_modules/request/node_modules/tough-cookie/node_modules/punycode/vendor/docdown/README.md
@@ -0,0 +1,35 @@
+# Docdown <sup>v1.0.0</sup>
+
+A simple JSDoc to Markdown documentation generator.
+
+## Documentation
+
+The documentation for Docdown can be viewed here: [/doc/README.md](https://github.com/jdalton/docdown/blob/master/doc/README.md#readme)
+
+For a list of upcoming features, check out our [roadmap](https://github.com/jdalton/docdown/wiki/Roadmap).
+
+## Installation and usage
+
+Usage example:
+
+```php
+require("docdown.php");
+
+// generate Markdown
+$markdown = docdown(array(
+ "path" => $filepath,
+ "url" => "https://github.com/username/project/blob/master/my.js"
+));
+```
+
+## Author
+
+| [![twitter/jdalton](http://gravatar.com/avatar/299a3d891ff1920b69c364d061007043?s=70)](http://twitter.com/jdalton "Follow @jdalton on Twitter") |
+|---|
+| [John-David Dalton](http://allyoucanleet.com/) |
+
+## Contributors
+
+| [![twitter/mathias](http://gravatar.com/avatar/24e08a9ea84deb17ae121074d0f17125?s=70)](http://twitter.com/mathias "Follow @mathias on Twitter") |
+|---|
+| [Mathias Bynens](http://mathiasbynens.be/) |
diff --git a/deps/npm/node_modules/request/node_modules/tough-cookie/node_modules/punycode/vendor/docdown/doc/README.md b/deps/npm/node_modules/request/node_modules/tough-cookie/node_modules/punycode/vendor/docdown/doc/README.md
new file mode 100644
index 000000000..459d36abd
--- /dev/null
+++ b/deps/npm/node_modules/request/node_modules/tough-cookie/node_modules/punycode/vendor/docdown/doc/README.md
@@ -0,0 +1,69 @@
+# Docdown <sup>v1.0.0</sup>
+
+<!-- div -->
+
+
+<!-- div -->
+
+## <a id="docdown"></a>`docdown`
+* [`docdown`](#docdown$optionsarray)
+
+<!-- /div -->
+
+
+<!-- /div -->
+
+
+<!-- div -->
+
+
+<!-- div -->
+
+## `docdown`
+
+<!-- div -->
+
+### <a id="docdown$optionsarray"></a>`docdown([$options=array()])`
+<a href="#docdown$optionsarray">#</a> [&#x24C8;](https://github.com/jdalton/docdown/blob/master/docdown.php#L34 "View in source") [&#x24C9;][1]
+
+Generates Markdown from JSDoc entries in a given file.
+
+#### Arguments
+1. `[$options=array()]` *(Array)*: The options array.
+
+#### Returns
+*(String)*: The generated Markdown.
+
+#### Example
+```php
+// specify a file path
+$markdown = docdown(array(
+ // path to js file
+ 'path' => $filepath,
+ // url used to reference line numbers in code
+ 'url' => 'https://github.com/username/project/blob/master/my.js'
+));
+
+// or pass raw js
+$markdown = docdown(array(
+ // raw JavaScript source
+ 'source' => $rawJS,
+ // documentation title
+ 'title' => 'My API Documentation',
+ // url used to reference line numbers in code
+ 'url' => 'https://github.com/username/project/blob/master/my.js'
+));
+```
+
+* * *
+
+<!-- /div -->
+
+
+<!-- /div -->
+
+
+<!-- /div -->
+
+
+ [1]: #docdown "Jump back to the TOC." \ No newline at end of file
diff --git a/deps/npm/node_modules/request/node_modules/tough-cookie/node_modules/punycode/vendor/docdown/doc/parse.php b/deps/npm/node_modules/request/node_modules/tough-cookie/node_modules/punycode/vendor/docdown/doc/parse.php
new file mode 100644
index 000000000..eca8d145e
--- /dev/null
+++ b/deps/npm/node_modules/request/node_modules/tough-cookie/node_modules/punycode/vendor/docdown/doc/parse.php
@@ -0,0 +1,35 @@
+<?php
+
+ // cleanup requested filepath
+ $file = isset($_GET['f']) ? $_GET['f'] : 'docdown';
+ $file = preg_replace('#(\.*[\/])+#', '', $file);
+ $file .= preg_match('/\.[a-z]+$/', $file) ? '' : '.php';
+
+ // output filename
+ if (isset($_GET['o'])) {
+ $output = $_GET['o'];
+ } else if (isset($_SERVER['argv'][1])) {
+ $output = $_SERVER['argv'][1];
+ } else {
+ $output = basename($file);
+ }
+
+ /*--------------------------------------------------------------------------*/
+
+ require('../docdown.php');
+
+ // generate Markdown
+ $markdown = docdown(array(
+ 'path' => '../' . $file,
+ 'title' => 'Docdown <sup>v1.0.0</sup>',
+ 'url' => 'https://github.com/jdalton/docdown/blob/master/docdown.php'
+ ));
+
+ // save to a .md file
+ file_put_contents($output . '.md', $markdown);
+
+ // print
+ header('Content-Type: text/plain;charset=utf-8');
+ echo $markdown . PHP_EOL;
+
+?> \ No newline at end of file
diff --git a/deps/npm/node_modules/request/node_modules/tough-cookie/node_modules/punycode/vendor/docdown/docdown.php b/deps/npm/node_modules/request/node_modules/tough-cookie/node_modules/punycode/vendor/docdown/docdown.php
new file mode 100644
index 000000000..4a786d753
--- /dev/null
+++ b/deps/npm/node_modules/request/node_modules/tough-cookie/node_modules/punycode/vendor/docdown/docdown.php
@@ -0,0 +1,38 @@
+<?php
+/*!
+ * Docdown v1.0.0-pre
+ * Copyright 2011-2013 John-David Dalton <http://allyoucanleet.com/>
+ * Available under MIT license <http://mths.be/mit>
+ */
+require(dirname(__FILE__) . '/src/DocDown/Generator.php');
+
+/**
+ * Generates Markdown from JSDoc entries in a given file.
+ *
+ * @param {Array} [$options=array()] The options array.
+ * @returns {String} The generated Markdown.
+ * @example
+ *
+ * // specify a file path
+ * $markdown = docdown(array(
+ * // path to js file
+ * 'path' => $filepath,
+ * // url used to reference line numbers in code
+ * 'url' => 'https://github.com/username/project/blob/master/my.js'
+ * ));
+ *
+ * // or pass raw js
+ * $markdown = docdown(array(
+ * // raw JavaScript source
+ * 'source' => $rawJS,
+ * // documentation title
+ * 'title' => 'My API Documentation',
+ * // url used to reference line numbers in code
+ * 'url' => 'https://github.com/username/project/blob/master/my.js'
+ * ));
+ */
+function docdown( $options = array() ) {
+ $gen = new Generator($options);
+ return $gen->generate();
+}
+?> \ No newline at end of file
diff --git a/deps/npm/node_modules/request/node_modules/tough-cookie/node_modules/punycode/vendor/docdown/src/DocDown/Alias.php b/deps/npm/node_modules/request/node_modules/tough-cookie/node_modules/punycode/vendor/docdown/src/DocDown/Alias.php
new file mode 100644
index 000000000..0a7c552e0
--- /dev/null
+++ b/deps/npm/node_modules/request/node_modules/tough-cookie/node_modules/punycode/vendor/docdown/src/DocDown/Alias.php
@@ -0,0 +1,226 @@
+<?php
+
+/**
+ * A class to represent a JSDoc entry alias.
+ */
+class Alias {
+
+ /**
+ * The alias owner.
+ *
+ * @memberOf Alias
+ * @type Object
+ */
+ public $owner;
+
+ /*--------------------------------------------------------------------------*/
+
+ /**
+ * The Alias constructor.
+ *
+ * @constructor
+ * @param {String} $name The alias name.
+ * @param {Object} $owner The alias owner.
+ */
+ public function __construct( $name, $owner ) {
+ $this->owner = $owner;
+ $this->_name = $name;
+ $this->_call = $owner->getCall();
+ $this->_category = $owner->getCategory();
+ $this->_desc = $owner->getDesc();
+ $this->_example = $owner->getExample();
+ $this->_isCtor = $owner->isCtor();
+ $this->_isLicense = $owner->isLicense();
+ $this->_isPlugin = $owner->isPlugin();
+ $this->_isPrivate = $owner->isPrivate();
+ $this->_isStatic = $owner->isStatic();
+ $this->_lineNumber = $owner->getLineNumber();
+ $this->_members = $owner->getMembers();
+ $this->_params = $owner->getParams();
+ $this->_returns = $owner->getReturns();
+ $this->_type = $owner->getType();
+ }
+
+ /*--------------------------------------------------------------------------*/
+
+ /**
+ * Extracts the entry's `alias` objects.
+ *
+ * @memberOf Alias
+ * @param {Number} $index The index of the array value to return.
+ * @returns {Array|String} The entry's `alias` objects.
+ */
+ public function getAliases( $index = null ) {
+ $result = array();
+ return $index !== null
+ ? @$result[$index]
+ : $result;
+ }
+
+ /**
+ * Extracts the function call from the owner entry.
+ *
+ * @memberOf Alias
+ * @returns {String} The function call.
+ */
+ public function getCall() {
+ return $this->_call;
+ }
+
+ /**
+ * Extracts the owner entry's `category` data.
+ *
+ * @memberOf Alias
+ * @returns {String} The owner entry's `category` data.
+ */
+ public function getCategory() {
+ return $this->_category;
+ }
+
+ /**
+ * Extracts the owner entry's description.
+ *
+ * @memberOf Alias
+ * @returns {String} The owner entry's description.
+ */
+ public function getDesc() {
+ return $this->_desc;
+ }
+
+ /**
+ * Extracts the owner entry's `example` data.
+ *
+ * @memberOf Alias
+ * @returns {String} The owner entry's `example` data.
+ */
+ public function getExample() {
+ return $this->_example;
+ }
+
+ /**
+ * Checks if the entry is an alias.
+ *
+ * @memberOf Alias
+ * @returns {Boolean} Returns `true`.
+ */
+ public function isAlias() {
+ return true;
+ }
+
+ /**
+ * Checks if the owner entry is a constructor.
+ *
+ * @memberOf Alias
+ * @returns {Boolean} Returns `true` if a constructor, else `false`.
+ */
+ public function isCtor() {
+ return $this->_isCtor;
+ }
+
+ /**
+ * Checks if the owner entry is a license.
+ *
+ * @memberOf Alias
+ * @returns {Boolean} Returns `true` if a license, else `false`.
+ */
+ public function isLicense() {
+ return $this->_isLicense;
+ }
+
+ /**
+ * Checks if the owner entry *is* assigned to a prototype.
+ *
+ * @memberOf Alias
+ * @returns {Boolean} Returns `true` if assigned to a prototype, else `false`.
+ */
+ public function isPlugin() {
+ return $this->_isPlugin;
+ }
+
+ /**
+ * Checks if the owner entry is private.
+ *
+ * @memberOf Alias
+ * @returns {Boolean} Returns `true` if private, else `false`.
+ */
+ public function isPrivate() {
+ return $this->_isPrivate;
+ }
+
+ /**
+ * Checks if the owner entry is *not* assigned to a prototype.
+ *
+ * @memberOf Alias
+ * @returns {Boolean} Returns `true` if not assigned to a prototype, else `false`.
+ */
+ public function isStatic() {
+ return $this->_isStatic;
+ }
+
+ /**
+ * Resolves the owner entry's line number.
+ *
+ * @memberOf Alias
+ * @returns {Number} The owner entry's line number.
+ */
+ public function getLineNumber() {
+ return $this->_lineNumber;
+ }
+
+ /**
+ * Extracts the owner entry's `member` data.
+ *
+ * @memberOf Alias
+ * @param {Number} $index The index of the array value to return.
+ * @returns {Array|String} The owner entry's `member` data.
+ */
+ public function getMembers( $index = null ) {
+ return $index !== null
+ ? @$this->_members[$index]
+ : $this->_members;
+ }
+
+ /**
+ * Extracts the owner entry's `name` data.
+ *
+ * @memberOf Alias
+ * @returns {String} The owner entry's `name` data.
+ */
+ public function getName() {
+ return $this->_name;
+ }
+
+ /**
+ * Extracts the owner entry's `param` data.
+ *
+ * @memberOf Alias
+ * @param {Number} $index The index of the array value to return.
+ * @returns {Array} The owner entry's `param` data.
+ */
+ public function getParams( $index = null ) {
+ return $index !== null
+ ? @$this->_params[$index]
+ : $this->_params;
+ }
+
+ /**
+ * Extracts the owner entry's `returns` data.
+ *
+ * @memberOf Alias
+ * @returns {String} The owner entry's `returns` data.
+ */
+ public function getReturns() {
+ return $this->_returns;
+ }
+
+ /**
+ * Extracts the owner entry's `type` data.
+ *
+ * @memberOf Alias
+ * @returns {String} The owner entry's `type` data.
+ */
+ public function getType() {
+ return $this->_type;
+ }
+}
+?> \ No newline at end of file
diff --git a/deps/npm/node_modules/request/node_modules/tough-cookie/node_modules/punycode/vendor/docdown/src/DocDown/Entry.php b/deps/npm/node_modules/request/node_modules/tough-cookie/node_modules/punycode/vendor/docdown/src/DocDown/Entry.php
new file mode 100644
index 000000000..a973d9a67
--- /dev/null
+++ b/deps/npm/node_modules/request/node_modules/tough-cookie/node_modules/punycode/vendor/docdown/src/DocDown/Entry.php
@@ -0,0 +1,442 @@
+<?php
+
+require(dirname(__FILE__) . "/Alias.php");
+
+/**
+ * A class to simplify parsing a single JSDoc entry.
+ */
+class Entry {
+
+ /**
+ * The documentation entry.
+ *
+ * @memberOf Entry
+ * @type String
+ */
+ public $entry = '';
+
+ /**
+ * The language highlighter used for code examples.
+ *
+ * @memberOf Entry
+ * @type String
+ */
+ public $lang = '';
+
+ /**
+ * The source code.
+ *
+ * @memberOf Entry
+ * @type String
+ */
+ public $source = '';
+
+ /*--------------------------------------------------------------------------*/
+
+ /**
+ * The Entry constructor.
+ *
+ * @constructor
+ * @param {String} $entry The documentation entry to analyse.
+ * @param {String} $source The source code.
+ * @param {String} [$lang ='js'] The language highlighter used for code examples.
+ */
+ public function __construct( $entry, $source, $lang = 'js' ) {
+ $this->entry = $entry;
+ $this->lang = $lang;
+ $this->source = str_replace(PHP_EOL, "\n", $source);
+ }
+
+ /*--------------------------------------------------------------------------*/
+
+ /**
+ * Extracts the documentation entries from source code.
+ *
+ * @static
+ * @memberOf Entry
+ * @param {String} $source The source code.
+ * @returns {Array} The array of entries.
+ */
+ public static function getEntries( $source ) {
+ preg_match_all('#/\*\*(?![-!])[\s\S]*?\*/\s*.+#', $source, $result);
+ return array_pop($result);
+ }
+
+ /*--------------------------------------------------------------------------*/
+
+ /**
+ * Checks if the entry is a function reference.
+ *
+ * @private
+ * @memberOf Entry
+ * @returns {Boolean} Returns `true` if the entry is a function reference, else `false`.
+ */
+ private function isFunction() {
+ if (!isset($this->_isFunction)) {
+ $this->_isFunction = !!(
+ $this->isCtor() ||
+ count($this->getParams()) ||
+ count($this->getReturns()) ||
+ preg_match('/\*[\t ]*@function\b/', $this->entry)
+ );
+ }
+ return $this->_isFunction;
+ }
+
+ /*--------------------------------------------------------------------------*/
+
+ /**
+ * Extracts the entry's `alias` objects.
+ *
+ * @memberOf Entry
+ * @param {Number} $index The index of the array value to return.
+ * @returns {Array|String} The entry's `alias` objects.
+ */
+ public function getAliases( $index = null ) {
+ if (!isset($this->_aliases)) {
+ preg_match('#\*[\t ]*@alias\s+(.+)#', $this->entry, $result);
+
+ if (count($result)) {
+ $result = trim(preg_replace('/(?:^|\n)[\t ]*\*[\t ]?/', ' ', $result[1]));
+ $result = preg_split('/,\s*/', $result);
+ natsort($result);
+
+ foreach ($result as $resultIndex => $value) {
+ $result[$resultIndex] = new Alias($value, $this);
+ }
+ }
+ $this->_aliases = $result;
+ }
+ return $index !== null
+ ? @$this->_aliases[$index]
+ : $this->_aliases;
+ }
+
+ /**
+ * Extracts the function call from the entry.
+ *
+ * @memberOf Entry
+ * @returns {String} The function call.
+ */
+ public function getCall() {
+ if (isset($this->_call)) {
+ return $this->_call;
+ }
+
+ preg_match('#\*/\s*(?:function ([^(]*)|(.*?)(?=[:=,]|return\b))#', $this->entry, $result);
+ if ($result = array_pop($result)) {
+ $result = array_pop(explode('var ', trim(trim(array_pop(explode('.', $result))), "'")));
+ }
+ // resolve name
+ // avoid $this->getName() because it calls $this->getCall()
+ preg_match('#\*[\t ]*@name\s+(.+)#', $this->entry, $name);
+ if (count($name)) {
+ $name = trim($name[1]);
+ } else {
+ $name = $result;
+ }
+ // compile function call syntax
+ if ($this->isFunction()) {
+ // compose parts
+ $result = array($result);
+ $params = $this->getParams();
+ foreach ($params as $param) {
+ $result[] = $param[1];
+ }
+ // format
+ $result = $name .'('. implode(array_slice($result, 1), ', ') .')';
+ $result = str_replace(', [', ' [, ', str_replace('], [', ', ', $result));
+ }
+
+ $this->_call = $result ? $result : $name;
+ return $this->_call;
+ }
+
+ /**
+ * Extracts the entry's `category` data.
+ *
+ * @memberOf Entry
+ * @returns {String} The entry's `category` data.
+ */
+ public function getCategory() {
+ if (isset($this->_category)) {
+ return $this->_category;
+ }
+
+ preg_match('#\*[\t ]*@category\s+(.+)#', $this->entry, $result);
+ if (count($result)) {
+ $result = trim(preg_replace('/(?:^|\n)[\t ]*\*[\t ]?/', ' ', $result[1]));
+ } else {
+ $result = $this->getType() == 'Function' ? 'Methods' : 'Properties';
+ }
+ $this->_category = $result;
+ return $result;
+ }
+
+ /**
+ * Extracts the entry's description.
+ *
+ * @memberOf Entry
+ * @returns {String} The entry's description.
+ */
+ public function getDesc() {
+ if (isset($this->_desc)) {
+ return $this->_desc;
+ }
+
+ preg_match('#/\*\*(?:\s*\*)?([\s\S]*?)(?=\*\s\@[a-z]|\*/)#', $this->entry, $result);
+ if (count($result)) {
+ $type = $this->getType();
+ $result = preg_replace('/:\n[\t ]*\*[\t ]*/', ":<br>\n", $result[1]);
+ $result = preg_replace('/(?:^|\n)[\t ]*\*\n[\t ]*\*[\t ]*/', "\n\n", $result);
+ $result = preg_replace('/(?:^|\n)[\t ]*\*[\t ]?/', ' ', $result);
+ $result = trim($result);
+ $result = ($type == 'Function' ? '' : '(' . str_replace('|', ', ', trim($type, '{}')) . '): ') . $result;
+ }
+ $this->_desc = $result;
+ return $result;
+ }
+
+ /**
+ * Extracts the entry's `example` data.
+ *
+ * @memberOf Entry
+ * @returns {String} The entry's `example` data.
+ */
+ public function getExample() {
+ if (isset($this->_example)) {
+ return $this->_example;
+ }
+
+ preg_match('#\*[\t ]*@example\s+([\s\S]*?)(?=\*\s\@[a-z]|\*/)#', $this->entry, $result);
+ if (count($result)) {
+ $result = trim(preg_replace('/(?:^|\n)[\t ]*\*[\t ]?/', "\n", $result[1]));
+ $result = '```' . $this->lang . "\n" . $result . "\n```";
+ }
+ $this->_example = $result;
+ return $result;
+ }
+
+ /**
+ * Checks if the entry is an alias.
+ *
+ * @memberOf Entry
+ * @returns {Boolean} Returns `false`.
+ */
+ public function isAlias() {
+ return false;
+ }
+
+ /**
+ * Checks if the entry is a constructor.
+ *
+ * @memberOf Entry
+ * @returns {Boolean} Returns `true` if a constructor, else `false`.
+ */
+ public function isCtor() {
+ if (!isset($this->_isCtor)) {
+ $this->_isCtor = !!preg_match('/\*[\t ]*@constructor\b/', $this->entry);
+ }
+ return $this->_isCtor;
+ }
+
+ /**
+ * Checks if the entry is a license.
+ *
+ * @memberOf Entry
+ * @returns {Boolean} Returns `true` if a license, else `false`.
+ */
+ public function isLicense() {
+ if (!isset($this->_isLicense)) {
+ $this->_isLicense = !!preg_match('/\*[\t ]*@license\b/', $this->entry);
+ }
+ return $this->_isLicense;
+ }
+
+ /**
+ * Checks if the entry *is* assigned to a prototype.
+ *
+ * @memberOf Entry
+ * @returns {Boolean} Returns `true` if assigned to a prototype, else `false`.
+ */
+ public function isPlugin() {
+ if (!isset($this->_isPlugin)) {
+ $this->_isPlugin = !$this->isCtor() && !$this->isPrivate() && !$this->isStatic();
+ }
+ return $this->_isPlugin;
+ }
+
+ /**
+ * Checks if the entry is private.
+ *
+ * @memberOf Entry
+ * @returns {Boolean} Returns `true` if private, else `false`.
+ */
+ public function isPrivate() {
+ if (!isset($this->_isPrivate)) {
+ $this->_isPrivate = $this->isLicense() || !!preg_match('/\*[\t ]*@private\b/', $this->entry) || !preg_match('/\*[\t ]*@[a-z]+\b/', $this->entry);
+ }
+ return $this->_isPrivate;
+ }
+
+ /**
+ * Checks if the entry is *not* assigned to a prototype.
+ *
+ * @memberOf Entry
+ * @returns {Boolean} Returns `true` if not assigned to a prototype, else `false`.
+ */
+ public function isStatic() {
+ if (isset($this->_isStatic)) {
+ return $this->_isStatic;
+ }
+
+ $public = !$this->isPrivate();
+ $result = $public && !!preg_match('/\*[\t ]*@static\b/', $this->entry);
+
+ // set in cases where it isn't explicitly stated
+ if ($public && !$result) {
+ if ($parent = array_pop(preg_split('/[#.]/', $this->getMembers(0)))) {
+ foreach (Entry::getEntries($this->source) as $entry) {
+ $entry = new Entry($entry, $this->source);
+ if ($entry->getName() == $parent) {
+ $result = !$entry->isCtor();
+ break;
+ }
+ }
+ } else {
+ $result = true;
+ }
+ }
+ $this->_isStatic = $result;
+ return $result;
+ }
+
+ /**
+ * Resolves the entry's line number.
+ *
+ * @memberOf Entry
+ * @returns {Number} The entry's line number.
+ */
+ public function getLineNumber() {
+ if (!isset($this->_lineNumber)) {
+ preg_match_all('/\n/', substr($this->source, 0, strrpos($this->source, $this->entry) + strlen($this->entry)), $lines);
+ $this->_lineNumber = count(array_pop($lines)) + 1;
+ }
+ return $this->_lineNumber;
+ }
+
+ /**
+ * Extracts the entry's `member` data.
+ *
+ * @memberOf Entry
+ * @param {Number} $index The index of the array value to return.
+ * @returns {Array|String} The entry's `member` data.
+ */
+ public function getMembers( $index = null ) {
+ if (!isset($this->_members)) {
+ preg_match('#\*[\t ]*@member(?:Of)?\s+(.+)#', $this->entry, $result);
+ if (count($result)) {
+ $result = trim(preg_replace('/(?:^|\n)[\t ]*\*[\t ]?/', ' ', $result[1]));
+ $result = preg_split('/,\s*/', $result);
+ natsort($result);
+ }
+ $this->_members = $result;
+ }
+ return $index !== null
+ ? @$this->_members[$index]
+ : $this->_members;
+ }
+
+ /**
+ * Extracts the entry's `name` data.
+ *
+ * @memberOf Entry
+ * @returns {String} The entry's `name` data.
+ */
+ public function getName() {
+ if (isset($this->_name)) {
+ return $this->_name;
+ }
+
+ preg_match('#\*[\t ]*@name\s+(.+)#', $this->entry, $result);
+ if (count($result)) {
+ $result = trim(preg_replace('/(?:^|\n)[\t ]*\*[\t ]?/', ' ', $result[1]));
+ } else {
+ $result = array_shift(explode('(', $this->getCall()));
+ }
+ $this->_name = $result;
+ return $result;
+ }
+
+ /**
+ * Extracts the entry's `param` data.
+ *
+ * @memberOf Entry
+ * @param {Number} $index The index of the array value to return.
+ * @returns {Array} The entry's `param` data.
+ */
+ public function getParams( $index = null ) {
+ if (!isset($this->_params)) {
+ preg_match_all('#\*[\t ]*@param\s+\{([^}]+)\}\s+(\[.+\]|[$\w|]+(?:\[.+\])?)\s+([\s\S]*?)(?=\*\s\@[a-z]|\*/)#i', $this->entry, $result);
+ if (count($result = array_filter(array_slice($result, 1)))) {
+ // repurpose array
+ foreach ($result as $param) {
+ foreach ($param as $key => $value) {
+ if (!is_array($result[0][$key])) {
+ $result[0][$key] = array();
+ }
+ $result[0][$key][] = trim(preg_replace('/(?:^|\n)[\t ]*\*[\t ]*/', ' ', $value));
+ }
+ }
+ $result = $result[0];
+ }
+ $this->_params = $result;
+ }
+ return $index !== null
+ ? @$this->_params[$index]
+ : $this->_params;
+ }
+
+ /**
+ * Extracts the entry's `returns` data.
+ *
+ * @memberOf Entry
+ * @returns {String} The entry's `returns` data.
+ */
+ public function getReturns() {
+ if (isset($this->_returns)) {
+ return $this->_returns;
+ }
+
+ preg_match('#\*[\t ]*@returns\s+\{([^}]+)\}\s+([\s\S]*?)(?=\*\s\@[a-z]|\*/)#', $this->entry, $result);
+ if (count($result)) {
+ $result = array_map('trim', array_slice($result, 1));
+ $result[0] = str_replace('|', ', ', $result[0]);
+ $result[1] = preg_replace('/(?:^|\n)[\t ]*\*[\t ]?/', ' ', $result[1]);
+ }
+ $this->_returns = $result;
+ return $result;
+ }
+
+ /**
+ * Extracts the entry's `type` data.
+ *
+ * @memberOf Entry
+ * @returns {String} The entry's `type` data.
+ */
+ public function getType() {
+ if (isset($this->_type)) {
+ return $this->_type;
+ }
+
+ preg_match('#\*[\t ]*@type\s+(.+)#', $this->entry, $result);
+ if (count($result)) {
+ $result = trim(preg_replace('/(?:^|\n)[\t ]*\*[\t ]?/', ' ', $result[1]));
+ } else {
+ $result = $this->isFunction() ? 'Function' : 'Unknown';
+ }
+ $this->_type = $result;
+ return $result;
+ }
+}
+?> \ No newline at end of file
diff --git a/deps/npm/node_modules/request/node_modules/tough-cookie/node_modules/punycode/vendor/docdown/src/DocDown/Generator.php b/deps/npm/node_modules/request/node_modules/tough-cookie/node_modules/punycode/vendor/docdown/src/DocDown/Generator.php
new file mode 100644
index 000000000..5dc2583f8
--- /dev/null
+++ b/deps/npm/node_modules/request/node_modules/tough-cookie/node_modules/punycode/vendor/docdown/src/DocDown/Generator.php
@@ -0,0 +1,563 @@
+<?php
+
+require(dirname(__FILE__) . "/Entry.php");
+
+/**
+ * Generates Markdown from JSDoc entries.
+ */
+class Generator {
+
+ /**
+ * The HTML for the close tag.
+ *
+ * @static
+ * @memberOf Generator
+ * @type String
+ */
+ public $closeTag = "\n<!-- /div -->\n";
+
+ /**
+ * An array of JSDoc entries.
+ *
+ * @memberOf Generator
+ * @type Array
+ */
+ public $entries = array();
+
+ /**
+ * The HTML for the open tag.
+ *
+ * @static
+ * @memberOf Generator
+ * @type String
+ */
+ public $openTag = "\n<!-- div -->\n";
+
+ /**
+ * An options array used to configure the generator.
+ *
+ * @memberOf Generator
+ * @type Array
+ */
+ public $options = array();
+
+ /**
+ * The file's source code.
+ *
+ * @memberOf Generator
+ * @type String
+ */
+ public $source = '';
+
+ /*--------------------------------------------------------------------------*/
+
+ /**
+ * The Generator constructor.
+ *
+ * @constructor
+ * @param {String} $source The source code to parse.
+ * @param {Array} $options The options array.
+ */
+ public function __construct( $source, $options = array() ) {
+ // juggle arguments
+ if (is_array($source)) {
+ $options = $source;
+ } else {
+ $options['source'] = $source;
+ }
+ if (isset($options['source']) && realpath($options['source'])) {
+ $options['path'] = $options['source'];
+ }
+ if (isset($options['path'])) {
+ preg_match('/(?<=\.)[a-z]+$/', $options['path'], $ext);
+ $options['source'] = file_get_contents($options['path']);
+ $ext = array_pop($ext);
+
+ if (!isset($options['lang']) && $ext) {
+ $options['lang'] = $ext;
+ }
+ if (!isset($options['title'])) {
+ $options['title'] = ucfirst(basename($options['path'])) . ' API documentation';
+ }
+ }
+ if (!isset($options['lang'])) {
+ $options['lang'] = 'js';
+ }
+ if (!isset($options['toc'])) {
+ $options['toc'] = 'properties';
+ }
+
+ $this->options = $options;
+ $this->source = str_replace(PHP_EOL, "\n", $options['source']);
+ $this->entries = Entry::getEntries($this->source);
+
+ foreach ($this->entries as $index => $value) {
+ $this->entries[$index] = new Entry($value, $this->source, $options['lang']);
+ }
+ }
+
+ /*--------------------------------------------------------------------------*/
+
+ /**
+ * Performs common string formatting operations.
+ *
+ * @private
+ * @static
+ * @memberOf Generator
+ * @param {String} $string The string to format.
+ * @returns {String} The formatted string.
+ */
+ private static function format( $string ) {
+ $counter = 0;
+
+ // tokenize inline code snippets
+ preg_match_all('/`[^`]+`/', $string, $tokenized);
+ $tokenized = $tokenized[0];
+ foreach ($tokenized as $snippet) {
+ $string = str_replace($snippet, '__token' . ($counter++) .'__', $string);
+ }
+
+ // italicize parentheses
+ $string = preg_replace('/(^|\s)(\([^)]+\))/', '$1*$2*', $string);
+
+ // mark numbers as inline code
+ $string = preg_replace('/[\t ](-?\d+(?:.\d+)?)(?!\.[^\n])/', ' `$1`', $string);
+
+ // detokenize inline code snippets
+ $counter = 0;
+ foreach ($tokenized as $snippet) {
+ $string = str_replace('__token' . ($counter++) . '__', $snippet, $string);
+ }
+
+ return trim($string);
+ }
+
+ /**
+ * Modify a string by replacing named tokens with matching assoc. array values.
+ *
+ * @private
+ * @static
+ * @memberOf Generator
+ * @param {String} $string The string to modify.
+ * @param {Array|Object} $object The template object.
+ * @returns {String} The modified string.
+ */
+ private static function interpolate( $string, $object ) {
+ preg_match_all('/#\{([^}]+)\}/', $string, $tokens);
+ $tokens = array_unique(array_pop($tokens));
+
+ foreach ($tokens as $token) {
+ $pattern = '/#\{' . $token . '\}/';
+ $replacement = '';
+
+ if (is_object($object)) {
+ preg_match('/\(([^)]+?)\)$/', $token, $args);
+ $args = preg_split('/,\s*/', array_pop($args));
+ $method = 'get' . ucfirst(str_replace('/\([^)]+?\)$/', '', $token));
+
+ if (method_exists($object, $method)) {
+ $replacement = (string) call_user_func_array(array($object, $method), $args);
+ } else if (isset($object->{$token})) {
+ $replacement = (string) $object->{$token};
+ }
+ } else if (isset($object[$token])) {
+ $replacement = (string) $object[$token];
+ }
+ $string = preg_replace($pattern, trim($replacement), $string);
+ }
+ return Generator::format($string);
+ }
+
+ /*--------------------------------------------------------------------------*/
+
+ /**
+ * Adds the given `$entries` to the `$result` array.
+ *
+ * @private
+ * @memberOf Generator
+ * @param {Array} $result The result array to modify.
+ * @param {Array} $entries The entries to add to the `$result`.
+ */
+ private function addEntries( &$result, $entries ) {
+ foreach ($entries as $entry) {
+ // skip aliases
+ if ($entry->isAlias()) {
+ continue;
+ }
+ // name and description
+ array_push(
+ $result,
+ $this->openTag,
+ Generator::interpolate("### <a id=\"#{hash}\"></a>`#{member}#{separator}#{call}`\n<a href=\"##{hash}\">#</a> [&#x24C8;](#{href} \"View in source\") [&#x24C9;][1]\n\n#{desc}", $entry)
+ );
+
+ // @alias
+ if (count($aliases = $entry->getAliases())) {
+ array_push($result, '', '#### Aliases');
+ foreach ($aliases as $index => $alias) {
+ $aliases[$index] = $alias->getName();
+ }
+ $result[] = '*' . implode(', ', $aliases) . '*';
+ }
+ // @param
+ if (count($params = $entry->getParams())) {
+ array_push($result, '', '#### Arguments');
+ foreach ($params as $index => $param) {
+ $result[] = Generator::interpolate('#{num}. `#{name}` (#{type}): #{desc}', array(
+ 'desc' => $param[2],
+ 'name' => $param[1],
+ 'num' => $index + 1,
+ 'type' => $param[0]
+ ));
+ }
+ }
+ // @returns
+ if (count($returns = $entry->getReturns())) {
+ array_push(
+ $result, '',
+ '#### Returns',
+ Generator::interpolate('(#{type}): #{desc}', array('desc' => $returns[1], 'type' => $returns[0]))
+ );
+ }
+ // @example
+ if ($example = $entry->getExample()) {
+ array_push($result, '', '#### Example', $example);
+ }
+ array_push($result, "\n* * *", $this->closeTag);
+ }
+ }
+
+ /**
+ * Resolves the entry's hash used to navigate the documentation.
+ *
+ * @private
+ * @memberOf Generator
+ * @param {Number|Object} $entry The entry object.
+ * @param {String} $member The name of the member.
+ * @returns {String} The url hash.
+ */
+ private function getHash( $entry, $member = '' ) {
+ $entry = is_numeric($entry) ? $this->entries[$entry] : $entry;
+ $member = !$member ? $entry->getMembers(0) : $member;
+ $result = ($member ? $member . ($entry->isPlugin() ? 'prototype' : '') : '') . $entry->getCall();
+ $result = preg_replace('/\(\[|\[\]/', '', $result);
+ $result = preg_replace('/[ =|\'"{}.()\]]/', '', $result);
+ $result = preg_replace('/[[#,]/', '-', $result);
+ return strtolower($result);
+ }
+
+ /**
+ * Resolves the entry's url for the specific line number.
+ *
+ * @private
+ * @memberOf Generator
+ * @param {Number|Object} $entry The entry object.
+ * @returns {String} The url.
+ */
+ private function getLineUrl( $entry ) {
+ $entry = is_numeric($entry) ? $this->entries($entry) : $entry;
+ return $this->options['url'] . '#L' . $entry->getLineNumber();
+ }
+
+ /**
+ * Extracts the character used to separate the entry's name from its member.
+ *
+ * @private
+ * @memberOf Generator
+ * @param {Number|Object} $entry The entry object.
+ * @returns {String} The separator.
+ */
+ private function getSeparator( $entry ) {
+ $entry = is_numeric($entry) ? $this->entries($entry) : $entry;
+ return $entry->isPlugin() ? '.prototype.' : '.';
+ }
+
+ /*--------------------------------------------------------------------------*/
+
+ /**
+ * Generates Markdown from JSDoc entries.
+ *
+ * @memberOf Generator
+ * @returns {String} The rendered Markdown.
+ */
+ public function generate() {
+ $api = array();
+ $byCategory = $this->options['toc'] == 'categories';
+ $categories = array();
+ $closeTag = $this->closeTag;
+ $compiling = false;
+ $openTag = $this->openTag;
+ $result = array('# ' . $this->options['title']);
+ $toc = 'toc';
+
+ // initialize $api array
+ foreach ($this->entries as $entry) {
+ // skip invalid or private entries
+ $name = $entry->getName();
+ if (!$name || $entry->isPrivate()) {
+ continue;
+ }
+
+ $members = $entry->getMembers();
+ $members = count($members) ? $members : array('');
+
+ foreach ($members as $member) {
+ // create api category arrays
+ if ($member && !isset($api[$member])) {
+ // create temporary entry to be replaced later
+ $api[$member] = new stdClass;
+ $api[$member]->static = array();
+ $api[$member]->plugin = array();
+ }
+
+ // append entry to api member
+ if (!$member || $entry->isCtor() || ($entry->getType() == 'Object' &&
+ !preg_match('/[=:]\s*(?:null|undefined)\s*[,;]?$/', $entry->entry))) {
+
+ // assign the real entry, replacing the temporary entry if it exist
+ $member = ($member ? $member . ($entry->isPlugin() ? '#' : '.') : '') . $name;
+ $entry->static = @$api[$member] ? $api[$member]->static : array();
+ $entry->plugin = @$api[$member] ? $api[$member]->plugin : array();
+
+ $api[$member] = $entry;
+ foreach ($entry->getAliases() as $alias) {
+ $api[$member]->static[] = $alias;
+ }
+ }
+ else if ($entry->isStatic()) {
+ $api[$member]->static[] = $entry;
+ foreach ($entry->getAliases() as $alias) {
+ $api[$member]->static[] = $alias;
+ }
+ }
+ else if (!$entry->isCtor()) {
+ $api[$member]->plugin[] = $entry;
+ foreach ($entry->getAliases() as $alias) {
+ $api[$member]->plugin[] = $alias;
+ }
+ }
+ }
+ }
+
+ // add properties to each entry
+ foreach ($api as $entry) {
+ $entry->hash = $this->getHash($entry);
+ $entry->href = $this->getLineUrl($entry);
+
+ $member = $entry->getMembers(0);
+ $member = ($member ? $member . ($entry->isPlugin() ? '.prototype.' : '.') : '') . $entry->getName();
+ $entry->member = preg_replace('/' . $entry->getName() . '$/', '', $member);
+
+ // add properties to static and plugin sub-entries
+ foreach (array('static', 'plugin') as $kind) {
+ foreach ($entry->{$kind} as $subentry) {
+ $subentry->hash = $this->getHash($subentry);
+ $subentry->href = $this->getLineUrl($subentry);
+ $subentry->member = $member;
+ $subentry->separator = $this->getSeparator($subentry);
+ }
+ }
+ }
+
+ /*------------------------------------------------------------------------*/
+
+ // custom sort for root level entries
+ // TODO: see how well it handles deeper namespace traversal
+ function sortCompare($a, $b) {
+ $score = array( 'a' => 0, 'b' => 0);
+ foreach (array( 'a' => $a, 'b' => $b) as $key => $value) {
+ // capitalized properties are last
+ if (preg_match('/[#.][A-Z]/', $value)) {
+ $score[$key] = 0;
+ }
+ // lowercase prototype properties are next to last
+ else if (preg_match('/#[a-z]/', $value)) {
+ $score[$key] = 1;
+ }
+ // lowercase static properties next to first
+ else if (preg_match('/\.[a-z]/', $value)) {
+ $score[$key] = 2;
+ }
+ // root properties are first
+ else if (preg_match('/^[^#.]+$/', $value)) {
+ $score[$key] = 3;
+ }
+ }
+ $score = $score['b'] - $score['a'];
+ return $score ? $score : strcasecmp($a, $b);
+ }
+
+ uksort($api, 'sortCompare');
+
+ // sort static and plugin sub-entries
+ foreach ($api as $entry) {
+ foreach (array('static', 'plugin') as $kind) {
+ $sortBy = array( 'a' => array(), 'b' => array(), 'c' => array() );
+ foreach ($entry->{$kind} as $subentry) {
+ $name = $subentry->getName();
+ // functions w/o ALL-CAPs names are last
+ $sortBy['a'][] = $subentry->getType() == 'Function' && !preg_match('/^[A-Z_]+$/', $name);
+ // ALL-CAPs properties first
+ $sortBy['b'][] = preg_match('/^[A-Z_]+$/', $name);
+ // lowercase alphanumeric sort
+ $sortBy['c'][] = strtolower($name);
+ }
+ array_multisort($sortBy['a'], SORT_ASC, $sortBy['b'], SORT_DESC, $sortBy['c'], SORT_ASC, $entry->{$kind});
+ }
+ }
+
+ /*------------------------------------------------------------------------*/
+
+ // add categories
+ foreach ($api as $entry) {
+ $categories[$entry->getCategory()][] = $entry;
+ foreach (array('static', 'plugin') as $kind) {
+ foreach ($entry->{$kind} as $subentry) {
+ $categories[$subentry->getCategory()][] = $subentry;
+ }
+ }
+ }
+
+ // sort categories
+ ksort($categories);
+
+ foreach(array('Methods', 'Properties') as $category) {
+ if (isset($categories[$category])) {
+ $entries = $categories[$category];
+ unset($categories[$category]);
+ $categories[$category] = $entries;
+ }
+ }
+
+ /*------------------------------------------------------------------------*/
+
+ // compile TOC
+ $result[] = $openTag;
+
+ // compile TOC by categories
+ if ($byCategory) {
+ foreach ($categories as $category => $entries) {
+ if ($compiling) {
+ $result[] = $closeTag;
+ } else {
+ $compiling = true;
+ }
+ // assign TOC hash
+ if (count($result) == 2) {
+ $toc = $category;
+ }
+ // add category
+ array_push(
+ $result,
+ $openTag, '## ' . (count($result) == 2 ? '<a id="' . $toc . '"></a>' : '') . '`' . $category . '`'
+ );
+ // add entries
+ foreach ($entries as $entry) {
+ $result[] = Generator::interpolate('* [`#{member}#{separator}#{name}`](##{hash})', $entry);
+ }
+ }
+ }
+ // compile TOC by namespace
+ else {
+ foreach ($api as $entry) {
+ if ($compiling) {
+ $result[] = $closeTag;
+ } else {
+ $compiling = true;
+ }
+ $member = $entry->member . $entry->getName();
+
+ // assign TOC hash
+ if (count($result) == 2) {
+ $toc = $member;
+ }
+ // add root entry
+ array_push(
+ $result,
+ $openTag, '## ' . (count($result) == 2 ? '<a id="' . $toc . '"></a>' : '') . '`' . $member . '`',
+ Generator::interpolate('* [`' . $member . '`](##{hash})', $entry)
+ );
+
+ // add static and plugin sub-entries
+ foreach (array('static', 'plugin') as $kind) {
+ if ($kind == 'plugin' && count($entry->plugin)) {
+ array_push(
+ $result,
+ $closeTag,
+ $openTag,
+ '## `' . $member . ($entry->isCtor() ? '.prototype`' : '`')
+ );
+ }
+ foreach ($entry->{$kind} as $subentry) {
+ $subentry->member = $member;
+ $result[] = Generator::interpolate('* [`#{member}#{separator}#{name}`](##{hash})', $subentry);
+ }
+ }
+ }
+ }
+
+ array_push($result, $closeTag, $closeTag);
+
+ /*------------------------------------------------------------------------*/
+
+ // compile content
+ $compiling = false;
+ $result[] = $openTag;
+
+ if ($byCategory) {
+ foreach ($categories as $category => $entries) {
+ if ($compiling) {
+ $result[] = $closeTag;
+ } else {
+ $compiling = true;
+ }
+ if ($category != 'Methods' && $category != 'Properties') {
+ $category = '“' . $category . '†Methods';
+ }
+ array_push($result, $openTag, '## `' . $category . '`');
+ $this->addEntries($result, $entries);
+ }
+ }
+ else {
+ foreach ($api as $entry) {
+ // skip aliases
+ if ($entry->isAlias()) {
+ continue;
+ }
+ if ($compiling) {
+ $result[] = $closeTag;
+ } else {
+ $compiling = true;
+ }
+ // add root entry name
+ $member = $entry->member . $entry->getName();
+ array_push($result, $openTag, '## `' . $member . '`');
+
+ foreach (array($entry, 'static', 'plugin') as $kind) {
+ $subentries = is_string($kind) ? $entry->{$kind} : array($kind);
+
+ // add sub-entry name
+ if ($kind != 'static' && $entry->getType() != 'Object' &&
+ count($subentries) && $subentries[0] != $kind) {
+ if ($kind == 'plugin') {
+ $result[] = $closeTag;
+ }
+ array_push(
+ $result,
+ $openTag,
+ '## `' . $member . ($kind == 'plugin' ? '.prototype`' : '`')
+ );
+ }
+ $this->addEntries($result, $subentries);
+ }
+ }
+ }
+
+ // close tags add TOC link reference
+ array_push($result, $closeTag, $closeTag, '', ' [1]: #' . $toc . ' "Jump back to the TOC."');
+
+ // cleanup whitespace
+ return trim(preg_replace('/[\t ]+\n/', "\n", join($result, "\n")));
+ }
+}
+?>
diff --git a/deps/npm/node_modules/request/node_modules/tough-cookie/package.json b/deps/npm/node_modules/request/node_modules/tough-cookie/package.json
new file mode 100644
index 000000000..e91645aa1
--- /dev/null
+++ b/deps/npm/node_modules/request/node_modules/tough-cookie/package.json
@@ -0,0 +1,46 @@
+{
+ "author": {
+ "name": "Jeremy Stashewsky",
+ "email": "jeremy@goinstant.com",
+ "url": "https://github.com/stash"
+ },
+ "name": "tough-cookie",
+ "description": "RFC6265 Cookies and Cookie Jar for node.js",
+ "keywords": [
+ "HTTP",
+ "cookie",
+ "cookies",
+ "set-cookie",
+ "cookiejar",
+ "jar",
+ "RFC6265",
+ "RFC2965"
+ ],
+ "version": "0.9.15",
+ "homepage": "https://github.com/goinstant/node-cookie",
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/goinstant/node-cookie.git"
+ },
+ "bugs": {
+ "url": "https://github.com/goinstant/node-cookie/issues"
+ },
+ "main": "./lib/cookie",
+ "scripts": {
+ "test": "vows test.js"
+ },
+ "engines": {
+ "node": ">=0.4.12"
+ },
+ "dependencies": {
+ "punycode": ">=0.2.0"
+ },
+ "devDependencies": {
+ "vows": ">=0.6.0",
+ "async": ">=0.1.12"
+ },
+ "readme": "[RFC6265](http://tools.ietf.org/html/rfc6265) Cookies and CookieJar for Node.js\n\n![Tough Cookie](http://www.goinstant.com.s3.amazonaws.com/tough-cookie.jpg)\n\n# Synopsis\n\n``` javascript\nvar cookies = require('tough-cookie'); // note: not 'cookie', 'cookies' or 'node-cookie'\nvar Cookie = cookies.Cookie;\nvar cookie = Cookie.parse(header);\ncookie.value = 'somethingdifferent';\nheader = cookie.toString();\n\nvar cookiejar = new cookies.CookieJar();\ncookiejar.setCookie(cookie, 'http://currentdomain.example.com/path', cb);\n// ...\ncookiejar.getCookies('http://example.com/otherpath',function(err,cookies) {\n res.headers['cookie'] = cookies.join('; ');\n});\n```\n\n# Installation\n\nIt's _so_ easy!\n\n`npm install tough-cookie`\n\nRequires `punycode`, which should get installed automatically for you. Note that node.js v0.6.2+ bundles punycode by default.\n\nWhy the name? NPM modules `cookie`, `cookies` and `cookiejar` were already taken.\n\n# API\n\ncookies\n=======\n\nFunctions on the module you get from `require('tough-cookie')`. All can be used as pure functions and don't need to be \"bound\".\n\nparseDate(string[,strict])\n-----------------\n\nParse a cookie date string into a `Date`. Parses according to RFC6265 Section 5.1.1, not `Date.parse()`. If strict is set to true then leading/trailing non-seperator characters around the time part will cause the parsing to fail (e.g. \"Thu, 01 Jan 1970 00:00:010 GMT\" has an extra trailing zero but Chrome, an assumedly RFC-compliant browser, treats this as valid).\n\nformatDate(date)\n----------------\n\nFormat a Date into a RFC1123 string (the RFC6265-recommended format).\n\ncanonicalDomain(str)\n--------------------\n\nTransforms a domain-name into a canonical domain-name. The canonical domain-name is a trimmed, lowercased, stripped-of-leading-dot and optionally punycode-encoded domain-name (Section 5.1.2 of RFC6265). For the most part, this function is idempotent (can be run again on its output without ill effects).\n\ndomainMatch(str,domStr[,canonicalize=true])\n-------------------------------------------\n\nAnswers \"does this real domain match the domain in a cookie?\". The `str` is the \"current\" domain-name and the `domStr` is the \"cookie\" domain-name. Matches according to RFC6265 Section 5.1.3, but it helps to think of it as a \"suffix match\".\n\nThe `canonicalize` parameter will run the other two paramters through `canonicalDomain` or not.\n\ndefaultPath(path)\n-----------------\n\nGiven a current request/response path, gives the Path apropriate for storing in a cookie. This is basically the \"directory\" of a \"file\" in the path, but is specified by Section 5.1.4 of the RFC.\n\nThe `path` parameter MUST be _only_ the pathname part of a URI (i.e. excludes the hostname, query, fragment, etc.). This is the `.pathname` property of node's `uri.parse()` output.\n\npathMatch(reqPath,cookiePath)\n-----------------------------\n\nAnswers \"does the request-path path-match a given cookie-path?\" as per RFC6265 Section 5.1.4. Returns a boolean.\n\nThis is essentially a prefix-match where `cookiePath` is a prefix of `reqPath`.\n\nparse(header[,strict=false])\n----------------------------\n\nalias for `Cookie.parse(header[,strict])`\n\nfromJSON(string)\n----------------\n\nalias for `Cookie.fromJSON(string)`\n\ngetPublicSuffix(hostname)\n-------------------------\n\nReturns the public suffix of this hostname. The public suffix is the shortest domain-name upon which a cookie can be set. Returns `null` if the hostname cannot have cookies set for it.\n\nFor example: `www.example.com` and `www.subdomain.example.com` both have public suffix `example.com`.\n\nFor further information, see http://publicsuffix.org/. This module derives its list from that site.\n\ncookieCompare(a,b)\n------------------\n\nFor use with `.sort()`, sorts a list of cookies into the recommended order given in the RFC (Section 5.4 step 2). Longest `.path`s go first, then sorted oldest to youngest.\n\n``` javascript\nvar cookies = [ /* unsorted array of Cookie objects */ ];\ncookies = cookies.sort(cookieCompare);\n```\n\npermuteDomain(domain)\n---------------------\n\nGenerates a list of all possible domains that `domainMatch()` the parameter. May be handy for implementing cookie stores.\n\n\npermutePath(path)\n-----------------\n\nGenerates a list of all possible paths that `pathMatch()` the parameter. May be handy for implementing cookie stores.\n\nCookie\n======\n\nCookie.parse(header[,strict=false])\n-----------------------------------\n\nParses a single Cookie or Set-Cookie HTTP header into a `Cookie` object. Returns `undefined` if the string can't be parsed. If in strict mode, returns `undefined` if the cookie doesn't follow the guidelines in section 4 of RFC6265. Generally speaking, strict mode can be used to validate your own generated Set-Cookie headers, but acting as a client you want to be lenient and leave strict mode off.\n\nHere's how to process the Set-Cookie header(s) on a node HTTP/HTTPS response:\n\n``` javascript\nif (res.headers['set-cookie'] instanceof Array)\n cookies = res.headers['set-cookie'].map(Cookie.parse);\nelse\n cookies = [Cookie.parse(res.headers['set-cookie'])];\n```\n\nCookie.fromJSON(string)\n-----------------------\n\nConvert a JSON string to a `Cookie` object. Does a `JSON.parse()` and converts the `.created`, `.lastAccessed` and `.expires` properties into `Date` objects.\n\nProperties\n==========\n\n * _key_ - string - the name or key of the cookie (default \"\")\n * _value_ - string - the value of the cookie (default \"\")\n * _expires_ - `Date` - if set, the `Expires=` attribute of the cookie (defaults to the string `\"Infinity\"`). See `setExpires()`\n * _maxAge_ - seconds - if set, the `Max-Age=` attribute _in seconds_ of the cookie. May also be set to strings `\"Infinity\"` and `\"-Infinity\"` for non-expiry and immediate-expiry, respectively. See `setMaxAge()`\n * _domain_ - string - the `Domain=` attribute of the cookie\n * _path_ - string - the `Path=` of the cookie\n * _secure_ - boolean - the `Secure` cookie flag\n * _httpOnly_ - boolean - the `HttpOnly` cookie flag\n * _extensions_ - `Array` - any unrecognized cookie attributes as strings (even if equal-signs inside)\n \nAfter a cookie has been passed through `CookieJar.setCookie()` it will have the following additional attributes:\n\n * _hostOnly_ - boolean - is this a host-only cookie (i.e. no Domain field was set, but was instead implied)\n * _pathIsDefault_ - boolean - if true, there was no Path field on the cookie and `defaultPath()` was used to derive one.\n * _created_ - `Date` - when this cookie was added to the jar\n * _lastAccessed_ - `Date` - last time the cookie got accessed. Will affect cookie cleaning once implemented. Using `cookiejar.getCookies(...)` will update this attribute.\n\nConstruction([{options}])\n------------\n\nReceives an options object that can contain any Cookie properties, uses the default for unspecified properties.\n\n.toString()\n-----------\n\nencode to a Set-Cookie header value. The Expires cookie field is set using `formatDate()`, but is omitted entirely if `.expires` is `Infinity`.\n\n.cookieString()\n---------------\n\nencode to a Cookie header value (i.e. the `.key` and `.value` properties joined with '=').\n\n.setExpires(String)\n-------------------\n\nsets the expiry based on a date-string passed through `parseDate()`. If parseDate returns `null` (i.e. can't parse this date string), `.expires` is set to `\"Infinity\"` (a string) is set.\n\n.setMaxAge(number)\n-------------------\n\nsets the maxAge in seconds. Coerces `-Infinity` to `\"-Infinity\"` and `Infinity` to `\"Infinity\"` so it JSON serializes correctly.\n\n.expiryTime([now=Date.now()])\n-----------------------------\n\n.expiryDate([now=Date.now()])\n-----------------------------\n\nexpiryTime() Computes the absolute unix-epoch milliseconds that this cookie expires. expiryDate() works similarly, except it returns a `Date` object. Note that in both cases the `now` parameter should be milliseconds.\n\nMax-Age takes precedence over Expires (as per the RFC). The `.created` attribute -- or, by default, the `now` paramter -- is used to offset the `.maxAge` attribute.\n\nIf Expires (`.expires`) is set, that's returned.\n\nOtherwise, `expiryTime()` returns `Infinity` and `expiryDate()` returns a `Date` object for \"Tue, 19 Jan 2038 03:14:07 GMT\" (latest date that can be expressed by a 32-bit `time_t`; the common limit for most user-agents).\n\n.TTL([now=Date.now()])\n---------\n\ncompute the TTL relative to `now` (milliseconds). The same precedence rules as for `expiryTime`/`expiryDate` apply.\n\nThe \"number\" `Infinity` is returned for cookies without an explicit expiry and `0` is returned if the cookie is expired. Otherwise a time-to-live in milliseconds is returned.\n\n.canonicalizedDoman()\n---------------------\n\n.cdomain()\n----------\n\nreturn the canonicalized `.domain` field. This is lower-cased and punycode (RFC3490) encoded if the domain has any non-ASCII characters.\n\n.validate()\n-----------\n\nStatus: *IN PROGRESS*. Works for a few things, but is by no means comprehensive.\n\nvalidates cookie attributes for semantic correctness. Useful for \"lint\" checking any Set-Cookie headers you generate. For now, it returns a boolean, but eventually could return a reason string -- you can future-proof with this construct:\n\n``` javascript\nif (cookie.validate() === true) {\n // it's tasty\n} else {\n // yuck!\n}\n```\n\nCookieJar\n=========\n\nConstruction([store = new MemoryCookieStore()][, rejectPublicSuffixes])\n------------\n\nSimply use `new CookieJar()`. If you'd like to use a custom store, pass that to the constructor otherwise a `MemoryCookieStore` will be created and used.\n\n\nAttributes\n----------\n\n * _rejectPublicSuffixes_ - boolean - reject cookies with domains like \"com\" and \"co.uk\" (default: `true`)\n \nSince eventually this module would like to support database/remote/etc. CookieJars, continuation passing style is used for CookieJar methods.\n\n.setCookie(cookieOrString, currentUrl, [{options},] cb(err,cookie))\n-------------------------------------------------------------------\n\nAttempt to set the cookie in the cookie jar. If the operation fails, an error will be given to the callback `cb`, otherwise the cookie is passed through. The cookie will have updated `.created`, `.lastAccessed` and `.hostOnly` properties.\n\nThe `options` object can be omitted and can have the following properties:\n\n * _http_ - boolean - default `true` - indicates if this is an HTTP or non-HTTP API. Affects HttpOnly cookies.\n * _secure_ - boolean - autodetect from url - indicates if this is a \"Secure\" API. If the currentUrl starts with `https:` or `wss:` then this is defaulted to `true`, otherwise `false`.\n * _now_ - Date - default `new Date()` - what to use for the creation/access time of cookies\n * _strict_ - boolean - default `false` - perform extra checks\n * _ignoreError_ - boolean - default `false` - silently ignore things like parse errors and invalid domains. CookieStore errors aren't ignored by this option.\n\nAs per the RFC, the `.hostOnly` property is set if there was no \"Domain=\" parameter in the cookie string (or `.domain` was null on the Cookie object). The `.domain` property is set to the fully-qualified hostname of `currentUrl` in this case. Matching this cookie requires an exact hostname match (not a `domainMatch` as per usual).\n\n.storeCookie(cookie, [{options},] cb(err,cookie))\n-------------------------------------------------\n\n__REMOVED__ removed in lieu of the CookieStore API below\n \n.getCookies(currentUrl, [{options},] cb(err,cookies))\n-----------------------------------------------------\n\nRetrieve the list of cookies that can be sent in a Cookie header for the current url.\n\nIf an error is encountered, that's passed as `err` to the callback, otherwise an `Array` of `Cookie` objects is passed. The array is sorted with `cookieCompare()` unless the `{sort:false}` option is given.\n\nThe `options` object can be omitted and can have the following properties:\n\n * _http_ - boolean - default `true` - indicates if this is an HTTP or non-HTTP API. Affects HttpOnly cookies.\n * _secure_ - boolean - autodetect from url - indicates if this is a \"Secure\" API. If the currentUrl starts with `https:` or `wss:` then this is defaulted to `true`, otherwise `false`.\n * _now_ - Date - default `new Date()` - what to use for the creation/access time of cookies\n * _expire_ - boolean - default `true` - perform expiry-time checking of cookies and asynchronously remove expired cookies from the store. Using `false` will return expired cookies and **not** remove them from the store (which is useful for replaying Set-Cookie headers, potentially).\n * _allPaths_ - boolean - default `false` - if `true`, do not scope cookies by path. The default uses RFC-compliant path scoping. **Note**: may not be supported by the CookieStore `fetchCookies` function (the default MemoryCookieStore supports it).\n\nThe `.lastAccessed` property of the returned cookies will have been updated.\n\n.getCookieString(...)\n---------------------\n\nAccepts the same options as `.getCookies()` but passes a string suitable for a Cookie header rather than an array to the callback. Simply maps the `Cookie` array via `.cookieString()`.\n\n.getSetCookieStrings(...)\n-------------------------\n\nAccepts the same options as `.getCookies()` but passes an array of strings suitable for Set-Cookie headers (rather than an array of `Cookie`s) to the callback. Simply maps the cookie array via `.toString()`.\n\n# CookieStore API\n\nThe storage model for each `CookieJar` instance can be replaced with a custom implementation. The default is `MemoryCookieStore` which can be found in the `lib/memstore.js` file. The API uses continuation-passing-style to allow for asynchronous stores.\n\nAll `domain` parameters will have been normalized before calling.\n\nThe Cookie store must have all of the following methods.\n\nstore.findCookie(domain, path, key, cb(err,cookie))\n---------------------------------------------------\n\nRetrieve a cookie with the given domain, path and key (a.k.a. name). The RFC maintains that exactly one of these cookies should exist in a store. If the store is using versioning, this means that the latest/newest such cookie should be returned.\n\nCallback takes an error and the resulting `Cookie` object. If no cookie is found then `null` MUST be passed instead (i.e. not an error).\n\nstore.findCookies(domain, path, cb(err,cookies))\n------------------------------------------------\n\nLocates cookies matching the given domain and path. This is most often called in the context of `cookiejar.getCookies()` above.\n\nIf no cookies are found, the callback MUST be passed an empty array.\n\nThe resulting list will be checked for applicability to the current request according to the RFC (domain-match, path-match, http-only-flag, secure-flag, expiry, etc.), so it's OK to use an optimistic search algorithm when implementing this method. However, the search algorithm used SHOULD try to find cookies that `domainMatch()` the domain and `pathMatch()` the path in order to limit the amount of checking that needs to be done.\n\nAs of version 0.9.12, the `allPaths` option to `cookiejar.getCookies()` above will cause the path here to be `null`. If the path is `null`, path-matching MUST NOT be performed (i.e. domain-matching only).\n\nstore.putCookie(cookie, cb(err))\n--------------------------------\n\nAdds a new cookie to the store. The implementation SHOULD replace any existing cookie with the same `.domain`, `.path`, and `.key` properties -- depending on the nature of the implementation, it's possible that between the call to `fetchCookie` and `putCookie` that a duplicate `putCookie` can occur.\n\nThe `cookie` object MUST NOT be modified; the caller will have already updated the `.creation` and `.lastAccessed` properties.\n\nPass an error if the cookie cannot be stored.\n\nstore.updateCookie(oldCookie, newCookie, cb(err))\n-------------------------------------------------\n\nUpdate an existing cookie. The implementation MUST update the `.value` for a cookie with the same `domain`, `.path` and `.key`. The implementation SHOULD check that the old value in the store is equivalent to `oldCookie` - how the conflict is resolved is up to the store.\n\nThe `.lastAccessed` property will always be different between the two objects and `.created` will always be the same. Stores MAY ignore or defer the `.lastAccessed` change at the cost of affecting how cookies are sorted (or selected for deletion).\n\nStores may wish to optimize changing the `.value` of the cookie in the store versus storing a new cookie. If the implementation doesn't define this method a stub that calls `putCookie(newCookie,cb)` will be added to the store object.\n\nThe `newCookie` and `oldCookie` objects MUST NOT be modified.\n\nPass an error if the newCookie cannot be stored.\n\nstore.removeCookie(domain, path, key, cb(err))\n----------------------------------------------\n\nRemove a cookie from the store (see notes on `findCookie` about the uniqueness constraint).\n\nThe implementation MUST NOT pass an error if the cookie doesn't exist; only pass an error due to the failure to remove an existing cookie.\n\nstore.removeCookies(domain, path, cb(err))\n------------------------------------------\n\nRemoves matching cookies from the store. The `path` paramter is optional, and if missing means all paths in a domain should be removed.\n\nPass an error ONLY if removing any existing cookies failed.\n\n# TODO\n\n * _full_ RFC5890/RFC5891 canonicalization for domains in `cdomain()`\n * the optional `punycode` requirement implements RFC3492, but RFC6265 requires RFC5891\n * better tests for `validate()`?\n\n# Copyright and License\n\n(tl;dr: MIT with some MPL/1.1)\n\nCopyright GoInstant, Inc. and other contributors. All rights reserved.\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to\ndeal in the Software without restriction, including without limitation the\nrights to use, copy, modify, merge, publish, distribute, sublicense, and/or\nsell copies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\nFROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\nIN THE SOFTWARE.\n\nPortions may be licensed under different licenses (in particular public-suffix.txt is MPL/1.1); please read the LICENSE file for full details.\n",
+ "readmeFilename": "README.md",
+ "_id": "tough-cookie@0.9.15",
+ "_from": "tough-cookie@~0.9.15"
+}
diff --git a/deps/npm/node_modules/request/node_modules/tough-cookie/public-suffix.txt b/deps/npm/node_modules/request/node_modules/tough-cookie/public-suffix.txt
new file mode 100644
index 000000000..2c2013127
--- /dev/null
+++ b/deps/npm/node_modules/request/node_modules/tough-cookie/public-suffix.txt
@@ -0,0 +1,5229 @@
+// ***** BEGIN LICENSE BLOCK *****
+// Version: MPL 1.1/GPL 2.0/LGPL 2.1
+//
+// The contents of this file are subject to the Mozilla Public License Version
+// 1.1 (the "License"); you may not use this file except in compliance with
+// the License. You may obtain a copy of the License at
+// http://www.mozilla.org/MPL/
+//
+// Software distributed under the License is distributed on an "AS IS" basis,
+// WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+// for the specific language governing rights and limitations under the
+// License.
+//
+// The Original Code is the Public Suffix List.
+//
+// The Initial Developer of the Original Code is
+// Jo Hermans <jo.hermans@gmail.com>.
+// Portions created by the Initial Developer are Copyright (C) 2007
+// the Initial Developer. All Rights Reserved.
+//
+// Contributor(s):
+// Ruben Arakelyan <ruben@rubenarakelyan.com>
+// Gervase Markham <gerv@gerv.net>
+// Pamela Greene <pamg.bugs@gmail.com>
+// David Triendl <david@triendl.name>
+// Jothan Frakes <jothan@gmail.com>
+// The kind representatives of many TLD registries
+//
+// Alternatively, the contents of this file may be used under the terms of
+// either the GNU General Public License Version 2 or later (the "GPL"), or
+// the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+// in which case the provisions of the GPL or the LGPL are applicable instead
+// of those above. If you wish to allow use of your version of this file only
+// under the terms of either the GPL or the LGPL, and not to allow others to
+// use your version of this file under the terms of the MPL, indicate your
+// decision by deleting the provisions above and replace them with the notice
+// and other provisions required by the GPL or the LGPL. If you do not delete
+// the provisions above, a recipient may use your version of this file under
+// the terms of any one of the MPL, the GPL or the LGPL.
+//
+// ***** END LICENSE BLOCK *****
+
+// ===BEGIN ICANN DOMAINS===
+
+// ac : http://en.wikipedia.org/wiki/.ac
+ac
+com.ac
+edu.ac
+gov.ac
+net.ac
+mil.ac
+org.ac
+
+// ad : http://en.wikipedia.org/wiki/.ad
+ad
+nom.ad
+
+// ae : http://en.wikipedia.org/wiki/.ae
+// see also: "Domain Name Eligibility Policy" at http://www.aeda.ae/eng/aepolicy.php
+ae
+co.ae
+net.ae
+org.ae
+sch.ae
+ac.ae
+gov.ae
+mil.ae
+
+// aero : see http://www.information.aero/index.php?id=66
+aero
+accident-investigation.aero
+accident-prevention.aero
+aerobatic.aero
+aeroclub.aero
+aerodrome.aero
+agents.aero
+aircraft.aero
+airline.aero
+airport.aero
+air-surveillance.aero
+airtraffic.aero
+air-traffic-control.aero
+ambulance.aero
+amusement.aero
+association.aero
+author.aero
+ballooning.aero
+broker.aero
+caa.aero
+cargo.aero
+catering.aero
+certification.aero
+championship.aero
+charter.aero
+civilaviation.aero
+club.aero
+conference.aero
+consultant.aero
+consulting.aero
+control.aero
+council.aero
+crew.aero
+design.aero
+dgca.aero
+educator.aero
+emergency.aero
+engine.aero
+engineer.aero
+entertainment.aero
+equipment.aero
+exchange.aero
+express.aero
+federation.aero
+flight.aero
+freight.aero
+fuel.aero
+gliding.aero
+government.aero
+groundhandling.aero
+group.aero
+hanggliding.aero
+homebuilt.aero
+insurance.aero
+journal.aero
+journalist.aero
+leasing.aero
+logistics.aero
+magazine.aero
+maintenance.aero
+marketplace.aero
+media.aero
+microlight.aero
+modelling.aero
+navigation.aero
+parachuting.aero
+paragliding.aero
+passenger-association.aero
+pilot.aero
+press.aero
+production.aero
+recreation.aero
+repbody.aero
+res.aero
+research.aero
+rotorcraft.aero
+safety.aero
+scientist.aero
+services.aero
+show.aero
+skydiving.aero
+software.aero
+student.aero
+taxi.aero
+trader.aero
+trading.aero
+trainer.aero
+union.aero
+workinggroup.aero
+works.aero
+
+// af : http://www.nic.af/help.jsp
+af
+gov.af
+com.af
+org.af
+net.af
+edu.af
+
+// ag : http://www.nic.ag/prices.htm
+ag
+com.ag
+org.ag
+net.ag
+co.ag
+nom.ag
+
+// ai : http://nic.com.ai/
+ai
+off.ai
+com.ai
+net.ai
+org.ai
+
+// al : http://www.ert.gov.al/ert_alb/faq_det.html?Id=31
+al
+com.al
+edu.al
+gov.al
+mil.al
+net.al
+org.al
+
+// am : http://en.wikipedia.org/wiki/.am
+am
+
+// an : http://www.una.an/an_domreg/default.asp
+an
+com.an
+net.an
+org.an
+edu.an
+
+// ao : http://en.wikipedia.org/wiki/.ao
+// http://www.dns.ao/REGISTR.DOC
+ao
+ed.ao
+gv.ao
+og.ao
+co.ao
+pb.ao
+it.ao
+
+// aq : http://en.wikipedia.org/wiki/.aq
+aq
+
+// ar : http://en.wikipedia.org/wiki/.ar
+*.ar
+!congresodelalengua3.ar
+!educ.ar
+!gobiernoelectronico.ar
+!mecon.ar
+!nacion.ar
+!nic.ar
+!promocion.ar
+!retina.ar
+!uba.ar
+
+// arpa : http://en.wikipedia.org/wiki/.arpa
+// Confirmed by registry <iana-questions@icann.org> 2008-06-18
+e164.arpa
+in-addr.arpa
+ip6.arpa
+iris.arpa
+uri.arpa
+urn.arpa
+
+// as : http://en.wikipedia.org/wiki/.as
+as
+gov.as
+
+// asia : http://en.wikipedia.org/wiki/.asia
+asia
+
+// at : http://en.wikipedia.org/wiki/.at
+// Confirmed by registry <it@nic.at> 2008-06-17
+at
+ac.at
+co.at
+gv.at
+or.at
+
+// au : http://en.wikipedia.org/wiki/.au
+// http://www.auda.org.au/
+// 2LDs
+com.au
+net.au
+org.au
+edu.au
+gov.au
+csiro.au
+asn.au
+id.au
+// Historic 2LDs (closed to new registration, but sites still exist)
+info.au
+conf.au
+oz.au
+// CGDNs - http://www.cgdn.org.au/
+act.au
+nsw.au
+nt.au
+qld.au
+sa.au
+tas.au
+vic.au
+wa.au
+// 3LDs
+act.edu.au
+nsw.edu.au
+nt.edu.au
+qld.edu.au
+sa.edu.au
+tas.edu.au
+vic.edu.au
+wa.edu.au
+act.gov.au
+// Removed at request of Shae.Donelan@services.nsw.gov.au, 2010-03-04
+// nsw.gov.au
+nt.gov.au
+qld.gov.au
+sa.gov.au
+tas.gov.au
+vic.gov.au
+wa.gov.au
+
+// aw : http://en.wikipedia.org/wiki/.aw
+aw
+com.aw
+
+// ax : http://en.wikipedia.org/wiki/.ax
+ax
+
+// az : http://en.wikipedia.org/wiki/.az
+az
+com.az
+net.az
+int.az
+gov.az
+org.az
+edu.az
+info.az
+pp.az
+mil.az
+name.az
+pro.az
+biz.az
+
+// ba : http://en.wikipedia.org/wiki/.ba
+ba
+org.ba
+net.ba
+edu.ba
+gov.ba
+mil.ba
+unsa.ba
+unbi.ba
+co.ba
+com.ba
+rs.ba
+
+// bb : http://en.wikipedia.org/wiki/.bb
+bb
+biz.bb
+com.bb
+edu.bb
+gov.bb
+info.bb
+net.bb
+org.bb
+store.bb
+
+// bd : http://en.wikipedia.org/wiki/.bd
+*.bd
+
+// be : http://en.wikipedia.org/wiki/.be
+// Confirmed by registry <tech@dns.be> 2008-06-08
+be
+ac.be
+
+// bf : http://en.wikipedia.org/wiki/.bf
+bf
+gov.bf
+
+// bg : http://en.wikipedia.org/wiki/.bg
+// https://www.register.bg/user/static/rules/en/index.html
+bg
+a.bg
+b.bg
+c.bg
+d.bg
+e.bg
+f.bg
+g.bg
+h.bg
+i.bg
+j.bg
+k.bg
+l.bg
+m.bg
+n.bg
+o.bg
+p.bg
+q.bg
+r.bg
+s.bg
+t.bg
+u.bg
+v.bg
+w.bg
+x.bg
+y.bg
+z.bg
+0.bg
+1.bg
+2.bg
+3.bg
+4.bg
+5.bg
+6.bg
+7.bg
+8.bg
+9.bg
+
+// bh : http://en.wikipedia.org/wiki/.bh
+bh
+com.bh
+edu.bh
+net.bh
+org.bh
+gov.bh
+
+// bi : http://en.wikipedia.org/wiki/.bi
+// http://whois.nic.bi/
+bi
+co.bi
+com.bi
+edu.bi
+or.bi
+org.bi
+
+// biz : http://en.wikipedia.org/wiki/.biz
+biz
+
+// bj : http://en.wikipedia.org/wiki/.bj
+bj
+asso.bj
+barreau.bj
+gouv.bj
+
+// bm : http://www.bermudanic.bm/dnr-text.txt
+bm
+com.bm
+edu.bm
+gov.bm
+net.bm
+org.bm
+
+// bn : http://en.wikipedia.org/wiki/.bn
+*.bn
+
+// bo : http://www.nic.bo/
+bo
+com.bo
+edu.bo
+gov.bo
+gob.bo
+int.bo
+org.bo
+net.bo
+mil.bo
+tv.bo
+
+// br : http://registro.br/dominio/dpn.html
+// Updated by registry <fneves@registro.br> 2011-03-01
+br
+adm.br
+adv.br
+agr.br
+am.br
+arq.br
+art.br
+ato.br
+b.br
+bio.br
+blog.br
+bmd.br
+can.br
+cim.br
+cng.br
+cnt.br
+com.br
+coop.br
+ecn.br
+edu.br
+emp.br
+eng.br
+esp.br
+etc.br
+eti.br
+far.br
+flog.br
+fm.br
+fnd.br
+fot.br
+fst.br
+g12.br
+ggf.br
+gov.br
+imb.br
+ind.br
+inf.br
+jor.br
+jus.br
+lel.br
+mat.br
+med.br
+mil.br
+mus.br
+net.br
+nom.br
+not.br
+ntr.br
+odo.br
+org.br
+ppg.br
+pro.br
+psc.br
+psi.br
+qsl.br
+radio.br
+rec.br
+slg.br
+srv.br
+taxi.br
+teo.br
+tmp.br
+trd.br
+tur.br
+tv.br
+vet.br
+vlog.br
+wiki.br
+zlg.br
+
+// bs : http://www.nic.bs/rules.html
+bs
+com.bs
+net.bs
+org.bs
+edu.bs
+gov.bs
+
+// bt : http://en.wikipedia.org/wiki/.bt
+bt
+com.bt
+edu.bt
+gov.bt
+net.bt
+org.bt
+
+// bv : No registrations at this time.
+// Submitted by registry <jarle@uninett.no> 2006-06-16
+
+// bw : http://en.wikipedia.org/wiki/.bw
+// http://www.gobin.info/domainname/bw.doc
+// list of other 2nd level tlds ?
+bw
+co.bw
+org.bw
+
+// by : http://en.wikipedia.org/wiki/.by
+// http://tld.by/rules_2006_en.html
+// list of other 2nd level tlds ?
+by
+gov.by
+mil.by
+// Official information does not indicate that com.by is a reserved
+// second-level domain, but it's being used as one (see www.google.com.by and
+// www.yahoo.com.by, for example), so we list it here for safety's sake.
+com.by
+
+// http://hoster.by/
+of.by
+
+// bz : http://en.wikipedia.org/wiki/.bz
+// http://www.belizenic.bz/
+bz
+com.bz
+net.bz
+org.bz
+edu.bz
+gov.bz
+
+// ca : http://en.wikipedia.org/wiki/.ca
+ca
+// ca geographical names
+ab.ca
+bc.ca
+mb.ca
+nb.ca
+nf.ca
+nl.ca
+ns.ca
+nt.ca
+nu.ca
+on.ca
+pe.ca
+qc.ca
+sk.ca
+yk.ca
+// gc.ca: http://en.wikipedia.org/wiki/.gc.ca
+// see also: http://registry.gc.ca/en/SubdomainFAQ
+gc.ca
+
+// cat : http://en.wikipedia.org/wiki/.cat
+cat
+
+// cc : http://en.wikipedia.org/wiki/.cc
+cc
+
+// cd : http://en.wikipedia.org/wiki/.cd
+// see also: https://www.nic.cd/domain/insertDomain_2.jsp?act=1
+cd
+gov.cd
+
+// cf : http://en.wikipedia.org/wiki/.cf
+cf
+
+// cg : http://en.wikipedia.org/wiki/.cg
+cg
+
+// ch : http://en.wikipedia.org/wiki/.ch
+ch
+
+// ci : http://en.wikipedia.org/wiki/.ci
+// http://www.nic.ci/index.php?page=charte
+ci
+org.ci
+or.ci
+com.ci
+co.ci
+edu.ci
+ed.ci
+ac.ci
+net.ci
+go.ci
+asso.ci
+aéroport.ci
+int.ci
+presse.ci
+md.ci
+gouv.ci
+
+// ck : http://en.wikipedia.org/wiki/.ck
+*.ck
+!www.ck
+
+// cl : http://en.wikipedia.org/wiki/.cl
+cl
+gov.cl
+gob.cl
+co.cl
+mil.cl
+
+// cm : http://en.wikipedia.org/wiki/.cm
+cm
+gov.cm
+
+// cn : http://en.wikipedia.org/wiki/.cn
+// Submitted by registry <tanyaling@cnnic.cn> 2008-06-11
+cn
+ac.cn
+com.cn
+edu.cn
+gov.cn
+net.cn
+org.cn
+mil.cn
+å…¬å¸.cn
+网络.cn
+網絡.cn
+// cn geographic names
+ah.cn
+bj.cn
+cq.cn
+fj.cn
+gd.cn
+gs.cn
+gz.cn
+gx.cn
+ha.cn
+hb.cn
+he.cn
+hi.cn
+hl.cn
+hn.cn
+jl.cn
+js.cn
+jx.cn
+ln.cn
+nm.cn
+nx.cn
+qh.cn
+sc.cn
+sd.cn
+sh.cn
+sn.cn
+sx.cn
+tj.cn
+xj.cn
+xz.cn
+yn.cn
+zj.cn
+hk.cn
+mo.cn
+tw.cn
+
+// co : http://en.wikipedia.org/wiki/.co
+// Submitted by registry <tecnico@uniandes.edu.co> 2008-06-11
+co
+arts.co
+com.co
+edu.co
+firm.co
+gov.co
+info.co
+int.co
+mil.co
+net.co
+nom.co
+org.co
+rec.co
+web.co
+
+// com : http://en.wikipedia.org/wiki/.com
+com
+
+// coop : http://en.wikipedia.org/wiki/.coop
+coop
+
+// cr : http://www.nic.cr/niccr_publico/showRegistroDominiosScreen.do
+cr
+ac.cr
+co.cr
+ed.cr
+fi.cr
+go.cr
+or.cr
+sa.cr
+
+// cu : http://en.wikipedia.org/wiki/.cu
+cu
+com.cu
+edu.cu
+org.cu
+net.cu
+gov.cu
+inf.cu
+
+// cv : http://en.wikipedia.org/wiki/.cv
+cv
+
+// cx : http://en.wikipedia.org/wiki/.cx
+// list of other 2nd level tlds ?
+cx
+gov.cx
+
+// cy : http://en.wikipedia.org/wiki/.cy
+*.cy
+
+// cz : http://en.wikipedia.org/wiki/.cz
+cz
+
+// de : http://en.wikipedia.org/wiki/.de
+// Confirmed by registry <ops@denic.de> (with technical
+// reservations) 2008-07-01
+de
+
+// dj : http://en.wikipedia.org/wiki/.dj
+dj
+
+// dk : http://en.wikipedia.org/wiki/.dk
+// Confirmed by registry <robert@dk-hostmaster.dk> 2008-06-17
+dk
+
+// dm : http://en.wikipedia.org/wiki/.dm
+dm
+com.dm
+net.dm
+org.dm
+edu.dm
+gov.dm
+
+// do : http://en.wikipedia.org/wiki/.do
+do
+art.do
+com.do
+edu.do
+gob.do
+gov.do
+mil.do
+net.do
+org.do
+sld.do
+web.do
+
+// dz : http://en.wikipedia.org/wiki/.dz
+dz
+com.dz
+org.dz
+net.dz
+gov.dz
+edu.dz
+asso.dz
+pol.dz
+art.dz
+
+// ec : http://www.nic.ec/reg/paso1.asp
+// Submitted by registry <vabboud@nic.ec> 2008-07-04
+ec
+com.ec
+info.ec
+net.ec
+fin.ec
+k12.ec
+med.ec
+pro.ec
+org.ec
+edu.ec
+gov.ec
+gob.ec
+mil.ec
+
+// edu : http://en.wikipedia.org/wiki/.edu
+edu
+
+// ee : http://www.eenet.ee/EENet/dom_reeglid.html#lisa_B
+ee
+edu.ee
+gov.ee
+riik.ee
+lib.ee
+med.ee
+com.ee
+pri.ee
+aip.ee
+org.ee
+fie.ee
+
+// eg : http://en.wikipedia.org/wiki/.eg
+eg
+com.eg
+edu.eg
+eun.eg
+gov.eg
+mil.eg
+name.eg
+net.eg
+org.eg
+sci.eg
+
+// er : http://en.wikipedia.org/wiki/.er
+*.er
+
+// es : https://www.nic.es/site_ingles/ingles/dominios/index.html
+es
+com.es
+nom.es
+org.es
+gob.es
+edu.es
+
+// et : http://en.wikipedia.org/wiki/.et
+*.et
+
+// eu : http://en.wikipedia.org/wiki/.eu
+eu
+
+// fi : http://en.wikipedia.org/wiki/.fi
+fi
+// aland.fi : http://en.wikipedia.org/wiki/.ax
+// This domain is being phased out in favor of .ax. As there are still many
+// domains under aland.fi, we still keep it on the list until aland.fi is
+// completely removed.
+// TODO: Check for updates (expected to be phased out around Q1/2009)
+aland.fi
+
+// fj : http://en.wikipedia.org/wiki/.fj
+*.fj
+
+// fk : http://en.wikipedia.org/wiki/.fk
+*.fk
+
+// fm : http://en.wikipedia.org/wiki/.fm
+fm
+
+// fo : http://en.wikipedia.org/wiki/.fo
+fo
+
+// fr : http://www.afnic.fr/
+// domaines descriptifs : http://www.afnic.fr/obtenir/chartes/nommage-fr/annexe-descriptifs
+fr
+com.fr
+asso.fr
+nom.fr
+prd.fr
+presse.fr
+tm.fr
+// domaines sectoriels : http://www.afnic.fr/obtenir/chartes/nommage-fr/annexe-sectoriels
+aeroport.fr
+assedic.fr
+avocat.fr
+avoues.fr
+cci.fr
+chambagri.fr
+chirurgiens-dentistes.fr
+experts-comptables.fr
+geometre-expert.fr
+gouv.fr
+greta.fr
+huissier-justice.fr
+medecin.fr
+notaires.fr
+pharmacien.fr
+port.fr
+veterinaire.fr
+
+// ga : http://en.wikipedia.org/wiki/.ga
+ga
+
+// gb : This registry is effectively dormant
+// Submitted by registry <Damien.Shaw@ja.net> 2008-06-12
+
+// gd : http://en.wikipedia.org/wiki/.gd
+gd
+
+// ge : http://www.nic.net.ge/policy_en.pdf
+ge
+com.ge
+edu.ge
+gov.ge
+org.ge
+mil.ge
+net.ge
+pvt.ge
+
+// gf : http://en.wikipedia.org/wiki/.gf
+gf
+
+// gg : http://www.channelisles.net/applic/avextn.shtml
+gg
+co.gg
+org.gg
+net.gg
+sch.gg
+gov.gg
+
+// gh : http://en.wikipedia.org/wiki/.gh
+// see also: http://www.nic.gh/reg_now.php
+// Although domains directly at second level are not possible at the moment,
+// they have been possible for some time and may come back.
+gh
+com.gh
+edu.gh
+gov.gh
+org.gh
+mil.gh
+
+// gi : http://www.nic.gi/rules.html
+gi
+com.gi
+ltd.gi
+gov.gi
+mod.gi
+edu.gi
+org.gi
+
+// gl : http://en.wikipedia.org/wiki/.gl
+// http://nic.gl
+gl
+
+// gm : http://www.nic.gm/htmlpages%5Cgm-policy.htm
+gm
+
+// gn : http://psg.com/dns/gn/gn.txt
+// Submitted by registry <randy@psg.com> 2008-06-17
+ac.gn
+com.gn
+edu.gn
+gov.gn
+org.gn
+net.gn
+
+// gov : http://en.wikipedia.org/wiki/.gov
+gov
+
+// gp : http://www.nic.gp/index.php?lang=en
+gp
+com.gp
+net.gp
+mobi.gp
+edu.gp
+org.gp
+asso.gp
+
+// gq : http://en.wikipedia.org/wiki/.gq
+gq
+
+// gr : https://grweb.ics.forth.gr/english/1617-B-2005.html
+// Submitted by registry <segred@ics.forth.gr> 2008-06-09
+gr
+com.gr
+edu.gr
+net.gr
+org.gr
+gov.gr
+
+// gs : http://en.wikipedia.org/wiki/.gs
+gs
+
+// gt : http://www.gt/politicas.html
+*.gt
+!www.gt
+
+// gu : http://gadao.gov.gu/registration.txt
+*.gu
+
+// gw : http://en.wikipedia.org/wiki/.gw
+gw
+
+// gy : http://en.wikipedia.org/wiki/.gy
+// http://registry.gy/
+gy
+co.gy
+com.gy
+net.gy
+
+// hk : https://www.hkdnr.hk
+// Submitted by registry <hk.tech@hkirc.hk> 2008-06-11
+hk
+com.hk
+edu.hk
+gov.hk
+idv.hk
+net.hk
+org.hk
+å…¬å¸.hk
+教育.hk
+敎育.hk
+政府.hk
+個人.hk
+个人.hk
+箇人.hk
+網络.hk
+网络.hk
+组織.hk
+網絡.hk
+网絡.hk
+组织.hk
+組織.hk
+組织.hk
+
+// hm : http://en.wikipedia.org/wiki/.hm
+hm
+
+// hn : http://www.nic.hn/politicas/ps02,,05.html
+hn
+com.hn
+edu.hn
+org.hn
+net.hn
+mil.hn
+gob.hn
+
+// hr : http://www.dns.hr/documents/pdf/HRTLD-regulations.pdf
+hr
+iz.hr
+from.hr
+name.hr
+com.hr
+
+// ht : http://www.nic.ht/info/charte.cfm
+ht
+com.ht
+shop.ht
+firm.ht
+info.ht
+adult.ht
+net.ht
+pro.ht
+org.ht
+med.ht
+art.ht
+coop.ht
+pol.ht
+asso.ht
+edu.ht
+rel.ht
+gouv.ht
+perso.ht
+
+// hu : http://www.domain.hu/domain/English/sld.html
+// Confirmed by registry <pasztor@iszt.hu> 2008-06-12
+hu
+co.hu
+info.hu
+org.hu
+priv.hu
+sport.hu
+tm.hu
+2000.hu
+agrar.hu
+bolt.hu
+casino.hu
+city.hu
+erotica.hu
+erotika.hu
+film.hu
+forum.hu
+games.hu
+hotel.hu
+ingatlan.hu
+jogasz.hu
+konyvelo.hu
+lakas.hu
+media.hu
+news.hu
+reklam.hu
+sex.hu
+shop.hu
+suli.hu
+szex.hu
+tozsde.hu
+utazas.hu
+video.hu
+
+// id : http://en.wikipedia.org/wiki/.id
+// see also: https://register.pandi.or.id/
+id
+ac.id
+co.id
+go.id
+mil.id
+net.id
+or.id
+sch.id
+web.id
+
+// ie : http://en.wikipedia.org/wiki/.ie
+ie
+gov.ie
+
+// il : http://en.wikipedia.org/wiki/.il
+*.il
+
+// im : https://www.nic.im/pdfs/imfaqs.pdf
+im
+co.im
+ltd.co.im
+plc.co.im
+net.im
+gov.im
+org.im
+nic.im
+ac.im
+
+// in : http://en.wikipedia.org/wiki/.in
+// see also: http://www.inregistry.in/policies/
+// Please note, that nic.in is not an offical eTLD, but used by most
+// government institutions.
+in
+co.in
+firm.in
+net.in
+org.in
+gen.in
+ind.in
+nic.in
+ac.in
+edu.in
+res.in
+gov.in
+mil.in
+
+// info : http://en.wikipedia.org/wiki/.info
+info
+
+// int : http://en.wikipedia.org/wiki/.int
+// Confirmed by registry <iana-questions@icann.org> 2008-06-18
+int
+eu.int
+
+// io : http://www.nic.io/rules.html
+// list of other 2nd level tlds ?
+io
+com.io
+
+// iq : http://www.cmc.iq/english/iq/iqregister1.htm
+iq
+gov.iq
+edu.iq
+mil.iq
+com.iq
+org.iq
+net.iq
+
+// ir : http://www.nic.ir/Terms_and_Conditions_ir,_Appendix_1_Domain_Rules
+// Also see http://www.nic.ir/Internationalized_Domain_Names
+// Two <iran>.ir entries added at request of <tech-team@nic.ir>, 2010-04-16
+ir
+ac.ir
+co.ir
+gov.ir
+id.ir
+net.ir
+org.ir
+sch.ir
+// xn--mgba3a4f16a.ir (<iran>.ir, Persian YEH)
+ایران.ir
+// xn--mgba3a4fra.ir (<iran>.ir, Arabic YEH)
+ايران.ir
+
+// is : http://www.isnic.is/domain/rules.php
+// Confirmed by registry <marius@isgate.is> 2008-12-06
+is
+net.is
+com.is
+edu.is
+gov.is
+org.is
+int.is
+
+// it : http://en.wikipedia.org/wiki/.it
+it
+gov.it
+edu.it
+// list of reserved geo-names :
+// http://www.nic.it/documenti/regolamenti-e-linee-guida/regolamento-assegnazione-versione-6.0.pdf
+// (There is also a list of reserved geo-names corresponding to Italian
+// municipalities : http://www.nic.it/documenti/appendice-c.pdf , but it is
+// not included here.)
+agrigento.it
+ag.it
+alessandria.it
+al.it
+ancona.it
+an.it
+aosta.it
+aoste.it
+ao.it
+arezzo.it
+ar.it
+ascoli-piceno.it
+ascolipiceno.it
+ap.it
+asti.it
+at.it
+avellino.it
+av.it
+bari.it
+ba.it
+andria-barletta-trani.it
+andriabarlettatrani.it
+trani-barletta-andria.it
+tranibarlettaandria.it
+barletta-trani-andria.it
+barlettatraniandria.it
+andria-trani-barletta.it
+andriatranibarletta.it
+trani-andria-barletta.it
+traniandriabarletta.it
+bt.it
+belluno.it
+bl.it
+benevento.it
+bn.it
+bergamo.it
+bg.it
+biella.it
+bi.it
+bologna.it
+bo.it
+bolzano.it
+bozen.it
+balsan.it
+alto-adige.it
+altoadige.it
+suedtirol.it
+bz.it
+brescia.it
+bs.it
+brindisi.it
+br.it
+cagliari.it
+ca.it
+caltanissetta.it
+cl.it
+campobasso.it
+cb.it
+carboniaiglesias.it
+carbonia-iglesias.it
+iglesias-carbonia.it
+iglesiascarbonia.it
+ci.it
+caserta.it
+ce.it
+catania.it
+ct.it
+catanzaro.it
+cz.it
+chieti.it
+ch.it
+como.it
+co.it
+cosenza.it
+cs.it
+cremona.it
+cr.it
+crotone.it
+kr.it
+cuneo.it
+cn.it
+dell-ogliastra.it
+dellogliastra.it
+ogliastra.it
+og.it
+enna.it
+en.it
+ferrara.it
+fe.it
+fermo.it
+fm.it
+firenze.it
+florence.it
+fi.it
+foggia.it
+fg.it
+forli-cesena.it
+forlicesena.it
+cesena-forli.it
+cesenaforli.it
+fc.it
+frosinone.it
+fr.it
+genova.it
+genoa.it
+ge.it
+gorizia.it
+go.it
+grosseto.it
+gr.it
+imperia.it
+im.it
+isernia.it
+is.it
+laquila.it
+aquila.it
+aq.it
+la-spezia.it
+laspezia.it
+sp.it
+latina.it
+lt.it
+lecce.it
+le.it
+lecco.it
+lc.it
+livorno.it
+li.it
+lodi.it
+lo.it
+lucca.it
+lu.it
+macerata.it
+mc.it
+mantova.it
+mn.it
+massa-carrara.it
+massacarrara.it
+carrara-massa.it
+carraramassa.it
+ms.it
+matera.it
+mt.it
+medio-campidano.it
+mediocampidano.it
+campidano-medio.it
+campidanomedio.it
+vs.it
+messina.it
+me.it
+milano.it
+milan.it
+mi.it
+modena.it
+mo.it
+monza.it
+monza-brianza.it
+monzabrianza.it
+monzaebrianza.it
+monzaedellabrianza.it
+monza-e-della-brianza.it
+mb.it
+napoli.it
+naples.it
+na.it
+novara.it
+no.it
+nuoro.it
+nu.it
+oristano.it
+or.it
+padova.it
+padua.it
+pd.it
+palermo.it
+pa.it
+parma.it
+pr.it
+pavia.it
+pv.it
+perugia.it
+pg.it
+pescara.it
+pe.it
+pesaro-urbino.it
+pesarourbino.it
+urbino-pesaro.it
+urbinopesaro.it
+pu.it
+piacenza.it
+pc.it
+pisa.it
+pi.it
+pistoia.it
+pt.it
+pordenone.it
+pn.it
+potenza.it
+pz.it
+prato.it
+po.it
+ragusa.it
+rg.it
+ravenna.it
+ra.it
+reggio-calabria.it
+reggiocalabria.it
+rc.it
+reggio-emilia.it
+reggioemilia.it
+re.it
+rieti.it
+ri.it
+rimini.it
+rn.it
+roma.it
+rome.it
+rm.it
+rovigo.it
+ro.it
+salerno.it
+sa.it
+sassari.it
+ss.it
+savona.it
+sv.it
+siena.it
+si.it
+siracusa.it
+sr.it
+sondrio.it
+so.it
+taranto.it
+ta.it
+tempio-olbia.it
+tempioolbia.it
+olbia-tempio.it
+olbiatempio.it
+ot.it
+teramo.it
+te.it
+terni.it
+tr.it
+torino.it
+turin.it
+to.it
+trapani.it
+tp.it
+trento.it
+trentino.it
+tn.it
+treviso.it
+tv.it
+trieste.it
+ts.it
+udine.it
+ud.it
+varese.it
+va.it
+venezia.it
+venice.it
+ve.it
+verbania.it
+vb.it
+vercelli.it
+vc.it
+verona.it
+vr.it
+vibo-valentia.it
+vibovalentia.it
+vv.it
+vicenza.it
+vi.it
+viterbo.it
+vt.it
+
+// je : http://www.channelisles.net/applic/avextn.shtml
+je
+co.je
+org.je
+net.je
+sch.je
+gov.je
+
+// jm : http://www.com.jm/register.html
+*.jm
+
+// jo : http://www.dns.jo/Registration_policy.aspx
+jo
+com.jo
+org.jo
+net.jo
+edu.jo
+sch.jo
+gov.jo
+mil.jo
+name.jo
+
+// jobs : http://en.wikipedia.org/wiki/.jobs
+jobs
+
+// jp : http://en.wikipedia.org/wiki/.jp
+// http://jprs.co.jp/en/jpdomain.html
+// Submitted by registry <yone@jprs.co.jp> 2008-06-11
+// Updated by registry <yone@jprs.co.jp> 2008-12-04
+jp
+// jp organizational type names
+ac.jp
+ad.jp
+co.jp
+ed.jp
+go.jp
+gr.jp
+lg.jp
+ne.jp
+or.jp
+// jp geographic type names
+// http://jprs.jp/doc/rule/saisoku-1.html
+*.aichi.jp
+*.akita.jp
+*.aomori.jp
+*.chiba.jp
+*.ehime.jp
+*.fukui.jp
+*.fukuoka.jp
+*.fukushima.jp
+*.gifu.jp
+*.gunma.jp
+*.hiroshima.jp
+*.hokkaido.jp
+*.hyogo.jp
+*.ibaraki.jp
+*.ishikawa.jp
+*.iwate.jp
+*.kagawa.jp
+*.kagoshima.jp
+*.kanagawa.jp
+*.kawasaki.jp
+*.kitakyushu.jp
+*.kobe.jp
+*.kochi.jp
+*.kumamoto.jp
+*.kyoto.jp
+*.mie.jp
+*.miyagi.jp
+*.miyazaki.jp
+*.nagano.jp
+*.nagasaki.jp
+*.nagoya.jp
+*.nara.jp
+*.niigata.jp
+*.oita.jp
+*.okayama.jp
+*.okinawa.jp
+*.osaka.jp
+*.saga.jp
+*.saitama.jp
+*.sapporo.jp
+*.sendai.jp
+*.shiga.jp
+*.shimane.jp
+*.shizuoka.jp
+*.tochigi.jp
+*.tokushima.jp
+*.tokyo.jp
+*.tottori.jp
+*.toyama.jp
+*.wakayama.jp
+*.yamagata.jp
+*.yamaguchi.jp
+*.yamanashi.jp
+*.yokohama.jp
+!metro.tokyo.jp
+!pref.aichi.jp
+!pref.akita.jp
+!pref.aomori.jp
+!pref.chiba.jp
+!pref.ehime.jp
+!pref.fukui.jp
+!pref.fukuoka.jp
+!pref.fukushima.jp
+!pref.gifu.jp
+!pref.gunma.jp
+!pref.hiroshima.jp
+!pref.hokkaido.jp
+!pref.hyogo.jp
+!pref.ibaraki.jp
+!pref.ishikawa.jp
+!pref.iwate.jp
+!pref.kagawa.jp
+!pref.kagoshima.jp
+!pref.kanagawa.jp
+!pref.kochi.jp
+!pref.kumamoto.jp
+!pref.kyoto.jp
+!pref.mie.jp
+!pref.miyagi.jp
+!pref.miyazaki.jp
+!pref.nagano.jp
+!pref.nagasaki.jp
+!pref.nara.jp
+!pref.niigata.jp
+!pref.oita.jp
+!pref.okayama.jp
+!pref.okinawa.jp
+!pref.osaka.jp
+!pref.saga.jp
+!pref.saitama.jp
+!pref.shiga.jp
+!pref.shimane.jp
+!pref.shizuoka.jp
+!pref.tochigi.jp
+!pref.tokushima.jp
+!pref.tottori.jp
+!pref.toyama.jp
+!pref.wakayama.jp
+!pref.yamagata.jp
+!pref.yamaguchi.jp
+!pref.yamanashi.jp
+!city.chiba.jp
+!city.fukuoka.jp
+!city.hiroshima.jp
+!city.kawasaki.jp
+!city.kitakyushu.jp
+!city.kobe.jp
+!city.kyoto.jp
+!city.nagoya.jp
+!city.niigata.jp
+!city.okayama.jp
+!city.osaka.jp
+!city.saitama.jp
+!city.sapporo.jp
+!city.sendai.jp
+!city.shizuoka.jp
+!city.yokohama.jp
+
+// ke : http://www.kenic.or.ke/index.php?option=com_content&task=view&id=117&Itemid=145
+*.ke
+
+// kg : http://www.domain.kg/dmn_n.html
+kg
+org.kg
+net.kg
+com.kg
+edu.kg
+gov.kg
+mil.kg
+
+// kh : http://www.mptc.gov.kh/dns_registration.htm
+*.kh
+
+// ki : http://www.ki/dns/index.html
+ki
+edu.ki
+biz.ki
+net.ki
+org.ki
+gov.ki
+info.ki
+com.ki
+
+// km : http://en.wikipedia.org/wiki/.km
+// http://www.domaine.km/documents/charte.doc
+km
+org.km
+nom.km
+gov.km
+prd.km
+tm.km
+edu.km
+mil.km
+ass.km
+com.km
+// These are only mentioned as proposed suggestions at domaine.km, but
+// http://en.wikipedia.org/wiki/.km says they're available for registration:
+coop.km
+asso.km
+presse.km
+medecin.km
+notaires.km
+pharmaciens.km
+veterinaire.km
+gouv.km
+
+// kn : http://en.wikipedia.org/wiki/.kn
+// http://www.dot.kn/domainRules.html
+kn
+net.kn
+org.kn
+edu.kn
+gov.kn
+
+// kp : http://www.kcce.kp/en_index.php
+com.kp
+edu.kp
+gov.kp
+org.kp
+rep.kp
+tra.kp
+
+// kr : http://en.wikipedia.org/wiki/.kr
+// see also: http://domain.nida.or.kr/eng/registration.jsp
+kr
+ac.kr
+co.kr
+es.kr
+go.kr
+hs.kr
+kg.kr
+mil.kr
+ms.kr
+ne.kr
+or.kr
+pe.kr
+re.kr
+sc.kr
+// kr geographical names
+busan.kr
+chungbuk.kr
+chungnam.kr
+daegu.kr
+daejeon.kr
+gangwon.kr
+gwangju.kr
+gyeongbuk.kr
+gyeonggi.kr
+gyeongnam.kr
+incheon.kr
+jeju.kr
+jeonbuk.kr
+jeonnam.kr
+seoul.kr
+ulsan.kr
+
+// kw : http://en.wikipedia.org/wiki/.kw
+*.kw
+
+// ky : http://www.icta.ky/da_ky_reg_dom.php
+// Confirmed by registry <kysupport@perimeterusa.com> 2008-06-17
+ky
+edu.ky
+gov.ky
+com.ky
+org.ky
+net.ky
+
+// kz : http://en.wikipedia.org/wiki/.kz
+// see also: http://www.nic.kz/rules/index.jsp
+kz
+org.kz
+edu.kz
+net.kz
+gov.kz
+mil.kz
+com.kz
+
+// la : http://en.wikipedia.org/wiki/.la
+// Submitted by registry <gavin.brown@nic.la> 2008-06-10
+la
+int.la
+net.la
+info.la
+edu.la
+gov.la
+per.la
+com.la
+org.la
+
+// lb : http://en.wikipedia.org/wiki/.lb
+// Submitted by registry <randy@psg.com> 2008-06-17
+com.lb
+edu.lb
+gov.lb
+net.lb
+org.lb
+
+// lc : http://en.wikipedia.org/wiki/.lc
+// see also: http://www.nic.lc/rules.htm
+lc
+com.lc
+net.lc
+co.lc
+org.lc
+edu.lc
+gov.lc
+
+// li : http://en.wikipedia.org/wiki/.li
+li
+
+// lk : http://www.nic.lk/seclevpr.html
+lk
+gov.lk
+sch.lk
+net.lk
+int.lk
+com.lk
+org.lk
+edu.lk
+ngo.lk
+soc.lk
+web.lk
+ltd.lk
+assn.lk
+grp.lk
+hotel.lk
+
+// lr : http://psg.com/dns/lr/lr.txt
+// Submitted by registry <randy@psg.com> 2008-06-17
+com.lr
+edu.lr
+gov.lr
+org.lr
+net.lr
+
+// ls : http://en.wikipedia.org/wiki/.ls
+ls
+co.ls
+org.ls
+
+// lt : http://en.wikipedia.org/wiki/.lt
+lt
+// gov.lt : http://www.gov.lt/index_en.php
+gov.lt
+
+// lu : http://www.dns.lu/en/
+lu
+
+// lv : http://www.nic.lv/DNS/En/generic.php
+lv
+com.lv
+edu.lv
+gov.lv
+org.lv
+mil.lv
+id.lv
+net.lv
+asn.lv
+conf.lv
+
+// ly : http://www.nic.ly/regulations.php
+ly
+com.ly
+net.ly
+gov.ly
+plc.ly
+edu.ly
+sch.ly
+med.ly
+org.ly
+id.ly
+
+// ma : http://en.wikipedia.org/wiki/.ma
+// http://www.anrt.ma/fr/admin/download/upload/file_fr782.pdf
+ma
+co.ma
+net.ma
+gov.ma
+org.ma
+ac.ma
+press.ma
+
+// mc : http://www.nic.mc/
+mc
+tm.mc
+asso.mc
+
+// md : http://en.wikipedia.org/wiki/.md
+md
+
+// me : http://en.wikipedia.org/wiki/.me
+me
+co.me
+net.me
+org.me
+edu.me
+ac.me
+gov.me
+its.me
+priv.me
+
+// mg : http://www.nic.mg/tarif.htm
+mg
+org.mg
+nom.mg
+gov.mg
+prd.mg
+tm.mg
+edu.mg
+mil.mg
+com.mg
+
+// mh : http://en.wikipedia.org/wiki/.mh
+mh
+
+// mil : http://en.wikipedia.org/wiki/.mil
+mil
+
+// mk : http://en.wikipedia.org/wiki/.mk
+// see also: http://dns.marnet.net.mk/postapka.php
+mk
+com.mk
+org.mk
+net.mk
+edu.mk
+gov.mk
+inf.mk
+name.mk
+
+// ml : http://www.gobin.info/domainname/ml-template.doc
+// see also: http://en.wikipedia.org/wiki/.ml
+ml
+com.ml
+edu.ml
+gouv.ml
+gov.ml
+net.ml
+org.ml
+presse.ml
+
+// mm : http://en.wikipedia.org/wiki/.mm
+*.mm
+
+// mn : http://en.wikipedia.org/wiki/.mn
+mn
+gov.mn
+edu.mn
+org.mn
+
+// mo : http://www.monic.net.mo/
+mo
+com.mo
+net.mo
+org.mo
+edu.mo
+gov.mo
+
+// mobi : http://en.wikipedia.org/wiki/.mobi
+mobi
+
+// mp : http://www.dot.mp/
+// Confirmed by registry <dcamacho@saipan.com> 2008-06-17
+mp
+
+// mq : http://en.wikipedia.org/wiki/.mq
+mq
+
+// mr : http://en.wikipedia.org/wiki/.mr
+mr
+gov.mr
+
+// ms : http://en.wikipedia.org/wiki/.ms
+ms
+
+// mt : https://www.nic.org.mt/dotmt/
+*.mt
+
+// mu : http://en.wikipedia.org/wiki/.mu
+mu
+com.mu
+net.mu
+org.mu
+gov.mu
+ac.mu
+co.mu
+or.mu
+
+// museum : http://about.museum/naming/
+// http://index.museum/
+museum
+academy.museum
+agriculture.museum
+air.museum
+airguard.museum
+alabama.museum
+alaska.museum
+amber.museum
+ambulance.museum
+american.museum
+americana.museum
+americanantiques.museum
+americanart.museum
+amsterdam.museum
+and.museum
+annefrank.museum
+anthro.museum
+anthropology.museum
+antiques.museum
+aquarium.museum
+arboretum.museum
+archaeological.museum
+archaeology.museum
+architecture.museum
+art.museum
+artanddesign.museum
+artcenter.museum
+artdeco.museum
+arteducation.museum
+artgallery.museum
+arts.museum
+artsandcrafts.museum
+asmatart.museum
+assassination.museum
+assisi.museum
+association.museum
+astronomy.museum
+atlanta.museum
+austin.museum
+australia.museum
+automotive.museum
+aviation.museum
+axis.museum
+badajoz.museum
+baghdad.museum
+bahn.museum
+bale.museum
+baltimore.museum
+barcelona.museum
+baseball.museum
+basel.museum
+baths.museum
+bauern.museum
+beauxarts.museum
+beeldengeluid.museum
+bellevue.museum
+bergbau.museum
+berkeley.museum
+berlin.museum
+bern.museum
+bible.museum
+bilbao.museum
+bill.museum
+birdart.museum
+birthplace.museum
+bonn.museum
+boston.museum
+botanical.museum
+botanicalgarden.museum
+botanicgarden.museum
+botany.museum
+brandywinevalley.museum
+brasil.museum
+bristol.museum
+british.museum
+britishcolumbia.museum
+broadcast.museum
+brunel.museum
+brussel.museum
+brussels.museum
+bruxelles.museum
+building.museum
+burghof.museum
+bus.museum
+bushey.museum
+cadaques.museum
+california.museum
+cambridge.museum
+can.museum
+canada.museum
+capebreton.museum
+carrier.museum
+cartoonart.museum
+casadelamoneda.museum
+castle.museum
+castres.museum
+celtic.museum
+center.museum
+chattanooga.museum
+cheltenham.museum
+chesapeakebay.museum
+chicago.museum
+children.museum
+childrens.museum
+childrensgarden.museum
+chiropractic.museum
+chocolate.museum
+christiansburg.museum
+cincinnati.museum
+cinema.museum
+circus.museum
+civilisation.museum
+civilization.museum
+civilwar.museum
+clinton.museum
+clock.museum
+coal.museum
+coastaldefence.museum
+cody.museum
+coldwar.museum
+collection.museum
+colonialwilliamsburg.museum
+coloradoplateau.museum
+columbia.museum
+columbus.museum
+communication.museum
+communications.museum
+community.museum
+computer.museum
+computerhistory.museum
+comunicações.museum
+contemporary.museum
+contemporaryart.museum
+convent.museum
+copenhagen.museum
+corporation.museum
+correios-e-telecomunicações.museum
+corvette.museum
+costume.museum
+countryestate.museum
+county.museum
+crafts.museum
+cranbrook.museum
+creation.museum
+cultural.museum
+culturalcenter.museum
+culture.museum
+cyber.museum
+cymru.museum
+dali.museum
+dallas.museum
+database.museum
+ddr.museum
+decorativearts.museum
+delaware.museum
+delmenhorst.museum
+denmark.museum
+depot.museum
+design.museum
+detroit.museum
+dinosaur.museum
+discovery.museum
+dolls.museum
+donostia.museum
+durham.museum
+eastafrica.museum
+eastcoast.museum
+education.museum
+educational.museum
+egyptian.museum
+eisenbahn.museum
+elburg.museum
+elvendrell.museum
+embroidery.museum
+encyclopedic.museum
+england.museum
+entomology.museum
+environment.museum
+environmentalconservation.museum
+epilepsy.museum
+essex.museum
+estate.museum
+ethnology.museum
+exeter.museum
+exhibition.museum
+family.museum
+farm.museum
+farmequipment.museum
+farmers.museum
+farmstead.museum
+field.museum
+figueres.museum
+filatelia.museum
+film.museum
+fineart.museum
+finearts.museum
+finland.museum
+flanders.museum
+florida.museum
+force.museum
+fortmissoula.museum
+fortworth.museum
+foundation.museum
+francaise.museum
+frankfurt.museum
+franziskaner.museum
+freemasonry.museum
+freiburg.museum
+fribourg.museum
+frog.museum
+fundacio.museum
+furniture.museum
+gallery.museum
+garden.museum
+gateway.museum
+geelvinck.museum
+gemological.museum
+geology.museum
+georgia.museum
+giessen.museum
+glas.museum
+glass.museum
+gorge.museum
+grandrapids.museum
+graz.museum
+guernsey.museum
+halloffame.museum
+hamburg.museum
+handson.museum
+harvestcelebration.museum
+hawaii.museum
+health.museum
+heimatunduhren.museum
+hellas.museum
+helsinki.museum
+hembygdsforbund.museum
+heritage.museum
+histoire.museum
+historical.museum
+historicalsociety.museum
+historichouses.museum
+historisch.museum
+historisches.museum
+history.museum
+historyofscience.museum
+horology.museum
+house.museum
+humanities.museum
+illustration.museum
+imageandsound.museum
+indian.museum
+indiana.museum
+indianapolis.museum
+indianmarket.museum
+intelligence.museum
+interactive.museum
+iraq.museum
+iron.museum
+isleofman.museum
+jamison.museum
+jefferson.museum
+jerusalem.museum
+jewelry.museum
+jewish.museum
+jewishart.museum
+jfk.museum
+journalism.museum
+judaica.museum
+judygarland.museum
+juedisches.museum
+juif.museum
+karate.museum
+karikatur.museum
+kids.museum
+koebenhavn.museum
+koeln.museum
+kunst.museum
+kunstsammlung.museum
+kunstunddesign.museum
+labor.museum
+labour.museum
+lajolla.museum
+lancashire.museum
+landes.museum
+lans.museum
+läns.museum
+larsson.museum
+lewismiller.museum
+lincoln.museum
+linz.museum
+living.museum
+livinghistory.museum
+localhistory.museum
+london.museum
+losangeles.museum
+louvre.museum
+loyalist.museum
+lucerne.museum
+luxembourg.museum
+luzern.museum
+mad.museum
+madrid.museum
+mallorca.museum
+manchester.museum
+mansion.museum
+mansions.museum
+manx.museum
+marburg.museum
+maritime.museum
+maritimo.museum
+maryland.museum
+marylhurst.museum
+media.museum
+medical.museum
+medizinhistorisches.museum
+meeres.museum
+memorial.museum
+mesaverde.museum
+michigan.museum
+midatlantic.museum
+military.museum
+mill.museum
+miners.museum
+mining.museum
+minnesota.museum
+missile.museum
+missoula.museum
+modern.museum
+moma.museum
+money.museum
+monmouth.museum
+monticello.museum
+montreal.museum
+moscow.museum
+motorcycle.museum
+muenchen.museum
+muenster.museum
+mulhouse.museum
+muncie.museum
+museet.museum
+museumcenter.museum
+museumvereniging.museum
+music.museum
+national.museum
+nationalfirearms.museum
+nationalheritage.museum
+nativeamerican.museum
+naturalhistory.museum
+naturalhistorymuseum.museum
+naturalsciences.museum
+nature.museum
+naturhistorisches.museum
+natuurwetenschappen.museum
+naumburg.museum
+naval.museum
+nebraska.museum
+neues.museum
+newhampshire.museum
+newjersey.museum
+newmexico.museum
+newport.museum
+newspaper.museum
+newyork.museum
+niepce.museum
+norfolk.museum
+north.museum
+nrw.museum
+nuernberg.museum
+nuremberg.museum
+nyc.museum
+nyny.museum
+oceanographic.museum
+oceanographique.museum
+omaha.museum
+online.museum
+ontario.museum
+openair.museum
+oregon.museum
+oregontrail.museum
+otago.museum
+oxford.museum
+pacific.museum
+paderborn.museum
+palace.museum
+paleo.museum
+palmsprings.museum
+panama.museum
+paris.museum
+pasadena.museum
+pharmacy.museum
+philadelphia.museum
+philadelphiaarea.museum
+philately.museum
+phoenix.museum
+photography.museum
+pilots.museum
+pittsburgh.museum
+planetarium.museum
+plantation.museum
+plants.museum
+plaza.museum
+portal.museum
+portland.museum
+portlligat.museum
+posts-and-telecommunications.museum
+preservation.museum
+presidio.museum
+press.museum
+project.museum
+public.museum
+pubol.museum
+quebec.museum
+railroad.museum
+railway.museum
+research.museum
+resistance.museum
+riodejaneiro.museum
+rochester.museum
+rockart.museum
+roma.museum
+russia.museum
+saintlouis.museum
+salem.museum
+salvadordali.museum
+salzburg.museum
+sandiego.museum
+sanfrancisco.museum
+santabarbara.museum
+santacruz.museum
+santafe.museum
+saskatchewan.museum
+satx.museum
+savannahga.museum
+schlesisches.museum
+schoenbrunn.museum
+schokoladen.museum
+school.museum
+schweiz.museum
+science.museum
+scienceandhistory.museum
+scienceandindustry.museum
+sciencecenter.museum
+sciencecenters.museum
+science-fiction.museum
+sciencehistory.museum
+sciences.museum
+sciencesnaturelles.museum
+scotland.museum
+seaport.museum
+settlement.museum
+settlers.museum
+shell.museum
+sherbrooke.museum
+sibenik.museum
+silk.museum
+ski.museum
+skole.museum
+society.museum
+sologne.museum
+soundandvision.museum
+southcarolina.museum
+southwest.museum
+space.museum
+spy.museum
+square.museum
+stadt.museum
+stalbans.museum
+starnberg.museum
+state.museum
+stateofdelaware.museum
+station.museum
+steam.museum
+steiermark.museum
+stjohn.museum
+stockholm.museum
+stpetersburg.museum
+stuttgart.museum
+suisse.museum
+surgeonshall.museum
+surrey.museum
+svizzera.museum
+sweden.museum
+sydney.museum
+tank.museum
+tcm.museum
+technology.museum
+telekommunikation.museum
+television.museum
+texas.museum
+textile.museum
+theater.museum
+time.museum
+timekeeping.museum
+topology.museum
+torino.museum
+touch.museum
+town.museum
+transport.museum
+tree.museum
+trolley.museum
+trust.museum
+trustee.museum
+uhren.museum
+ulm.museum
+undersea.museum
+university.museum
+usa.museum
+usantiques.museum
+usarts.museum
+uscountryestate.museum
+usculture.museum
+usdecorativearts.museum
+usgarden.museum
+ushistory.museum
+ushuaia.museum
+uslivinghistory.museum
+utah.museum
+uvic.museum
+valley.museum
+vantaa.museum
+versailles.museum
+viking.museum
+village.museum
+virginia.museum
+virtual.museum
+virtuel.museum
+vlaanderen.museum
+volkenkunde.museum
+wales.museum
+wallonie.museum
+war.museum
+washingtondc.museum
+watchandclock.museum
+watch-and-clock.museum
+western.museum
+westfalen.museum
+whaling.museum
+wildlife.museum
+williamsburg.museum
+windmill.museum
+workshop.museum
+york.museum
+yorkshire.museum
+yosemite.museum
+youth.museum
+zoological.museum
+zoology.museum
+ירושלי×.museum
+иком.museum
+
+// mv : http://en.wikipedia.org/wiki/.mv
+// "mv" included because, contra Wikipedia, google.mv exists.
+mv
+aero.mv
+biz.mv
+com.mv
+coop.mv
+edu.mv
+gov.mv
+info.mv
+int.mv
+mil.mv
+museum.mv
+name.mv
+net.mv
+org.mv
+pro.mv
+
+// mw : http://www.registrar.mw/
+mw
+ac.mw
+biz.mw
+co.mw
+com.mw
+coop.mw
+edu.mw
+gov.mw
+int.mw
+museum.mw
+net.mw
+org.mw
+
+// mx : http://www.nic.mx/
+// Submitted by registry <farias@nic.mx> 2008-06-19
+mx
+com.mx
+org.mx
+gob.mx
+edu.mx
+net.mx
+
+// my : http://www.mynic.net.my/
+my
+com.my
+net.my
+org.my
+gov.my
+edu.my
+mil.my
+name.my
+
+// mz : http://www.gobin.info/domainname/mz-template.doc
+*.mz
+
+// na : http://www.na-nic.com.na/
+// http://www.info.na/domain/
+na
+info.na
+pro.na
+name.na
+school.na
+or.na
+dr.na
+us.na
+mx.na
+ca.na
+in.na
+cc.na
+tv.na
+ws.na
+mobi.na
+co.na
+com.na
+org.na
+
+// name : has 2nd-level tlds, but there's no list of them
+name
+
+// nc : http://www.cctld.nc/
+nc
+asso.nc
+
+// ne : http://en.wikipedia.org/wiki/.ne
+ne
+
+// net : http://en.wikipedia.org/wiki/.net
+net
+
+// nf : http://en.wikipedia.org/wiki/.nf
+nf
+com.nf
+net.nf
+per.nf
+rec.nf
+web.nf
+arts.nf
+firm.nf
+info.nf
+other.nf
+store.nf
+
+// ng : http://psg.com/dns/ng/
+// Submitted by registry <randy@psg.com> 2008-06-17
+ac.ng
+com.ng
+edu.ng
+gov.ng
+net.ng
+org.ng
+
+// ni : http://www.nic.ni/dominios.htm
+*.ni
+
+// nl : http://www.domain-registry.nl/ace.php/c,728,122,,,,Home.html
+// Confirmed by registry <Antoin.Verschuren@sidn.nl> (with technical
+// reservations) 2008-06-08
+nl
+
+// BV.nl will be a registry for dutch BV's (besloten vennootschap)
+bv.nl
+
+// no : http://www.norid.no/regelverk/index.en.html
+// The Norwegian registry has declined to notify us of updates. The web pages
+// referenced below are the official source of the data. There is also an
+// announce mailing list:
+// https://postlister.uninett.no/sympa/info/norid-diskusjon
+no
+// Norid generic domains : http://www.norid.no/regelverk/vedlegg-c.en.html
+fhs.no
+vgs.no
+fylkesbibl.no
+folkebibl.no
+museum.no
+idrett.no
+priv.no
+// Non-Norid generic domains : http://www.norid.no/regelverk/vedlegg-d.en.html
+mil.no
+stat.no
+dep.no
+kommune.no
+herad.no
+// no geographical names : http://www.norid.no/regelverk/vedlegg-b.en.html
+// counties
+aa.no
+ah.no
+bu.no
+fm.no
+hl.no
+hm.no
+jan-mayen.no
+mr.no
+nl.no
+nt.no
+of.no
+ol.no
+oslo.no
+rl.no
+sf.no
+st.no
+svalbard.no
+tm.no
+tr.no
+va.no
+vf.no
+// primary and lower secondary schools per county
+gs.aa.no
+gs.ah.no
+gs.bu.no
+gs.fm.no
+gs.hl.no
+gs.hm.no
+gs.jan-mayen.no
+gs.mr.no
+gs.nl.no
+gs.nt.no
+gs.of.no
+gs.ol.no
+gs.oslo.no
+gs.rl.no
+gs.sf.no
+gs.st.no
+gs.svalbard.no
+gs.tm.no
+gs.tr.no
+gs.va.no
+gs.vf.no
+// cities
+akrehamn.no
+Ã¥krehamn.no
+algard.no
+ålgård.no
+arna.no
+brumunddal.no
+bryne.no
+bronnoysund.no
+brønnøysund.no
+drobak.no
+drøbak.no
+egersund.no
+fetsund.no
+floro.no
+florø.no
+fredrikstad.no
+hokksund.no
+honefoss.no
+hønefoss.no
+jessheim.no
+jorpeland.no
+jørpeland.no
+kirkenes.no
+kopervik.no
+krokstadelva.no
+langevag.no
+langevåg.no
+leirvik.no
+mjondalen.no
+mjøndalen.no
+mo-i-rana.no
+mosjoen.no
+mosjøen.no
+nesoddtangen.no
+orkanger.no
+osoyro.no
+osøyro.no
+raholt.no
+råholt.no
+sandnessjoen.no
+sandnessjøen.no
+skedsmokorset.no
+slattum.no
+spjelkavik.no
+stathelle.no
+stavern.no
+stjordalshalsen.no
+stjørdalshalsen.no
+tananger.no
+tranby.no
+vossevangen.no
+// communities
+afjord.no
+Ã¥fjord.no
+agdenes.no
+al.no
+Ã¥l.no
+alesund.no
+Ã¥lesund.no
+alstahaug.no
+alta.no
+áltá.no
+alaheadju.no
+álaheadju.no
+alvdal.no
+amli.no
+Ã¥mli.no
+amot.no
+Ã¥mot.no
+andebu.no
+andoy.no
+andøy.no
+andasuolo.no
+ardal.no
+Ã¥rdal.no
+aremark.no
+arendal.no
+Ã¥s.no
+aseral.no
+Ã¥seral.no
+asker.no
+askim.no
+askvoll.no
+askoy.no
+askøy.no
+asnes.no
+Ã¥snes.no
+audnedaln.no
+aukra.no
+aure.no
+aurland.no
+aurskog-holand.no
+aurskog-høland.no
+austevoll.no
+austrheim.no
+averoy.no
+averøy.no
+balestrand.no
+ballangen.no
+balat.no
+bálát.no
+balsfjord.no
+bahccavuotna.no
+báhccavuotna.no
+bamble.no
+bardu.no
+beardu.no
+beiarn.no
+bajddar.no
+bájddar.no
+baidar.no
+báidár.no
+berg.no
+bergen.no
+berlevag.no
+berlevåg.no
+bearalvahki.no
+bearalváhki.no
+bindal.no
+birkenes.no
+bjarkoy.no
+bjarkøy.no
+bjerkreim.no
+bjugn.no
+bodo.no
+bodø.no
+badaddja.no
+bådåddjå.no
+budejju.no
+bokn.no
+bremanger.no
+bronnoy.no
+brønnøy.no
+bygland.no
+bykle.no
+barum.no
+bærum.no
+bo.telemark.no
+bø.telemark.no
+bo.nordland.no
+bø.nordland.no
+bievat.no
+bievát.no
+bomlo.no
+bømlo.no
+batsfjord.no
+båtsfjord.no
+bahcavuotna.no
+báhcavuotna.no
+dovre.no
+drammen.no
+drangedal.no
+dyroy.no
+dyrøy.no
+donna.no
+dønna.no
+eid.no
+eidfjord.no
+eidsberg.no
+eidskog.no
+eidsvoll.no
+eigersund.no
+elverum.no
+enebakk.no
+engerdal.no
+etne.no
+etnedal.no
+evenes.no
+evenassi.no
+evenášši.no
+evje-og-hornnes.no
+farsund.no
+fauske.no
+fuossko.no
+fuoisku.no
+fedje.no
+fet.no
+finnoy.no
+finnøy.no
+fitjar.no
+fjaler.no
+fjell.no
+flakstad.no
+flatanger.no
+flekkefjord.no
+flesberg.no
+flora.no
+fla.no
+flå.no
+folldal.no
+forsand.no
+fosnes.no
+frei.no
+frogn.no
+froland.no
+frosta.no
+frana.no
+fræna.no
+froya.no
+frøya.no
+fusa.no
+fyresdal.no
+forde.no
+førde.no
+gamvik.no
+gangaviika.no
+gáŋgaviika.no
+gaular.no
+gausdal.no
+gildeskal.no
+gildeskål.no
+giske.no
+gjemnes.no
+gjerdrum.no
+gjerstad.no
+gjesdal.no
+gjovik.no
+gjøvik.no
+gloppen.no
+gol.no
+gran.no
+grane.no
+granvin.no
+gratangen.no
+grimstad.no
+grong.no
+kraanghke.no
+kråanghke.no
+grue.no
+gulen.no
+hadsel.no
+halden.no
+halsa.no
+hamar.no
+hamaroy.no
+habmer.no
+hábmer.no
+hapmir.no
+hápmir.no
+hammerfest.no
+hammarfeasta.no
+hámmárfeasta.no
+haram.no
+hareid.no
+harstad.no
+hasvik.no
+aknoluokta.no
+ákŋoluokta.no
+hattfjelldal.no
+aarborte.no
+haugesund.no
+hemne.no
+hemnes.no
+hemsedal.no
+heroy.more-og-romsdal.no
+herøy.møre-og-romsdal.no
+heroy.nordland.no
+herøy.nordland.no
+hitra.no
+hjartdal.no
+hjelmeland.no
+hobol.no
+hobøl.no
+hof.no
+hol.no
+hole.no
+holmestrand.no
+holtalen.no
+holtålen.no
+hornindal.no
+horten.no
+hurdal.no
+hurum.no
+hvaler.no
+hyllestad.no
+hagebostad.no
+hægebostad.no
+hoyanger.no
+høyanger.no
+hoylandet.no
+høylandet.no
+ha.no
+hå.no
+ibestad.no
+inderoy.no
+inderøy.no
+iveland.no
+jevnaker.no
+jondal.no
+jolster.no
+jølster.no
+karasjok.no
+karasjohka.no
+kárášjohka.no
+karlsoy.no
+galsa.no
+gálsá.no
+karmoy.no
+karmøy.no
+kautokeino.no
+guovdageaidnu.no
+klepp.no
+klabu.no
+klæbu.no
+kongsberg.no
+kongsvinger.no
+kragero.no
+kragerø.no
+kristiansand.no
+kristiansund.no
+krodsherad.no
+krødsherad.no
+kvalsund.no
+rahkkeravju.no
+ráhkkerávju.no
+kvam.no
+kvinesdal.no
+kvinnherad.no
+kviteseid.no
+kvitsoy.no
+kvitsøy.no
+kvafjord.no
+kvæfjord.no
+giehtavuoatna.no
+kvanangen.no
+kvænangen.no
+navuotna.no
+návuotna.no
+kafjord.no
+kåfjord.no
+gaivuotna.no
+gáivuotna.no
+larvik.no
+lavangen.no
+lavagis.no
+loabat.no
+loabát.no
+lebesby.no
+davvesiida.no
+leikanger.no
+leirfjord.no
+leka.no
+leksvik.no
+lenvik.no
+leangaviika.no
+leaŋgaviika.no
+lesja.no
+levanger.no
+lier.no
+lierne.no
+lillehammer.no
+lillesand.no
+lindesnes.no
+lindas.no
+lindås.no
+lom.no
+loppa.no
+lahppi.no
+láhppi.no
+lund.no
+lunner.no
+luroy.no
+lurøy.no
+luster.no
+lyngdal.no
+lyngen.no
+ivgu.no
+lardal.no
+lerdal.no
+lærdal.no
+lodingen.no
+lødingen.no
+lorenskog.no
+lørenskog.no
+loten.no
+løten.no
+malvik.no
+masoy.no
+måsøy.no
+muosat.no
+muosát.no
+mandal.no
+marker.no
+marnardal.no
+masfjorden.no
+meland.no
+meldal.no
+melhus.no
+meloy.no
+meløy.no
+meraker.no
+meråker.no
+moareke.no
+moåreke.no
+midsund.no
+midtre-gauldal.no
+modalen.no
+modum.no
+molde.no
+moskenes.no
+moss.no
+mosvik.no
+malselv.no
+målselv.no
+malatvuopmi.no
+málatvuopmi.no
+namdalseid.no
+aejrie.no
+namsos.no
+namsskogan.no
+naamesjevuemie.no
+nååmesjevuemie.no
+laakesvuemie.no
+nannestad.no
+narvik.no
+narviika.no
+naustdal.no
+nedre-eiker.no
+nes.akershus.no
+nes.buskerud.no
+nesna.no
+nesodden.no
+nesseby.no
+unjarga.no
+unjárga.no
+nesset.no
+nissedal.no
+nittedal.no
+nord-aurdal.no
+nord-fron.no
+nord-odal.no
+norddal.no
+nordkapp.no
+davvenjarga.no
+davvenjárga.no
+nordre-land.no
+nordreisa.no
+raisa.no
+ráisa.no
+nore-og-uvdal.no
+notodden.no
+naroy.no
+nærøy.no
+notteroy.no
+nøtterøy.no
+odda.no
+oksnes.no
+øksnes.no
+oppdal.no
+oppegard.no
+oppegård.no
+orkdal.no
+orland.no
+ørland.no
+orskog.no
+ørskog.no
+orsta.no
+ørsta.no
+os.hedmark.no
+os.hordaland.no
+osen.no
+osteroy.no
+osterøy.no
+ostre-toten.no
+østre-toten.no
+overhalla.no
+ovre-eiker.no
+øvre-eiker.no
+oyer.no
+øyer.no
+oygarden.no
+øygarden.no
+oystre-slidre.no
+øystre-slidre.no
+porsanger.no
+porsangu.no
+porsáŋgu.no
+porsgrunn.no
+radoy.no
+radøy.no
+rakkestad.no
+rana.no
+ruovat.no
+randaberg.no
+rauma.no
+rendalen.no
+rennebu.no
+rennesoy.no
+rennesøy.no
+rindal.no
+ringebu.no
+ringerike.no
+ringsaker.no
+rissa.no
+risor.no
+risør.no
+roan.no
+rollag.no
+rygge.no
+ralingen.no
+rælingen.no
+rodoy.no
+rødøy.no
+romskog.no
+rømskog.no
+roros.no
+røros.no
+rost.no
+røst.no
+royken.no
+røyken.no
+royrvik.no
+røyrvik.no
+rade.no
+råde.no
+salangen.no
+siellak.no
+saltdal.no
+salat.no
+sálát.no
+sálat.no
+samnanger.no
+sande.more-og-romsdal.no
+sande.møre-og-romsdal.no
+sande.vestfold.no
+sandefjord.no
+sandnes.no
+sandoy.no
+sandøy.no
+sarpsborg.no
+sauda.no
+sauherad.no
+sel.no
+selbu.no
+selje.no
+seljord.no
+sigdal.no
+siljan.no
+sirdal.no
+skaun.no
+skedsmo.no
+ski.no
+skien.no
+skiptvet.no
+skjervoy.no
+skjervøy.no
+skierva.no
+skiervá.no
+skjak.no
+skjåk.no
+skodje.no
+skanland.no
+skånland.no
+skanit.no
+skánit.no
+smola.no
+smøla.no
+snillfjord.no
+snasa.no
+snåsa.no
+snoasa.no
+snaase.no
+snåase.no
+sogndal.no
+sokndal.no
+sola.no
+solund.no
+songdalen.no
+sortland.no
+spydeberg.no
+stange.no
+stavanger.no
+steigen.no
+steinkjer.no
+stjordal.no
+stjørdal.no
+stokke.no
+stor-elvdal.no
+stord.no
+stordal.no
+storfjord.no
+omasvuotna.no
+strand.no
+stranda.no
+stryn.no
+sula.no
+suldal.no
+sund.no
+sunndal.no
+surnadal.no
+sveio.no
+svelvik.no
+sykkylven.no
+sogne.no
+søgne.no
+somna.no
+sømna.no
+sondre-land.no
+søndre-land.no
+sor-aurdal.no
+sør-aurdal.no
+sor-fron.no
+sør-fron.no
+sor-odal.no
+sør-odal.no
+sor-varanger.no
+sør-varanger.no
+matta-varjjat.no
+mátta-várjjat.no
+sorfold.no
+sørfold.no
+sorreisa.no
+sørreisa.no
+sorum.no
+sørum.no
+tana.no
+deatnu.no
+time.no
+tingvoll.no
+tinn.no
+tjeldsund.no
+dielddanuorri.no
+tjome.no
+tjøme.no
+tokke.no
+tolga.no
+torsken.no
+tranoy.no
+tranøy.no
+tromso.no
+tromsø.no
+tromsa.no
+romsa.no
+trondheim.no
+troandin.no
+trysil.no
+trana.no
+træna.no
+trogstad.no
+trøgstad.no
+tvedestrand.no
+tydal.no
+tynset.no
+tysfjord.no
+divtasvuodna.no
+divttasvuotna.no
+tysnes.no
+tysvar.no
+tysvær.no
+tonsberg.no
+tønsberg.no
+ullensaker.no
+ullensvang.no
+ulvik.no
+utsira.no
+vadso.no
+vadsø.no
+cahcesuolo.no
+Äáhcesuolo.no
+vaksdal.no
+valle.no
+vang.no
+vanylven.no
+vardo.no
+vardø.no
+varggat.no
+várggát.no
+vefsn.no
+vaapste.no
+vega.no
+vegarshei.no
+vegårshei.no
+vennesla.no
+verdal.no
+verran.no
+vestby.no
+vestnes.no
+vestre-slidre.no
+vestre-toten.no
+vestvagoy.no
+vestvågøy.no
+vevelstad.no
+vik.no
+vikna.no
+vindafjord.no
+volda.no
+voss.no
+varoy.no
+værøy.no
+vagan.no
+vågan.no
+voagat.no
+vagsoy.no
+vågsøy.no
+vaga.no
+vågå.no
+valer.ostfold.no
+våler.østfold.no
+valer.hedmark.no
+våler.hedmark.no
+
+// np : http://www.mos.com.np/register.html
+*.np
+
+// nr : http://cenpac.net.nr/dns/index.html
+// Confirmed by registry <technician@cenpac.net.nr> 2008-06-17
+nr
+biz.nr
+info.nr
+gov.nr
+edu.nr
+org.nr
+net.nr
+com.nr
+
+// nu : http://en.wikipedia.org/wiki/.nu
+nu
+
+// nz : http://en.wikipedia.org/wiki/.nz
+*.nz
+
+// om : http://en.wikipedia.org/wiki/.om
+*.om
+!mediaphone.om
+!nawrastelecom.om
+!nawras.om
+!omanmobile.om
+!omanpost.om
+!omantel.om
+!rakpetroleum.om
+!siemens.om
+!songfest.om
+!statecouncil.om
+
+// org : http://en.wikipedia.org/wiki/.org
+org
+
+// pa : http://www.nic.pa/
+// Some additional second level "domains" resolve directly as hostnames, such as
+// pannet.pa, so we add a rule for "pa".
+pa
+ac.pa
+gob.pa
+com.pa
+org.pa
+sld.pa
+edu.pa
+net.pa
+ing.pa
+abo.pa
+med.pa
+nom.pa
+
+// pe : https://www.nic.pe/InformeFinalComision.pdf
+pe
+edu.pe
+gob.pe
+nom.pe
+mil.pe
+org.pe
+com.pe
+net.pe
+
+// pf : http://www.gobin.info/domainname/formulaire-pf.pdf
+pf
+com.pf
+org.pf
+edu.pf
+
+// pg : http://en.wikipedia.org/wiki/.pg
+*.pg
+
+// ph : http://www.domains.ph/FAQ2.asp
+// Submitted by registry <jed@email.com.ph> 2008-06-13
+ph
+com.ph
+net.ph
+org.ph
+gov.ph
+edu.ph
+ngo.ph
+mil.ph
+i.ph
+
+// pk : http://pk5.pknic.net.pk/pk5/msgNamepk.PK
+pk
+com.pk
+net.pk
+edu.pk
+org.pk
+fam.pk
+biz.pk
+web.pk
+gov.pk
+gob.pk
+gok.pk
+gon.pk
+gop.pk
+gos.pk
+info.pk
+
+// pl : http://www.dns.pl/english/
+pl
+// NASK functional domains (nask.pl / dns.pl) : http://www.dns.pl/english/dns-funk.html
+aid.pl
+agro.pl
+atm.pl
+auto.pl
+biz.pl
+com.pl
+edu.pl
+gmina.pl
+gsm.pl
+info.pl
+mail.pl
+miasta.pl
+media.pl
+mil.pl
+net.pl
+nieruchomosci.pl
+nom.pl
+org.pl
+pc.pl
+powiat.pl
+priv.pl
+realestate.pl
+rel.pl
+sex.pl
+shop.pl
+sklep.pl
+sos.pl
+szkola.pl
+targi.pl
+tm.pl
+tourism.pl
+travel.pl
+turystyka.pl
+// ICM functional domains (icm.edu.pl)
+6bone.pl
+art.pl
+mbone.pl
+// Government domains (administred by ippt.gov.pl)
+gov.pl
+uw.gov.pl
+um.gov.pl
+ug.gov.pl
+upow.gov.pl
+starostwo.gov.pl
+so.gov.pl
+sr.gov.pl
+po.gov.pl
+pa.gov.pl
+// other functional domains
+ngo.pl
+irc.pl
+usenet.pl
+// NASK geographical domains : http://www.dns.pl/english/dns-regiony.html
+augustow.pl
+babia-gora.pl
+bedzin.pl
+beskidy.pl
+bialowieza.pl
+bialystok.pl
+bielawa.pl
+bieszczady.pl
+boleslawiec.pl
+bydgoszcz.pl
+bytom.pl
+cieszyn.pl
+czeladz.pl
+czest.pl
+dlugoleka.pl
+elblag.pl
+elk.pl
+glogow.pl
+gniezno.pl
+gorlice.pl
+grajewo.pl
+ilawa.pl
+jaworzno.pl
+jelenia-gora.pl
+jgora.pl
+kalisz.pl
+kazimierz-dolny.pl
+karpacz.pl
+kartuzy.pl
+kaszuby.pl
+katowice.pl
+kepno.pl
+ketrzyn.pl
+klodzko.pl
+kobierzyce.pl
+kolobrzeg.pl
+konin.pl
+konskowola.pl
+kutno.pl
+lapy.pl
+lebork.pl
+legnica.pl
+lezajsk.pl
+limanowa.pl
+lomza.pl
+lowicz.pl
+lubin.pl
+lukow.pl
+malbork.pl
+malopolska.pl
+mazowsze.pl
+mazury.pl
+mielec.pl
+mielno.pl
+mragowo.pl
+naklo.pl
+nowaruda.pl
+nysa.pl
+olawa.pl
+olecko.pl
+olkusz.pl
+olsztyn.pl
+opoczno.pl
+opole.pl
+ostroda.pl
+ostroleka.pl
+ostrowiec.pl
+ostrowwlkp.pl
+pila.pl
+pisz.pl
+podhale.pl
+podlasie.pl
+polkowice.pl
+pomorze.pl
+pomorskie.pl
+prochowice.pl
+pruszkow.pl
+przeworsk.pl
+pulawy.pl
+radom.pl
+rawa-maz.pl
+rybnik.pl
+rzeszow.pl
+sanok.pl
+sejny.pl
+siedlce.pl
+slask.pl
+slupsk.pl
+sosnowiec.pl
+stalowa-wola.pl
+skoczow.pl
+starachowice.pl
+stargard.pl
+suwalki.pl
+swidnica.pl
+swiebodzin.pl
+swinoujscie.pl
+szczecin.pl
+szczytno.pl
+tarnobrzeg.pl
+tgory.pl
+turek.pl
+tychy.pl
+ustka.pl
+walbrzych.pl
+warmia.pl
+warszawa.pl
+waw.pl
+wegrow.pl
+wielun.pl
+wlocl.pl
+wloclawek.pl
+wodzislaw.pl
+wolomin.pl
+wroclaw.pl
+zachpomor.pl
+zagan.pl
+zarow.pl
+zgora.pl
+zgorzelec.pl
+// TASK geographical domains (www.task.gda.pl/uslugi/dns)
+gda.pl
+gdansk.pl
+gdynia.pl
+med.pl
+sopot.pl
+// other geographical domains
+gliwice.pl
+krakow.pl
+poznan.pl
+wroc.pl
+zakopane.pl
+
+// pm : http://www.afnic.fr/medias/documents/AFNIC-naming-policy2012.pdf
+pm
+
+// pn : http://www.government.pn/PnRegistry/policies.htm
+pn
+gov.pn
+co.pn
+org.pn
+edu.pn
+net.pn
+
+// pr : http://www.nic.pr/index.asp?f=1
+pr
+com.pr
+net.pr
+org.pr
+gov.pr
+edu.pr
+isla.pr
+pro.pr
+biz.pr
+info.pr
+name.pr
+// these aren't mentioned on nic.pr, but on http://en.wikipedia.org/wiki/.pr
+est.pr
+prof.pr
+ac.pr
+
+// pro : http://www.nic.pro/support_faq.htm
+pro
+aca.pro
+bar.pro
+cpa.pro
+jur.pro
+law.pro
+med.pro
+eng.pro
+
+// ps : http://en.wikipedia.org/wiki/.ps
+// http://www.nic.ps/registration/policy.html#reg
+ps
+edu.ps
+gov.ps
+sec.ps
+plo.ps
+com.ps
+org.ps
+net.ps
+
+// pt : http://online.dns.pt/dns/start_dns
+pt
+net.pt
+gov.pt
+org.pt
+edu.pt
+int.pt
+publ.pt
+com.pt
+nome.pt
+
+// pw : http://en.wikipedia.org/wiki/.pw
+pw
+co.pw
+ne.pw
+or.pw
+ed.pw
+go.pw
+belau.pw
+
+// py : http://www.nic.py/faq_a.html#faq_b
+*.py
+
+// qa : http://domains.qa/en/
+qa
+com.qa
+edu.qa
+gov.qa
+mil.qa
+name.qa
+net.qa
+org.qa
+sch.qa
+
+// re : http://www.afnic.re/obtenir/chartes/nommage-re/annexe-descriptifs
+re
+com.re
+asso.re
+nom.re
+
+// ro : http://www.rotld.ro/
+ro
+com.ro
+org.ro
+tm.ro
+nt.ro
+nom.ro
+info.ro
+rec.ro
+arts.ro
+firm.ro
+store.ro
+www.ro
+
+// rs : http://en.wikipedia.org/wiki/.rs
+rs
+co.rs
+org.rs
+edu.rs
+ac.rs
+gov.rs
+in.rs
+
+// ru : http://www.cctld.ru/ru/docs/aktiv_8.php
+// Industry domains
+ru
+ac.ru
+com.ru
+edu.ru
+int.ru
+net.ru
+org.ru
+pp.ru
+// Geographical domains
+adygeya.ru
+altai.ru
+amur.ru
+arkhangelsk.ru
+astrakhan.ru
+bashkiria.ru
+belgorod.ru
+bir.ru
+bryansk.ru
+buryatia.ru
+cbg.ru
+chel.ru
+chelyabinsk.ru
+chita.ru
+chukotka.ru
+chuvashia.ru
+dagestan.ru
+dudinka.ru
+e-burg.ru
+grozny.ru
+irkutsk.ru
+ivanovo.ru
+izhevsk.ru
+jar.ru
+joshkar-ola.ru
+kalmykia.ru
+kaluga.ru
+kamchatka.ru
+karelia.ru
+kazan.ru
+kchr.ru
+kemerovo.ru
+khabarovsk.ru
+khakassia.ru
+khv.ru
+kirov.ru
+koenig.ru
+komi.ru
+kostroma.ru
+krasnoyarsk.ru
+kuban.ru
+kurgan.ru
+kursk.ru
+lipetsk.ru
+magadan.ru
+mari.ru
+mari-el.ru
+marine.ru
+mordovia.ru
+mosreg.ru
+msk.ru
+murmansk.ru
+nalchik.ru
+nnov.ru
+nov.ru
+novosibirsk.ru
+nsk.ru
+omsk.ru
+orenburg.ru
+oryol.ru
+palana.ru
+penza.ru
+perm.ru
+pskov.ru
+ptz.ru
+rnd.ru
+ryazan.ru
+sakhalin.ru
+samara.ru
+saratov.ru
+simbirsk.ru
+smolensk.ru
+spb.ru
+stavropol.ru
+stv.ru
+surgut.ru
+tambov.ru
+tatarstan.ru
+tom.ru
+tomsk.ru
+tsaritsyn.ru
+tsk.ru
+tula.ru
+tuva.ru
+tver.ru
+tyumen.ru
+udm.ru
+udmurtia.ru
+ulan-ude.ru
+vladikavkaz.ru
+vladimir.ru
+vladivostok.ru
+volgograd.ru
+vologda.ru
+voronezh.ru
+vrn.ru
+vyatka.ru
+yakutia.ru
+yamal.ru
+yaroslavl.ru
+yekaterinburg.ru
+yuzhno-sakhalinsk.ru
+// More geographical domains
+amursk.ru
+baikal.ru
+cmw.ru
+fareast.ru
+jamal.ru
+kms.ru
+k-uralsk.ru
+kustanai.ru
+kuzbass.ru
+magnitka.ru
+mytis.ru
+nakhodka.ru
+nkz.ru
+norilsk.ru
+oskol.ru
+pyatigorsk.ru
+rubtsovsk.ru
+snz.ru
+syzran.ru
+vdonsk.ru
+zgrad.ru
+// State domains
+gov.ru
+mil.ru
+// Technical domains
+test.ru
+
+// rw : http://www.nic.rw/cgi-bin/policy.pl
+rw
+gov.rw
+net.rw
+edu.rw
+ac.rw
+com.rw
+co.rw
+int.rw
+mil.rw
+gouv.rw
+
+// sa : http://www.nic.net.sa/
+sa
+com.sa
+net.sa
+org.sa
+gov.sa
+med.sa
+pub.sa
+edu.sa
+sch.sa
+
+// sb : http://www.sbnic.net.sb/
+// Submitted by registry <lee.humphries@telekom.com.sb> 2008-06-08
+sb
+com.sb
+edu.sb
+gov.sb
+net.sb
+org.sb
+
+// sc : http://www.nic.sc/
+sc
+com.sc
+gov.sc
+net.sc
+org.sc
+edu.sc
+
+// sd : http://www.isoc.sd/sudanic.isoc.sd/billing_pricing.htm
+// Submitted by registry <admin@isoc.sd> 2008-06-17
+sd
+com.sd
+net.sd
+org.sd
+edu.sd
+med.sd
+gov.sd
+info.sd
+
+// se : http://en.wikipedia.org/wiki/.se
+// Submitted by registry <Patrik.Wallstrom@iis.se> 2008-06-24
+se
+a.se
+ac.se
+b.se
+bd.se
+brand.se
+c.se
+d.se
+e.se
+f.se
+fh.se
+fhsk.se
+fhv.se
+g.se
+h.se
+i.se
+k.se
+komforb.se
+kommunalforbund.se
+komvux.se
+l.se
+lanbib.se
+m.se
+n.se
+naturbruksgymn.se
+o.se
+org.se
+p.se
+parti.se
+pp.se
+press.se
+r.se
+s.se
+sshn.se
+t.se
+tm.se
+u.se
+w.se
+x.se
+y.se
+z.se
+
+// sg : http://www.nic.net.sg/sub_policies_agreement/2ld.html
+sg
+com.sg
+net.sg
+org.sg
+gov.sg
+edu.sg
+per.sg
+
+// sh : http://www.nic.sh/rules.html
+// list of 2nd level domains ?
+sh
+
+// si : http://en.wikipedia.org/wiki/.si
+si
+
+// sj : No registrations at this time.
+// Submitted by registry <jarle@uninett.no> 2008-06-16
+
+// sk : http://en.wikipedia.org/wiki/.sk
+// list of 2nd level domains ?
+sk
+
+// sl : http://www.nic.sl
+// Submitted by registry <adam@neoip.com> 2008-06-12
+sl
+com.sl
+net.sl
+edu.sl
+gov.sl
+org.sl
+
+// sm : http://en.wikipedia.org/wiki/.sm
+sm
+
+// sn : http://en.wikipedia.org/wiki/.sn
+sn
+art.sn
+com.sn
+edu.sn
+gouv.sn
+org.sn
+perso.sn
+univ.sn
+
+// so : http://www.soregistry.com/
+so
+com.so
+net.so
+org.so
+
+// sr : http://en.wikipedia.org/wiki/.sr
+sr
+
+// st : http://www.nic.st/html/policyrules/
+st
+co.st
+com.st
+consulado.st
+edu.st
+embaixada.st
+gov.st
+mil.st
+net.st
+org.st
+principe.st
+saotome.st
+store.st
+
+// su : http://en.wikipedia.org/wiki/.su
+su
+
+// sv : http://www.svnet.org.sv/svpolicy.html
+*.sv
+
+// sy : http://en.wikipedia.org/wiki/.sy
+// see also: http://www.gobin.info/domainname/sy.doc
+sy
+edu.sy
+gov.sy
+net.sy
+mil.sy
+com.sy
+org.sy
+
+// sz : http://en.wikipedia.org/wiki/.sz
+// http://www.sispa.org.sz/
+sz
+co.sz
+ac.sz
+org.sz
+
+// tc : http://en.wikipedia.org/wiki/.tc
+tc
+
+// td : http://en.wikipedia.org/wiki/.td
+td
+
+// tel: http://en.wikipedia.org/wiki/.tel
+// http://www.telnic.org/
+tel
+
+// tf : http://en.wikipedia.org/wiki/.tf
+tf
+
+// tg : http://en.wikipedia.org/wiki/.tg
+// http://www.nic.tg/nictg/index.php implies no reserved 2nd-level domains,
+// although this contradicts wikipedia.
+tg
+
+// th : http://en.wikipedia.org/wiki/.th
+// Submitted by registry <krit@thains.co.th> 2008-06-17
+th
+ac.th
+co.th
+go.th
+in.th
+mi.th
+net.th
+or.th
+
+// tj : http://www.nic.tj/policy.htm
+tj
+ac.tj
+biz.tj
+co.tj
+com.tj
+edu.tj
+go.tj
+gov.tj
+int.tj
+mil.tj
+name.tj
+net.tj
+nic.tj
+org.tj
+test.tj
+web.tj
+
+// tk : http://en.wikipedia.org/wiki/.tk
+tk
+
+// tl : http://en.wikipedia.org/wiki/.tl
+tl
+gov.tl
+
+// tm : http://www.nic.tm/rules.html
+// list of 2nd level tlds ?
+tm
+
+// tn : http://en.wikipedia.org/wiki/.tn
+// http://whois.ati.tn/
+tn
+com.tn
+ens.tn
+fin.tn
+gov.tn
+ind.tn
+intl.tn
+nat.tn
+net.tn
+org.tn
+info.tn
+perso.tn
+tourism.tn
+edunet.tn
+rnrt.tn
+rns.tn
+rnu.tn
+mincom.tn
+agrinet.tn
+defense.tn
+turen.tn
+
+// to : http://en.wikipedia.org/wiki/.to
+// Submitted by registry <egullich@colo.to> 2008-06-17
+to
+com.to
+gov.to
+net.to
+org.to
+edu.to
+mil.to
+
+// tr : http://en.wikipedia.org/wiki/.tr
+*.tr
+!nic.tr
+// Used by government in the TRNC
+// http://en.wikipedia.org/wiki/.nc.tr
+gov.nc.tr
+
+// travel : http://en.wikipedia.org/wiki/.travel
+travel
+
+// tt : http://www.nic.tt/
+tt
+co.tt
+com.tt
+org.tt
+net.tt
+biz.tt
+info.tt
+pro.tt
+int.tt
+coop.tt
+jobs.tt
+mobi.tt
+travel.tt
+museum.tt
+aero.tt
+name.tt
+gov.tt
+edu.tt
+
+// tv : http://en.wikipedia.org/wiki/.tv
+// Not listing any 2LDs as reserved since none seem to exist in practice,
+// Wikipedia notwithstanding.
+tv
+
+// tw : http://en.wikipedia.org/wiki/.tw
+tw
+edu.tw
+gov.tw
+mil.tw
+com.tw
+net.tw
+org.tw
+idv.tw
+game.tw
+ebiz.tw
+club.tw
+網路.tw
+組織.tw
+商業.tw
+
+// tz : http://en.wikipedia.org/wiki/.tz
+// Submitted by registry <randy@psg.com> 2008-06-17
+// Updated from http://www.tznic.or.tz/index.php/domains.html 2010-10-25
+ac.tz
+co.tz
+go.tz
+mil.tz
+ne.tz
+or.tz
+sc.tz
+
+// ua : http://www.nic.net.ua/
+ua
+com.ua
+edu.ua
+gov.ua
+in.ua
+net.ua
+org.ua
+// ua geo-names
+cherkassy.ua
+chernigov.ua
+chernovtsy.ua
+ck.ua
+cn.ua
+crimea.ua
+cv.ua
+dn.ua
+dnepropetrovsk.ua
+donetsk.ua
+dp.ua
+if.ua
+ivano-frankivsk.ua
+kh.ua
+kharkov.ua
+kherson.ua
+khmelnitskiy.ua
+kiev.ua
+kirovograd.ua
+km.ua
+kr.ua
+ks.ua
+kv.ua
+lg.ua
+lugansk.ua
+lutsk.ua
+lviv.ua
+mk.ua
+nikolaev.ua
+od.ua
+odessa.ua
+pl.ua
+poltava.ua
+rovno.ua
+rv.ua
+sebastopol.ua
+sumy.ua
+te.ua
+ternopil.ua
+uzhgorod.ua
+vinnica.ua
+vn.ua
+zaporizhzhe.ua
+zp.ua
+zhitomir.ua
+zt.ua
+
+// Private registries in .ua
+co.ua
+pp.ua
+
+// ug : http://www.registry.co.ug/
+ug
+co.ug
+ac.ug
+sc.ug
+go.ug
+ne.ug
+or.ug
+
+// uk : http://en.wikipedia.org/wiki/.uk
+*.uk
+*.sch.uk
+!bl.uk
+!british-library.uk
+!icnet.uk
+!jet.uk
+!mod.uk
+!nel.uk
+!nhs.uk
+!nic.uk
+!nls.uk
+!national-library-scotland.uk
+!parliament.uk
+!police.uk
+
+// us : http://en.wikipedia.org/wiki/.us
+us
+dni.us
+fed.us
+isa.us
+kids.us
+nsn.us
+// us geographic names
+ak.us
+al.us
+ar.us
+as.us
+az.us
+ca.us
+co.us
+ct.us
+dc.us
+de.us
+fl.us
+ga.us
+gu.us
+hi.us
+ia.us
+id.us
+il.us
+in.us
+ks.us
+ky.us
+la.us
+ma.us
+md.us
+me.us
+mi.us
+mn.us
+mo.us
+ms.us
+mt.us
+nc.us
+nd.us
+ne.us
+nh.us
+nj.us
+nm.us
+nv.us
+ny.us
+oh.us
+ok.us
+or.us
+pa.us
+pr.us
+ri.us
+sc.us
+sd.us
+tn.us
+tx.us
+ut.us
+vi.us
+vt.us
+va.us
+wa.us
+wi.us
+wv.us
+wy.us
+// The registrar notes several more specific domains available in each state,
+// such as state.*.us, dst.*.us, etc., but resolution of these is somewhat
+// haphazard; in some states these domains resolve as addresses, while in others
+// only subdomains are available, or even nothing at all. We include the
+// most common ones where it's clear that different sites are different
+// entities.
+k12.ak.us
+k12.al.us
+k12.ar.us
+k12.as.us
+k12.az.us
+k12.ca.us
+k12.co.us
+k12.ct.us
+k12.dc.us
+k12.de.us
+k12.fl.us
+k12.ga.us
+k12.gu.us
+// k12.hi.us Hawaii has a state-wide DOE login: bug 614565
+k12.ia.us
+k12.id.us
+k12.il.us
+k12.in.us
+k12.ks.us
+k12.ky.us
+k12.la.us
+k12.ma.us
+k12.md.us
+k12.me.us
+k12.mi.us
+k12.mn.us
+k12.mo.us
+k12.ms.us
+k12.mt.us
+k12.nc.us
+k12.nd.us
+k12.ne.us
+k12.nh.us
+k12.nj.us
+k12.nm.us
+k12.nv.us
+k12.ny.us
+k12.oh.us
+k12.ok.us
+k12.or.us
+k12.pa.us
+k12.pr.us
+k12.ri.us
+k12.sc.us
+k12.sd.us
+k12.tn.us
+k12.tx.us
+k12.ut.us
+k12.vi.us
+k12.vt.us
+k12.va.us
+k12.wa.us
+k12.wi.us
+k12.wv.us
+k12.wy.us
+
+cc.ak.us
+cc.al.us
+cc.ar.us
+cc.as.us
+cc.az.us
+cc.ca.us
+cc.co.us
+cc.ct.us
+cc.dc.us
+cc.de.us
+cc.fl.us
+cc.ga.us
+cc.gu.us
+cc.hi.us
+cc.ia.us
+cc.id.us
+cc.il.us
+cc.in.us
+cc.ks.us
+cc.ky.us
+cc.la.us
+cc.ma.us
+cc.md.us
+cc.me.us
+cc.mi.us
+cc.mn.us
+cc.mo.us
+cc.ms.us
+cc.mt.us
+cc.nc.us
+cc.nd.us
+cc.ne.us
+cc.nh.us
+cc.nj.us
+cc.nm.us
+cc.nv.us
+cc.ny.us
+cc.oh.us
+cc.ok.us
+cc.or.us
+cc.pa.us
+cc.pr.us
+cc.ri.us
+cc.sc.us
+cc.sd.us
+cc.tn.us
+cc.tx.us
+cc.ut.us
+cc.vi.us
+cc.vt.us
+cc.va.us
+cc.wa.us
+cc.wi.us
+cc.wv.us
+cc.wy.us
+
+lib.ak.us
+lib.al.us
+lib.ar.us
+lib.as.us
+lib.az.us
+lib.ca.us
+lib.co.us
+lib.ct.us
+lib.dc.us
+lib.de.us
+lib.fl.us
+lib.ga.us
+lib.gu.us
+lib.hi.us
+lib.ia.us
+lib.id.us
+lib.il.us
+lib.in.us
+lib.ks.us
+lib.ky.us
+lib.la.us
+lib.ma.us
+lib.md.us
+lib.me.us
+lib.mi.us
+lib.mn.us
+lib.mo.us
+lib.ms.us
+lib.mt.us
+lib.nc.us
+lib.nd.us
+lib.ne.us
+lib.nh.us
+lib.nj.us
+lib.nm.us
+lib.nv.us
+lib.ny.us
+lib.oh.us
+lib.ok.us
+lib.or.us
+lib.pa.us
+lib.pr.us
+lib.ri.us
+lib.sc.us
+lib.sd.us
+lib.tn.us
+lib.tx.us
+lib.ut.us
+lib.vi.us
+lib.vt.us
+lib.va.us
+lib.wa.us
+lib.wi.us
+lib.wv.us
+lib.wy.us
+
+// k12.ma.us contains school districts in Massachusetts. The 4LDs are
+// managed indepedently except for private (PVT), charter (CHTR) and
+// parochial (PAROCH) schools. Those are delegated dorectly to the
+// 5LD operators. <k12-ma-hostmaster _ at _ rsuc.gweep.net>
+pvt.k12.ma.us
+chtr.k12.ma.us
+paroch.k12.ma.us
+
+// uy : http://www.antel.com.uy/
+*.uy
+
+// uz : http://www.reg.uz/registerr.html
+// are there other 2nd level tlds ?
+uz
+com.uz
+co.uz
+
+// va : http://en.wikipedia.org/wiki/.va
+va
+
+// vc : http://en.wikipedia.org/wiki/.vc
+// Submitted by registry <kshah@ca.afilias.info> 2008-06-13
+vc
+com.vc
+net.vc
+org.vc
+gov.vc
+mil.vc
+edu.vc
+
+// ve : http://registro.nic.ve/nicve/registro/index.html
+*.ve
+
+// vg : http://en.wikipedia.org/wiki/.vg
+vg
+
+// vi : http://www.nic.vi/newdomainform.htm
+// http://www.nic.vi/Domain_Rules/body_domain_rules.html indicates some other
+// TLDs are "reserved", such as edu.vi and gov.vi, but doesn't actually say they
+// are available for registration (which they do not seem to be).
+vi
+co.vi
+com.vi
+k12.vi
+net.vi
+org.vi
+
+// vn : https://www.dot.vn/vnnic/vnnic/domainregistration.jsp
+vn
+com.vn
+net.vn
+org.vn
+edu.vn
+gov.vn
+int.vn
+ac.vn
+biz.vn
+info.vn
+name.vn
+pro.vn
+health.vn
+
+// vu : http://en.wikipedia.org/wiki/.vu
+// list of 2nd level tlds ?
+vu
+
+// wf : http://www.afnic.fr/medias/documents/AFNIC-naming-policy2012.pdf
+wf
+
+// ws : http://en.wikipedia.org/wiki/.ws
+// http://samoanic.ws/index.dhtml
+ws
+com.ws
+net.ws
+org.ws
+gov.ws
+edu.ws
+
+// yt : http://www.afnic.fr/medias/documents/AFNIC-naming-policy2012.pdf
+yt
+
+// IDN ccTLDs
+// Please sort by ISO 3166 ccTLD, then punicode string
+// when submitting patches and follow this format:
+// <Punicode> ("<english word>" <language>) : <ISO 3166 ccTLD>
+// [optional sponsoring org]
+// <URL>
+
+// xn--mgbaam7a8h ("Emerat" Arabic) : AE
+//http://nic.ae/english/arabicdomain/rules.jsp
+امارات
+
+// xn--54b7fta0cc ("Bangla" Bangla) : BD
+বাংলা
+
+// xn--fiqs8s ("China" Chinese-Han-Simplified <.Zhonggou>) : CN
+// CNNIC
+// http://cnnic.cn/html/Dir/2005/10/11/3218.htm
+中国
+
+// xn--fiqz9s ("China" Chinese-Han-Traditional <.Zhonggou>) : CN
+// CNNIC
+// http://cnnic.cn/html/Dir/2005/10/11/3218.htm
+中國
+
+// xn--lgbbat1ad8j ("Algeria / Al Jazair" Arabic) : DZ
+الجزائر
+
+// xn--wgbh1c ("Egypt" Arabic .masr) : EG
+// http://www.dotmasr.eg/
+مصر
+
+// xn--node ("ge" Georgian (Mkhedruli)) : GE
+გე
+
+// xn--j6w193g ("Hong Kong" Chinese-Han) : HK
+// https://www2.hkirc.hk/register/rules.jsp
+香港
+
+// xn--h2brj9c ("Bharat" Devanagari) : IN
+// India
+भारत
+
+// xn--mgbbh1a71e ("Bharat" Arabic) : IN
+// India
+بھارت
+
+// xn--fpcrj9c3d ("Bharat" Telugu) : IN
+// India
+భారతà±
+
+// xn--gecrj9c ("Bharat" Gujarati) : IN
+// India
+ભારત
+
+// xn--s9brj9c ("Bharat" Gurmukhi) : IN
+// India
+ਭਾਰਤ
+
+// xn--45brj9c ("Bharat" Bengali) : IN
+// India
+ভারত
+
+// xn--xkc2dl3a5ee0h ("India" Tamil) : IN
+// India
+இநà¯à®¤à®¿à®¯à®¾
+
+// xn--mgba3a4f16a ("Iran" Persian) : IR
+ایران
+
+// xn--mgba3a4fra ("Iran" Arabic) : IR
+ايران
+
+//xn--mgbayh7gpa ("al-Ordon" Arabic) JO
+//National Information Technology Center (NITC)
+//Royal Scientific Society, Al-Jubeiha
+الاردن
+
+// xn--3e0b707e ("Republic of Korea" Hangul) : KR
+한국
+
+// xn--fzc2c9e2c ("Lanka" Sinhalese-Sinhala) : LK
+// http://nic.lk
+ලංකà·
+
+// xn--xkc2al3hye2a ("Ilangai" Tamil) : LK
+// http://nic.lk
+இலஙà¯à®•ை
+
+// xn--mgbc0a9azcg ("Morocco / al-Maghrib" Arabic) : MA
+المغرب
+
+// xn--mgb9awbf ("Oman" Arabic) : OM
+عمان
+
+// xn--ygbi2ammx ("Falasteen" Arabic) : PS
+// The Palestinian National Internet Naming Authority (PNINA)
+// http://www.pnina.ps
+Ùلسطين
+
+// xn--90a3ac ("srb" Cyrillic) : RS
+Ñрб
+
+// xn--p1ai ("rf" Russian-Cyrillic) : RU
+// http://www.cctld.ru/en/docs/rulesrf.php
+рф
+
+// xn--wgbl6a ("Qatar" Arabic) : QA
+// http://www.ict.gov.qa/
+قطر
+
+// xn--mgberp4a5d4ar ("AlSaudiah" Arabic) : SA
+// http://www.nic.net.sa/
+السعودية
+
+// xn--mgberp4a5d4a87g ("AlSaudiah" Arabic) variant : SA
+السعودیة
+
+// xn--mgbqly7c0a67fbc ("AlSaudiah" Arabic) variant : SA
+السعودیۃ
+
+// xn--mgbqly7cvafr ("AlSaudiah" Arabic) variant : SA
+السعوديه
+
+// xn--ogbpf8fl ("Syria" Arabic) : SY
+سورية
+
+// xn--mgbtf8fl ("Syria" Arabic) variant : SY
+سوريا
+
+// xn--yfro4i67o Singapore ("Singapore" Chinese-Han) : SG
+新加å¡
+
+// xn--clchc0ea0b2g2a9gcd ("Singapore" Tamil) : SG
+சிஙà¯à®•பà¯à®ªà¯‚à®°à¯
+
+// xn--o3cw4h ("Thai" Thai) : TH
+// http://www.thnic.co.th
+ไทย
+
+// xn--pgbs0dh ("Tunis") : TN
+// http://nic.tn
+تونس
+
+// xn--kpry57d ("Taiwan" Chinese-Han-Traditional) : TW
+// http://www.twnic.net/english/dn/dn_07a.htm
+å°ç£
+
+// xn--kprw13d ("Taiwan" Chinese-Han-Simplified) : TW
+// http://www.twnic.net/english/dn/dn_07a.htm
+å°æ¹¾
+
+// xn--nnx388a ("Taiwan") variant : TW
+臺ç£
+
+// xn--j1amh ("ukr" Cyrillic) : UA
+укр
+
+// xn--mgb2ddes ("AlYemen" Arabic) : YE
+اليمن
+
+// xxx : http://icmregistry.com
+xxx
+
+// ye : http://www.y.net.ye/services/domain_name.htm
+*.ye
+
+// za : http://www.zadna.org.za/slds.html
+*.za
+
+// zm : http://en.wikipedia.org/wiki/.zm
+*.zm
+
+// zw : http://en.wikipedia.org/wiki/.zw
+*.zw
+
+// ===END ICANN DOMAINS===
+// ===BEGIN PRIVATE DOMAINS===
+
+// info.at : http://www.info.at/
+biz.at
+info.at
+
+// priv.at : http://www.nic.priv.at/
+// Submitted by registry <lendl@nic.at> 2008-06-09
+priv.at
+
+// co.ca : http://registry.co.ca
+co.ca
+
+// CentralNic : http://www.centralnic.com/names/domains
+// Confirmed by registry <gavin.brown@centralnic.com> 2008-06-09
+ar.com
+br.com
+cn.com
+de.com
+eu.com
+gb.com
+gr.com
+hu.com
+jpn.com
+kr.com
+no.com
+qc.com
+ru.com
+sa.com
+se.com
+uk.com
+us.com
+uy.com
+za.com
+gb.net
+jp.net
+se.net
+uk.net
+ae.org
+us.org
+com.de
+
+// Opera Software, A.S.A.
+// Requested by Yngve Pettersen <yngve@opera.com> 2009-11-26
+operaunite.com
+
+// Google, Inc.
+// Requested by Eduardo Vela <evn@google.com> 2010-09-06
+appspot.com
+
+// iki.fi : Submitted by Hannu Aronsson <haa@iki.fi> 2009-11-05
+iki.fi
+
+// c.la : http://www.c.la/
+c.la
+
+// ZaNiC : http://www.za.net/
+// Confirmed by registry <hostmaster@nic.za.net> 2009-10-03
+za.net
+za.org
+
+// CoDNS B.V.
+// Added 2010-05-23.
+co.nl
+co.no
+
+// Mainseek Sp. z o.o. : http://www.co.pl/
+co.pl
+
+// DynDNS.com : http://www.dyndns.com/services/dns/dyndns/
+dyndns-at-home.com
+dyndns-at-work.com
+dyndns-blog.com
+dyndns-free.com
+dyndns-home.com
+dyndns-ip.com
+dyndns-mail.com
+dyndns-office.com
+dyndns-pics.com
+dyndns-remote.com
+dyndns-server.com
+dyndns-web.com
+dyndns-wiki.com
+dyndns-work.com
+dyndns.biz
+dyndns.info
+dyndns.org
+dyndns.tv
+at-band-camp.net
+ath.cx
+barrel-of-knowledge.info
+barrell-of-knowledge.info
+better-than.tv
+blogdns.com
+blogdns.net
+blogdns.org
+blogsite.org
+boldlygoingnowhere.org
+broke-it.net
+buyshouses.net
+cechire.com
+dnsalias.com
+dnsalias.net
+dnsalias.org
+dnsdojo.com
+dnsdojo.net
+dnsdojo.org
+does-it.net
+doesntexist.com
+doesntexist.org
+dontexist.com
+dontexist.net
+dontexist.org
+doomdns.com
+doomdns.org
+dvrdns.org
+dyn-o-saur.com
+dynalias.com
+dynalias.net
+dynalias.org
+dynathome.net
+dyndns.ws
+endofinternet.net
+endofinternet.org
+endoftheinternet.org
+est-a-la-maison.com
+est-a-la-masion.com
+est-le-patron.com
+est-mon-blogueur.com
+for-better.biz
+for-more.biz
+for-our.info
+for-some.biz
+for-the.biz
+forgot.her.name
+forgot.his.name
+from-ak.com
+from-al.com
+from-ar.com
+from-az.net
+from-ca.com
+from-co.net
+from-ct.com
+from-dc.com
+from-de.com
+from-fl.com
+from-ga.com
+from-hi.com
+from-ia.com
+from-id.com
+from-il.com
+from-in.com
+from-ks.com
+from-ky.com
+from-la.net
+from-ma.com
+from-md.com
+from-me.org
+from-mi.com
+from-mn.com
+from-mo.com
+from-ms.com
+from-mt.com
+from-nc.com
+from-nd.com
+from-ne.com
+from-nh.com
+from-nj.com
+from-nm.com
+from-nv.com
+from-ny.net
+from-oh.com
+from-ok.com
+from-or.com
+from-pa.com
+from-pr.com
+from-ri.com
+from-sc.com
+from-sd.com
+from-tn.com
+from-tx.com
+from-ut.com
+from-va.com
+from-vt.com
+from-wa.com
+from-wi.com
+from-wv.com
+from-wy.com
+ftpaccess.cc
+fuettertdasnetz.de
+game-host.org
+game-server.cc
+getmyip.com
+gets-it.net
+go.dyndns.org
+gotdns.com
+gotdns.org
+groks-the.info
+groks-this.info
+ham-radio-op.net
+here-for-more.info
+hobby-site.com
+hobby-site.org
+home.dyndns.org
+homedns.org
+homeftp.net
+homeftp.org
+homeip.net
+homelinux.com
+homelinux.net
+homelinux.org
+homeunix.com
+homeunix.net
+homeunix.org
+iamallama.com
+in-the-band.net
+is-a-anarchist.com
+is-a-blogger.com
+is-a-bookkeeper.com
+is-a-bruinsfan.org
+is-a-bulls-fan.com
+is-a-candidate.org
+is-a-caterer.com
+is-a-celticsfan.org
+is-a-chef.com
+is-a-chef.net
+is-a-chef.org
+is-a-conservative.com
+is-a-cpa.com
+is-a-cubicle-slave.com
+is-a-democrat.com
+is-a-designer.com
+is-a-doctor.com
+is-a-financialadvisor.com
+is-a-geek.com
+is-a-geek.net
+is-a-geek.org
+is-a-green.com
+is-a-guru.com
+is-a-hard-worker.com
+is-a-hunter.com
+is-a-knight.org
+is-a-landscaper.com
+is-a-lawyer.com
+is-a-liberal.com
+is-a-libertarian.com
+is-a-linux-user.org
+is-a-llama.com
+is-a-musician.com
+is-a-nascarfan.com
+is-a-nurse.com
+is-a-painter.com
+is-a-patsfan.org
+is-a-personaltrainer.com
+is-a-photographer.com
+is-a-player.com
+is-a-republican.com
+is-a-rockstar.com
+is-a-socialist.com
+is-a-soxfan.org
+is-a-student.com
+is-a-teacher.com
+is-a-techie.com
+is-a-therapist.com
+is-an-accountant.com
+is-an-actor.com
+is-an-actress.com
+is-an-anarchist.com
+is-an-artist.com
+is-an-engineer.com
+is-an-entertainer.com
+is-by.us
+is-certified.com
+is-found.org
+is-gone.com
+is-into-anime.com
+is-into-cars.com
+is-into-cartoons.com
+is-into-games.com
+is-leet.com
+is-lost.org
+is-not-certified.com
+is-saved.org
+is-slick.com
+is-uberleet.com
+is-very-bad.org
+is-very-evil.org
+is-very-good.org
+is-very-nice.org
+is-very-sweet.org
+is-with-theband.com
+isa-geek.com
+isa-geek.net
+isa-geek.org
+isa-hockeynut.com
+issmarterthanyou.com
+isteingeek.de
+istmein.de
+kicks-ass.net
+kicks-ass.org
+knowsitall.info
+land-4-sale.us
+lebtimnetz.de
+leitungsen.de
+likes-pie.com
+likescandy.com
+merseine.nu
+mine.nu
+misconfused.org
+mypets.ws
+myphotos.cc
+neat-url.com
+office-on-the.net
+on-the-web.tv
+podzone.net
+podzone.org
+readmyblog.org
+saves-the-whales.com
+scrapper-site.net
+scrapping.cc
+selfip.biz
+selfip.com
+selfip.info
+selfip.net
+selfip.org
+sells-for-less.com
+sells-for-u.com
+sells-it.net
+sellsyourhome.org
+servebbs.com
+servebbs.net
+servebbs.org
+serveftp.net
+serveftp.org
+servegame.org
+shacknet.nu
+simple-url.com
+space-to-rent.com
+stuff-4-sale.org
+stuff-4-sale.us
+teaches-yoga.com
+thruhere.net
+traeumtgerade.de
+webhop.biz
+webhop.info
+webhop.net
+webhop.org
+worse-than.tv
+writesthisblog.com
+
+// ===END PRIVATE DOMAINS===
diff --git a/deps/npm/node_modules/request/node_modules/tough-cookie/test.js b/deps/npm/node_modules/request/node_modules/tough-cookie/test.js
new file mode 100644
index 000000000..3cce815e7
--- /dev/null
+++ b/deps/npm/node_modules/request/node_modules/tough-cookie/test.js
@@ -0,0 +1,1340 @@
+/*
+ * Copyright GoInstant, Inc. and other contributors. All rights reserved.
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to
+ * deal in the Software without restriction, including without limitation the
+ * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+ * sell copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+ * IN THE SOFTWARE.
+ */
+
+var vows = require('vows');
+var assert = require('assert');
+var async = require('async');
+
+// NOTE use require("tough-cookie") in your own code:
+var tough = require('./lib/cookie');
+var Cookie = tough.Cookie;
+var CookieJar = tough.CookieJar;
+
+
+function dateVows(table) {
+ var theVows = { };
+ var keys = Object.keys(table).forEach(function(date) {
+ var expect = table[date];
+ theVows[date] = function() {
+ var got = tough.parseDate(date) ? 'valid' : 'invalid';
+ assert.equal(got, expect ? 'valid' : 'invalid');
+ };
+ });
+ return { "date parsing": theVows };
+}
+
+function matchVows(func,table) {
+ var theVows = {};
+ table.forEach(function(item) {
+ var str = item[0];
+ var dom = item[1];
+ var expect = item[2];
+ var label = str+(expect?" matches ":" doesn't match ")+dom;
+ theVows[label] = function() {
+ assert.equal(func(str,dom),expect);
+ };
+ });
+ return theVows;
+}
+
+function defaultPathVows(table) {
+ var theVows = {};
+ table.forEach(function(item) {
+ var str = item[0];
+ var expect = item[1];
+ var label = str+" gives "+expect;
+ theVows[label] = function() {
+ assert.equal(tough.defaultPath(str),expect);
+ };
+ });
+ return theVows;
+}
+
+var atNow = Date.now();
+function at(offset) { return {now: new Date(atNow+offset)} }
+
+vows.describe('Cookie Jar')
+.addBatch({
+ "all defined": function() {
+ assert.ok(Cookie);
+ assert.ok(CookieJar);
+ },
+})
+.addBatch(
+ dateVows({
+ "Wed, 09 Jun 2021 10:18:14 GMT": true,
+ "Wed, 09 Jun 2021 22:18:14 GMT": true,
+ "Tue, 18 Oct 2011 07:42:42.123 GMT": true,
+ "18 Oct 2011 07:42:42 GMT": true,
+ "8 Oct 2011 7:42:42 GMT": true,
+ "8 Oct 2011 7:2:42 GMT": false,
+ "Oct 18 2011 07:42:42 GMT": true,
+ "Tue Oct 18 2011 07:05:03 GMT+0000 (GMT)": true,
+ "09 Jun 2021 10:18:14 GMT": true,
+ "99 Jix 3038 48:86:72 ZMT": false,
+ '01 Jan 1970 00:00:00 GMT': true,
+ '01 Jan 1600 00:00:00 GMT': false, // before 1601
+ '01 Jan 1601 00:00:00 GMT': true,
+ '10 Feb 81 13:00:00 GMT': true, // implicit year
+ 'Thu, 01 Jan 1970 00:00:010 GMT': true, // strange time, non-strict OK
+ 'Thu, 17-Apr-2014 02:12:29 GMT': true, // dashes
+ 'Thu, 17-Apr-2014 02:12:29 UTC': true, // dashes and UTC
+ })
+)
+.addBatch({
+ "strict date parse of Thu, 01 Jan 1970 00:00:010 GMT": {
+ topic: function() {
+ return tough.parseDate('Thu, 01 Jan 1970 00:00:010 GMT', true) ? true : false;
+ },
+ "invalid": function(date) {
+ assert.equal(date,false);
+ },
+ }
+})
+.addBatch({
+ "formatting": {
+ "a simple cookie": {
+ topic: function() {
+ var c = new Cookie();
+ c.key = 'a';
+ c.value = 'b';
+ return c;
+ },
+ "validates": function(c) {
+ assert.ok(c.validate());
+ },
+ "to string": function(c) {
+ assert.equal(c.toString(), 'a=b');
+ },
+ },
+ "a cookie with spaces in the value": {
+ topic: function() {
+ var c = new Cookie();
+ c.key = 'a';
+ c.value = 'beta gamma';
+ return c;
+ },
+ "doesn't validate": function(c) {
+ assert.ok(!c.validate());
+ },
+ "to string": function(c) {
+ assert.equal(c.toString(), 'a="beta gamma"');
+ },
+ },
+ "with an empty value and HttpOnly": {
+ topic: function() {
+ var c = new Cookie();
+ c.key = 'a';
+ c.httpOnly = true;
+ return c;
+ },
+ "to string": function(c) {
+ assert.equal(c.toString(), 'a=; HttpOnly');
+ }
+ },
+ "with an expiry": {
+ topic: function() {
+ var c = new Cookie();
+ c.key = 'a';
+ c.value = 'b';
+ c.setExpires("Oct 18 2011 07:05:03 GMT");
+ return c;
+ },
+ "validates": function(c) {
+ assert.ok(c.validate());
+ },
+ "to string": function(c) {
+ assert.equal(c.toString(), 'a=b; Expires=Tue, 18 Oct 2011 07:05:03 GMT');
+ },
+ "to short string": function(c) {
+ assert.equal(c.cookieString(), 'a=b');
+ },
+ },
+ "with a max-age": {
+ topic: function() {
+ var c = new Cookie();
+ c.key = 'a';
+ c.value = 'b';
+ c.setExpires("Oct 18 2011 07:05:03 GMT");
+ c.maxAge = 12345;
+ return c;
+ },
+ "validates": function(c) {
+ assert.ok(c.validate()); // mabe this one *shouldn't*?
+ },
+ "to string": function(c) {
+ assert.equal(c.toString(), 'a=b; Expires=Tue, 18 Oct 2011 07:05:03 GMT; Max-Age=12345');
+ },
+ },
+ "with a bunch of things": function() {
+ var c = new Cookie();
+ c.key = 'a';
+ c.value = 'b';
+ c.setExpires("Oct 18 2011 07:05:03 GMT");
+ c.maxAge = 12345;
+ c.domain = 'example.com';
+ c.path = '/foo';
+ c.secure = true;
+ c.httpOnly = true;
+ c.extensions = ['MyExtension'];
+ assert.equal(c.toString(), 'a=b; Expires=Tue, 18 Oct 2011 07:05:03 GMT; Max-Age=12345; Domain=example.com; Path=/foo; Secure; HttpOnly; MyExtension');
+ },
+ "a host-only cookie": {
+ topic: function() {
+ var c = new Cookie();
+ c.key = 'a';
+ c.value = 'b';
+ c.hostOnly = true;
+ c.domain = 'shouldnt-stringify.example.com';
+ c.path = '/should-stringify';
+ return c;
+ },
+ "validates": function(c) {
+ assert.ok(c.validate());
+ },
+ "to string": function(c) {
+ assert.equal(c.toString(), 'a=b; Path=/should-stringify');
+ },
+ },
+ "minutes are '10'": {
+ topic: function() {
+ var c = new Cookie();
+ c.key = 'a';
+ c.value = 'b';
+ c.expires = new Date(1284113410000);
+ return c;
+ },
+ "validates": function(c) {
+ assert.ok(c.validate());
+ },
+ "to string": function(c) {
+ var str = c.toString();
+ assert.notEqual(str, 'a=b; Expires=Fri, 010 Sep 2010 010:010:010 GMT');
+ assert.equal(str, 'a=b; Expires=Fri, 10 Sep 2010 10:10:10 GMT');
+ },
+ }
+ }
+})
+.addBatch({
+ "TTL with max-age": function() {
+ var c = new Cookie();
+ c.maxAge = 123;
+ assert.equal(c.TTL(), 123000);
+ assert.equal(c.expiryTime(new Date(9000000)), 9123000);
+ },
+ "TTL with zero max-age": function() {
+ var c = new Cookie();
+ c.key = 'a'; c.value = 'b';
+ c.maxAge = 0; // should be treated as "earliest representable"
+ assert.equal(c.TTL(), 0);
+ assert.equal(c.expiryTime(new Date(9000000)), -Infinity);
+ assert.ok(!c.validate()); // not valid, really: non-zero-digit *DIGIT
+ },
+ "TTL with negative max-age": function() {
+ var c = new Cookie();
+ c.key = 'a'; c.value = 'b';
+ c.maxAge = -1; // should be treated as "earliest representable"
+ assert.equal(c.TTL(), 0);
+ assert.equal(c.expiryTime(new Date(9000000)), -Infinity);
+ assert.ok(!c.validate()); // not valid, really: non-zero-digit *DIGIT
+ },
+ "TTL with max-age and expires": function() {
+ var c = new Cookie();
+ c.maxAge = 123;
+ c.expires = new Date(Date.now()+9000);
+ assert.equal(c.TTL(), 123000);
+ assert.ok(c.isPersistent());
+ },
+ "TTL with expires": function() {
+ var c = new Cookie();
+ var now = Date.now();
+ c.expires = new Date(now+9000);
+ assert.equal(c.TTL(now), 9000);
+ assert.equal(c.expiryTime(), c.expires.getTime());
+ },
+ "TTL with old expires": function() {
+ var c = new Cookie();
+ c.setExpires('17 Oct 2010 00:00:00 GMT');
+ assert.ok(c.TTL() < 0);
+ assert.ok(c.isPersistent());
+ },
+ "default TTL": {
+ topic: function() { return new Cookie() },
+ "is Infinite-future": function(c) { assert.equal(c.TTL(), Infinity) },
+ "is a 'session' cookie": function(c) { assert.ok(!c.isPersistent()) },
+ },
+}).addBatch({
+ "Parsing": {
+ "simple": {
+ topic: function() {
+ return Cookie.parse('a=bcd',true) || null;
+ },
+ "parsed": function(c) { assert.ok(c) },
+ "key": function(c) { assert.equal(c.key, 'a') },
+ "value": function(c) { assert.equal(c.value, 'bcd') },
+ "no path": function(c) { assert.equal(c.path, null) },
+ "no domain": function(c) { assert.equal(c.domain, null) },
+ "no extensions": function(c) { assert.ok(!c.extensions) },
+ },
+ "with expiry": {
+ topic: function() {
+ return Cookie.parse('a=bcd; Expires=Tue, 18 Oct 2011 07:05:03 GMT',true) || null;
+ },
+ "parsed": function(c) { assert.ok(c) },
+ "key": function(c) { assert.equal(c.key, 'a') },
+ "value": function(c) { assert.equal(c.value, 'bcd') },
+ "has expires": function(c) {
+ assert.ok(c.expires !== Infinity, 'expiry is infinite when it shouldn\'t be');
+ assert.equal(c.expires.getTime(), 1318921503000);
+ },
+ },
+ "with expiry and path": {
+ topic: function() {
+ return Cookie.parse('abc="xyzzy!"; Expires=Tue, 18 Oct 2011 07:05:03 GMT; Path=/aBc',true) || null;
+ },
+ "parsed": function(c) { assert.ok(c) },
+ "key": function(c) { assert.equal(c.key, 'abc') },
+ "value": function(c) { assert.equal(c.value, 'xyzzy!') },
+ "has expires": function(c) {
+ assert.ok(c.expires !== Infinity, 'expiry is infinite when it shouldn\'t be');
+ assert.equal(c.expires.getTime(), 1318921503000);
+ },
+ "has path": function(c) { assert.equal(c.path, '/aBc'); },
+ "no httponly or secure": function(c) {
+ assert.ok(!c.httpOnly);
+ assert.ok(!c.secure);
+ },
+ },
+ "with everything": {
+ topic: function() {
+ return Cookie.parse('abc="xyzzy!"; Expires=Tue, 18 Oct 2011 07:05:03 GMT; Path=/aBc; Domain=example.com; Secure; HTTPOnly; Max-Age=1234; Foo=Bar; Baz', true) || null;
+ },
+ "parsed": function(c) { assert.ok(c) },
+ "key": function(c) { assert.equal(c.key, 'abc') },
+ "value": function(c) { assert.equal(c.value, 'xyzzy!') },
+ "has expires": function(c) {
+ assert.ok(c.expires !== Infinity, 'expiry is infinite when it shouldn\'t be');
+ assert.equal(c.expires.getTime(), 1318921503000);
+ },
+ "has path": function(c) { assert.equal(c.path, '/aBc'); },
+ "has domain": function(c) { assert.equal(c.domain, 'example.com'); },
+ "has httponly": function(c) { assert.equal(c.httpOnly, true); },
+ "has secure": function(c) { assert.equal(c.secure, true); },
+ "has max-age": function(c) { assert.equal(c.maxAge, 1234); },
+ "has extensions": function(c) {
+ assert.ok(c.extensions);
+ assert.equal(c.extensions[0], 'Foo=Bar');
+ assert.equal(c.extensions[1], 'Baz');
+ },
+ },
+ "invalid expires": {
+ "strict": function() { assert.ok(!Cookie.parse("a=b; Expires=xyzzy", true)) },
+ "non-strict": function() {
+ var c = Cookie.parse("a=b; Expires=xyzzy");
+ assert.ok(c);
+ assert.equal(c.expires, Infinity);
+ },
+ },
+ "zero max-age": {
+ "strict": function() { assert.ok(!Cookie.parse("a=b; Max-Age=0", true)) },
+ "non-strict": function() {
+ var c = Cookie.parse("a=b; Max-Age=0");
+ assert.ok(c);
+ assert.equal(c.maxAge, 0);
+ },
+ },
+ "negative max-age": {
+ "strict": function() { assert.ok(!Cookie.parse("a=b; Max-Age=-1", true)) },
+ "non-strict": function() {
+ var c = Cookie.parse("a=b; Max-Age=-1");
+ assert.ok(c);
+ assert.equal(c.maxAge, -1);
+ },
+ },
+ "empty domain": {
+ "strict": function() { assert.ok(!Cookie.parse("a=b; domain=", true)) },
+ "non-strict": function() {
+ var c = Cookie.parse("a=b; domain=");
+ assert.ok(c);
+ assert.equal(c.domain, null);
+ },
+ },
+ "dot domain": {
+ "strict": function() { assert.ok(!Cookie.parse("a=b; domain=.", true)) },
+ "non-strict": function() {
+ var c = Cookie.parse("a=b; domain=.");
+ assert.ok(c);
+ assert.equal(c.domain, null);
+ },
+ },
+ "uppercase domain": {
+ "strict lowercases": function() {
+ var c = Cookie.parse("a=b; domain=EXAMPLE.COM");
+ assert.ok(c);
+ assert.equal(c.domain, 'example.com');
+ },
+ "non-strict lowercases": function() {
+ var c = Cookie.parse("a=b; domain=EXAMPLE.COM");
+ assert.ok(c);
+ assert.equal(c.domain, 'example.com');
+ },
+ },
+ "trailing dot in domain": {
+ topic: function() {
+ return Cookie.parse("a=b; Domain=example.com.", true) || null;
+ },
+ "has the domain": function(c) { assert.equal(c.domain,"example.com.") },
+ "but doesn't validate": function(c) { assert.equal(c.validate(),false) },
+ },
+ "empty path": {
+ "strict": function() { assert.ok(!Cookie.parse("a=b; path=", true)) },
+ "non-strict": function() {
+ var c = Cookie.parse("a=b; path=");
+ assert.ok(c);
+ assert.equal(c.path, null);
+ },
+ },
+ "no-slash path": {
+ "strict": function() { assert.ok(!Cookie.parse("a=b; path=xyzzy", true)) },
+ "non-strict": function() {
+ var c = Cookie.parse("a=b; path=xyzzy");
+ assert.ok(c);
+ assert.equal(c.path, null);
+ },
+ },
+ "trailing semi-colons after path": {
+ topic: function () {
+ return [
+ "a=b; path=/;",
+ "c=d;;;;"
+ ];
+ },
+ "strict": function (t) {
+ assert.ok(!Cookie.parse(t[0], true));
+ assert.ok(!Cookie.parse(t[1], true));
+ },
+ "non-strict": function (t) {
+ var c1 = Cookie.parse(t[0]);
+ var c2 = Cookie.parse(t[1]);
+ assert.ok(c1);
+ assert.ok(c2);
+ assert.equal(c1.path, '/');
+ }
+ },
+ "secure-with-value": {
+ "strict": function() { assert.ok(!Cookie.parse("a=b; Secure=xyzzy", true)) },
+ "non-strict": function() {
+ var c = Cookie.parse("a=b; Secure=xyzzy");
+ assert.ok(c);
+ assert.equal(c.secure, true);
+ },
+ },
+ "httponly-with-value": {
+ "strict": function() { assert.ok(!Cookie.parse("a=b; HttpOnly=xyzzy", true)) },
+ "non-strict": function() {
+ var c = Cookie.parse("a=b; HttpOnly=xyzzy");
+ assert.ok(c);
+ assert.equal(c.httpOnly, true);
+ },
+ },
+ "garbage": {
+ topic: function() {
+ return Cookie.parse("\x08", true) || null;
+ },
+ "doesn't parse": function(c) { assert.equal(c,null) },
+ },
+ "public suffix domain": {
+ topic: function() {
+ return Cookie.parse("a=b; domain=kyoto.jp", true) || null;
+ },
+ "parses fine": function(c) {
+ assert.ok(c);
+ assert.equal(c.domain, 'kyoto.jp');
+ },
+ "but fails validation": function(c) {
+ assert.ok(c);
+ assert.ok(!c.validate());
+ },
+ },
+ "Ironically, Google 'GAPS' cookie has very little whitespace": {
+ topic: function() {
+ return Cookie.parse("GAPS=1:A1aaaaAaAAa1aaAaAaaAAAaaa1a11a:aaaAaAaAa-aaaA1-;Path=/;Expires=Thu, 17-Apr-2014 02:12:29 GMT;Secure;HttpOnly");
+ },
+ "parsed": function(c) { assert.ok(c) },
+ "key": function(c) { assert.equal(c.key, 'GAPS') },
+ "value": function(c) { assert.equal(c.value, '1:A1aaaaAaAAa1aaAaAaaAAAaaa1a11a:aaaAaAaAa-aaaA1-') },
+ "path": function(c) {
+ assert.notEqual(c.path, '/;Expires'); // BUG
+ assert.equal(c.path, '/');
+ },
+ "expires": function(c) {
+ assert.notEqual(c.expires, Infinity);
+ assert.equal(c.expires.getTime(), 1397700749000);
+ },
+ "secure": function(c) { assert.ok(c.secure) },
+ "httponly": function(c) { assert.ok(c.httpOnly) },
+ },
+ "lots of equal signs": {
+ topic: function() {
+ return Cookie.parse("queryPref=b=c&d=e; Path=/f=g; Expires=Thu, 17 Apr 2014 02:12:29 GMT; HttpOnly");
+ },
+ "parsed": function(c) { assert.ok(c) },
+ "key": function(c) { assert.equal(c.key, 'queryPref') },
+ "value": function(c) { assert.equal(c.value, 'b=c&d=e') },
+ "path": function(c) {
+ assert.equal(c.path, '/f=g');
+ },
+ "expires": function(c) {
+ assert.notEqual(c.expires, Infinity);
+ assert.equal(c.expires.getTime(), 1397700749000);
+ },
+ "httponly": function(c) { assert.ok(c.httpOnly) },
+ }
+ }
+})
+.addBatch({
+ "domain normalization": {
+ "simple": function() {
+ var c = new Cookie();
+ c.domain = "EXAMPLE.com";
+ assert.equal(c.canonicalizedDomain(), "example.com");
+ },
+ "extra dots": function() {
+ var c = new Cookie();
+ c.domain = ".EXAMPLE.com";
+ assert.equal(c.cdomain(), "example.com");
+ },
+ "weird trailing dot": function() {
+ var c = new Cookie();
+ c.domain = "EXAMPLE.ca.";
+ assert.equal(c.canonicalizedDomain(), "example.ca.");
+ },
+ "weird internal dots": function() {
+ var c = new Cookie();
+ c.domain = "EXAMPLE...ca.";
+ assert.equal(c.canonicalizedDomain(), "example...ca.");
+ },
+ "IDN": function() {
+ var c = new Cookie();
+ c.domain = "δοκιμή.δοκιμή"; // "test.test" in greek
+ assert.equal(c.canonicalizedDomain(), "xn--jxalpdlp.xn--jxalpdlp");
+ }
+ }
+})
+.addBatch({
+ "Domain Match":matchVows(tough.domainMatch, [
+ // str, dom, expect
+ ["example.com", "example.com", true],
+ ["eXaMpLe.cOm", "ExAmPlE.CoM", true],
+ ["no.ca", "yes.ca", false],
+ ["wwwexample.com", "example.com", false],
+ ["www.example.com", "example.com", true],
+ ["example.com", "www.example.com", false],
+ ["www.subdom.example.com", "example.com", true],
+ ["www.subdom.example.com", "subdom.example.com", true],
+ ["example.com", "example.com.", false], // RFC6265 S4.1.2.3
+ ["192.168.0.1", "168.0.1", false], // S5.1.3 "The string is a host name"
+ [null, "example.com", null],
+ ["example.com", null, null],
+ [null, null, null],
+ [undefined, undefined, null],
+ ])
+})
+.addBatch({
+ "default-path": defaultPathVows([
+ [null,"/"],
+ ["/","/"],
+ ["/file","/"],
+ ["/dir/file","/dir"],
+ ["noslash","/"],
+ ])
+})
+.addBatch({
+ "Path-Match": matchVows(tough.pathMatch, [
+ // request, cookie, match
+ ["/","/",true],
+ ["/dir","/",true],
+ ["/","/dir",false],
+ ["/dir/","/dir/", true],
+ ["/dir/file","/dir/",true],
+ ["/dir/file","/dir",true],
+ ["/directory","/dir",false],
+ ])
+})
+.addBatch({
+ "Cookie Sorting": {
+ topic: function() {
+ var cookies = [];
+ var now = Date.now();
+ cookies.push(Cookie.parse("a=0; Domain=example.com"));
+ cookies.push(Cookie.parse("b=1; Domain=www.example.com"));
+ cookies.push(Cookie.parse("c=2; Domain=example.com; Path=/pathA"));
+ cookies.push(Cookie.parse("d=3; Domain=www.example.com; Path=/pathA"));
+ cookies.push(Cookie.parse("e=4; Domain=example.com; Path=/pathA/pathB"));
+ cookies.push(Cookie.parse("f=5; Domain=www.example.com; Path=/pathA/pathB"));
+
+ // force a stable creation time consistent with the order above since
+ // some may have been created at now + 1ms.
+ var i = cookies.length;
+ cookies.forEach(function(cookie) {
+ cookie.creation = new Date(now - 100*(i--));
+ });
+
+ // weak shuffle:
+ cookies = cookies.sort(function(){return Math.random()-0.5});
+
+ cookies = cookies.sort(tough.cookieCompare);
+ return cookies;
+ },
+ "got": function(cookies) {
+ assert.lengthOf(cookies, 6);
+ var names = cookies.map(function(c) {return c.key});
+ assert.deepEqual(names, ['e','f','c','d','a','b']);
+ },
+ }
+})
+.addBatch({
+ "CookieJar": {
+ "Setting a basic cookie": {
+ topic: function() {
+ var cj = new CookieJar();
+ var c = Cookie.parse("a=b; Domain=example.com; Path=/");
+ assert.strictEqual(c.hostOnly, null);
+ assert.instanceOf(c.creation, Date);
+ assert.strictEqual(c.lastAccessed, null);
+ c.creation = new Date(Date.now()-10000);
+ cj.setCookie(c, 'http://example.com/index.html', this.callback);
+ },
+ "works": function(c) { assert.instanceOf(c,Cookie) }, // C is for Cookie, good enough for me
+ "gets timestamped": function(c) {
+ assert.ok(c.creation);
+ assert.ok(Date.now() - c.creation.getTime() < 5000); // recently stamped
+ assert.ok(c.lastAccessed);
+ assert.equal(c.creation, c.lastAccessed);
+ assert.equal(c.TTL(), Infinity);
+ assert.ok(!c.isPersistent());
+ },
+ },
+ "Setting a no-path cookie": {
+ topic: function() {
+ var cj = new CookieJar();
+ var c = Cookie.parse("a=b; Domain=example.com");
+ assert.strictEqual(c.hostOnly, null);
+ assert.instanceOf(c.creation, Date);
+ assert.strictEqual(c.lastAccessed, null);
+ c.creation = new Date(Date.now()-10000);
+ cj.setCookie(c, 'http://example.com/index.html', this.callback);
+ },
+ "domain": function(c) { assert.equal(c.domain, 'example.com') },
+ "path is /": function(c) { assert.equal(c.path, '/') },
+ "path was derived": function(c) { assert.strictEqual(c.pathIsDefault, true) },
+ },
+ "Setting a cookie already marked as host-only": {
+ topic: function() {
+ var cj = new CookieJar();
+ var c = Cookie.parse("a=b; Domain=example.com");
+ assert.strictEqual(c.hostOnly, null);
+ assert.instanceOf(c.creation, Date);
+ assert.strictEqual(c.lastAccessed, null);
+ c.creation = new Date(Date.now()-10000);
+ c.hostOnly = true;
+ cj.setCookie(c, 'http://example.com/index.html', this.callback);
+ },
+ "domain": function(c) { assert.equal(c.domain, 'example.com') },
+ "still hostOnly": function(c) { assert.strictEqual(c.hostOnly, true) },
+ },
+ "Setting a session cookie": {
+ topic: function() {
+ var cj = new CookieJar();
+ var c = Cookie.parse("a=b");
+ assert.strictEqual(c.path, null);
+ cj.setCookie(c, 'http://www.example.com/dir/index.html', this.callback);
+ },
+ "works": function(c) { assert.instanceOf(c,Cookie) },
+ "gets the domain": function(c) { assert.equal(c.domain, 'www.example.com') },
+ "gets the default path": function(c) { assert.equal(c.path, '/dir') },
+ "is 'hostOnly'": function(c) { assert.ok(c.hostOnly) },
+ },
+ "Setting wrong domain cookie": {
+ topic: function() {
+ var cj = new CookieJar();
+ var c = Cookie.parse("a=b; Domain=fooxample.com; Path=/");
+ cj.setCookie(c, 'http://example.com/index.html', this.callback);
+ },
+ "fails": function(err,c) {
+ assert.ok(err.message.match(/domain/i));
+ assert.ok(!c);
+ },
+ },
+ "Setting sub-domain cookie": {
+ topic: function() {
+ var cj = new CookieJar();
+ var c = Cookie.parse("a=b; Domain=www.example.com; Path=/");
+ cj.setCookie(c, 'http://example.com/index.html', this.callback);
+ },
+ "fails": function(err,c) {
+ assert.ok(err.message.match(/domain/i));
+ assert.ok(!c);
+ },
+ },
+ "Setting super-domain cookie": {
+ topic: function() {
+ var cj = new CookieJar();
+ var c = Cookie.parse("a=b; Domain=example.com; Path=/");
+ cj.setCookie(c, 'http://www.app.example.com/index.html', this.callback);
+ },
+ "success": function(err,c) {
+ assert.ok(!err);
+ assert.equal(c.domain, 'example.com');
+ },
+ },
+ "Setting HttpOnly cookie over non-HTTP API": {
+ topic: function() {
+ var cj = new CookieJar();
+ var c = Cookie.parse("a=b; Domain=example.com; Path=/; HttpOnly");
+ cj.setCookie(c, 'http://example.com/index.html', {http:false}, this.callback);
+ },
+ "fails": function(err,c) {
+ assert.match(err.message, /HttpOnly/i);
+ assert.ok(!c);
+ },
+ },
+ },
+ "Cookie Jar store eight cookies": {
+ topic: function() {
+ var cj = new CookieJar();
+ var ex = 'http://example.com/index.html';
+ var tasks = [];
+ tasks.push(function(next) {
+ cj.setCookie('a=1; Domain=example.com; Path=/',ex,at(0),next);
+ });
+ tasks.push(function(next) {
+ cj.setCookie('b=2; Domain=example.com; Path=/; HttpOnly',ex,at(1000),next);
+ });
+ tasks.push(function(next) {
+ cj.setCookie('c=3; Domain=example.com; Path=/; Secure',ex,at(2000),next);
+ });
+ tasks.push(function(next) { // path
+ cj.setCookie('d=4; Domain=example.com; Path=/foo',ex,at(3000),next);
+ });
+ tasks.push(function(next) { // host only
+ cj.setCookie('e=5',ex,at(4000),next);
+ });
+ tasks.push(function(next) { // other domain
+ cj.setCookie('f=6; Domain=nodejs.org; Path=/','http://nodejs.org',at(5000),next);
+ });
+ tasks.push(function(next) { // expired
+ cj.setCookie('g=7; Domain=example.com; Path=/; Expires=Tue, 18 Oct 2011 00:00:00 GMT',ex,at(6000),next);
+ });
+ tasks.push(function(next) { // expired via Max-Age
+ cj.setCookie('h=8; Domain=example.com; Path=/; Max-Age=1',ex,next);
+ });
+ var cb = this.callback;
+ async.parallel(tasks, function(err,results){
+ setTimeout(function() {
+ cb(err,cj,results);
+ }, 2000); // so that 'h=8' expires
+ });
+ },
+ "setup ok": function(err,cj,results) {
+ assert.ok(1);
+ },
+ "then retrieving for http://nodejs.org": {
+ topic: function(cj,results) {
+ cj.getCookies('http://nodejs.org',this.callback);
+ },
+ "get a nodejs cookie": function(cookies) {
+ assert.lengthOf(cookies, 1);
+ var cookie = cookies[0];
+ assert.equal(cookie.domain, 'nodejs.org');
+ },
+ },
+ "then retrieving for https://example.com": {
+ topic: function(cj,results) {
+ cj.getCookies('https://example.com',{secure:true},this.callback);
+ },
+ "get a secure example cookie with others": function(cookies) {
+ var names = cookies.map(function(c) {return c.key});
+ assert.deepEqual(names, ['a','b','c','e']);
+ },
+ },
+ "then retrieving for https://example.com (missing options)": {
+ topic: function(cj,results) {
+ cj.getCookies('https://example.com',this.callback);
+ },
+ "get a secure example cookie with others": function(cookies) {
+ var names = cookies.map(function(c) {return c.key});
+ assert.deepEqual(names, ['a','b','c','e']);
+ },
+ },
+ "then retrieving for http://example.com": {
+ topic: function(cj,results) {
+ cj.getCookies('http://example.com',this.callback);
+ },
+ "get a bunch of cookies": function(cookies) {
+ var names = cookies.map(function(c) {return c.key});
+ assert.deepEqual(names, ['a','b','e']);
+ },
+ },
+ "then retrieving for http://EXAMPlE.com": {
+ topic: function(cj,results) {
+ cj.getCookies('http://EXAMPlE.com',this.callback);
+ },
+ "get a bunch of cookies": function(cookies) {
+ var names = cookies.map(function(c) {return c.key});
+ assert.deepEqual(names, ['a','b','e']);
+ },
+ },
+ "then retrieving for http://example.com, non-HTTP": {
+ topic: function(cj,results) {
+ cj.getCookies('http://example.com',{http:false},this.callback);
+ },
+ "get a bunch of cookies": function(cookies) {
+ var names = cookies.map(function(c) {return c.key});
+ assert.deepEqual(names, ['a','e']);
+ },
+ },
+ "then retrieving for http://example.com/foo/bar": {
+ topic: function(cj,results) {
+ cj.getCookies('http://example.com/foo/bar',this.callback);
+ },
+ "get a bunch of cookies": function(cookies) {
+ var names = cookies.map(function(c) {return c.key});
+ assert.deepEqual(names, ['d','a','b','e']);
+ },
+ },
+ "then retrieving for http://example.com as a string": {
+ topic: function(cj,results) {
+ cj.getCookieString('http://example.com',this.callback);
+ },
+ "get a single string": function(cookieHeader) {
+ assert.equal(cookieHeader, "a=1; b=2; e=5");
+ },
+ },
+ "then retrieving for http://example.com as a set-cookie header": {
+ topic: function(cj,results) {
+ cj.getSetCookieStrings('http://example.com',this.callback);
+ },
+ "get a single string": function(cookieHeaders) {
+ assert.lengthOf(cookieHeaders, 3);
+ assert.equal(cookieHeaders[0], "a=1; Domain=example.com; Path=/");
+ assert.equal(cookieHeaders[1], "b=2; Domain=example.com; Path=/; HttpOnly");
+ assert.equal(cookieHeaders[2], "e=5; Path=/");
+ },
+ },
+ "then retrieving for http://www.example.com/": {
+ topic: function(cj,results) {
+ cj.getCookies('http://www.example.com/foo/bar',this.callback);
+ },
+ "get a bunch of cookies": function(cookies) {
+ var names = cookies.map(function(c) {return c.key});
+ assert.deepEqual(names, ['d','a','b']); // note lack of 'e'
+ },
+ },
+ },
+ "Repeated names": {
+ topic: function() {
+ var cb = this.callback;
+ var cj = new CookieJar();
+ var ex = 'http://www.example.com/';
+ var sc = cj.setCookie;
+ var tasks = [];
+ var now = Date.now();
+ tasks.push(sc.bind(cj,'aaaa=xxxx',ex,at(0)));
+ tasks.push(sc.bind(cj,'aaaa=1111; Domain=www.example.com',ex,at(1000)));
+ tasks.push(sc.bind(cj,'aaaa=2222; Domain=example.com',ex,at(2000)));
+ tasks.push(sc.bind(cj,'aaaa=3333; Domain=www.example.com; Path=/pathA',ex,at(3000)));
+ async.series(tasks,function(err,results) {
+ results = results.filter(function(e) {return e !== undefined});
+ cb(err,{cj:cj, cookies:results, now:now});
+ });
+ },
+ "all got set": function(err,t) {
+ assert.lengthOf(t.cookies,4);
+ },
+ "then getting 'em back": {
+ topic: function(t) {
+ var cj = t.cj;
+ cj.getCookies('http://www.example.com/pathA',this.callback);
+ },
+ "there's just three": function (err,cookies) {
+ var vals = cookies.map(function(c) {return c.value});
+ // may break with sorting; sorting should put 3333 first due to longest path:
+ assert.deepEqual(vals, ['3333','1111','2222']);
+ }
+ },
+ },
+ "CookieJar setCookie errors": {
+ "public-suffix domain": {
+ topic: function() {
+ var cj = new CookieJar();
+ cj.setCookie('i=9; Domain=kyoto.jp; Path=/','kyoto.jp',this.callback);
+ },
+ "errors": function(err,cookie) {
+ assert.ok(err);
+ assert.ok(!cookie);
+ assert.match(err.message, /public suffix/i);
+ },
+ },
+ "wrong domain": {
+ topic: function() {
+ var cj = new CookieJar();
+ cj.setCookie('j=10; Domain=google.com; Path=/','google.ca',this.callback);
+ },
+ "errors": function(err,cookie) {
+ assert.ok(err);
+ assert.ok(!cookie);
+ assert.match(err.message, /not in this host's domain/i);
+ },
+ },
+ "old cookie is HttpOnly": {
+ topic: function() {
+ var cb = this.callback;
+ var next = function (err,c) {
+ return cb(err,cj);
+ };
+ var cj = new CookieJar();
+ cj.setCookie('k=11; Domain=example.ca; Path=/; HttpOnly','http://example.ca',{http:true},next);
+ },
+ "initial cookie is set": function(err,cj) {
+ assert.ok(!err);
+ },
+ "but when trying to overwrite": {
+ topic: function(cj) {
+ var cb = this.callback;
+ cj.setCookie('k=12; Domain=example.ca; Path=/','http://example.ca',{http:false},function(err,c) {cb(null,err)});
+ },
+ "it's an error": function(err) {
+ assert.ok(err);
+ },
+ "then, checking the original": {
+ topic: function(ignored,cj) {
+ assert.ok(cj instanceof CookieJar);
+ cj.getCookies('http://example.ca',{http:true},this.callback);
+ },
+ "cookie has original value": function(err,cookies) {
+ assert.equal(err,null);
+ assert.lengthOf(cookies, 1);
+ assert.equal(cookies[0].value,11);
+ },
+ },
+ },
+ },
+ },
+})
+.addBatch({
+ "JSON": {
+ "serialization": {
+ topic: function() {
+ var c = Cookie.parse('alpha=beta; Domain=example.com; Path=/foo; Expires=Tue, 19 Jan 2038 03:14:07 GMT; HttpOnly');
+ return JSON.stringify(c);
+ },
+ "gives a string": function(str) {
+ assert.equal(typeof str, "string");
+ },
+ "date is in ISO format": function(str) {
+ assert.match(str, /"expires":"2038-01-19T03:14:07\.000Z"/, 'expires is in ISO format');
+ },
+ },
+ "deserialization": {
+ topic: function() {
+ var json = '{"key":"alpha","value":"beta","domain":"example.com","path":"/foo","expires":"2038-01-19T03:14:07.000Z","httpOnly":true,"lastAccessed":2000000000123}';
+ return Cookie.fromJSON(json);
+ },
+ "works": function(c) {
+ assert.ok(c);
+ },
+ "key": function(c) { assert.equal(c.key, "alpha") },
+ "value": function(c) { assert.equal(c.value, "beta") },
+ "domain": function(c) { assert.equal(c.domain, "example.com") },
+ "path": function(c) { assert.equal(c.path, "/foo") },
+ "httpOnly": function(c) { assert.strictEqual(c.httpOnly, true) },
+ "secure": function(c) { assert.strictEqual(c.secure, false) },
+ "hostOnly": function(c) { assert.strictEqual(c.hostOnly, null) },
+ "expires is a date object": function(c) {
+ assert.equal(c.expires.getTime(), 2147483647000);
+ },
+ "lastAccessed is a date object": function(c) {
+ assert.equal(c.lastAccessed.getTime(), 2000000000123);
+ },
+ "creation defaulted": function(c) {
+ assert.ok(c.creation.getTime());
+ }
+ },
+ "null deserialization": {
+ topic: function() {
+ return Cookie.fromJSON(null);
+ },
+ "is null": function(cookie) {
+ assert.equal(cookie,null);
+ },
+ },
+ },
+ "expiry deserialization": {
+ "Infinity": {
+ topic: Cookie.fromJSON.bind(null, '{"expires":"Infinity"}'),
+ "is infinite": function(c) {
+ assert.strictEqual(c.expires, "Infinity");
+ assert.equal(c.expires, Infinity);
+ },
+ },
+ },
+ "maxAge serialization": {
+ topic: function() {
+ return function(toSet) {
+ var c = new Cookie();
+ c.key = 'foo'; c.value = 'bar';
+ c.setMaxAge(toSet);
+ return JSON.stringify(c);
+ };
+ },
+ "zero": {
+ topic: function(f) { return f(0) },
+ "looks good": function(str) {
+ assert.match(str, /"maxAge":0/);
+ },
+ },
+ "Infinity": {
+ topic: function(f) { return f(Infinity) },
+ "looks good": function(str) {
+ assert.match(str, /"maxAge":"Infinity"/);
+ },
+ },
+ "-Infinity": {
+ topic: function(f) { return f(-Infinity) },
+ "looks good": function(str) {
+ assert.match(str, /"maxAge":"-Infinity"/);
+ },
+ },
+ "null": {
+ topic: function(f) { return f(null) },
+ "looks good": function(str) {
+ assert.match(str, /"maxAge":null/);
+ },
+ },
+ },
+ "maxAge deserialization": {
+ "number": {
+ topic: Cookie.fromJSON.bind(null,'{"key":"foo","value":"bar","maxAge":123}'),
+ "is the number": function(c) {
+ assert.strictEqual(c.maxAge, 123);
+ },
+ },
+ "null": {
+ topic: Cookie.fromJSON.bind(null,'{"key":"foo","value":"bar","maxAge":null}'),
+ "is null": function(c) {
+ assert.strictEqual(c.maxAge, null);
+ },
+ },
+ "less than zero": {
+ topic: Cookie.fromJSON.bind(null,'{"key":"foo","value":"bar","maxAge":-123}'),
+ "is -123": function(c) {
+ assert.strictEqual(c.maxAge, -123);
+ },
+ },
+ "Infinity": {
+ topic: Cookie.fromJSON.bind(null,'{"key":"foo","value":"bar","maxAge":"Infinity"}'),
+ "is inf-as-string": function(c) {
+ assert.strictEqual(c.maxAge, "Infinity");
+ },
+ },
+ "-Infinity": {
+ topic: Cookie.fromJSON.bind(null,'{"key":"foo","value":"bar","maxAge":"-Infinity"}'),
+ "is inf-as-string": function(c) {
+ assert.strictEqual(c.maxAge, "-Infinity");
+ },
+ },
+ }
+})
+.addBatch({
+ "permuteDomain": {
+ "base case": {
+ topic: tough.permuteDomain.bind(null,'example.com'),
+ "got the domain": function(list) {
+ assert.deepEqual(list, ['example.com']);
+ },
+ },
+ "two levels": {
+ topic: tough.permuteDomain.bind(null,'foo.bar.example.com'),
+ "got three things": function(list) {
+ assert.deepEqual(list, ['example.com','bar.example.com','foo.bar.example.com']);
+ },
+ },
+ "invalid domain": {
+ topic: tough.permuteDomain.bind(null,'foo.bar.example.localduhmain'),
+ "got three things": function(list) {
+ assert.equal(list, null);
+ },
+ },
+ },
+ "permutePath": {
+ "base case": {
+ topic: tough.permutePath.bind(null,'/'),
+ "just slash": function(list) {
+ assert.deepEqual(list,['/']);
+ },
+ },
+ "single case": {
+ topic: tough.permutePath.bind(null,'/foo'),
+ "two things": function(list) {
+ assert.deepEqual(list,['/foo','/']);
+ },
+ "path matching": function(list) {
+ list.forEach(function(e) {
+ assert.ok(tough.pathMatch('/foo',e));
+ });
+ },
+ },
+ "double case": {
+ topic: tough.permutePath.bind(null,'/foo/bar'),
+ "four things": function(list) {
+ assert.deepEqual(list,['/foo/bar','/foo','/']);
+ },
+ "path matching": function(list) {
+ list.forEach(function(e) {
+ assert.ok(tough.pathMatch('/foo/bar',e));
+ });
+ },
+ },
+ "trailing slash": {
+ topic: tough.permutePath.bind(null,'/foo/bar/'),
+ "three things": function(list) {
+ assert.deepEqual(list,['/foo/bar','/foo','/']);
+ },
+ "path matching": function(list) {
+ list.forEach(function(e) {
+ assert.ok(tough.pathMatch('/foo/bar/',e));
+ });
+ },
+ },
+ }
+})
+.addBatch({
+ "Issue 1": {
+ topic: function() {
+ var cj = new CookieJar();
+ cj.setCookie('hello=world; path=/some/path/', 'http://domain/some/path/file', function(err,cookie) {
+ this.callback(err,{cj:cj, cookie:cookie});
+ }.bind(this));
+ },
+ "stored a cookie": function(t) {
+ assert.ok(t.cookie);
+ },
+ "cookie's path was modified to remove unnecessary slash": function(t) {
+ assert.equal(t.cookie.path, '/some/path');
+ },
+ "getting it back": {
+ topic: function(t) {
+ t.cj.getCookies('http://domain/some/path/file', function(err,cookies) {
+ this.callback(err, {cj:t.cj, cookies:cookies||[]});
+ }.bind(this));
+ },
+ "got one cookie": function(t) {
+ assert.lengthOf(t.cookies, 1);
+ },
+ "it's the right one": function(t) {
+ var c = t.cookies[0];
+ assert.equal(c.key, 'hello');
+ assert.equal(c.value, 'world');
+ },
+ }
+ }
+})
+.addBatch({
+ "expiry option": {
+ topic: function() {
+ var cb = this.callback;
+ var cj = new CookieJar();
+ cj.setCookie('near=expiry; Domain=example.com; Path=/; Max-Age=1','http://www.example.com',at(-1), function(err,cookie) {
+
+ cb(err, {cj:cj, cookie:cookie});
+ });
+ },
+ "set the cookie": function(t) {
+ assert.ok(t.cookie, "didn't set?!");
+ assert.equal(t.cookie.key, 'near');
+ },
+ "then, retrieving": {
+ topic: function(t) {
+ var cb = this.callback;
+ setTimeout(function() {
+ t.cj.getCookies('http://www.example.com', {http:true, expire:false}, function(err,cookies) {
+ t.cookies = cookies;
+ cb(err,t);
+ });
+ },2000);
+ },
+ "got the cookie": function(t) {
+ assert.lengthOf(t.cookies, 1);
+ assert.equal(t.cookies[0].key, 'near');
+ },
+ }
+ }
+})
+.addBatch({
+ "trailing semi-colon set into cj": {
+ topic: function () {
+ var cb = this.callback;
+ var cj = new CookieJar();
+ var ex = 'http://www.example.com';
+ var tasks = [];
+ tasks.push(function(next) {
+ cj.setCookie('broken_path=testme; path=/;',ex,at(-1),next);
+ });
+ tasks.push(function(next) {
+ cj.setCookie('b=2; Path=/;;;;',ex,at(-1),next);
+ });
+ async.parallel(tasks, function (err, cookies) {
+ cb(null, {
+ cj: cj,
+ cookies: cookies
+ });
+ });
+ },
+ "check number of cookies": function (t) {
+ assert.lengthOf(t.cookies, 2, "didn't set");
+ },
+ "check *broken_path* was set properly": function (t) {
+ assert.equal(t.cookies[0].key, "broken_path");
+ assert.equal(t.cookies[0].value, "testme");
+ assert.equal(t.cookies[0].path, "/");
+ },
+ "check *b* was set properly": function (t) {
+ assert.equal(t.cookies[1].key, "b");
+ assert.equal(t.cookies[1].value, "2");
+ assert.equal(t.cookies[1].path, "/");
+ },
+ "retrieve the cookie": {
+ topic: function (t) {
+ var cb = this.callback;
+ t.cj.getCookies('http://www.example.com', {}, function (err, cookies) {
+ t.cookies = cookies;
+ cb(err, t);
+ });
+ },
+ "get the cookie": function(t) {
+ assert.lengthOf(t.cookies, 2);
+ assert.equal(t.cookies[0].key, 'broken_path');
+ assert.equal(t.cookies[0].value, 'testme');
+ assert.equal(t.cookies[1].key, "b");
+ assert.equal(t.cookies[1].value, "2");
+ assert.equal(t.cookies[1].path, "/");
+ },
+ },
+ }
+})
+.addBatch({
+ "Constructor":{
+ topic: function () {
+ return new Cookie({
+ key: 'test',
+ value: 'b',
+ maxAge: 60
+ });
+ },
+ 'check for key property': function (c) {
+ assert.ok(c);
+ assert.equal(c.key, 'test');
+ },
+ 'check for value property': function (c) {
+ assert.equal(c.value, 'b');
+ },
+ 'check for maxAge': function (c) {
+ assert.equal(c.maxAge, 60);
+ },
+ 'check for default values for unspecified properties': function (c) {
+ assert.equal(c.expires, "Infinity");
+ assert.equal(c.secure, false);
+ assert.equal(c.httpOnly, false);
+ }
+ }
+})
+.addBatch({
+ "allPaths option": {
+ topic: function() {
+ var cj = new CookieJar();
+ var tasks = [];
+ tasks.push(cj.setCookie.bind(cj, 'nopath_dom=qq; Path=/; Domain=example.com', 'http://example.com', {}));
+ tasks.push(cj.setCookie.bind(cj, 'path_dom=qq; Path=/foo; Domain=example.com', 'http://example.com', {}));
+ tasks.push(cj.setCookie.bind(cj, 'nopath_host=qq; Path=/', 'http://www.example.com', {}));
+ tasks.push(cj.setCookie.bind(cj, 'path_host=qq; Path=/foo', 'http://www.example.com', {}));
+ tasks.push(cj.setCookie.bind(cj, 'other=qq; Path=/', 'http://other.example.com/', {}));
+ tasks.push(cj.setCookie.bind(cj, 'other2=qq; Path=/foo', 'http://other.example.com/foo', {}));
+ var cb = this.callback;
+ async.parallel(tasks, function(err,results) {
+ cb(err, {cj:cj, cookies: results});
+ });
+ },
+ "all set": function(t) {
+ assert.equal(t.cookies.length, 6);
+ assert.ok(t.cookies.every(function(c) { return !!c }));
+ },
+ "getting without allPaths": {
+ topic: function(t) {
+ var cb = this.callback;
+ var cj = t.cj;
+ cj.getCookies('http://www.example.com/', {}, function(err,cookies) {
+ cb(err, {cj:cj, cookies:cookies});
+ });
+ },
+ "found just two cookies": function(t) {
+ assert.equal(t.cookies.length, 2);
+ },
+ "all are path=/": function(t) {
+ assert.ok(t.cookies.every(function(c) { return c.path === '/' }));
+ },
+ "no 'other' cookies": function(t) {
+ assert.ok(!t.cookies.some(function(c) { return (/^other/).test(c.name) }));
+ },
+ },
+ "getting without allPaths for /foo": {
+ topic: function(t) {
+ var cb = this.callback;
+ var cj = t.cj;
+ cj.getCookies('http://www.example.com/foo', {}, function(err,cookies) {
+ cb(err, {cj:cj, cookies:cookies});
+ });
+ },
+ "found four cookies": function(t) {
+ assert.equal(t.cookies.length, 4);
+ },
+ "no 'other' cookies": function(t) {
+ assert.ok(!t.cookies.some(function(c) { return (/^other/).test(c.name) }));
+ },
+ },
+ "getting with allPaths:true": {
+ topic: function(t) {
+ var cb = this.callback;
+ var cj = t.cj;
+ cj.getCookies('http://www.example.com/', {allPaths:true}, function(err,cookies) {
+ cb(err, {cj:cj, cookies:cookies});
+ });
+ },
+ "found four cookies": function(t) {
+ assert.equal(t.cookies.length, 4);
+ },
+ "no 'other' cookies": function(t) {
+ assert.ok(!t.cookies.some(function(c) { return (/^other/).test(c.name) }));
+ },
+ },
+ }
+})
+.export(module);
diff --git a/deps/npm/node_modules/request/node_modules/tunnel-agent/package.json b/deps/npm/node_modules/request/node_modules/tunnel-agent/package.json
index 9b14d2586..3d7492aa8 100644
--- a/deps/npm/node_modules/request/node_modules/tunnel-agent/package.json
+++ b/deps/npm/node_modules/request/node_modules/tunnel-agent/package.json
@@ -22,6 +22,7 @@
"bugs": {
"url": "https://github.com/mikeal/tunnel-agent/issues"
},
+ "homepage": "https://github.com/mikeal/tunnel-agent",
"_id": "tunnel-agent@0.3.0",
"_from": "tunnel-agent@~0.3.0"
}
diff --git a/deps/npm/node_modules/request/package.json b/deps/npm/node_modules/request/package.json
index 07b632e7b..ca42f87d4 100755
--- a/deps/npm/node_modules/request/package.json
+++ b/deps/npm/node_modules/request/package.json
@@ -7,7 +7,7 @@
"util",
"utility"
],
- "version": "2.21.0",
+ "version": "2.30.0",
"author": {
"name": "Mikeal Rogers",
"email": "mikeal.rogers@gmail.com"
@@ -25,23 +25,33 @@
"main": "index.js",
"dependencies": {
"qs": "~0.6.0",
- "json-stringify-safe": "~4.0.0",
+ "json-stringify-safe": "~5.0.0",
"forever-agent": "~0.5.0",
- "tunnel-agent": "~0.3.0",
- "http-signature": "~0.9.11",
- "hawk": "~0.13.0",
- "aws-sign": "~0.3.0",
- "oauth-sign": "~0.3.0",
- "cookie-jar": "~0.3.0",
"node-uuid": "~1.4.0",
"mime": "~1.2.9",
- "form-data": "0.0.8"
+ "tough-cookie": "~0.9.15",
+ "form-data": "~0.1.0",
+ "tunnel-agent": "~0.3.0",
+ "http-signature": "~0.10.0",
+ "oauth-sign": "~0.3.0",
+ "hawk": "~1.0.0",
+ "aws-sign2": "~0.5.0"
+ },
+ "optionalDependencies": {
+ "tough-cookie": "~0.9.15",
+ "form-data": "~0.1.0",
+ "tunnel-agent": "~0.3.0",
+ "http-signature": "~0.10.0",
+ "oauth-sign": "~0.3.0",
+ "hawk": "~1.0.0",
+ "aws-sign2": "~0.5.0"
},
"scripts": {
"test": "node tests/run.js"
},
- "readme": "# Request -- Simplified HTTP request method\n\n## Install\n\n<pre>\n npm install request\n</pre>\n\nOr from source:\n\n<pre>\n git clone git://github.com/mikeal/request.git \n cd request\n npm link\n</pre>\n\n## Super simple to use\n\nRequest is designed to be the simplest way possible to make http calls. It supports HTTPS and follows redirects by default.\n\n```javascript\nvar request = require('request');\nrequest('http://www.google.com', function (error, response, body) {\n if (!error && response.statusCode == 200) {\n console.log(body) // Print the google web page.\n }\n})\n```\n\n## Streaming\n\nYou can stream any response to a file stream.\n\n```javascript\nrequest('http://google.com/doodle.png').pipe(fs.createWriteStream('doodle.png'))\n```\n\nYou can also stream a file to a PUT or POST request. This method will also check the file extension against a mapping of file extensions to content-types, in this case `application/json`, and use the proper content-type in the PUT request if one is not already provided in the headers.\n\n```javascript\nfs.createReadStream('file.json').pipe(request.put('http://mysite.com/obj.json'))\n```\n\nRequest can also pipe to itself. When doing so the content-type and content-length will be preserved in the PUT headers.\n\n```javascript\nrequest.get('http://google.com/img.png').pipe(request.put('http://mysite.com/img.png'))\n```\n\nNow let's get fancy.\n\n```javascript\nhttp.createServer(function (req, resp) {\n if (req.url === '/doodle.png') {\n if (req.method === 'PUT') {\n req.pipe(request.put('http://mysite.com/doodle.png'))\n } else if (req.method === 'GET' || req.method === 'HEAD') {\n request.get('http://mysite.com/doodle.png').pipe(resp)\n } \n }\n})\n```\n\nYou can also pipe() from a http.ServerRequest instance and to a http.ServerResponse instance. The HTTP method and headers will be sent as well as the entity-body data. Which means that, if you don't really care about security, you can do:\n\n```javascript\nhttp.createServer(function (req, resp) {\n if (req.url === '/doodle.png') {\n var x = request('http://mysite.com/doodle.png')\n req.pipe(x)\n x.pipe(resp)\n }\n})\n```\n\nAnd since pipe() returns the destination stream in node 0.5.x you can do one line proxying :)\n\n```javascript\nreq.pipe(request('http://mysite.com/doodle.png')).pipe(resp)\n```\n\nAlso, none of this new functionality conflicts with requests previous features, it just expands them.\n\n```javascript\nvar r = request.defaults({'proxy':'http://localproxy.com'})\n\nhttp.createServer(function (req, resp) {\n if (req.url === '/doodle.png') {\n r.get('http://google.com/doodle.png').pipe(resp)\n }\n})\n```\nYou can still use intermediate proxies, the requests will still follow HTTP forwards, etc.\n\n## Forms\n\n`request` supports `application/x-www-form-urlencoded` and `multipart/form-data` form uploads. For `multipart/related` refer to the `multipart` API.\n\nUrl encoded forms are simple\n\n```javascript\nrequest.post('http://service.com/upload', {form:{key:'value'}})\n// or\nrequest.post('http://service.com/upload').form({key:'value'})\n```\n\nFor `multipart/form-data` we use the [form-data](https://github.com/felixge/node-form-data) library by [@felixge](https://github.com/felixge). You don't need to worry about piping the form object or setting the headers, `request` will handle that for you.\n\n```javascript\nvar r = request.post('http://service.com/upload')\nvar form = r.form()\nform.append('my_field', 'my_value')\nform.append('my_buffer', new Buffer([1, 2, 3]))\nform.append('my_file', fs.createReadStream(path.join(__dirname, 'doodle.png'))\nform.append('remote_file', request('http://google.com/doodle.png'))\n```\n\n## HTTP Authentication\n\n```javascript\nrequest.auth('username', 'password', false).get('http://some.server.com/');\n// or\nrequest.get('http://some.server.com/', {\n 'auth': {\n 'user': 'username',\n 'pass': 'password',\n 'sendImmediately': false\n }\n});\n```\n\nIf passed as an option, `auth` should be a hash containing values `user` || `username`, `password` || `pass`, and `sendImmediately` (optional). The method form takes parameters `auth(username, password, sendImmediately)`.\n\n`sendImmediately` defaults to true, which will cause a basic authentication header to be sent. If `sendImmediately` is `false`, then `request` will retry with a proper authentication header after receiving a 401 response from the server (which must contain a `WWW-Authenticate` header indicating the required authentication method).\n\nDigest authentication is supported, but it only works with `sendImmediately` set to `false` (otherwise `request` will send basic authentication on the initial request, which will probably cause the request to fail).\n\n## OAuth Signing\n\n```javascript\n// Twitter OAuth\nvar qs = require('querystring')\n , oauth =\n { callback: 'http://mysite.com/callback/'\n , consumer_key: CONSUMER_KEY\n , consumer_secret: CONSUMER_SECRET\n }\n , url = 'https://api.twitter.com/oauth/request_token'\n ;\nrequest.post({url:url, oauth:oauth}, function (e, r, body) {\n // Ideally, you would take the body in the response\n // and construct a URL that a user clicks on (like a sign in button).\n // The verifier is only available in the response after a user has \n // verified with twitter that they are authorizing your app.\n var access_token = qs.parse(body)\n , oauth = \n { consumer_key: CONSUMER_KEY\n , consumer_secret: CONSUMER_SECRET\n , token: access_token.oauth_token\n , verifier: access_token.oauth_verifier\n }\n , url = 'https://api.twitter.com/oauth/access_token'\n ;\n request.post({url:url, oauth:oauth}, function (e, r, body) {\n var perm_token = qs.parse(body)\n , oauth = \n { consumer_key: CONSUMER_KEY\n , consumer_secret: CONSUMER_SECRET\n , token: perm_token.oauth_token\n , token_secret: perm_token.oauth_token_secret\n }\n , url = 'https://api.twitter.com/1/users/show.json?'\n , params = \n { screen_name: perm_token.screen_name\n , user_id: perm_token.user_id\n }\n ;\n url += qs.stringify(params)\n request.get({url:url, oauth:oauth, json:true}, function (e, r, user) {\n console.log(user)\n })\n })\n})\n```\n\n\n\n### request(options, callback)\n\nThe first argument can be either a url or an options object. The only required option is uri, all others are optional.\n\n* `uri` || `url` - fully qualified uri or a parsed url object from url.parse()\n* `qs` - object containing querystring values to be appended to the uri\n* `method` - http method, defaults to GET\n* `headers` - http headers, defaults to {}\n* `body` - entity body for PATCH, POST and PUT requests. Must be buffer or string.\n* `form` - when passed an object this will set `body` but to a querystring representation of value and adds `Content-type: application/x-www-form-urlencoded; charset=utf-8` header. When passed no option a FormData instance is returned that will be piped to request.\n* `auth` - A hash containing values `user` || `username`, `password` || `pass`, and `sendImmediately` (optional). See documentation above.\n* `json` - sets `body` but to JSON representation of value and adds `Content-type: application/json` header. Additionally, parses the response body as json.\n* `multipart` - (experimental) array of objects which contains their own headers and `body` attribute. Sends `multipart/related` request. See example below.\n* `followRedirect` - follow HTTP 3xx responses as redirects. defaults to true.\n* `followAllRedirects` - follow non-GET HTTP 3xx responses as redirects. defaults to false.\n* `maxRedirects` - the maximum number of redirects to follow, defaults to 10.\n* `encoding` - Encoding to be used on `setEncoding` of response data. If set to `null`, the body is returned as a Buffer.\n* `pool` - A hash object containing the agents for these requests. If omitted this request will use the global pool which is set to node's default maxSockets.\n* `pool.maxSockets` - Integer containing the maximum amount of sockets in the pool.\n* `timeout` - Integer containing the number of milliseconds to wait for a request to respond before aborting the request\t\n* `proxy` - An HTTP proxy to be used. Support proxy Auth with Basic Auth the same way it's supported with the `url` parameter by embedding the auth info in the uri.\n* `oauth` - Options for OAuth HMAC-SHA1 signing, see documentation above.\n* `hawk` - Options for [Hawk signing](https://github.com/hueniverse/hawk). The `credentials` key must contain the necessary signing info, [see hawk docs for details](https://github.com/hueniverse/hawk#usage-example).\n* `strictSSL` - Set to `true` to require that SSL certificates be valid. Note: to use your own certificate authority, you need to specify an agent that was created with that ca as an option.\n* `jar` - Set to `false` if you don't want cookies to be remembered for future use or define your custom cookie jar (see examples section)\n* `aws` - object containing aws signing information, should have the properties `key` and `secret` as well as `bucket` unless you're specifying your bucket as part of the path, or you are making a request that doesn't use a bucket (i.e. GET Services)\n* `httpSignature` - Options for the [HTTP Signature Scheme](https://github.com/joyent/node-http-signature/blob/master/http_signing.md) using [Joyent's library](https://github.com/joyent/node-http-signature). The `keyId` and `key` properties must be specified. See the docs for other options.\n* `localAddress` - Local interface to bind for network connections.\n\n\nThe callback argument gets 3 arguments. The first is an error when applicable (usually from the http.Client option not the http.ClientRequest object). The second in an http.ClientResponse object. The third is the response body String or Buffer.\n\n## Convenience methods\n\nThere are also shorthand methods for different HTTP METHODs and some other conveniences.\n\n### request.defaults(options) \n \nThis method returns a wrapper around the normal request API that defaults to whatever options you pass in to it.\n\n### request.put\n\nSame as request() but defaults to `method: \"PUT\"`.\n\n```javascript\nrequest.put(url)\n```\n\n### request.patch\n\nSame as request() but defaults to `method: \"PATCH\"`.\n\n```javascript\nrequest.patch(url)\n```\n\n### request.post\n\nSame as request() but defaults to `method: \"POST\"`.\n\n```javascript\nrequest.post(url)\n```\n\n### request.head\n\nSame as request() but defaults to `method: \"HEAD\"`.\n\n```javascript\nrequest.head(url)\n```\n\n### request.del\n\nSame as request() but defaults to `method: \"DELETE\"`.\n\n```javascript\nrequest.del(url)\n```\n\n### request.get\n\nAlias to normal request method for uniformity.\n\n```javascript\nrequest.get(url)\n```\n### request.cookie\n\nFunction that creates a new cookie.\n\n```javascript\nrequest.cookie('cookie_string_here')\n```\n### request.jar\n\nFunction that creates a new cookie jar.\n\n```javascript\nrequest.jar()\n```\n\n\n## Examples:\n\n```javascript\n var request = require('request')\n , rand = Math.floor(Math.random()*100000000).toString()\n ;\n request(\n { method: 'PUT'\n , uri: 'http://mikeal.iriscouch.com/testjs/' + rand\n , multipart: \n [ { 'content-type': 'application/json'\n , body: JSON.stringify({foo: 'bar', _attachments: {'message.txt': {follows: true, length: 18, 'content_type': 'text/plain' }}})\n }\n , { body: 'I am an attachment' }\n ] \n }\n , function (error, response, body) {\n if(response.statusCode == 201){\n console.log('document saved as: http://mikeal.iriscouch.com/testjs/'+ rand)\n } else {\n console.log('error: '+ response.statusCode)\n console.log(body)\n }\n }\n )\n```\nCookies are enabled by default (so they can be used in subsequent requests). To disable cookies set jar to false (either in defaults or in the options sent).\n\n```javascript\nvar request = request.defaults({jar: false})\nrequest('http://www.google.com', function () {\n request('http://images.google.com')\n})\n```\n\nIf you to use a custom cookie jar (instead of letting request use its own global cookie jar) you do so by setting the jar default or by specifying it as an option:\n\n```javascript\nvar j = request.jar()\nvar request = request.defaults({jar:j})\nrequest('http://www.google.com', function () {\n request('http://images.google.com')\n})\n```\nOR\n\n```javascript\nvar j = request.jar()\nvar cookie = request.cookie('your_cookie_here')\nj.add(cookie)\nrequest({url: 'http://www.google.com', jar: j}, function () {\n request('http://images.google.com')\n})\n```\n",
+ "readme": "# Request -- Simplified HTTP client\n\n[![NPM](https://nodei.co/npm/request.png)](https://nodei.co/npm/request/)\n\n## Super simple to use\n\nRequest is designed to be the simplest way possible to make http calls. It supports HTTPS and follows redirects by default.\n\n```javascript\nvar request = require('request');\nrequest('http://www.google.com', function (error, response, body) {\n if (!error && response.statusCode == 200) {\n console.log(body) // Print the google web page.\n }\n})\n```\n\n## Streaming\n\nYou can stream any response to a file stream.\n\n```javascript\nrequest('http://google.com/doodle.png').pipe(fs.createWriteStream('doodle.png'))\n```\n\nYou can also stream a file to a PUT or POST request. This method will also check the file extension against a mapping of file extensions to content-types (in this case `application/json`) and use the proper `content-type` in the PUT request (if the headers don’t already provide one).\n\n```javascript\nfs.createReadStream('file.json').pipe(request.put('http://mysite.com/obj.json'))\n```\n\nRequest can also `pipe` to itself. When doing so, `content-type` and `content-length` are preserved in the PUT headers.\n\n```javascript\nrequest.get('http://google.com/img.png').pipe(request.put('http://mysite.com/img.png'))\n```\n\nNow let’s get fancy.\n\n```javascript\nhttp.createServer(function (req, resp) {\n if (req.url === '/doodle.png') {\n if (req.method === 'PUT') {\n req.pipe(request.put('http://mysite.com/doodle.png'))\n } else if (req.method === 'GET' || req.method === 'HEAD') {\n request.get('http://mysite.com/doodle.png').pipe(resp)\n }\n }\n})\n```\n\nYou can also `pipe()` from `http.ServerRequest` instances, as well as to `http.ServerResponse` instances. The HTTP method, headers, and entity-body data will be sent. Which means that, if you don't really care about security, you can do:\n\n```javascript\nhttp.createServer(function (req, resp) {\n if (req.url === '/doodle.png') {\n var x = request('http://mysite.com/doodle.png')\n req.pipe(x)\n x.pipe(resp)\n }\n})\n```\n\nAnd since `pipe()` returns the destination stream in ≥ Node 0.5.x you can do one line proxying. :)\n\n```javascript\nreq.pipe(request('http://mysite.com/doodle.png')).pipe(resp)\n```\n\nAlso, none of this new functionality conflicts with requests previous features, it just expands them.\n\n```javascript\nvar r = request.defaults({'proxy':'http://localproxy.com'})\n\nhttp.createServer(function (req, resp) {\n if (req.url === '/doodle.png') {\n r.get('http://google.com/doodle.png').pipe(resp)\n }\n})\n```\n\nYou can still use intermediate proxies, the requests will still follow HTTP forwards, etc.\n\n## Forms\n\n`request` supports `application/x-www-form-urlencoded` and `multipart/form-data` form uploads. For `multipart/related` refer to the `multipart` API.\n\nURL-encoded forms are simple.\n\n```javascript\nrequest.post('http://service.com/upload', {form:{key:'value'}})\n// or\nrequest.post('http://service.com/upload').form({key:'value'})\n```\n\nFor `multipart/form-data` we use the [form-data](https://github.com/felixge/node-form-data) library by [@felixge](https://github.com/felixge). You don’t need to worry about piping the form object or setting the headers, `request` will handle that for you.\n\n```javascript\nvar r = request.post('http://service.com/upload')\nvar form = r.form()\nform.append('my_field', 'my_value')\nform.append('my_buffer', new Buffer([1, 2, 3]))\nform.append('my_file', fs.createReadStream(path.join(__dirname, 'doodle.png'))\nform.append('remote_file', request('http://google.com/doodle.png'))\n```\n\n## HTTP Authentication\n\n```javascript\nrequest.get('http://some.server.com/').auth('username', 'password', false);\n// or\nrequest.get('http://some.server.com/', {\n 'auth': {\n 'user': 'username',\n 'pass': 'password',\n 'sendImmediately': false\n }\n});\n```\n\nIf passed as an option, `auth` should be a hash containing values `user` || `username`, `password` || `pass`, and `sendImmediately` (optional). The method form takes parameters `auth(username, password, sendImmediately)`.\n\n`sendImmediately` defaults to `true`, which causes a basic authentication header to be sent. If `sendImmediately` is `false`, then `request` will retry with a proper authentication header after receiving a `401` response from the server (which must contain a `WWW-Authenticate` header indicating the required authentication method).\n\nDigest authentication is supported, but it only works with `sendImmediately` set to `false`; otherwise `request` will send basic authentication on the initial request, which will probably cause the request to fail.\n\n## OAuth Signing\n\n```javascript\n// Twitter OAuth\nvar qs = require('querystring')\n , oauth =\n { callback: 'http://mysite.com/callback/'\n , consumer_key: CONSUMER_KEY\n , consumer_secret: CONSUMER_SECRET\n }\n , url = 'https://api.twitter.com/oauth/request_token'\n ;\nrequest.post({url:url, oauth:oauth}, function (e, r, body) {\n // Ideally, you would take the body in the response\n // and construct a URL that a user clicks on (like a sign in button).\n // The verifier is only available in the response after a user has\n // verified with twitter that they are authorizing your app.\n var access_token = qs.parse(body)\n , oauth =\n { consumer_key: CONSUMER_KEY\n , consumer_secret: CONSUMER_SECRET\n , token: access_token.oauth_token\n , verifier: access_token.oauth_verifier\n }\n , url = 'https://api.twitter.com/oauth/access_token'\n ;\n request.post({url:url, oauth:oauth}, function (e, r, body) {\n var perm_token = qs.parse(body)\n , oauth =\n { consumer_key: CONSUMER_KEY\n , consumer_secret: CONSUMER_SECRET\n , token: perm_token.oauth_token\n , token_secret: perm_token.oauth_token_secret\n }\n , url = 'https://api.twitter.com/1/users/show.json?'\n , params =\n { screen_name: perm_token.screen_name\n , user_id: perm_token.user_id\n }\n ;\n url += qs.stringify(params)\n request.get({url:url, oauth:oauth, json:true}, function (e, r, user) {\n console.log(user)\n })\n })\n})\n```\n\n### Custom HTTP Headers\n\nHTTP Headers, such as `User-Agent`, can be set in the `options` object.\nIn the example below, we call the github API to find out the number\nof stars and forks for the request repository. This requires a\ncustom `User-Agent` header as well as https.\n\n```\nvar request = require('request');\n\nvar options = {\n\turl: 'https://api.github.com/repos/mikeal/request',\n\theaders: {\n\t\t'User-Agent': 'request'\n\t}\n};\n\nfunction callback(error, response, body) {\n\tif (!error && response.statusCode == 200) {\n\t\tvar info = JSON.parse(body);\n\t\tconsole.log(info.stargazers_count + \" Stars\");\n\t\tconsole.log(info.forks_count + \" Forks\");\n\t}\n}\n\nrequest(options, callback);\n```\n\n### request(options, callback)\n\nThe first argument can be either a `url` or an `options` object. The only required option is `uri`; all others are optional.\n\n* `uri` || `url` - fully qualified uri or a parsed url object from `url.parse()`\n* `qs` - object containing querystring values to be appended to the `uri`\n* `method` - http method (default: `\"GET\"`)\n* `headers` - http headers (default: `{}`)\n* `body` - entity body for PATCH, POST and PUT requests. Must be a `Buffer` or `String`.\n* `form` - when passed an object, this sets `body` to a querystring representation of value, and adds `Content-type: application/x-www-form-urlencoded; charset=utf-8` header. When passed no options, a `FormData` instance is returned (and is piped to request).\n* `auth` - A hash containing values `user` || `username`, `password` || `pass`, and `sendImmediately` (optional). See documentation above.\n* `json` - sets `body` but to JSON representation of value and adds `Content-type: application/json` header. Additionally, parses the response body as JSON.\n* `multipart` - (experimental) array of objects which contains their own headers and `body` attribute. Sends `multipart/related` request. See example below.\n* `followRedirect` - follow HTTP 3xx responses as redirects (default: `true`)\n* `followAllRedirects` - follow non-GET HTTP 3xx responses as redirects (default: `false`)\n* `maxRedirects` - the maximum number of redirects to follow (default: `10`)\n* `encoding` - Encoding to be used on `setEncoding` of response data. If `null`, the `body` is returned as a `Buffer`.\n* `pool` - A hash object containing the agents for these requests. If omitted, the request will use the global pool (which is set to node's default `maxSockets`)\n* `pool.maxSockets` - Integer containing the maximum amount of sockets in the pool.\n* `timeout` - Integer containing the number of milliseconds to wait for a request to respond before aborting the request\n* `proxy` - An HTTP proxy to be used. Supports proxy Auth with Basic Auth, identical to support for the `url` parameter (by embedding the auth info in the `uri`)\n* `oauth` - Options for OAuth HMAC-SHA1 signing. See documentation above.\n* `hawk` - Options for [Hawk signing](https://github.com/hueniverse/hawk). The `credentials` key must contain the necessary signing info, [see hawk docs for details](https://github.com/hueniverse/hawk#usage-example).\n* `strictSSL` - If `true`, requires SSL certificates be valid. **Note:** to use your own certificate authority, you need to specify an agent that was created with that CA as an option.\n* `jar` - If `true`, remember cookies for future use (or define your custom cookie jar; see examples section)\n* `aws` - `object` containing AWS signing information. Should have the properties `key`, `secret`. Also requires the property `bucket`, unless you’re specifying your `bucket` as part of the path, or the request doesn’t use a bucket (i.e. GET Services)\n* `httpSignature` - Options for the [HTTP Signature Scheme](https://github.com/joyent/node-http-signature/blob/master/http_signing.md) using [Joyent's library](https://github.com/joyent/node-http-signature). The `keyId` and `key` properties must be specified. See the docs for other options.\n* `localAddress` - Local interface to bind for network connections.\n\n\nThe callback argument gets 3 arguments: \n\n1. An `error` when applicable (usually from the `http.Client` option, not the `http.ClientRequest` object)\n2. An `http.ClientResponse` object\n3. The third is the `response` body (`String` or `Buffer`)\n\n## Convenience methods\n\nThere are also shorthand methods for different HTTP METHODs and some other conveniences.\n\n### request.defaults(options)\n\nThis method returns a wrapper around the normal request API that defaults to whatever options you pass in to it.\n\n### request.put\n\nSame as `request()`, but defaults to `method: \"PUT\"`.\n\n```javascript\nrequest.put(url)\n```\n\n### request.patch\n\nSame as `request()`, but defaults to `method: \"PATCH\"`.\n\n```javascript\nrequest.patch(url)\n```\n\n### request.post\n\nSame as `request()`, but defaults to `method: \"POST\"`.\n\n```javascript\nrequest.post(url)\n```\n\n### request.head\n\nSame as request() but defaults to `method: \"HEAD\"`.\n\n```javascript\nrequest.head(url)\n```\n\n### request.del\n\nSame as `request()`, but defaults to `method: \"DELETE\"`.\n\n```javascript\nrequest.del(url)\n```\n\n### request.get\n\nSame as `request()` (for uniformity).\n\n```javascript\nrequest.get(url)\n```\n### request.cookie\n\nFunction that creates a new cookie.\n\n```javascript\nrequest.cookie('cookie_string_here')\n```\n### request.jar\n\nFunction that creates a new cookie jar.\n\n```javascript\nrequest.jar()\n```\n\n\n## Examples:\n\n```javascript\n var request = require('request')\n , rand = Math.floor(Math.random()*100000000).toString()\n ;\n request(\n { method: 'PUT'\n , uri: 'http://mikeal.iriscouch.com/testjs/' + rand\n , multipart:\n [ { 'content-type': 'application/json'\n , body: JSON.stringify({foo: 'bar', _attachments: {'message.txt': {follows: true, length: 18, 'content_type': 'text/plain' }}})\n }\n , { body: 'I am an attachment' }\n ]\n }\n , function (error, response, body) {\n if(response.statusCode == 201){\n console.log('document saved as: http://mikeal.iriscouch.com/testjs/'+ rand)\n } else {\n console.log('error: '+ response.statusCode)\n console.log(body)\n }\n }\n )\n```\n\nCookies are disabled by default (else, they would be used in subsequent requests). To enable cookies, set `jar` to `true` (either in `defaults` or `options`).\n\n```javascript\nvar request = request.defaults({jar: true})\nrequest('http://www.google.com', function () {\n request('http://images.google.com')\n})\n```\n\nTo use a custom cookie jar (instead `request`’s global cookie jar), set `jar` to an instance of `request.jar()` (either in `defaults` or `options`)\n\n```javascript\nvar j = request.jar()\nvar request = request.defaults({jar:j})\nrequest('http://www.google.com', function () {\n request('http://images.google.com')\n})\n```\nOR\n\n```javascript\nvar j = request.jar()\nvar cookie = request.cookie('your_cookie_here')\nj.add(cookie)\nrequest({url: 'http://www.google.com', jar: j}, function () {\n request('http://images.google.com')\n})\n```\n",
"readmeFilename": "README.md",
- "_id": "request@2.21.0",
+ "homepage": "https://github.com/mikeal/request",
+ "_id": "request@2.30.0",
"_from": "request@latest"
}
diff --git a/deps/npm/node_modules/request/request.js b/deps/npm/node_modules/request/request.js
new file mode 100644
index 000000000..3c03c47da
--- /dev/null
+++ b/deps/npm/node_modules/request/request.js
@@ -0,0 +1,1260 @@
+var optional = require('./lib/optional')
+ , http = require('http')
+ , https = optional('https')
+ , tls = optional('tls')
+ , url = require('url')
+ , util = require('util')
+ , stream = require('stream')
+ , qs = require('qs')
+ , querystring = require('querystring')
+ , crypto = require('crypto')
+
+ , oauth = optional('oauth-sign')
+ , hawk = optional('hawk')
+ , aws = optional('aws-sign')
+ , httpSignature = optional('http-signature')
+ , uuid = require('node-uuid')
+ , mime = require('mime')
+ , tunnel = optional('tunnel-agent')
+ , _safeStringify = require('json-stringify-safe')
+
+ , ForeverAgent = require('forever-agent')
+ , FormData = optional('form-data')
+
+ , Cookie = optional('tough-cookie')
+ , CookieJar = Cookie && Cookie.CookieJar
+ , cookieJar = CookieJar && new CookieJar
+
+ , copy = require('./lib/copy')
+ , debug = require('./lib/debug')
+ , getSafe = require('./lib/getSafe')
+ ;
+
+function safeStringify (obj) {
+ var ret
+ try { ret = JSON.stringify(obj) }
+ catch (e) { ret = _safeStringify(obj) }
+ return ret
+}
+
+var globalPool = {}
+var isUrl = /^https?:/i
+
+
+// Hacky fix for pre-0.4.4 https
+if (https && !https.Agent) {
+ https.Agent = function (options) {
+ http.Agent.call(this, options)
+ }
+ util.inherits(https.Agent, http.Agent)
+ https.Agent.prototype._getConnection = function (host, port, cb) {
+ var s = tls.connect(port, host, this.options, function () {
+ // do other checks here?
+ if (cb) cb()
+ })
+ return s
+ }
+}
+
+function isReadStream (rs) {
+ if (rs.readable && rs.path && rs.mode) {
+ return true
+ }
+}
+
+function toBase64 (str) {
+ return (new Buffer(str || "", "ascii")).toString("base64")
+}
+
+function md5 (str) {
+ return crypto.createHash('md5').update(str).digest('hex')
+}
+
+function Request (options) {
+ stream.Stream.call(this)
+ this.readable = true
+ this.writable = true
+
+ if (typeof options === 'string') {
+ options = {uri:options}
+ }
+
+ var reserved = Object.keys(Request.prototype)
+ for (var i in options) {
+ if (reserved.indexOf(i) === -1) {
+ this[i] = options[i]
+ } else {
+ if (typeof options[i] === 'function') {
+ delete options[i]
+ }
+ }
+ }
+
+ if (options.method) {
+ this.explicitMethod = true
+ }
+
+ this.canTunnel = options.tunnel !== false && tunnel;
+
+ this.init(options)
+}
+util.inherits(Request, stream.Stream)
+Request.prototype.init = function (options) {
+ // init() contains all the code to setup the request object.
+ // the actual outgoing request is not started until start() is called
+ // this function is called from both the constructor and on redirect.
+ var self = this
+ if (!options) options = {}
+
+ if (!self.method) self.method = options.method || 'GET'
+ self.localAddress = options.localAddress
+
+ debug(options)
+ if (!self.pool && self.pool !== false) self.pool = globalPool
+ self.dests = self.dests || []
+ self.__isRequestRequest = true
+
+ // Protect against double callback
+ if (!self._callback && self.callback) {
+ self._callback = self.callback
+ self.callback = function () {
+ if (self._callbackCalled) return // Print a warning maybe?
+ self._callbackCalled = true
+ self._callback.apply(self, arguments)
+ }
+ self.on('error', self.callback.bind())
+ self.on('complete', self.callback.bind(self, null))
+ }
+
+ if (self.url && !self.uri) {
+ // People use this property instead all the time so why not just support it.
+ self.uri = self.url
+ delete self.url
+ }
+
+ if (!self.uri) {
+ // this will throw if unhandled but is handleable when in a redirect
+ return self.emit('error', new Error("options.uri is a required argument"))
+ } else {
+ if (typeof self.uri == "string") self.uri = url.parse(self.uri)
+ }
+
+ if (self.strictSSL === false) {
+ self.rejectUnauthorized = false
+ }
+
+ if (self.proxy) {
+ if (typeof self.proxy == 'string') self.proxy = url.parse(self.proxy)
+
+ // do the HTTP CONNECT dance using koichik/node-tunnel
+ if (http.globalAgent && self.uri.protocol === "https:" && self.canTunnel) {
+ var tunnelFn = self.proxy.protocol === "http:"
+ ? tunnel.httpsOverHttp : tunnel.httpsOverHttps
+
+ var tunnelOptions = { proxy: { host: self.proxy.hostname
+ , port: +self.proxy.port
+ , proxyAuth: self.proxy.auth
+ , headers: { Host: self.uri.hostname + ':' +
+ (self.uri.port || self.uri.protocol === 'https:' ? 443 : 80) }}
+ , rejectUnauthorized: self.rejectUnauthorized
+ , ca: this.ca }
+
+ self.agent = tunnelFn(tunnelOptions)
+ self.tunnel = true
+ }
+ }
+
+ if (!self.uri.pathname) {self.uri.pathname = '/'}
+
+ if (!self.uri.host) {
+ // Invalid URI: it may generate lot of bad errors, like "TypeError: Cannot call method 'indexOf' of undefined" in CookieJar
+ // Detect and reject it as soon as possible
+ var faultyUri = url.format(self.uri)
+ var message = 'Invalid URI "' + faultyUri + '"'
+ if (Object.keys(options).length === 0) {
+ // No option ? This can be the sign of a redirect
+ // As this is a case where the user cannot do anything (they didn't call request directly with this URL)
+ // they should be warned that it can be caused by a redirection (can save some hair)
+ message += '. This can be caused by a crappy redirection.'
+ }
+ self.emit('error', new Error(message))
+ return // This error was fatal
+ }
+
+ self._redirectsFollowed = self._redirectsFollowed || 0
+ self.maxRedirects = (self.maxRedirects !== undefined) ? self.maxRedirects : 10
+ self.followRedirect = (self.followRedirect !== undefined) ? self.followRedirect : true
+ self.followAllRedirects = (self.followAllRedirects !== undefined) ? self.followAllRedirects : false
+ if (self.followRedirect || self.followAllRedirects)
+ self.redirects = self.redirects || []
+
+ self.headers = self.headers ? copy(self.headers) : {}
+
+ self.setHost = false
+ if (!self.hasHeader('host')) {
+ self.setHeader('host', self.uri.hostname)
+ if (self.uri.port) {
+ if ( !(self.uri.port === 80 && self.uri.protocol === 'http:') &&
+ !(self.uri.port === 443 && self.uri.protocol === 'https:') )
+ self.setHeader('host', self.getHeader('host') + (':'+self.uri.port) )
+ }
+ self.setHost = true
+ }
+
+ self.jar(self._jar || options.jar)
+
+ if (!self.uri.port) {
+ if (self.uri.protocol == 'http:') {self.uri.port = 80}
+ else if (self.uri.protocol == 'https:') {self.uri.port = 443}
+ }
+
+ if (self.proxy && !self.tunnel) {
+ self.port = self.proxy.port
+ self.host = self.proxy.hostname
+ } else {
+ self.port = self.uri.port
+ self.host = self.uri.hostname
+ }
+
+ self.clientErrorHandler = function (error) {
+ if (self._aborted) return
+ if (self.req && self.req._reusedSocket && error.code === 'ECONNRESET'
+ && self.agent.addRequestNoreuse) {
+ self.agent = { addRequest: self.agent.addRequestNoreuse.bind(self.agent) }
+ self.start()
+ self.req.end()
+ return
+ }
+ if (self.timeout && self.timeoutTimer) {
+ clearTimeout(self.timeoutTimer)
+ self.timeoutTimer = null
+ }
+ self.emit('error', error)
+ }
+
+ self._parserErrorHandler = function (error) {
+ if (this.res) {
+ if (this.res.request) {
+ this.res.request.emit('error', error)
+ } else {
+ this.res.emit('error', error)
+ }
+ } else {
+ this._httpMessage.emit('error', error)
+ }
+ }
+
+ if (options.form) {
+ self.form(options.form)
+ }
+
+ if (options.qs) self.qs(options.qs)
+
+ if (self.uri.path) {
+ self.path = self.uri.path
+ } else {
+ self.path = self.uri.pathname + (self.uri.search || "")
+ }
+
+ if (self.path.length === 0) self.path = '/'
+
+
+ // Auth must happen last in case signing is dependent on other headers
+ if (options.oauth) {
+ self.oauth(options.oauth)
+ }
+
+ if (options.aws) {
+ self.aws(options.aws)
+ }
+
+ if (options.hawk) {
+ self.hawk(options.hawk)
+ }
+
+ if (options.httpSignature) {
+ self.httpSignature(options.httpSignature)
+ }
+
+ if (options.auth) {
+ if (Object.prototype.hasOwnProperty.call(options.auth, 'username')) options.auth.user = options.auth.username
+ if (Object.prototype.hasOwnProperty.call(options.auth, 'password')) options.auth.pass = options.auth.password
+
+ self.auth(
+ options.auth.user,
+ options.auth.pass,
+ options.auth.sendImmediately
+ )
+ }
+
+ if (self.uri.auth && !self.hasHeader('authorization')) {
+ var authPieces = self.uri.auth.split(':').map(function(item){ return querystring.unescape(item) })
+ self.auth(authPieces[0], authPieces.slice(1).join(':'), true)
+ }
+ if (self.proxy && self.proxy.auth && !self.hasHeader('proxy-authorization') && !self.tunnel) {
+ self.setHeader('proxy-authorization', "Basic " + toBase64(self.proxy.auth.split(':').map(function(item){ return querystring.unescape(item)}).join(':')))
+ }
+
+
+ if (self.proxy && !self.tunnel) self.path = (self.uri.protocol + '//' + self.uri.host + self.path)
+
+ if (options.json) {
+ self.json(options.json)
+ } else if (options.multipart) {
+ self.boundary = uuid()
+ self.multipart(options.multipart)
+ }
+
+ if (self.body) {
+ var length = 0
+ if (!Buffer.isBuffer(self.body)) {
+ if (Array.isArray(self.body)) {
+ for (var i = 0; i < self.body.length; i++) {
+ length += self.body[i].length
+ }
+ } else {
+ self.body = new Buffer(self.body)
+ length = self.body.length
+ }
+ } else {
+ length = self.body.length
+ }
+ if (length) {
+ if (!self.hasHeader('content-length')) self.setHeader('content-length', length)
+ } else {
+ throw new Error('Argument error, options.body.')
+ }
+ }
+
+ var protocol = self.proxy && !self.tunnel ? self.proxy.protocol : self.uri.protocol
+ , defaultModules = {'http:':http, 'https:':https}
+ , httpModules = self.httpModules || {}
+ ;
+ self.httpModule = httpModules[protocol] || defaultModules[protocol]
+
+ if (!self.httpModule) return this.emit('error', new Error("Invalid protocol"))
+
+ if (options.ca) self.ca = options.ca
+
+ if (!self.agent) {
+ if (options.agentOptions) self.agentOptions = options.agentOptions
+
+ if (options.agentClass) {
+ self.agentClass = options.agentClass
+ } else if (options.forever) {
+ self.agentClass = protocol === 'http:' ? ForeverAgent : ForeverAgent.SSL
+ } else {
+ self.agentClass = self.httpModule.Agent
+ }
+ }
+
+ if (self.pool === false) {
+ self.agent = false
+ } else {
+ self.agent = self.agent || self.getAgent()
+ if (self.maxSockets) {
+ // Don't use our pooling if node has the refactored client
+ self.agent.maxSockets = self.maxSockets
+ }
+ if (self.pool.maxSockets) {
+ // Don't use our pooling if node has the refactored client
+ self.agent.maxSockets = self.pool.maxSockets
+ }
+ }
+
+ self.on('pipe', function (src) {
+ if (self.ntick && self._started) throw new Error("You cannot pipe to this stream after the outbound request has started.")
+ self.src = src
+ if (isReadStream(src)) {
+ if (!self.hasHeader('content-type')) self.setHeader('content-type', mime.lookup(src.path))
+ } else {
+ if (src.headers) {
+ for (var i in src.headers) {
+ if (!self.hasHeader(i)) {
+ self.setHeader(i, src.headers[i])
+ }
+ }
+ }
+ if (self._json && !self.hasHeader('content-type'))
+ self.setHeader('content-type', 'application/json')
+ if (src.method && !self.explicitMethod) {
+ self.method = src.method
+ }
+ }
+
+ // self.on('pipe', function () {
+ // console.error("You have already piped to this stream. Pipeing twice is likely to break the request.")
+ // })
+ })
+
+ process.nextTick(function () {
+ if (self._aborted) return
+
+ if (self._form) {
+ self.setHeaders(self._form.getHeaders())
+ self._form.pipe(self)
+ }
+ if (self.body) {
+ if (Array.isArray(self.body)) {
+ self.body.forEach(function (part) {
+ self.write(part)
+ })
+ } else {
+ self.write(self.body)
+ }
+ self.end()
+ } else if (self.requestBodyStream) {
+ console.warn("options.requestBodyStream is deprecated, please pass the request object to stream.pipe.")
+ self.requestBodyStream.pipe(self)
+ } else if (!self.src) {
+ if (self.method !== 'GET' && typeof self.method !== 'undefined') {
+ self.setHeader('content-length', 0)
+ }
+ self.end()
+ }
+ self.ntick = true
+ })
+}
+
+// Must call this when following a redirect from https to http or vice versa
+// Attempts to keep everything as identical as possible, but update the
+// httpModule, Tunneling agent, and/or Forever Agent in use.
+Request.prototype._updateProtocol = function () {
+ var self = this
+ var protocol = self.uri.protocol
+
+ if (protocol === 'https:') {
+ // previously was doing http, now doing https
+ // if it's https, then we might need to tunnel now.
+ if (self.proxy && self.canTunnel) {
+ self.tunnel = true
+ var tunnelFn = self.proxy.protocol === 'http:'
+ ? tunnel.httpsOverHttp : tunnel.httpsOverHttps
+ var tunnelOptions = { proxy: { host: self.proxy.hostname
+ , port: +self.proxy.port
+ , proxyAuth: self.proxy.auth }
+ , rejectUnauthorized: self.rejectUnauthorized
+ , ca: self.ca }
+ self.agent = tunnelFn(tunnelOptions)
+ return
+ }
+
+ self.httpModule = https
+ switch (self.agentClass) {
+ case ForeverAgent:
+ self.agentClass = ForeverAgent.SSL
+ break
+ case http.Agent:
+ self.agentClass = https.Agent
+ break
+ default:
+ // nothing we can do. Just hope for the best.
+ return
+ }
+
+ // if there's an agent, we need to get a new one.
+ if (self.agent) self.agent = self.getAgent()
+
+ } else {
+ // previously was doing https, now doing http
+ // stop any tunneling.
+ if (self.tunnel) self.tunnel = false
+ self.httpModule = http
+ switch (self.agentClass) {
+ case ForeverAgent.SSL:
+ self.agentClass = ForeverAgent
+ break
+ case https.Agent:
+ self.agentClass = http.Agent
+ break
+ default:
+ // nothing we can do. just hope for the best
+ return
+ }
+
+ // if there's an agent, then get a new one.
+ if (self.agent) {
+ self.agent = null
+ self.agent = self.getAgent()
+ }
+ }
+}
+
+Request.prototype.getAgent = function () {
+ var Agent = this.agentClass
+ var options = {}
+ if (this.agentOptions) {
+ for (var i in this.agentOptions) {
+ options[i] = this.agentOptions[i]
+ }
+ }
+ if (this.ca) options.ca = this.ca
+ if (this.ciphers) options.ciphers = this.ciphers
+ if (this.secureProtocol) options.secureProtocol = this.secureProtocol
+ if (typeof this.rejectUnauthorized !== 'undefined') options.rejectUnauthorized = this.rejectUnauthorized
+
+ if (this.cert && this.key) {
+ options.key = this.key
+ options.cert = this.cert
+ }
+
+ var poolKey = ''
+
+ // different types of agents are in different pools
+ if (Agent !== this.httpModule.Agent) {
+ poolKey += Agent.name
+ }
+
+ if (!this.httpModule.globalAgent) {
+ // node 0.4.x
+ options.host = this.host
+ options.port = this.port
+ if (poolKey) poolKey += ':'
+ poolKey += this.host + ':' + this.port
+ }
+
+ // ca option is only relevant if proxy or destination are https
+ var proxy = this.proxy
+ if (typeof proxy === 'string') proxy = url.parse(proxy)
+ var isHttps = (proxy && proxy.protocol === 'https:') || this.uri.protocol === 'https:'
+ if (isHttps) {
+ if (options.ca) {
+ if (poolKey) poolKey += ':'
+ poolKey += options.ca
+ }
+
+ if (typeof options.rejectUnauthorized !== 'undefined') {
+ if (poolKey) poolKey += ':'
+ poolKey += options.rejectUnauthorized
+ }
+
+ if (options.cert)
+ poolKey += options.cert.toString('ascii') + options.key.toString('ascii')
+
+ if (options.ciphers) {
+ if (poolKey) poolKey += ':'
+ poolKey += options.ciphers
+ }
+
+ if (options.secureProtocol) {
+ if (poolKey) poolKey += ':'
+ poolKey += options.secureProtocol
+ }
+ }
+
+ if (this.pool === globalPool && !poolKey && Object.keys(options).length === 0 && this.httpModule.globalAgent) {
+ // not doing anything special. Use the globalAgent
+ return this.httpModule.globalAgent
+ }
+
+ // we're using a stored agent. Make sure it's protocol-specific
+ poolKey = this.uri.protocol + poolKey
+
+ // already generated an agent for this setting
+ if (this.pool[poolKey]) return this.pool[poolKey]
+
+ return this.pool[poolKey] = new Agent(options)
+}
+
+Request.prototype.start = function () {
+ // start() is called once we are ready to send the outgoing HTTP request.
+ // this is usually called on the first write(), end() or on nextTick()
+ var self = this
+
+ if (self._aborted) return
+
+ self._started = true
+ self.method = self.method || 'GET'
+ self.href = self.uri.href
+
+ if (self.src && self.src.stat && self.src.stat.size && !self.hasHeader('content-length')) {
+ self.setHeader('content-length', self.src.stat.size)
+ }
+ if (self._aws) {
+ self.aws(self._aws, true)
+ }
+
+ // We have a method named auth, which is completely different from the http.request
+ // auth option. If we don't remove it, we're gonna have a bad time.
+ var reqOptions = copy(self)
+ delete reqOptions.auth
+
+ debug('make request', self.uri.href)
+ self.req = self.httpModule.request(reqOptions, self.onResponse.bind(self))
+
+ if (self.timeout && !self.timeoutTimer) {
+ self.timeoutTimer = setTimeout(function () {
+ self.req.abort()
+ var e = new Error("ETIMEDOUT")
+ e.code = "ETIMEDOUT"
+ self.emit("error", e)
+ }, self.timeout)
+
+ // Set additional timeout on socket - in case if remote
+ // server freeze after sending headers
+ if (self.req.setTimeout) { // only works on node 0.6+
+ self.req.setTimeout(self.timeout, function () {
+ if (self.req) {
+ self.req.abort()
+ var e = new Error("ESOCKETTIMEDOUT")
+ e.code = "ESOCKETTIMEDOUT"
+ self.emit("error", e)
+ }
+ })
+ }
+ }
+
+ self.req.on('error', self.clientErrorHandler)
+ self.req.on('drain', function() {
+ self.emit('drain')
+ })
+ self.on('end', function() {
+ if ( self.req.connection ) self.req.connection.removeListener('error', self._parserErrorHandler)
+ })
+ self.emit('request', self.req)
+}
+Request.prototype.onResponse = function (response) {
+ var self = this
+ debug('onResponse', self.uri.href, response.statusCode, response.headers)
+ response.on('end', function() {
+ debug('response end', self.uri.href, response.statusCode, response.headers)
+ });
+
+ if (response.connection.listeners('error').indexOf(self._parserErrorHandler) === -1) {
+ response.connection.once('error', self._parserErrorHandler)
+ }
+ if (self._aborted) {
+ debug('aborted', self.uri.href)
+ response.resume()
+ return
+ }
+ if (self._paused) response.pause()
+ else response.resume()
+
+ self.response = response
+ response.request = self
+ response.toJSON = toJSON
+
+ // XXX This is different on 0.10, because SSL is strict by default
+ if (self.httpModule === https &&
+ self.strictSSL &&
+ !response.client.authorized) {
+ debug('strict ssl error', self.uri.href)
+ var sslErr = response.client.authorizationError
+ self.emit('error', new Error('SSL Error: '+ sslErr))
+ return
+ }
+
+ if (self.setHost && self.hasHeader('host')) delete self.headers[self.hasHeader('host')]
+ if (self.timeout && self.timeoutTimer) {
+ clearTimeout(self.timeoutTimer)
+ self.timeoutTimer = null
+ }
+
+ var addCookie = function (cookie) {
+ if (self._jar){
+ var targetCookieJar = self._jar.setCookie?self._jar:cookieJar;
+
+ //set the cookie if it's domain in the href's domain.
+ targetCookieJar.setCookie(cookie, self.uri.href, function(err){
+ if (err){
+ console.warn('set cookie failed,'+ err)
+ }
+ })
+ }
+
+ }
+
+ if (hasHeader('set-cookie', response.headers) && (!self._disableCookies)) {
+ var headerName = hasHeader('set-cookie', response.headers)
+ if (Array.isArray(response.headers[headerName])) response.headers[headerName].forEach(addCookie)
+ else addCookie(response.headers[headerName])
+ }
+
+ var redirectTo = null
+ if (response.statusCode >= 300 && response.statusCode < 400 && hasHeader('location', response.headers)) {
+ var location = response.headers[hasHeader('location', response.headers)]
+ debug('redirect', location)
+
+ if (self.followAllRedirects) {
+ redirectTo = location
+ } else if (self.followRedirect) {
+ switch (self.method) {
+ case 'PATCH':
+ case 'PUT':
+ case 'POST':
+ case 'DELETE':
+ // Do not follow redirects
+ break
+ default:
+ redirectTo = location
+ break
+ }
+ }
+ } else if (response.statusCode == 401 && self._hasAuth && !self._sentAuth) {
+ var authHeader = response.headers[hasHeader('www-authenticate', response.headers)]
+ var authVerb = authHeader && authHeader.split(' ')[0]
+ debug('reauth', authVerb)
+
+ switch (authVerb) {
+ case 'Basic':
+ self.auth(self._user, self._pass, true)
+ redirectTo = self.uri
+ break
+
+ case 'Digest':
+ // TODO: More complete implementation of RFC 2617.
+ // - check challenge.algorithm
+ // - support algorithm="MD5-sess"
+ // - handle challenge.domain
+ // - support qop="auth-int" only
+ // - handle Authentication-Info (not necessarily?)
+ // - check challenge.stale (not necessarily?)
+ // - increase nc (not necessarily?)
+ // For reference:
+ // http://tools.ietf.org/html/rfc2617#section-3
+ // https://github.com/bagder/curl/blob/master/lib/http_digest.c
+
+ var challenge = {}
+ var re = /([a-z0-9_-]+)=(?:"([^"]+)"|([a-z0-9_-]+))/gi
+ for (;;) {
+ var match = re.exec(authHeader)
+ if (!match) break
+ challenge[match[1]] = match[2] || match[3];
+ }
+
+ var ha1 = md5(self._user + ':' + challenge.realm + ':' + self._pass)
+ var ha2 = md5(self.method + ':' + self.uri.path)
+ var qop = /(^|,)\s*auth\s*($|,)/.test(challenge.qop) && 'auth'
+ var nc = qop && '00000001'
+ var cnonce = qop && uuid().replace(/-/g, '')
+ var digestResponse = qop ? md5(ha1 + ':' + challenge.nonce + ':' + nc + ':' + cnonce + ':' + qop + ':' + ha2) : md5(ha1 + ':' + challenge.nonce + ':' + ha2)
+ var authValues = {
+ username: self._user,
+ realm: challenge.realm,
+ nonce: challenge.nonce,
+ uri: self.uri.path,
+ qop: qop,
+ response: digestResponse,
+ nc: nc,
+ cnonce: cnonce,
+ algorithm: challenge.algorithm,
+ opaque: challenge.opaque
+ }
+
+ authHeader = []
+ for (var k in authValues) {
+ if (!authValues[k]) {
+ //ignore
+ } else if (k === 'qop' || k === 'nc' || k === 'algorithm') {
+ authHeader.push(k + '=' + authValues[k])
+ } else {
+ authHeader.push(k + '="' + authValues[k] + '"')
+ }
+ }
+ authHeader = 'Digest ' + authHeader.join(', ')
+ self.setHeader('authorization', authHeader)
+ self._sentAuth = true
+
+ redirectTo = self.uri
+ break
+ }
+ }
+
+ if (redirectTo) {
+ debug('redirect to', redirectTo)
+
+ // ignore any potential response body. it cannot possibly be useful
+ // to us at this point.
+ if (self._paused) response.resume()
+
+ if (self._redirectsFollowed >= self.maxRedirects) {
+ self.emit('error', new Error("Exceeded maxRedirects. Probably stuck in a redirect loop "+self.uri.href))
+ return
+ }
+ self._redirectsFollowed += 1
+
+ if (!isUrl.test(redirectTo)) {
+ redirectTo = url.resolve(self.uri.href, redirectTo)
+ }
+
+ var uriPrev = self.uri
+ self.uri = url.parse(redirectTo)
+
+ // handle the case where we change protocol from https to http or vice versa
+ if (self.uri.protocol !== uriPrev.protocol) {
+ self._updateProtocol()
+ }
+
+ self.redirects.push(
+ { statusCode : response.statusCode
+ , redirectUri: redirectTo
+ }
+ )
+ if (self.followAllRedirects && response.statusCode != 401) self.method = 'GET'
+ // self.method = 'GET' // Force all redirects to use GET || commented out fixes #215
+ delete self.src
+ delete self.req
+ delete self.agent
+ delete self._started
+ if (response.statusCode != 401) {
+ // Remove parameters from the previous response, unless this is the second request
+ // for a server that requires digest authentication.
+ delete self.body
+ delete self._form
+ if (self.headers) {
+ if (self.hasHeader('host')) delete self.headers[self.hasHeader('host')]
+ if (self.hasHeader('content-type')) delete self.headers[self.hasHeader('content-type')]
+ if (self.hasHeader('content-length')) delete self.headers[self.hasHeader('content-length')]
+ }
+ }
+
+ self.emit('redirect');
+
+ self.init()
+ return // Ignore the rest of the response
+ } else {
+ self._redirectsFollowed = self._redirectsFollowed || 0
+ // Be a good stream and emit end when the response is finished.
+ // Hack to emit end on close because of a core bug that never fires end
+ response.on('close', function () {
+ if (!self._ended) self.response.emit('end')
+ })
+
+ if (self.encoding) {
+ if (self.dests.length !== 0) {
+ console.error("Ignoring encoding parameter as this stream is being piped to another stream which makes the encoding option invalid.")
+ } else {
+ response.setEncoding(self.encoding)
+ }
+ }
+
+ self.emit('response', response)
+
+ self.dests.forEach(function (dest) {
+ self.pipeDest(dest)
+ })
+
+ response.on("data", function (chunk) {
+ self._destdata = true
+ self.emit("data", chunk)
+ })
+ response.on("end", function (chunk) {
+ self._ended = true
+ self.emit("end", chunk)
+ })
+ response.on("close", function () {self.emit("close")})
+
+ if (self.callback) {
+ var buffer = []
+ var bodyLen = 0
+ self.on("data", function (chunk) {
+ buffer.push(chunk)
+ bodyLen += chunk.length
+ })
+ self.on("end", function () {
+ debug('end event', self.uri.href)
+ if (self._aborted) {
+ debug('aborted', self.uri.href)
+ return
+ }
+
+ if (buffer.length && Buffer.isBuffer(buffer[0])) {
+ debug('has body', self.uri.href, bodyLen)
+ var body = new Buffer(bodyLen)
+ var i = 0
+ buffer.forEach(function (chunk) {
+ chunk.copy(body, i, 0, chunk.length)
+ i += chunk.length
+ })
+ if (self.encoding === null) {
+ response.body = body
+ } else {
+ response.body = body.toString(self.encoding)
+ }
+ } else if (buffer.length) {
+ // The UTF8 BOM [0xEF,0xBB,0xBF] is converted to [0xFE,0xFF] in the JS UTC16/UCS2 representation.
+ // Strip this value out when the encoding is set to 'utf8', as upstream consumers won't expect it and it breaks JSON.parse().
+ if (self.encoding === 'utf8' && buffer[0].length > 0 && buffer[0][0] === "\uFEFF") {
+ buffer[0] = buffer[0].substring(1)
+ }
+ response.body = buffer.join('')
+ }
+
+ if (self._json) {
+ try {
+ response.body = JSON.parse(response.body)
+ } catch (e) {}
+ }
+ debug('emitting complete', self.uri.href)
+ if(response.body == undefined && !self._json) {
+ response.body = "";
+ }
+ self.emit('complete', response, response.body)
+ })
+ }
+ //if no callback
+ else{
+ self.on("end", function () {
+ if (self._aborted) {
+ debug('aborted', self.uri.href)
+ return
+ }
+ self.emit('complete', response);
+ });
+ }
+ }
+ debug('finish init function', self.uri.href)
+}
+
+Request.prototype.abort = function () {
+ this._aborted = true
+
+ if (this.req) {
+ this.req.abort()
+ }
+ else if (this.response) {
+ this.response.abort()
+ }
+
+ this.emit("abort")
+}
+
+Request.prototype.pipeDest = function (dest) {
+ var response = this.response
+ // Called after the response is received
+ if (dest.headers && !dest.headersSent) {
+ if (hasHeader('content-type', response.headers)) {
+ var ctname = hasHeader('content-type', response.headers)
+ if (dest.setHeader) dest.setHeader(ctname, response.headers[ctname])
+ else dest.headers[ctname] = response.headers[ctname]
+ }
+
+ if (hasHeader('content-length', response.headers)) {
+ var clname = hasHeader('content-length', response.headers)
+ if (dest.setHeader) dest.setHeader(clname, response.headers[clname])
+ else dest.headers[clname] = response.headers[clname]
+ }
+ }
+ if (dest.setHeader && !dest.headersSent) {
+ for (var i in response.headers) {
+ dest.setHeader(i, response.headers[i])
+ }
+ dest.statusCode = response.statusCode
+ }
+ if (this.pipefilter) this.pipefilter(response, dest)
+}
+
+// Composable API
+Request.prototype.setHeader = function (name, value, clobber) {
+ if (clobber === undefined) clobber = true
+ if (clobber || !this.hasHeader(name)) this.headers[name] = value
+ else this.headers[this.hasHeader(name)] += ',' + value
+ return this
+}
+Request.prototype.setHeaders = function (headers) {
+ for (var i in headers) {this.setHeader(i, headers[i])}
+ return this
+}
+Request.prototype.hasHeader = function (header, headers) {
+ var headers = Object.keys(headers || this.headers)
+ , lheaders = headers.map(function (h) {return h.toLowerCase()})
+ ;
+ header = header.toLowerCase()
+ for (var i=0;i<lheaders.length;i++) {
+ if (lheaders[i] === header) return headers[i]
+ }
+ return false
+}
+
+var hasHeader = Request.prototype.hasHeader
+
+Request.prototype.qs = function (q, clobber) {
+ var base
+ if (!clobber && this.uri.query) base = qs.parse(this.uri.query)
+ else base = {}
+
+ for (var i in q) {
+ base[i] = q[i]
+ }
+
+ if (qs.stringify(base) === ''){
+ return this
+ }
+
+ this.uri = url.parse(this.uri.href.split('?')[0] + '?' + qs.stringify(base))
+ this.url = this.uri
+ this.path = this.uri.path
+
+ return this
+}
+Request.prototype.form = function (form) {
+ if (form) {
+ this.setHeader('content-type', 'application/x-www-form-urlencoded; charset=utf-8')
+ this.body = qs.stringify(form).toString('utf8')
+ return this
+ }
+ // create form-data object
+ this._form = new FormData()
+ return this._form
+}
+Request.prototype.multipart = function (multipart) {
+ var self = this
+ self.body = []
+
+ if (!self.hasHeader('content-type')) {
+ self.setHeader('content-type', 'multipart/related; boundary=' + self.boundary)
+ } else {
+ var headerName = self.hasHeader('content-type');
+ self.setHeader(headerName, self.headers[headerName].split(';')[0] + '; boundary=' + self.boundary)
+ }
+
+ if (!multipart.forEach) throw new Error('Argument error, options.multipart.')
+
+ if (self.preambleCRLF) {
+ self.body.push(new Buffer('\r\n'))
+ }
+
+ multipart.forEach(function (part) {
+ var body = part.body
+ if(body == null) throw Error('Body attribute missing in multipart.')
+ delete part.body
+ var preamble = '--' + self.boundary + '\r\n'
+ Object.keys(part).forEach(function (key) {
+ preamble += key + ': ' + part[key] + '\r\n'
+ })
+ preamble += '\r\n'
+ self.body.push(new Buffer(preamble))
+ self.body.push(new Buffer(body))
+ self.body.push(new Buffer('\r\n'))
+ })
+ self.body.push(new Buffer('--' + self.boundary + '--'))
+ return self
+}
+Request.prototype.json = function (val) {
+ var self = this
+
+ if (!self.hasHeader('accept')) self.setHeader('accept', 'application/json')
+
+ this._json = true
+ if (typeof val === 'boolean') {
+ if (typeof this.body === 'object') {
+ this.body = safeStringify(this.body)
+ self.setHeader('content-type', 'application/json')
+ }
+ } else {
+ this.body = safeStringify(val)
+ self.setHeader('content-type', 'application/json')
+ }
+ return this
+}
+Request.prototype.getHeader = function (name, headers) {
+ var result, re, match
+ if (!headers) headers = this.headers
+ Object.keys(headers).forEach(function (key) {
+ re = new RegExp(name, 'i')
+ match = key.match(re)
+ if (match) result = headers[key]
+ })
+ return result
+}
+var getHeader = Request.prototype.getHeader
+
+Request.prototype.auth = function (user, pass, sendImmediately) {
+ if (typeof user !== 'string' || (pass !== undefined && typeof pass !== 'string')) {
+ throw new Error('auth() received invalid user or password')
+ }
+ this._user = user
+ this._pass = pass
+ this._hasAuth = true
+ var header = typeof pass !== 'undefined' ? user + ':' + pass : user
+ if (sendImmediately || typeof sendImmediately == 'undefined') {
+ this.setHeader('authorization', 'Basic ' + toBase64(header))
+ this._sentAuth = true
+ }
+ return this
+}
+Request.prototype.aws = function (opts, now) {
+ if (!now) {
+ this._aws = opts
+ return this
+ }
+ var date = new Date()
+ this.setHeader('date', date.toUTCString())
+ var auth =
+ { key: opts.key
+ , secret: opts.secret
+ , verb: this.method.toUpperCase()
+ , date: date
+ , contentType: this.getHeader('content-type') || ''
+ , md5: this.getHeader('content-md5') || ''
+ , amazonHeaders: aws.canonicalizeHeaders(this.headers)
+ }
+ if (opts.bucket && this.path) {
+ auth.resource = '/' + opts.bucket + this.path
+ } else if (opts.bucket && !this.path) {
+ auth.resource = '/' + opts.bucket
+ } else if (!opts.bucket && this.path) {
+ auth.resource = this.path
+ } else if (!opts.bucket && !this.path) {
+ auth.resource = '/'
+ }
+ auth.resource = aws.canonicalizeResource(auth.resource)
+ this.setHeader('authorization', aws.authorization(auth))
+
+ return this
+}
+Request.prototype.httpSignature = function (opts) {
+ var req = this
+ httpSignature.signRequest({
+ getHeader: function(header) {
+ return getHeader(header, req.headers)
+ },
+ setHeader: function(header, value) {
+ req.setHeader(header, value)
+ },
+ method: this.method,
+ path: this.path
+ }, opts)
+ debug('httpSignature authorization', this.getHeader('authorization'))
+
+ return this
+}
+
+Request.prototype.hawk = function (opts) {
+ this.setHeader('Authorization', hawk.client.header(this.uri, this.method, opts).field)
+}
+
+Request.prototype.oauth = function (_oauth) {
+ var form
+ if (this.hasHeader('content-type') &&
+ this.getHeader('content-type').slice(0, 'application/x-www-form-urlencoded'.length) ===
+ 'application/x-www-form-urlencoded'
+ ) {
+ form = qs.parse(this.body)
+ }
+ if (this.uri.query) {
+ form = qs.parse(this.uri.query)
+ }
+ if (!form) form = {}
+ var oa = {}
+ for (var i in form) oa[i] = form[i]
+ for (var i in _oauth) oa['oauth_'+i] = _oauth[i]
+ if (!oa.oauth_version) oa.oauth_version = '1.0'
+ if (!oa.oauth_timestamp) oa.oauth_timestamp = Math.floor( Date.now() / 1000 ).toString()
+ if (!oa.oauth_nonce) oa.oauth_nonce = uuid().replace(/-/g, '')
+
+ oa.oauth_signature_method = 'HMAC-SHA1'
+
+ var consumer_secret = oa.oauth_consumer_secret
+ delete oa.oauth_consumer_secret
+ var token_secret = oa.oauth_token_secret
+ delete oa.oauth_token_secret
+ var timestamp = oa.oauth_timestamp
+
+ var baseurl = this.uri.protocol + '//' + this.uri.host + this.uri.pathname
+ var signature = oauth.hmacsign(this.method, baseurl, oa, consumer_secret, token_secret)
+
+ // oa.oauth_signature = signature
+ for (var i in form) {
+ if ( i.slice(0, 'oauth_') in _oauth) {
+ // skip
+ } else {
+ delete oa['oauth_'+i]
+ if (i !== 'x_auth_mode') delete oa[i]
+ }
+ }
+ oa.oauth_timestamp = timestamp
+ var authHeader = 'OAuth '+Object.keys(oa).sort().map(function (i) {return i+'="'+oauth.rfc3986(oa[i])+'"'}).join(',')
+ authHeader += ',oauth_signature="' + oauth.rfc3986(signature) + '"'
+ this.setHeader('Authorization', authHeader)
+ return this
+}
+Request.prototype.jar = function (jar) {
+ var cookies
+
+ if (this._redirectsFollowed === 0) {
+ this.originalCookieHeader = this.getHeader('cookie')
+ }
+
+ if (!jar) {
+ // disable cookies
+ cookies = false
+ this._disableCookies = true
+ } else {
+ var targetCookieJar = (jar && jar.getCookieString)?jar:cookieJar;
+ var urihref = this.uri.href
+
+ //fetch cookie in the Specified host
+ targetCookieJar.getCookieString(urihref, function(err, hrefCookie){
+ if (err){
+ console.warn('get cookieString failed,' +err)
+ } else {
+ cookies = hrefCookie
+ }
+ })
+
+ }
+
+ //if need cookie and cookie is not empty
+ if (cookies && cookies.length) {
+ if (this.originalCookieHeader) {
+ // Don't overwrite existing Cookie header
+ this.setHeader('cookie', this.originalCookieHeader + '; ' + cookies)
+ } else {
+ this.setHeader('cookie', cookies)
+ }
+ }
+ this._jar = jar
+ return this
+}
+
+
+// Stream API
+Request.prototype.pipe = function (dest, opts) {
+ if (this.response) {
+ if (this._destdata) {
+ throw new Error("You cannot pipe after data has been emitted from the response.")
+ } else if (this._ended) {
+ throw new Error("You cannot pipe after the response has been ended.")
+ } else {
+ stream.Stream.prototype.pipe.call(this, dest, opts)
+ this.pipeDest(dest)
+ return dest
+ }
+ } else {
+ this.dests.push(dest)
+ stream.Stream.prototype.pipe.call(this, dest, opts)
+ return dest
+ }
+}
+Request.prototype.write = function () {
+ if (!this._started) this.start()
+ return this.req.write.apply(this.req, arguments)
+}
+Request.prototype.end = function (chunk) {
+ if (chunk) this.write(chunk)
+ if (!this._started) this.start()
+ this.req.end()
+}
+Request.prototype.pause = function () {
+ if (!this.response) this._paused = true
+ else this.response.pause.apply(this.response, arguments)
+}
+Request.prototype.resume = function () {
+ if (!this.response) this._paused = false
+ else this.response.resume.apply(this.response, arguments)
+}
+Request.prototype.destroy = function () {
+ if (!this._ended) this.end()
+ else if (this.response) this.response.destroy()
+}
+
+function toJSON () {
+ return getSafe(this, '__' + (((1+Math.random())*0x10000)|0).toString(16))
+}
+
+Request.prototype.toJSON = toJSON
+
+
+module.exports = Request
diff --git a/deps/npm/node_modules/request/tests/googledoodle.jpg b/deps/npm/node_modules/request/tests/googledoodle.jpg
deleted file mode 100644
index f80c9c52d..000000000
--- a/deps/npm/node_modules/request/tests/googledoodle.jpg
+++ /dev/null
Binary files differ
diff --git a/deps/npm/node_modules/request/tests/run.js b/deps/npm/node_modules/request/tests/run.js
deleted file mode 100644
index e717f02a3..000000000
--- a/deps/npm/node_modules/request/tests/run.js
+++ /dev/null
@@ -1,40 +0,0 @@
-var spawn = require('child_process').spawn
- , exitCode = 0
- , timeout = 10000
- , fs = require('fs')
- ;
-
-fs.readdir(__dirname, function (e, files) {
- if (e) throw e
-
- var tests = files.filter(function (f) {return f.slice(0, 'test-'.length) === 'test-'})
-
- var next = function () {
- if (tests.length === 0) process.exit(exitCode);
-
- var file = tests.shift()
- console.log(file)
- var proc = spawn('node', [ 'tests/' + file ])
-
- var killed = false
- var t = setTimeout(function () {
- proc.kill()
- exitCode += 1
- console.error(file + ' timeout')
- killed = true
- }, timeout)
-
- proc.stdout.pipe(process.stdout)
- proc.stderr.pipe(process.stderr)
- proc.on('exit', function (code) {
- if (code && !killed) console.error(file + ' failed')
- exitCode += code || 0
- clearTimeout(t)
- next()
- })
- }
- next()
-
-})
-
-
diff --git a/deps/npm/node_modules/request/tests/server.js b/deps/npm/node_modules/request/tests/server.js
deleted file mode 100644
index b6eacbadc..000000000
--- a/deps/npm/node_modules/request/tests/server.js
+++ /dev/null
@@ -1,90 +0,0 @@
-var fs = require('fs')
- , http = require('http')
- , path = require('path')
- , https = require('https')
- , events = require('events')
- , stream = require('stream')
- , assert = require('assert')
- ;
-
-exports.createServer = function (port) {
- port = port || 6767
- var s = http.createServer(function (req, resp) {
- s.emit(req.url, req, resp);
- })
- s.port = port
- s.url = 'http://localhost:'+port
- return s;
-}
-
-exports.createSSLServer = function(port, opts) {
- port = port || 16767
-
- var options = { 'key' : path.join(__dirname, 'ssl', 'test.key')
- , 'cert': path.join(__dirname, 'ssl', 'test.crt')
- }
- if (opts) {
- for (var i in opts) options[i] = opts[i]
- }
-
- for (var i in options) {
- options[i] = fs.readFileSync(options[i])
- }
-
- var s = https.createServer(options, function (req, resp) {
- s.emit(req.url, req, resp);
- })
- s.port = port
- s.url = 'https://localhost:'+port
- return s;
-}
-
-exports.createPostStream = function (text) {
- var postStream = new stream.Stream();
- postStream.writeable = true;
- postStream.readable = true;
- setTimeout(function () {postStream.emit('data', new Buffer(text)); postStream.emit('end')}, 0);
- return postStream;
-}
-exports.createPostValidator = function (text, reqContentType) {
- var l = function (req, resp) {
- var r = '';
- req.on('data', function (chunk) {r += chunk})
- req.on('end', function () {
- if (req.headers['content-type'] && req.headers['content-type'].indexOf('boundary=') >= 0) {
- var boundary = req.headers['content-type'].split('boundary=')[1];
- text = text.replace(/__BOUNDARY__/g, boundary);
- }
- if (r !== text) console.log(r, text);
- assert.equal(r, text)
- if (reqContentType) {
- assert.ok(req.headers['content-type'])
- assert.ok(~req.headers['content-type'].indexOf(reqContentType))
- }
- resp.writeHead(200, {'content-type':'text/plain'})
- resp.write('OK')
- resp.end()
- })
- }
- return l;
-}
-exports.createGetResponse = function (text, contentType) {
- var l = function (req, resp) {
- contentType = contentType || 'text/plain'
- resp.writeHead(200, {'content-type':contentType})
- resp.write(text)
- resp.end()
- }
- return l;
-}
-exports.createChunkResponse = function (chunks, contentType) {
- var l = function (req, resp) {
- contentType = contentType || 'text/plain'
- resp.writeHead(200, {'content-type':contentType})
- chunks.forEach(function (chunk) {
- resp.write(chunk)
- })
- resp.end()
- }
- return l;
-}
diff --git a/deps/npm/node_modules/request/tests/squid.conf b/deps/npm/node_modules/request/tests/squid.conf
deleted file mode 100644
index 0d4a3b6fe..000000000
--- a/deps/npm/node_modules/request/tests/squid.conf
+++ /dev/null
@@ -1,77 +0,0 @@
-#
-# Recommended minimum configuration:
-#
-acl manager proto cache_object
-acl localhost src 127.0.0.1/32 ::1
-acl to_localhost dst 127.0.0.0/8 0.0.0.0/32 ::1
-
-# Example rule allowing access from your local networks.
-# Adapt to list your (internal) IP networks from where browsing
-# should be allowed
-acl localnet src 10.0.0.0/8 # RFC1918 possible internal network
-acl localnet src 172.16.0.0/12 # RFC1918 possible internal network
-acl localnet src 192.168.0.0/16 # RFC1918 possible internal network
-acl localnet src fc00::/7 # RFC 4193 local private network range
-acl localnet src fe80::/10 # RFC 4291 link-local (directly plugged) machines
-
-acl SSL_ports port 443
-acl Safe_ports port 80 # http
-acl Safe_ports port 21 # ftp
-acl Safe_ports port 443 # https
-acl Safe_ports port 70 # gopher
-acl Safe_ports port 210 # wais
-acl Safe_ports port 1025-65535 # unregistered ports
-acl Safe_ports port 280 # http-mgmt
-acl Safe_ports port 488 # gss-http
-acl Safe_ports port 591 # filemaker
-acl Safe_ports port 777 # multiling http
-acl CONNECT method CONNECT
-
-#
-# Recommended minimum Access Permission configuration:
-#
-# Only allow cachemgr access from localhost
-http_access allow manager localhost
-http_access deny manager
-
-# Deny requests to certain unsafe ports
-http_access deny !Safe_ports
-
-# Deny CONNECT to other than secure SSL ports
-#http_access deny CONNECT !SSL_ports
-
-# We strongly recommend the following be uncommented to protect innocent
-# web applications running on the proxy server who think the only
-# one who can access services on "localhost" is a local user
-#http_access deny to_localhost
-
-#
-# INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS
-#
-
-# Example rule allowing access from your local networks.
-# Adapt localnet in the ACL section to list your (internal) IP networks
-# from where browsing should be allowed
-http_access allow localnet
-http_access allow localhost
-
-# And finally deny all other access to this proxy
-http_access deny all
-
-# Squid normally listens to port 3128
-http_port 3128
-
-# We recommend you to use at least the following line.
-hierarchy_stoplist cgi-bin ?
-
-# Uncomment and adjust the following to add a disk cache directory.
-#cache_dir ufs /usr/local/var/cache 100 16 256
-
-# Leave coredumps in the first cache dir
-coredump_dir /usr/local/var/cache
-
-# Add any of your own refresh_pattern entries above these.
-refresh_pattern ^ftp: 1440 20% 10080
-refresh_pattern ^gopher: 1440 0% 1440
-refresh_pattern -i (/cgi-bin/|\?) 0 0% 0
-refresh_pattern . 0 20% 4320
diff --git a/deps/npm/node_modules/request/tests/ssl/ca/ca.cnf b/deps/npm/node_modules/request/tests/ssl/ca/ca.cnf
deleted file mode 100644
index 425a88915..000000000
--- a/deps/npm/node_modules/request/tests/ssl/ca/ca.cnf
+++ /dev/null
@@ -1,20 +0,0 @@
-[ req ]
-default_bits = 1024
-days = 3650
-distinguished_name = req_distinguished_name
-attributes = req_attributes
-prompt = no
-output_password = password
-
-[ req_distinguished_name ]
-C = US
-ST = CA
-L = Oakland
-O = request
-OU = request Certificate Authority
-CN = requestCA
-emailAddress = mikeal@mikealrogers.com
-
-[ req_attributes ]
-challengePassword = password challenge
-
diff --git a/deps/npm/node_modules/request/tests/ssl/ca/ca.crl b/deps/npm/node_modules/request/tests/ssl/ca/ca.crl
deleted file mode 100644
index e69de29bb..000000000
--- a/deps/npm/node_modules/request/tests/ssl/ca/ca.crl
+++ /dev/null
diff --git a/deps/npm/node_modules/request/tests/ssl/ca/ca.crt b/deps/npm/node_modules/request/tests/ssl/ca/ca.crt
deleted file mode 100644
index b4524e44b..000000000
--- a/deps/npm/node_modules/request/tests/ssl/ca/ca.crt
+++ /dev/null
@@ -1,17 +0,0 @@
------BEGIN CERTIFICATE-----
-MIICvTCCAiYCCQDn+P/MSbDsWjANBgkqhkiG9w0BAQUFADCBojELMAkGA1UEBhMC
-VVMxCzAJBgNVBAgTAkNBMRAwDgYDVQQHEwdPYWtsYW5kMRAwDgYDVQQKEwdyZXF1
-ZXN0MSYwJAYDVQQLEx1yZXF1ZXN0IENlcnRpZmljYXRlIEF1dGhvcml0eTESMBAG
-A1UEAxMJcmVxdWVzdENBMSYwJAYJKoZIhvcNAQkBFhdtaWtlYWxAbWlrZWFscm9n
-ZXJzLmNvbTAeFw0xMjAzMDEyMjUwNTZaFw0yMjAyMjcyMjUwNTZaMIGiMQswCQYD
-VQQGEwJVUzELMAkGA1UECBMCQ0ExEDAOBgNVBAcTB09ha2xhbmQxEDAOBgNVBAoT
-B3JlcXVlc3QxJjAkBgNVBAsTHXJlcXVlc3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5
-MRIwEAYDVQQDEwlyZXF1ZXN0Q0ExJjAkBgkqhkiG9w0BCQEWF21pa2VhbEBtaWtl
-YWxyb2dlcnMuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC7t9pQUAK4
-5XJYTI6NrF0n3G2HZsfN+rPYSVzzL8SuVyb1tHXos+vbPm3NKI4E8X1yVAXU8CjJ
-5SqXnp4DAypAhaseho81cbhk7LXUhFz78OvAa+OD+xTAEAnNQ8tGUr4VGyplEjfD
-xsBVuqV2j8GPNTftr+drOCFlqfAgMrBn4wIDAQABMA0GCSqGSIb3DQEBBQUAA4GB
-ADVdTlVAL45R+PACNS7Gs4o81CwSclukBu4FJbxrkd4xGQmurgfRrYYKjtqiopQm
-D7ysRamS3HMN9/VKq2T7r3z1PMHPAy7zM4uoXbbaTKwlnX4j/8pGPn8Ca3qHXYlo
-88L/OOPc6Di7i7qckS3HFbXQCTiULtxWmy97oEuTwrAj
------END CERTIFICATE-----
diff --git a/deps/npm/node_modules/request/tests/ssl/ca/ca.csr b/deps/npm/node_modules/request/tests/ssl/ca/ca.csr
deleted file mode 100644
index e48c56eef..000000000
--- a/deps/npm/node_modules/request/tests/ssl/ca/ca.csr
+++ /dev/null
@@ -1,13 +0,0 @@
------BEGIN CERTIFICATE REQUEST-----
-MIICBjCCAW8CAQAwgaIxCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDQTEQMA4GA1UE
-BxMHT2FrbGFuZDEQMA4GA1UEChMHcmVxdWVzdDEmMCQGA1UECxMdcmVxdWVzdCBD
-ZXJ0aWZpY2F0ZSBBdXRob3JpdHkxEjAQBgNVBAMTCXJlcXVlc3RDQTEmMCQGCSqG
-SIb3DQEJARYXbWlrZWFsQG1pa2VhbHJvZ2Vycy5jb20wgZ8wDQYJKoZIhvcNAQEB
-BQADgY0AMIGJAoGBALu32lBQArjlclhMjo2sXSfcbYdmx836s9hJXPMvxK5XJvW0
-deiz69s+bc0ojgTxfXJUBdTwKMnlKpeengMDKkCFqx6GjzVxuGTstdSEXPvw68Br
-44P7FMAQCc1Dy0ZSvhUbKmUSN8PGwFW6pXaPwY81N+2v52s4IWWp8CAysGfjAgMB
-AAGgIzAhBgkqhkiG9w0BCQcxFBMScGFzc3dvcmQgY2hhbGxlbmdlMA0GCSqGSIb3
-DQEBBQUAA4GBAGJO7grHeVHXetjHEK8urIxdnvfB2qeZeObz4GPKIkqUurjr0rfj
-bA3EK1kDMR5aeQWR8RunixdM16Q6Ry0lEdLVWkdSwRN9dmirIHT9cypqnD/FYOia
-SdezZ0lUzXgmJIwRYRwB1KSMMocIf52ll/xC2bEGg7/ZAEuAyAgcZV3X
------END CERTIFICATE REQUEST-----
diff --git a/deps/npm/node_modules/request/tests/ssl/ca/ca.key b/deps/npm/node_modules/request/tests/ssl/ca/ca.key
deleted file mode 100644
index a53e7f75d..000000000
--- a/deps/npm/node_modules/request/tests/ssl/ca/ca.key
+++ /dev/null
@@ -1,18 +0,0 @@
------BEGIN RSA PRIVATE KEY-----
-Proc-Type: 4,ENCRYPTED
-DEK-Info: DES-EDE3-CBC,C8B5887048377F02
-
-nyD5ZH0Wup2uWsDvurq5mKDaDrf8lvNn9w0SH/ZkVnfR1/bkwqrFriqJWvZNUG+q
-nS0iBYczsWLJnbub9a1zLOTENWUKVD5uqbC3aGHhnoUTNSa27DONgP8gHOn6JgR+
-GAKo01HCSTiVT4LjkwN337QKHnMP2fTzg+IoC/CigvMcq09hRLwU1/guq0GJKGwH
-gTxYNuYmQC4Tjh8vdS4liF+Ve/P3qPR2CehZrIOkDT8PHJBGQJRo4xGUIB7Tpk38
-VCk+UZ0JCS2coY8VkY/9tqFJp/ZnnQQVmaNbdRqg7ECKL+bXnNo7yjzmazPZmPe3
-/ShbE0+CTt7LrjCaQAxWbeDzqfo1lQfgN1LulTm8MCXpQaJpv7v1VhIhQ7afjMYb
-4thW/ypHPiYS2YJCAkAVlua9Oxzzh1qJoh8Df19iHtpd79Q77X/qf+1JvITlMu0U
-gi7yEatmQcmYNws1mtTC1q2DXrO90c+NZ0LK/Alse6NRL/xiUdjug2iHeTf/idOR
-Gg/5dSZbnnlj1E5zjSMDkzg6EHAFmHV4jYGSAFLEQgp4V3ZhMVoWZrvvSHgKV/Qh
-FqrAK4INr1G2+/QTd09AIRzfy3/j6yD4A9iNaOsEf9Ua7Qh6RcALRCAZTWR5QtEf
-dX+iSNJ4E85qXs0PqwkMDkoaxIJ+tmIRJY7y8oeylV8cfGAi8Soubt/i3SlR8IHC
-uDMas/2OnwafK3N7ODeE1i7r7wkzQkSHaEz0TrF8XRnP25jAICCSLiMdAAjKfxVb
-EvzsFSuAy3Jt6bU3hSLY9o4YVYKE+68ITMv9yNjvTsEiW+T+IbN34w==
------END RSA PRIVATE KEY-----
diff --git a/deps/npm/node_modules/request/tests/ssl/ca/ca.srl b/deps/npm/node_modules/request/tests/ssl/ca/ca.srl
deleted file mode 100644
index 17128db3a..000000000
--- a/deps/npm/node_modules/request/tests/ssl/ca/ca.srl
+++ /dev/null
@@ -1 +0,0 @@
-ADF62016AA40C9C3
diff --git a/deps/npm/node_modules/request/tests/ssl/ca/server.cnf b/deps/npm/node_modules/request/tests/ssl/ca/server.cnf
deleted file mode 100644
index cd1fd1e39..000000000
--- a/deps/npm/node_modules/request/tests/ssl/ca/server.cnf
+++ /dev/null
@@ -1,19 +0,0 @@
-[ req ]
-default_bits = 1024
-days = 3650
-distinguished_name = req_distinguished_name
-attributes = req_attributes
-prompt = no
-
-[ req_distinguished_name ]
-C = US
-ST = CA
-L = Oakland
-O = request
-OU = testing
-CN = testing.request.mikealrogers.com
-emailAddress = mikeal@mikealrogers.com
-
-[ req_attributes ]
-challengePassword = password challenge
-
diff --git a/deps/npm/node_modules/request/tests/ssl/ca/server.crt b/deps/npm/node_modules/request/tests/ssl/ca/server.crt
deleted file mode 100644
index efe96cefc..000000000
--- a/deps/npm/node_modules/request/tests/ssl/ca/server.crt
+++ /dev/null
@@ -1,16 +0,0 @@
------BEGIN CERTIFICATE-----
-MIICejCCAeMCCQCt9iAWqkDJwzANBgkqhkiG9w0BAQUFADCBojELMAkGA1UEBhMC
-VVMxCzAJBgNVBAgTAkNBMRAwDgYDVQQHEwdPYWtsYW5kMRAwDgYDVQQKEwdyZXF1
-ZXN0MSYwJAYDVQQLEx1yZXF1ZXN0IENlcnRpZmljYXRlIEF1dGhvcml0eTESMBAG
-A1UEAxMJcmVxdWVzdENBMSYwJAYJKoZIhvcNAQkBFhdtaWtlYWxAbWlrZWFscm9n
-ZXJzLmNvbTAeFw0xMjAzMDEyMjUwNTZaFw0yMjAyMjcyMjUwNTZaMIGjMQswCQYD
-VQQGEwJVUzELMAkGA1UECBMCQ0ExEDAOBgNVBAcTB09ha2xhbmQxEDAOBgNVBAoT
-B3JlcXVlc3QxEDAOBgNVBAsTB3Rlc3RpbmcxKTAnBgNVBAMTIHRlc3RpbmcucmVx
-dWVzdC5taWtlYWxyb2dlcnMuY29tMSYwJAYJKoZIhvcNAQkBFhdtaWtlYWxAbWlr
-ZWFscm9nZXJzLmNvbTBcMA0GCSqGSIb3DQEBAQUAA0sAMEgCQQDgVl0jMumvOpmM
-20W5v9yhGgZj8hPhEQF/N7yCBVBn/rWGYm70IHC8T/pR5c0LkWc5gdnCJEvKWQjh
-DBKxZD8FAgMBAAEwDQYJKoZIhvcNAQEFBQADgYEABShRkNgFbgs4vUWW9R9deNJj
-7HJoiTmvkmoOC7QzcYkjdgHbOxsSq3rBnwxsVjY9PAtPwBn0GRspOeG7KzKRgySB
-kb22LyrCFKbEOfKO/+CJc80ioK9zEPVjGsFMyAB+ftYRqM+s/4cQlTg/m89l01wC
-yapjN3RxZbInGhWR+jA=
------END CERTIFICATE-----
diff --git a/deps/npm/node_modules/request/tests/ssl/ca/server.csr b/deps/npm/node_modules/request/tests/ssl/ca/server.csr
deleted file mode 100644
index a8e7595a5..000000000
--- a/deps/npm/node_modules/request/tests/ssl/ca/server.csr
+++ /dev/null
@@ -1,11 +0,0 @@
------BEGIN CERTIFICATE REQUEST-----
-MIIBgjCCASwCAQAwgaMxCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDQTEQMA4GA1UE
-BxMHT2FrbGFuZDEQMA4GA1UEChMHcmVxdWVzdDEQMA4GA1UECxMHdGVzdGluZzEp
-MCcGA1UEAxMgdGVzdGluZy5yZXF1ZXN0Lm1pa2VhbHJvZ2Vycy5jb20xJjAkBgkq
-hkiG9w0BCQEWF21pa2VhbEBtaWtlYWxyb2dlcnMuY29tMFwwDQYJKoZIhvcNAQEB
-BQADSwAwSAJBAOBWXSMy6a86mYzbRbm/3KEaBmPyE+ERAX83vIIFUGf+tYZibvQg
-cLxP+lHlzQuRZzmB2cIkS8pZCOEMErFkPwUCAwEAAaAjMCEGCSqGSIb3DQEJBzEU
-ExJwYXNzd29yZCBjaGFsbGVuZ2UwDQYJKoZIhvcNAQEFBQADQQBD3E5WekQzCEJw
-7yOcqvtPYIxGaX8gRKkYfLPoj3pm3GF5SGqtJKhylKfi89szHXgktnQgzff9FN+A
-HidVJ/3u
------END CERTIFICATE REQUEST-----
diff --git a/deps/npm/node_modules/request/tests/ssl/ca/server.js b/deps/npm/node_modules/request/tests/ssl/ca/server.js
deleted file mode 100644
index 05e21c116..000000000
--- a/deps/npm/node_modules/request/tests/ssl/ca/server.js
+++ /dev/null
@@ -1,28 +0,0 @@
-var fs = require("fs")
-var https = require("https")
-var options = { key: fs.readFileSync("./server.key")
- , cert: fs.readFileSync("./server.crt") }
-
-var server = https.createServer(options, function (req, res) {
- res.writeHead(200)
- res.end()
- server.close()
-})
-server.listen(1337)
-
-var ca = fs.readFileSync("./ca.crt")
-var agent = new https.Agent({ host: "localhost", port: 1337, ca: ca })
-
-https.request({ host: "localhost"
- , method: "HEAD"
- , port: 1337
- , headers: { host: "testing.request.mikealrogers.com" }
- , agent: agent
- , ca: [ ca ]
- , path: "/" }, function (res) {
- if (res.client.authorized) {
- console.log("node test: OK")
- } else {
- throw new Error(res.client.authorizationError)
- }
-}).end()
diff --git a/deps/npm/node_modules/request/tests/ssl/ca/server.key b/deps/npm/node_modules/request/tests/ssl/ca/server.key
deleted file mode 100644
index 72d86984f..000000000
--- a/deps/npm/node_modules/request/tests/ssl/ca/server.key
+++ /dev/null
@@ -1,9 +0,0 @@
------BEGIN RSA PRIVATE KEY-----
-MIIBOwIBAAJBAOBWXSMy6a86mYzbRbm/3KEaBmPyE+ERAX83vIIFUGf+tYZibvQg
-cLxP+lHlzQuRZzmB2cIkS8pZCOEMErFkPwUCAwEAAQJAK+r8ZM2sze8s7FRo/ApB
-iRBtO9fCaIdJwbwJnXKo4RKwZDt1l2mm+fzZ+/QaQNjY1oTROkIIXmnwRvZWfYlW
-gQIhAPKYsG+YSBN9o8Sdp1DMyZ/rUifKX3OE6q9tINkgajDVAiEA7Ltqh01+cnt0
-JEnud/8HHcuehUBLMofeg0G+gCnSbXECIQCqDvkXsWNNLnS/3lgsnvH0Baz4sbeJ
-rjIpuVEeg8eM5QIgbu0+9JmOV6ybdmmiMV4yAncoF35R/iKGVHDZCAsQzDECIQDZ
-0jGz22tlo5YMcYSqrdD3U4sds1pwiAaWFRbCunoUJw==
------END RSA PRIVATE KEY-----
diff --git a/deps/npm/node_modules/request/tests/ssl/npm-ca.crt b/deps/npm/node_modules/request/tests/ssl/npm-ca.crt
deleted file mode 100644
index fde2fe933..000000000
--- a/deps/npm/node_modules/request/tests/ssl/npm-ca.crt
+++ /dev/null
@@ -1,16 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIChzCCAfACCQDauvz/KHp8ejANBgkqhkiG9w0BAQUFADCBhzELMAkGA1UEBhMC
-VVMxCzAJBgNVBAgTAkNBMRAwDgYDVQQHEwdPYWtsYW5kMQwwCgYDVQQKEwNucG0x
-IjAgBgNVBAsTGW5wbSBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkxDjAMBgNVBAMTBW5w
-bUNBMRcwFQYJKoZIhvcNAQkBFghpQGl6cy5tZTAeFw0xMTA5MDUwMTQ3MTdaFw0y
-MTA5MDIwMTQ3MTdaMIGHMQswCQYDVQQGEwJVUzELMAkGA1UECBMCQ0ExEDAOBgNV
-BAcTB09ha2xhbmQxDDAKBgNVBAoTA25wbTEiMCAGA1UECxMZbnBtIENlcnRpZmlj
-YXRlIEF1dGhvcml0eTEOMAwGA1UEAxMFbnBtQ0ExFzAVBgkqhkiG9w0BCQEWCGlA
-aXpzLm1lMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDLI4tIqPpRW+ACw9GE
-OgBlJZwK5f8nnKCLK629Pv5yJpQKs3DENExAyOgDcyaF0HD0zk8zTp+ZsLaNdKOz
-Gn2U181KGprGKAXP6DU6ByOJDWmTlY6+Ad1laYT0m64fERSpHw/hjD3D+iX4aMOl
-y0HdbT5m1ZGh6SJz3ZqxavhHLQIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAC4ySDbC
-l7W1WpLmtLGEQ/yuMLUf6Jy/vr+CRp4h+UzL+IQpCv8FfxsYE7dhf/bmWTEupBkv
-yNL18lipt2jSvR3v6oAHAReotvdjqhxddpe5Holns6EQd1/xEZ7sB1YhQKJtvUrl
-ZNufy1Jf1r0ldEGeA+0ISck7s+xSh9rQD2Op
------END CERTIFICATE-----
diff --git a/deps/npm/node_modules/request/tests/ssl/test.crt b/deps/npm/node_modules/request/tests/ssl/test.crt
deleted file mode 100644
index b357f8641..000000000
--- a/deps/npm/node_modules/request/tests/ssl/test.crt
+++ /dev/null
@@ -1,15 +0,0 @@
------BEGIN CERTIFICATE-----
-MIICQzCCAawCCQCO/XWtRFck1jANBgkqhkiG9w0BAQUFADBmMQswCQYDVQQGEwJU
-SDEQMA4GA1UECBMHQmFuZ2tvazEOMAwGA1UEBxMFU2lsb20xGzAZBgNVBAoTElRo
-ZSBSZXF1ZXN0IE1vZHVsZTEYMBYGA1UEAxMPcmVxdWVzdC5leGFtcGxlMB4XDTEx
-MTIwMzAyMjkyM1oXDTIxMTEzMDAyMjkyM1owZjELMAkGA1UEBhMCVEgxEDAOBgNV
-BAgTB0Jhbmdrb2sxDjAMBgNVBAcTBVNpbG9tMRswGQYDVQQKExJUaGUgUmVxdWVz
-dCBNb2R1bGUxGDAWBgNVBAMTD3JlcXVlc3QuZXhhbXBsZTCBnzANBgkqhkiG9w0B
-AQEFAAOBjQAwgYkCgYEAwmctddZqlA48+NXs0yOy92DijcQV1jf87zMiYAIlNUto
-wghVbTWgJU5r0pdKrD16AptnWJTzKanhItEX8XCCPgsNkq1afgTtJP7rNkwu3xcj
-eIMkhJg/ay4ZnkbnhYdsii5VTU5prix6AqWRAhbkBgoA+iVyHyof8wvZyKBoFTMC
-AwEAATANBgkqhkiG9w0BAQUFAAOBgQB6BybMJbpeiABgihDfEVBcAjDoQ8gUMgwV
-l4NulugfKTDmArqnR9aPd4ET5jX5dkMP4bwCHYsvrcYDeWEQy7x5WWuylOdKhua4
-L4cEi2uDCjqEErIG3cc1MCOk6Cl6Ld6tkIzQSf953qfdEACRytOeUqLNQcrXrqeE
-c7U8F6MWLQ==
------END CERTIFICATE-----
diff --git a/deps/npm/node_modules/request/tests/ssl/test.key b/deps/npm/node_modules/request/tests/ssl/test.key
deleted file mode 100644
index b85810dda..000000000
--- a/deps/npm/node_modules/request/tests/ssl/test.key
+++ /dev/null
@@ -1,15 +0,0 @@
------BEGIN RSA PRIVATE KEY-----
-MIICXgIBAAKBgQDCZy111mqUDjz41ezTI7L3YOKNxBXWN/zvMyJgAiU1S2jCCFVt
-NaAlTmvSl0qsPXoCm2dYlPMpqeEi0RfxcII+Cw2SrVp+BO0k/us2TC7fFyN4gySE
-mD9rLhmeRueFh2yKLlVNTmmuLHoCpZECFuQGCgD6JXIfKh/zC9nIoGgVMwIDAQAB
-AoGBALXFwfUf8vHTSmGlrdZS2AGFPvEtuvldyoxi9K5u8xmdFCvxnOcLsF2RsTHt
-Mu5QYWhUpNJoG+IGLTPf7RJdj/kNtEs7xXqWy4jR36kt5z5MJzqiK+QIgiO9UFWZ
-fjUb6oeDnTIJA9YFBdYi97MDuL89iU/UK3LkJN3hd4rciSbpAkEA+MCkowF5kSFb
-rkOTBYBXZfiAG78itDXN6DXmqb9XYY+YBh3BiQM28oxCeQYyFy6pk/nstnd4TXk6
-V/ryA2g5NwJBAMgRKTY9KvxJWbESeMEFe2iBIV0c26/72Amgi7ZKUCLukLfD4tLF
-+WSZdmTbbqI1079YtwaiOVfiLm45Q/3B0eUCQAaQ/0eWSGE+Yi8tdXoVszjr4GXb
-G81qBi91DMu6U1It+jNfIba+MPsiHLcZJMVb4/oWBNukN7bD1nhwFWdlnu0CQQCf
-Is9WHkdvz2RxbZDxb8verz/7kXXJQJhx5+rZf7jIYFxqX3yvTNv3wf2jcctJaWlZ
-fVZwB193YSivcgt778xlAkEAprYUz3jczjF5r2hrgbizPzPDR94tM5BTO3ki2v3w
-kbf+j2g7FNAx6kZiVN8XwfLc8xEeUGiPKwtq3ddPDFh17w==
------END RSA PRIVATE KEY-----
diff --git a/deps/npm/node_modules/request/tests/test-basic-auth.js b/deps/npm/node_modules/request/tests/test-basic-auth.js
deleted file mode 100644
index 3f4804883..000000000
--- a/deps/npm/node_modules/request/tests/test-basic-auth.js
+++ /dev/null
@@ -1,143 +0,0 @@
-var assert = require('assert')
- , http = require('http')
- , request = require('../index')
- ;
-
-var numBasicRequests = 0;
-
-var basicServer = http.createServer(function (req, res) {
- console.error('Basic auth server: ', req.method, req.url);
- numBasicRequests++;
-
- var ok;
-
- if (req.headers.authorization) {
- if (req.headers.authorization == 'Basic ' + new Buffer('test:testing2').toString('base64')) {
- ok = true;
- } else if ( req.headers.authorization == 'Basic ' + new Buffer(':apassword').toString('base64')) {
- ok = true;
- } else {
- // Bad auth header, don't send back WWW-Authenticate header
- ok = false;
- }
- } else {
- // No auth header, send back WWW-Authenticate header
- ok = false;
- res.setHeader('www-authenticate', 'Basic realm="Private"');
- }
-
- if (req.url == '/post/') {
- var expectedContent = 'data_key=data_value';
- req.on('data', function(data) {
- assert.equal(data, expectedContent);
- console.log('received request data: ' + data);
- });
- assert.equal(req.method, 'POST');
- assert.equal(req.headers['content-length'], '' + expectedContent.length);
- assert.equal(req.headers['content-type'], 'application/x-www-form-urlencoded; charset=utf-8');
- }
-
- if (ok) {
- console.log('request ok');
- res.end('ok');
- } else {
- console.log('status=401');
- res.statusCode = 401;
- res.end('401');
- }
-});
-
-basicServer.listen(6767);
-
-var tests = [
- function(next) {
- request({
- 'method': 'GET',
- 'uri': 'http://localhost:6767/test/',
- 'auth': {
- 'user': 'test',
- 'pass': 'testing2',
- 'sendImmediately': false
- }
- }, function(error, res, body) {
- assert.equal(res.statusCode, 200);
- assert.equal(numBasicRequests, 2);
- next();
- });
- },
-
- function(next) {
- // If we don't set sendImmediately = false, request will send basic auth
- request({
- 'method': 'GET',
- 'uri': 'http://localhost:6767/test2/',
- 'auth': {
- 'user': 'test',
- 'pass': 'testing2'
- }
- }, function(error, res, body) {
- assert.equal(res.statusCode, 200);
- assert.equal(numBasicRequests, 3);
- next();
- });
- },
-
- function(next) {
- request({
- 'method': 'GET',
- 'uri': 'http://test:testing2@localhost:6767/test2/'
- }, function(error, res, body) {
- assert.equal(res.statusCode, 200);
- assert.equal(numBasicRequests, 4);
- next();
- });
- },
-
- function(next) {
- request({
- 'method': 'POST',
- 'form': { 'data_key': 'data_value' },
- 'uri': 'http://localhost:6767/post/',
- 'auth': {
- 'user': 'test',
- 'pass': 'testing2',
- 'sendImmediately': false
- }
- }, function(error, res, body) {
- assert.equal(res.statusCode, 200);
- assert.equal(numBasicRequests, 6);
- next();
- });
- },
-
- function(next) {
- assert.doesNotThrow( function() {
- request({
- 'method': 'GET',
- 'uri': 'http://localhost:6767/allow_empty_user/',
- 'auth': {
- 'user': '',
- 'pass': 'apassword',
- 'sendImmediately': false
- }
- }, function(error, res, body ) {
- assert.equal(res.statusCode, 200);
- assert.equal(numBasicRequests, 8);
- next();
- });
- })
- }
-];
-
-function runTest(i) {
- if (i < tests.length) {
- tests[i](function() {
- runTest(i + 1);
- });
- } else {
- console.log('All tests passed');
- basicServer.close();
- }
-}
-
-runTest(0);
diff --git a/deps/npm/node_modules/request/tests/test-body.js b/deps/npm/node_modules/request/tests/test-body.js
deleted file mode 100644
index 186de123f..000000000
--- a/deps/npm/node_modules/request/tests/test-body.js
+++ /dev/null
@@ -1,122 +0,0 @@
-var server = require('./server')
- , events = require('events')
- , stream = require('stream')
- , assert = require('assert')
- , request = require('../index')
- ;
-
-var s = server.createServer();
-
-var tests =
- { testGet :
- { resp : server.createGetResponse("TESTING!")
- , expectBody: "TESTING!"
- }
- , testGetChunkBreak :
- { resp : server.createChunkResponse(
- [ new Buffer([239])
- , new Buffer([163])
- , new Buffer([191])
- , new Buffer([206])
- , new Buffer([169])
- , new Buffer([226])
- , new Buffer([152])
- , new Buffer([131])
- ])
- , expectBody: "Ω☃"
- }
- , testGetBuffer :
- { resp : server.createGetResponse(new Buffer("TESTING!"))
- , encoding: null
- , expectBody: new Buffer("TESTING!")
- }
- , testGetEncoding :
- { resp : server.createGetResponse(new Buffer('efa3bfcea9e29883', 'hex'))
- , encoding: 'hex'
- , expectBody: "efa3bfcea9e29883"
- }
- , testGetUTF8:
- { resp: server.createGetResponse(new Buffer([0xEF, 0xBB, 0xBF, 226, 152, 131]))
- , encoding: "utf8"
- , expectBody: "☃"
- }
- , testGetJSON :
- { resp : server.createGetResponse('{"test":true}', 'application/json')
- , json : true
- , expectBody: {"test":true}
- }
- , testPutString :
- { resp : server.createPostValidator("PUTTINGDATA")
- , method : "PUT"
- , body : "PUTTINGDATA"
- }
- , testPutBuffer :
- { resp : server.createPostValidator("PUTTINGDATA")
- , method : "PUT"
- , body : new Buffer("PUTTINGDATA")
- }
- , testPutJSON :
- { resp : server.createPostValidator(JSON.stringify({foo: 'bar'}))
- , method: "PUT"
- , json: {foo: 'bar'}
- }
- , testPutMultipart :
- { resp: server.createPostValidator(
- '--__BOUNDARY__\r\n' +
- 'content-type: text/html\r\n' +
- '\r\n' +
- '<html><body>Oh hi.</body></html>' +
- '\r\n--__BOUNDARY__\r\n\r\n' +
- 'Oh hi.' +
- '\r\n--__BOUNDARY__--'
- )
- , method: "PUT"
- , multipart:
- [ {'content-type': 'text/html', 'body': '<html><body>Oh hi.</body></html>'}
- , {'body': 'Oh hi.'}
- ]
- }
- , testPutMultipartPreambleCRLF :
- { resp: server.createPostValidator(
- '\r\n--__BOUNDARY__\r\n' +
- 'content-type: text/html\r\n' +
- '\r\n' +
- '<html><body>Oh hi.</body></html>' +
- '\r\n--__BOUNDARY__\r\n\r\n' +
- 'Oh hi.' +
- '\r\n--__BOUNDARY__--'
- )
- , method: "PUT"
- , preambleCRLF: true
- , multipart:
- [ {'content-type': 'text/html', 'body': '<html><body>Oh hi.</body></html>'}
- , {'body': 'Oh hi.'}
- ]
- }
- }
-
-s.listen(s.port, function () {
-
- var counter = 0
-
- for (i in tests) {
- (function () {
- var test = tests[i]
- s.on('/'+i, test.resp)
- test.uri = s.url + '/' + i
- request(test, function (err, resp, body) {
- if (err) throw err
- if (test.expectBody) {
- assert.deepEqual(test.expectBody, body)
- }
- counter = counter - 1;
- if (counter === 0) {
- console.log(Object.keys(tests).length+" tests passed.")
- s.close()
- }
- })
- counter++
- })()
- }
-})
-
diff --git a/deps/npm/node_modules/request/tests/test-defaults.js b/deps/npm/node_modules/request/tests/test-defaults.js
deleted file mode 100644
index f6c402460..000000000
--- a/deps/npm/node_modules/request/tests/test-defaults.js
+++ /dev/null
@@ -1,129 +0,0 @@
-var server = require('./server')
- , assert = require('assert')
- , request = require('../index')
- ;
-
-var s = server.createServer();
-
-s.listen(s.port, function () {
- var counter = 0;
- s.on('/get', function (req, resp) {
- assert.equal(req.headers.foo, 'bar');
- assert.equal(req.method, 'GET')
- resp.writeHead(200, {'Content-Type': 'text/plain'});
- resp.end('TESTING!');
- });
-
- // test get(string, function)
- request.defaults({headers:{foo:"bar"}})(s.url + '/get', function (e, r, b){
- if (e) throw e;
- assert.deepEqual("TESTING!", b);
- counter += 1;
- });
-
- s.on('/post', function (req, resp) {
- assert.equal(req.headers.foo, 'bar');
- assert.equal(req.headers['content-type'], null);
- assert.equal(req.method, 'POST')
- resp.writeHead(200, {'Content-Type': 'application/json'});
- resp.end(JSON.stringify({foo:'bar'}));
- });
-
- // test post(string, object, function)
- request.defaults({headers:{foo:"bar"}}).post(s.url + '/post', {json: true}, function (e, r, b){
- if (e) throw e;
- assert.deepEqual('bar', b.foo);
- counter += 1;
- });
-
- s.on('/patch', function (req, resp) {
- assert.equal(req.headers.foo, 'bar');
- assert.equal(req.headers['content-type'], null);
- assert.equal(req.method, 'PATCH')
- resp.writeHead(200, {'Content-Type': 'application/json'});
- resp.end(JSON.stringify({foo:'bar'}));
- });
-
- // test post(string, object, function)
- request.defaults({headers:{foo:"bar"}}).patch(s.url + '/patch', {json: true}, function (e, r, b){
- if (e) throw e;
- assert.deepEqual('bar', b.foo);
- counter += 1;
- });
-
- s.on('/post-body', function (req, resp) {
- assert.equal(req.headers.foo, 'bar');
- assert.equal(req.headers['content-type'], 'application/json');
- assert.equal(req.method, 'POST')
- resp.writeHead(200, {'Content-Type': 'application/json'});
- resp.end(JSON.stringify({foo:'bar'}));
- });
-
- // test post(string, object, function) with body
- request.defaults({headers:{foo:"bar"}}).post(s.url + '/post-body', {json: true, body:{bar:"baz"}}, function (e, r, b){
- if (e) throw e;
- assert.deepEqual('bar', b.foo);
- counter += 1;
- });
-
- s.on('/del', function (req, resp) {
- assert.equal(req.headers.foo, 'bar');
- assert.equal(req.method, 'DELETE')
- resp.writeHead(200, {'Content-Type': 'application/json'});
- resp.end(JSON.stringify({foo:'bar'}));
- });
-
- // test .del(string, function)
- request.defaults({headers:{foo:"bar"}, json:true}).del(s.url + '/del', function (e, r, b){
- if (e) throw e;
- assert.deepEqual('bar', b.foo);
- counter += 1;
- });
-
- s.on('/head', function (req, resp) {
- assert.equal(req.headers.foo, 'bar');
- assert.equal(req.method, 'HEAD')
- resp.writeHead(200, {'Content-Type': 'text/plain'});
- resp.end();
- });
-
- // test head.(object, function)
- request.defaults({headers:{foo:"bar"}}).head({uri: s.url + '/head'}, function (e, r, b){
- if (e) throw e;
- counter += 1;
- });
-
- s.on('/get_custom', function(req, resp) {
- assert.equal(req.headers.foo, 'bar');
- assert.equal(req.headers.x, 'y');
- resp.writeHead(200, {'Content-Type': 'text/plain'});
- resp.end();
- });
-
- // test custom request handler function
- var defaultRequest = request.defaults({
- headers:{foo:"bar"}
- , body: 'TESTING!'
- }, function(uri, options, callback) {
- var params = request.initParams(uri, options, callback);
- options = params.options;
- options.headers.x = 'y';
-
- return request(params.uri, params.options, params.callback);
- });
-
- var msg = 'defaults test failed. head request should throw earlier';
- assert.throws(function() {
- defaultRequest.head(s.url + '/get_custom', function(e, r, b) {
- throw new Error(msg);
- });
- counter+=1;
- }, msg);
-
- defaultRequest.get(s.url + '/get_custom', function(e, r, b) {
- if(e) throw e;
- counter += 1;
- console.log(counter.toString() + " tests passed.");
- s.close();
- });
-})
diff --git a/deps/npm/node_modules/request/tests/test-digest-auth.js b/deps/npm/node_modules/request/tests/test-digest-auth.js
deleted file mode 100644
index 5f2d6eb7d..000000000
--- a/deps/npm/node_modules/request/tests/test-digest-auth.js
+++ /dev/null
@@ -1,69 +0,0 @@
-var assert = require('assert')
- , http = require('http')
- , request = require('../index')
- ;
-
-// Test digest auth
-// Using header values captured from interaction with Apache
-
-var numDigestRequests = 0;
-
-var digestServer = http.createServer(function (req, res) {
- console.error('Digest auth server: ', req.method, req.url);
- numDigestRequests++;
-
- var ok;
-
- if (req.headers.authorization) {
- if (req.headers.authorization == 'Digest username="test", realm="Private", nonce="WpcHS2/TBAA=dffcc0dbd5f96d49a5477166649b7c0ae3866a93", uri="/test/", qop="auth", response="54753ce37c10cb20b09b769f0bed730e", nc="1", cnonce=""') {
- ok = true;
- } else {
- // Bad auth header, don't send back WWW-Authenticate header
- ok = false;
- }
- } else {
- // No auth header, send back WWW-Authenticate header
- ok = false;
- res.setHeader('www-authenticate', 'Digest realm="Private", nonce="WpcHS2/TBAA=dffcc0dbd5f96d49a5477166649b7c0ae3866a93", algorithm=MD5, qop="auth"');
- }
-
- if (ok) {
- console.log('request ok');
- res.end('ok');
- } else {
- console.log('status=401');
- res.statusCode = 401;
- res.end('401');
- }
-});
-
-digestServer.listen(6767);
-
-request({
- 'method': 'GET',
- 'uri': 'http://localhost:6767/test/',
- 'auth': {
- 'user': 'test',
- 'pass': 'testing',
- 'sendImmediately': false
- }
-}, function(error, response, body) {
- assert.equal(response.statusCode, 200);
- assert.equal(numDigestRequests, 2);
-
- // If we don't set sendImmediately = false, request will send basic auth
- request({
- 'method': 'GET',
- 'uri': 'http://localhost:6767/test/',
- 'auth': {
- 'user': 'test',
- 'pass': 'testing'
- }
- }, function(error, response, body) {
- assert.equal(response.statusCode, 401);
- assert.equal(numDigestRequests, 3);
-
- console.log('All tests passed');
- digestServer.close();
- });
-});
diff --git a/deps/npm/node_modules/request/tests/test-emptyBody.js b/deps/npm/node_modules/request/tests/test-emptyBody.js
deleted file mode 100644
index 338c92e5e..000000000
--- a/deps/npm/node_modules/request/tests/test-emptyBody.js
+++ /dev/null
@@ -1,20 +0,0 @@
-var request = require('../index')
- , http = require('http')
- , assert = require('assert')
- ;
-
-var s = http.createServer(function (req, resp) {
- resp.statusCode = 200
- resp.end('')
-}).listen(8080, function () {
- var r = request('http://localhost:8080', function (e, resp, body) {
- assert.equal(resp.statusCode, 200)
- assert.equal(body, "")
-
- var r2 = request({ url: 'http://localhost:8080', json: {} }, function (e, resp, body) {
- assert.equal(resp.statusCode, 200)
- assert.equal(body, undefined)
- s.close()
- });
- })
-})
diff --git a/deps/npm/node_modules/request/tests/test-errors.js b/deps/npm/node_modules/request/tests/test-errors.js
deleted file mode 100644
index 4df1302a0..000000000
--- a/deps/npm/node_modules/request/tests/test-errors.js
+++ /dev/null
@@ -1,37 +0,0 @@
-var server = require('./server')
- , events = require('events')
- , assert = require('assert')
- , request = require('../index')
- ;
-
-var local = 'http://localhost:8888/asdf'
-
-try {
- request({uri:local, body:{}})
- assert.fail("Should have throw")
-} catch(e) {
- assert.equal(e.message, 'Argument error, options.body.')
-}
-
-try {
- request({uri:local, multipart: 'foo'})
- assert.fail("Should have throw")
-} catch(e) {
- assert.equal(e.message, 'Argument error, options.multipart.')
-}
-
-try {
- request({uri:local, multipart: [{}]})
- assert.fail("Should have throw")
-} catch(e) {
- assert.equal(e.message, 'Body attribute missing in multipart.')
-}
-
-try {
- request(local, {multipart: [{}]})
- assert.fail("Should have throw")
-} catch(e) {
- assert.equal(e.message, 'Body attribute missing in multipart.')
-}
-
-console.log("All tests passed.")
diff --git a/deps/npm/node_modules/request/tests/test-follow-all-303.js b/deps/npm/node_modules/request/tests/test-follow-all-303.js
deleted file mode 100644
index 956e386d1..000000000
--- a/deps/npm/node_modules/request/tests/test-follow-all-303.js
+++ /dev/null
@@ -1,30 +0,0 @@
-var request = require('../index');
-var http = require('http');
-var requests = 0;
-var assert = require('assert');
-
-var server = http.createServer(function (req, res) {
- console.error(req.method, req.url);
- requests ++;
-
- if (req.method === 'POST') {
- console.error('send 303');
- res.setHeader('location', req.url);
- res.statusCode = 303;
- res.end('try again, i guess\n');
- } else {
- console.error('send 200')
- res.end('ok: ' + requests);
- }
-});
-server.listen(6767);
-
-request.post({ url: 'http://localhost:6767/foo',
- followAllRedirects: true,
- form: { foo: 'bar' } }, function (er, req, body) {
- if (er) throw er;
- assert.equal(body, 'ok: 2');
- assert.equal(requests, 2);
- console.error('ok - ' + process.version);
- server.close();
-});
diff --git a/deps/npm/node_modules/request/tests/test-follow-all.js b/deps/npm/node_modules/request/tests/test-follow-all.js
deleted file mode 100644
index 035d6326f..000000000
--- a/deps/npm/node_modules/request/tests/test-follow-all.js
+++ /dev/null
@@ -1,35 +0,0 @@
-var request = require('../index');
-var http = require('http');
-var requests = 0;
-var assert = require('assert');
-
-var server = http.createServer(function (req, res) {
- requests ++;
-
- // redirect everything 3 times, no matter what.
- var c = req.headers.cookie;
-
- if (!c) c = 0;
- else c = +c.split('=')[1] || 0;
-
- if (c > 3) {
- res.end('ok: '+requests);
- return;
- }
-
- res.setHeader('set-cookie', 'c=' + (c + 1));
- res.setHeader('location', req.url);
- res.statusCode = 302;
- res.end('try again, i guess\n');
-});
-server.listen(6767);
-
-request.post({ url: 'http://localhost:6767/foo',
- followAllRedirects: true,
- form: { foo: 'bar' } }, function (er, req, body) {
- if (er) throw er;
- assert.equal(body, 'ok: 5');
- assert.equal(requests, 5);
- console.error('ok - ' + process.version);
- server.close();
-});
diff --git a/deps/npm/node_modules/request/tests/test-form.js b/deps/npm/node_modules/request/tests/test-form.js
deleted file mode 100644
index 91b9230d4..000000000
--- a/deps/npm/node_modules/request/tests/test-form.js
+++ /dev/null
@@ -1,79 +0,0 @@
-var assert = require('assert')
-var http = require('http');
-var path = require('path');
-var mime = require('mime');
-var request = require('../index');
-var fs = require('fs');
-
-var remoteFile = 'http://nodejs.org/images/logo.png';
-
-var FIELDS = [
- {name: 'my_field', value: 'my_value'},
- {name: 'my_buffer', value: new Buffer([1, 2, 3])},
- {name: 'my_file', value: fs.createReadStream(__dirname + '/unicycle.jpg')},
- {name: 'remote_file', value: request(remoteFile) }
-];
-
-var server = http.createServer(function(req, res) {
-
- // temp workaround
- var data = '';
- req.setEncoding('utf8');
-
- req.on('data', function(d) {
- data += d;
- });
-
- req.on('end', function() {
- // check for the fields' traces
-
- // 1st field : my_field
- var field = FIELDS.shift();
- assert.ok( data.indexOf('form-data; name="'+field.name+'"') != -1 );
- assert.ok( data.indexOf(field.value) != -1 );
-
- // 2nd field : my_buffer
- var field = FIELDS.shift();
- assert.ok( data.indexOf('form-data; name="'+field.name+'"') != -1 );
- assert.ok( data.indexOf(field.value) != -1 );
-
- // 3rd field : my_file
- var field = FIELDS.shift();
- assert.ok( data.indexOf('form-data; name="'+field.name+'"') != -1 );
- assert.ok( data.indexOf('; filename="'+path.basename(field.value.path)+'"') != -1 );
- // check for unicycle.jpg traces
- assert.ok( data.indexOf('2005:06:21 01:44:12') != -1 );
- assert.ok( data.indexOf('Content-Type: '+mime.lookup(field.value.path) ) != -1 );
-
- // 4th field : remote_file
- var field = FIELDS.shift();
- assert.ok( data.indexOf('form-data; name="'+field.name+'"') != -1 );
- assert.ok( data.indexOf('; filename="'+path.basename(field.value.path)+'"') != -1 );
- // check for http://nodejs.org/images/logo.png traces
- assert.ok( data.indexOf('ImageReady') != -1 );
- assert.ok( data.indexOf('Content-Type: '+mime.lookup(remoteFile) ) != -1 );
-
- res.writeHead(200);
- res.end('done');
-
- });
-
-
-});
-
-server.listen(8080, function() {
-
- var req = request.post('http://localhost:8080/upload', function () {
- server.close();
- })
- var form = req.form()
-
- FIELDS.forEach(function(field) {
- form.append(field.name, field.value);
- });
-
-});
-
-process.on('exit', function() {
- assert.strictEqual(FIELDS.length, 0);
-});
diff --git a/deps/npm/node_modules/request/tests/test-hawk.js b/deps/npm/node_modules/request/tests/test-hawk.js
deleted file mode 100755
index 845462580..000000000
--- a/deps/npm/node_modules/request/tests/test-hawk.js
+++ /dev/null
@@ -1,33 +0,0 @@
-var createServer = require('http').createServer
- , request = require('../index')
- , hawk = require('hawk')
- , assert = require('assert')
- ;
-
-var server = createServer(function (req, resp) {
-
- var getCred = function (id, callback) {
- assert.equal(id, 'dh37fgj492je')
- var credentials =
- { key: 'werxhqb98rpaxn39848xrunpaw3489ruxnpa98w4rxn'
- , algorithm: 'sha256'
- , user: 'Steve'
- }
- return callback(null, credentials)
- }
-
- hawk.server.authenticate(req, getCred, {}, function (err, credentials, attributes) {
- resp.writeHead(!err ? 200 : 401, { 'Content-Type': 'text/plain' })
- resp.end(!err ? 'Hello ' + credentials.user : 'Shoosh!')
- })
-
-})
-
-server.listen(8080, function () {
- var creds = {key: 'werxhqb98rpaxn39848xrunpaw3489ruxnpa98w4rxn', algorithm: 'sha256', id:'dh37fgj492je'}
- request('http://localhost:8080', {hawk:{credentials:creds}}, function (e, r, b) {
- assert.equal(200, r.statusCode)
- assert.equal(b, 'Hello Steve')
- server.close()
- })
-}) \ No newline at end of file
diff --git a/deps/npm/node_modules/request/tests/test-headers.js b/deps/npm/node_modules/request/tests/test-headers.js
deleted file mode 100644
index 3982b9be0..000000000
--- a/deps/npm/node_modules/request/tests/test-headers.js
+++ /dev/null
@@ -1,52 +0,0 @@
-var server = require('./server')
- , assert = require('assert')
- , request = require('../index')
- , Cookie = require('cookie-jar')
- , Jar = Cookie.Jar
- , s = server.createServer()
-
-s.listen(s.port, function () {
- var serverUri = 'http://localhost:' + s.port
- , numTests = 0
- , numOutstandingTests = 0
-
- function createTest(requestObj, serverAssertFn) {
- var testNumber = numTests;
- numTests += 1;
- numOutstandingTests += 1;
- s.on('/' + testNumber, function (req, res) {
- serverAssertFn(req, res);
- res.writeHead(200);
- res.end();
- });
- requestObj.url = serverUri + '/' + testNumber
- request(requestObj, function (err, res, body) {
- assert.ok(!err)
- assert.equal(res.statusCode, 200)
- numOutstandingTests -= 1
- if (numOutstandingTests === 0) {
- console.log(numTests + ' tests passed.')
- s.close()
- }
- })
- }
-
- // Issue #125: headers.cookie shouldn't be replaced when a cookie jar isn't specified
- createTest({headers: {cookie: 'foo=bar'}}, function (req, res) {
- assert.ok(req.headers.cookie)
- assert.equal(req.headers.cookie, 'foo=bar')
- })
-
- // Issue #125: headers.cookie + cookie jar
- var jar = new Jar()
- jar.add(new Cookie('quux=baz'));
- createTest({jar: jar, headers: {cookie: 'foo=bar'}}, function (req, res) {
- assert.ok(req.headers.cookie)
- assert.equal(req.headers.cookie, 'foo=bar; quux=baz')
- })
-
- // There should be no cookie header when neither headers.cookie nor a cookie jar is specified
- createTest({}, function (req, res) {
- assert.ok(!req.headers.cookie)
- })
-})
diff --git a/deps/npm/node_modules/request/tests/test-http-signature.js b/deps/npm/node_modules/request/tests/test-http-signature.js
deleted file mode 100755
index 930047320..000000000
--- a/deps/npm/node_modules/request/tests/test-http-signature.js
+++ /dev/null
@@ -1,106 +0,0 @@
-var createServer = require('http').createServer
- , request = require('../index')
- , httpSignature = require('http-signature')
- , assert = require('assert')
- ;
-
-var privateKeyPEMs = {}
-
-privateKeyPEMs['key-1'] =
- '-----BEGIN RSA PRIVATE KEY-----\n' +
- 'MIIEpAIBAAKCAQEAzWSJl+Z9Bqv00FVL5N3+JCUoqmQPjIlya1BbeqQroNQ5yG1i\n' +
- 'VbYTTnMRa1zQtR6r2fNvWeg94DvxivxIG9diDMnrzijAnYlTLOl84CK2vOxkj5b6\n' +
- '8zrLH9b/Gd6NOHsywo8IjvXvCeTfca5WUHcuVi2lT9VjygFs1ILG4RyeX1BXUumu\n' +
- 'Y8fzmposxLYdMxCqUTzAn0u9Saq2H2OVj5u114wS7OQPigu6G99dpn/iPHa3zBm8\n' +
- '7baBWDbqZWRW0BP3K6eqq8sut1+NLhNW8ADPTdnO/SO+kvXy7fqd8atSn+HlQcx6\n' +
- 'tW42dhXf3E9uE7K78eZtW0KvfyNGAjsI1Fft2QIDAQABAoIBAG1exe3/LEBrPLfb\n' +
- 'U8iRdY0lxFvHYIhDgIwohC3wUdMYb5SMurpNdEZn+7Sh/fkUVgp/GKJViu1mvh52\n' +
- 'bKd2r52DwG9NQBQjVgkqY/auRYSglIPpr8PpYNSZlcneunCDGeqEY9hMmXc5Ssqs\n' +
- 'PQYoEKKPN+IlDTg6PguDgAfLR4IUvt9KXVvmB/SSgV9tSeTy35LECt1Lq3ozbUgu\n' +
- '30HZI3U6/7H+X22Pxxf8vzBtzkg5rRCLgv+OeNPo16xMnqbutt4TeqEkxRv5rtOo\n' +
- '/A1i9khBeki0OJAFJsE82qnaSZodaRsxic59VnN8sWBwEKAt87tEu5A3K3j4XSDU\n' +
- '/avZxAECgYEA+pS3DvpiQLtHlaO3nAH6MxHRrREOARXWRDe5nUQuUNpS1xq9wte6\n' +
- 'DkFtba0UCvDLic08xvReTCbo9kH0y6zEy3zMpZuJlKbcWCkZf4S5miYPI0RTZtF8\n' +
- 'yps6hWqzYFSiO9hMYws9k4OJLxX0x3sLK7iNZ32ujcSrkPBSiBr0gxkCgYEA0dWl\n' +
- '637K41AJ/zy0FP0syq+r4eIkfqv+/t6y2aQVUBvxJYrj9ci6XHBqoxpDV8lufVYj\n' +
- 'fUAfeI9/MZaWvQJRbnYLre0I6PJfLuCBIL5eflO77BGso165AF7QJZ+fwtgKv3zv\n' +
- 'ZX75eudCSS/cFo0po9hlbcLMT4B82zEkgT8E2MECgYEAnz+3/wrdOmpLGiyL2dff\n' +
- '3GjsqmJ2VfY8z+niSrI0BSpbD11tT9Ct67VlCBjA7hsOH6uRfpd6/kaUMzzDiFVq\n' +
- 'VDAiFvV8QD6zNkwYalQ9aFvbrvwTTPrBpjl0vamMCiJ/YC0cjq1sGr2zh3sar1Ph\n' +
- 'S43kP+s97dcZeelhaiJHVrECgYEAsx61q/loJ/LDFeYzs1cLTVn4V7I7hQY9fkOM\n' +
- 'WM0AhInVqD6PqdfXfeFYpjJdGisQ7l0BnoGGW9vir+nkcyPvb2PFRIr6+B8tsU5j\n' +
- '7BeVgjDoUfQkcrEBK5fEBtnj/ud9BUkY8oMZZBjVNLRuI7IMwZiPvMp0rcj4zAN/\n' +
- 'LfUlpgECgYArBvFcBxSkNAzR3Rtteud1YDboSKluRM37Ey5plrn4BS0DD0jm++aD\n' +
- '0pG2Hsik000hibw92lCkzvvBVAqF8BuAcnPlAeYfsOaa97PGEjSKEN5bJVWZ9/om\n' +
- '9FV1axotRN2XWlwrhixZLEaagkREXhgQc540FS5O8IaI2Vpa80Atzg==\n' +
- '-----END RSA PRIVATE KEY-----'
-
-var publicKeyPEMs = {}
-
-publicKeyPEMs['key-1'] =
- '-----BEGIN PUBLIC KEY-----\n' +
- 'MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAzWSJl+Z9Bqv00FVL5N3+\n' +
- 'JCUoqmQPjIlya1BbeqQroNQ5yG1iVbYTTnMRa1zQtR6r2fNvWeg94DvxivxIG9di\n' +
- 'DMnrzijAnYlTLOl84CK2vOxkj5b68zrLH9b/Gd6NOHsywo8IjvXvCeTfca5WUHcu\n' +
- 'Vi2lT9VjygFs1ILG4RyeX1BXUumuY8fzmposxLYdMxCqUTzAn0u9Saq2H2OVj5u1\n' +
- '14wS7OQPigu6G99dpn/iPHa3zBm87baBWDbqZWRW0BP3K6eqq8sut1+NLhNW8ADP\n' +
- 'TdnO/SO+kvXy7fqd8atSn+HlQcx6tW42dhXf3E9uE7K78eZtW0KvfyNGAjsI1Fft\n' +
- '2QIDAQAB\n' +
- '-----END PUBLIC KEY-----'
-
-publicKeyPEMs['key-2'] =
- '-----BEGIN PUBLIC KEY-----\n' +
- 'MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqp04VVr9OThli9b35Omz\n' +
- 'VqSfWbsoQuRrgyWsrNRn3XkFmbWw4FzZwQ42OgGMzQ84Ta4d9zGKKQyFriTiPjPf\n' +
- 'xhhrsaJnDuybcpVhcr7UNKjSZ0S59tU3hpRiEz6hO+Nc/OSSLkvalG0VKrxOln7J\n' +
- 'LK/h3rNS/l6wDZ5S/KqsI6CYtV2ZLpn3ahLrizvEYNY038Qcm38qMWx+VJAvZ4di\n' +
- 'qqmW7RLIsLT59SWmpXdhFKnkYYGhxrk1Mwl22dBTJNY5SbriU5G3gWgzYkm8pgHr\n' +
- '6CtrXch9ciJAcDJehPrKXNvNDOdUh8EW3fekNJerF1lWcwQg44/12v8sDPyfbaKB\n' +
- 'dQIDAQAB\n' +
- '-----END PUBLIC KEY-----'
-
-var server = createServer(function (req, res) {
- var parsed = httpSignature.parseRequest(req)
- var publicKeyPEM = publicKeyPEMs[parsed.keyId]
- var verified = httpSignature.verifySignature(parsed, publicKeyPEM)
- res.writeHead(verified ? 200 : 400)
- res.end()
-})
-
-server.listen(8080, function () {
- function correctKeyTest(callback) {
- var options = {
- httpSignature: {
- keyId: 'key-1',
- key: privateKeyPEMs['key-1']
- }
- }
- request('http://localhost:8080', options, function (e, r, b) {
- assert.equal(200, r.statusCode)
- callback()
- })
- }
-
- function incorrectKeyTest(callback) {
- var options = {
- httpSignature: {
- keyId: 'key-2',
- key: privateKeyPEMs['key-1']
- }
- }
- request('http://localhost:8080', options, function (e, r, b) {
- assert.equal(400, r.statusCode)
- callback()
- })
- }
-
- var tests = [correctKeyTest, incorrectKeyTest]
- var todo = tests.length;
- for(var i = 0; i < tests.length; ++i) {
- tests[i](function() {
- if(!--todo) {
- server.close()
- }
- })
- }
-})
diff --git a/deps/npm/node_modules/request/tests/test-httpModule.js b/deps/npm/node_modules/request/tests/test-httpModule.js
deleted file mode 100644
index 2c19615f7..000000000
--- a/deps/npm/node_modules/request/tests/test-httpModule.js
+++ /dev/null
@@ -1,94 +0,0 @@
-var http = require('http')
- , https = require('https')
- , server = require('./server')
- , assert = require('assert')
- , request = require('../index')
-
-
-var faux_requests_made = {'http':0, 'https':0}
-function wrap_request(name, module) {
- // Just like the http or https module, but note when a request is made.
- var wrapped = {}
- Object.keys(module).forEach(function(key) {
- var value = module[key];
-
- if(key != 'request')
- wrapped[key] = value;
- else
- wrapped[key] = function(options, callback) {
- faux_requests_made[name] += 1
- return value.apply(this, arguments)
- }
- })
-
- return wrapped;
-}
-
-
-var faux_http = wrap_request('http', http)
- , faux_https = wrap_request('https', https)
- , plain_server = server.createServer()
- , https_server = server.createSSLServer()
-
-
-plain_server.listen(plain_server.port, function() {
- plain_server.on('/plain', function (req, res) {
- res.writeHead(200)
- res.end('plain')
- })
- plain_server.on('/to_https', function (req, res) {
- res.writeHead(301, {'location':'https://localhost:'+https_server.port + '/https'})
- res.end()
- })
-
- https_server.listen(https_server.port, function() {
- https_server.on('/https', function (req, res) {
- res.writeHead(200)
- res.end('https')
- })
- https_server.on('/to_plain', function (req, res) {
- res.writeHead(302, {'location':'http://localhost:'+plain_server.port + '/plain'})
- res.end()
- })
-
- run_tests()
- run_tests({})
- run_tests({'http:':faux_http})
- run_tests({'https:':faux_https})
- run_tests({'http:':faux_http, 'https:':faux_https})
- })
-})
-
-function run_tests(httpModules) {
- var to_https = 'http://localhost:'+plain_server.port+'/to_https'
- var to_plain = 'https://localhost:'+https_server.port+'/to_plain'
-
- request(to_https, {'httpModules':httpModules, strictSSL:false}, function (er, res, body) {
- if (er) throw er
- assert.equal(body, 'https', 'Received HTTPS server body')
- done()
- })
-
- request(to_plain, {'httpModules':httpModules, strictSSL:false}, function (er, res, body) {
- if (er) throw er
- assert.equal(body, 'plain', 'Received HTTPS server body')
- done()
- })
-}
-
-
-var passed = 0;
-function done() {
- passed += 1
- var expected = 10
-
- if(passed == expected) {
- plain_server.close()
- https_server.close()
-
- assert.equal(faux_requests_made.http, 4, 'Wrapped http module called appropriately')
- assert.equal(faux_requests_made.https, 4, 'Wrapped https module called appropriately')
-
- console.log((expected+2) + ' tests passed.')
- }
-}
diff --git a/deps/npm/node_modules/request/tests/test-https-strict.js b/deps/npm/node_modules/request/tests/test-https-strict.js
deleted file mode 100644
index d49a9afcb..000000000
--- a/deps/npm/node_modules/request/tests/test-https-strict.js
+++ /dev/null
@@ -1,97 +0,0 @@
-// a test where we validate the siguature of the keys
-// otherwise exactly the same as the ssl test
-
-var server = require('./server')
- , assert = require('assert')
- , request = require('../index')
- , fs = require('fs')
- , path = require('path')
- , opts = { key: path.resolve(__dirname, 'ssl/ca/server.key')
- , cert: path.resolve(__dirname, 'ssl/ca/server.crt') }
- , s = server.createSSLServer(null, opts)
- , caFile = path.resolve(__dirname, 'ssl/ca/ca.crt')
- , ca = fs.readFileSync(caFile)
-
-var tests =
- { testGet :
- { resp : server.createGetResponse("TESTING!")
- , expectBody: "TESTING!"
- }
- , testGetChunkBreak :
- { resp : server.createChunkResponse(
- [ new Buffer([239])
- , new Buffer([163])
- , new Buffer([191])
- , new Buffer([206])
- , new Buffer([169])
- , new Buffer([226])
- , new Buffer([152])
- , new Buffer([131])
- ])
- , expectBody: "Ω☃"
- }
- , testGetJSON :
- { resp : server.createGetResponse('{"test":true}', 'application/json')
- , json : true
- , expectBody: {"test":true}
- }
- , testPutString :
- { resp : server.createPostValidator("PUTTINGDATA")
- , method : "PUT"
- , body : "PUTTINGDATA"
- }
- , testPutBuffer :
- { resp : server.createPostValidator("PUTTINGDATA")
- , method : "PUT"
- , body : new Buffer("PUTTINGDATA")
- }
- , testPutJSON :
- { resp : server.createPostValidator(JSON.stringify({foo: 'bar'}))
- , method: "PUT"
- , json: {foo: 'bar'}
- }
- , testPutMultipart :
- { resp: server.createPostValidator(
- '--__BOUNDARY__\r\n' +
- 'content-type: text/html\r\n' +
- '\r\n' +
- '<html><body>Oh hi.</body></html>' +
- '\r\n--__BOUNDARY__\r\n\r\n' +
- 'Oh hi.' +
- '\r\n--__BOUNDARY__--'
- )
- , method: "PUT"
- , multipart:
- [ {'content-type': 'text/html', 'body': '<html><body>Oh hi.</body></html>'}
- , {'body': 'Oh hi.'}
- ]
- }
- }
-
-s.listen(s.port, function () {
-
- var counter = 0
-
- for (i in tests) {
- (function () {
- var test = tests[i]
- s.on('/'+i, test.resp)
- test.uri = s.url + '/' + i
- test.strictSSL = true
- test.ca = ca
- test.headers = { host: 'testing.request.mikealrogers.com' }
- request(test, function (err, resp, body) {
- if (err) throw err
- if (test.expectBody) {
- assert.deepEqual(test.expectBody, body)
- }
- counter = counter - 1;
- if (counter === 0) {
- console.log(Object.keys(tests).length+" tests passed.")
- s.close()
- }
- })
- counter++
- })()
- }
-})
diff --git a/deps/npm/node_modules/request/tests/test-https.js b/deps/npm/node_modules/request/tests/test-https.js
deleted file mode 100644
index b6858d433..000000000
--- a/deps/npm/node_modules/request/tests/test-https.js
+++ /dev/null
@@ -1,87 +0,0 @@
-var server = require('./server')
- , assert = require('assert')
- , request = require('../index')
-
-var s = server.createSSLServer();
-
-var tests =
- { testGet :
- { resp : server.createGetResponse("TESTING!")
- , expectBody: "TESTING!"
- }
- , testGetChunkBreak :
- { resp : server.createChunkResponse(
- [ new Buffer([239])
- , new Buffer([163])
- , new Buffer([191])
- , new Buffer([206])
- , new Buffer([169])
- , new Buffer([226])
- , new Buffer([152])
- , new Buffer([131])
- ])
- , expectBody: "Ω☃"
- }
- , testGetJSON :
- { resp : server.createGetResponse('{"test":true}', 'application/json')
- , json : true
- , expectBody: {"test":true}
- }
- , testPutString :
- { resp : server.createPostValidator("PUTTINGDATA")
- , method : "PUT"
- , body : "PUTTINGDATA"
- }
- , testPutBuffer :
- { resp : server.createPostValidator("PUTTINGDATA")
- , method : "PUT"
- , body : new Buffer("PUTTINGDATA")
- }
- , testPutJSON :
- { resp : server.createPostValidator(JSON.stringify({foo: 'bar'}))
- , method: "PUT"
- , json: {foo: 'bar'}
- }
- , testPutMultipart :
- { resp: server.createPostValidator(
- '--__BOUNDARY__\r\n' +
- 'content-type: text/html\r\n' +
- '\r\n' +
- '<html><body>Oh hi.</body></html>' +
- '\r\n--__BOUNDARY__\r\n\r\n' +
- 'Oh hi.' +
- '\r\n--__BOUNDARY__--'
- )
- , method: "PUT"
- , multipart:
- [ {'content-type': 'text/html', 'body': '<html><body>Oh hi.</body></html>'}
- , {'body': 'Oh hi.'}
- ]
- }
- }
-
-s.listen(s.port, function () {
-
- var counter = 0
-
- for (i in tests) {
- (function () {
- var test = tests[i]
- s.on('/'+i, test.resp)
- test.uri = s.url + '/' + i
- test.rejectUnauthorized = false
- request(test, function (err, resp, body) {
- if (err) throw err
- if (test.expectBody) {
- assert.deepEqual(test.expectBody, body)
- }
- counter = counter - 1;
- if (counter === 0) {
- console.log(Object.keys(tests).length+" tests passed.")
- s.close()
- }
- })
- counter++
- })()
- }
-})
diff --git a/deps/npm/node_modules/request/tests/test-localAddress.js b/deps/npm/node_modules/request/tests/test-localAddress.js
deleted file mode 100644
index 11a1bd125..000000000
--- a/deps/npm/node_modules/request/tests/test-localAddress.js
+++ /dev/null
@@ -1,15 +0,0 @@
-var request = require('../index')
- , assert = require('assert')
- ;
-
-request.get({
- uri: 'http://www.google.com', localAddress: '1.2.3.4' // some invalid address
-}, function(err, res) {
- assert(!res) // asserting that no response received
-})
-
-request.get({
- uri: 'http://www.google.com', localAddress: '127.0.0.1'
-}, function(err, res) {
- assert(!res) // asserting that no response received
-})
diff --git a/deps/npm/node_modules/request/tests/test-oauth.js b/deps/npm/node_modules/request/tests/test-oauth.js
deleted file mode 100644
index 3269483d8..000000000
--- a/deps/npm/node_modules/request/tests/test-oauth.js
+++ /dev/null
@@ -1,117 +0,0 @@
-var hmacsign = require('oauth-sign').hmacsign
- , assert = require('assert')
- , qs = require('querystring')
- , request = require('../index')
- ;
-
-function getsignature (r) {
- var sign
- r.headers.Authorization.slice('OAuth '.length).replace(/,\ /g, ',').split(',').forEach(function (v) {
- if (v.slice(0, 'oauth_signature="'.length) === 'oauth_signature="') sign = v.slice('oauth_signature="'.length, -1)
- })
- return decodeURIComponent(sign)
-}
-
-// Tests from Twitter documentation https://dev.twitter.com/docs/auth/oauth
-
-var reqsign = hmacsign('POST', 'https://api.twitter.com/oauth/request_token',
- { oauth_callback: 'http://localhost:3005/the_dance/process_callback?service_provider_id=11'
- , oauth_consumer_key: 'GDdmIQH6jhtmLUypg82g'
- , oauth_nonce: 'QP70eNmVz8jvdPevU3oJD2AfF7R7odC2XJcn4XlZJqk'
- , oauth_signature_method: 'HMAC-SHA1'
- , oauth_timestamp: '1272323042'
- , oauth_version: '1.0'
- }, "MCD8BKwGdgPHvAuvgvz4EQpqDAtx89grbuNMRd7Eh98")
-
-console.log(reqsign)
-console.log('8wUi7m5HFQy76nowoCThusfgB+Q=')
-assert.equal(reqsign, '8wUi7m5HFQy76nowoCThusfgB+Q=')
-
-var accsign = hmacsign('POST', 'https://api.twitter.com/oauth/access_token',
- { oauth_consumer_key: 'GDdmIQH6jhtmLUypg82g'
- , oauth_nonce: '9zWH6qe0qG7Lc1telCn7FhUbLyVdjEaL3MO5uHxn8'
- , oauth_signature_method: 'HMAC-SHA1'
- , oauth_token: '8ldIZyxQeVrFZXFOZH5tAwj6vzJYuLQpl0WUEYtWc'
- , oauth_timestamp: '1272323047'
- , oauth_verifier: 'pDNg57prOHapMbhv25RNf75lVRd6JDsni1AJJIDYoTY'
- , oauth_version: '1.0'
- }, "MCD8BKwGdgPHvAuvgvz4EQpqDAtx89grbuNMRd7Eh98", "x6qpRnlEmW9JbQn4PQVVeVG8ZLPEx6A0TOebgwcuA")
-
-console.log(accsign)
-console.log('PUw/dHA4fnlJYM6RhXk5IU/0fCc=')
-assert.equal(accsign, 'PUw/dHA4fnlJYM6RhXk5IU/0fCc=')
-
-var upsign = hmacsign('POST', 'http://api.twitter.com/1/statuses/update.json',
- { oauth_consumer_key: "GDdmIQH6jhtmLUypg82g"
- , oauth_nonce: "oElnnMTQIZvqvlfXM56aBLAf5noGD0AQR3Fmi7Q6Y"
- , oauth_signature_method: "HMAC-SHA1"
- , oauth_token: "819797-Jxq8aYUDRmykzVKrgoLhXSq67TEa5ruc4GJC2rWimw"
- , oauth_timestamp: "1272325550"
- , oauth_version: "1.0"
- , status: 'setting up my twitter ç§ã®ã•ãˆãšã‚Šã‚’設定ã™ã‚‹'
- }, "MCD8BKwGdgPHvAuvgvz4EQpqDAtx89grbuNMRd7Eh98", "J6zix3FfA9LofH0awS24M3HcBYXO5nI1iYe8EfBA")
-
-console.log(upsign)
-console.log('yOahq5m0YjDDjfjxHaXEsW9D+X0=')
-assert.equal(upsign, 'yOahq5m0YjDDjfjxHaXEsW9D+X0=')
-
-
-var rsign = request.post(
- { url: 'https://api.twitter.com/oauth/request_token'
- , oauth:
- { callback: 'http://localhost:3005/the_dance/process_callback?service_provider_id=11'
- , consumer_key: 'GDdmIQH6jhtmLUypg82g'
- , nonce: 'QP70eNmVz8jvdPevU3oJD2AfF7R7odC2XJcn4XlZJqk'
- , timestamp: '1272323042'
- , version: '1.0'
- , consumer_secret: "MCD8BKwGdgPHvAuvgvz4EQpqDAtx89grbuNMRd7Eh98"
- }
- })
-
-setTimeout(function () {
- console.log(getsignature(rsign))
- assert.equal(reqsign, getsignature(rsign))
-})
-
-var raccsign = request.post(
- { url: 'https://api.twitter.com/oauth/access_token'
- , oauth:
- { consumer_key: 'GDdmIQH6jhtmLUypg82g'
- , nonce: '9zWH6qe0qG7Lc1telCn7FhUbLyVdjEaL3MO5uHxn8'
- , signature_method: 'HMAC-SHA1'
- , token: '8ldIZyxQeVrFZXFOZH5tAwj6vzJYuLQpl0WUEYtWc'
- , timestamp: '1272323047'
- , verifier: 'pDNg57prOHapMbhv25RNf75lVRd6JDsni1AJJIDYoTY'
- , version: '1.0'
- , consumer_secret: "MCD8BKwGdgPHvAuvgvz4EQpqDAtx89grbuNMRd7Eh98"
- , token_secret: "x6qpRnlEmW9JbQn4PQVVeVG8ZLPEx6A0TOebgwcuA"
- }
- })
-
-setTimeout(function () {
- console.log(getsignature(raccsign))
- assert.equal(accsign, getsignature(raccsign))
-}, 1)
-
-var rupsign = request.post(
- { url: 'http://api.twitter.com/1/statuses/update.json'
- , oauth:
- { consumer_key: "GDdmIQH6jhtmLUypg82g"
- , nonce: "oElnnMTQIZvqvlfXM56aBLAf5noGD0AQR3Fmi7Q6Y"
- , signature_method: "HMAC-SHA1"
- , token: "819797-Jxq8aYUDRmykzVKrgoLhXSq67TEa5ruc4GJC2rWimw"
- , timestamp: "1272325550"
- , version: "1.0"
- , consumer_secret: "MCD8BKwGdgPHvAuvgvz4EQpqDAtx89grbuNMRd7Eh98"
- , token_secret: "J6zix3FfA9LofH0awS24M3HcBYXO5nI1iYe8EfBA"
- }
- , form: {status: 'setting up my twitter ç§ã®ã•ãˆãšã‚Šã‚’設定ã™ã‚‹'}
- })
-setTimeout(function () {
- console.log(getsignature(rupsign))
- assert.equal(upsign, getsignature(rupsign))
-}, 1)
-
-
-
-
diff --git a/deps/npm/node_modules/request/tests/test-onelineproxy.js b/deps/npm/node_modules/request/tests/test-onelineproxy.js
deleted file mode 100644
index c239f8921..000000000
--- a/deps/npm/node_modules/request/tests/test-onelineproxy.js
+++ /dev/null
@@ -1,46 +0,0 @@
-var http = require('http')
- , assert = require('assert')
- , request = require('../index')
- ;
-
-var server = http.createServer(function (req, resp) {
- resp.statusCode = 200
- if (req.url === '/get') {
- assert.equal(req.method, 'GET')
- resp.write('content')
- resp.end()
- return
- }
- if (req.url === '/put') {
- var x = ''
- assert.equal(req.method, 'PUT')
- req.on('data', function (chunk) {
- x += chunk
- })
- req.on('end', function () {
- assert.equal(x, 'content')
- resp.write('success')
- resp.end()
- })
- return
- }
- if (req.url === '/proxy') {
- assert.equal(req.method, 'PUT')
- return req.pipe(request('http://localhost:8080/put')).pipe(resp)
- }
-
- if (req.url === '/test') {
- return request('http://localhost:8080/get').pipe(request.put('http://localhost:8080/proxy')).pipe(resp)
- }
- throw new Error('Unknown url', req.url)
-}).listen(8080, function () {
- request('http://localhost:8080/test', function (e, resp, body) {
- if (e) throw e
- if (resp.statusCode !== 200) throw new Error('statusCode not 200 ' + resp.statusCode)
- assert.equal(body, 'success')
- server.close()
- })
-})
-
-
-
diff --git a/deps/npm/node_modules/request/tests/test-params.js b/deps/npm/node_modules/request/tests/test-params.js
deleted file mode 100644
index a5831a140..000000000
--- a/deps/npm/node_modules/request/tests/test-params.js
+++ /dev/null
@@ -1,93 +0,0 @@
-var server = require('./server')
- , assert = require('assert')
- , request = require('../index')
- ;
-
-var s = server.createServer();
-
-var tests =
- { testGet :
- { resp : server.createGetResponse("TESTING!")
- , expectBody: "TESTING!"
- }
- , testGetChunkBreak :
- { resp : server.createChunkResponse(
- [ new Buffer([239])
- , new Buffer([163])
- , new Buffer([191])
- , new Buffer([206])
- , new Buffer([169])
- , new Buffer([226])
- , new Buffer([152])
- , new Buffer([131])
- ])
- , expectBody: "Ω☃"
- }
- , testGetBuffer :
- { resp : server.createGetResponse(new Buffer("TESTING!"))
- , encoding: null
- , expectBody: new Buffer("TESTING!")
- }
- , testGetJSON :
- { resp : server.createGetResponse('{"test":true}', 'application/json')
- , json : true
- , expectBody: {"test":true}
- }
- , testPutString :
- { resp : server.createPostValidator("PUTTINGDATA")
- , method : "PUT"
- , body : "PUTTINGDATA"
- }
- , testPutBuffer :
- { resp : server.createPostValidator("PUTTINGDATA")
- , method : "PUT"
- , body : new Buffer("PUTTINGDATA")
- }
- , testPutJSON :
- { resp : server.createPostValidator(JSON.stringify({foo: 'bar'}))
- , method: "PUT"
- , json: {foo: 'bar'}
- }
- , testPutMultipart :
- { resp: server.createPostValidator(
- '--__BOUNDARY__\r\n' +
- 'content-type: text/html\r\n' +
- '\r\n' +
- '<html><body>Oh hi.</body></html>' +
- '\r\n--__BOUNDARY__\r\n\r\n' +
- 'Oh hi.' +
- '\r\n--__BOUNDARY__--'
- )
- , method: "PUT"
- , multipart:
- [ {'content-type': 'text/html', 'body': '<html><body>Oh hi.</body></html>'}
- , {'body': 'Oh hi.'}
- ]
- }
- }
-
-s.listen(s.port, function () {
-
- var counter = 0
-
- for (i in tests) {
- (function () {
- var test = tests[i]
- s.on('/'+i, test.resp)
- //test.uri = s.url + '/' + i
- request(s.url + '/' + i, test, function (err, resp, body) {
- if (err) throw err
- if (test.expectBody) {
- assert.deepEqual(test.expectBody, body)
- }
- counter = counter - 1;
- if (counter === 0) {
- assert.notEqual(typeof test.callback, 'function')
- console.log(1 + Object.keys(tests).length+" tests passed.")
- s.close()
- }
- })
- counter++
- })()
- }
-})
diff --git a/deps/npm/node_modules/request/tests/test-piped-redirect.js b/deps/npm/node_modules/request/tests/test-piped-redirect.js
deleted file mode 100644
index e295ec7fa..000000000
--- a/deps/npm/node_modules/request/tests/test-piped-redirect.js
+++ /dev/null
@@ -1,42 +0,0 @@
-var http = require('http')
- , assert = require('assert')
- , request = require('../index')
- ;
-
-var portOne = 8968
- , portTwo = 8969
- ;
-
-
-// server one
-var s1 = http.createServer(function (req, resp) {
- if (req.url == '/original') {
- resp.writeHeader(302, {'location': '/redirected'})
- resp.end()
- } else if (req.url == '/redirected') {
- resp.writeHeader(200, {'content-type': 'text/plain'})
- resp.write('OK')
- resp.end()
- }
-
-}).listen(portOne);
-
-
-// server two
-var s2 = http.createServer(function (req, resp) {
- var x = request('http://localhost:'+portOne+'/original')
- req.pipe(x)
- x.pipe(resp)
-
-}).listen(portTwo, function () {
- var r = request('http://localhost:'+portTwo+'/original', function (err, res, body) {
- assert.equal(body, 'OK')
-
- s1.close()
- s2.close()
- });
-
- // it hangs, so wait a second :)
- r.timeout = 1000;
-
-})
diff --git a/deps/npm/node_modules/request/tests/test-pipes.js b/deps/npm/node_modules/request/tests/test-pipes.js
deleted file mode 100644
index 52a15cc7e..000000000
--- a/deps/npm/node_modules/request/tests/test-pipes.js
+++ /dev/null
@@ -1,216 +0,0 @@
-var server = require('./server')
- , events = require('events')
- , stream = require('stream')
- , assert = require('assert')
- , fs = require('fs')
- , request = require('../index')
- , path = require('path')
- , util = require('util')
- ;
-
-var s = server.createServer(3453);
-
-function ValidationStream(str) {
- this.str = str
- this.buf = ''
- this.on('data', function (data) {
- this.buf += data
- })
- this.on('end', function () {
- assert.equal(this.str, this.buf)
- })
- this.writable = true
-}
-util.inherits(ValidationStream, stream.Stream)
-ValidationStream.prototype.write = function (chunk) {
- this.emit('data', chunk)
-}
-ValidationStream.prototype.end = function (chunk) {
- if (chunk) emit('data', chunk)
- this.emit('end')
-}
-
-s.listen(s.port, function () {
- counter = 0;
-
- var check = function () {
- counter = counter - 1
- if (counter === 0) {
- console.log('All tests passed.')
- setTimeout(function () {
- process.exit();
- }, 500)
- }
- }
-
- // Test pipeing to a request object
- s.once('/push', server.createPostValidator("mydata"));
-
- var mydata = new stream.Stream();
- mydata.readable = true
-
- counter++
- var r1 = request.put({url:'http://localhost:3453/push'}, function () {
- check();
- })
- mydata.pipe(r1)
-
- mydata.emit('data', 'mydata');
- mydata.emit('end');
-
- // Test pipeing to a request object with a json body
- s.once('/push-json', server.createPostValidator("{\"foo\":\"bar\"}", "application/json"));
-
- var mybodydata = new stream.Stream();
- mybodydata.readable = true
-
- counter++
- var r2 = request.put({url:'http://localhost:3453/push-json',json:true}, function () {
- check();
- })
- mybodydata.pipe(r2)
-
- mybodydata.emit('data', JSON.stringify({foo:"bar"}));
- mybodydata.emit('end');
-
- // Test pipeing from a request object.
- s.once('/pull', server.createGetResponse("mypulldata"));
-
- var mypulldata = new stream.Stream();
- mypulldata.writable = true
-
- counter++
- request({url:'http://localhost:3453/pull'}).pipe(mypulldata)
-
- var d = '';
-
- mypulldata.write = function (chunk) {
- d += chunk;
- }
- mypulldata.end = function () {
- assert.equal(d, 'mypulldata');
- check();
- };
-
-
- s.on('/cat', function (req, resp) {
- if (req.method === "GET") {
- resp.writeHead(200, {'content-type':'text/plain-test', 'content-length':4});
- resp.end('asdf')
- } else if (req.method === "PUT") {
- assert.equal(req.headers['content-type'], 'text/plain-test');
- assert.equal(req.headers['content-length'], 4)
- var validate = '';
-
- req.on('data', function (chunk) {validate += chunk})
- req.on('end', function () {
- resp.writeHead(201);
- resp.end();
- assert.equal(validate, 'asdf');
- check();
- })
- }
- })
- s.on('/pushjs', function (req, resp) {
- if (req.method === "PUT") {
- assert.equal(req.headers['content-type'], 'application/javascript');
- check();
- }
- })
- s.on('/catresp', function (req, resp) {
- request.get('http://localhost:3453/cat').pipe(resp)
- })
- s.on('/doodle', function (req, resp) {
- if (req.headers['x-oneline-proxy']) {
- resp.setHeader('x-oneline-proxy', 'yup')
- }
- resp.writeHead('200', {'content-type':'image/jpeg'})
- fs.createReadStream(path.join(__dirname, 'googledoodle.jpg')).pipe(resp)
- })
- s.on('/onelineproxy', function (req, resp) {
- var x = request('http://localhost:3453/doodle')
- req.pipe(x)
- x.pipe(resp)
- })
-
- counter++
- fs.createReadStream(__filename).pipe(request.put('http://localhost:3453/pushjs'))
-
- counter++
- request.get('http://localhost:3453/cat').pipe(request.put('http://localhost:3453/cat'))
-
- counter++
- request.get('http://localhost:3453/catresp', function (e, resp, body) {
- assert.equal(resp.headers['content-type'], 'text/plain-test');
- assert.equal(resp.headers['content-length'], 4)
- check();
- })
-
- var doodleWrite = fs.createWriteStream(path.join(__dirname, 'test.jpg'))
-
- counter++
- request.get('http://localhost:3453/doodle').pipe(doodleWrite)
-
- doodleWrite.on('close', function () {
- assert.deepEqual(fs.readFileSync(path.join(__dirname, 'googledoodle.jpg')), fs.readFileSync(path.join(__dirname, 'test.jpg')))
- check()
- })
-
- process.on('exit', function () {
- fs.unlinkSync(path.join(__dirname, 'test.jpg'))
- })
-
- counter++
- request.get({uri:'http://localhost:3453/onelineproxy', headers:{'x-oneline-proxy':'nope'}}, function (err, resp, body) {
- assert.equal(resp.headers['x-oneline-proxy'], 'yup')
- check()
- })
-
- s.on('/afterresponse', function (req, resp) {
- resp.write('d')
- resp.end()
- })
-
- counter++
- var afterresp = request.post('http://localhost:3453/afterresponse').on('response', function () {
- var v = new ValidationStream('d')
- afterresp.pipe(v)
- v.on('end', check)
- })
-
- s.on('/forward1', function (req, resp) {
- resp.writeHead(302, {location:'/forward2'})
- resp.end()
- })
- s.on('/forward2', function (req, resp) {
- resp.writeHead('200', {'content-type':'image/png'})
- resp.write('d')
- resp.end()
- })
-
- counter++
- var validateForward = new ValidationStream('d')
- validateForward.on('end', check)
- request.get('http://localhost:3453/forward1').pipe(validateForward)
-
- // Test pipe options
- s.once('/opts', server.createGetResponse('opts response'));
-
- var optsStream = new stream.Stream();
- optsStream.writable = true
-
- var optsData = '';
- optsStream.write = function (buf) {
- optsData += buf;
- if (optsData === 'opts response') {
- setTimeout(check, 10);
- }
- }
-
- optsStream.end = function () {
- assert.fail('end called')
- };
-
- counter++
- request({url:'http://localhost:3453/opts'}).pipe(optsStream, { end : false })
-})
diff --git a/deps/npm/node_modules/request/tests/test-pool.js b/deps/npm/node_modules/request/tests/test-pool.js
deleted file mode 100644
index 791ee8b93..000000000
--- a/deps/npm/node_modules/request/tests/test-pool.js
+++ /dev/null
@@ -1,16 +0,0 @@
-var request = require('../index')
- , http = require('http')
- , assert = require('assert')
- ;
-
-var s = http.createServer(function (req, resp) {
- resp.statusCode = 200;
- resp.end('asdf');
-}).listen(8080, function () {
- request({'url': 'http://localhost:8080', 'pool': false}, function (e, resp) {
- var agent = resp.request.agent;
- assert.strictEqual(typeof agent, 'boolean');
- assert.strictEqual(agent, false);
- s.close();
- });
-}); \ No newline at end of file
diff --git a/deps/npm/node_modules/request/tests/test-protocol-changing-redirect.js b/deps/npm/node_modules/request/tests/test-protocol-changing-redirect.js
deleted file mode 100644
index 7e83a41bd..000000000
--- a/deps/npm/node_modules/request/tests/test-protocol-changing-redirect.js
+++ /dev/null
@@ -1,61 +0,0 @@
-var server = require('./server')
- , assert = require('assert')
- , request = require('../index')
-
-
-var s = server.createServer()
-var ss = server.createSSLServer()
-var sUrl = 'http://localhost:' + s.port
-var ssUrl = 'https://localhost:' + ss.port
-
-s.listen(s.port, bouncy(s, ssUrl))
-ss.listen(ss.port, bouncy(ss, sUrl))
-
-var hits = {}
-var expect = {}
-var pending = 0
-function bouncy (s, server) { return function () {
-
- var redirs = { a: 'b'
- , b: 'c'
- , c: 'd'
- , d: 'e'
- , e: 'f'
- , f: 'g'
- , g: 'h'
- , h: 'end' }
-
- var perm = true
- Object.keys(redirs).forEach(function (p) {
- var t = redirs[p]
-
- // switch type each time
- var type = perm ? 301 : 302
- perm = !perm
- s.on('/' + p, function (req, res) {
- res.writeHead(type, { location: server + '/' + t })
- res.end()
- })
- })
-
- s.on('/end', function (req, res) {
- var h = req.headers['x-test-key']
- hits[h] = true
- pending --
- if (pending === 0) done()
- })
-}}
-
-for (var i = 0; i < 5; i ++) {
- pending ++
- var val = 'test_' + i
- expect[val] = true
- request({ url: (i % 2 ? sUrl : ssUrl) + '/a'
- , headers: { 'x-test-key': val }
- , rejectUnauthorized: false })
-}
-
-function done () {
- assert.deepEqual(hits, expect)
- process.exit(0)
-}
diff --git a/deps/npm/node_modules/request/tests/test-proxy.js b/deps/npm/node_modules/request/tests/test-proxy.js
deleted file mode 100644
index e183d68d1..000000000
--- a/deps/npm/node_modules/request/tests/test-proxy.js
+++ /dev/null
@@ -1,39 +0,0 @@
-var server = require('./server')
- , events = require('events')
- , stream = require('stream')
- , assert = require('assert')
- , fs = require('fs')
- , request = require('../index')
- , path = require('path')
- , util = require('util')
- ;
-
-var port = 6768
- , called = false
- , proxiedHost = 'google.com'
- ;
-
-var s = server.createServer(port)
-s.listen(port, function () {
- s.on('http://google.com/', function (req, res) {
- called = true
- assert.equal(req.headers.host, proxiedHost)
- res.writeHeader(200)
- res.end()
- })
- request ({
- url: 'http://'+proxiedHost,
- proxy: 'http://localhost:'+port
- /*
- //should behave as if these arguments where passed:
- url: 'http://localhost:'+port,
- headers: {host: proxiedHost}
- //*/
- }, function (err, res, body) {
- s.close()
- })
-})
-
-process.on('exit', function () {
- assert.ok(called, 'the request must be made to the proxy server')
-})
diff --git a/deps/npm/node_modules/request/tests/test-qs.js b/deps/npm/node_modules/request/tests/test-qs.js
deleted file mode 100644
index 65958e6a3..000000000
--- a/deps/npm/node_modules/request/tests/test-qs.js
+++ /dev/null
@@ -1,42 +0,0 @@
-var request = request = require('../index')
- , assert = require('assert')
- ;
-
-
-// Test adding a querystring
-var req1 = request.get({ uri: 'http://www.google.com', qs: { q : 'search' }})
-setTimeout(function() {
- assert.equal('/?q=search', req1.path)
-}, 1)
-
-// Test replacing a querystring value
-var req2 = request.get({ uri: 'http://www.google.com?q=abc', qs: { q : 'search' }})
-setTimeout(function() {
- assert.equal('/?q=search', req2.path)
-}, 1)
-
-// Test appending a querystring value to the ones present in the uri
-var req3 = request.get({ uri: 'http://www.google.com?x=y', qs: { q : 'search' }})
-setTimeout(function() {
- assert.equal('/?x=y&q=search', req3.path)
-}, 1)
-
-// Test leaving a querystring alone
-var req4 = request.get({ uri: 'http://www.google.com?x=y'})
-setTimeout(function() {
- assert.equal('/?x=y', req4.path)
-}, 1)
-
-// Test giving empty qs property
-var req5 = request.get({ uri: 'http://www.google.com', qs: {}})
-setTimeout(function(){
- assert.equal('/', req5.path)
-}, 1)
-
-
-// Test modifying the qs after creating the request
-var req6 = request.get({ uri: 'http://www.google.com', qs: {}});
-req6.qs({ q: "test" });
-process.nextTick(function() {
- assert.equal('/?q=test', req6.path);
-});
diff --git a/deps/npm/node_modules/request/tests/test-redirect.js b/deps/npm/node_modules/request/tests/test-redirect.js
deleted file mode 100644
index cdd460666..000000000
--- a/deps/npm/node_modules/request/tests/test-redirect.js
+++ /dev/null
@@ -1,155 +0,0 @@
-var server = require('./server')
- , assert = require('assert')
- , request = require('../index')
- , Cookie = require('cookie-jar')
- , Jar = Cookie.Jar
- ;
-
-var s = server.createServer()
-
-s.listen(s.port, function () {
- var server = 'http://localhost:' + s.port;
- var hits = {}
- var passed = 0;
-
- bouncer(301, 'temp')
- bouncer(302, 'perm')
- bouncer(302, 'nope')
-
- function bouncer(code, label) {
- var landing = label+'_landing';
-
- s.on('/'+label, function (req, res) {
- hits[label] = true;
- res.writeHead(code, {
- 'location':server + '/'+landing,
- 'set-cookie': 'ham=eggs'
- })
- res.end()
- })
-
- s.on('/'+landing, function (req, res) {
- if (req.method !== 'GET') { // We should only accept GET redirects
- console.error("Got a non-GET request to the redirect destination URL");
- res.writeHead(400);
- res.end();
- return;
- }
- // Make sure the cookie doesn't get included twice, see #139:
- // Make sure cookies are set properly after redirect
- assert.equal(req.headers.cookie, 'foo=bar; quux=baz; ham=eggs');
- hits[landing] = true;
- res.writeHead(200)
- res.end(landing)
- })
- }
-
- // Permanent bounce
- var jar = new Jar()
- jar.add(new Cookie('quux=baz'))
- request({uri: server+'/perm', jar: jar, headers: {cookie: 'foo=bar'}}, function (er, res, body) {
- if (er) throw er
- if (res.statusCode !== 200) throw new Error('Status is not 200: '+res.statusCode)
- assert.ok(hits.perm, 'Original request is to /perm')
- assert.ok(hits.perm_landing, 'Forward to permanent landing URL')
- assert.equal(body, 'perm_landing', 'Got permanent landing content')
- passed += 1
- done()
- })
-
- // Temporary bounce
- request({uri: server+'/temp', jar: jar, headers: {cookie: 'foo=bar'}}, function (er, res, body) {
- if (er) throw er
- if (res.statusCode !== 200) throw new Error('Status is not 200: '+res.statusCode)
- assert.ok(hits.temp, 'Original request is to /temp')
- assert.ok(hits.temp_landing, 'Forward to temporary landing URL')
- assert.equal(body, 'temp_landing', 'Got temporary landing content')
- passed += 1
- done()
- })
-
- // Prevent bouncing.
- request({uri:server+'/nope', jar: jar, headers: {cookie: 'foo=bar'}, followRedirect:false}, function (er, res, body) {
- if (er) throw er
- if (res.statusCode !== 302) throw new Error('Status is not 302: '+res.statusCode)
- assert.ok(hits.nope, 'Original request to /nope')
- assert.ok(!hits.nope_landing, 'No chasing the redirect')
- assert.equal(res.statusCode, 302, 'Response is the bounce itself')
- passed += 1
- done()
- })
-
- // Should not follow post redirects by default
- request.post(server+'/temp', { jar: jar, headers: {cookie: 'foo=bar'}}, function (er, res, body) {
- if (er) throw er
- if (res.statusCode !== 301) throw new Error('Status is not 301: '+res.statusCode)
- assert.ok(hits.temp, 'Original request is to /temp')
- assert.ok(!hits.temp_landing, 'No chasing the redirect when post')
- assert.equal(res.statusCode, 301, 'Response is the bounce itself')
- passed += 1
- done()
- })
-
- // Should follow post redirects when followAllRedirects true
- request.post({uri:server+'/temp', followAllRedirects:true, jar: jar, headers: {cookie: 'foo=bar'}}, function (er, res, body) {
- if (er) throw er
- if (res.statusCode !== 200) throw new Error('Status is not 200: '+res.statusCode)
- assert.ok(hits.temp, 'Original request is to /temp')
- assert.ok(hits.temp_landing, 'Forward to temporary landing URL')
- assert.equal(body, 'temp_landing', 'Got temporary landing content')
- passed += 1
- done()
- })
-
- request.post({uri:server+'/temp', followAllRedirects:false, jar: jar, headers: {cookie: 'foo=bar'}}, function (er, res, body) {
- if (er) throw er
- if (res.statusCode !== 301) throw new Error('Status is not 301: '+res.statusCode)
- assert.ok(hits.temp, 'Original request is to /temp')
- assert.ok(!hits.temp_landing, 'No chasing the redirect')
- assert.equal(res.statusCode, 301, 'Response is the bounce itself')
- passed += 1
- done()
- })
-
- // Should not follow delete redirects by default
- request.del(server+'/temp', { jar: jar, headers: {cookie: 'foo=bar'}}, function (er, res, body) {
- if (er) throw er
- if (res.statusCode < 301) throw new Error('Status is not a redirect.')
- assert.ok(hits.temp, 'Original request is to /temp')
- assert.ok(!hits.temp_landing, 'No chasing the redirect when delete')
- assert.equal(res.statusCode, 301, 'Response is the bounce itself')
- passed += 1
- done()
- })
-
- // Should not follow delete redirects even if followRedirect is set to true
- request.del(server+'/temp', { followRedirect: true, jar: jar, headers: {cookie: 'foo=bar'}}, function (er, res, body) {
- if (er) throw er
- if (res.statusCode !== 301) throw new Error('Status is not 301: '+res.statusCode)
- assert.ok(hits.temp, 'Original request is to /temp')
- assert.ok(!hits.temp_landing, 'No chasing the redirect when delete')
- assert.equal(res.statusCode, 301, 'Response is the bounce itself')
- passed += 1
- done()
- })
-
- // Should follow delete redirects when followAllRedirects true
- request.del(server+'/temp', {followAllRedirects:true, jar: jar, headers: {cookie: 'foo=bar'}}, function (er, res, body) {
- if (er) throw er
- if (res.statusCode !== 200) throw new Error('Status is not 200: '+res.statusCode)
- assert.ok(hits.temp, 'Original request is to /temp')
- assert.ok(hits.temp_landing, 'Forward to temporary landing URL')
- assert.equal(body, 'temp_landing', 'Got temporary landing content')
- passed += 1
- done()
- })
-
- var reqs_done = 0;
- function done() {
- reqs_done += 1;
- if(reqs_done == 9) {
- console.log(passed + ' tests passed.')
- s.close()
- }
- }
-})
diff --git a/deps/npm/node_modules/request/tests/test-s3.js b/deps/npm/node_modules/request/tests/test-s3.js
deleted file mode 100644
index 0f6a832b6..000000000
--- a/deps/npm/node_modules/request/tests/test-s3.js
+++ /dev/null
@@ -1,13 +0,0 @@
-var request = require('../index')
-
-var r = request.get('https://log.curlybracecast.com.s3.amazonaws.com/',
- { aws:
- { key: 'AKIAI6KIQRRVMGK3WK5Q'
- , secret: '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'
- , bucket: 'log.curlybracecast.com'
- }
- }, function (e, resp, body) {
- console.log(r.headers)
- console.log(body)
- }
-) \ No newline at end of file
diff --git a/deps/npm/node_modules/request/tests/test-timeout.js b/deps/npm/node_modules/request/tests/test-timeout.js
deleted file mode 100644
index 70363670f..000000000
--- a/deps/npm/node_modules/request/tests/test-timeout.js
+++ /dev/null
@@ -1,87 +0,0 @@
-var server = require('./server')
- , events = require('events')
- , stream = require('stream')
- , assert = require('assert')
- , request = require('../index')
- ;
-
-var s = server.createServer();
-var expectedBody = "waited";
-var remainingTests = 5;
-
-s.listen(s.port, function () {
- // Request that waits for 200ms
- s.on('/timeout', function (req, resp) {
- setTimeout(function(){
- resp.writeHead(200, {'content-type':'text/plain'})
- resp.write(expectedBody)
- resp.end()
- }, 200);
- });
-
- // Scenario that should timeout
- var shouldTimeout = {
- url: s.url + "/timeout",
- timeout:100
- }
-
-
- request(shouldTimeout, function (err, resp, body) {
- assert.equal(err.code, "ETIMEDOUT");
- checkDone();
- })
-
-
- // Scenario that shouldn't timeout
- var shouldntTimeout = {
- url: s.url + "/timeout",
- timeout:300
- }
-
- request(shouldntTimeout, function (err, resp, body) {
- assert.equal(err, null);
- assert.equal(expectedBody, body)
- checkDone();
- })
-
- // Scenario with no timeout set, so shouldn't timeout
- var noTimeout = {
- url: s.url + "/timeout"
- }
-
- request(noTimeout, function (err, resp, body) {
- assert.equal(err);
- assert.equal(expectedBody, body)
- checkDone();
- })
-
- // Scenario with a negative timeout value, should be treated a zero or the minimum delay
- var negativeTimeout = {
- url: s.url + "/timeout",
- timeout:-1000
- }
-
- request(negativeTimeout, function (err, resp, body) {
- assert.equal(err.code, "ETIMEDOUT");
- checkDone();
- })
-
- // Scenario with a float timeout value, should be rounded by setTimeout anyway
- var floatTimeout = {
- url: s.url + "/timeout",
- timeout: 100.76
- }
-
- request(floatTimeout, function (err, resp, body) {
- assert.equal(err.code, "ETIMEDOUT");
- checkDone();
- })
-
- function checkDone() {
- if(--remainingTests == 0) {
- s.close();
- console.log("All tests passed.");
- }
- }
-})
-
diff --git a/deps/npm/node_modules/request/tests/test-toJSON.js b/deps/npm/node_modules/request/tests/test-toJSON.js
deleted file mode 100644
index 6d5f92aaa..000000000
--- a/deps/npm/node_modules/request/tests/test-toJSON.js
+++ /dev/null
@@ -1,14 +0,0 @@
-var request = require('../index')
- , http = require('http')
- , assert = require('assert')
- ;
-
-var s = http.createServer(function (req, resp) {
- resp.statusCode = 200
- resp.end('asdf')
-}).listen(8080, function () {
- var r = request('http://localhost:8080', function (e, resp) {
- assert.equal(JSON.parse(JSON.stringify(r)).response.statusCode, 200)
- s.close()
- })
-}) \ No newline at end of file
diff --git a/deps/npm/node_modules/request/tests/test-tunnel.js b/deps/npm/node_modules/request/tests/test-tunnel.js
deleted file mode 100644
index 2ee3f393e..000000000
--- a/deps/npm/node_modules/request/tests/test-tunnel.js
+++ /dev/null
@@ -1,75 +0,0 @@
-// test that we can tunnel a https request over an http proxy
-// keeping all the CA and whatnot intact.
-//
-// Note: this requires that squid is installed.
-// If the proxy fails to start, we'll just log a warning and assume success.
-
-var server = require('./server')
- , assert = require('assert')
- , request = require('../index')
- , fs = require('fs')
- , path = require('path')
- , caFile = path.resolve(__dirname, 'ssl/npm-ca.crt')
- , ca = fs.readFileSync(caFile)
- , child_process = require('child_process')
- , sqConf = path.resolve(__dirname, 'squid.conf')
- , sqArgs = ['-f', sqConf, '-N', '-d', '5']
- , proxy = 'http://localhost:3128'
- , hadError = null
-
-var squid = child_process.spawn('squid', sqArgs);
-var ready = false
-
-squid.stderr.on('data', function (c) {
- console.error('SQUIDERR ' + c.toString().trim().split('\n')
- .join('\nSQUIDERR '))
- ready = c.toString().match(/ready to serve requests|Accepting HTTP Socket connections/i)
-})
-
-squid.stdout.on('data', function (c) {
- console.error('SQUIDOUT ' + c.toString().trim().split('\n')
- .join('\nSQUIDOUT '))
-})
-
-squid.on('error', function (c) {
- console.error('squid: error '+c)
- if (c && !ready) {
- notInstalled()
- return
- }
-})
-
-squid.on('exit', function (c) {
- console.error('squid: exit '+c)
- if (c && !ready) {
- notInstalled()
- return
- }
-
- if (c) {
- hadError = hadError || new Error('Squid exited with '+c)
- }
- if (hadError) throw hadError
-})
-
-setTimeout(function F () {
- if (!ready) return setTimeout(F, 100)
- request({ uri: 'https://registry.npmjs.org/'
- , proxy: 'http://localhost:3128'
- , strictSSL: true
- , ca: ca
- , json: true }, function (er, body) {
- hadError = er
- console.log(er || typeof body)
- if (!er) console.log("ok")
- squid.kill('SIGKILL')
- })
-}, 100)
-
-function notInstalled() {
- console.error('squid must be installed to run this test.')
- console.error('skipping this test. please install squid and run again if you need to test tunneling.')
- c = null
- hadError = null
- process.exit(0)
-}
diff --git a/deps/npm/node_modules/request/tests/unicycle.jpg b/deps/npm/node_modules/request/tests/unicycle.jpg
deleted file mode 100644
index 7cea4dd71..000000000
--- a/deps/npm/node_modules/request/tests/unicycle.jpg
+++ /dev/null
Binary files differ
diff --git a/deps/npm/node_modules/rimraf/README.md b/deps/npm/node_modules/rimraf/README.md
index 96ce9b2a0..cd123b652 100644
--- a/deps/npm/node_modules/rimraf/README.md
+++ b/deps/npm/node_modules/rimraf/README.md
@@ -1,4 +1,4 @@
-A `rm -rf` for node.
+`rm -rf` for node.
Install with `npm install rimraf`, or just drop rimraf.js somewhere.
@@ -9,13 +9,22 @@ Install with `npm install rimraf`, or just drop rimraf.js somewhere.
The callback will be called with an error if there is one. Certain
errors are handled for you:
-* `EBUSY` - rimraf will back off a maximum of opts.maxBusyTries times
- before giving up.
-* `EMFILE` - If too many file descriptors get opened, rimraf will
- patiently wait until more become available.
-
+* Windows: `EBUSY` and `ENOTEMPTY` - rimraf will back off a maximum of
+ `opts.maxBusyTries` times before giving up.
+* `ENOENT` - If the file doesn't exist, rimraf will return
+ successfully, since your desired outcome is already the case.
## rimraf.sync
It can remove stuff synchronously, too. But that's not so good. Use
the async API. It's better.
+
+## CLI
+
+If installed with `npm install rimraf -g` it can be used as a global
+command `rimraf <path>` which is useful for cross platform support.
+
+## mkdirp
+
+If you need to create a directory recursively, check out
+[mkdirp](https://github.com/substack/node-mkdirp).
diff --git a/deps/npm/node_modules/rimraf/bin.js b/deps/npm/node_modules/rimraf/bin.js
new file mode 100755
index 000000000..29bfa8a63
--- /dev/null
+++ b/deps/npm/node_modules/rimraf/bin.js
@@ -0,0 +1,33 @@
+#!/usr/bin/env node
+
+var rimraf = require('./')
+
+var help = false
+var dashdash = false
+var args = process.argv.slice(2).filter(function(arg) {
+ if (dashdash)
+ return !!arg
+ else if (arg === '--')
+ dashdash = true
+ else if (arg.match(/^(-+|\/)(h(elp)?|\?)$/))
+ help = true
+ else
+ return !!arg
+});
+
+if (help || args.length === 0) {
+ // If they didn't ask for help, then this is not a "success"
+ var log = help ? console.log : console.error
+ log('Usage: rimraf <path>')
+ log('')
+ log(' Deletes all files and folders at "path" recursively.')
+ log('')
+ log('Options:')
+ log('')
+ log(' -h, --help Display this usage info')
+ process.exit(help ? 0 : 1)
+} else {
+ args.forEach(function(arg) {
+ rimraf.sync(arg)
+ })
+}
diff --git a/deps/npm/node_modules/rimraf/package.json b/deps/npm/node_modules/rimraf/package.json
index 679ee6b03..d26d949f9 100644
--- a/deps/npm/node_modules/rimraf/package.json
+++ b/deps/npm/node_modules/rimraf/package.json
@@ -1,6 +1,6 @@
{
"name": "rimraf",
- "version": "2.1.4",
+ "version": "2.2.6",
"main": "rimraf.js",
"description": "A deep deletion module for node (like `rm -rf`)",
"author": {
@@ -12,9 +12,6 @@
"type": "MIT",
"url": "https://github.com/isaacs/rimraf/raw/master/LICENSE"
},
- "optionalDependencies": {
- "graceful-fs": "~1"
- },
"repository": {
"type": "git",
"url": "git://github.com/isaacs/rimraf.git"
@@ -22,6 +19,9 @@
"scripts": {
"test": "cd test && bash run.sh"
},
+ "bin": {
+ "rimraf": "./bin.js"
+ },
"contributors": [
{
"name": "Isaac Z. Schlueter",
@@ -45,11 +45,12 @@
"email": "yosefd@microsoft.com"
}
],
- "readme": "A `rm -rf` for node.\n\nInstall with `npm install rimraf`, or just drop rimraf.js somewhere.\n\n## API\n\n`rimraf(f, callback)`\n\nThe callback will be called with an error if there is one. Certain\nerrors are handled for you:\n\n* `EBUSY` - rimraf will back off a maximum of opts.maxBusyTries times\n before giving up.\n* `EMFILE` - If too many file descriptors get opened, rimraf will\n patiently wait until more become available.\n\n\n## rimraf.sync\n\nIt can remove stuff synchronously, too. But that's not so good. Use\nthe async API. It's better.\n",
+ "readme": "`rm -rf` for node.\n\nInstall with `npm install rimraf`, or just drop rimraf.js somewhere.\n\n## API\n\n`rimraf(f, callback)`\n\nThe callback will be called with an error if there is one. Certain\nerrors are handled for you:\n\n* Windows: `EBUSY` and `ENOTEMPTY` - rimraf will back off a maximum of\n `opts.maxBusyTries` times before giving up.\n* `ENOENT` - If the file doesn't exist, rimraf will return\n successfully, since your desired outcome is already the case.\n\n## rimraf.sync\n\nIt can remove stuff synchronously, too. But that's not so good. Use\nthe async API. It's better.\n\n## CLI\n\nIf installed with `npm install rimraf -g` it can be used as a global\ncommand `rimraf <path>` which is useful for cross platform support.\n\n## mkdirp\n\nIf you need to create a directory recursively, check out\n[mkdirp](https://github.com/substack/node-mkdirp).\n",
"readmeFilename": "README.md",
- "_id": "rimraf@2.1.4",
- "dependencies": {
- "graceful-fs": "~1"
+ "bugs": {
+ "url": "https://github.com/isaacs/rimraf/issues"
},
- "_from": "rimraf@2"
+ "homepage": "https://github.com/isaacs/rimraf",
+ "_id": "rimraf@2.2.6",
+ "_from": "rimraf@~2.2.5"
}
diff --git a/deps/npm/node_modules/rimraf/rimraf.js b/deps/npm/node_modules/rimraf/rimraf.js
index ed915f982..ce62051fc 100644
--- a/deps/npm/node_modules/rimraf/rimraf.js
+++ b/deps/npm/node_modules/rimraf/rimraf.js
@@ -2,27 +2,23 @@ module.exports = rimraf
rimraf.sync = rimrafSync
var path = require("path")
- , fs
-
-try {
- // optional dependency
- fs = require("graceful-fs")
-} catch (er) {
- fs = require("fs")
-}
+var fs = require("fs")
// for EMFILE handling
var timeout = 0
exports.EMFILE_MAX = 1000
exports.BUSYTRIES_MAX = 3
+var isWindows = (process.platform === "win32")
+
function rimraf (p, cb) {
if (!cb) throw new Error("No callback passed to rimraf()")
var busyTries = 0
rimraf_(p, function CB (er) {
if (er) {
- if (er.code === "EBUSY" && busyTries < exports.BUSYTRIES_MAX) {
+ if (isWindows && (er.code === "EBUSY" || er.code === "ENOTEMPTY") &&
+ busyTries < exports.BUSYTRIES_MAX) {
busyTries ++
var time = busyTries * 100
// try again, with the same exact callback as this one.
@@ -60,20 +56,61 @@ function rimraf (p, cb) {
// be made configurable somehow. But until then, YAGNI.
function rimraf_ (p, cb) {
fs.unlink(p, function (er) {
- if (er && er.code === "ENOENT")
- return cb()
- if (er && (er.code === "EPERM" || er.code === "EISDIR"))
- return rmdir(p, er, cb)
+ if (er) {
+ if (er.code === "ENOENT")
+ return cb(null)
+ if (er.code === "EPERM")
+ return (isWindows) ? fixWinEPERM(p, er, cb) : rmdir(p, er, cb)
+ if (er.code === "EISDIR")
+ return rmdir(p, er, cb)
+ }
return cb(er)
})
}
+function fixWinEPERM (p, er, cb) {
+ fs.chmod(p, 666, function (er2) {
+ if (er2)
+ cb(er2.code === "ENOENT" ? null : er)
+ else
+ fs.stat(p, function(er3, stats) {
+ if (er3)
+ cb(er3.code === "ENOENT" ? null : er)
+ else if (stats.isDirectory())
+ rmdir(p, er, cb)
+ else
+ fs.unlink(p, cb)
+ })
+ })
+}
+
+function fixWinEPERMSync (p, er, cb) {
+ try {
+ fs.chmodSync(p, 666)
+ } catch (er2) {
+ if (er2.code !== "ENOENT")
+ throw er
+ }
+
+ try {
+ var stats = fs.statSync(p)
+ } catch (er3) {
+ if (er3 !== "ENOENT")
+ throw er
+ }
+
+ if (stats.isDirectory())
+ rmdirSync(p, er)
+ else
+ fs.unlinkSync(p)
+}
+
function rmdir (p, originalEr, cb) {
// try to rmdir first, and only readdir on ENOTEMPTY or EEXIST (SunOS)
// if we guessed wrong, and it's not a directory, then
// raise the original error.
fs.rmdir(p, function (er) {
- if (er && (er.code === "ENOTEMPTY" || er.code === "EEXIST"))
+ if (er && (er.code === "ENOTEMPTY" || er.code === "EEXIST" || er.code === "EPERM"))
rmkids(p, cb)
else if (er && er.code === "ENOTDIR")
cb(originalEr)
@@ -112,21 +149,30 @@ function rimrafSync (p) {
} catch (er) {
if (er.code === "ENOENT")
return
- if (er.code !== "EPERM" && er.code !== "EISDIR")
+ if (er.code === "EPERM")
+ return isWindows ? fixWinEPERMSync(p, er) : rmdirSync(p, er)
+ if (er.code !== "EISDIR")
throw er
- try {
- fs.rmdirSync(p)
- } catch (er2) {
- if (er2.code === "ENOENT")
- return
- if (er2.code === "ENOTDIR")
- throw er
- if (er2.code === "ENOTEMPTY") {
- fs.readdirSync(p).forEach(function (f) {
- rimrafSync(path.join(p, f))
- })
- fs.rmdirSync(p)
- }
- }
+ rmdirSync(p, er)
+ }
+}
+
+function rmdirSync (p, originalEr) {
+ try {
+ fs.rmdirSync(p)
+ } catch (er) {
+ if (er.code === "ENOENT")
+ return
+ if (er.code === "ENOTDIR")
+ throw originalEr
+ if (er.code === "ENOTEMPTY" || er.code === "EEXIST" || er.code === "EPERM")
+ rmkidsSync(p)
}
}
+
+function rmkidsSync (p) {
+ fs.readdirSync(p).forEach(function (f) {
+ rimrafSync(path.join(p, f))
+ })
+ fs.rmdirSync(p)
+}
diff --git a/deps/npm/node_modules/semver/.npmignore b/deps/npm/node_modules/semver/.npmignore
new file mode 100644
index 000000000..7300fbc79
--- /dev/null
+++ b/deps/npm/node_modules/semver/.npmignore
@@ -0,0 +1 @@
+# nada
diff --git a/deps/npm/node_modules/semver/LICENSE b/deps/npm/node_modules/semver/LICENSE
index 05a401094..0c44ae716 100644
--- a/deps/npm/node_modules/semver/LICENSE
+++ b/deps/npm/node_modules/semver/LICENSE
@@ -1,23 +1,27 @@
-Copyright 2009, 2010, 2011 Isaac Z. Schlueter.
+Copyright (c) Isaac Z. Schlueter ("Author")
All rights reserved.
-Permission is hereby granted, free of charge, to any person
-obtaining a copy of this software and associated documentation
-files (the "Software"), to deal in the Software without
-restriction, including without limitation the rights to use,
-copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the
-Software is furnished to do so, subject to the following
-conditions:
+The BSD License
-The above copyright notice and this permission notice shall be
-included in all copies or substantial portions of the Software.
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
-OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
-HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
-WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
-OTHER DEALINGS IN THE SOFTWARE.
+1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+
+2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/deps/npm/node_modules/semver/Makefile b/deps/npm/node_modules/semver/Makefile
new file mode 100644
index 000000000..5717ccf42
--- /dev/null
+++ b/deps/npm/node_modules/semver/Makefile
@@ -0,0 +1,24 @@
+files = semver.browser.js \
+ semver.min.js \
+ semver.browser.js.gz \
+ semver.min.js.gz
+
+all: $(files)
+
+clean:
+ rm -f $(files)
+
+semver.browser.js: head.js semver.js foot.js
+ ( cat head.js; \
+ cat semver.js | \
+ egrep -v '^ *\/\* nomin \*\/' | \
+ perl -pi -e 's/debug\([^\)]+\)//g'; \
+ cat foot.js ) > semver.browser.js
+
+semver.min.js: semver.browser.js
+ uglifyjs -m <semver.browser.js >semver.min.js
+
+%.gz: %
+ gzip --stdout -9 <$< >$@
+
+.PHONY: all clean
diff --git a/deps/npm/node_modules/semver/README.md b/deps/npm/node_modules/semver/README.md
index 219300968..ef0465981 100644
--- a/deps/npm/node_modules/semver/README.md
+++ b/deps/npm/node_modules/semver/README.md
@@ -16,11 +16,12 @@ As a command-line utility:
$ semver -h
- Usage: semver -v <version> [-r <range>]
- Test if version(s) satisfy the supplied range(s),
- and sort them.
+ Usage: semver <version> [<version> [...]] [-r <range> | -i <inc> | -d <dec>]
+ Test if version(s) satisfy the supplied range(s), and sort them.
- Multiple versions or ranges may be supplied.
+ Multiple versions or ranges may be supplied, unless increment
+ or decrement options are specified. In that case, only a single
+ version may be used, and it is incremented by the specified level
Program exits successfully if any valid version satisfies
all supplied ranges, and prints all satisfying versions.
@@ -33,62 +34,65 @@ As a command-line utility:
## Versions
-A version is the following things, in this order:
-
-* a number (Major)
-* a period
-* a number (minor)
-* a period
-* a number (patch)
-* OPTIONAL: a hyphen, followed by a number (build)
-* OPTIONAL: a collection of pretty much any non-whitespace characters
- (tag)
+A "version" is described by the v2.0.0 specification found at
+<http://semver.org/>.
A leading `"="` or `"v"` character is stripped off and ignored.
-## Comparisons
-
-The ordering of versions is done using the following algorithm, given
-two versions and asked to find the greater of the two:
-
-* If the majors are numerically different, then take the one
- with a bigger major number. `2.3.4 > 1.3.4`
-* If the minors are numerically different, then take the one
- with the bigger minor number. `2.3.4 > 2.2.4`
-* If the patches are numerically different, then take the one with the
- bigger patch number. `2.3.4 > 2.3.3`
-* If only one of them has a build number, then take the one with the
- build number. `2.3.4-0 > 2.3.4`
-* If they both have build numbers, and the build numbers are numerically
- different, then take the one with the bigger build number.
- `2.3.4-10 > 2.3.4-9`
-* If only one of them has a tag, then take the one without the tag.
- `2.3.4 > 2.3.4-beta`
-* If they both have tags, then take the one with the lexicographically
- larger tag. `2.3.4-beta > 2.3.4-alpha`
-* At this point, they're equal.
-
## Ranges
The following range styles are supported:
+* `1.2.3` A specific version. When nothing else will do. Note that
+ build metadata is still ignored, so `1.2.3+build2012` will satisfy
+ this range.
* `>1.2.3` Greater than a specific version.
-* `<1.2.3` Less than
+* `<1.2.3` Less than a specific version. If there is no prerelease
+ tag on the version range, then no prerelease version will be allowed
+ either, even though these are technically "less than".
+* `>=1.2.3` Greater than or equal to. Note that prerelease versions
+ are NOT equal to their "normal" equivalents, so `1.2.3-beta` will
+ not satisfy this range, but `2.3.0-beta` will.
+* `<=1.2.3` Less than or equal to. In this case, prerelease versions
+ ARE allowed, so `1.2.3-beta` would satisfy.
* `1.2.3 - 2.3.4` := `>=1.2.3 <=2.3.4`
-* `~1.2.3` := `>=1.2.3 <1.3.0`
-* `~1.2` := `>=1.2.0 <1.3.0`
-* `~1` := `>=1.0.0 <2.0.0`
-* `1.2.x` := `>=1.2.0 <1.3.0`
-* `1.x` := `>=1.0.0 <2.0.0`
+* `~1.2.3` := `>=1.2.3-0 <1.3.0-0` "Reasonably close to 1.2.3". When
+ using tilde operators, prerelease versions are supported as well,
+ but a prerelease of the next significant digit will NOT be
+ satisfactory, so `1.3.0-beta` will not satisfy `~1.2.3`.
+* `^1.2.3` := `>=1.2.3-0 <2.0.0-0` "Compatible with 1.2.3". When
+ using caret operators, anything from the specified version (including
+ prerelease) will be supported up to, but not including, the next
+ major version (or its prereleases). `1.5.1` will satisfy `^1.2.3`,
+ while `1.2.2` and `2.0.0-beta` will not.
+* `^0.1.3` := `>=0.1.3-0 <0.2.0-0` "Compatible with 0.1.3". 0.x.x versions are
+ special: the first non-zero component indicates potentially breaking changes,
+ meaning the caret operator matches any version with the same first non-zero
+ component starting at the specified version.
+* `^0.0.2` := `=0.0.2` "Only the version 0.0.2 is considered compatible"
+* `~1.2` := `>=1.2.0-0 <1.3.0-0` "Any version starting with 1.2"
+* `^1.2` := `>=1.2.0-0 <2.0.0-0` "Any version compatible with 1.2"
+* `1.2.x` := `>=1.2.0-0 <1.3.0-0` "Any version starting with 1.2"
+* `~1` := `>=1.0.0-0 <2.0.0-0` "Any version starting with 1"
+* `^1` := `>=1.0.0-0 <2.0.0-0` "Any version compatible with 1"
+* `1.x` := `>=1.0.0-0 <2.0.0-0` "Any version starting with 1"
+
Ranges can be joined with either a space (which implies "and") or a
`||` (which implies "or").
## Functions
+All methods and classes take a final `loose` boolean argument that, if
+true, will be more forgiving about not-quite-valid semver strings.
+The resulting output will always be 100% strict, of course.
+
+Strict-mode Comparators and Ranges will be strict about the SemVer
+strings that they parse.
+
* valid(v): Return the parsed version, or null if it's not valid.
* inc(v, release): Return the version incremented by the release type
- (major, minor, patch, or build), or null if it's not valid.
+ (major, minor, patch, or prerelease), or null if it's not valid.
### Comparison
@@ -117,3 +121,22 @@ Ranges can be joined with either a space (which implies "and") or a
range.
* maxSatisfying(versions, range): Return the highest version in the list
that satisfies the range, or null if none of them do.
+* gtr(version, range): Return true if version is greater than all the
+ versions possible in the range.
+* ltr(version, range): Return true if version is less than all the
+ versions possible in the range.
+* outside(version, range, hilo): Return true if the version is outside
+ the bounds of the range in either the high or low direction. The
+ `hilo` argument must be either the string `'>'` or `'<'`. (This is
+ the function called by `gtr` and `ltr`.)
+
+Note that, since ranges may be non-contiguous, a version might not be
+greater than a range, less than a range, *or* satisfy a range! For
+example, the range `1.2 <1.2.9 || >2.0.0` would have a hole from `1.2.9`
+until `2.0.0`, so the version `1.2.10` would not be greater than the
+range (because 2.0.1 satisfies, which is higher), nor less than the
+range (since 1.2.8 satisfies, which is lower), and it also does not
+satisfy the range.
+
+If you want to know if a version satisfies or does not satisfy a
+range, use the `satisfies(version, range)` function.
diff --git a/deps/npm/node_modules/semver/bin/semver b/deps/npm/node_modules/semver/bin/semver
index d4e637e69..88b4c7d31 100755
--- a/deps/npm/node_modules/semver/bin/semver
+++ b/deps/npm/node_modules/semver/bin/semver
@@ -9,18 +9,43 @@ var argv = process.argv.slice(2)
, gt = []
, lt = []
, eq = []
+ , inc = null
+ , version = require("../package.json").version
+ , loose = false
, semver = require("../semver")
+ , reverse = false
main()
function main () {
if (!argv.length) return help()
while (argv.length) {
- var a
- switch (a = argv.shift()) {
+ var a = argv.shift()
+ var i = a.indexOf('=')
+ if (i !== -1) {
+ a = a.slice(0, i)
+ argv.unshift(a.slice(i + 1))
+ }
+ switch (a) {
+ case "-rv": case "-rev": case "--rev": case "--reverse":
+ reverse = true
+ break
+ case "-l": case "--loose":
+ loose = true
+ break
case "-v": case "--version":
versions.push(argv.shift())
break
+ case "-i": case "--inc": case "--increment":
+ switch (argv[0]) {
+ case "major": case "minor": case "patch": case "prerelease":
+ inc = argv.shift()
+ break
+ default:
+ inc = "patch"
+ break
+ }
+ break
case "-r": case "--range":
range.push(argv.shift())
break
@@ -32,41 +57,68 @@ function main () {
}
}
- versions = versions.filter(semver.valid)
+ versions = versions.filter(function (v) {
+ return semver.valid(v, loose)
+ })
if (!versions.length) return fail()
+ if (inc && (versions.length !== 1 || range.length))
+ return failInc()
+
for (var i = 0, l = range.length; i < l ; i ++) {
versions = versions.filter(function (v) {
- return semver.satisfies(v, range[i])
+ return semver.satisfies(v, range[i], loose)
})
if (!versions.length) return fail()
}
return success(versions)
}
+function failInc () {
+ console.error("--inc can only be used on a single version with no range")
+ fail()
+}
+
function fail () { process.exit(1) }
function success () {
- versions.sort(semver.compare)
- .map(semver.clean)
- .forEach(function (v,i,_) { console.log(v) })
+ var compare = reverse ? "rcompare" : "compare"
+ versions.sort(function (a, b) {
+ return semver[compare](a, b, loose)
+ }).map(function (v) {
+ return semver.clean(v, loose)
+ }).map(function (v) {
+ return inc ? semver.inc(v, inc, loose) : v
+ }).forEach(function (v,i,_) { console.log(v) })
}
function help () {
- console.log(["Usage: semver -v <version> [-r <range>]"
- ,"Test if version(s) satisfy the supplied range(s),"
- ,"and sort them."
+ console.log(["SemVer " + version
,""
- ,"Multiple versions or ranges may be supplied."
+ ,"A JavaScript implementation of the http://semver.org/ specification"
+ ,"Copyright Isaac Z. Schlueter"
+ ,""
+ ,"Usage: semver [options] <version> [<version> [...]]"
+ ,"Prints valid versions sorted by SemVer precedence"
+ ,""
+ ,"Options:"
+ ,"-r --range <range>"
+ ," Print versions that match the specified range."
+ ,""
+ ,"-i --increment [<level>]"
+ ," Increment a version by the specified level. Level can"
+ ," be one of: major, minor, patch, or prerelease"
+ ," Default level is 'patch'."
+ ," Only one version may be specified."
+ ,""
+ ,"-l --loose"
+ ," Interpret versions and ranges loosely"
,""
,"Program exits successfully if any valid version satisfies"
,"all supplied ranges, and prints all satisfying versions."
,""
- ,"If no versions are valid, or ranges are not satisfied,"
- ,"then exits failure."
+ ,"If no satisfying versions are found, then exits failure."
,""
,"Versions are printed in ascending order, so supplying"
,"multiple versions to the utility will just sort them."
].join("\n"))
}
-
-
diff --git a/deps/npm/node_modules/semver/foot.js b/deps/npm/node_modules/semver/foot.js
new file mode 100644
index 000000000..8f83c20f8
--- /dev/null
+++ b/deps/npm/node_modules/semver/foot.js
@@ -0,0 +1,6 @@
+
+})(
+ typeof exports === 'object' ? exports :
+ typeof define === 'function' && define.amd ? {} :
+ semver = {}
+);
diff --git a/deps/npm/node_modules/semver/head.js b/deps/npm/node_modules/semver/head.js
new file mode 100644
index 000000000..653686517
--- /dev/null
+++ b/deps/npm/node_modules/semver/head.js
@@ -0,0 +1,2 @@
+;(function(exports) {
+
diff --git a/deps/npm/node_modules/semver/package.json b/deps/npm/node_modules/semver/package.json
index abbfb210b..023f01bc8 100644
--- a/deps/npm/node_modules/semver/package.json
+++ b/deps/npm/node_modules/semver/package.json
@@ -1,18 +1,19 @@
{
"name": "semver",
- "version": "1.1.4",
+ "version": "2.2.1",
"description": "The semantic version parser used by npm.",
"main": "semver.js",
+ "browser": "semver.browser.js",
+ "min": "semver.min.js",
"scripts": {
- "test": "tap test.js"
+ "test": "tap test/*.js",
+ "prepublish": "make"
},
"devDependencies": {
- "tap": "0.x >=0.0.4"
- },
- "license": {
- "type": "MIT",
- "url": "https://github.com/isaacs/semver/raw/master/LICENSE"
+ "tap": "0.x >=0.0.4",
+ "uglify-js": "~2.3.6"
},
+ "license": "BSD",
"repository": {
"type": "git",
"url": "git://github.com/isaacs/node-semver.git"
@@ -20,8 +21,12 @@
"bin": {
"semver": "./bin/semver"
},
- "readme": "semver(1) -- The semantic versioner for npm\n===========================================\n\n## Usage\n\n $ npm install semver\n\n semver.valid('1.2.3') // '1.2.3'\n semver.valid('a.b.c') // null\n semver.clean(' =v1.2.3 ') // '1.2.3'\n semver.satisfies('1.2.3', '1.x || >=2.5.0 || 5.0.0 - 7.2.3') // true\n semver.gt('1.2.3', '9.8.7') // false\n semver.lt('1.2.3', '9.8.7') // true\n\nAs a command-line utility:\n\n $ semver -h\n\n Usage: semver -v <version> [-r <range>]\n Test if version(s) satisfy the supplied range(s),\n and sort them.\n\n Multiple versions or ranges may be supplied.\n\n Program exits successfully if any valid version satisfies\n all supplied ranges, and prints all satisfying versions.\n\n If no versions are valid, or ranges are not satisfied,\n then exits failure.\n\n Versions are printed in ascending order, so supplying\n multiple versions to the utility will just sort them.\n\n## Versions\n\nA version is the following things, in this order:\n\n* a number (Major)\n* a period\n* a number (minor)\n* a period\n* a number (patch)\n* OPTIONAL: a hyphen, followed by a number (build)\n* OPTIONAL: a collection of pretty much any non-whitespace characters\n (tag)\n\nA leading `\"=\"` or `\"v\"` character is stripped off and ignored.\n\n## Comparisons\n\nThe ordering of versions is done using the following algorithm, given\ntwo versions and asked to find the greater of the two:\n\n* If the majors are numerically different, then take the one\n with a bigger major number. `2.3.4 > 1.3.4`\n* If the minors are numerically different, then take the one\n with the bigger minor number. `2.3.4 > 2.2.4`\n* If the patches are numerically different, then take the one with the\n bigger patch number. `2.3.4 > 2.3.3`\n* If only one of them has a build number, then take the one with the\n build number. `2.3.4-0 > 2.3.4`\n* If they both have build numbers, and the build numbers are numerically\n different, then take the one with the bigger build number.\n `2.3.4-10 > 2.3.4-9`\n* If only one of them has a tag, then take the one without the tag.\n `2.3.4 > 2.3.4-beta`\n* If they both have tags, then take the one with the lexicographically\n larger tag. `2.3.4-beta > 2.3.4-alpha`\n* At this point, they're equal.\n\n## Ranges\n\nThe following range styles are supported:\n\n* `>1.2.3` Greater than a specific version.\n* `<1.2.3` Less than\n* `1.2.3 - 2.3.4` := `>=1.2.3 <=2.3.4`\n* `~1.2.3` := `>=1.2.3 <1.3.0`\n* `~1.2` := `>=1.2.0 <1.3.0`\n* `~1` := `>=1.0.0 <2.0.0`\n* `1.2.x` := `>=1.2.0 <1.3.0`\n* `1.x` := `>=1.0.0 <2.0.0`\n\nRanges can be joined with either a space (which implies \"and\") or a\n`||` (which implies \"or\").\n\n## Functions\n\n* valid(v): Return the parsed version, or null if it's not valid.\n* inc(v, release): Return the version incremented by the release type\n (major, minor, patch, or build), or null if it's not valid.\n\n### Comparison\n\n* gt(v1, v2): `v1 > v2`\n* gte(v1, v2): `v1 >= v2`\n* lt(v1, v2): `v1 < v2`\n* lte(v1, v2): `v1 <= v2`\n* eq(v1, v2): `v1 == v2` This is true if they're logically equivalent,\n even if they're not the exact same string. You already know how to\n compare strings.\n* neq(v1, v2): `v1 != v2` The opposite of eq.\n* cmp(v1, comparator, v2): Pass in a comparison string, and it'll call\n the corresponding function above. `\"===\"` and `\"!==\"` do simple\n string comparison, but are included for completeness. Throws if an\n invalid comparison string is provided.\n* compare(v1, v2): Return 0 if v1 == v2, or 1 if v1 is greater, or -1 if\n v2 is greater. Sorts in ascending order if passed to Array.sort().\n* rcompare(v1, v2): The reverse of compare. Sorts an array of versions\n in descending order when passed to Array.sort().\n\n\n### Ranges\n\n* validRange(range): Return the valid range or null if it's not valid\n* satisfies(version, range): Return true if the version satisfies the\n range.\n* maxSatisfying(versions, range): Return the highest version in the list\n that satisfies the range, or null if none of them do.\n",
+ "readme": "semver(1) -- The semantic versioner for npm\n===========================================\n\n## Usage\n\n $ npm install semver\n\n semver.valid('1.2.3') // '1.2.3'\n semver.valid('a.b.c') // null\n semver.clean(' =v1.2.3 ') // '1.2.3'\n semver.satisfies('1.2.3', '1.x || >=2.5.0 || 5.0.0 - 7.2.3') // true\n semver.gt('1.2.3', '9.8.7') // false\n semver.lt('1.2.3', '9.8.7') // true\n\nAs a command-line utility:\n\n $ semver -h\n\n Usage: semver <version> [<version> [...]] [-r <range> | -i <inc> | -d <dec>]\n Test if version(s) satisfy the supplied range(s), and sort them.\n\n Multiple versions or ranges may be supplied, unless increment\n or decrement options are specified. In that case, only a single\n version may be used, and it is incremented by the specified level\n\n Program exits successfully if any valid version satisfies\n all supplied ranges, and prints all satisfying versions.\n\n If no versions are valid, or ranges are not satisfied,\n then exits failure.\n\n Versions are printed in ascending order, so supplying\n multiple versions to the utility will just sort them.\n\n## Versions\n\nA \"version\" is described by the v2.0.0 specification found at\n<http://semver.org/>.\n\nA leading `\"=\"` or `\"v\"` character is stripped off and ignored.\n\n## Ranges\n\nThe following range styles are supported:\n\n* `1.2.3` A specific version. When nothing else will do. Note that\n build metadata is still ignored, so `1.2.3+build2012` will satisfy\n this range.\n* `>1.2.3` Greater than a specific version.\n* `<1.2.3` Less than a specific version. If there is no prerelease\n tag on the version range, then no prerelease version will be allowed\n either, even though these are technically \"less than\".\n* `>=1.2.3` Greater than or equal to. Note that prerelease versions\n are NOT equal to their \"normal\" equivalents, so `1.2.3-beta` will\n not satisfy this range, but `2.3.0-beta` will.\n* `<=1.2.3` Less than or equal to. In this case, prerelease versions\n ARE allowed, so `1.2.3-beta` would satisfy.\n* `1.2.3 - 2.3.4` := `>=1.2.3 <=2.3.4`\n* `~1.2.3` := `>=1.2.3-0 <1.3.0-0` \"Reasonably close to 1.2.3\". When\n using tilde operators, prerelease versions are supported as well,\n but a prerelease of the next significant digit will NOT be\n satisfactory, so `1.3.0-beta` will not satisfy `~1.2.3`.\n* `^1.2.3` := `>=1.2.3-0 <2.0.0-0` \"Compatible with 1.2.3\". When\n using caret operators, anything from the specified version (including\n prerelease) will be supported up to, but not including, the next\n major version (or its prereleases). `1.5.1` will satisfy `^1.2.3`,\n while `1.2.2` and `2.0.0-beta` will not.\n* `^0.1.3` := `>=0.1.3-0 <0.2.0-0` \"Compatible with 0.1.3\". 0.x.x versions are\n special: the first non-zero component indicates potentially breaking changes,\n meaning the caret operator matches any version with the same first non-zero\n component starting at the specified version.\n* `^0.0.2` := `=0.0.2` \"Only the version 0.0.2 is considered compatible\"\n* `~1.2` := `>=1.2.0-0 <1.3.0-0` \"Any version starting with 1.2\"\n* `^1.2` := `>=1.2.0-0 <2.0.0-0` \"Any version compatible with 1.2\"\n* `1.2.x` := `>=1.2.0-0 <1.3.0-0` \"Any version starting with 1.2\"\n* `~1` := `>=1.0.0-0 <2.0.0-0` \"Any version starting with 1\"\n* `^1` := `>=1.0.0-0 <2.0.0-0` \"Any version compatible with 1\"\n* `1.x` := `>=1.0.0-0 <2.0.0-0` \"Any version starting with 1\"\n\n\nRanges can be joined with either a space (which implies \"and\") or a\n`||` (which implies \"or\").\n\n## Functions\n\nAll methods and classes take a final `loose` boolean argument that, if\ntrue, will be more forgiving about not-quite-valid semver strings.\nThe resulting output will always be 100% strict, of course.\n\nStrict-mode Comparators and Ranges will be strict about the SemVer\nstrings that they parse.\n\n* valid(v): Return the parsed version, or null if it's not valid.\n* inc(v, release): Return the version incremented by the release type\n (major, minor, patch, or prerelease), or null if it's not valid.\n\n### Comparison\n\n* gt(v1, v2): `v1 > v2`\n* gte(v1, v2): `v1 >= v2`\n* lt(v1, v2): `v1 < v2`\n* lte(v1, v2): `v1 <= v2`\n* eq(v1, v2): `v1 == v2` This is true if they're logically equivalent,\n even if they're not the exact same string. You already know how to\n compare strings.\n* neq(v1, v2): `v1 != v2` The opposite of eq.\n* cmp(v1, comparator, v2): Pass in a comparison string, and it'll call\n the corresponding function above. `\"===\"` and `\"!==\"` do simple\n string comparison, but are included for completeness. Throws if an\n invalid comparison string is provided.\n* compare(v1, v2): Return 0 if v1 == v2, or 1 if v1 is greater, or -1 if\n v2 is greater. Sorts in ascending order if passed to Array.sort().\n* rcompare(v1, v2): The reverse of compare. Sorts an array of versions\n in descending order when passed to Array.sort().\n\n\n### Ranges\n\n* validRange(range): Return the valid range or null if it's not valid\n* satisfies(version, range): Return true if the version satisfies the\n range.\n* maxSatisfying(versions, range): Return the highest version in the list\n that satisfies the range, or null if none of them do.\n* gtr(version, range): Return true if version is greater than all the\n versions possible in the range.\n* ltr(version, range): Return true if version is less than all the\n versions possible in the range.\n* outside(version, range, hilo): Return true if the version is outside\n the bounds of the range in either the high or low direction. The\n `hilo` argument must be either the string `'>'` or `'<'`. (This is\n the function called by `gtr` and `ltr`.)\n\nNote that, since ranges may be non-contiguous, a version might not be\ngreater than a range, less than a range, *or* satisfy a range! For\nexample, the range `1.2 <1.2.9 || >2.0.0` would have a hole from `1.2.9`\nuntil `2.0.0`, so the version `1.2.10` would not be greater than the\nrange (because 2.0.1 satisfies, which is higher), nor less than the\nrange (since 1.2.8 satisfies, which is lower), and it also does not\nsatisfy the range.\n\nIf you want to know if a version satisfies or does not satisfy a\nrange, use the `satisfies(version, range)` function.\n",
"readmeFilename": "README.md",
- "_id": "semver@1.1.4",
- "_from": "semver@1.1.4"
+ "bugs": {
+ "url": "https://github.com/isaacs/node-semver/issues"
+ },
+ "homepage": "https://github.com/isaacs/node-semver",
+ "_id": "semver@2.2.1",
+ "_from": "semver@latest"
}
diff --git a/deps/npm/node_modules/semver/semver.browser.js b/deps/npm/node_modules/semver/semver.browser.js
new file mode 100644
index 000000000..e05ecc19c
--- /dev/null
+++ b/deps/npm/node_modules/semver/semver.browser.js
@@ -0,0 +1,1007 @@
+;(function(exports) {
+
+// export the class if we are in a Node-like system.
+if (typeof module === 'object' && module.exports === exports)
+ exports = module.exports = SemVer;
+
+// The debug function is excluded entirely from the minified version.
+
+// Note: this is the semver.org version of the spec that it implements
+// Not necessarily the package version of this code.
+exports.SEMVER_SPEC_VERSION = '2.0.0';
+
+// The actual regexps go on exports.re
+var re = exports.re = [];
+var src = exports.src = [];
+var R = 0;
+
+// The following Regular Expressions can be used for tokenizing,
+// validating, and parsing SemVer version strings.
+
+// ## Numeric Identifier
+// A single `0`, or a non-zero digit followed by zero or more digits.
+
+var NUMERICIDENTIFIER = R++;
+src[NUMERICIDENTIFIER] = '0|[1-9]\\d*';
+var NUMERICIDENTIFIERLOOSE = R++;
+src[NUMERICIDENTIFIERLOOSE] = '[0-9]+';
+
+
+// ## Non-numeric Identifier
+// Zero or more digits, followed by a letter or hyphen, and then zero or
+// more letters, digits, or hyphens.
+
+var NONNUMERICIDENTIFIER = R++;
+src[NONNUMERICIDENTIFIER] = '\\d*[a-zA-Z-][a-zA-Z0-9-]*';
+
+
+// ## Main Version
+// Three dot-separated numeric identifiers.
+
+var MAINVERSION = R++;
+src[MAINVERSION] = '(' + src[NUMERICIDENTIFIER] + ')\\.' +
+ '(' + src[NUMERICIDENTIFIER] + ')\\.' +
+ '(' + src[NUMERICIDENTIFIER] + ')';
+
+var MAINVERSIONLOOSE = R++;
+src[MAINVERSIONLOOSE] = '(' + src[NUMERICIDENTIFIERLOOSE] + ')\\.' +
+ '(' + src[NUMERICIDENTIFIERLOOSE] + ')\\.' +
+ '(' + src[NUMERICIDENTIFIERLOOSE] + ')';
+
+// ## Pre-release Version Identifier
+// A numeric identifier, or a non-numeric identifier.
+
+var PRERELEASEIDENTIFIER = R++;
+src[PRERELEASEIDENTIFIER] = '(?:' + src[NUMERICIDENTIFIER] +
+ '|' + src[NONNUMERICIDENTIFIER] + ')';
+
+var PRERELEASEIDENTIFIERLOOSE = R++;
+src[PRERELEASEIDENTIFIERLOOSE] = '(?:' + src[NUMERICIDENTIFIERLOOSE] +
+ '|' + src[NONNUMERICIDENTIFIER] + ')';
+
+
+// ## Pre-release Version
+// Hyphen, followed by one or more dot-separated pre-release version
+// identifiers.
+
+var PRERELEASE = R++;
+src[PRERELEASE] = '(?:-(' + src[PRERELEASEIDENTIFIER] +
+ '(?:\\.' + src[PRERELEASEIDENTIFIER] + ')*))';
+
+var PRERELEASELOOSE = R++;
+src[PRERELEASELOOSE] = '(?:-?(' + src[PRERELEASEIDENTIFIERLOOSE] +
+ '(?:\\.' + src[PRERELEASEIDENTIFIERLOOSE] + ')*))';
+
+// ## Build Metadata Identifier
+// Any combination of digits, letters, or hyphens.
+
+var BUILDIDENTIFIER = R++;
+src[BUILDIDENTIFIER] = '[0-9A-Za-z-]+';
+
+// ## Build Metadata
+// Plus sign, followed by one or more period-separated build metadata
+// identifiers.
+
+var BUILD = R++;
+src[BUILD] = '(?:\\+(' + src[BUILDIDENTIFIER] +
+ '(?:\\.' + src[BUILDIDENTIFIER] + ')*))';
+
+
+// ## Full Version String
+// A main version, followed optionally by a pre-release version and
+// build metadata.
+
+// Note that the only major, minor, patch, and pre-release sections of
+// the version string are capturing groups. The build metadata is not a
+// capturing group, because it should not ever be used in version
+// comparison.
+
+var FULL = R++;
+var FULLPLAIN = 'v?' + src[MAINVERSION] +
+ src[PRERELEASE] + '?' +
+ src[BUILD] + '?';
+
+src[FULL] = '^' + FULLPLAIN + '$';
+
+// like full, but allows v1.2.3 and =1.2.3, which people do sometimes.
+// also, 1.0.0alpha1 (prerelease without the hyphen) which is pretty
+// common in the npm registry.
+var LOOSEPLAIN = '[v=\\s]*' + src[MAINVERSIONLOOSE] +
+ src[PRERELEASELOOSE] + '?' +
+ src[BUILD] + '?';
+
+var LOOSE = R++;
+src[LOOSE] = '^' + LOOSEPLAIN + '$';
+
+var GTLT = R++;
+src[GTLT] = '((?:<|>)?=?)';
+
+// Something like "2.*" or "1.2.x".
+// Note that "x.x" is a valid xRange identifer, meaning "any version"
+// Only the first item is strictly required.
+var XRANGEIDENTIFIERLOOSE = R++;
+src[XRANGEIDENTIFIERLOOSE] = src[NUMERICIDENTIFIERLOOSE] + '|x|X|\\*';
+var XRANGEIDENTIFIER = R++;
+src[XRANGEIDENTIFIER] = src[NUMERICIDENTIFIER] + '|x|X|\\*';
+
+var XRANGEPLAIN = R++;
+src[XRANGEPLAIN] = '[v=\\s]*(' + src[XRANGEIDENTIFIER] + ')' +
+ '(?:\\.(' + src[XRANGEIDENTIFIER] + ')' +
+ '(?:\\.(' + src[XRANGEIDENTIFIER] + ')' +
+ '(?:(' + src[PRERELEASE] + ')' +
+ ')?)?)?';
+
+var XRANGEPLAINLOOSE = R++;
+src[XRANGEPLAINLOOSE] = '[v=\\s]*(' + src[XRANGEIDENTIFIERLOOSE] + ')' +
+ '(?:\\.(' + src[XRANGEIDENTIFIERLOOSE] + ')' +
+ '(?:\\.(' + src[XRANGEIDENTIFIERLOOSE] + ')' +
+ '(?:(' + src[PRERELEASELOOSE] + ')' +
+ ')?)?)?';
+
+// >=2.x, for example, means >=2.0.0-0
+// <1.x would be the same as "<1.0.0-0", though.
+var XRANGE = R++;
+src[XRANGE] = '^' + src[GTLT] + '\\s*' + src[XRANGEPLAIN] + '$';
+var XRANGELOOSE = R++;
+src[XRANGELOOSE] = '^' + src[GTLT] + '\\s*' + src[XRANGEPLAINLOOSE] + '$';
+
+// Tilde ranges.
+// Meaning is "reasonably at or greater than"
+var LONETILDE = R++;
+src[LONETILDE] = '(?:~>?)';
+
+var TILDETRIM = R++;
+src[TILDETRIM] = '(\\s*)' + src[LONETILDE] + '\\s+';
+re[TILDETRIM] = new RegExp(src[TILDETRIM], 'g');
+var tildeTrimReplace = '$1~';
+
+var TILDE = R++;
+src[TILDE] = '^' + src[LONETILDE] + src[XRANGEPLAIN] + '$';
+var TILDELOOSE = R++;
+src[TILDELOOSE] = '^' + src[LONETILDE] + src[XRANGEPLAINLOOSE] + '$';
+
+// Caret ranges.
+// Meaning is "at least and backwards compatible with"
+var LONECARET = R++;
+src[LONECARET] = '(?:\\^)';
+
+var CARETTRIM = R++;
+src[CARETTRIM] = '(\\s*)' + src[LONECARET] + '\\s+';
+re[CARETTRIM] = new RegExp(src[CARETTRIM], 'g');
+var caretTrimReplace = '$1^';
+
+var CARET = R++;
+src[CARET] = '^' + src[LONECARET] + src[XRANGEPLAIN] + '$';
+var CARETLOOSE = R++;
+src[CARETLOOSE] = '^' + src[LONECARET] + src[XRANGEPLAINLOOSE] + '$';
+
+// A simple gt/lt/eq thing, or just "" to indicate "any version"
+var COMPARATORLOOSE = R++;
+src[COMPARATORLOOSE] = '^' + src[GTLT] + '\\s*(' + LOOSEPLAIN + ')$|^$';
+var COMPARATOR = R++;
+src[COMPARATOR] = '^' + src[GTLT] + '\\s*(' + FULLPLAIN + ')$|^$';
+
+
+// An expression to strip any whitespace between the gtlt and the thing
+// it modifies, so that `> 1.2.3` ==> `>1.2.3`
+var COMPARATORTRIM = R++;
+src[COMPARATORTRIM] = '(\\s*)' + src[GTLT] +
+ '\\s*(' + LOOSEPLAIN + '|' + src[XRANGEPLAIN] + ')';
+
+// this one has to use the /g flag
+re[COMPARATORTRIM] = new RegExp(src[COMPARATORTRIM], 'g');
+var comparatorTrimReplace = '$1$2$3';
+
+
+// Something like `1.2.3 - 1.2.4`
+// Note that these all use the loose form, because they'll be
+// checked against either the strict or loose comparator form
+// later.
+var HYPHENRANGE = R++;
+src[HYPHENRANGE] = '^\\s*(' + src[XRANGEPLAIN] + ')' +
+ '\\s+-\\s+' +
+ '(' + src[XRANGEPLAIN] + ')' +
+ '\\s*$';
+
+var HYPHENRANGELOOSE = R++;
+src[HYPHENRANGELOOSE] = '^\\s*(' + src[XRANGEPLAINLOOSE] + ')' +
+ '\\s+-\\s+' +
+ '(' + src[XRANGEPLAINLOOSE] + ')' +
+ '\\s*$';
+
+// Star ranges basically just allow anything at all.
+var STAR = R++;
+src[STAR] = '(<|>)?=?\\s*\\*';
+
+// Compile to actual regexp objects.
+// All are flag-free, unless they were created above with a flag.
+for (var i = 0; i < R; i++) {
+ ;
+ if (!re[i])
+ re[i] = new RegExp(src[i]);
+}
+
+exports.parse = parse;
+function parse(version, loose) {
+ var r = loose ? re[LOOSE] : re[FULL];
+ return (r.test(version)) ? new SemVer(version, loose) : null;
+}
+
+exports.valid = valid;
+function valid(version, loose) {
+ var v = parse(version, loose);
+ return v ? v.version : null;
+}
+
+
+exports.clean = clean;
+function clean(version, loose) {
+ var s = parse(version, loose);
+ return s ? s.version : null;
+}
+
+exports.SemVer = SemVer;
+
+function SemVer(version, loose) {
+ if (version instanceof SemVer) {
+ if (version.loose === loose)
+ return version;
+ else
+ version = version.version;
+ }
+
+ if (!(this instanceof SemVer))
+ return new SemVer(version, loose);
+
+ ;
+ this.loose = loose;
+ var m = version.trim().match(loose ? re[LOOSE] : re[FULL]);
+
+ if (!m)
+ throw new TypeError('Invalid Version: ' + version);
+
+ this.raw = version;
+
+ // these are actually numbers
+ this.major = +m[1];
+ this.minor = +m[2];
+ this.patch = +m[3];
+
+ // numberify any prerelease numeric ids
+ if (!m[4])
+ this.prerelease = [];
+ else
+ this.prerelease = m[4].split('.').map(function(id) {
+ return (/^[0-9]+$/.test(id)) ? +id : id;
+ });
+
+ this.build = m[5] ? m[5].split('.') : [];
+ this.format();
+}
+
+SemVer.prototype.format = function() {
+ this.version = this.major + '.' + this.minor + '.' + this.patch;
+ if (this.prerelease.length)
+ this.version += '-' + this.prerelease.join('.');
+ return this.version;
+};
+
+SemVer.prototype.inspect = function() {
+ return '<SemVer "' + this + '">';
+};
+
+SemVer.prototype.toString = function() {
+ return this.version;
+};
+
+SemVer.prototype.compare = function(other) {
+ ;
+ if (!(other instanceof SemVer))
+ other = new SemVer(other, this.loose);
+
+ return this.compareMain(other) || this.comparePre(other);
+};
+
+SemVer.prototype.compareMain = function(other) {
+ if (!(other instanceof SemVer))
+ other = new SemVer(other, this.loose);
+
+ return compareIdentifiers(this.major, other.major) ||
+ compareIdentifiers(this.minor, other.minor) ||
+ compareIdentifiers(this.patch, other.patch);
+};
+
+SemVer.prototype.comparePre = function(other) {
+ if (!(other instanceof SemVer))
+ other = new SemVer(other, this.loose);
+
+ // NOT having a prerelease is > having one
+ if (this.prerelease.length && !other.prerelease.length)
+ return -1;
+ else if (!this.prerelease.length && other.prerelease.length)
+ return 1;
+ else if (!this.prerelease.lenth && !other.prerelease.length)
+ return 0;
+
+ var i = 0;
+ do {
+ var a = this.prerelease[i];
+ var b = other.prerelease[i];
+ ;
+ if (a === undefined && b === undefined)
+ return 0;
+ else if (b === undefined)
+ return 1;
+ else if (a === undefined)
+ return -1;
+ else if (a === b)
+ continue;
+ else
+ return compareIdentifiers(a, b);
+ } while (++i);
+};
+
+SemVer.prototype.inc = function(release) {
+ switch (release) {
+ case 'major':
+ this.major++;
+ this.minor = -1;
+ case 'minor':
+ this.minor++;
+ this.patch = -1;
+ case 'patch':
+ this.patch++;
+ this.prerelease = [];
+ break;
+ case 'prerelease':
+ if (this.prerelease.length === 0)
+ this.prerelease = [0];
+ else {
+ var i = this.prerelease.length;
+ while (--i >= 0) {
+ if (typeof this.prerelease[i] === 'number') {
+ this.prerelease[i]++;
+ i = -2;
+ }
+ }
+ if (i === -1) // didn't increment anything
+ this.prerelease.push(0);
+ }
+ break;
+
+ default:
+ throw new Error('invalid increment argument: ' + release);
+ }
+ this.format();
+ return this;
+};
+
+exports.inc = inc;
+function inc(version, release, loose) {
+ try {
+ return new SemVer(version, loose).inc(release).version;
+ } catch (er) {
+ return null;
+ }
+}
+
+exports.compareIdentifiers = compareIdentifiers;
+
+var numeric = /^[0-9]+$/;
+function compareIdentifiers(a, b) {
+ var anum = numeric.test(a);
+ var bnum = numeric.test(b);
+
+ if (anum && bnum) {
+ a = +a;
+ b = +b;
+ }
+
+ return (anum && !bnum) ? -1 :
+ (bnum && !anum) ? 1 :
+ a < b ? -1 :
+ a > b ? 1 :
+ 0;
+}
+
+exports.rcompareIdentifiers = rcompareIdentifiers;
+function rcompareIdentifiers(a, b) {
+ return compareIdentifiers(b, a);
+}
+
+exports.compare = compare;
+function compare(a, b, loose) {
+ return new SemVer(a, loose).compare(b);
+}
+
+exports.compareLoose = compareLoose;
+function compareLoose(a, b) {
+ return compare(a, b, true);
+}
+
+exports.rcompare = rcompare;
+function rcompare(a, b, loose) {
+ return compare(b, a, loose);
+}
+
+exports.sort = sort;
+function sort(list, loose) {
+ return list.sort(function(a, b) {
+ return exports.compare(a, b, loose);
+ });
+}
+
+exports.rsort = rsort;
+function rsort(list, loose) {
+ return list.sort(function(a, b) {
+ return exports.rcompare(a, b, loose);
+ });
+}
+
+exports.gt = gt;
+function gt(a, b, loose) {
+ return compare(a, b, loose) > 0;
+}
+
+exports.lt = lt;
+function lt(a, b, loose) {
+ return compare(a, b, loose) < 0;
+}
+
+exports.eq = eq;
+function eq(a, b, loose) {
+ return compare(a, b, loose) === 0;
+}
+
+exports.neq = neq;
+function neq(a, b, loose) {
+ return compare(a, b, loose) !== 0;
+}
+
+exports.gte = gte;
+function gte(a, b, loose) {
+ return compare(a, b, loose) >= 0;
+}
+
+exports.lte = lte;
+function lte(a, b, loose) {
+ return compare(a, b, loose) <= 0;
+}
+
+exports.cmp = cmp;
+function cmp(a, op, b, loose) {
+ var ret;
+ switch (op) {
+ case '===': ret = a === b; break;
+ case '!==': ret = a !== b; break;
+ case '': case '=': case '==': ret = eq(a, b, loose); break;
+ case '!=': ret = neq(a, b, loose); break;
+ case '>': ret = gt(a, b, loose); break;
+ case '>=': ret = gte(a, b, loose); break;
+ case '<': ret = lt(a, b, loose); break;
+ case '<=': ret = lte(a, b, loose); break;
+ default: throw new TypeError('Invalid operator: ' + op);
+ }
+ return ret;
+}
+
+exports.Comparator = Comparator;
+function Comparator(comp, loose) {
+ if (comp instanceof Comparator) {
+ if (comp.loose === loose)
+ return comp;
+ else
+ comp = comp.value;
+ }
+
+ if (!(this instanceof Comparator))
+ return new Comparator(comp, loose);
+
+ ;
+ this.loose = loose;
+ this.parse(comp);
+
+ if (this.semver === ANY)
+ this.value = '';
+ else
+ this.value = this.operator + this.semver.version;
+}
+
+var ANY = {};
+Comparator.prototype.parse = function(comp) {
+ var r = this.loose ? re[COMPARATORLOOSE] : re[COMPARATOR];
+ var m = comp.match(r);
+
+ if (!m)
+ throw new TypeError('Invalid comparator: ' + comp);
+
+ this.operator = m[1];
+ // if it literally is just '>' or '' then allow anything.
+ if (!m[2])
+ this.semver = ANY;
+ else {
+ this.semver = new SemVer(m[2], this.loose);
+
+ // <1.2.3-rc DOES allow 1.2.3-beta (has prerelease)
+ // >=1.2.3 DOES NOT allow 1.2.3-beta
+ // <=1.2.3 DOES allow 1.2.3-beta
+ // However, <1.2.3 does NOT allow 1.2.3-beta,
+ // even though `1.2.3-beta < 1.2.3`
+ // The assumption is that the 1.2.3 version has something you
+ // *don't* want, so we push the prerelease down to the minimum.
+ if (this.operator === '<' && !this.semver.prerelease.length) {
+ this.semver.prerelease = ['0'];
+ this.semver.format();
+ }
+ }
+};
+
+Comparator.prototype.inspect = function() {
+ return '<SemVer Comparator "' + this + '">';
+};
+
+Comparator.prototype.toString = function() {
+ return this.value;
+};
+
+Comparator.prototype.test = function(version) {
+ ;
+ return (this.semver === ANY) ? true :
+ cmp(version, this.operator, this.semver, this.loose);
+};
+
+
+exports.Range = Range;
+function Range(range, loose) {
+ if ((range instanceof Range) && range.loose === loose)
+ return range;
+
+ if (!(this instanceof Range))
+ return new Range(range, loose);
+
+ this.loose = loose;
+
+ // First, split based on boolean or ||
+ this.raw = range;
+ this.set = range.split(/\s*\|\|\s*/).map(function(range) {
+ return this.parseRange(range.trim());
+ }, this).filter(function(c) {
+ // throw out any that are not relevant for whatever reason
+ return c.length;
+ });
+
+ if (!this.set.length) {
+ throw new TypeError('Invalid SemVer Range: ' + range);
+ }
+
+ this.format();
+}
+
+Range.prototype.inspect = function() {
+ return '<SemVer Range "' + this.range + '">';
+};
+
+Range.prototype.format = function() {
+ this.range = this.set.map(function(comps) {
+ return comps.join(' ').trim();
+ }).join('||').trim();
+ return this.range;
+};
+
+Range.prototype.toString = function() {
+ return this.range;
+};
+
+Range.prototype.parseRange = function(range) {
+ var loose = this.loose;
+ range = range.trim();
+ ;
+ // `1.2.3 - 1.2.4` => `>=1.2.3 <=1.2.4`
+ var hr = loose ? re[HYPHENRANGELOOSE] : re[HYPHENRANGE];
+ range = range.replace(hr, hyphenReplace);
+ ;
+ // `> 1.2.3 < 1.2.5` => `>1.2.3 <1.2.5`
+ range = range.replace(re[COMPARATORTRIM], comparatorTrimReplace);
+ ;
+
+ // `~ 1.2.3` => `~1.2.3`
+ range = range.replace(re[TILDETRIM], tildeTrimReplace);
+
+ // `^ 1.2.3` => `^1.2.3`
+ range = range.replace(re[CARETTRIM], caretTrimReplace);
+
+ // normalize spaces
+ range = range.split(/\s+/).join(' ');
+
+ // At this point, the range is completely trimmed and
+ // ready to be split into comparators.
+
+ var compRe = loose ? re[COMPARATORLOOSE] : re[COMPARATOR];
+ var set = range.split(' ').map(function(comp) {
+ return parseComparator(comp, loose);
+ }).join(' ').split(/\s+/);
+ if (this.loose) {
+ // in loose mode, throw out any that are not valid comparators
+ set = set.filter(function(comp) {
+ return !!comp.match(compRe);
+ });
+ }
+ set = set.map(function(comp) {
+ return new Comparator(comp, loose);
+ });
+
+ return set;
+};
+
+// Mostly just for testing and legacy API reasons
+exports.toComparators = toComparators;
+function toComparators(range, loose) {
+ return new Range(range, loose).set.map(function(comp) {
+ return comp.map(function(c) {
+ return c.value;
+ }).join(' ').trim().split(' ');
+ });
+}
+
+// comprised of xranges, tildes, stars, and gtlt's at this point.
+// already replaced the hyphen ranges
+// turn into a set of JUST comparators.
+function parseComparator(comp, loose) {
+ ;
+ comp = replaceCarets(comp, loose);
+ ;
+ comp = replaceTildes(comp, loose);
+ ;
+ comp = replaceXRanges(comp, loose);
+ ;
+ comp = replaceStars(comp, loose);
+ ;
+ return comp;
+}
+
+function isX(id) {
+ return !id || id.toLowerCase() === 'x' || id === '*';
+}
+
+// ~, ~> --> * (any, kinda silly)
+// ~2, ~2.x, ~2.x.x, ~>2, ~>2.x ~>2.x.x --> >=2.0.0 <3.0.0
+// ~2.0, ~2.0.x, ~>2.0, ~>2.0.x --> >=2.0.0 <2.1.0
+// ~1.2, ~1.2.x, ~>1.2, ~>1.2.x --> >=1.2.0 <1.3.0
+// ~1.2.3, ~>1.2.3 --> >=1.2.3 <1.3.0
+// ~1.2.0, ~>1.2.0 --> >=1.2.0 <1.3.0
+function replaceTildes(comp, loose) {
+ return comp.trim().split(/\s+/).map(function(comp) {
+ return replaceTilde(comp, loose);
+ }).join(' ');
+}
+
+function replaceTilde(comp, loose) {
+ var r = loose ? re[TILDELOOSE] : re[TILDE];
+ return comp.replace(r, function(_, M, m, p, pr) {
+ ;
+ var ret;
+
+ if (isX(M))
+ ret = '';
+ else if (isX(m))
+ ret = '>=' + M + '.0.0-0 <' + (+M + 1) + '.0.0-0';
+ else if (isX(p))
+ // ~1.2 == >=1.2.0- <1.3.0-
+ ret = '>=' + M + '.' + m + '.0-0 <' + M + '.' + (+m + 1) + '.0-0';
+ else if (pr) {
+ ;
+ if (pr.charAt(0) !== '-')
+ pr = '-' + pr;
+ ret = '>=' + M + '.' + m + '.' + p + pr +
+ ' <' + M + '.' + (+m + 1) + '.0-0';
+ } else
+ // ~1.2.3 == >=1.2.3-0 <1.3.0-0
+ ret = '>=' + M + '.' + m + '.' + p + '-0' +
+ ' <' + M + '.' + (+m + 1) + '.0-0';
+
+ ;
+ return ret;
+ });
+}
+
+// ^ --> * (any, kinda silly)
+// ^2, ^2.x, ^2.x.x --> >=2.0.0 <3.0.0
+// ^2.0, ^2.0.x --> >=2.0.0 <3.0.0
+// ^1.2, ^1.2.x --> >=1.2.0 <2.0.0
+// ^1.2.3 --> >=1.2.3 <2.0.0
+// ^1.2.0 --> >=1.2.0 <2.0.0
+function replaceCarets(comp, loose) {
+ return comp.trim().split(/\s+/).map(function(comp) {
+ return replaceCaret(comp, loose);
+ }).join(' ');
+}
+
+function replaceCaret(comp, loose) {
+ var r = loose ? re[CARETLOOSE] : re[CARET];
+ return comp.replace(r, function(_, M, m, p, pr) {
+ ;
+ var ret;
+
+ if (isX(M))
+ ret = '';
+ else if (isX(m))
+ ret = '>=' + M + '.0.0-0 <' + (+M + 1) + '.0.0-0';
+ else if (isX(p)) {
+ if (M === '0')
+ ret = '>=' + M + '.' + m + '.0-0 <' + M + '.' + (+m + 1) + '.0-0';
+ else
+ ret = '>=' + M + '.' + m + '.0-0 <' + (+M + 1) + '.0.0-0';
+ } else if (pr) {
+ ;
+ if (pr.charAt(0) !== '-')
+ pr = '-' + pr;
+ if (M === '0') {
+ if (m === '0')
+ ret = '=' + M + '.' + m + '.' + p + pr;
+ else
+ ret = '>=' + M + '.' + m + '.' + p + pr +
+ ' <' + M + '.' + (+m + 1) + '.0-0';
+ } else
+ ret = '>=' + M + '.' + m + '.' + p + pr +
+ ' <' + (+M + 1) + '.0.0-0';
+ } else {
+ if (M === '0') {
+ if (m === '0')
+ ret = '=' + M + '.' + m + '.' + p;
+ else
+ ret = '>=' + M + '.' + m + '.' + p + '-0' +
+ ' <' + M + '.' + (+m + 1) + '.0-0';
+ } else
+ ret = '>=' + M + '.' + m + '.' + p + '-0' +
+ ' <' + (+M + 1) + '.0.0-0';
+ }
+
+ ;
+ return ret;
+ });
+}
+
+function replaceXRanges(comp, loose) {
+ ;
+ return comp.split(/\s+/).map(function(comp) {
+ return replaceXRange(comp, loose);
+ }).join(' ');
+}
+
+function replaceXRange(comp, loose) {
+ comp = comp.trim();
+ var r = loose ? re[XRANGELOOSE] : re[XRANGE];
+ return comp.replace(r, function(ret, gtlt, M, m, p, pr) {
+ ;
+ var xM = isX(M);
+ var xm = xM || isX(m);
+ var xp = xm || isX(p);
+ var anyX = xp;
+
+ if (gtlt === '=' && anyX)
+ gtlt = '';
+
+ if (gtlt && anyX) {
+ // replace X with 0, and then append the -0 min-prerelease
+ if (xM)
+ M = 0;
+ if (xm)
+ m = 0;
+ if (xp)
+ p = 0;
+
+ if (gtlt === '>') {
+ // >1 => >=2.0.0-0
+ // >1.2 => >=1.3.0-0
+ // >1.2.3 => >= 1.2.4-0
+ gtlt = '>=';
+ if (xM) {
+ // no change
+ } else if (xm) {
+ M = +M + 1;
+ m = 0;
+ p = 0;
+ } else if (xp) {
+ m = +m + 1;
+ p = 0;
+ }
+ }
+
+
+ ret = gtlt + M + '.' + m + '.' + p + '-0';
+ } else if (xM) {
+ // allow any
+ ret = '*';
+ } else if (xm) {
+ // append '-0' onto the version, otherwise
+ // '1.x.x' matches '2.0.0-beta', since the tag
+ // *lowers* the version value
+ ret = '>=' + M + '.0.0-0 <' + (+M + 1) + '.0.0-0';
+ } else if (xp) {
+ ret = '>=' + M + '.' + m + '.0-0 <' + M + '.' + (+m + 1) + '.0-0';
+ }
+
+ ;
+
+ return ret;
+ });
+}
+
+// Because * is AND-ed with everything else in the comparator,
+// and '' means "any version", just remove the *s entirely.
+function replaceStars(comp, loose) {
+ ;
+ // Looseness is ignored here. star is always as loose as it gets!
+ return comp.trim().replace(re[STAR], '');
+}
+
+// This function is passed to string.replace(re[HYPHENRANGE])
+// M, m, patch, prerelease, build
+// 1.2 - 3.4.5 => >=1.2.0-0 <=3.4.5
+// 1.2.3 - 3.4 => >=1.2.0-0 <3.5.0-0 Any 3.4.x will do
+// 1.2 - 3.4 => >=1.2.0-0 <3.5.0-0
+function hyphenReplace($0,
+ from, fM, fm, fp, fpr, fb,
+ to, tM, tm, tp, tpr, tb) {
+
+ if (isX(fM))
+ from = '';
+ else if (isX(fm))
+ from = '>=' + fM + '.0.0-0';
+ else if (isX(fp))
+ from = '>=' + fM + '.' + fm + '.0-0';
+ else
+ from = '>=' + from;
+
+ if (isX(tM))
+ to = '';
+ else if (isX(tm))
+ to = '<' + (+tM + 1) + '.0.0-0';
+ else if (isX(tp))
+ to = '<' + tM + '.' + (+tm + 1) + '.0-0';
+ else if (tpr)
+ to = '<=' + tM + '.' + tm + '.' + tp + '-' + tpr;
+ else
+ to = '<=' + to;
+
+ return (from + ' ' + to).trim();
+}
+
+
+// if ANY of the sets match ALL of its comparators, then pass
+Range.prototype.test = function(version) {
+ if (!version)
+ return false;
+ for (var i = 0; i < this.set.length; i++) {
+ if (testSet(this.set[i], version))
+ return true;
+ }
+ return false;
+};
+
+function testSet(set, version) {
+ for (var i = 0; i < set.length; i++) {
+ if (!set[i].test(version))
+ return false;
+ }
+ return true;
+}
+
+exports.satisfies = satisfies;
+function satisfies(version, range, loose) {
+ try {
+ range = new Range(range, loose);
+ } catch (er) {
+ return false;
+ }
+ return range.test(version);
+}
+
+exports.maxSatisfying = maxSatisfying;
+function maxSatisfying(versions, range, loose) {
+ return versions.filter(function(version) {
+ return satisfies(version, range, loose);
+ }).sort(function(a, b) {
+ return rcompare(a, b, loose);
+ })[0] || null;
+}
+
+exports.validRange = validRange;
+function validRange(range, loose) {
+ try {
+ // Return '*' instead of '' so that truthiness works.
+ // This will throw if it's invalid anyway
+ return new Range(range, loose).range || '*';
+ } catch (er) {
+ return null;
+ }
+}
+
+// Determine if version is less than all the versions possible in the range
+exports.ltr = ltr;
+function ltr(version, range, loose) {
+ return outside(version, range, '<', loose);
+}
+
+// Determine if version is greater than all the versions possible in the range.
+exports.gtr = gtr;
+function gtr(version, range, loose) {
+ return outside(version, range, '>', loose);
+}
+
+exports.outside = outside;
+function outside(version, range, hilo, loose) {
+ version = new SemVer(version, loose);
+ range = new Range(range, loose);
+
+ var gtfn, ltefn, ltfn, comp, ecomp;
+ switch (hilo) {
+ case '>':
+ gtfn = gt;
+ ltefn = lte;
+ ltfn = lt;
+ comp = '>';
+ ecomp = '>=';
+ break;
+ case '<':
+ gtfn = lt;
+ ltefn = gte;
+ ltfn = gt;
+ comp = '<';
+ ecomp = '<=';
+ break;
+ default:
+ throw new TypeError('Must provide a hilo val of "<" or ">"');
+ }
+
+ // If it satisifes the range it is not outside
+ if (satisfies(version, range, loose)) {
+ return false;
+ }
+
+ // From now on, variable terms are as if we're in "gtr" mode.
+ // but note that everything is flipped for the "ltr" function.
+
+ for (var i = 0; i < range.set.length; ++i) {
+ var comparators = range.set[i];
+
+ var high = null;
+ var low = null;
+
+ comparators.forEach(function(comparator) {
+ high = high || comparator;
+ low = low || comparator;
+ if (gtfn(comparator.semver, high.semver, loose)) {
+ high = comparator;
+ } else if (ltfn(comparator.semver, low.semver, loose)) {
+ low = comparator;
+ }
+ });
+
+ // If the edge version comparator has a operator then our version
+ // isn't outside it
+ if (high.operator === comp || high.operator === ecomp) {
+ return false;
+ }
+
+ // If the lowest version comparator has an operator and our version
+ // is less than it then it isn't higher than the range
+ if ((!low.operator || low.operator === comp) &&
+ ltefn(version, low.semver)) {
+ return false;
+ } else if (low.operator === ecomp && ltfn(version, low.semver)) {
+ return false;
+ }
+ }
+ return true;
+}
+
+// Use the define() function if we're in AMD land
+if (typeof define === 'function' && define.amd)
+ define(exports);
+
+})(
+ typeof exports === 'object' ? exports :
+ typeof define === 'function' && define.amd ? {} :
+ semver = {}
+);
diff --git a/deps/npm/node_modules/semver/semver.browser.js.gz b/deps/npm/node_modules/semver/semver.browser.js.gz
new file mode 100644
index 000000000..b9549f809
--- /dev/null
+++ b/deps/npm/node_modules/semver/semver.browser.js.gz
Binary files differ
diff --git a/deps/npm/node_modules/semver/semver.js b/deps/npm/node_modules/semver/semver.js
index cebfe6fd1..9e9470d86 100644
--- a/deps/npm/node_modules/semver/semver.js
+++ b/deps/npm/node_modules/semver/semver.js
@@ -1,158 +1,676 @@
-;(function (exports) { // nothing in here is node-specific.
-
-// See http://semver.org/
-// This implementation is a *hair* less strict in that it allows
-// v1.2.3 things, and also tags that don't begin with a char.
-
-var semver = "\\s*[v=]*\\s*([0-9]+)" // major
- + "\\.([0-9]+)" // minor
- + "\\.([0-9]+)" // patch
- + "(-[0-9]+-?)?" // build
- + "([a-zA-Z-+][a-zA-Z0-9-\.:]*)?" // tag
- , exprComparator = "^((<|>)?=?)\s*("+semver+")$|^$"
- , xRangePlain = "[v=]*([0-9]+|x|X|\\*)"
- + "(?:\\.([0-9]+|x|X|\\*)"
- + "(?:\\.([0-9]+|x|X|\\*)"
- + "([a-zA-Z-][a-zA-Z0-9-\.:]*)?)?)?"
- , xRange = "((?:<|>)=?)?\\s*" + xRangePlain
- , exprLoneSpermy = "(?:~>?)"
- , exprSpermy = exprLoneSpermy + xRange
- , expressions = exports.expressions =
- { parse : new RegExp("^\\s*"+semver+"\\s*$")
- , parsePackage : new RegExp("^\\s*([^\/]+)[-@](" +semver+")\\s*$")
- , parseRange : new RegExp(
- "^\\s*(" + semver + ")\\s+-\\s+(" + semver + ")\\s*$")
- , validComparator : new RegExp("^"+exprComparator+"$")
- , parseXRange : new RegExp("^"+xRange+"$")
- , parseSpermy : new RegExp("^"+exprSpermy+"$")
- }
+// export the class if we are in a Node-like system.
+if (typeof module === 'object' && module.exports === exports)
+ exports = module.exports = SemVer;
+
+// The debug function is excluded entirely from the minified version.
+/* nomin */ var debug;
+/* nomin */ if (typeof process === 'object' &&
+ /* nomin */ process.env &&
+ /* nomin */ process.env.NODE_DEBUG &&
+ /* nomin */ /\bsemver\b/i.test(process.env.NODE_DEBUG))
+ /* nomin */ debug = function() {
+ /* nomin */ var args = Array.prototype.slice.call(arguments, 0);
+ /* nomin */ args.unshift('SEMVER');
+ /* nomin */ console.log.apply(console, args);
+ /* nomin */ };
+/* nomin */ else
+ /* nomin */ debug = function() {};
+
+// Note: this is the semver.org version of the spec that it implements
+// Not necessarily the package version of this code.
+exports.SEMVER_SPEC_VERSION = '2.0.0';
+
+// The actual regexps go on exports.re
+var re = exports.re = [];
+var src = exports.src = [];
+var R = 0;
+
+// The following Regular Expressions can be used for tokenizing,
+// validating, and parsing SemVer version strings.
+
+// ## Numeric Identifier
+// A single `0`, or a non-zero digit followed by zero or more digits.
+
+var NUMERICIDENTIFIER = R++;
+src[NUMERICIDENTIFIER] = '0|[1-9]\\d*';
+var NUMERICIDENTIFIERLOOSE = R++;
+src[NUMERICIDENTIFIERLOOSE] = '[0-9]+';
+
+
+// ## Non-numeric Identifier
+// Zero or more digits, followed by a letter or hyphen, and then zero or
+// more letters, digits, or hyphens.
+var NONNUMERICIDENTIFIER = R++;
+src[NONNUMERICIDENTIFIER] = '\\d*[a-zA-Z-][a-zA-Z0-9-]*';
+
+
+// ## Main Version
+// Three dot-separated numeric identifiers.
+
+var MAINVERSION = R++;
+src[MAINVERSION] = '(' + src[NUMERICIDENTIFIER] + ')\\.' +
+ '(' + src[NUMERICIDENTIFIER] + ')\\.' +
+ '(' + src[NUMERICIDENTIFIER] + ')';
+
+var MAINVERSIONLOOSE = R++;
+src[MAINVERSIONLOOSE] = '(' + src[NUMERICIDENTIFIERLOOSE] + ')\\.' +
+ '(' + src[NUMERICIDENTIFIERLOOSE] + ')\\.' +
+ '(' + src[NUMERICIDENTIFIERLOOSE] + ')';
+
+// ## Pre-release Version Identifier
+// A numeric identifier, or a non-numeric identifier.
+
+var PRERELEASEIDENTIFIER = R++;
+src[PRERELEASEIDENTIFIER] = '(?:' + src[NUMERICIDENTIFIER] +
+ '|' + src[NONNUMERICIDENTIFIER] + ')';
+
+var PRERELEASEIDENTIFIERLOOSE = R++;
+src[PRERELEASEIDENTIFIERLOOSE] = '(?:' + src[NUMERICIDENTIFIERLOOSE] +
+ '|' + src[NONNUMERICIDENTIFIER] + ')';
+
+
+// ## Pre-release Version
+// Hyphen, followed by one or more dot-separated pre-release version
+// identifiers.
+
+var PRERELEASE = R++;
+src[PRERELEASE] = '(?:-(' + src[PRERELEASEIDENTIFIER] +
+ '(?:\\.' + src[PRERELEASEIDENTIFIER] + ')*))';
+
+var PRERELEASELOOSE = R++;
+src[PRERELEASELOOSE] = '(?:-?(' + src[PRERELEASEIDENTIFIERLOOSE] +
+ '(?:\\.' + src[PRERELEASEIDENTIFIERLOOSE] + ')*))';
+
+// ## Build Metadata Identifier
+// Any combination of digits, letters, or hyphens.
+
+var BUILDIDENTIFIER = R++;
+src[BUILDIDENTIFIER] = '[0-9A-Za-z-]+';
+
+// ## Build Metadata
+// Plus sign, followed by one or more period-separated build metadata
+// identifiers.
+
+var BUILD = R++;
+src[BUILD] = '(?:\\+(' + src[BUILDIDENTIFIER] +
+ '(?:\\.' + src[BUILDIDENTIFIER] + ')*))';
+
+
+// ## Full Version String
+// A main version, followed optionally by a pre-release version and
+// build metadata.
+
+// Note that the only major, minor, patch, and pre-release sections of
+// the version string are capturing groups. The build metadata is not a
+// capturing group, because it should not ever be used in version
+// comparison.
+
+var FULL = R++;
+var FULLPLAIN = 'v?' + src[MAINVERSION] +
+ src[PRERELEASE] + '?' +
+ src[BUILD] + '?';
+
+src[FULL] = '^' + FULLPLAIN + '$';
+
+// like full, but allows v1.2.3 and =1.2.3, which people do sometimes.
+// also, 1.0.0alpha1 (prerelease without the hyphen) which is pretty
+// common in the npm registry.
+var LOOSEPLAIN = '[v=\\s]*' + src[MAINVERSIONLOOSE] +
+ src[PRERELEASELOOSE] + '?' +
+ src[BUILD] + '?';
+
+var LOOSE = R++;
+src[LOOSE] = '^' + LOOSEPLAIN + '$';
+
+var GTLT = R++;
+src[GTLT] = '((?:<|>)?=?)';
+
+// Something like "2.*" or "1.2.x".
+// Note that "x.x" is a valid xRange identifer, meaning "any version"
+// Only the first item is strictly required.
+var XRANGEIDENTIFIERLOOSE = R++;
+src[XRANGEIDENTIFIERLOOSE] = src[NUMERICIDENTIFIERLOOSE] + '|x|X|\\*';
+var XRANGEIDENTIFIER = R++;
+src[XRANGEIDENTIFIER] = src[NUMERICIDENTIFIER] + '|x|X|\\*';
+
+var XRANGEPLAIN = R++;
+src[XRANGEPLAIN] = '[v=\\s]*(' + src[XRANGEIDENTIFIER] + ')' +
+ '(?:\\.(' + src[XRANGEIDENTIFIER] + ')' +
+ '(?:\\.(' + src[XRANGEIDENTIFIER] + ')' +
+ '(?:(' + src[PRERELEASE] + ')' +
+ ')?)?)?';
+
+var XRANGEPLAINLOOSE = R++;
+src[XRANGEPLAINLOOSE] = '[v=\\s]*(' + src[XRANGEIDENTIFIERLOOSE] + ')' +
+ '(?:\\.(' + src[XRANGEIDENTIFIERLOOSE] + ')' +
+ '(?:\\.(' + src[XRANGEIDENTIFIERLOOSE] + ')' +
+ '(?:(' + src[PRERELEASELOOSE] + ')' +
+ ')?)?)?';
+
+// >=2.x, for example, means >=2.0.0-0
+// <1.x would be the same as "<1.0.0-0", though.
+var XRANGE = R++;
+src[XRANGE] = '^' + src[GTLT] + '\\s*' + src[XRANGEPLAIN] + '$';
+var XRANGELOOSE = R++;
+src[XRANGELOOSE] = '^' + src[GTLT] + '\\s*' + src[XRANGEPLAINLOOSE] + '$';
+
+// Tilde ranges.
+// Meaning is "reasonably at or greater than"
+var LONETILDE = R++;
+src[LONETILDE] = '(?:~>?)';
+
+var TILDETRIM = R++;
+src[TILDETRIM] = '(\\s*)' + src[LONETILDE] + '\\s+';
+re[TILDETRIM] = new RegExp(src[TILDETRIM], 'g');
+var tildeTrimReplace = '$1~';
+
+var TILDE = R++;
+src[TILDE] = '^' + src[LONETILDE] + src[XRANGEPLAIN] + '$';
+var TILDELOOSE = R++;
+src[TILDELOOSE] = '^' + src[LONETILDE] + src[XRANGEPLAINLOOSE] + '$';
+
+// Caret ranges.
+// Meaning is "at least and backwards compatible with"
+var LONECARET = R++;
+src[LONECARET] = '(?:\\^)';
+
+var CARETTRIM = R++;
+src[CARETTRIM] = '(\\s*)' + src[LONECARET] + '\\s+';
+re[CARETTRIM] = new RegExp(src[CARETTRIM], 'g');
+var caretTrimReplace = '$1^';
+
+var CARET = R++;
+src[CARET] = '^' + src[LONECARET] + src[XRANGEPLAIN] + '$';
+var CARETLOOSE = R++;
+src[CARETLOOSE] = '^' + src[LONECARET] + src[XRANGEPLAINLOOSE] + '$';
+
+// A simple gt/lt/eq thing, or just "" to indicate "any version"
+var COMPARATORLOOSE = R++;
+src[COMPARATORLOOSE] = '^' + src[GTLT] + '\\s*(' + LOOSEPLAIN + ')$|^$';
+var COMPARATOR = R++;
+src[COMPARATOR] = '^' + src[GTLT] + '\\s*(' + FULLPLAIN + ')$|^$';
+
+
+// An expression to strip any whitespace between the gtlt and the thing
+// it modifies, so that `> 1.2.3` ==> `>1.2.3`
+var COMPARATORTRIM = R++;
+src[COMPARATORTRIM] = '(\\s*)' + src[GTLT] +
+ '\\s*(' + LOOSEPLAIN + '|' + src[XRANGEPLAIN] + ')';
+
+// this one has to use the /g flag
+re[COMPARATORTRIM] = new RegExp(src[COMPARATORTRIM], 'g');
+var comparatorTrimReplace = '$1$2$3';
+
+
+// Something like `1.2.3 - 1.2.4`
+// Note that these all use the loose form, because they'll be
+// checked against either the strict or loose comparator form
+// later.
+var HYPHENRANGE = R++;
+src[HYPHENRANGE] = '^\\s*(' + src[XRANGEPLAIN] + ')' +
+ '\\s+-\\s+' +
+ '(' + src[XRANGEPLAIN] + ')' +
+ '\\s*$';
+
+var HYPHENRANGELOOSE = R++;
+src[HYPHENRANGELOOSE] = '^\\s*(' + src[XRANGEPLAINLOOSE] + ')' +
+ '\\s+-\\s+' +
+ '(' + src[XRANGEPLAINLOOSE] + ')' +
+ '\\s*$';
+
+// Star ranges basically just allow anything at all.
+var STAR = R++;
+src[STAR] = '(<|>)?=?\\s*\\*';
+
+// Compile to actual regexp objects.
+// All are flag-free, unless they were created above with a flag.
+for (var i = 0; i < R; i++) {
+ debug(i, src[i]);
+ if (!re[i])
+ re[i] = new RegExp(src[i]);
+}
+
+exports.parse = parse;
+function parse(version, loose) {
+ var r = loose ? re[LOOSE] : re[FULL];
+ return (r.test(version)) ? new SemVer(version, loose) : null;
+}
+
+exports.valid = valid;
+function valid(version, loose) {
+ var v = parse(version, loose);
+ return v ? v.version : null;
+}
+
+
+exports.clean = clean;
+function clean(version, loose) {
+ var s = parse(version, loose);
+ return s ? s.version : null;
+}
-Object.getOwnPropertyNames(expressions).forEach(function (i) {
- exports[i] = function (str) {
- return ("" + (str || "")).match(expressions[i])
+exports.SemVer = SemVer;
+
+function SemVer(version, loose) {
+ if (version instanceof SemVer) {
+ if (version.loose === loose)
+ return version;
+ else
+ version = version.version;
}
-})
-
-exports.rangeReplace = ">=$1 <=$7"
-exports.clean = clean
-exports.compare = compare
-exports.rcompare = rcompare
-exports.satisfies = satisfies
-exports.gt = gt
-exports.gte = gte
-exports.lt = lt
-exports.lte = lte
-exports.eq = eq
-exports.neq = neq
-exports.cmp = cmp
-exports.inc = inc
-
-exports.valid = valid
-exports.validPackage = validPackage
-exports.validRange = validRange
-exports.maxSatisfying = maxSatisfying
-
-exports.replaceStars = replaceStars
-exports.toComparators = toComparators
-
-function stringify (version) {
- var v = version
- return [v[1]||'', v[2]||'', v[3]||''].join(".") + (v[4]||'') + (v[5]||'')
-}
-
-function clean (version) {
- version = exports.parse(version)
- if (!version) return version
- return stringify(version)
-}
-
-function valid (version) {
- if (typeof version !== "string") return null
- return exports.parse(version) && version.trim().replace(/^[v=]+/, '')
-}
-
-function validPackage (version) {
- if (typeof version !== "string") return null
- return version.match(expressions.parsePackage) && version.trim()
-}
-
-// range can be one of:
-// "1.0.3 - 2.0.0" range, inclusive, like ">=1.0.3 <=2.0.0"
-// ">1.0.2" like 1.0.3 - 9999.9999.9999
-// ">=1.0.2" like 1.0.2 - 9999.9999.9999
-// "<2.0.0" like 0.0.0 - 1.9999.9999
-// ">1.0.2 <2.0.0" like 1.0.3 - 1.9999.9999
-var starExpression = /(<|>)?=?\s*\*/g
- , starReplace = ""
- , compTrimExpression = new RegExp("((<|>)?=|<|>)\\s*("
- +semver+"|"+xRangePlain+")", "g")
- , compTrimReplace = "$1$3"
-
-function toComparators (range) {
- var ret = (range || "").trim()
- .replace(expressions.parseRange, exports.rangeReplace)
- .replace(compTrimExpression, compTrimReplace)
- .split(/\s+/)
- .join(" ")
- .split("||")
- .map(function (orchunk) {
- return orchunk
- .replace(new RegExp("(" + exprLoneSpermy + ")\\s+"), "$1")
- .split(" ")
- .map(replaceXRanges)
- .map(replaceSpermies)
- .map(replaceStars)
- .join(" ").trim()
- })
- .map(function (orchunk) {
- return orchunk
- .trim()
- .split(/\s+/)
- .filter(function (c) { return c.match(expressions.validComparator) })
- })
- .filter(function (c) { return c.length })
- return ret
-}
-
-function replaceStars (stars) {
- return stars.trim().replace(starExpression, starReplace)
-}
-
-// "2.x","2.x.x" --> ">=2.0.0- <2.1.0-"
-// "2.3.x" --> ">=2.3.0- <2.4.0-"
-function replaceXRanges (ranges) {
- return ranges.split(/\s+/)
- .map(replaceXRange)
- .join(" ")
-}
-
-function replaceXRange (version) {
- return version.trim().replace(expressions.parseXRange,
- function (v, gtlt, M, m, p, t) {
- var anyX = !M || M.toLowerCase() === "x" || M === "*"
- || !m || m.toLowerCase() === "x" || m === "*"
- || !p || p.toLowerCase() === "x" || p === "*"
- , ret = v
- if (gtlt && anyX) {
- // just replace x'es with zeroes
- ;(!M || M === "*" || M.toLowerCase() === "x") && (M = 0)
- ;(!m || m === "*" || m.toLowerCase() === "x") && (m = 0)
- ;(!p || p === "*" || p.toLowerCase() === "x") && (p = 0)
- ret = gtlt + M+"."+m+"."+p+"-"
- } else if (!M || M === "*" || M.toLowerCase() === "x") {
- ret = "*" // allow any
- } else if (!m || m === "*" || m.toLowerCase() === "x") {
- // append "-" onto the version, otherwise
- // "1.x.x" matches "2.0.0beta", since the tag
- // *lowers* the version value
- ret = ">="+M+".0.0- <"+(+M+1)+".0.0-"
- } else if (!p || p === "*" || p.toLowerCase() === "x") {
- ret = ">="+M+"."+m+".0- <"+M+"."+(+m+1)+".0-"
+ if (!(this instanceof SemVer))
+ return new SemVer(version, loose);
+
+ debug('SemVer', version, loose);
+ this.loose = loose;
+ var m = version.trim().match(loose ? re[LOOSE] : re[FULL]);
+
+ if (!m)
+ throw new TypeError('Invalid Version: ' + version);
+
+ this.raw = version;
+
+ // these are actually numbers
+ this.major = +m[1];
+ this.minor = +m[2];
+ this.patch = +m[3];
+
+ // numberify any prerelease numeric ids
+ if (!m[4])
+ this.prerelease = [];
+ else
+ this.prerelease = m[4].split('.').map(function(id) {
+ return (/^[0-9]+$/.test(id)) ? +id : id;
+ });
+
+ this.build = m[5] ? m[5].split('.') : [];
+ this.format();
+}
+
+SemVer.prototype.format = function() {
+ this.version = this.major + '.' + this.minor + '.' + this.patch;
+ if (this.prerelease.length)
+ this.version += '-' + this.prerelease.join('.');
+ return this.version;
+};
+
+SemVer.prototype.inspect = function() {
+ return '<SemVer "' + this + '">';
+};
+
+SemVer.prototype.toString = function() {
+ return this.version;
+};
+
+SemVer.prototype.compare = function(other) {
+ debug('SemVer.compare', this.version, this.loose, other);
+ if (!(other instanceof SemVer))
+ other = new SemVer(other, this.loose);
+
+ return this.compareMain(other) || this.comparePre(other);
+};
+
+SemVer.prototype.compareMain = function(other) {
+ if (!(other instanceof SemVer))
+ other = new SemVer(other, this.loose);
+
+ return compareIdentifiers(this.major, other.major) ||
+ compareIdentifiers(this.minor, other.minor) ||
+ compareIdentifiers(this.patch, other.patch);
+};
+
+SemVer.prototype.comparePre = function(other) {
+ if (!(other instanceof SemVer))
+ other = new SemVer(other, this.loose);
+
+ // NOT having a prerelease is > having one
+ if (this.prerelease.length && !other.prerelease.length)
+ return -1;
+ else if (!this.prerelease.length && other.prerelease.length)
+ return 1;
+ else if (!this.prerelease.lenth && !other.prerelease.length)
+ return 0;
+
+ var i = 0;
+ do {
+ var a = this.prerelease[i];
+ var b = other.prerelease[i];
+ debug('prerelease compare', i, a, b);
+ if (a === undefined && b === undefined)
+ return 0;
+ else if (b === undefined)
+ return 1;
+ else if (a === undefined)
+ return -1;
+ else if (a === b)
+ continue;
+ else
+ return compareIdentifiers(a, b);
+ } while (++i);
+};
+
+SemVer.prototype.inc = function(release) {
+ switch (release) {
+ case 'major':
+ this.major++;
+ this.minor = -1;
+ case 'minor':
+ this.minor++;
+ this.patch = -1;
+ case 'patch':
+ this.patch++;
+ this.prerelease = [];
+ break;
+ case 'prerelease':
+ if (this.prerelease.length === 0)
+ this.prerelease = [0];
+ else {
+ var i = this.prerelease.length;
+ while (--i >= 0) {
+ if (typeof this.prerelease[i] === 'number') {
+ this.prerelease[i]++;
+ i = -2;
+ }
+ }
+ if (i === -1) // didn't increment anything
+ this.prerelease.push(0);
+ }
+ break;
+
+ default:
+ throw new Error('invalid increment argument: ' + release);
+ }
+ this.format();
+ return this;
+};
+
+exports.inc = inc;
+function inc(version, release, loose) {
+ try {
+ return new SemVer(version, loose).inc(release).version;
+ } catch (er) {
+ return null;
+ }
+}
+
+exports.compareIdentifiers = compareIdentifiers;
+
+var numeric = /^[0-9]+$/;
+function compareIdentifiers(a, b) {
+ var anum = numeric.test(a);
+ var bnum = numeric.test(b);
+
+ if (anum && bnum) {
+ a = +a;
+ b = +b;
+ }
+
+ return (anum && !bnum) ? -1 :
+ (bnum && !anum) ? 1 :
+ a < b ? -1 :
+ a > b ? 1 :
+ 0;
+}
+
+exports.rcompareIdentifiers = rcompareIdentifiers;
+function rcompareIdentifiers(a, b) {
+ return compareIdentifiers(b, a);
+}
+
+exports.compare = compare;
+function compare(a, b, loose) {
+ return new SemVer(a, loose).compare(b);
+}
+
+exports.compareLoose = compareLoose;
+function compareLoose(a, b) {
+ return compare(a, b, true);
+}
+
+exports.rcompare = rcompare;
+function rcompare(a, b, loose) {
+ return compare(b, a, loose);
+}
+
+exports.sort = sort;
+function sort(list, loose) {
+ return list.sort(function(a, b) {
+ return exports.compare(a, b, loose);
+ });
+}
+
+exports.rsort = rsort;
+function rsort(list, loose) {
+ return list.sort(function(a, b) {
+ return exports.rcompare(a, b, loose);
+ });
+}
+
+exports.gt = gt;
+function gt(a, b, loose) {
+ return compare(a, b, loose) > 0;
+}
+
+exports.lt = lt;
+function lt(a, b, loose) {
+ return compare(a, b, loose) < 0;
+}
+
+exports.eq = eq;
+function eq(a, b, loose) {
+ return compare(a, b, loose) === 0;
+}
+
+exports.neq = neq;
+function neq(a, b, loose) {
+ return compare(a, b, loose) !== 0;
+}
+
+exports.gte = gte;
+function gte(a, b, loose) {
+ return compare(a, b, loose) >= 0;
+}
+
+exports.lte = lte;
+function lte(a, b, loose) {
+ return compare(a, b, loose) <= 0;
+}
+
+exports.cmp = cmp;
+function cmp(a, op, b, loose) {
+ var ret;
+ switch (op) {
+ case '===': ret = a === b; break;
+ case '!==': ret = a !== b; break;
+ case '': case '=': case '==': ret = eq(a, b, loose); break;
+ case '!=': ret = neq(a, b, loose); break;
+ case '>': ret = gt(a, b, loose); break;
+ case '>=': ret = gte(a, b, loose); break;
+ case '<': ret = lt(a, b, loose); break;
+ case '<=': ret = lte(a, b, loose); break;
+ default: throw new TypeError('Invalid operator: ' + op);
+ }
+ return ret;
+}
+
+exports.Comparator = Comparator;
+function Comparator(comp, loose) {
+ if (comp instanceof Comparator) {
+ if (comp.loose === loose)
+ return comp;
+ else
+ comp = comp.value;
+ }
+
+ if (!(this instanceof Comparator))
+ return new Comparator(comp, loose);
+
+ debug('comparator', comp, loose);
+ this.loose = loose;
+ this.parse(comp);
+
+ if (this.semver === ANY)
+ this.value = '';
+ else
+ this.value = this.operator + this.semver.version;
+}
+
+var ANY = {};
+Comparator.prototype.parse = function(comp) {
+ var r = this.loose ? re[COMPARATORLOOSE] : re[COMPARATOR];
+ var m = comp.match(r);
+
+ if (!m)
+ throw new TypeError('Invalid comparator: ' + comp);
+
+ this.operator = m[1];
+ // if it literally is just '>' or '' then allow anything.
+ if (!m[2])
+ this.semver = ANY;
+ else {
+ this.semver = new SemVer(m[2], this.loose);
+
+ // <1.2.3-rc DOES allow 1.2.3-beta (has prerelease)
+ // >=1.2.3 DOES NOT allow 1.2.3-beta
+ // <=1.2.3 DOES allow 1.2.3-beta
+ // However, <1.2.3 does NOT allow 1.2.3-beta,
+ // even though `1.2.3-beta < 1.2.3`
+ // The assumption is that the 1.2.3 version has something you
+ // *don't* want, so we push the prerelease down to the minimum.
+ if (this.operator === '<' && !this.semver.prerelease.length) {
+ this.semver.prerelease = ['0'];
+ this.semver.format();
}
- return ret
- })
+ }
+};
+
+Comparator.prototype.inspect = function() {
+ return '<SemVer Comparator "' + this + '">';
+};
+
+Comparator.prototype.toString = function() {
+ return this.value;
+};
+
+Comparator.prototype.test = function(version) {
+ debug('Comparator.test', version, this.loose);
+ return (this.semver === ANY) ? true :
+ cmp(version, this.operator, this.semver, this.loose);
+};
+
+
+exports.Range = Range;
+function Range(range, loose) {
+ if ((range instanceof Range) && range.loose === loose)
+ return range;
+
+ if (!(this instanceof Range))
+ return new Range(range, loose);
+
+ this.loose = loose;
+
+ // First, split based on boolean or ||
+ this.raw = range;
+ this.set = range.split(/\s*\|\|\s*/).map(function(range) {
+ return this.parseRange(range.trim());
+ }, this).filter(function(c) {
+ // throw out any that are not relevant for whatever reason
+ return c.length;
+ });
+
+ if (!this.set.length) {
+ throw new TypeError('Invalid SemVer Range: ' + range);
+ }
+
+ this.format();
+}
+
+Range.prototype.inspect = function() {
+ return '<SemVer Range "' + this.range + '">';
+};
+
+Range.prototype.format = function() {
+ this.range = this.set.map(function(comps) {
+ return comps.join(' ').trim();
+ }).join('||').trim();
+ return this.range;
+};
+
+Range.prototype.toString = function() {
+ return this.range;
+};
+
+Range.prototype.parseRange = function(range) {
+ var loose = this.loose;
+ range = range.trim();
+ debug('range', range, loose);
+ // `1.2.3 - 1.2.4` => `>=1.2.3 <=1.2.4`
+ var hr = loose ? re[HYPHENRANGELOOSE] : re[HYPHENRANGE];
+ range = range.replace(hr, hyphenReplace);
+ debug('hyphen replace', range);
+ // `> 1.2.3 < 1.2.5` => `>1.2.3 <1.2.5`
+ range = range.replace(re[COMPARATORTRIM], comparatorTrimReplace);
+ debug('comparator trim', range, re[COMPARATORTRIM]);
+
+ // `~ 1.2.3` => `~1.2.3`
+ range = range.replace(re[TILDETRIM], tildeTrimReplace);
+
+ // `^ 1.2.3` => `^1.2.3`
+ range = range.replace(re[CARETTRIM], caretTrimReplace);
+
+ // normalize spaces
+ range = range.split(/\s+/).join(' ');
+
+ // At this point, the range is completely trimmed and
+ // ready to be split into comparators.
+
+ var compRe = loose ? re[COMPARATORLOOSE] : re[COMPARATOR];
+ var set = range.split(' ').map(function(comp) {
+ return parseComparator(comp, loose);
+ }).join(' ').split(/\s+/);
+ if (this.loose) {
+ // in loose mode, throw out any that are not valid comparators
+ set = set.filter(function(comp) {
+ return !!comp.match(compRe);
+ });
+ }
+ set = set.map(function(comp) {
+ return new Comparator(comp, loose);
+ });
+
+ return set;
+};
+
+// Mostly just for testing and legacy API reasons
+exports.toComparators = toComparators;
+function toComparators(range, loose) {
+ return new Range(range, loose).set.map(function(comp) {
+ return comp.map(function(c) {
+ return c.value;
+ }).join(' ').trim().split(' ');
+ });
+}
+
+// comprised of xranges, tildes, stars, and gtlt's at this point.
+// already replaced the hyphen ranges
+// turn into a set of JUST comparators.
+function parseComparator(comp, loose) {
+ debug('comp', comp);
+ comp = replaceCarets(comp, loose);
+ debug('caret', comp);
+ comp = replaceTildes(comp, loose);
+ debug('tildes', comp);
+ comp = replaceXRanges(comp, loose);
+ debug('xrange', comp);
+ comp = replaceStars(comp, loose);
+ debug('stars', comp);
+ return comp;
+}
+
+function isX(id) {
+ return !id || id.toLowerCase() === 'x' || id === '*';
}
// ~, ~> --> * (any, kinda silly)
@@ -161,146 +679,333 @@ function replaceXRange (version) {
// ~1.2, ~1.2.x, ~>1.2, ~>1.2.x --> >=1.2.0 <1.3.0
// ~1.2.3, ~>1.2.3 --> >=1.2.3 <1.3.0
// ~1.2.0, ~>1.2.0 --> >=1.2.0 <1.3.0
-function replaceSpermies (version) {
- return version.trim().replace(expressions.parseSpermy,
- function (v, gtlt, M, m, p, t) {
- if (gtlt) throw new Error(
- "Using '"+gtlt+"' with ~ makes no sense. Don't do it.")
-
- if (!M || M.toLowerCase() === "x") {
- return ""
- }
- // ~1 == >=1.0.0- <2.0.0-
- if (!m || m.toLowerCase() === "x") {
- return ">="+M+".0.0- <"+(+M+1)+".0.0-"
- }
- // ~1.2 == >=1.2.0- <1.3.0-
- if (!p || p.toLowerCase() === "x") {
- return ">="+M+"."+m+".0- <"+M+"."+(+m+1)+".0-"
+function replaceTildes(comp, loose) {
+ return comp.trim().split(/\s+/).map(function(comp) {
+ return replaceTilde(comp, loose);
+ }).join(' ');
+}
+
+function replaceTilde(comp, loose) {
+ var r = loose ? re[TILDELOOSE] : re[TILDE];
+ return comp.replace(r, function(_, M, m, p, pr) {
+ debug('tilde', comp, _, M, m, p, pr);
+ var ret;
+
+ if (isX(M))
+ ret = '';
+ else if (isX(m))
+ ret = '>=' + M + '.0.0-0 <' + (+M + 1) + '.0.0-0';
+ else if (isX(p))
+ // ~1.2 == >=1.2.0- <1.3.0-
+ ret = '>=' + M + '.' + m + '.0-0 <' + M + '.' + (+m + 1) + '.0-0';
+ else if (pr) {
+ debug('replaceTilde pr', pr);
+ if (pr.charAt(0) !== '-')
+ pr = '-' + pr;
+ ret = '>=' + M + '.' + m + '.' + p + pr +
+ ' <' + M + '.' + (+m + 1) + '.0-0';
+ } else
+ // ~1.2.3 == >=1.2.3-0 <1.3.0-0
+ ret = '>=' + M + '.' + m + '.' + p + '-0' +
+ ' <' + M + '.' + (+m + 1) + '.0-0';
+
+ debug('tilde return', ret);
+ return ret;
+ });
+}
+
+// ^ --> * (any, kinda silly)
+// ^2, ^2.x, ^2.x.x --> >=2.0.0 <3.0.0
+// ^2.0, ^2.0.x --> >=2.0.0 <3.0.0
+// ^1.2, ^1.2.x --> >=1.2.0 <2.0.0
+// ^1.2.3 --> >=1.2.3 <2.0.0
+// ^1.2.0 --> >=1.2.0 <2.0.0
+function replaceCarets(comp, loose) {
+ return comp.trim().split(/\s+/).map(function(comp) {
+ return replaceCaret(comp, loose);
+ }).join(' ');
+}
+
+function replaceCaret(comp, loose) {
+ var r = loose ? re[CARETLOOSE] : re[CARET];
+ return comp.replace(r, function(_, M, m, p, pr) {
+ debug('caret', comp, _, M, m, p, pr);
+ var ret;
+
+ if (isX(M))
+ ret = '';
+ else if (isX(m))
+ ret = '>=' + M + '.0.0-0 <' + (+M + 1) + '.0.0-0';
+ else if (isX(p)) {
+ if (M === '0')
+ ret = '>=' + M + '.' + m + '.0-0 <' + M + '.' + (+m + 1) + '.0-0';
+ else
+ ret = '>=' + M + '.' + m + '.0-0 <' + (+M + 1) + '.0.0-0';
+ } else if (pr) {
+ debug('replaceCaret pr', pr);
+ if (pr.charAt(0) !== '-')
+ pr = '-' + pr;
+ if (M === '0') {
+ if (m === '0')
+ ret = '=' + M + '.' + m + '.' + p + pr;
+ else
+ ret = '>=' + M + '.' + m + '.' + p + pr +
+ ' <' + M + '.' + (+m + 1) + '.0-0';
+ } else
+ ret = '>=' + M + '.' + m + '.' + p + pr +
+ ' <' + (+M + 1) + '.0.0-0';
+ } else {
+ if (M === '0') {
+ if (m === '0')
+ ret = '=' + M + '.' + m + '.' + p;
+ else
+ ret = '>=' + M + '.' + m + '.' + p + '-0' +
+ ' <' + M + '.' + (+m + 1) + '.0-0';
+ } else
+ ret = '>=' + M + '.' + m + '.' + p + '-0' +
+ ' <' + (+M + 1) + '.0.0-0';
}
- // ~1.2.3 == >=1.2.3- <1.3.0-
- t = t || "-"
- return ">="+M+"."+m+"."+p+t+" <"+M+"."+(+m+1)+".0-"
- })
-}
-
-function validRange (range) {
- range = replaceStars(range)
- var c = toComparators(range)
- return (c.length === 0)
- ? null
- : c.map(function (c) { return c.join(" ") }).join("||")
-}
-
-// returns the highest satisfying version in the list, or undefined
-function maxSatisfying (versions, range) {
- return versions
- .filter(function (v) { return satisfies(v, range) })
- .sort(compare)
- .pop()
-}
-function satisfies (version, range) {
- version = valid(version)
- if (!version) return false
- range = toComparators(range)
- for (var i = 0, l = range.length ; i < l ; i ++) {
- var ok = false
- for (var j = 0, ll = range[i].length ; j < ll ; j ++) {
- var r = range[i][j]
- , gtlt = r.charAt(0) === ">" ? gt
- : r.charAt(0) === "<" ? lt
- : false
- , eq = r.charAt(!!gtlt) === "="
- , sub = (!!eq) + (!!gtlt)
- if (!gtlt) eq = true
- r = r.substr(sub)
- r = (r === "") ? r : valid(r)
- ok = (r === "") || (eq && r === version) || (gtlt && gtlt(version, r))
- if (!ok) break
+
+ debug('caret return', ret);
+ return ret;
+ });
+}
+
+function replaceXRanges(comp, loose) {
+ debug('replaceXRanges', comp, loose);
+ return comp.split(/\s+/).map(function(comp) {
+ return replaceXRange(comp, loose);
+ }).join(' ');
+}
+
+function replaceXRange(comp, loose) {
+ comp = comp.trim();
+ var r = loose ? re[XRANGELOOSE] : re[XRANGE];
+ return comp.replace(r, function(ret, gtlt, M, m, p, pr) {
+ debug('xRange', comp, ret, gtlt, M, m, p, pr);
+ var xM = isX(M);
+ var xm = xM || isX(m);
+ var xp = xm || isX(p);
+ var anyX = xp;
+
+ if (gtlt === '=' && anyX)
+ gtlt = '';
+
+ if (gtlt && anyX) {
+ // replace X with 0, and then append the -0 min-prerelease
+ if (xM)
+ M = 0;
+ if (xm)
+ m = 0;
+ if (xp)
+ p = 0;
+
+ if (gtlt === '>') {
+ // >1 => >=2.0.0-0
+ // >1.2 => >=1.3.0-0
+ // >1.2.3 => >= 1.2.4-0
+ gtlt = '>=';
+ if (xM) {
+ // no change
+ } else if (xm) {
+ M = +M + 1;
+ m = 0;
+ p = 0;
+ } else if (xp) {
+ m = +m + 1;
+ p = 0;
+ }
+ }
+
+
+ ret = gtlt + M + '.' + m + '.' + p + '-0';
+ } else if (xM) {
+ // allow any
+ ret = '*';
+ } else if (xm) {
+ // append '-0' onto the version, otherwise
+ // '1.x.x' matches '2.0.0-beta', since the tag
+ // *lowers* the version value
+ ret = '>=' + M + '.0.0-0 <' + (+M + 1) + '.0.0-0';
+ } else if (xp) {
+ ret = '>=' + M + '.' + m + '.0-0 <' + M + '.' + (+m + 1) + '.0-0';
}
- if (ok) return true
+
+ debug('xRange return', ret);
+
+ return ret;
+ });
+}
+
+// Because * is AND-ed with everything else in the comparator,
+// and '' means "any version", just remove the *s entirely.
+function replaceStars(comp, loose) {
+ debug('replaceStars', comp, loose);
+ // Looseness is ignored here. star is always as loose as it gets!
+ return comp.trim().replace(re[STAR], '');
+}
+
+// This function is passed to string.replace(re[HYPHENRANGE])
+// M, m, patch, prerelease, build
+// 1.2 - 3.4.5 => >=1.2.0-0 <=3.4.5
+// 1.2.3 - 3.4 => >=1.2.0-0 <3.5.0-0 Any 3.4.x will do
+// 1.2 - 3.4 => >=1.2.0-0 <3.5.0-0
+function hyphenReplace($0,
+ from, fM, fm, fp, fpr, fb,
+ to, tM, tm, tp, tpr, tb) {
+
+ if (isX(fM))
+ from = '';
+ else if (isX(fm))
+ from = '>=' + fM + '.0.0-0';
+ else if (isX(fp))
+ from = '>=' + fM + '.' + fm + '.0-0';
+ else
+ from = '>=' + from;
+
+ if (isX(tM))
+ to = '';
+ else if (isX(tm))
+ to = '<' + (+tM + 1) + '.0.0-0';
+ else if (isX(tp))
+ to = '<' + tM + '.' + (+tm + 1) + '.0-0';
+ else if (tpr)
+ to = '<=' + tM + '.' + tm + '.' + tp + '-' + tpr;
+ else
+ to = '<=' + to;
+
+ return (from + ' ' + to).trim();
+}
+
+
+// if ANY of the sets match ALL of its comparators, then pass
+Range.prototype.test = function(version) {
+ if (!version)
+ return false;
+ for (var i = 0; i < this.set.length; i++) {
+ if (testSet(this.set[i], version))
+ return true;
}
- return false
-}
-
-// return v1 > v2 ? 1 : -1
-function compare (v1, v2) {
- var g = gt(v1, v2)
- return g === null ? 0 : g ? 1 : -1
-}
-
-function rcompare (v1, v2) {
- return compare(v2, v1)
-}
-
-function lt (v1, v2) { return gt(v2, v1) }
-function gte (v1, v2) { return !lt(v1, v2) }
-function lte (v1, v2) { return !gt(v1, v2) }
-function eq (v1, v2) { return gt(v1, v2) === null }
-function neq (v1, v2) { return gt(v1, v2) !== null }
-function cmp (v1, c, v2) {
- switch (c) {
- case ">": return gt(v1, v2)
- case "<": return lt(v1, v2)
- case ">=": return gte(v1, v2)
- case "<=": return lte(v1, v2)
- case "==": return eq(v1, v2)
- case "!=": return neq(v1, v2)
- case "===": return v1 === v2
- case "!==": return v1 !== v2
- default: throw new Error("Y U NO USE VALID COMPARATOR!? "+c)
+ return false;
+};
+
+function testSet(set, version) {
+ for (var i = 0; i < set.length; i++) {
+ if (!set[i].test(version))
+ return false;
+ }
+ return true;
+}
+
+exports.satisfies = satisfies;
+function satisfies(version, range, loose) {
+ try {
+ range = new Range(range, loose);
+ } catch (er) {
+ return false;
+ }
+ return range.test(version);
+}
+
+exports.maxSatisfying = maxSatisfying;
+function maxSatisfying(versions, range, loose) {
+ return versions.filter(function(version) {
+ return satisfies(version, range, loose);
+ }).sort(function(a, b) {
+ return rcompare(a, b, loose);
+ })[0] || null;
+}
+
+exports.validRange = validRange;
+function validRange(range, loose) {
+ try {
+ // Return '*' instead of '' so that truthiness works.
+ // This will throw if it's invalid anyway
+ return new Range(range, loose).range || '*';
+ } catch (er) {
+ return null;
}
}
-// return v1 > v2
-function num (v) {
- return v === undefined ? -1 : parseInt((v||"0").replace(/[^0-9]+/g, ''), 10)
+// Determine if version is less than all the versions possible in the range
+exports.ltr = ltr;
+function ltr(version, range, loose) {
+ return outside(version, range, '<', loose);
+}
+
+// Determine if version is greater than all the versions possible in the range.
+exports.gtr = gtr;
+function gtr(version, range, loose) {
+ return outside(version, range, '>', loose);
}
-function gt (v1, v2) {
- v1 = exports.parse(v1)
- v2 = exports.parse(v2)
- if (!v1 || !v2) return false
- for (var i = 1; i < 5; i ++) {
- v1[i] = num(v1[i])
- v2[i] = num(v2[i])
- if (v1[i] > v2[i]) return true
- else if (v1[i] !== v2[i]) return false
+exports.outside = outside;
+function outside(version, range, hilo, loose) {
+ version = new SemVer(version, loose);
+ range = new Range(range, loose);
+
+ var gtfn, ltefn, ltfn, comp, ecomp;
+ switch (hilo) {
+ case '>':
+ gtfn = gt;
+ ltefn = lte;
+ ltfn = lt;
+ comp = '>';
+ ecomp = '>=';
+ break;
+ case '<':
+ gtfn = lt;
+ ltefn = gte;
+ ltfn = gt;
+ comp = '<';
+ ecomp = '<=';
+ break;
+ default:
+ throw new TypeError('Must provide a hilo val of "<" or ">"');
}
- // no tag is > than any tag, or use lexicographical order.
- var tag1 = v1[5] || ""
- , tag2 = v2[5] || ""
-
- // kludge: null means they were equal. falsey, and detectable.
- // embarrassingly overclever, though, I know.
- return tag1 === tag2 ? null
- : !tag1 ? true
- : !tag2 ? false
- : tag1 > tag2
-}
-
-function inc (version, release) {
- version = exports.parse(version)
- if (!version) return null
-
- var parsedIndexLookup =
- { 'major': 1
- , 'minor': 2
- , 'patch': 3
- , 'build': 4 }
- var incIndex = parsedIndexLookup[release]
- if (incIndex === undefined) return null
-
- var current = num(version[incIndex])
- version[incIndex] = current === -1 ? 1 : current + 1
-
- for (var i = incIndex + 1; i < 5; i ++) {
- if (num(version[i]) !== -1) version[i] = "0"
+
+ // If it satisifes the range it is not outside
+ if (satisfies(version, range, loose)) {
+ return false;
}
- if (version[4]) version[4] = "-" + version[4]
- version[5] = ""
+ // From now on, variable terms are as if we're in "gtr" mode.
+ // but note that everything is flipped for the "ltr" function.
+
+ for (var i = 0; i < range.set.length; ++i) {
+ var comparators = range.set[i];
+
+ var high = null;
+ var low = null;
+
+ comparators.forEach(function(comparator) {
+ high = high || comparator;
+ low = low || comparator;
+ if (gtfn(comparator.semver, high.semver, loose)) {
+ high = comparator;
+ } else if (ltfn(comparator.semver, low.semver, loose)) {
+ low = comparator;
+ }
+ });
+
+ // If the edge version comparator has a operator then our version
+ // isn't outside it
+ if (high.operator === comp || high.operator === ecomp) {
+ return false;
+ }
- return stringify(version)
+ // If the lowest version comparator has an operator and our version
+ // is less than it then it isn't higher than the range
+ if ((!low.operator || low.operator === comp) &&
+ ltefn(version, low.semver)) {
+ return false;
+ } else if (low.operator === ecomp && ltfn(version, low.semver)) {
+ return false;
+ }
+ }
+ return true;
}
-})(typeof exports === "object" ? exports : semver = {})
+
+// Use the define() function if we're in AMD land
+if (typeof define === 'function' && define.amd)
+ define(exports);
diff --git a/deps/npm/node_modules/semver/semver.min.js b/deps/npm/node_modules/semver/semver.min.js
new file mode 100644
index 000000000..c2164c33e
--- /dev/null
+++ b/deps/npm/node_modules/semver/semver.min.js
@@ -0,0 +1 @@
+(function(e){if(typeof module==="object"&&module.exports===e)e=module.exports=H;e.SEMVER_SPEC_VERSION="2.0.0";var r=e.re=[];var t=e.src=[];var n=0;var i=n++;t[i]="0|[1-9]\\d*";var s=n++;t[s]="[0-9]+";var o=n++;t[o]="\\d*[a-zA-Z-][a-zA-Z0-9-]*";var a=n++;t[a]="("+t[i]+")\\."+"("+t[i]+")\\."+"("+t[i]+")";var f=n++;t[f]="("+t[s]+")\\."+"("+t[s]+")\\."+"("+t[s]+")";var u=n++;t[u]="(?:"+t[i]+"|"+t[o]+")";var l=n++;t[l]="(?:"+t[s]+"|"+t[o]+")";var c=n++;t[c]="(?:-("+t[u]+"(?:\\."+t[u]+")*))";var p=n++;t[p]="(?:-?("+t[l]+"(?:\\."+t[l]+")*))";var h=n++;t[h]="[0-9A-Za-z-]+";var v=n++;t[v]="(?:\\+("+t[h]+"(?:\\."+t[h]+")*))";var m=n++;var g="v?"+t[a]+t[c]+"?"+t[v]+"?";t[m]="^"+g+"$";var w="[v=\\s]*"+t[f]+t[p]+"?"+t[v]+"?";var d=n++;t[d]="^"+w+"$";var y=n++;t[y]="((?:<|>)?=?)";var $=n++;t[$]=t[s]+"|x|X|\\*";var j=n++;t[j]=t[i]+"|x|X|\\*";var b=n++;t[b]="[v=\\s]*("+t[j]+")"+"(?:\\.("+t[j]+")"+"(?:\\.("+t[j]+")"+"(?:("+t[c]+")"+")?)?)?";var E=n++;t[E]="[v=\\s]*("+t[$]+")"+"(?:\\.("+t[$]+")"+"(?:\\.("+t[$]+")"+"(?:("+t[p]+")"+")?)?)?";var k=n++;t[k]="^"+t[y]+"\\s*"+t[b]+"$";var x=n++;t[x]="^"+t[y]+"\\s*"+t[E]+"$";var R=n++;t[R]="(?:~>?)";var S=n++;t[S]="(\\s*)"+t[R]+"\\s+";r[S]=new RegExp(t[S],"g");var V="$1~";var I=n++;t[I]="^"+t[R]+t[b]+"$";var A=n++;t[A]="^"+t[R]+t[E]+"$";var C=n++;t[C]="(?:\\^)";var T=n++;t[T]="(\\s*)"+t[C]+"\\s+";r[T]=new RegExp(t[T],"g");var M="$1^";var z=n++;t[z]="^"+t[C]+t[b]+"$";var P=n++;t[P]="^"+t[C]+t[E]+"$";var Z=n++;t[Z]="^"+t[y]+"\\s*("+w+")$|^$";var q=n++;t[q]="^"+t[y]+"\\s*("+g+")$|^$";var L=n++;t[L]="(\\s*)"+t[y]+"\\s*("+w+"|"+t[b]+")";r[L]=new RegExp(t[L],"g");var X="$1$2$3";var _=n++;t[_]="^\\s*("+t[b]+")"+"\\s+-\\s+"+"("+t[b]+")"+"\\s*$";var N=n++;t[N]="^\\s*("+t[E]+")"+"\\s+-\\s+"+"("+t[E]+")"+"\\s*$";var O=n++;t[O]="(<|>)?=?\\s*\\*";for(var B=0;B<n;B++){if(!r[B])r[B]=new RegExp(t[B])}e.parse=D;function D(e,t){var n=t?r[d]:r[m];return n.test(e)?new H(e,t):null}e.valid=F;function F(e,r){var t=D(e,r);return t?t.version:null}e.clean=G;function G(e,r){var t=D(e,r);return t?t.version:null}e.SemVer=H;function H(e,t){if(e instanceof H){if(e.loose===t)return e;else e=e.version}if(!(this instanceof H))return new H(e,t);this.loose=t;var n=e.trim().match(t?r[d]:r[m]);if(!n)throw new TypeError("Invalid Version: "+e);this.raw=e;this.major=+n[1];this.minor=+n[2];this.patch=+n[3];if(!n[4])this.prerelease=[];else this.prerelease=n[4].split(".").map(function(e){return/^[0-9]+$/.test(e)?+e:e});this.build=n[5]?n[5].split("."):[];this.format()}H.prototype.format=function(){this.version=this.major+"."+this.minor+"."+this.patch;if(this.prerelease.length)this.version+="-"+this.prerelease.join(".");return this.version};H.prototype.inspect=function(){return'<SemVer "'+this+'">'};H.prototype.toString=function(){return this.version};H.prototype.compare=function(e){if(!(e instanceof H))e=new H(e,this.loose);return this.compareMain(e)||this.comparePre(e)};H.prototype.compareMain=function(e){if(!(e instanceof H))e=new H(e,this.loose);return Q(this.major,e.major)||Q(this.minor,e.minor)||Q(this.patch,e.patch)};H.prototype.comparePre=function(e){if(!(e instanceof H))e=new H(e,this.loose);if(this.prerelease.length&&!e.prerelease.length)return-1;else if(!this.prerelease.length&&e.prerelease.length)return 1;else if(!this.prerelease.lenth&&!e.prerelease.length)return 0;var r=0;do{var t=this.prerelease[r];var n=e.prerelease[r];if(t===undefined&&n===undefined)return 0;else if(n===undefined)return 1;else if(t===undefined)return-1;else if(t===n)continue;else return Q(t,n)}while(++r)};H.prototype.inc=function(e){switch(e){case"major":this.major++;this.minor=-1;case"minor":this.minor++;this.patch=-1;case"patch":this.patch++;this.prerelease=[];break;case"prerelease":if(this.prerelease.length===0)this.prerelease=[0];else{var r=this.prerelease.length;while(--r>=0){if(typeof this.prerelease[r]==="number"){this.prerelease[r]++;r=-2}}if(r===-1)this.prerelease.push(0)}break;default:throw new Error("invalid increment argument: "+e)}this.format();return this};e.inc=J;function J(e,r,t){try{return new H(e,t).inc(r).version}catch(n){return null}}e.compareIdentifiers=Q;var K=/^[0-9]+$/;function Q(e,r){var t=K.test(e);var n=K.test(r);if(t&&n){e=+e;r=+r}return t&&!n?-1:n&&!t?1:e<r?-1:e>r?1:0}e.rcompareIdentifiers=U;function U(e,r){return Q(r,e)}e.compare=W;function W(e,r,t){return new H(e,t).compare(r)}e.compareLoose=Y;function Y(e,r){return W(e,r,true)}e.rcompare=er;function er(e,r,t){return W(r,e,t)}e.sort=rr;function rr(r,t){return r.sort(function(r,n){return e.compare(r,n,t)})}e.rsort=tr;function tr(r,t){return r.sort(function(r,n){return e.rcompare(r,n,t)})}e.gt=nr;function nr(e,r,t){return W(e,r,t)>0}e.lt=ir;function ir(e,r,t){return W(e,r,t)<0}e.eq=sr;function sr(e,r,t){return W(e,r,t)===0}e.neq=or;function or(e,r,t){return W(e,r,t)!==0}e.gte=ar;function ar(e,r,t){return W(e,r,t)>=0}e.lte=fr;function fr(e,r,t){return W(e,r,t)<=0}e.cmp=ur;function ur(e,r,t,n){var i;switch(r){case"===":i=e===t;break;case"!==":i=e!==t;break;case"":case"=":case"==":i=sr(e,t,n);break;case"!=":i=or(e,t,n);break;case">":i=nr(e,t,n);break;case">=":i=ar(e,t,n);break;case"<":i=ir(e,t,n);break;case"<=":i=fr(e,t,n);break;default:throw new TypeError("Invalid operator: "+r)}return i}e.Comparator=lr;function lr(e,r){if(e instanceof lr){if(e.loose===r)return e;else e=e.value}if(!(this instanceof lr))return new lr(e,r);this.loose=r;this.parse(e);if(this.semver===cr)this.value="";else this.value=this.operator+this.semver.version}var cr={};lr.prototype.parse=function(e){var t=this.loose?r[Z]:r[q];var n=e.match(t);if(!n)throw new TypeError("Invalid comparator: "+e);this.operator=n[1];if(!n[2])this.semver=cr;else{this.semver=new H(n[2],this.loose);if(this.operator==="<"&&!this.semver.prerelease.length){this.semver.prerelease=["0"];this.semver.format()}}};lr.prototype.inspect=function(){return'<SemVer Comparator "'+this+'">'};lr.prototype.toString=function(){return this.value};lr.prototype.test=function(e){return this.semver===cr?true:ur(e,this.operator,this.semver,this.loose)};e.Range=pr;function pr(e,r){if(e instanceof pr&&e.loose===r)return e;if(!(this instanceof pr))return new pr(e,r);this.loose=r;this.raw=e;this.set=e.split(/\s*\|\|\s*/).map(function(e){return this.parseRange(e.trim())},this).filter(function(e){return e.length});if(!this.set.length){throw new TypeError("Invalid SemVer Range: "+e)}this.format()}pr.prototype.inspect=function(){return'<SemVer Range "'+this.range+'">'};pr.prototype.format=function(){this.range=this.set.map(function(e){return e.join(" ").trim()}).join("||").trim();return this.range};pr.prototype.toString=function(){return this.range};pr.prototype.parseRange=function(e){var t=this.loose;e=e.trim();var n=t?r[N]:r[_];e=e.replace(n,Er);e=e.replace(r[L],X);e=e.replace(r[S],V);e=e.replace(r[T],M);e=e.split(/\s+/).join(" ");var i=t?r[Z]:r[q];var s=e.split(" ").map(function(e){return vr(e,t)}).join(" ").split(/\s+/);if(this.loose){s=s.filter(function(e){return!!e.match(i)})}s=s.map(function(e){return new lr(e,t)});return s};e.toComparators=hr;function hr(e,r){return new pr(e,r).set.map(function(e){return e.map(function(e){return e.value}).join(" ").trim().split(" ")})}function vr(e,r){e=dr(e,r);e=gr(e,r);e=$r(e,r);e=br(e,r);return e}function mr(e){return!e||e.toLowerCase()==="x"||e==="*"}function gr(e,r){return e.trim().split(/\s+/).map(function(e){return wr(e,r)}).join(" ")}function wr(e,t){var n=t?r[A]:r[I];return e.replace(n,function(e,r,t,n,i){var s;if(mr(r))s="";else if(mr(t))s=">="+r+".0.0-0 <"+(+r+1)+".0.0-0";else if(mr(n))s=">="+r+"."+t+".0-0 <"+r+"."+(+t+1)+".0-0";else if(i){if(i.charAt(0)!=="-")i="-"+i;s=">="+r+"."+t+"."+n+i+" <"+r+"."+(+t+1)+".0-0"}else s=">="+r+"."+t+"."+n+"-0"+" <"+r+"."+(+t+1)+".0-0";return s})}function dr(e,r){return e.trim().split(/\s+/).map(function(e){return yr(e,r)}).join(" ")}function yr(e,t){var n=t?r[P]:r[z];return e.replace(n,function(e,r,t,n,i){var s;if(mr(r))s="";else if(mr(t))s=">="+r+".0.0-0 <"+(+r+1)+".0.0-0";else if(mr(n)){if(r==="0")s=">="+r+"."+t+".0-0 <"+r+"."+(+t+1)+".0-0";else s=">="+r+"."+t+".0-0 <"+(+r+1)+".0.0-0"}else if(i){if(i.charAt(0)!=="-")i="-"+i;if(r==="0"){if(t==="0")s="="+r+"."+t+"."+n+i;else s=">="+r+"."+t+"."+n+i+" <"+r+"."+(+t+1)+".0-0"}else s=">="+r+"."+t+"."+n+i+" <"+(+r+1)+".0.0-0"}else{if(r==="0"){if(t==="0")s="="+r+"."+t+"."+n;else s=">="+r+"."+t+"."+n+"-0"+" <"+r+"."+(+t+1)+".0-0"}else s=">="+r+"."+t+"."+n+"-0"+" <"+(+r+1)+".0.0-0"}return s})}function $r(e,r){return e.split(/\s+/).map(function(e){return jr(e,r)}).join(" ")}function jr(e,t){e=e.trim();var n=t?r[x]:r[k];return e.replace(n,function(e,r,t,n,i,s){var o=mr(t);var a=o||mr(n);var f=a||mr(i);var u=f;if(r==="="&&u)r="";if(r&&u){if(o)t=0;if(a)n=0;if(f)i=0;if(r===">"){r=">=";if(o){}else if(a){t=+t+1;n=0;i=0}else if(f){n=+n+1;i=0}}e=r+t+"."+n+"."+i+"-0"}else if(o){e="*"}else if(a){e=">="+t+".0.0-0 <"+(+t+1)+".0.0-0"}else if(f){e=">="+t+"."+n+".0-0 <"+t+"."+(+n+1)+".0-0"}return e})}function br(e,t){return e.trim().replace(r[O],"")}function Er(e,r,t,n,i,s,o,a,f,u,l,c,p){if(mr(t))r="";else if(mr(n))r=">="+t+".0.0-0";else if(mr(i))r=">="+t+"."+n+".0-0";else r=">="+r;if(mr(f))a="";else if(mr(u))a="<"+(+f+1)+".0.0-0";else if(mr(l))a="<"+f+"."+(+u+1)+".0-0";else if(c)a="<="+f+"."+u+"."+l+"-"+c;else a="<="+a;return(r+" "+a).trim()}pr.prototype.test=function(e){if(!e)return false;for(var r=0;r<this.set.length;r++){if(kr(this.set[r],e))return true}return false};function kr(e,r){for(var t=0;t<e.length;t++){if(!e[t].test(r))return false}return true}e.satisfies=xr;function xr(e,r,t){try{r=new pr(r,t)}catch(n){return false}return r.test(e)}e.maxSatisfying=Rr;function Rr(e,r,t){return e.filter(function(e){return xr(e,r,t)}).sort(function(e,r){return er(e,r,t)})[0]||null}e.validRange=Sr;function Sr(e,r){try{return new pr(e,r).range||"*"}catch(t){return null}}e.ltr=Vr;function Vr(e,r,t){return Ar(e,r,"<",t)}e.gtr=Ir;function Ir(e,r,t){return Ar(e,r,">",t)}e.outside=Ar;function Ar(e,r,t,n){e=new H(e,n);r=new pr(r,n);var i,s,o,a,f;switch(t){case">":i=nr;s=fr;o=ir;a=">";f=">=";break;case"<":i=ir;s=ar;o=nr;a="<";f="<=";break;default:throw new TypeError('Must provide a hilo val of "<" or ">"')}if(xr(e,r,n)){return false}for(var u=0;u<r.set.length;++u){var l=r.set[u];var c=null;var p=null;l.forEach(function(e){c=c||e;p=p||e;if(i(e.semver,c.semver,n)){c=e}else if(o(e.semver,p.semver,n)){p=e}});if(c.operator===a||c.operator===f){return false}if((!p.operator||p.operator===a)&&s(e,p.semver)){return false}else if(p.operator===f&&o(e,p.semver)){return false}}return true}if(typeof define==="function"&&define.amd)define(e)})(typeof exports==="object"?exports:typeof define==="function"&&define.amd?{}:semver={}); \ No newline at end of file
diff --git a/deps/npm/node_modules/semver/semver.min.js.gz b/deps/npm/node_modules/semver/semver.min.js.gz
new file mode 100644
index 000000000..e82da41e3
--- /dev/null
+++ b/deps/npm/node_modules/semver/semver.min.js.gz
Binary files differ
diff --git a/deps/npm/node_modules/semver/test.js b/deps/npm/node_modules/semver/test.js
deleted file mode 100644
index 475b77bb5..000000000
--- a/deps/npm/node_modules/semver/test.js
+++ /dev/null
@@ -1,436 +0,0 @@
-var tap = require("tap")
- , test = tap.test
- , semver = require("./semver.js")
- , eq = semver.eq
- , gt = semver.gt
- , lt = semver.lt
- , neq = semver.neq
- , cmp = semver.cmp
- , gte = semver.gte
- , lte = semver.lte
- , satisfies = semver.satisfies
- , validRange = semver.validRange
- , inc = semver.inc
- , replaceStars = semver.replaceStars
- , toComparators = semver.toComparators
-
-tap.plan(8)
-
-test("\ncomparison tests", function (t) {
-// [version1, version2]
-// version1 should be greater than version2
-; [ ["0.0.0", "0.0.0foo"]
- , ["0.0.1", "0.0.0"]
- , ["1.0.0", "0.9.9"]
- , ["0.10.0", "0.9.0"]
- , ["0.99.0", "0.10.0"]
- , ["2.0.0", "1.2.3"]
- , ["v0.0.0", "0.0.0foo"]
- , ["v0.0.1", "0.0.0"]
- , ["v1.0.0", "0.9.9"]
- , ["v0.10.0", "0.9.0"]
- , ["v0.99.0", "0.10.0"]
- , ["v2.0.0", "1.2.3"]
- , ["0.0.0", "v0.0.0foo"]
- , ["0.0.1", "v0.0.0"]
- , ["1.0.0", "v0.9.9"]
- , ["0.10.0", "v0.9.0"]
- , ["0.99.0", "v0.10.0"]
- , ["2.0.0", "v1.2.3"]
- , ["1.2.3", "1.2.3-asdf"]
- , ["1.2.3-4", "1.2.3"]
- , ["1.2.3-4-foo", "1.2.3"]
- , ["1.2.3-5", "1.2.3-5-foo"]
- , ["1.2.3-5", "1.2.3-4"]
- , ["1.2.3-5-foo", "1.2.3-5-Foo"]
- , ["3.0.0", "2.7.2+"]
- ].forEach(function (v) {
- var v0 = v[0]
- , v1 = v[1]
- t.ok(gt(v0, v1), "gt('"+v0+"', '"+v1+"')")
- t.ok(lt(v1, v0), "lt('"+v1+"', '"+v0+"')")
- t.ok(!gt(v1, v0), "!gt('"+v1+"', '"+v0+"')")
- t.ok(!lt(v0, v1), "!lt('"+v0+"', '"+v1+"')")
- t.ok(eq(v0, v0), "eq('"+v0+"', '"+v0+"')")
- t.ok(eq(v1, v1), "eq('"+v1+"', '"+v1+"')")
- t.ok(neq(v0, v1), "neq('"+v0+"', '"+v1+"')")
- t.ok(cmp(v1, "==", v1), "cmp('"+v1+"' == '"+v1+"')")
- t.ok(cmp(v0, ">=", v1), "cmp('"+v0+"' >= '"+v1+"')")
- t.ok(cmp(v1, "<=", v0), "cmp('"+v1+"' <= '"+v0+"')")
- t.ok(cmp(v0, "!=", v1), "cmp('"+v0+"' != '"+v1+"')")
- })
- t.end()
-})
-
-test("\nequality tests", function (t) {
-// [version1, version2]
-// version1 should be equivalent to version2
-; [ ["1.2.3", "v1.2.3"]
- , ["1.2.3", "=1.2.3"]
- , ["1.2.3", "v 1.2.3"]
- , ["1.2.3", "= 1.2.3"]
- , ["1.2.3", " v1.2.3"]
- , ["1.2.3", " =1.2.3"]
- , ["1.2.3", " v 1.2.3"]
- , ["1.2.3", " = 1.2.3"]
- , ["1.2.3-0", "v1.2.3-0"]
- , ["1.2.3-0", "=1.2.3-0"]
- , ["1.2.3-0", "v 1.2.3-0"]
- , ["1.2.3-0", "= 1.2.3-0"]
- , ["1.2.3-0", " v1.2.3-0"]
- , ["1.2.3-0", " =1.2.3-0"]
- , ["1.2.3-0", " v 1.2.3-0"]
- , ["1.2.3-0", " = 1.2.3-0"]
- , ["1.2.3-01", "v1.2.3-1"]
- , ["1.2.3-01", "=1.2.3-1"]
- , ["1.2.3-01", "v 1.2.3-1"]
- , ["1.2.3-01", "= 1.2.3-1"]
- , ["1.2.3-01", " v1.2.3-1"]
- , ["1.2.3-01", " =1.2.3-1"]
- , ["1.2.3-01", " v 1.2.3-1"]
- , ["1.2.3-01", " = 1.2.3-1"]
- , ["1.2.3beta", "v1.2.3beta"]
- , ["1.2.3beta", "=1.2.3beta"]
- , ["1.2.3beta", "v 1.2.3beta"]
- , ["1.2.3beta", "= 1.2.3beta"]
- , ["1.2.3beta", " v1.2.3beta"]
- , ["1.2.3beta", " =1.2.3beta"]
- , ["1.2.3beta", " v 1.2.3beta"]
- , ["1.2.3beta", " = 1.2.3beta"]
- ].forEach(function (v) {
- var v0 = v[0]
- , v1 = v[1]
- t.ok(eq(v0, v1), "eq('"+v0+"', '"+v1+"')")
- t.ok(!neq(v0, v1), "!neq('"+v0+"', '"+v1+"')")
- t.ok(cmp(v0, "==", v1), "cmp("+v0+"=="+v1+")")
- t.ok(!cmp(v0, "!=", v1), "!cmp("+v0+"!="+v1+")")
- t.ok(!cmp(v0, "===", v1), "!cmp("+v0+"==="+v1+")")
- t.ok(cmp(v0, "!==", v1), "cmp("+v0+"!=="+v1+")")
- t.ok(!gt(v0, v1), "!gt('"+v0+"', '"+v1+"')")
- t.ok(gte(v0, v1), "gte('"+v0+"', '"+v1+"')")
- t.ok(!lt(v0, v1), "!lt('"+v0+"', '"+v1+"')")
- t.ok(lte(v0, v1), "lte('"+v0+"', '"+v1+"')")
- })
- t.end()
-})
-
-
-test("\nrange tests", function (t) {
-// [range, version]
-// version should be included by range
-; [ ["1.0.0 - 2.0.0", "1.2.3"]
- , ["1.0.0", "1.0.0"]
- , [">=*", "0.2.4"]
- , ["", "1.0.0"]
- , ["*", "1.2.3"]
- , ["*", "v1.2.3-foo"]
- , [">=1.0.0", "1.0.0"]
- , [">=1.0.0", "1.0.1"]
- , [">=1.0.0", "1.1.0"]
- , [">1.0.0", "1.0.1"]
- , [">1.0.0", "1.1.0"]
- , ["<=2.0.0", "2.0.0"]
- , ["<=2.0.0", "1.9999.9999"]
- , ["<=2.0.0", "0.2.9"]
- , ["<2.0.0", "1.9999.9999"]
- , ["<2.0.0", "0.2.9"]
- , [">= 1.0.0", "1.0.0"]
- , [">= 1.0.0", "1.0.1"]
- , [">= 1.0.0", "1.1.0"]
- , ["> 1.0.0", "1.0.1"]
- , ["> 1.0.0", "1.1.0"]
- , ["<= 2.0.0", "2.0.0"]
- , ["<= 2.0.0", "1.9999.9999"]
- , ["<= 2.0.0", "0.2.9"]
- , ["< 2.0.0", "1.9999.9999"]
- , ["<\t2.0.0", "0.2.9"]
- , [">=0.1.97", "v0.1.97"]
- , [">=0.1.97", "0.1.97"]
- , ["0.1.20 || 1.2.4", "1.2.4"]
- , [">=0.2.3 || <0.0.1", "0.0.0"]
- , [">=0.2.3 || <0.0.1", "0.2.3"]
- , [">=0.2.3 || <0.0.1", "0.2.4"]
- , ["||", "1.3.4"]
- , ["2.x.x", "2.1.3"]
- , ["1.2.x", "1.2.3"]
- , ["1.2.x || 2.x", "2.1.3"]
- , ["1.2.x || 2.x", "1.2.3"]
- , ["x", "1.2.3"]
- , ["2.*.*", "2.1.3"]
- , ["1.2.*", "1.2.3"]
- , ["1.2.* || 2.*", "2.1.3"]
- , ["1.2.* || 2.*", "1.2.3"]
- , ["*", "1.2.3"]
- , ["2", "2.1.2"]
- , ["2.3", "2.3.1"]
- , ["~2.4", "2.4.0"] // >=2.4.0 <2.5.0
- , ["~2.4", "2.4.5"]
- , ["~>3.2.1", "3.2.2"] // >=3.2.1 <3.3.0
- , ["~1", "1.2.3"] // >=1.0.0 <2.0.0
- , ["~>1", "1.2.3"]
- , ["~> 1", "1.2.3"]
- , ["~1.0", "1.0.2"] // >=1.0.0 <1.1.0
- , ["~ 1.0", "1.0.2"]
- , ["~ 1.0.3", "1.0.12"]
- , [">=1", "1.0.0"]
- , [">= 1", "1.0.0"]
- , ["<1.2", "1.1.1"]
- , ["< 1.2", "1.1.1"]
- , ["1", "1.0.0beta"]
- , ["~v0.5.4-pre", "0.5.5"]
- , ["~v0.5.4-pre", "0.5.4"]
- , ["=0.7.x", "0.7.2"]
- , [">=0.7.x", "0.7.2"]
- , ["=0.7.x", "0.7.0-asdf"]
- , [">=0.7.x", "0.7.0-asdf"]
- , ["<=0.7.x", "0.6.2"]
- , ["~1.2.1 >=1.2.3", "1.2.3"]
- , ["~1.2.1 =1.2.3", "1.2.3"]
- , ["~1.2.1 1.2.3", "1.2.3"]
- , ['~1.2.1 >=1.2.3 1.2.3', '1.2.3']
- , ['~1.2.1 1.2.3 >=1.2.3', '1.2.3']
- , ['~1.2.1 1.2.3', '1.2.3']
- , ['>=1.2.1 1.2.3', '1.2.3']
- , ['1.2.3 >=1.2.1', '1.2.3']
- , ['>=1.2.3 >=1.2.1', '1.2.3']
- , ['>=1.2.1 >=1.2.3', '1.2.3']
- ].forEach(function (v) {
- t.ok(satisfies(v[1], v[0]), v[0]+" satisfied by "+v[1])
- })
- t.end()
-})
-
-test("\nnegative range tests", function (t) {
-// [range, version]
-// version should not be included by range
-; [ ["1.0.0 - 2.0.0", "2.2.3"]
- , ["1.0.0", "1.0.1"]
- , [">=1.0.0", "0.0.0"]
- , [">=1.0.0", "0.0.1"]
- , [">=1.0.0", "0.1.0"]
- , [">1.0.0", "0.0.1"]
- , [">1.0.0", "0.1.0"]
- , ["<=2.0.0", "3.0.0"]
- , ["<=2.0.0", "2.9999.9999"]
- , ["<=2.0.0", "2.2.9"]
- , ["<2.0.0", "2.9999.9999"]
- , ["<2.0.0", "2.2.9"]
- , [">=0.1.97", "v0.1.93"]
- , [">=0.1.97", "0.1.93"]
- , ["0.1.20 || 1.2.4", "1.2.3"]
- , [">=0.2.3 || <0.0.1", "0.0.3"]
- , [">=0.2.3 || <0.0.1", "0.2.2"]
- , ["2.x.x", "1.1.3"]
- , ["2.x.x", "3.1.3"]
- , ["1.2.x", "1.3.3"]
- , ["1.2.x || 2.x", "3.1.3"]
- , ["1.2.x || 2.x", "1.1.3"]
- , ["2.*.*", "1.1.3"]
- , ["2.*.*", "3.1.3"]
- , ["1.2.*", "1.3.3"]
- , ["1.2.* || 2.*", "3.1.3"]
- , ["1.2.* || 2.*", "1.1.3"]
- , ["2", "1.1.2"]
- , ["2.3", "2.4.1"]
- , ["~2.4", "2.5.0"] // >=2.4.0 <2.5.0
- , ["~2.4", "2.3.9"]
- , ["~>3.2.1", "3.3.2"] // >=3.2.1 <3.3.0
- , ["~>3.2.1", "3.2.0"] // >=3.2.1 <3.3.0
- , ["~1", "0.2.3"] // >=1.0.0 <2.0.0
- , ["~>1", "2.2.3"]
- , ["~1.0", "1.1.0"] // >=1.0.0 <1.1.0
- , ["<1", "1.0.0"]
- , [">=1.2", "1.1.1"]
- , ["1", "2.0.0beta"]
- , ["~v0.5.4-beta", "0.5.4-alpha"]
- , ["<1", "1.0.0beta"]
- , ["< 1", "1.0.0beta"]
- , ["=0.7.x", "0.8.2"]
- , [">=0.7.x", "0.6.2"]
- , ["<=0.7.x", "0.7.2"]
- ].forEach(function (v) {
- t.ok(!satisfies(v[1], v[0]), v[0]+" not satisfied by "+v[1])
- })
- t.end()
-})
-
-test("\nincrement versions test", function (t) {
-// [version, inc, result]
-// inc(version, inc) -> result
-; [ [ "1.2.3", "major", "2.0.0" ]
- , [ "1.2.3", "minor", "1.3.0" ]
- , [ "1.2.3", "patch", "1.2.4" ]
- , [ "1.2.3", "build", "1.2.3-1" ]
- , [ "1.2.3-4", "build", "1.2.3-5" ]
- , [ "1.2.3tag", "major", "2.0.0" ]
- , [ "1.2.3-tag", "major", "2.0.0" ]
- , [ "1.2.3tag", "build", "1.2.3-1" ]
- , [ "1.2.3-tag", "build", "1.2.3-1" ]
- , [ "1.2.3-4-tag", "build", "1.2.3-5" ]
- , [ "1.2.3-4tag", "build", "1.2.3-5" ]
- , [ "1.2.3", "fake", null ]
- , [ "fake", "major", null ]
- ].forEach(function (v) {
- t.equal(inc(v[0], v[1]), v[2], "inc("+v[0]+", "+v[1]+") === "+v[2])
- })
-
- t.end()
-})
-
-test("\nreplace stars test", function (t) {
-// replace stars with ""
-; [ [ "", "" ]
- , [ "*", "" ]
- , [ "> *", "" ]
- , [ "<*", "" ]
- , [ " >= *", "" ]
- , [ "* || 1.2.3", " || 1.2.3" ]
- ].forEach(function (v) {
- t.equal(replaceStars(v[0]), v[1], "replaceStars("+v[0]+") === "+v[1])
- })
-
- t.end()
-})
-
-test("\nvalid range test", function (t) {
-// [range, result]
-// validRange(range) -> result
-// translate ranges into their canonical form
-; [ ["1.0.0 - 2.0.0", ">=1.0.0 <=2.0.0"]
- , ["1.0.0", "1.0.0"]
- , [">=*", ""]
- , ["", ""]
- , ["*", ""]
- , ["*", ""]
- , [">=1.0.0", ">=1.0.0"]
- , [">1.0.0", ">1.0.0"]
- , ["<=2.0.0", "<=2.0.0"]
- , ["1", ">=1.0.0- <2.0.0-"]
- , ["<=2.0.0", "<=2.0.0"]
- , ["<=2.0.0", "<=2.0.0"]
- , ["<2.0.0", "<2.0.0"]
- , ["<2.0.0", "<2.0.0"]
- , [">= 1.0.0", ">=1.0.0"]
- , [">= 1.0.0", ">=1.0.0"]
- , [">= 1.0.0", ">=1.0.0"]
- , ["> 1.0.0", ">1.0.0"]
- , ["> 1.0.0", ">1.0.0"]
- , ["<= 2.0.0", "<=2.0.0"]
- , ["<= 2.0.0", "<=2.0.0"]
- , ["<= 2.0.0", "<=2.0.0"]
- , ["< 2.0.0", "<2.0.0"]
- , ["< 2.0.0", "<2.0.0"]
- , [">=0.1.97", ">=0.1.97"]
- , [">=0.1.97", ">=0.1.97"]
- , ["0.1.20 || 1.2.4", "0.1.20||1.2.4"]
- , [">=0.2.3 || <0.0.1", ">=0.2.3||<0.0.1"]
- , [">=0.2.3 || <0.0.1", ">=0.2.3||<0.0.1"]
- , [">=0.2.3 || <0.0.1", ">=0.2.3||<0.0.1"]
- , ["||", "||"]
- , ["2.x.x", ">=2.0.0- <3.0.0-"]
- , ["1.2.x", ">=1.2.0- <1.3.0-"]
- , ["1.2.x || 2.x", ">=1.2.0- <1.3.0-||>=2.0.0- <3.0.0-"]
- , ["1.2.x || 2.x", ">=1.2.0- <1.3.0-||>=2.0.0- <3.0.0-"]
- , ["x", ""]
- , ["2.*.*", null]
- , ["1.2.*", null]
- , ["1.2.* || 2.*", null]
- , ["1.2.* || 2.*", null]
- , ["*", ""]
- , ["2", ">=2.0.0- <3.0.0-"]
- , ["2.3", ">=2.3.0- <2.4.0-"]
- , ["~2.4", ">=2.4.0- <2.5.0-"]
- , ["~2.4", ">=2.4.0- <2.5.0-"]
- , ["~>3.2.1", ">=3.2.1- <3.3.0-"]
- , ["~1", ">=1.0.0- <2.0.0-"]
- , ["~>1", ">=1.0.0- <2.0.0-"]
- , ["~> 1", ">=1.0.0- <2.0.0-"]
- , ["~1.0", ">=1.0.0- <1.1.0-"]
- , ["~ 1.0", ">=1.0.0- <1.1.0-"]
- , ["<1", "<1.0.0-"]
- , ["< 1", "<1.0.0-"]
- , [">=1", ">=1.0.0-"]
- , [">= 1", ">=1.0.0-"]
- , ["<1.2", "<1.2.0-"]
- , ["< 1.2", "<1.2.0-"]
- , ["1", ">=1.0.0- <2.0.0-"]
- ].forEach(function (v) {
- t.equal(validRange(v[0]), v[1], "validRange("+v[0]+") === "+v[1])
- })
-
- t.end()
-})
-
-test("\ncomparators test", function (t) {
-// [range, comparators]
-// turn range into a set of individual comparators
-; [ ["1.0.0 - 2.0.0", [[">=1.0.0", "<=2.0.0"]] ]
- , ["1.0.0", [["1.0.0"]] ]
- , [">=*", [[">=0.0.0-"]] ]
- , ["", [[""]]]
- , ["*", [[""]] ]
- , ["*", [[""]] ]
- , [">=1.0.0", [[">=1.0.0"]] ]
- , [">=1.0.0", [[">=1.0.0"]] ]
- , [">=1.0.0", [[">=1.0.0"]] ]
- , [">1.0.0", [[">1.0.0"]] ]
- , [">1.0.0", [[">1.0.0"]] ]
- , ["<=2.0.0", [["<=2.0.0"]] ]
- , ["1", [[">=1.0.0-", "<2.0.0-"]] ]
- , ["<=2.0.0", [["<=2.0.0"]] ]
- , ["<=2.0.0", [["<=2.0.0"]] ]
- , ["<2.0.0", [["<2.0.0"]] ]
- , ["<2.0.0", [["<2.0.0"]] ]
- , [">= 1.0.0", [[">=1.0.0"]] ]
- , [">= 1.0.0", [[">=1.0.0"]] ]
- , [">= 1.0.0", [[">=1.0.0"]] ]
- , ["> 1.0.0", [[">1.0.0"]] ]
- , ["> 1.0.0", [[">1.0.0"]] ]
- , ["<= 2.0.0", [["<=2.0.0"]] ]
- , ["<= 2.0.0", [["<=2.0.0"]] ]
- , ["<= 2.0.0", [["<=2.0.0"]] ]
- , ["< 2.0.0", [["<2.0.0"]] ]
- , ["<\t2.0.0", [["<2.0.0"]] ]
- , [">=0.1.97", [[">=0.1.97"]] ]
- , [">=0.1.97", [[">=0.1.97"]] ]
- , ["0.1.20 || 1.2.4", [["0.1.20"], ["1.2.4"]] ]
- , [">=0.2.3 || <0.0.1", [[">=0.2.3"], ["<0.0.1"]] ]
- , [">=0.2.3 || <0.0.1", [[">=0.2.3"], ["<0.0.1"]] ]
- , [">=0.2.3 || <0.0.1", [[">=0.2.3"], ["<0.0.1"]] ]
- , ["||", [[""], [""]] ]
- , ["2.x.x", [[">=2.0.0-", "<3.0.0-"]] ]
- , ["1.2.x", [[">=1.2.0-", "<1.3.0-"]] ]
- , ["1.2.x || 2.x", [[">=1.2.0-", "<1.3.0-"], [">=2.0.0-", "<3.0.0-"]] ]
- , ["1.2.x || 2.x", [[">=1.2.0-", "<1.3.0-"], [">=2.0.0-", "<3.0.0-"]] ]
- , ["x", [[""]] ]
- , ["2.*.*", [[">=2.0.0-", "<3.0.0-"]] ]
- , ["1.2.*", [[">=1.2.0-", "<1.3.0-"]] ]
- , ["1.2.* || 2.*", [[">=1.2.0-", "<1.3.0-"], [">=2.0.0-", "<3.0.0-"]] ]
- , ["1.2.* || 2.*", [[">=1.2.0-", "<1.3.0-"], [">=2.0.0-", "<3.0.0-"]] ]
- , ["*", [[""]] ]
- , ["2", [[">=2.0.0-", "<3.0.0-"]] ]
- , ["2.3", [[">=2.3.0-", "<2.4.0-"]] ]
- , ["~2.4", [[">=2.4.0-", "<2.5.0-"]] ]
- , ["~2.4", [[">=2.4.0-", "<2.5.0-"]] ]
- , ["~>3.2.1", [[">=3.2.1-", "<3.3.0-"]] ]
- , ["~1", [[">=1.0.0-", "<2.0.0-"]] ]
- , ["~>1", [[">=1.0.0-", "<2.0.0-"]] ]
- , ["~> 1", [[">=1.0.0-", "<2.0.0-"]] ]
- , ["~1.0", [[">=1.0.0-", "<1.1.0-"]] ]
- , ["~ 1.0", [[">=1.0.0-", "<1.1.0-"]] ]
- , ["~ 1.0.3", [[">=1.0.3-", "<1.1.0-"]] ]
- , ["~> 1.0.3", [[">=1.0.3-", "<1.1.0-"]] ]
- , ["<1", [["<1.0.0-"]] ]
- , ["< 1", [["<1.0.0-"]] ]
- , [">=1", [[">=1.0.0-"]] ]
- , [">= 1", [[">=1.0.0-"]] ]
- , ["<1.2", [["<1.2.0-"]] ]
- , ["< 1.2", [["<1.2.0-"]] ]
- , ["1", [[">=1.0.0-", "<2.0.0-"]] ]
- , ["1 2", [[">=1.0.0-", "<2.0.0-", ">=2.0.0-", "<3.0.0-"]] ]
- ].forEach(function (v) {
- t.equivalent(toComparators(v[0]), v[1], "toComparators("+v[0]+") === "+JSON.stringify(v[1]))
- })
-
- t.end()
-})
diff --git a/deps/npm/node_modules/semver/test/amd.js b/deps/npm/node_modules/semver/test/amd.js
new file mode 100644
index 000000000..a6041341b
--- /dev/null
+++ b/deps/npm/node_modules/semver/test/amd.js
@@ -0,0 +1,15 @@
+var tap = require('tap');
+var test = tap.test;
+
+test('amd', function(t) {
+ global.define = define;
+ define.amd = true;
+ var defined = null;
+ function define(stuff) {
+ defined = stuff;
+ }
+ var fromRequire = require('../');
+ t.ok(defined, 'amd function called');
+ t.equal(fromRequire, defined, 'amd stuff same as require stuff');
+ t.end();
+});
diff --git a/deps/npm/node_modules/semver/test/gtr.js b/deps/npm/node_modules/semver/test/gtr.js
new file mode 100644
index 000000000..cb6199efc
--- /dev/null
+++ b/deps/npm/node_modules/semver/test/gtr.js
@@ -0,0 +1,173 @@
+var tap = require('tap');
+var test = tap.test;
+var semver = require('../semver.js');
+var gtr = semver.gtr;
+
+test('\ngtr tests', function(t) {
+ // [range, version, loose]
+ // Version should be greater than range
+ [
+ ['~1.2.2', '1.3.0'],
+ ['~0.6.1-1', '0.7.1-1'],
+ ['1.0.0 - 2.0.0', '2.0.1'],
+ ['1.0.0', '1.0.1-beta1'],
+ ['1.0.0', '2.0.0'],
+ ['<=2.0.0', '2.1.1'],
+ ['<=2.0.0', '3.2.9'],
+ ['<2.0.0', '2.0.0'],
+ ['0.1.20 || 1.2.4', '1.2.5'],
+ ['2.x.x', '3.0.0'],
+ ['1.2.x', '1.3.0'],
+ ['1.2.x || 2.x', '3.0.0'],
+ ['2.*.*', '5.0.1'],
+ ['1.2.*', '1.3.3'],
+ ['1.2.* || 2.*', '4.0.0'],
+ ['2', '3.0.0'],
+ ['2.3', '2.4.2'],
+ ['~2.4', '2.5.0'], // >=2.4.0 <2.5.0
+ ['~2.4', '2.5.5'],
+ ['~>3.2.1', '3.3.0'], // >=3.2.1 <3.3.0
+ ['~1', '2.2.3'], // >=1.0.0 <2.0.0
+ ['~>1', '2.2.4'],
+ ['~> 1', '3.2.3'],
+ ['~1.0', '1.1.2'], // >=1.0.0 <1.1.0
+ ['~ 1.0', '1.1.0'],
+ ['<1.2', '1.2.0'],
+ ['< 1.2', '1.2.1'],
+ ['1', '2.0.0beta', true],
+ ['~v0.5.4-pre', '0.6.0'],
+ ['~v0.5.4-pre', '0.6.1-pre'],
+ ['=0.7.x', '0.8.0'],
+ ['=0.7.x', '0.8.0-asdf'],
+ ['<=0.7.x', '0.7.0'],
+ ['~1.2.2', '1.3.0'],
+ ['1.0.0 - 2.0.0', '2.2.3'],
+ ['1.0.0', '1.0.1'],
+ ['<=2.0.0', '3.0.0'],
+ ['<=2.0.0', '2.9999.9999'],
+ ['<=2.0.0', '2.2.9'],
+ ['<2.0.0', '2.9999.9999'],
+ ['<2.0.0', '2.2.9'],
+ ['2.x.x', '3.1.3'],
+ ['1.2.x', '1.3.3'],
+ ['1.2.x || 2.x', '3.1.3'],
+ ['2.*.*', '3.1.3'],
+ ['1.2.*', '1.3.3'],
+ ['1.2.* || 2.*', '3.1.3'],
+ ['2', '3.1.2'],
+ ['2.3', '2.4.1'],
+ ['~2.4', '2.5.0'], // >=2.4.0 <2.5.0
+ ['~>3.2.1', '3.3.2'], // >=3.2.1 <3.3.0
+ ['~1', '2.2.3'], // >=1.0.0 <2.0.0
+ ['~>1', '2.2.3'],
+ ['~1.0', '1.1.0'], // >=1.0.0 <1.1.0
+ ['<1', '1.0.0'],
+ ['1', '2.0.0beta', true],
+ ['<1', '1.0.0beta', true],
+ ['< 1', '1.0.0beta', true],
+ ['=0.7.x', '0.8.2'],
+ ['<=0.7.x', '0.7.2']
+ ].forEach(function(tuple) {
+ var range = tuple[0];
+ var version = tuple[1];
+ var loose = tuple[2] || false;
+ var msg = 'gtr(' + version + ', ' + range + ', ' + loose + ')';
+ t.ok(gtr(version, range, loose), msg);
+ });
+ t.end();
+});
+
+test('\nnegative gtr tests', function(t) {
+ // [range, version, loose]
+ // Version should NOT be greater than range
+ [
+ ['~0.6.1-1', '0.6.1-1'],
+ ['1.0.0 - 2.0.0', '1.2.3'],
+ ['1.0.0 - 2.0.0', '0.9.9'],
+ ['1.0.0', '1.0.0'],
+ ['>=*', '0.2.4'],
+ ['', '1.0.0', true],
+ ['*', '1.2.3'],
+ ['*', 'v1.2.3-foo'],
+ ['>=1.0.0', '1.0.0'],
+ ['>=1.0.0', '1.0.1'],
+ ['>=1.0.0', '1.1.0'],
+ ['>1.0.0', '1.0.1'],
+ ['>1.0.0', '1.1.0'],
+ ['<=2.0.0', '2.0.0'],
+ ['<=2.0.0', '1.9999.9999'],
+ ['<=2.0.0', '0.2.9'],
+ ['<2.0.0', '1.9999.9999'],
+ ['<2.0.0', '0.2.9'],
+ ['>= 1.0.0', '1.0.0'],
+ ['>= 1.0.0', '1.0.1'],
+ ['>= 1.0.0', '1.1.0'],
+ ['> 1.0.0', '1.0.1'],
+ ['> 1.0.0', '1.1.0'],
+ ['<= 2.0.0', '2.0.0'],
+ ['<= 2.0.0', '1.9999.9999'],
+ ['<= 2.0.0', '0.2.9'],
+ ['< 2.0.0', '1.9999.9999'],
+ ['<\t2.0.0', '0.2.9'],
+ ['>=0.1.97', 'v0.1.97'],
+ ['>=0.1.97', '0.1.97'],
+ ['0.1.20 || 1.2.4', '1.2.4'],
+ ['0.1.20 || >1.2.4', '1.2.4'],
+ ['0.1.20 || 1.2.4', '1.2.3'],
+ ['0.1.20 || 1.2.4', '0.1.20'],
+ ['>=0.2.3 || <0.0.1', '0.0.0'],
+ ['>=0.2.3 || <0.0.1', '0.2.3'],
+ ['>=0.2.3 || <0.0.1', '0.2.4'],
+ ['||', '1.3.4'],
+ ['2.x.x', '2.1.3'],
+ ['1.2.x', '1.2.3'],
+ ['1.2.x || 2.x', '2.1.3'],
+ ['1.2.x || 2.x', '1.2.3'],
+ ['x', '1.2.3'],
+ ['2.*.*', '2.1.3'],
+ ['1.2.*', '1.2.3'],
+ ['1.2.* || 2.*', '2.1.3'],
+ ['1.2.* || 2.*', '1.2.3'],
+ ['1.2.* || 2.*', '1.2.3'],
+ ['*', '1.2.3'],
+ ['2', '2.1.2'],
+ ['2.3', '2.3.1'],
+ ['~2.4', '2.4.0'], // >=2.4.0 <2.5.0
+ ['~2.4', '2.4.5'],
+ ['~>3.2.1', '3.2.2'], // >=3.2.1 <3.3.0
+ ['~1', '1.2.3'], // >=1.0.0 <2.0.0
+ ['~>1', '1.2.3'],
+ ['~> 1', '1.2.3'],
+ ['~1.0', '1.0.2'], // >=1.0.0 <1.1.0
+ ['~ 1.0', '1.0.2'],
+ ['>=1', '1.0.0'],
+ ['>= 1', '1.0.0'],
+ ['<1.2', '1.1.1'],
+ ['< 1.2', '1.1.1'],
+ ['1', '1.0.0beta', true],
+ ['~v0.5.4-pre', '0.5.5'],
+ ['~v0.5.4-pre', '0.5.4'],
+ ['=0.7.x', '0.7.2'],
+ ['>=0.7.x', '0.7.2'],
+ ['=0.7.x', '0.7.0-asdf'],
+ ['>=0.7.x', '0.7.0-asdf'],
+ ['<=0.7.x', '0.6.2'],
+ ['>0.2.3 >0.2.4 <=0.2.5', '0.2.5'],
+ ['>=0.2.3 <=0.2.4', '0.2.4'],
+ ['1.0.0 - 2.0.0', '2.0.0'],
+ ['^1', '0.0.0-0'],
+ ['^3.0.0', '2.0.0'],
+ ['^1.0.0 || ~2.0.1', '2.0.0'],
+ ['^0.1.0 || ~3.0.1 || 5.0.0', '3.2.0'],
+ ['^0.1.0 || ~3.0.1 || 5.0.0', '1.0.0beta', true],
+ ['^0.1.0 || ~3.0.1 || 5.0.0', '5.0.0-0', true],
+ ['^0.1.0 || ~3.0.1 || >4 <=5.0.0', '3.5.0']
+ ].forEach(function(tuple) {
+ var range = tuple[0];
+ var version = tuple[1];
+ var loose = tuple[2] || false;
+ var msg = '!gtr(' + version + ', ' + range + ', ' + loose + ')';
+ t.notOk(gtr(version, range, loose), msg);
+ });
+ t.end();
+});
diff --git a/deps/npm/node_modules/semver/test/index.js b/deps/npm/node_modules/semver/test/index.js
new file mode 100644
index 000000000..e6c9cefb0
--- /dev/null
+++ b/deps/npm/node_modules/semver/test/index.js
@@ -0,0 +1,556 @@
+var tap = require('tap');
+var test = tap.test;
+var semver = require('../semver.js');
+var eq = semver.eq;
+var gt = semver.gt;
+var lt = semver.lt;
+var neq = semver.neq;
+var cmp = semver.cmp;
+var gte = semver.gte;
+var lte = semver.lte;
+var satisfies = semver.satisfies;
+var validRange = semver.validRange;
+var inc = semver.inc;
+var replaceStars = semver.replaceStars;
+var toComparators = semver.toComparators;
+var SemVer = semver.SemVer;
+var Range = semver.Range;
+
+test('\ncomparison tests', function(t) {
+ // [version1, version2]
+ // version1 should be greater than version2
+ [['0.0.0', '0.0.0-foo'],
+ ['0.0.1', '0.0.0'],
+ ['1.0.0', '0.9.9'],
+ ['0.10.0', '0.9.0'],
+ ['0.99.0', '0.10.0'],
+ ['2.0.0', '1.2.3'],
+ ['v0.0.0', '0.0.0-foo', true],
+ ['v0.0.1', '0.0.0', true],
+ ['v1.0.0', '0.9.9', true],
+ ['v0.10.0', '0.9.0', true],
+ ['v0.99.0', '0.10.0', true],
+ ['v2.0.0', '1.2.3', true],
+ ['0.0.0', 'v0.0.0-foo', true],
+ ['0.0.1', 'v0.0.0', true],
+ ['1.0.0', 'v0.9.9', true],
+ ['0.10.0', 'v0.9.0', true],
+ ['0.99.0', 'v0.10.0', true],
+ ['2.0.0', 'v1.2.3', true],
+ ['1.2.3', '1.2.3-asdf'],
+ ['1.2.3', '1.2.3-4'],
+ ['1.2.3', '1.2.3-4-foo'],
+ ['1.2.3-5-foo', '1.2.3-5'],
+ ['1.2.3-5', '1.2.3-4'],
+ ['1.2.3-5-foo', '1.2.3-5-Foo'],
+ ['3.0.0', '2.7.2+asdf'],
+ ['1.2.3-a.10', '1.2.3-a.5'],
+ ['1.2.3-a.b', '1.2.3-a.5'],
+ ['1.2.3-a.b', '1.2.3-a'],
+ ['1.2.3-a.b.c.10.d.5', '1.2.3-a.b.c.5.d.100']
+ ].forEach(function(v) {
+ var v0 = v[0];
+ var v1 = v[1];
+ var loose = v[2];
+ t.ok(gt(v0, v1, loose), "gt('" + v0 + "', '" + v1 + "')");
+ t.ok(lt(v1, v0, loose), "lt('" + v1 + "', '" + v0 + "')");
+ t.ok(!gt(v1, v0, loose), "!gt('" + v1 + "', '" + v0 + "')");
+ t.ok(!lt(v0, v1, loose), "!lt('" + v0 + "', '" + v1 + "')");
+ t.ok(eq(v0, v0, loose), "eq('" + v0 + "', '" + v0 + "')");
+ t.ok(eq(v1, v1, loose), "eq('" + v1 + "', '" + v1 + "')");
+ t.ok(neq(v0, v1, loose), "neq('" + v0 + "', '" + v1 + "')");
+ t.ok(cmp(v1, '==', v1, loose), "cmp('" + v1 + "' == '" + v1 + "')");
+ t.ok(cmp(v0, '>=', v1, loose), "cmp('" + v0 + "' >= '" + v1 + "')");
+ t.ok(cmp(v1, '<=', v0, loose), "cmp('" + v1 + "' <= '" + v0 + "')");
+ t.ok(cmp(v0, '!=', v1, loose), "cmp('" + v0 + "' != '" + v1 + "')");
+ });
+ t.end();
+});
+
+test('\nequality tests', function(t) {
+ // [version1, version2]
+ // version1 should be equivalent to version2
+ [['1.2.3', 'v1.2.3', true],
+ ['1.2.3', '=1.2.3', true],
+ ['1.2.3', 'v 1.2.3', true],
+ ['1.2.3', '= 1.2.3', true],
+ ['1.2.3', ' v1.2.3', true],
+ ['1.2.3', ' =1.2.3', true],
+ ['1.2.3', ' v 1.2.3', true],
+ ['1.2.3', ' = 1.2.3', true],
+ ['1.2.3-0', 'v1.2.3-0', true],
+ ['1.2.3-0', '=1.2.3-0', true],
+ ['1.2.3-0', 'v 1.2.3-0', true],
+ ['1.2.3-0', '= 1.2.3-0', true],
+ ['1.2.3-0', ' v1.2.3-0', true],
+ ['1.2.3-0', ' =1.2.3-0', true],
+ ['1.2.3-0', ' v 1.2.3-0', true],
+ ['1.2.3-0', ' = 1.2.3-0', true],
+ ['1.2.3-1', 'v1.2.3-1', true],
+ ['1.2.3-1', '=1.2.3-1', true],
+ ['1.2.3-1', 'v 1.2.3-1', true],
+ ['1.2.3-1', '= 1.2.3-1', true],
+ ['1.2.3-1', ' v1.2.3-1', true],
+ ['1.2.3-1', ' =1.2.3-1', true],
+ ['1.2.3-1', ' v 1.2.3-1', true],
+ ['1.2.3-1', ' = 1.2.3-1', true],
+ ['1.2.3-beta', 'v1.2.3-beta', true],
+ ['1.2.3-beta', '=1.2.3-beta', true],
+ ['1.2.3-beta', 'v 1.2.3-beta', true],
+ ['1.2.3-beta', '= 1.2.3-beta', true],
+ ['1.2.3-beta', ' v1.2.3-beta', true],
+ ['1.2.3-beta', ' =1.2.3-beta', true],
+ ['1.2.3-beta', ' v 1.2.3-beta', true],
+ ['1.2.3-beta', ' = 1.2.3-beta', true],
+ ['1.2.3-beta+build', ' = 1.2.3-beta+otherbuild', true],
+ ['1.2.3+build', ' = 1.2.3+otherbuild', true],
+ ['1.2.3-beta+build', '1.2.3-beta+otherbuild'],
+ ['1.2.3+build', '1.2.3+otherbuild'],
+ [' v1.2.3+build', '1.2.3+otherbuild']
+ ].forEach(function(v) {
+ var v0 = v[0];
+ var v1 = v[1];
+ var loose = v[2];
+ t.ok(eq(v0, v1, loose), "eq('" + v0 + "', '" + v1 + "')");
+ t.ok(!neq(v0, v1, loose), "!neq('" + v0 + "', '" + v1 + "')");
+ t.ok(cmp(v0, '==', v1, loose), 'cmp(' + v0 + '==' + v1 + ')');
+ t.ok(!cmp(v0, '!=', v1, loose), '!cmp(' + v0 + '!=' + v1 + ')');
+ t.ok(!cmp(v0, '===', v1, loose), '!cmp(' + v0 + '===' + v1 + ')');
+ t.ok(cmp(v0, '!==', v1, loose), 'cmp(' + v0 + '!==' + v1 + ')');
+ t.ok(!gt(v0, v1, loose), "!gt('" + v0 + "', '" + v1 + "')");
+ t.ok(gte(v0, v1, loose), "gte('" + v0 + "', '" + v1 + "')");
+ t.ok(!lt(v0, v1, loose), "!lt('" + v0 + "', '" + v1 + "')");
+ t.ok(lte(v0, v1, loose), "lte('" + v0 + "', '" + v1 + "')");
+ });
+ t.end();
+});
+
+
+test('\nrange tests', function(t) {
+ // [range, version]
+ // version should be included by range
+ [['1.0.0 - 2.0.0', '1.2.3'],
+ ['1.0.0', '1.0.0'],
+ ['>=*', '0.2.4'],
+ ['', '1.0.0'],
+ ['*', '1.2.3'],
+ ['*', 'v1.2.3-foo', true],
+ ['>=1.0.0', '1.0.0'],
+ ['>=1.0.0', '1.0.1'],
+ ['>=1.0.0', '1.1.0'],
+ ['>1.0.0', '1.0.1'],
+ ['>1.0.0', '1.1.0'],
+ ['<=2.0.0', '2.0.0'],
+ ['<=2.0.0', '1.9999.9999'],
+ ['<=2.0.0', '0.2.9'],
+ ['<2.0.0', '1.9999.9999'],
+ ['<2.0.0', '0.2.9'],
+ ['>= 1.0.0', '1.0.0'],
+ ['>= 1.0.0', '1.0.1'],
+ ['>= 1.0.0', '1.1.0'],
+ ['> 1.0.0', '1.0.1'],
+ ['> 1.0.0', '1.1.0'],
+ ['<= 2.0.0', '2.0.0'],
+ ['<= 2.0.0', '1.9999.9999'],
+ ['<= 2.0.0', '0.2.9'],
+ ['< 2.0.0', '1.9999.9999'],
+ ['<\t2.0.0', '0.2.9'],
+ ['>=0.1.97', 'v0.1.97', true],
+ ['>=0.1.97', '0.1.97'],
+ ['0.1.20 || 1.2.4', '1.2.4'],
+ ['>=0.2.3 || <0.0.1', '0.0.0'],
+ ['>=0.2.3 || <0.0.1', '0.2.3'],
+ ['>=0.2.3 || <0.0.1', '0.2.4'],
+ ['||', '1.3.4'],
+ ['2.x.x', '2.1.3'],
+ ['1.2.x', '1.2.3'],
+ ['1.2.x || 2.x', '2.1.3'],
+ ['1.2.x || 2.x', '1.2.3'],
+ ['x', '1.2.3'],
+ ['2.*.*', '2.1.3'],
+ ['1.2.*', '1.2.3'],
+ ['1.2.* || 2.*', '2.1.3'],
+ ['1.2.* || 2.*', '1.2.3'],
+ ['*', '1.2.3'],
+ ['2', '2.1.2'],
+ ['2.3', '2.3.1'],
+ ['~2.4', '2.4.0'], // >=2.4.0 <2.5.0
+ ['~2.4', '2.4.5'],
+ ['~>3.2.1', '3.2.2'], // >=3.2.1 <3.3.0,
+ ['~1', '1.2.3'], // >=1.0.0 <2.0.0
+ ['~>1', '1.2.3'],
+ ['~> 1', '1.2.3'],
+ ['~1.0', '1.0.2'], // >=1.0.0 <1.1.0,
+ ['~ 1.0', '1.0.2'],
+ ['~ 1.0.3', '1.0.12'],
+ ['>=1', '1.0.0'],
+ ['>= 1', '1.0.0'],
+ ['<1.2', '1.1.1'],
+ ['< 1.2', '1.1.1'],
+ ['1', '1.0.0beta', true],
+ ['~v0.5.4-pre', '0.5.5'],
+ ['~v0.5.4-pre', '0.5.4'],
+ ['=0.7.x', '0.7.2'],
+ ['>=0.7.x', '0.7.2'],
+ ['=0.7.x', '0.7.0-asdf'],
+ ['>=0.7.x', '0.7.0-asdf'],
+ ['<=0.7.x', '0.6.2'],
+ ['~1.2.1 >=1.2.3', '1.2.3'],
+ ['~1.2.1 =1.2.3', '1.2.3'],
+ ['~1.2.1 1.2.3', '1.2.3'],
+ ['~1.2.1 >=1.2.3 1.2.3', '1.2.3'],
+ ['~1.2.1 1.2.3 >=1.2.3', '1.2.3'],
+ ['~1.2.1 1.2.3', '1.2.3'],
+ ['>=1.2.1 1.2.3', '1.2.3'],
+ ['1.2.3 >=1.2.1', '1.2.3'],
+ ['>=1.2.3 >=1.2.1', '1.2.3'],
+ ['>=1.2.1 >=1.2.3', '1.2.3'],
+ ['<=1.2.3', '1.2.3-beta'],
+ ['>1.2', '1.3.0-beta'],
+ ['>=1.2', '1.2.8'],
+ ['^1.2.3', '1.8.1'],
+ ['^1.2.3', '1.2.3-beta'],
+ ['^0.1.2', '0.1.2'],
+ ['^0.1', '0.1.2'],
+ ['^1.2', '1.4.2'],
+ ['^1.2 ^1', '1.4.2'],
+ ['^1.2', '1.2.0-pre'],
+ ['^1.2.3', '1.2.3-pre']
+ ].forEach(function(v) {
+ var range = v[0];
+ var ver = v[1];
+ var loose = v[2];
+ t.ok(satisfies(ver, range, loose), range + ' satisfied by ' + ver);
+ });
+ t.end();
+});
+
+test('\nnegative range tests', function(t) {
+ // [range, version]
+ // version should not be included by range
+ [['1.0.0 - 2.0.0', '2.2.3'],
+ ['1.0.0', '1.0.1'],
+ ['>=1.0.0', '0.0.0'],
+ ['>=1.0.0', '0.0.1'],
+ ['>=1.0.0', '0.1.0'],
+ ['>1.0.0', '0.0.1'],
+ ['>1.0.0', '0.1.0'],
+ ['<=2.0.0', '3.0.0'],
+ ['<=2.0.0', '2.9999.9999'],
+ ['<=2.0.0', '2.2.9'],
+ ['<2.0.0', '2.9999.9999'],
+ ['<2.0.0', '2.2.9'],
+ ['>=0.1.97', 'v0.1.93', true],
+ ['>=0.1.97', '0.1.93'],
+ ['0.1.20 || 1.2.4', '1.2.3'],
+ ['>=0.2.3 || <0.0.1', '0.0.3'],
+ ['>=0.2.3 || <0.0.1', '0.2.2'],
+ ['2.x.x', '1.1.3'],
+ ['2.x.x', '3.1.3'],
+ ['1.2.x', '1.3.3'],
+ ['1.2.x || 2.x', '3.1.3'],
+ ['1.2.x || 2.x', '1.1.3'],
+ ['2.*.*', '1.1.3'],
+ ['2.*.*', '3.1.3'],
+ ['1.2.*', '1.3.3'],
+ ['1.2.* || 2.*', '3.1.3'],
+ ['1.2.* || 2.*', '1.1.3'],
+ ['2', '1.1.2'],
+ ['2.3', '2.4.1'],
+ ['~2.4', '2.5.0'], // >=2.4.0 <2.5.0
+ ['~2.4', '2.3.9'],
+ ['~>3.2.1', '3.3.2'], // >=3.2.1 <3.3.0
+ ['~>3.2.1', '3.2.0'], // >=3.2.1 <3.3.0
+ ['~1', '0.2.3'], // >=1.0.0 <2.0.0
+ ['~>1', '2.2.3'],
+ ['~1.0', '1.1.0'], // >=1.0.0 <1.1.0
+ ['<1', '1.0.0'],
+ ['>=1.2', '1.1.1'],
+ ['1', '2.0.0beta', true],
+ ['~v0.5.4-beta', '0.5.4-alpha'],
+ ['<1', '1.0.0beta', true],
+ ['< 1', '1.0.0beta', true],
+ ['=0.7.x', '0.8.2'],
+ ['>=0.7.x', '0.6.2'],
+ ['<=0.7.x', '0.7.2'],
+ ['<1.2.3', '1.2.3-beta'],
+ ['=1.2.3', '1.2.3-beta'],
+ ['>1.2', '1.2.8'],
+ ['^1.2.3', '2.0.0-alpha'],
+ ['^1.2.3', '1.2.2'],
+ ['^1.2', '1.1.9'],
+ // invalid ranges never satisfied!
+ ['blerg', '1.2.3'],
+ ['git+https://user:password0123@github.com/foo', '123.0.0', true],
+ ['^1.2.3', '2.0.0-pre']
+ ].forEach(function(v) {
+ var range = v[0];
+ var ver = v[1];
+ var loose = v[2];
+ var found = satisfies(ver, range, loose);
+ t.ok(!found, ver + ' not satisfied by ' + range);
+ });
+ t.end();
+});
+
+test('\nincrement versions test', function(t) {
+ // [version, inc, result]
+ // inc(version, inc) -> result
+ [['1.2.3', 'major', '2.0.0'],
+ ['1.2.3', 'minor', '1.3.0'],
+ ['1.2.3', 'patch', '1.2.4'],
+ ['1.2.3tag', 'major', '2.0.0', true],
+ ['1.2.3-tag', 'major', '2.0.0'],
+ ['1.2.3', 'fake', null],
+ ['fake', 'major', null],
+ ['1.2.3', 'prerelease', '1.2.3-0'],
+ ['1.2.3-0', 'prerelease', '1.2.3-1'],
+ ['1.2.3-alpha.0', 'prerelease', '1.2.3-alpha.1'],
+ ['1.2.3-alpha.1', 'prerelease', '1.2.3-alpha.2'],
+ ['1.2.3-alpha.2', 'prerelease', '1.2.3-alpha.3'],
+ ['1.2.3-alpha.0.beta', 'prerelease', '1.2.3-alpha.1.beta'],
+ ['1.2.3-alpha.1.beta', 'prerelease', '1.2.3-alpha.2.beta'],
+ ['1.2.3-alpha.2.beta', 'prerelease', '1.2.3-alpha.3.beta'],
+ ['1.2.3-alpha.10.0.beta', 'prerelease', '1.2.3-alpha.10.1.beta'],
+ ['1.2.3-alpha.10.1.beta', 'prerelease', '1.2.3-alpha.10.2.beta'],
+ ['1.2.3-alpha.10.2.beta', 'prerelease', '1.2.3-alpha.10.3.beta'],
+ ['1.2.3-alpha.10.beta.0', 'prerelease', '1.2.3-alpha.10.beta.1'],
+ ['1.2.3-alpha.10.beta.1', 'prerelease', '1.2.3-alpha.10.beta.2'],
+ ['1.2.3-alpha.10.beta.2', 'prerelease', '1.2.3-alpha.10.beta.3'],
+ ['1.2.3-alpha.9.beta', 'prerelease', '1.2.3-alpha.10.beta'],
+ ['1.2.3-alpha.10.beta', 'prerelease', '1.2.3-alpha.11.beta'],
+ ['1.2.3-alpha.11.beta', 'prerelease', '1.2.3-alpha.12.beta']
+ ].forEach(function(v) {
+ var pre = v[0];
+ var what = v[1];
+ var wanted = v[2];
+ var loose = v[3];
+ var found = inc(pre, what, loose);
+ t.equal(found, wanted, 'inc(' + pre + ', ' + what + ') === ' + wanted);
+ });
+
+ t.end();
+});
+
+test('\nvalid range test', function(t) {
+ // [range, result]
+ // validRange(range) -> result
+ // translate ranges into their canonical form
+ [['1.0.0 - 2.0.0', '>=1.0.0 <=2.0.0'],
+ ['1.0.0', '1.0.0'],
+ ['>=*', '>=0.0.0-0'],
+ ['', '*'],
+ ['*', '*'],
+ ['*', '*'],
+ ['>=1.0.0', '>=1.0.0'],
+ ['>1.0.0', '>1.0.0'],
+ ['<=2.0.0', '<=2.0.0'],
+ ['1', '>=1.0.0-0 <2.0.0-0'],
+ ['<=2.0.0', '<=2.0.0'],
+ ['<=2.0.0', '<=2.0.0'],
+ ['<2.0.0', '<2.0.0-0'],
+ ['<2.0.0', '<2.0.0-0'],
+ ['>= 1.0.0', '>=1.0.0'],
+ ['>= 1.0.0', '>=1.0.0'],
+ ['>= 1.0.0', '>=1.0.0'],
+ ['> 1.0.0', '>1.0.0'],
+ ['> 1.0.0', '>1.0.0'],
+ ['<= 2.0.0', '<=2.0.0'],
+ ['<= 2.0.0', '<=2.0.0'],
+ ['<= 2.0.0', '<=2.0.0'],
+ ['< 2.0.0', '<2.0.0-0'],
+ ['< 2.0.0', '<2.0.0-0'],
+ ['>=0.1.97', '>=0.1.97'],
+ ['>=0.1.97', '>=0.1.97'],
+ ['0.1.20 || 1.2.4', '0.1.20||1.2.4'],
+ ['>=0.2.3 || <0.0.1', '>=0.2.3||<0.0.1-0'],
+ ['>=0.2.3 || <0.0.1', '>=0.2.3||<0.0.1-0'],
+ ['>=0.2.3 || <0.0.1', '>=0.2.3||<0.0.1-0'],
+ ['||', '||'],
+ ['2.x.x', '>=2.0.0-0 <3.0.0-0'],
+ ['1.2.x', '>=1.2.0-0 <1.3.0-0'],
+ ['1.2.x || 2.x', '>=1.2.0-0 <1.3.0-0||>=2.0.0-0 <3.0.0-0'],
+ ['1.2.x || 2.x', '>=1.2.0-0 <1.3.0-0||>=2.0.0-0 <3.0.0-0'],
+ ['x', '*'],
+ ['2.*.*', '>=2.0.0-0 <3.0.0-0'],
+ ['1.2.*', '>=1.2.0-0 <1.3.0-0'],
+ ['1.2.* || 2.*', '>=1.2.0-0 <1.3.0-0||>=2.0.0-0 <3.0.0-0'],
+ ['*', '*'],
+ ['2', '>=2.0.0-0 <3.0.0-0'],
+ ['2.3', '>=2.3.0-0 <2.4.0-0'],
+ ['~2.4', '>=2.4.0-0 <2.5.0-0'],
+ ['~2.4', '>=2.4.0-0 <2.5.0-0'],
+ ['~>3.2.1', '>=3.2.1-0 <3.3.0-0'],
+ ['~1', '>=1.0.0-0 <2.0.0-0'],
+ ['~>1', '>=1.0.0-0 <2.0.0-0'],
+ ['~> 1', '>=1.0.0-0 <2.0.0-0'],
+ ['~1.0', '>=1.0.0-0 <1.1.0-0'],
+ ['~ 1.0', '>=1.0.0-0 <1.1.0-0'],
+ ['^0', '>=0.0.0-0 <1.0.0-0'],
+ ['^ 1', '>=1.0.0-0 <2.0.0-0'],
+ ['^0.1', '>=0.1.0-0 <0.2.0-0'],
+ ['^1.0', '>=1.0.0-0 <2.0.0-0'],
+ ['^1.2', '>=1.2.0-0 <2.0.0-0'],
+ ['^0.0.1', '=0.0.1'],
+ ['^0.0.1-beta', '=0.0.1-beta'],
+ ['^0.1.2', '>=0.1.2-0 <0.2.0-0'],
+ ['^1.2.3', '>=1.2.3-0 <2.0.0-0'],
+ ['^1.2.3-beta.4', '>=1.2.3-beta.4 <2.0.0-0'],
+ ['<1', '<1.0.0-0'],
+ ['< 1', '<1.0.0-0'],
+ ['>=1', '>=1.0.0-0'],
+ ['>= 1', '>=1.0.0-0'],
+ ['<1.2', '<1.2.0-0'],
+ ['< 1.2', '<1.2.0-0'],
+ ['1', '>=1.0.0-0 <2.0.0-0'],
+ ['>01.02.03', '>1.2.3', true],
+ ['>01.02.03', null],
+ ['~1.2.3beta', '>=1.2.3-beta <1.3.0-0', true],
+ ['~1.2.3beta', null],
+ ['^ 1.2 ^ 1', '>=1.2.0-0 <2.0.0-0 >=1.0.0-0 <2.0.0-0']
+ ].forEach(function(v) {
+ var pre = v[0];
+ var wanted = v[1];
+ var loose = v[2];
+ var found = validRange(pre, loose);
+
+ t.equal(found, wanted, 'validRange(' + pre + ') === ' + wanted);
+ });
+
+ t.end();
+});
+
+test('\ncomparators test', function(t) {
+ // [range, comparators]
+ // turn range into a set of individual comparators
+ [['1.0.0 - 2.0.0', [['>=1.0.0', '<=2.0.0']]],
+ ['1.0.0', [['1.0.0']]],
+ ['>=*', [['>=0.0.0-0']]],
+ ['', [['']]],
+ ['*', [['']]],
+ ['*', [['']]],
+ ['>=1.0.0', [['>=1.0.0']]],
+ ['>=1.0.0', [['>=1.0.0']]],
+ ['>=1.0.0', [['>=1.0.0']]],
+ ['>1.0.0', [['>1.0.0']]],
+ ['>1.0.0', [['>1.0.0']]],
+ ['<=2.0.0', [['<=2.0.0']]],
+ ['1', [['>=1.0.0-0', '<2.0.0-0']]],
+ ['<=2.0.0', [['<=2.0.0']]],
+ ['<=2.0.0', [['<=2.0.0']]],
+ ['<2.0.0', [['<2.0.0-0']]],
+ ['<2.0.0', [['<2.0.0-0']]],
+ ['>= 1.0.0', [['>=1.0.0']]],
+ ['>= 1.0.0', [['>=1.0.0']]],
+ ['>= 1.0.0', [['>=1.0.0']]],
+ ['> 1.0.0', [['>1.0.0']]],
+ ['> 1.0.0', [['>1.0.0']]],
+ ['<= 2.0.0', [['<=2.0.0']]],
+ ['<= 2.0.0', [['<=2.0.0']]],
+ ['<= 2.0.0', [['<=2.0.0']]],
+ ['< 2.0.0', [['<2.0.0-0']]],
+ ['<\t2.0.0', [['<2.0.0-0']]],
+ ['>=0.1.97', [['>=0.1.97']]],
+ ['>=0.1.97', [['>=0.1.97']]],
+ ['0.1.20 || 1.2.4', [['0.1.20'], ['1.2.4']]],
+ ['>=0.2.3 || <0.0.1', [['>=0.2.3'], ['<0.0.1-0']]],
+ ['>=0.2.3 || <0.0.1', [['>=0.2.3'], ['<0.0.1-0']]],
+ ['>=0.2.3 || <0.0.1', [['>=0.2.3'], ['<0.0.1-0']]],
+ ['||', [[''], ['']]],
+ ['2.x.x', [['>=2.0.0-0', '<3.0.0-0']]],
+ ['1.2.x', [['>=1.2.0-0', '<1.3.0-0']]],
+ ['1.2.x || 2.x', [['>=1.2.0-0', '<1.3.0-0'], ['>=2.0.0-0', '<3.0.0-0']]],
+ ['1.2.x || 2.x', [['>=1.2.0-0', '<1.3.0-0'], ['>=2.0.0-0', '<3.0.0-0']]],
+ ['x', [['']]],
+ ['2.*.*', [['>=2.0.0-0', '<3.0.0-0']]],
+ ['1.2.*', [['>=1.2.0-0', '<1.3.0-0']]],
+ ['1.2.* || 2.*', [['>=1.2.0-0', '<1.3.0-0'], ['>=2.0.0-0', '<3.0.0-0']]],
+ ['1.2.* || 2.*', [['>=1.2.0-0', '<1.3.0-0'], ['>=2.0.0-0', '<3.0.0-0']]],
+ ['*', [['']]],
+ ['2', [['>=2.0.0-0', '<3.0.0-0']]],
+ ['2.3', [['>=2.3.0-0', '<2.4.0-0']]],
+ ['~2.4', [['>=2.4.0-0', '<2.5.0-0']]],
+ ['~2.4', [['>=2.4.0-0', '<2.5.0-0']]],
+ ['~>3.2.1', [['>=3.2.1-0', '<3.3.0-0']]],
+ ['~1', [['>=1.0.0-0', '<2.0.0-0']]],
+ ['~>1', [['>=1.0.0-0', '<2.0.0-0']]],
+ ['~> 1', [['>=1.0.0-0', '<2.0.0-0']]],
+ ['~1.0', [['>=1.0.0-0', '<1.1.0-0']]],
+ ['~ 1.0', [['>=1.0.0-0', '<1.1.0-0']]],
+ ['~ 1.0.3', [['>=1.0.3-0', '<1.1.0-0']]],
+ ['~> 1.0.3', [['>=1.0.3-0', '<1.1.0-0']]],
+ ['<1', [['<1.0.0-0']]],
+ ['< 1', [['<1.0.0-0']]],
+ ['>=1', [['>=1.0.0-0']]],
+ ['>= 1', [['>=1.0.0-0']]],
+ ['<1.2', [['<1.2.0-0']]],
+ ['< 1.2', [['<1.2.0-0']]],
+ ['1', [['>=1.0.0-0', '<2.0.0-0']]],
+ ['1 2', [['>=1.0.0-0', '<2.0.0-0', '>=2.0.0-0', '<3.0.0-0']]],
+ ['1.2 - 3.4.5', [['>=1.2.0-0', '<=3.4.5']]],
+ ['1.2.3 - 3.4', [['>=1.2.3', '<3.5.0-0']]]
+ ].forEach(function(v) {
+ var pre = v[0];
+ var wanted = v[1];
+ var found = toComparators(v[0]);
+ var jw = JSON.stringify(wanted);
+ t.equivalent(found, wanted, 'toComparators(' + pre + ') === ' + jw);
+ });
+
+ t.end();
+});
+
+test('\nstrict vs loose version numbers', function(t) {
+ [['=1.2.3', '1.2.3'],
+ ['01.02.03', '1.2.3'],
+ ['1.2.3-beta.01', '1.2.3-beta.1'],
+ [' =1.2.3', '1.2.3'],
+ ['1.2.3foo', '1.2.3-foo']
+ ].forEach(function(v) {
+ var loose = v[0];
+ var strict = v[1];
+ t.throws(function() {
+ new SemVer(loose);
+ });
+ var lv = new SemVer(loose, true);
+ t.equal(lv.version, strict);
+ t.ok(eq(loose, strict, true));
+ t.throws(function() {
+ eq(loose, strict);
+ });
+ t.throws(function() {
+ new SemVer(strict).compare(loose);
+ });
+ });
+ t.end();
+});
+
+test('\nstrict vs loose ranges', function(t) {
+ [['>=01.02.03', '>=1.2.3'],
+ ['~1.02.03beta', '>=1.2.3-beta <1.3.0-0']
+ ].forEach(function(v) {
+ var loose = v[0];
+ var comps = v[1];
+ t.throws(function() {
+ new Range(loose);
+ });
+ t.equal(new Range(loose, true).range, comps);
+ });
+ t.end();
+});
+
+test('\nmax satisfying', function(t) {
+ [[['1.2.3', '1.2.4'], '1.2', '1.2.4'],
+ [['1.2.4', '1.2.3'], '1.2', '1.2.4'],
+ [['1.2.3', '1.2.4', '1.2.5', '1.2.6'], '~1.2.3', '1.2.6'],
+ [['1.1.0', '1.2.0', '1.2.1', '1.3.0', '2.0.0b1', '2.0.0b2', '2.0.0b3', '2.0.0', '2.1.0'], '~2.0.0', '2.0.0', true]
+ ].forEach(function(v) {
+ var versions = v[0];
+ var range = v[1];
+ var expect = v[2];
+ var loose = v[3];
+ var actual = semver.maxSatisfying(versions, range, loose);
+ t.equal(actual, expect);
+ });
+ t.end();
+});
diff --git a/deps/npm/node_modules/semver/test/ltr.js b/deps/npm/node_modules/semver/test/ltr.js
new file mode 100644
index 000000000..a4f503a3c
--- /dev/null
+++ b/deps/npm/node_modules/semver/test/ltr.js
@@ -0,0 +1,174 @@
+var tap = require('tap');
+var test = tap.test;
+var semver = require('../semver.js');
+var ltr = semver.ltr;
+
+test('\nltr tests', function(t) {
+ // [range, version, loose]
+ // Version should be less than range
+ [
+ ['~1.2.2', '1.2.1'],
+ ['~0.6.1-1', '0.6.1-0'],
+ ['1.0.0 - 2.0.0', '0.0.1'],
+ ['1.0.0-beta.2', '1.0.0-beta.1'],
+ ['1.0.0', '0.0.0'],
+ ['>=2.0.0', '1.1.1'],
+ ['>=2.0.0', '1.2.9'],
+ ['>2.0.0', '2.0.0'],
+ ['0.1.20 || 1.2.4', '0.1.5'],
+ ['2.x.x', '1.0.0'],
+ ['1.2.x', '1.1.0'],
+ ['1.2.x || 2.x', '1.0.0'],
+ ['2.*.*', '1.0.1'],
+ ['1.2.*', '1.1.3'],
+ ['1.2.* || 2.*', '1.1.9999'],
+ ['2', '1.0.0'],
+ ['2.3', '2.2.2'],
+ ['~2.4', '2.3.0'], // >=2.4.0 <2.5.0
+ ['~2.4', '2.3.5'],
+ ['~>3.2.1', '3.2.0'], // >=3.2.1 <3.3.0
+ ['~1', '0.2.3'], // >=1.0.0 <2.0.0
+ ['~>1', '0.2.4'],
+ ['~> 1', '0.2.3'],
+ ['~1.0', '0.1.2'], // >=1.0.0 <1.1.0
+ ['~ 1.0', '0.1.0'],
+ ['>1.2', '1.2.0'],
+ ['> 1.2', '1.2.1'],
+ ['1', '0.0.0beta', true],
+ ['~v0.5.4-pre', '0.5.4-alpha'],
+ ['~v0.5.4-pre', '0.5.4-alpha'],
+ ['=0.7.x', '0.6.0'],
+ ['=0.7.x', '0.6.0-asdf'],
+ ['>=0.7.x', '0.6.0'],
+ ['~1.2.2', '1.2.1'],
+ ['1.0.0 - 2.0.0', '0.2.3'],
+ ['1.0.0', '0.0.1'],
+ ['>=2.0.0', '1.0.0'],
+ ['>=2.0.0', '1.9999.9999'],
+ ['>=2.0.0', '1.2.9'],
+ ['>2.0.0', '2.0.0'],
+ ['>2.0.0', '1.2.9'],
+ ['2.x.x', '1.1.3'],
+ ['1.2.x', '1.1.3'],
+ ['1.2.x || 2.x', '1.1.3'],
+ ['2.*.*', '1.1.3'],
+ ['1.2.*', '1.1.3'],
+ ['1.2.* || 2.*', '1.1.3'],
+ ['2', '1.9999.9999'],
+ ['2.3', '2.2.1'],
+ ['~2.4', '2.3.0'], // >=2.4.0 <2.5.0
+ ['~>3.2.1', '2.3.2'], // >=3.2.1 <3.3.0
+ ['~1', '0.2.3'], // >=1.0.0 <2.0.0
+ ['~>1', '0.2.3'],
+ ['~1.0', '0.0.0'], // >=1.0.0 <1.1.0
+ ['>1', '1.0.0'],
+ ['2', '1.0.0beta', true],
+ ['>1', '1.0.0beta', true],
+ ['> 1', '1.0.0beta', true],
+ ['=0.7.x', '0.6.2'],
+ ['>=0.7.x', '0.6.2']
+ ].forEach(function(tuple) {
+ var range = tuple[0];
+ var version = tuple[1];
+ var loose = tuple[2] || false;
+ var msg = 'ltr(' + version + ', ' + range + ', ' + loose + ')';
+ t.ok(ltr(version, range, loose), msg);
+ });
+ t.end();
+});
+
+test('\nnegative ltr tests', function(t) {
+ // [range, version, loose]
+ // Version should NOT be greater than range
+ [
+ ['~ 1.0', '1.1.0'],
+ ['~0.6.1-1', '0.6.1-1'],
+ ['1.0.0 - 2.0.0', '1.2.3'],
+ ['1.0.0 - 2.0.0', '2.9.9'],
+ ['1.0.0', '1.0.0'],
+ ['>=*', '0.2.4'],
+ ['', '1.0.0', true],
+ ['*', '1.2.3'],
+ ['*', 'v1.2.3-foo'],
+ ['>=1.0.0', '1.0.0'],
+ ['>=1.0.0', '1.0.1'],
+ ['>=1.0.0', '1.1.0'],
+ ['>1.0.0', '1.0.1'],
+ ['>1.0.0', '1.1.0'],
+ ['<=2.0.0', '2.0.0'],
+ ['<=2.0.0', '1.9999.9999'],
+ ['<=2.0.0', '0.2.9'],
+ ['<2.0.0', '1.9999.9999'],
+ ['<2.0.0', '0.2.9'],
+ ['>= 1.0.0', '1.0.0'],
+ ['>= 1.0.0', '1.0.1'],
+ ['>= 1.0.0', '1.1.0'],
+ ['> 1.0.0', '1.0.1'],
+ ['> 1.0.0', '1.1.0'],
+ ['<= 2.0.0', '2.0.0'],
+ ['<= 2.0.0', '1.9999.9999'],
+ ['<= 2.0.0', '0.2.9'],
+ ['< 2.0.0', '1.9999.9999'],
+ ['<\t2.0.0', '0.2.9'],
+ ['>=0.1.97', 'v0.1.97'],
+ ['>=0.1.97', '0.1.97'],
+ ['0.1.20 || 1.2.4', '1.2.4'],
+ ['0.1.20 || >1.2.4', '1.2.4'],
+ ['0.1.20 || 1.2.4', '1.2.3'],
+ ['0.1.20 || 1.2.4', '0.1.20'],
+ ['>=0.2.3 || <0.0.1', '0.0.0'],
+ ['>=0.2.3 || <0.0.1', '0.2.3'],
+ ['>=0.2.3 || <0.0.1', '0.2.4'],
+ ['||', '1.3.4'],
+ ['2.x.x', '2.1.3'],
+ ['1.2.x', '1.2.3'],
+ ['1.2.x || 2.x', '2.1.3'],
+ ['1.2.x || 2.x', '1.2.3'],
+ ['x', '1.2.3'],
+ ['2.*.*', '2.1.3'],
+ ['1.2.*', '1.2.3'],
+ ['1.2.* || 2.*', '2.1.3'],
+ ['1.2.* || 2.*', '1.2.3'],
+ ['1.2.* || 2.*', '1.2.3'],
+ ['*', '1.2.3'],
+ ['2', '2.1.2'],
+ ['2.3', '2.3.1'],
+ ['~2.4', '2.4.0'], // >=2.4.0 <2.5.0
+ ['~2.4', '2.4.5'],
+ ['~>3.2.1', '3.2.2'], // >=3.2.1 <3.3.0
+ ['~1', '1.2.3'], // >=1.0.0 <2.0.0
+ ['~>1', '1.2.3'],
+ ['~> 1', '1.2.3'],
+ ['~1.0', '1.0.2'], // >=1.0.0 <1.1.0
+ ['~ 1.0', '1.0.2'],
+ ['>=1', '1.0.0'],
+ ['>= 1', '1.0.0'],
+ ['<1.2', '1.1.1'],
+ ['< 1.2', '1.1.1'],
+ ['1', '1.0.0beta', true],
+ ['~v0.5.4-pre', '0.5.5'],
+ ['~v0.5.4-pre', '0.5.4'],
+ ['=0.7.x', '0.7.2'],
+ ['>=0.7.x', '0.7.2'],
+ ['=0.7.x', '0.7.0-asdf'],
+ ['>=0.7.x', '0.7.0-asdf'],
+ ['<=0.7.x', '0.6.2'],
+ ['>0.2.3 >0.2.4 <=0.2.5', '0.2.5'],
+ ['>=0.2.3 <=0.2.4', '0.2.4'],
+ ['1.0.0 - 2.0.0', '2.0.0'],
+ ['^1', '1.0.0-0'],
+ ['^3.0.0', '4.0.0'],
+ ['^1.0.0 || ~2.0.1', '2.0.0'],
+ ['^0.1.0 || ~3.0.1 || 5.0.0', '3.2.0'],
+ ['^0.1.0 || ~3.0.1 || 5.0.0', '1.0.0beta', true],
+ ['^0.1.0 || ~3.0.1 || 5.0.0', '5.0.0-0', true],
+ ['^0.1.0 || ~3.0.1 || >4 <=5.0.0', '3.5.0']
+ ].forEach(function(tuple) {
+ var range = tuple[0];
+ var version = tuple[1];
+ var loose = tuple[2] || false;
+ var msg = '!ltr(' + version + ', ' + range + ', ' + loose + ')';
+ t.notOk(ltr(version, range, loose), msg);
+ });
+ t.end();
+});
diff --git a/deps/npm/node_modules/semver/test/no-module.js b/deps/npm/node_modules/semver/test/no-module.js
new file mode 100644
index 000000000..96d1cd1fc
--- /dev/null
+++ b/deps/npm/node_modules/semver/test/no-module.js
@@ -0,0 +1,19 @@
+var tap = require('tap');
+var test = tap.test;
+
+test('no module system', function(t) {
+ var fs = require('fs');
+ var vm = require('vm');
+ var head = fs.readFileSync(require.resolve('../head.js'), 'utf8');
+ var src = fs.readFileSync(require.resolve('../'), 'utf8');
+ var foot = fs.readFileSync(require.resolve('../foot.js'), 'utf8');
+ vm.runInThisContext(head + src + foot, 'semver.js');
+
+ // just some basic poking to see if it did some stuff
+ t.type(global.semver, 'object');
+ t.type(global.semver.SemVer, 'function');
+ t.type(global.semver.Range, 'function');
+ t.ok(global.semver.satisfies('1.2.3', '1.2'));
+ t.end();
+});
+
diff --git a/deps/npm/node_modules/sha/.npmignore b/deps/npm/node_modules/sha/.npmignore
index fcfd94494..ac4d7d173 100644
--- a/deps/npm/node_modules/sha/.npmignore
+++ b/deps/npm/node_modules/sha/.npmignore
@@ -1,4 +1,4 @@
-node_modules
-test
-.gitignore
+node_modules
+test
+.gitignore
.travis.yml \ No newline at end of file
diff --git a/deps/npm/node_modules/sha/LICENSE b/deps/npm/node_modules/sha/LICENSE
new file mode 100644
index 000000000..3d8f089d2
--- /dev/null
+++ b/deps/npm/node_modules/sha/LICENSE
@@ -0,0 +1,46 @@
+Copyright (c) 2013 Forbes Lindesay
+
+The BSD License
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+
+1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+
+2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+The MIT License (MIT)
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE. \ No newline at end of file
diff --git a/deps/npm/node_modules/sha/README.md b/deps/npm/node_modules/sha/README.md
index 9ac740731..b1b45f0c3 100644
--- a/deps/npm/node_modules/sha/README.md
+++ b/deps/npm/node_modules/sha/README.md
@@ -1,32 +1,49 @@
-# sha
-
-Check and get file hashes (using any algorithm)
-
-[![Build Status](https://travis-ci.org/ForbesLindesay/sha.png?branch=master)](https://travis-ci.org/ForbesLindesay/sha)
-[![Dependency Status](https://gemnasium.com/ForbesLindesay/sha.png)](https://gemnasium.com/ForbesLindesay/sha)
-
-## Installation
-
- $ npm install sha
-
-## API
-
-### check(fileName, expected, [options,] cb)
-
-Asynchronously check that `fileName` has a "hash" of `expected`. The callback will be called with either `null` or an error (indicating that they did not match).
-
-Options:
-
-- algorithm: defaults to `sha1` and can be any of the algorithms supported by `crypto.createHash`
-
-### get(fileName, [options,] cb)
-
-Asynchronously get the "hash" of `fileName`. The callback will be called with an optional `error` object and the (lower cased) hex digest of the hash.
-
-Options:
-
-- algorithm: defaults to `sha1` and can be any of the algorithms supported by `crypto.createHash`
-
-## License
-
-BSD
+# sha
+
+Check and get file hashes (using any algorithm)
+
+[![Build Status](https://travis-ci.org/ForbesLindesay/sha.png?branch=master)](https://travis-ci.org/ForbesLindesay/sha)
+[![Dependency Status](https://gemnasium.com/ForbesLindesay/sha.png)](https://gemnasium.com/ForbesLindesay/sha)
+[![NPM version](https://badge.fury.io/js/sha.png)](http://badge.fury.io/js/sha)
+
+## Installation
+
+ $ npm install sha
+
+## API
+
+### check(fileName, expected, [options,] cb) / checkSync(filename, expected, [options])
+
+Asynchronously check that `fileName` has a "hash" of `expected`. The callback will be called with either `null` or an error (indicating that they did not match).
+
+Options:
+
+- algorithm: defaults to `sha1` and can be any of the algorithms supported by `crypto.createHash`
+
+### get(fileName, [options,] cb) / getSync(filename, [options])
+
+Asynchronously get the "hash" of `fileName`. The callback will be called with an optional `error` object and the (lower cased) hex digest of the hash.
+
+Options:
+
+- algorithm: defaults to `sha1` and can be any of the algorithms supported by `crypto.createHash`
+
+### stream(expected, [options])
+
+Check the hash of a stream without ever buffering it. This is a pass through stream so you can do things like:
+
+```js
+fs.createReadStream('src')
+ .pipe(sha.stream('expected'))
+ .pipe(fs.createWriteStream('dest'))
+```
+
+`dest` will be a complete copy of `src` and an error will be emitted if the hash did not match `'expected'`.
+
+Options:
+
+- algorithm: defaults to `sha1` and can be any of the algorithms supported by `crypto.createHash`
+
+## License
+
+You may use this software under the BSD or MIT. Take your pick. If you want me to release it under another license, open a pull request. \ No newline at end of file
diff --git a/deps/npm/node_modules/sha/index.js b/deps/npm/node_modules/sha/index.js
index 8e4e13683..45f152c8d 100644
--- a/deps/npm/node_modules/sha/index.js
+++ b/deps/npm/node_modules/sha/index.js
@@ -1,63 +1,120 @@
-var crypto = require('crypto')
-var fs
-try {
- fs = require('graceful-fs')
-} catch (ex) {
- fs = require('fs')
-}
-try {
- process.binding('crypto')
-} catch (e) {
- var er = new Error( 'crypto binding not found.\n'
- + 'Please build node with openssl.\n'
- + e.message )
- throw er
-}
-
-exports.check = check
-exports.get = get
-
-function check(file, expected, options, cb) {
- if (typeof options === 'function') {
- cb = options;
- options = undefined;
- }
- expected = expected.toLowerCase().trim();
- get(file, options, function (er, actual) {
- if (er) {
- if (er.message) er.message += ' while getting shasum for ' + file;
- return cb(er)
- }
- if (actual === expected) return cb(null);
- cb(new Error(
- 'shasum check failed for ' + file + '\n'
- + 'Expected: ' + expected + '\n'
- + 'Actual: ' + actual))
- })
-}
-
-function get(file, options, cb) {
- if (typeof options === 'function') {
- cb = options;
- options = undefined;
- }
- options = options || {};
- var algorithm = options.algorithm || 'sha1';
- var hash = crypto.createHash(algorithm)
- var source = fs.createReadStream(file)
- var errState = null
- source
- .on('error', function (er) {
- if (errState) return
- return cb(errState = er)
- })
- .on('data', function (chunk) {
- if (errState) return
- hash.update(chunk)
- })
- .on('end', function () {
- if (errState) return
- var actual = hash.digest("hex").toLowerCase().trim()
- cb(null, actual)
- })
-}
+'use strict'
+
+var Transform = require('stream').Transform || require('readable-stream').Transform
+var crypto = require('crypto')
+var fs
+try {
+ fs = require('graceful-fs')
+} catch (ex) {
+ fs = require('fs')
+}
+try {
+ process.binding('crypto')
+} catch (e) {
+ var er = new Error( 'crypto binding not found.\n'
+ + 'Please build node with openssl.\n'
+ + e.message )
+ throw er
+}
+
+exports.check = check
+exports.checkSync = checkSync
+exports.get = get
+exports.getSync = getSync
+exports.stream = stream
+
+function check(file, expected, options, cb) {
+ if (typeof options === 'function') {
+ cb = options
+ options = undefined
+ }
+ expected = expected.toLowerCase().trim()
+ get(file, options, function (er, actual) {
+ if (er) {
+ if (er.message) er.message += ' while getting shasum for ' + file
+ return cb(er)
+ }
+ if (actual === expected) return cb(null)
+ cb(new Error(
+ 'shasum check failed for ' + file + '\n'
+ + 'Expected: ' + expected + '\n'
+ + 'Actual: ' + actual))
+ })
+}
+function checkSync(file, expected, options) {
+ expected = expected.toLowerCase().trim()
+ var actual
+ try {
+ actual = getSync(file, options)
+ } catch (er) {
+ if (er.message) er.message += ' while getting shasum for ' + file
+ throw er
+ }
+ if (actual !== expected) {
+ var ex = new Error(
+ 'shasum check failed for ' + file + '\n'
+ + 'Expected: ' + expected + '\n'
+ + 'Actual: ' + actual)
+ throw ex
+ }
+}
+
+
+function get(file, options, cb) {
+ if (typeof options === 'function') {
+ cb = options
+ options = undefined
+ }
+ options = options || {}
+ var algorithm = options.algorithm || 'sha1'
+ var hash = crypto.createHash(algorithm)
+ var source = fs.createReadStream(file)
+ var errState = null
+ source
+ .on('error', function (er) {
+ if (errState) return
+ return cb(errState = er)
+ })
+ .on('data', function (chunk) {
+ if (errState) return
+ hash.update(chunk)
+ })
+ .on('end', function () {
+ if (errState) return
+ var actual = hash.digest("hex").toLowerCase().trim()
+ cb(null, actual)
+ })
+}
+
+function getSync(file, options) {
+ options = options || {}
+ var algorithm = options.algorithm || 'sha1'
+ var hash = crypto.createHash(algorithm)
+ var source = fs.readFileSync(file)
+ hash.update(source)
+ return hash.digest("hex").toLowerCase().trim()
+}
+
+function stream(expected, options) {
+ expected = expected.toLowerCase().trim()
+ options = options || {}
+ var algorithm = options.algorithm || 'sha1'
+ var hash = crypto.createHash(algorithm)
+
+ var stream = new Transform()
+ stream._transform = function (chunk, encoding, callback) {
+ hash.update(chunk)
+ stream.push(chunk)
+ callback()
+ }
+ stream._flush = function (cb) {
+ var actual = hash.digest("hex").toLowerCase().trim()
+ if (actual === expected) return cb(null)
+ cb(new Error(
+ 'shasum check failed for:\n'
+ + ' Expected: ' + expected + '\n'
+ + ' Actual: ' + actual))
+ this.push(null)
+ }
+ return stream
+} \ No newline at end of file
diff --git a/deps/npm/node_modules/sha/node_modules/readable-stream/.npmignore b/deps/npm/node_modules/sha/node_modules/readable-stream/.npmignore
new file mode 100644
index 000000000..38344f87a
--- /dev/null
+++ b/deps/npm/node_modules/sha/node_modules/readable-stream/.npmignore
@@ -0,0 +1,5 @@
+build/
+test/
+examples/
+fs.js
+zlib.js \ No newline at end of file
diff --git a/deps/npm/node_modules/npm-registry-client/node_modules/couch-login/LICENSE b/deps/npm/node_modules/sha/node_modules/readable-stream/LICENSE
index 0c44ae716..0c44ae716 100644
--- a/deps/npm/node_modules/npm-registry-client/node_modules/couch-login/LICENSE
+++ b/deps/npm/node_modules/sha/node_modules/readable-stream/LICENSE
diff --git a/deps/npm/node_modules/sha/node_modules/readable-stream/README.md b/deps/npm/node_modules/sha/node_modules/readable-stream/README.md
new file mode 100644
index 000000000..be976683e
--- /dev/null
+++ b/deps/npm/node_modules/sha/node_modules/readable-stream/README.md
@@ -0,0 +1,768 @@
+# readable-stream
+
+A new class of streams for Node.js
+
+This module provides the new Stream base classes introduced in Node
+v0.10, for use in Node v0.8. You can use it to have programs that
+have to work with node v0.8, while being forward-compatible for v0.10
+and beyond. When you drop support for v0.8, you can remove this
+module, and only use the native streams.
+
+This is almost exactly the same codebase as appears in Node v0.10.
+However:
+
+1. The exported object is actually the Readable class. Decorating the
+ native `stream` module would be global pollution.
+2. In v0.10, you can safely use `base64` as an argument to
+ `setEncoding` in Readable streams. However, in v0.8, the
+ StringDecoder class has no `end()` method, which is problematic for
+ Base64. So, don't use that, because it'll break and be weird.
+
+Other than that, the API is the same as `require('stream')` in v0.10,
+so the API docs are reproduced below.
+
+----------
+
+ Stability: 2 - Unstable
+
+A stream is an abstract interface implemented by various objects in
+Node. For example a request to an HTTP server is a stream, as is
+stdout. Streams are readable, writable, or both. All streams are
+instances of [EventEmitter][]
+
+You can load the Stream base classes by doing `require('stream')`.
+There are base classes provided for Readable streams, Writable
+streams, Duplex streams, and Transform streams.
+
+## Compatibility
+
+In earlier versions of Node, the Readable stream interface was
+simpler, but also less powerful and less useful.
+
+* Rather than waiting for you to call the `read()` method, `'data'`
+ events would start emitting immediately. If you needed to do some
+ I/O to decide how to handle data, then you had to store the chunks
+ in some kind of buffer so that they would not be lost.
+* The `pause()` method was advisory, rather than guaranteed. This
+ meant that you still had to be prepared to receive `'data'` events
+ even when the stream was in a paused state.
+
+In Node v0.10, the Readable class described below was added. For
+backwards compatibility with older Node programs, Readable streams
+switch into "old mode" when a `'data'` event handler is added, or when
+the `pause()` or `resume()` methods are called. The effect is that,
+even if you are not using the new `read()` method and `'readable'`
+event, you no longer have to worry about losing `'data'` chunks.
+
+Most programs will continue to function normally. However, this
+introduces an edge case in the following conditions:
+
+* No `'data'` event handler is added.
+* The `pause()` and `resume()` methods are never called.
+
+For example, consider the following code:
+
+```javascript
+// WARNING! BROKEN!
+net.createServer(function(socket) {
+
+ // we add an 'end' method, but never consume the data
+ socket.on('end', function() {
+ // It will never get here.
+ socket.end('I got your message (but didnt read it)\n');
+ });
+
+}).listen(1337);
+```
+
+In versions of node prior to v0.10, the incoming message data would be
+simply discarded. However, in Node v0.10 and beyond, the socket will
+remain paused forever.
+
+The workaround in this situation is to call the `resume()` method to
+trigger "old mode" behavior:
+
+```javascript
+// Workaround
+net.createServer(function(socket) {
+
+ socket.on('end', function() {
+ socket.end('I got your message (but didnt read it)\n');
+ });
+
+ // start the flow of data, discarding it.
+ socket.resume();
+
+}).listen(1337);
+```
+
+In addition to new Readable streams switching into old-mode, pre-v0.10
+style streams can be wrapped in a Readable class using the `wrap()`
+method.
+
+## Class: stream.Readable
+
+<!--type=class-->
+
+A `Readable Stream` has the following methods, members, and events.
+
+Note that `stream.Readable` is an abstract class designed to be
+extended with an underlying implementation of the `_read(size)`
+method. (See below.)
+
+### new stream.Readable([options])
+
+* `options` {Object}
+ * `highWaterMark` {Number} The maximum number of bytes to store in
+ the internal buffer before ceasing to read from the underlying
+ resource. Default=16kb
+ * `encoding` {String} If specified, then buffers will be decoded to
+ strings using the specified encoding. Default=null
+ * `objectMode` {Boolean} Whether this stream should behave
+ as a stream of objects. Meaning that stream.read(n) returns
+ a single value instead of a Buffer of size n
+
+In classes that extend the Readable class, make sure to call the
+constructor so that the buffering settings can be properly
+initialized.
+
+### readable.\_read(size)
+
+* `size` {Number} Number of bytes to read asynchronously
+
+Note: **This function should NOT be called directly.** It should be
+implemented by child classes, and called by the internal Readable
+class methods only.
+
+All Readable stream implementations must provide a `_read` method
+to fetch data from the underlying resource.
+
+This method is prefixed with an underscore because it is internal to
+the class that defines it, and should not be called directly by user
+programs. However, you **are** expected to override this method in
+your own extension classes.
+
+When data is available, put it into the read queue by calling
+`readable.push(chunk)`. If `push` returns false, then you should stop
+reading. When `_read` is called again, you should start pushing more
+data.
+
+The `size` argument is advisory. Implementations where a "read" is a
+single call that returns data can use this to know how much data to
+fetch. Implementations where that is not relevant, such as TCP or
+TLS, may ignore this argument, and simply provide data whenever it
+becomes available. There is no need, for example to "wait" until
+`size` bytes are available before calling `stream.push(chunk)`.
+
+### readable.push(chunk)
+
+* `chunk` {Buffer | null | String} Chunk of data to push into the read queue
+* return {Boolean} Whether or not more pushes should be performed
+
+Note: **This function should be called by Readable implementors, NOT
+by consumers of Readable subclasses.** The `_read()` function will not
+be called again until at least one `push(chunk)` call is made. If no
+data is available, then you MAY call `push('')` (an empty string) to
+allow a future `_read` call, without adding any data to the queue.
+
+The `Readable` class works by putting data into a read queue to be
+pulled out later by calling the `read()` method when the `'readable'`
+event fires.
+
+The `push()` method will explicitly insert some data into the read
+queue. If it is called with `null` then it will signal the end of the
+data.
+
+In some cases, you may be wrapping a lower-level source which has some
+sort of pause/resume mechanism, and a data callback. In those cases,
+you could wrap the low-level source object by doing something like
+this:
+
+```javascript
+// source is an object with readStop() and readStart() methods,
+// and an `ondata` member that gets called when it has data, and
+// an `onend` member that gets called when the data is over.
+
+var stream = new Readable();
+
+source.ondata = function(chunk) {
+ // if push() returns false, then we need to stop reading from source
+ if (!stream.push(chunk))
+ source.readStop();
+};
+
+source.onend = function() {
+ stream.push(null);
+};
+
+// _read will be called when the stream wants to pull more data in
+// the advisory size argument is ignored in this case.
+stream._read = function(n) {
+ source.readStart();
+};
+```
+
+### readable.unshift(chunk)
+
+* `chunk` {Buffer | null | String} Chunk of data to unshift onto the read queue
+* return {Boolean} Whether or not more pushes should be performed
+
+This is the corollary of `readable.push(chunk)`. Rather than putting
+the data at the *end* of the read queue, it puts it at the *front* of
+the read queue.
+
+This is useful in certain use-cases where a stream is being consumed
+by a parser, which needs to "un-consume" some data that it has
+optimistically pulled out of the source.
+
+```javascript
+// A parser for a simple data protocol.
+// The "header" is a JSON object, followed by 2 \n characters, and
+// then a message body.
+//
+// Note: This can be done more simply as a Transform stream. See below.
+
+function SimpleProtocol(source, options) {
+ if (!(this instanceof SimpleProtocol))
+ return new SimpleProtocol(options);
+
+ Readable.call(this, options);
+ this._inBody = false;
+ this._sawFirstCr = false;
+
+ // source is a readable stream, such as a socket or file
+ this._source = source;
+
+ var self = this;
+ source.on('end', function() {
+ self.push(null);
+ });
+
+ // give it a kick whenever the source is readable
+ // read(0) will not consume any bytes
+ source.on('readable', function() {
+ self.read(0);
+ });
+
+ this._rawHeader = [];
+ this.header = null;
+}
+
+SimpleProtocol.prototype = Object.create(
+ Readable.prototype, { constructor: { value: SimpleProtocol }});
+
+SimpleProtocol.prototype._read = function(n) {
+ if (!this._inBody) {
+ var chunk = this._source.read();
+
+ // if the source doesn't have data, we don't have data yet.
+ if (chunk === null)
+ return this.push('');
+
+ // check if the chunk has a \n\n
+ var split = -1;
+ for (var i = 0; i < chunk.length; i++) {
+ if (chunk[i] === 10) { // '\n'
+ if (this._sawFirstCr) {
+ split = i;
+ break;
+ } else {
+ this._sawFirstCr = true;
+ }
+ } else {
+ this._sawFirstCr = false;
+ }
+ }
+
+ if (split === -1) {
+ // still waiting for the \n\n
+ // stash the chunk, and try again.
+ this._rawHeader.push(chunk);
+ this.push('');
+ } else {
+ this._inBody = true;
+ var h = chunk.slice(0, split);
+ this._rawHeader.push(h);
+ var header = Buffer.concat(this._rawHeader).toString();
+ try {
+ this.header = JSON.parse(header);
+ } catch (er) {
+ this.emit('error', new Error('invalid simple protocol data'));
+ return;
+ }
+ // now, because we got some extra data, unshift the rest
+ // back into the read queue so that our consumer will see it.
+ var b = chunk.slice(split);
+ this.unshift(b);
+
+ // and let them know that we are done parsing the header.
+ this.emit('header', this.header);
+ }
+ } else {
+ // from there on, just provide the data to our consumer.
+ // careful not to push(null), since that would indicate EOF.
+ var chunk = this._source.read();
+ if (chunk) this.push(chunk);
+ }
+};
+
+// Usage:
+var parser = new SimpleProtocol(source);
+// Now parser is a readable stream that will emit 'header'
+// with the parsed header data.
+```
+
+### readable.wrap(stream)
+
+* `stream` {Stream} An "old style" readable stream
+
+If you are using an older Node library that emits `'data'` events and
+has a `pause()` method that is advisory only, then you can use the
+`wrap()` method to create a Readable stream that uses the old stream
+as its data source.
+
+For example:
+
+```javascript
+var OldReader = require('./old-api-module.js').OldReader;
+var oreader = new OldReader;
+var Readable = require('stream').Readable;
+var myReader = new Readable().wrap(oreader);
+
+myReader.on('readable', function() {
+ myReader.read(); // etc.
+});
+```
+
+### Event: 'readable'
+
+When there is data ready to be consumed, this event will fire.
+
+When this event emits, call the `read()` method to consume the data.
+
+### Event: 'end'
+
+Emitted when the stream has received an EOF (FIN in TCP terminology).
+Indicates that no more `'data'` events will happen. If the stream is
+also writable, it may be possible to continue writing.
+
+### Event: 'data'
+
+The `'data'` event emits either a `Buffer` (by default) or a string if
+`setEncoding()` was used.
+
+Note that adding a `'data'` event listener will switch the Readable
+stream into "old mode", where data is emitted as soon as it is
+available, rather than waiting for you to call `read()` to consume it.
+
+### Event: 'error'
+
+Emitted if there was an error receiving data.
+
+### Event: 'close'
+
+Emitted when the underlying resource (for example, the backing file
+descriptor) has been closed. Not all streams will emit this.
+
+### readable.setEncoding(encoding)
+
+Makes the `'data'` event emit a string instead of a `Buffer`. `encoding`
+can be `'utf8'`, `'utf16le'` (`'ucs2'`), `'ascii'`, or `'hex'`.
+
+The encoding can also be set by specifying an `encoding` field to the
+constructor.
+
+### readable.read([size])
+
+* `size` {Number | null} Optional number of bytes to read.
+* Return: {Buffer | String | null}
+
+Note: **This function SHOULD be called by Readable stream users.**
+
+Call this method to consume data once the `'readable'` event is
+emitted.
+
+The `size` argument will set a minimum number of bytes that you are
+interested in. If not set, then the entire content of the internal
+buffer is returned.
+
+If there is no data to consume, or if there are fewer bytes in the
+internal buffer than the `size` argument, then `null` is returned, and
+a future `'readable'` event will be emitted when more is available.
+
+Calling `stream.read(0)` will always return `null`, and will trigger a
+refresh of the internal buffer, but otherwise be a no-op.
+
+### readable.pipe(destination, [options])
+
+* `destination` {Writable Stream}
+* `options` {Object} Optional
+ * `end` {Boolean} Default=true
+
+Connects this readable stream to `destination` WriteStream. Incoming
+data on this stream gets written to `destination`. Properly manages
+back-pressure so that a slow destination will not be overwhelmed by a
+fast readable stream.
+
+This function returns the `destination` stream.
+
+For example, emulating the Unix `cat` command:
+
+ process.stdin.pipe(process.stdout);
+
+By default `end()` is called on the destination when the source stream
+emits `end`, so that `destination` is no longer writable. Pass `{ end:
+false }` as `options` to keep the destination stream open.
+
+This keeps `writer` open so that "Goodbye" can be written at the
+end.
+
+ reader.pipe(writer, { end: false });
+ reader.on("end", function() {
+ writer.end("Goodbye\n");
+ });
+
+Note that `process.stderr` and `process.stdout` are never closed until
+the process exits, regardless of the specified options.
+
+### readable.unpipe([destination])
+
+* `destination` {Writable Stream} Optional
+
+Undo a previously established `pipe()`. If no destination is
+provided, then all previously established pipes are removed.
+
+### readable.pause()
+
+Switches the readable stream into "old mode", where data is emitted
+using a `'data'` event rather than being buffered for consumption via
+the `read()` method.
+
+Ceases the flow of data. No `'data'` events are emitted while the
+stream is in a paused state.
+
+### readable.resume()
+
+Switches the readable stream into "old mode", where data is emitted
+using a `'data'` event rather than being buffered for consumption via
+the `read()` method.
+
+Resumes the incoming `'data'` events after a `pause()`.
+
+
+## Class: stream.Writable
+
+<!--type=class-->
+
+A `Writable` Stream has the following methods, members, and events.
+
+Note that `stream.Writable` is an abstract class designed to be
+extended with an underlying implementation of the
+`_write(chunk, encoding, cb)` method. (See below.)
+
+### new stream.Writable([options])
+
+* `options` {Object}
+ * `highWaterMark` {Number} Buffer level when `write()` starts
+ returning false. Default=16kb
+ * `decodeStrings` {Boolean} Whether or not to decode strings into
+ Buffers before passing them to `_write()`. Default=true
+
+In classes that extend the Writable class, make sure to call the
+constructor so that the buffering settings can be properly
+initialized.
+
+### writable.\_write(chunk, encoding, callback)
+
+* `chunk` {Buffer | String} The chunk to be written. Will always
+ be a buffer unless the `decodeStrings` option was set to `false`.
+* `encoding` {String} If the chunk is a string, then this is the
+ encoding type. Ignore chunk is a buffer. Note that chunk will
+ **always** be a buffer unless the `decodeStrings` option is
+ explicitly set to `false`.
+* `callback` {Function} Call this function (optionally with an error
+ argument) when you are done processing the supplied chunk.
+
+All Writable stream implementations must provide a `_write` method to
+send data to the underlying resource.
+
+Note: **This function MUST NOT be called directly.** It should be
+implemented by child classes, and called by the internal Writable
+class methods only.
+
+Call the callback using the standard `callback(error)` pattern to
+signal that the write completed successfully or with an error.
+
+If the `decodeStrings` flag is set in the constructor options, then
+`chunk` may be a string rather than a Buffer, and `encoding` will
+indicate the sort of string that it is. This is to support
+implementations that have an optimized handling for certain string
+data encodings. If you do not explicitly set the `decodeStrings`
+option to `false`, then you can safely ignore the `encoding` argument,
+and assume that `chunk` will always be a Buffer.
+
+This method is prefixed with an underscore because it is internal to
+the class that defines it, and should not be called directly by user
+programs. However, you **are** expected to override this method in
+your own extension classes.
+
+
+### writable.write(chunk, [encoding], [callback])
+
+* `chunk` {Buffer | String} Data to be written
+* `encoding` {String} Optional. If `chunk` is a string, then encoding
+ defaults to `'utf8'`
+* `callback` {Function} Optional. Called when this chunk is
+ successfully written.
+* Returns {Boolean}
+
+Writes `chunk` to the stream. Returns `true` if the data has been
+flushed to the underlying resource. Returns `false` to indicate that
+the buffer is full, and the data will be sent out in the future. The
+`'drain'` event will indicate when the buffer is empty again.
+
+The specifics of when `write()` will return false, is determined by
+the `highWaterMark` option provided to the constructor.
+
+### writable.end([chunk], [encoding], [callback])
+
+* `chunk` {Buffer | String} Optional final data to be written
+* `encoding` {String} Optional. If `chunk` is a string, then encoding
+ defaults to `'utf8'`
+* `callback` {Function} Optional. Called when the final chunk is
+ successfully written.
+
+Call this method to signal the end of the data being written to the
+stream.
+
+### Event: 'drain'
+
+Emitted when the stream's write queue empties and it's safe to write
+without buffering again. Listen for it when `stream.write()` returns
+`false`.
+
+### Event: 'close'
+
+Emitted when the underlying resource (for example, the backing file
+descriptor) has been closed. Not all streams will emit this.
+
+### Event: 'finish'
+
+When `end()` is called and there are no more chunks to write, this
+event is emitted.
+
+### Event: 'pipe'
+
+* `source` {Readable Stream}
+
+Emitted when the stream is passed to a readable stream's pipe method.
+
+### Event 'unpipe'
+
+* `source` {Readable Stream}
+
+Emitted when a previously established `pipe()` is removed using the
+source Readable stream's `unpipe()` method.
+
+## Class: stream.Duplex
+
+<!--type=class-->
+
+A "duplex" stream is one that is both Readable and Writable, such as a
+TCP socket connection.
+
+Note that `stream.Duplex` is an abstract class designed to be
+extended with an underlying implementation of the `_read(size)`
+and `_write(chunk, encoding, callback)` methods as you would with a Readable or
+Writable stream class.
+
+Since JavaScript doesn't have multiple prototypal inheritance, this
+class prototypally inherits from Readable, and then parasitically from
+Writable. It is thus up to the user to implement both the lowlevel
+`_read(n)` method as well as the lowlevel `_write(chunk, encoding, cb)` method
+on extension duplex classes.
+
+### new stream.Duplex(options)
+
+* `options` {Object} Passed to both Writable and Readable
+ constructors. Also has the following fields:
+ * `allowHalfOpen` {Boolean} Default=true. If set to `false`, then
+ the stream will automatically end the readable side when the
+ writable side ends and vice versa.
+
+In classes that extend the Duplex class, make sure to call the
+constructor so that the buffering settings can be properly
+initialized.
+
+## Class: stream.Transform
+
+A "transform" stream is a duplex stream where the output is causally
+connected in some way to the input, such as a zlib stream or a crypto
+stream.
+
+There is no requirement that the output be the same size as the input,
+the same number of chunks, or arrive at the same time. For example, a
+Hash stream will only ever have a single chunk of output which is
+provided when the input is ended. A zlib stream will either produce
+much smaller or much larger than its input.
+
+Rather than implement the `_read()` and `_write()` methods, Transform
+classes must implement the `_transform()` method, and may optionally
+also implement the `_flush()` method. (See below.)
+
+### new stream.Transform([options])
+
+* `options` {Object} Passed to both Writable and Readable
+ constructors.
+
+In classes that extend the Transform class, make sure to call the
+constructor so that the buffering settings can be properly
+initialized.
+
+### transform.\_transform(chunk, encoding, callback)
+
+* `chunk` {Buffer | String} The chunk to be transformed. Will always
+ be a buffer unless the `decodeStrings` option was set to `false`.
+* `encoding` {String} If the chunk is a string, then this is the
+ encoding type. (Ignore if `decodeStrings` chunk is a buffer.)
+* `callback` {Function} Call this function (optionally with an error
+ argument) when you are done processing the supplied chunk.
+
+Note: **This function MUST NOT be called directly.** It should be
+implemented by child classes, and called by the internal Transform
+class methods only.
+
+All Transform stream implementations must provide a `_transform`
+method to accept input and produce output.
+
+`_transform` should do whatever has to be done in this specific
+Transform class, to handle the bytes being written, and pass them off
+to the readable portion of the interface. Do asynchronous I/O,
+process things, and so on.
+
+Call `transform.push(outputChunk)` 0 or more times to generate output
+from this input chunk, depending on how much data you want to output
+as a result of this chunk.
+
+Call the callback function only when the current chunk is completely
+consumed. Note that there may or may not be output as a result of any
+particular input chunk.
+
+This method is prefixed with an underscore because it is internal to
+the class that defines it, and should not be called directly by user
+programs. However, you **are** expected to override this method in
+your own extension classes.
+
+### transform.\_flush(callback)
+
+* `callback` {Function} Call this function (optionally with an error
+ argument) when you are done flushing any remaining data.
+
+Note: **This function MUST NOT be called directly.** It MAY be implemented
+by child classes, and if so, will be called by the internal Transform
+class methods only.
+
+In some cases, your transform operation may need to emit a bit more
+data at the end of the stream. For example, a `Zlib` compression
+stream will store up some internal state so that it can optimally
+compress the output. At the end, however, it needs to do the best it
+can with what is left, so that the data will be complete.
+
+In those cases, you can implement a `_flush` method, which will be
+called at the very end, after all the written data is consumed, but
+before emitting `end` to signal the end of the readable side. Just
+like with `_transform`, call `transform.push(chunk)` zero or more
+times, as appropriate, and call `callback` when the flush operation is
+complete.
+
+This method is prefixed with an underscore because it is internal to
+the class that defines it, and should not be called directly by user
+programs. However, you **are** expected to override this method in
+your own extension classes.
+
+### Example: `SimpleProtocol` parser
+
+The example above of a simple protocol parser can be implemented much
+more simply by using the higher level `Transform` stream class.
+
+In this example, rather than providing the input as an argument, it
+would be piped into the parser, which is a more idiomatic Node stream
+approach.
+
+```javascript
+function SimpleProtocol(options) {
+ if (!(this instanceof SimpleProtocol))
+ return new SimpleProtocol(options);
+
+ Transform.call(this, options);
+ this._inBody = false;
+ this._sawFirstCr = false;
+ this._rawHeader = [];
+ this.header = null;
+}
+
+SimpleProtocol.prototype = Object.create(
+ Transform.prototype, { constructor: { value: SimpleProtocol }});
+
+SimpleProtocol.prototype._transform = function(chunk, encoding, done) {
+ if (!this._inBody) {
+ // check if the chunk has a \n\n
+ var split = -1;
+ for (var i = 0; i < chunk.length; i++) {
+ if (chunk[i] === 10) { // '\n'
+ if (this._sawFirstCr) {
+ split = i;
+ break;
+ } else {
+ this._sawFirstCr = true;
+ }
+ } else {
+ this._sawFirstCr = false;
+ }
+ }
+
+ if (split === -1) {
+ // still waiting for the \n\n
+ // stash the chunk, and try again.
+ this._rawHeader.push(chunk);
+ } else {
+ this._inBody = true;
+ var h = chunk.slice(0, split);
+ this._rawHeader.push(h);
+ var header = Buffer.concat(this._rawHeader).toString();
+ try {
+ this.header = JSON.parse(header);
+ } catch (er) {
+ this.emit('error', new Error('invalid simple protocol data'));
+ return;
+ }
+ // and let them know that we are done parsing the header.
+ this.emit('header', this.header);
+
+ // now, because we got some extra data, emit this first.
+ this.push(b);
+ }
+ } else {
+ // from there on, just provide the data to our consumer as-is.
+ this.push(b);
+ }
+ done();
+};
+
+var parser = new SimpleProtocol();
+source.pipe(parser)
+
+// Now parser is a readable stream that will emit 'header'
+// with the parsed header data.
+```
+
+
+## Class: stream.PassThrough
+
+This is a trivial implementation of a `Transform` stream that simply
+passes the input bytes across to the output. Its purpose is mainly
+for examples and testing, but there are occasionally use cases where
+it can come in handy.
+
+
+[EventEmitter]: events.html#events_class_events_eventemitter
diff --git a/deps/npm/node_modules/sha/node_modules/readable-stream/duplex.js b/deps/npm/node_modules/sha/node_modules/readable-stream/duplex.js
new file mode 100644
index 000000000..ca807af87
--- /dev/null
+++ b/deps/npm/node_modules/sha/node_modules/readable-stream/duplex.js
@@ -0,0 +1 @@
+module.exports = require("./lib/_stream_duplex.js")
diff --git a/deps/npm/node_modules/sha/node_modules/readable-stream/float.patch b/deps/npm/node_modules/sha/node_modules/readable-stream/float.patch
new file mode 100644
index 000000000..0ad71a1f0
--- /dev/null
+++ b/deps/npm/node_modules/sha/node_modules/readable-stream/float.patch
@@ -0,0 +1,68 @@
+diff --git a/lib/_stream_duplex.js b/lib/_stream_duplex.js
+index c5a741c..a2e0d8e 100644
+--- a/lib/_stream_duplex.js
++++ b/lib/_stream_duplex.js
+@@ -26,8 +26,8 @@
+
+ module.exports = Duplex;
+ var util = require('util');
+-var Readable = require('_stream_readable');
+-var Writable = require('_stream_writable');
++var Readable = require('./_stream_readable');
++var Writable = require('./_stream_writable');
+
+ util.inherits(Duplex, Readable);
+
+diff --git a/lib/_stream_passthrough.js b/lib/_stream_passthrough.js
+index a5e9864..330c247 100644
+--- a/lib/_stream_passthrough.js
++++ b/lib/_stream_passthrough.js
+@@ -25,7 +25,7 @@
+
+ module.exports = PassThrough;
+
+-var Transform = require('_stream_transform');
++var Transform = require('./_stream_transform');
+ var util = require('util');
+ util.inherits(PassThrough, Transform);
+
+diff --git a/lib/_stream_readable.js b/lib/_stream_readable.js
+index 2259d2e..e6681ee 100644
+--- a/lib/_stream_readable.js
++++ b/lib/_stream_readable.js
+@@ -23,6 +23,9 @@ module.exports = Readable;
+ Readable.ReadableState = ReadableState;
+
+ var EE = require('events').EventEmitter;
++if (!EE.listenerCount) EE.listenerCount = function(emitter, type) {
++ return emitter.listeners(type).length;
++};
+ var Stream = require('stream');
+ var util = require('util');
+ var StringDecoder;
+diff --git a/lib/_stream_transform.js b/lib/_stream_transform.js
+index e925b4b..f08b05e 100644
+--- a/lib/_stream_transform.js
++++ b/lib/_stream_transform.js
+@@ -64,7 +64,7 @@
+
+ module.exports = Transform;
+
+-var Duplex = require('_stream_duplex');
++var Duplex = require('./_stream_duplex');
+ var util = require('util');
+ util.inherits(Transform, Duplex);
+
+diff --git a/lib/_stream_writable.js b/lib/_stream_writable.js
+index a26f711..56ca47d 100644
+--- a/lib/_stream_writable.js
++++ b/lib/_stream_writable.js
+@@ -109,7 +109,7 @@ function WritableState(options, stream) {
+ function Writable(options) {
+ // Writable ctor is applied to Duplexes, though they're not
+ // instanceof Writable, they're instanceof Readable.
+- if (!(this instanceof Writable) && !(this instanceof Stream.Duplex))
++ if (!(this instanceof Writable) && !(this instanceof require('./_stream_duplex')))
+ return new Writable(options);
+
+ this._writableState = new WritableState(options, this);
diff --git a/deps/npm/node_modules/sha/node_modules/readable-stream/lib/_stream_duplex.js b/deps/npm/node_modules/sha/node_modules/readable-stream/lib/_stream_duplex.js
new file mode 100644
index 000000000..a2e0d8e0d
--- /dev/null
+++ b/deps/npm/node_modules/sha/node_modules/readable-stream/lib/_stream_duplex.js
@@ -0,0 +1,69 @@
+// Copyright Joyent, Inc. and other Node contributors.
+//
+// Permission is hereby granted, free of charge, to any person obtaining a
+// copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to permit
+// persons to whom the Software is furnished to do so, subject to the
+// following conditions:
+//
+// The above copyright notice and this permission notice shall be included
+// in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
+// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
+// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
+// USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+// a duplex stream is just a stream that is both readable and writable.
+// Since JS doesn't have multiple prototypal inheritance, this class
+// prototypally inherits from Readable, and then parasitically from
+// Writable.
+
+module.exports = Duplex;
+var util = require('util');
+var Readable = require('./_stream_readable');
+var Writable = require('./_stream_writable');
+
+util.inherits(Duplex, Readable);
+
+Object.keys(Writable.prototype).forEach(function(method) {
+ if (!Duplex.prototype[method])
+ Duplex.prototype[method] = Writable.prototype[method];
+});
+
+function Duplex(options) {
+ if (!(this instanceof Duplex))
+ return new Duplex(options);
+
+ Readable.call(this, options);
+ Writable.call(this, options);
+
+ if (options && options.readable === false)
+ this.readable = false;
+
+ if (options && options.writable === false)
+ this.writable = false;
+
+ this.allowHalfOpen = true;
+ if (options && options.allowHalfOpen === false)
+ this.allowHalfOpen = false;
+
+ this.once('end', onend);
+}
+
+// the no-half-open enforcer
+function onend() {
+ // if we allow half-open state, or if the writable side ended,
+ // then we're ok.
+ if (this.allowHalfOpen || this._writableState.ended)
+ return;
+
+ // no more data can be written.
+ // But allow more writes to happen in this tick.
+ process.nextTick(this.end.bind(this));
+}
diff --git a/deps/npm/node_modules/sha/node_modules/readable-stream/lib/_stream_passthrough.js b/deps/npm/node_modules/sha/node_modules/readable-stream/lib/_stream_passthrough.js
new file mode 100644
index 000000000..330c247d4
--- /dev/null
+++ b/deps/npm/node_modules/sha/node_modules/readable-stream/lib/_stream_passthrough.js
@@ -0,0 +1,41 @@
+// Copyright Joyent, Inc. and other Node contributors.
+//
+// Permission is hereby granted, free of charge, to any person obtaining a
+// copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to permit
+// persons to whom the Software is furnished to do so, subject to the
+// following conditions:
+//
+// The above copyright notice and this permission notice shall be included
+// in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
+// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
+// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
+// USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+// a passthrough stream.
+// basically just the most minimal sort of Transform stream.
+// Every written chunk gets output as-is.
+
+module.exports = PassThrough;
+
+var Transform = require('./_stream_transform');
+var util = require('util');
+util.inherits(PassThrough, Transform);
+
+function PassThrough(options) {
+ if (!(this instanceof PassThrough))
+ return new PassThrough(options);
+
+ Transform.call(this, options);
+}
+
+PassThrough.prototype._transform = function(chunk, encoding, cb) {
+ cb(null, chunk);
+};
diff --git a/deps/npm/node_modules/sha/node_modules/readable-stream/lib/_stream_readable.js b/deps/npm/node_modules/sha/node_modules/readable-stream/lib/_stream_readable.js
new file mode 100644
index 000000000..0ac8534b7
--- /dev/null
+++ b/deps/npm/node_modules/sha/node_modules/readable-stream/lib/_stream_readable.js
@@ -0,0 +1,927 @@
+// Copyright Joyent, Inc. and other Node contributors.
+//
+// Permission is hereby granted, free of charge, to any person obtaining a
+// copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to permit
+// persons to whom the Software is furnished to do so, subject to the
+// following conditions:
+//
+// The above copyright notice and this permission notice shall be included
+// in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
+// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
+// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
+// USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+module.exports = Readable;
+Readable.ReadableState = ReadableState;
+
+var EE = require('events').EventEmitter;
+if (!EE.listenerCount) EE.listenerCount = function(emitter, type) {
+ return emitter.listeners(type).length;
+};
+var Stream = require('stream');
+var util = require('util');
+var StringDecoder;
+
+util.inherits(Readable, Stream);
+
+function ReadableState(options, stream) {
+ options = options || {};
+
+ // the point at which it stops calling _read() to fill the buffer
+ // Note: 0 is a valid value, means "don't call _read preemptively ever"
+ var hwm = options.highWaterMark;
+ this.highWaterMark = (hwm || hwm === 0) ? hwm : 16 * 1024;
+
+ // cast to ints.
+ this.highWaterMark = ~~this.highWaterMark;
+
+ this.buffer = [];
+ this.length = 0;
+ this.pipes = null;
+ this.pipesCount = 0;
+ this.flowing = false;
+ this.ended = false;
+ this.endEmitted = false;
+ this.reading = false;
+
+ // In streams that never have any data, and do push(null) right away,
+ // the consumer can miss the 'end' event if they do some I/O before
+ // consuming the stream. So, we don't emit('end') until some reading
+ // happens.
+ this.calledRead = false;
+
+ // a flag to be able to tell if the onwrite cb is called immediately,
+ // or on a later tick. We set this to true at first, becuase any
+ // actions that shouldn't happen until "later" should generally also
+ // not happen before the first write call.
+ this.sync = true;
+
+ // whenever we return null, then we set a flag to say
+ // that we're awaiting a 'readable' event emission.
+ this.needReadable = false;
+ this.emittedReadable = false;
+ this.readableListening = false;
+
+
+ // object stream flag. Used to make read(n) ignore n and to
+ // make all the buffer merging and length checks go away
+ this.objectMode = !!options.objectMode;
+
+ // Crypto is kind of old and crusty. Historically, its default string
+ // encoding is 'binary' so we have to make this configurable.
+ // Everything else in the universe uses 'utf8', though.
+ this.defaultEncoding = options.defaultEncoding || 'utf8';
+
+ // when piping, we only care about 'readable' events that happen
+ // after read()ing all the bytes and not getting any pushback.
+ this.ranOut = false;
+
+ // the number of writers that are awaiting a drain event in .pipe()s
+ this.awaitDrain = 0;
+
+ // if true, a maybeReadMore has been scheduled
+ this.readingMore = false;
+
+ this.decoder = null;
+ this.encoding = null;
+ if (options.encoding) {
+ if (!StringDecoder)
+ StringDecoder = require('string_decoder').StringDecoder;
+ this.decoder = new StringDecoder(options.encoding);
+ this.encoding = options.encoding;
+ }
+}
+
+function Readable(options) {
+ if (!(this instanceof Readable))
+ return new Readable(options);
+
+ this._readableState = new ReadableState(options, this);
+
+ // legacy
+ this.readable = true;
+
+ Stream.call(this);
+}
+
+// Manually shove something into the read() buffer.
+// This returns true if the highWaterMark has not been hit yet,
+// similar to how Writable.write() returns true if you should
+// write() some more.
+Readable.prototype.push = function(chunk, encoding) {
+ var state = this._readableState;
+
+ if (typeof chunk === 'string' && !state.objectMode) {
+ encoding = encoding || state.defaultEncoding;
+ if (encoding !== state.encoding) {
+ chunk = new Buffer(chunk, encoding);
+ encoding = '';
+ }
+ }
+
+ return readableAddChunk(this, state, chunk, encoding, false);
+};
+
+// Unshift should *always* be something directly out of read()
+Readable.prototype.unshift = function(chunk) {
+ var state = this._readableState;
+ return readableAddChunk(this, state, chunk, '', true);
+};
+
+function readableAddChunk(stream, state, chunk, encoding, addToFront) {
+ var er = chunkInvalid(state, chunk);
+ if (er) {
+ stream.emit('error', er);
+ } else if (chunk === null || chunk === undefined) {
+ state.reading = false;
+ if (!state.ended)
+ onEofChunk(stream, state);
+ } else if (state.objectMode || chunk && chunk.length > 0) {
+ if (state.ended && !addToFront) {
+ var e = new Error('stream.push() after EOF');
+ stream.emit('error', e);
+ } else if (state.endEmitted && addToFront) {
+ var e = new Error('stream.unshift() after end event');
+ stream.emit('error', e);
+ } else {
+ if (state.decoder && !addToFront && !encoding)
+ chunk = state.decoder.write(chunk);
+
+ // update the buffer info.
+ state.length += state.objectMode ? 1 : chunk.length;
+ if (addToFront) {
+ state.buffer.unshift(chunk);
+ } else {
+ state.reading = false;
+ state.buffer.push(chunk);
+ }
+
+ if (state.needReadable)
+ emitReadable(stream);
+
+ maybeReadMore(stream, state);
+ }
+ } else if (!addToFront) {
+ state.reading = false;
+ }
+
+ return needMoreData(state);
+}
+
+
+
+// if it's past the high water mark, we can push in some more.
+// Also, if we have no data yet, we can stand some
+// more bytes. This is to work around cases where hwm=0,
+// such as the repl. Also, if the push() triggered a
+// readable event, and the user called read(largeNumber) such that
+// needReadable was set, then we ought to push more, so that another
+// 'readable' event will be triggered.
+function needMoreData(state) {
+ return !state.ended &&
+ (state.needReadable ||
+ state.length < state.highWaterMark ||
+ state.length === 0);
+}
+
+// backwards compatibility.
+Readable.prototype.setEncoding = function(enc) {
+ if (!StringDecoder)
+ StringDecoder = require('string_decoder').StringDecoder;
+ this._readableState.decoder = new StringDecoder(enc);
+ this._readableState.encoding = enc;
+};
+
+// Don't raise the hwm > 128MB
+var MAX_HWM = 0x800000;
+function roundUpToNextPowerOf2(n) {
+ if (n >= MAX_HWM) {
+ n = MAX_HWM;
+ } else {
+ // Get the next highest power of 2
+ n--;
+ for (var p = 1; p < 32; p <<= 1) n |= n >> p;
+ n++;
+ }
+ return n;
+}
+
+function howMuchToRead(n, state) {
+ if (state.length === 0 && state.ended)
+ return 0;
+
+ if (state.objectMode)
+ return n === 0 ? 0 : 1;
+
+ if (isNaN(n) || n === null) {
+ // only flow one buffer at a time
+ if (state.flowing && state.buffer.length)
+ return state.buffer[0].length;
+ else
+ return state.length;
+ }
+
+ if (n <= 0)
+ return 0;
+
+ // If we're asking for more than the target buffer level,
+ // then raise the water mark. Bump up to the next highest
+ // power of 2, to prevent increasing it excessively in tiny
+ // amounts.
+ if (n > state.highWaterMark)
+ state.highWaterMark = roundUpToNextPowerOf2(n);
+
+ // don't have that much. return null, unless we've ended.
+ if (n > state.length) {
+ if (!state.ended) {
+ state.needReadable = true;
+ return 0;
+ } else
+ return state.length;
+ }
+
+ return n;
+}
+
+// you can override either this method, or the async _read(n) below.
+Readable.prototype.read = function(n) {
+ var state = this._readableState;
+ state.calledRead = true;
+ var nOrig = n;
+
+ if (typeof n !== 'number' || n > 0)
+ state.emittedReadable = false;
+
+ // if we're doing read(0) to trigger a readable event, but we
+ // already have a bunch of data in the buffer, then just trigger
+ // the 'readable' event and move on.
+ if (n === 0 &&
+ state.needReadable &&
+ (state.length >= state.highWaterMark || state.ended)) {
+ emitReadable(this);
+ return null;
+ }
+
+ n = howMuchToRead(n, state);
+
+ // if we've ended, and we're now clear, then finish it up.
+ if (n === 0 && state.ended) {
+ if (state.length === 0)
+ endReadable(this);
+ return null;
+ }
+
+ // All the actual chunk generation logic needs to be
+ // *below* the call to _read. The reason is that in certain
+ // synthetic stream cases, such as passthrough streams, _read
+ // may be a completely synchronous operation which may change
+ // the state of the read buffer, providing enough data when
+ // before there was *not* enough.
+ //
+ // So, the steps are:
+ // 1. Figure out what the state of things will be after we do
+ // a read from the buffer.
+ //
+ // 2. If that resulting state will trigger a _read, then call _read.
+ // Note that this may be asynchronous, or synchronous. Yes, it is
+ // deeply ugly to write APIs this way, but that still doesn't mean
+ // that the Readable class should behave improperly, as streams are
+ // designed to be sync/async agnostic.
+ // Take note if the _read call is sync or async (ie, if the read call
+ // has returned yet), so that we know whether or not it's safe to emit
+ // 'readable' etc.
+ //
+ // 3. Actually pull the requested chunks out of the buffer and return.
+
+ // if we need a readable event, then we need to do some reading.
+ var doRead = state.needReadable;
+
+ // if we currently have less than the highWaterMark, then also read some
+ if (state.length - n <= state.highWaterMark)
+ doRead = true;
+
+ // however, if we've ended, then there's no point, and if we're already
+ // reading, then it's unnecessary.
+ if (state.ended || state.reading)
+ doRead = false;
+
+ if (doRead) {
+ state.reading = true;
+ state.sync = true;
+ // if the length is currently zero, then we *need* a readable event.
+ if (state.length === 0)
+ state.needReadable = true;
+ // call internal read method
+ this._read(state.highWaterMark);
+ state.sync = false;
+ }
+
+ // If _read called its callback synchronously, then `reading`
+ // will be false, and we need to re-evaluate how much data we
+ // can return to the user.
+ if (doRead && !state.reading)
+ n = howMuchToRead(nOrig, state);
+
+ var ret;
+ if (n > 0)
+ ret = fromList(n, state);
+ else
+ ret = null;
+
+ if (ret === null) {
+ state.needReadable = true;
+ n = 0;
+ }
+
+ state.length -= n;
+
+ // If we have nothing in the buffer, then we want to know
+ // as soon as we *do* get something into the buffer.
+ if (state.length === 0 && !state.ended)
+ state.needReadable = true;
+
+ // If we happened to read() exactly the remaining amount in the
+ // buffer, and the EOF has been seen at this point, then make sure
+ // that we emit 'end' on the very next tick.
+ if (state.ended && !state.endEmitted && state.length === 0)
+ endReadable(this);
+
+ return ret;
+};
+
+function chunkInvalid(state, chunk) {
+ var er = null;
+ if (!Buffer.isBuffer(chunk) &&
+ 'string' !== typeof chunk &&
+ chunk !== null &&
+ chunk !== undefined &&
+ !state.objectMode &&
+ !er) {
+ er = new TypeError('Invalid non-string/buffer chunk');
+ }
+ return er;
+}
+
+
+function onEofChunk(stream, state) {
+ if (state.decoder && !state.ended && state.decoder.end) {
+ var chunk = state.decoder.end();
+ if (chunk && chunk.length) {
+ state.buffer.push(chunk);
+ state.length += state.objectMode ? 1 : chunk.length;
+ }
+ }
+ state.ended = true;
+
+ // if we've ended and we have some data left, then emit
+ // 'readable' now to make sure it gets picked up.
+ if (state.length > 0)
+ emitReadable(stream);
+ else
+ endReadable(stream);
+}
+
+// Don't emit readable right away in sync mode, because this can trigger
+// another read() call => stack overflow. This way, it might trigger
+// a nextTick recursion warning, but that's not so bad.
+function emitReadable(stream) {
+ var state = stream._readableState;
+ state.needReadable = false;
+ if (state.emittedReadable)
+ return;
+
+ state.emittedReadable = true;
+ if (state.sync)
+ process.nextTick(function() {
+ emitReadable_(stream);
+ });
+ else
+ emitReadable_(stream);
+}
+
+function emitReadable_(stream) {
+ stream.emit('readable');
+}
+
+
+// at this point, the user has presumably seen the 'readable' event,
+// and called read() to consume some data. that may have triggered
+// in turn another _read(n) call, in which case reading = true if
+// it's in progress.
+// However, if we're not ended, or reading, and the length < hwm,
+// then go ahead and try to read some more preemptively.
+function maybeReadMore(stream, state) {
+ if (!state.readingMore) {
+ state.readingMore = true;
+ process.nextTick(function() {
+ maybeReadMore_(stream, state);
+ });
+ }
+}
+
+function maybeReadMore_(stream, state) {
+ var len = state.length;
+ while (!state.reading && !state.flowing && !state.ended &&
+ state.length < state.highWaterMark) {
+ stream.read(0);
+ if (len === state.length)
+ // didn't get any data, stop spinning.
+ break;
+ else
+ len = state.length;
+ }
+ state.readingMore = false;
+}
+
+// abstract method. to be overridden in specific implementation classes.
+// call cb(er, data) where data is <= n in length.
+// for virtual (non-string, non-buffer) streams, "length" is somewhat
+// arbitrary, and perhaps not very meaningful.
+Readable.prototype._read = function(n) {
+ this.emit('error', new Error('not implemented'));
+};
+
+Readable.prototype.pipe = function(dest, pipeOpts) {
+ var src = this;
+ var state = this._readableState;
+
+ switch (state.pipesCount) {
+ case 0:
+ state.pipes = dest;
+ break;
+ case 1:
+ state.pipes = [state.pipes, dest];
+ break;
+ default:
+ state.pipes.push(dest);
+ break;
+ }
+ state.pipesCount += 1;
+
+ var doEnd = (!pipeOpts || pipeOpts.end !== false) &&
+ dest !== process.stdout &&
+ dest !== process.stderr;
+
+ var endFn = doEnd ? onend : cleanup;
+ if (state.endEmitted)
+ process.nextTick(endFn);
+ else
+ src.once('end', endFn);
+
+ dest.on('unpipe', onunpipe);
+ function onunpipe(readable) {
+ if (readable !== src) return;
+ cleanup();
+ }
+
+ function onend() {
+ dest.end();
+ }
+
+ // when the dest drains, it reduces the awaitDrain counter
+ // on the source. This would be more elegant with a .once()
+ // handler in flow(), but adding and removing repeatedly is
+ // too slow.
+ var ondrain = pipeOnDrain(src);
+ dest.on('drain', ondrain);
+
+ function cleanup() {
+ // cleanup event handlers once the pipe is broken
+ dest.removeListener('close', onclose);
+ dest.removeListener('finish', onfinish);
+ dest.removeListener('drain', ondrain);
+ dest.removeListener('error', onerror);
+ dest.removeListener('unpipe', onunpipe);
+ src.removeListener('end', onend);
+ src.removeListener('end', cleanup);
+
+ // if the reader is waiting for a drain event from this
+ // specific writer, then it would cause it to never start
+ // flowing again.
+ // So, if this is awaiting a drain, then we just call it now.
+ // If we don't know, then assume that we are waiting for one.
+ if (!dest._writableState || dest._writableState.needDrain)
+ ondrain();
+ }
+
+ // if the dest has an error, then stop piping into it.
+ // however, don't suppress the throwing behavior for this.
+ function onerror(er) {
+ unpipe();
+ dest.removeListener('error', onerror);
+ if (EE.listenerCount(dest, 'error') === 0)
+ dest.emit('error', er);
+ }
+ // This is a brutally ugly hack to make sure that our error handler
+ // is attached before any userland ones. NEVER DO THIS.
+ if (!dest._events || !dest._events.error)
+ dest.on('error', onerror);
+ else if (Array.isArray(dest._events.error))
+ dest._events.error.unshift(onerror);
+ else
+ dest._events.error = [onerror, dest._events.error];
+
+
+
+ // Both close and finish should trigger unpipe, but only once.
+ function onclose() {
+ dest.removeListener('finish', onfinish);
+ unpipe();
+ }
+ dest.once('close', onclose);
+ function onfinish() {
+ dest.removeListener('close', onclose);
+ unpipe();
+ }
+ dest.once('finish', onfinish);
+
+ function unpipe() {
+ src.unpipe(dest);
+ }
+
+ // tell the dest that it's being piped to
+ dest.emit('pipe', src);
+
+ // start the flow if it hasn't been started already.
+ if (!state.flowing) {
+ // the handler that waits for readable events after all
+ // the data gets sucked out in flow.
+ // This would be easier to follow with a .once() handler
+ // in flow(), but that is too slow.
+ this.on('readable', pipeOnReadable);
+
+ state.flowing = true;
+ process.nextTick(function() {
+ flow(src);
+ });
+ }
+
+ return dest;
+};
+
+function pipeOnDrain(src) {
+ return function() {
+ var dest = this;
+ var state = src._readableState;
+ state.awaitDrain--;
+ if (state.awaitDrain === 0)
+ flow(src);
+ };
+}
+
+function flow(src) {
+ var state = src._readableState;
+ var chunk;
+ state.awaitDrain = 0;
+
+ function write(dest, i, list) {
+ var written = dest.write(chunk);
+ if (false === written) {
+ state.awaitDrain++;
+ }
+ }
+
+ while (state.pipesCount && null !== (chunk = src.read())) {
+
+ if (state.pipesCount === 1)
+ write(state.pipes, 0, null);
+ else
+ state.pipes.forEach(write);
+
+ src.emit('data', chunk);
+
+ // if anyone needs a drain, then we have to wait for that.
+ if (state.awaitDrain > 0)
+ return;
+ }
+
+ // if every destination was unpiped, either before entering this
+ // function, or in the while loop, then stop flowing.
+ //
+ // NB: This is a pretty rare edge case.
+ if (state.pipesCount === 0) {
+ state.flowing = false;
+
+ // if there were data event listeners added, then switch to old mode.
+ if (EE.listenerCount(src, 'data') > 0)
+ emitDataEvents(src);
+ return;
+ }
+
+ // at this point, no one needed a drain, so we just ran out of data
+ // on the next readable event, start it over again.
+ state.ranOut = true;
+}
+
+function pipeOnReadable() {
+ if (this._readableState.ranOut) {
+ this._readableState.ranOut = false;
+ flow(this);
+ }
+}
+
+
+Readable.prototype.unpipe = function(dest) {
+ var state = this._readableState;
+
+ // if we're not piping anywhere, then do nothing.
+ if (state.pipesCount === 0)
+ return this;
+
+ // just one destination. most common case.
+ if (state.pipesCount === 1) {
+ // passed in one, but it's not the right one.
+ if (dest && dest !== state.pipes)
+ return this;
+
+ if (!dest)
+ dest = state.pipes;
+
+ // got a match.
+ state.pipes = null;
+ state.pipesCount = 0;
+ this.removeListener('readable', pipeOnReadable);
+ state.flowing = false;
+ if (dest)
+ dest.emit('unpipe', this);
+ return this;
+ }
+
+ // slow case. multiple pipe destinations.
+
+ if (!dest) {
+ // remove all.
+ var dests = state.pipes;
+ var len = state.pipesCount;
+ state.pipes = null;
+ state.pipesCount = 0;
+ this.removeListener('readable', pipeOnReadable);
+ state.flowing = false;
+
+ for (var i = 0; i < len; i++)
+ dests[i].emit('unpipe', this);
+ return this;
+ }
+
+ // try to find the right one.
+ var i = state.pipes.indexOf(dest);
+ if (i === -1)
+ return this;
+
+ state.pipes.splice(i, 1);
+ state.pipesCount -= 1;
+ if (state.pipesCount === 1)
+ state.pipes = state.pipes[0];
+
+ dest.emit('unpipe', this);
+
+ return this;
+};
+
+// set up data events if they are asked for
+// Ensure readable listeners eventually get something
+Readable.prototype.on = function(ev, fn) {
+ var res = Stream.prototype.on.call(this, ev, fn);
+
+ if (ev === 'data' && !this._readableState.flowing)
+ emitDataEvents(this);
+
+ if (ev === 'readable' && this.readable) {
+ var state = this._readableState;
+ if (!state.readableListening) {
+ state.readableListening = true;
+ state.emittedReadable = false;
+ state.needReadable = true;
+ if (!state.reading) {
+ this.read(0);
+ } else if (state.length) {
+ emitReadable(this, state);
+ }
+ }
+ }
+
+ return res;
+};
+Readable.prototype.addListener = Readable.prototype.on;
+
+// pause() and resume() are remnants of the legacy readable stream API
+// If the user uses them, then switch into old mode.
+Readable.prototype.resume = function() {
+ emitDataEvents(this);
+ this.read(0);
+ this.emit('resume');
+};
+
+Readable.prototype.pause = function() {
+ emitDataEvents(this, true);
+ this.emit('pause');
+};
+
+function emitDataEvents(stream, startPaused) {
+ var state = stream._readableState;
+
+ if (state.flowing) {
+ // https://github.com/isaacs/readable-stream/issues/16
+ throw new Error('Cannot switch to old mode now.');
+ }
+
+ var paused = startPaused || false;
+ var readable = false;
+
+ // convert to an old-style stream.
+ stream.readable = true;
+ stream.pipe = Stream.prototype.pipe;
+ stream.on = stream.addListener = Stream.prototype.on;
+
+ stream.on('readable', function() {
+ readable = true;
+
+ var c;
+ while (!paused && (null !== (c = stream.read())))
+ stream.emit('data', c);
+
+ if (c === null) {
+ readable = false;
+ stream._readableState.needReadable = true;
+ }
+ });
+
+ stream.pause = function() {
+ paused = true;
+ this.emit('pause');
+ };
+
+ stream.resume = function() {
+ paused = false;
+ if (readable)
+ process.nextTick(function() {
+ stream.emit('readable');
+ });
+ else
+ this.read(0);
+ this.emit('resume');
+ };
+
+ // now make it start, just in case it hadn't already.
+ stream.emit('readable');
+}
+
+// wrap an old-style stream as the async data source.
+// This is *not* part of the readable stream interface.
+// It is an ugly unfortunate mess of history.
+Readable.prototype.wrap = function(stream) {
+ var state = this._readableState;
+ var paused = false;
+
+ var self = this;
+ stream.on('end', function() {
+ if (state.decoder && !state.ended) {
+ var chunk = state.decoder.end();
+ if (chunk && chunk.length)
+ self.push(chunk);
+ }
+
+ self.push(null);
+ });
+
+ stream.on('data', function(chunk) {
+ if (state.decoder)
+ chunk = state.decoder.write(chunk);
+ if (!chunk || !state.objectMode && !chunk.length)
+ return;
+
+ var ret = self.push(chunk);
+ if (!ret) {
+ paused = true;
+ stream.pause();
+ }
+ });
+
+ // proxy all the other methods.
+ // important when wrapping filters and duplexes.
+ for (var i in stream) {
+ if (typeof stream[i] === 'function' &&
+ typeof this[i] === 'undefined') {
+ this[i] = function(method) { return function() {
+ return stream[method].apply(stream, arguments);
+ }}(i);
+ }
+ }
+
+ // proxy certain important events.
+ var events = ['error', 'close', 'destroy', 'pause', 'resume'];
+ events.forEach(function(ev) {
+ stream.on(ev, self.emit.bind(self, ev));
+ });
+
+ // when we try to consume some more bytes, simply unpause the
+ // underlying stream.
+ self._read = function(n) {
+ if (paused) {
+ paused = false;
+ stream.resume();
+ }
+ };
+
+ return self;
+};
+
+
+
+// exposed for testing purposes only.
+Readable._fromList = fromList;
+
+// Pluck off n bytes from an array of buffers.
+// Length is the combined lengths of all the buffers in the list.
+function fromList(n, state) {
+ var list = state.buffer;
+ var length = state.length;
+ var stringMode = !!state.decoder;
+ var objectMode = !!state.objectMode;
+ var ret;
+
+ // nothing in the list, definitely empty.
+ if (list.length === 0)
+ return null;
+
+ if (length === 0)
+ ret = null;
+ else if (objectMode)
+ ret = list.shift();
+ else if (!n || n >= length) {
+ // read it all, truncate the array.
+ if (stringMode)
+ ret = list.join('');
+ else
+ ret = Buffer.concat(list, length);
+ list.length = 0;
+ } else {
+ // read just some of it.
+ if (n < list[0].length) {
+ // just take a part of the first list item.
+ // slice is the same for buffers and strings.
+ var buf = list[0];
+ ret = buf.slice(0, n);
+ list[0] = buf.slice(n);
+ } else if (n === list[0].length) {
+ // first list is a perfect match
+ ret = list.shift();
+ } else {
+ // complex case.
+ // we have enough to cover it, but it spans past the first buffer.
+ if (stringMode)
+ ret = '';
+ else
+ ret = new Buffer(n);
+
+ var c = 0;
+ for (var i = 0, l = list.length; i < l && c < n; i++) {
+ var buf = list[0];
+ var cpy = Math.min(n - c, buf.length);
+
+ if (stringMode)
+ ret += buf.slice(0, cpy);
+ else
+ buf.copy(ret, c, 0, cpy);
+
+ if (cpy < buf.length)
+ list[0] = buf.slice(cpy);
+ else
+ list.shift();
+
+ c += cpy;
+ }
+ }
+ }
+
+ return ret;
+}
+
+function endReadable(stream) {
+ var state = stream._readableState;
+
+ // If we get here before consuming all the bytes, then that is a
+ // bug in node. Should never happen.
+ if (state.length > 0)
+ throw new Error('endReadable called on non-empty stream');
+
+ if (!state.endEmitted && state.calledRead) {
+ state.ended = true;
+ process.nextTick(function() {
+ // Check that we didn't get one last unshift.
+ if (!state.endEmitted && state.length === 0) {
+ state.endEmitted = true;
+ stream.readable = false;
+ stream.emit('end');
+ }
+ });
+ }
+}
diff --git a/deps/npm/node_modules/sha/node_modules/readable-stream/lib/_stream_transform.js b/deps/npm/node_modules/sha/node_modules/readable-stream/lib/_stream_transform.js
new file mode 100644
index 000000000..707e4b3bf
--- /dev/null
+++ b/deps/npm/node_modules/sha/node_modules/readable-stream/lib/_stream_transform.js
@@ -0,0 +1,205 @@
+// Copyright Joyent, Inc. and other Node contributors.
+//
+// Permission is hereby granted, free of charge, to any person obtaining a
+// copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to permit
+// persons to whom the Software is furnished to do so, subject to the
+// following conditions:
+//
+// The above copyright notice and this permission notice shall be included
+// in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
+// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
+// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
+// USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+
+// a transform stream is a readable/writable stream where you do
+// something with the data. Sometimes it's called a "filter",
+// but that's not a great name for it, since that implies a thing where
+// some bits pass through, and others are simply ignored. (That would
+// be a valid example of a transform, of course.)
+//
+// While the output is causally related to the input, it's not a
+// necessarily symmetric or synchronous transformation. For example,
+// a zlib stream might take multiple plain-text writes(), and then
+// emit a single compressed chunk some time in the future.
+//
+// Here's how this works:
+//
+// The Transform stream has all the aspects of the readable and writable
+// stream classes. When you write(chunk), that calls _write(chunk,cb)
+// internally, and returns false if there's a lot of pending writes
+// buffered up. When you call read(), that calls _read(n) until
+// there's enough pending readable data buffered up.
+//
+// In a transform stream, the written data is placed in a buffer. When
+// _read(n) is called, it transforms the queued up data, calling the
+// buffered _write cb's as it consumes chunks. If consuming a single
+// written chunk would result in multiple output chunks, then the first
+// outputted bit calls the readcb, and subsequent chunks just go into
+// the read buffer, and will cause it to emit 'readable' if necessary.
+//
+// This way, back-pressure is actually determined by the reading side,
+// since _read has to be called to start processing a new chunk. However,
+// a pathological inflate type of transform can cause excessive buffering
+// here. For example, imagine a stream where every byte of input is
+// interpreted as an integer from 0-255, and then results in that many
+// bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in
+// 1kb of data being output. In this case, you could write a very small
+// amount of input, and end up with a very large amount of output. In
+// such a pathological inflating mechanism, there'd be no way to tell
+// the system to stop doing the transform. A single 4MB write could
+// cause the system to run out of memory.
+//
+// However, even in such a pathological case, only a single written chunk
+// would be consumed, and then the rest would wait (un-transformed) until
+// the results of the previous transformed chunk were consumed.
+
+module.exports = Transform;
+
+var Duplex = require('./_stream_duplex');
+var util = require('util');
+util.inherits(Transform, Duplex);
+
+
+function TransformState(options, stream) {
+ this.afterTransform = function(er, data) {
+ return afterTransform(stream, er, data);
+ };
+
+ this.needTransform = false;
+ this.transforming = false;
+ this.writecb = null;
+ this.writechunk = null;
+}
+
+function afterTransform(stream, er, data) {
+ var ts = stream._transformState;
+ ts.transforming = false;
+
+ var cb = ts.writecb;
+
+ if (!cb)
+ return stream.emit('error', new Error('no writecb in Transform class'));
+
+ ts.writechunk = null;
+ ts.writecb = null;
+
+ if (data !== null && data !== undefined)
+ stream.push(data);
+
+ if (cb)
+ cb(er);
+
+ var rs = stream._readableState;
+ rs.reading = false;
+ if (rs.needReadable || rs.length < rs.highWaterMark) {
+ stream._read(rs.highWaterMark);
+ }
+}
+
+
+function Transform(options) {
+ if (!(this instanceof Transform))
+ return new Transform(options);
+
+ Duplex.call(this, options);
+
+ var ts = this._transformState = new TransformState(options, this);
+
+ // when the writable side finishes, then flush out anything remaining.
+ var stream = this;
+
+ // start out asking for a readable event once data is transformed.
+ this._readableState.needReadable = true;
+
+ // we have implemented the _read method, and done the other things
+ // that Readable wants before the first _read call, so unset the
+ // sync guard flag.
+ this._readableState.sync = false;
+
+ this.once('finish', function() {
+ if ('function' === typeof this._flush)
+ this._flush(function(er) {
+ done(stream, er);
+ });
+ else
+ done(stream);
+ });
+}
+
+Transform.prototype.push = function(chunk, encoding) {
+ this._transformState.needTransform = false;
+ return Duplex.prototype.push.call(this, chunk, encoding);
+};
+
+// This is the part where you do stuff!
+// override this function in implementation classes.
+// 'chunk' is an input chunk.
+//
+// Call `push(newChunk)` to pass along transformed output
+// to the readable side. You may call 'push' zero or more times.
+//
+// Call `cb(err)` when you are done with this chunk. If you pass
+// an error, then that'll put the hurt on the whole operation. If you
+// never call cb(), then you'll never get another chunk.
+Transform.prototype._transform = function(chunk, encoding, cb) {
+ throw new Error('not implemented');
+};
+
+Transform.prototype._write = function(chunk, encoding, cb) {
+ var ts = this._transformState;
+ ts.writecb = cb;
+ ts.writechunk = chunk;
+ ts.writeencoding = encoding;
+ if (!ts.transforming) {
+ var rs = this._readableState;
+ if (ts.needTransform ||
+ rs.needReadable ||
+ rs.length < rs.highWaterMark)
+ this._read(rs.highWaterMark);
+ }
+};
+
+// Doesn't matter what the args are here.
+// _transform does all the work.
+// That we got here means that the readable side wants more data.
+Transform.prototype._read = function(n) {
+ var ts = this._transformState;
+
+ if (ts.writechunk !== null && ts.writecb && !ts.transforming) {
+ ts.transforming = true;
+ this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);
+ } else {
+ // mark that we need a transform, so that any data that comes in
+ // will get processed, now that we've asked for it.
+ ts.needTransform = true;
+ }
+};
+
+
+function done(stream, er) {
+ if (er)
+ return stream.emit('error', er);
+
+ // if there's nothing in the write buffer, then that means
+ // that nothing more will ever be provided
+ var ws = stream._writableState;
+ var rs = stream._readableState;
+ var ts = stream._transformState;
+
+ if (ws.length)
+ throw new Error('calling transform done when ws.length != 0');
+
+ if (ts.transforming)
+ throw new Error('calling transform done when still transforming');
+
+ return stream.push(null);
+}
diff --git a/deps/npm/node_modules/sha/node_modules/readable-stream/lib/_stream_writable.js b/deps/npm/node_modules/sha/node_modules/readable-stream/lib/_stream_writable.js
new file mode 100644
index 000000000..4b976a9f3
--- /dev/null
+++ b/deps/npm/node_modules/sha/node_modules/readable-stream/lib/_stream_writable.js
@@ -0,0 +1,369 @@
+// Copyright Joyent, Inc. and other Node contributors.
+//
+// Permission is hereby granted, free of charge, to any person obtaining a
+// copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to permit
+// persons to whom the Software is furnished to do so, subject to the
+// following conditions:
+//
+// The above copyright notice and this permission notice shall be included
+// in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
+// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
+// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
+// USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+// A bit simpler than readable streams.
+// Implement an async ._write(chunk, cb), and it'll handle all
+// the drain event emission and buffering.
+
+module.exports = Writable;
+Writable.WritableState = WritableState;
+
+var util = require('util');
+var assert = require('assert');
+var Stream = require('stream');
+
+util.inherits(Writable, Stream);
+
+function WriteReq(chunk, encoding, cb) {
+ this.chunk = chunk;
+ this.encoding = encoding;
+ this.callback = cb;
+}
+
+function WritableState(options, stream) {
+ options = options || {};
+
+ // the point at which write() starts returning false
+ // Note: 0 is a valid value, means that we always return false if
+ // the entire buffer is not flushed immediately on write()
+ var hwm = options.highWaterMark;
+ this.highWaterMark = (hwm || hwm === 0) ? hwm : 16 * 1024;
+
+ // object stream flag to indicate whether or not this stream
+ // contains buffers or objects.
+ this.objectMode = !!options.objectMode;
+
+ // cast to ints.
+ this.highWaterMark = ~~this.highWaterMark;
+
+ this.needDrain = false;
+ // at the start of calling end()
+ this.ending = false;
+ // when end() has been called, and returned
+ this.ended = false;
+ // when 'finish' is emitted
+ this.finished = false;
+
+ // should we decode strings into buffers before passing to _write?
+ // this is here so that some node-core streams can optimize string
+ // handling at a lower level.
+ var noDecode = options.decodeStrings === false;
+ this.decodeStrings = !noDecode;
+
+ // Crypto is kind of old and crusty. Historically, its default string
+ // encoding is 'binary' so we have to make this configurable.
+ // Everything else in the universe uses 'utf8', though.
+ this.defaultEncoding = options.defaultEncoding || 'utf8';
+
+ // not an actual buffer we keep track of, but a measurement
+ // of how much we're waiting to get pushed to some underlying
+ // socket or file.
+ this.length = 0;
+
+ // a flag to see when we're in the middle of a write.
+ this.writing = false;
+
+ // a flag to be able to tell if the onwrite cb is called immediately,
+ // or on a later tick. We set this to true at first, becuase any
+ // actions that shouldn't happen until "later" should generally also
+ // not happen before the first write call.
+ this.sync = true;
+
+ // a flag to know if we're processing previously buffered items, which
+ // may call the _write() callback in the same tick, so that we don't
+ // end up in an overlapped onwrite situation.
+ this.bufferProcessing = false;
+
+ // the callback that's passed to _write(chunk,cb)
+ this.onwrite = function(er) {
+ onwrite(stream, er);
+ };
+
+ // the callback that the user supplies to write(chunk,encoding,cb)
+ this.writecb = null;
+
+ // the amount that is being written when _write is called.
+ this.writelen = 0;
+
+ this.buffer = [];
+}
+
+function Writable(options) {
+ // Writable ctor is applied to Duplexes, though they're not
+ // instanceof Writable, they're instanceof Readable.
+ if (!(this instanceof Writable) && !(this instanceof require('./_stream_duplex')))
+ return new Writable(options);
+
+ this._writableState = new WritableState(options, this);
+
+ // legacy.
+ this.writable = true;
+
+ Stream.call(this);
+}
+
+// Otherwise people can pipe Writable streams, which is just wrong.
+Writable.prototype.pipe = function() {
+ this.emit('error', new Error('Cannot pipe. Not readable.'));
+};
+
+
+function writeAfterEnd(stream, state, cb) {
+ var er = new Error('write after end');
+ // TODO: defer error events consistently everywhere, not just the cb
+ stream.emit('error', er);
+ process.nextTick(function() {
+ cb(er);
+ });
+}
+
+// If we get something that is not a buffer, string, null, or undefined,
+// and we're not in objectMode, then that's an error.
+// Otherwise stream chunks are all considered to be of length=1, and the
+// watermarks determine how many objects to keep in the buffer, rather than
+// how many bytes or characters.
+function validChunk(stream, state, chunk, cb) {
+ var valid = true;
+ if (!Buffer.isBuffer(chunk) &&
+ 'string' !== typeof chunk &&
+ chunk !== null &&
+ chunk !== undefined &&
+ !state.objectMode) {
+ var er = new TypeError('Invalid non-string/buffer chunk');
+ stream.emit('error', er);
+ process.nextTick(function() {
+ cb(er);
+ });
+ valid = false;
+ }
+ return valid;
+}
+
+Writable.prototype.write = function(chunk, encoding, cb) {
+ var state = this._writableState;
+ var ret = false;
+
+ if (typeof encoding === 'function') {
+ cb = encoding;
+ encoding = null;
+ }
+
+ if (Buffer.isBuffer(chunk))
+ encoding = 'buffer';
+ else if (!encoding)
+ encoding = state.defaultEncoding;
+
+ if (typeof cb !== 'function')
+ cb = function() {};
+
+ if (state.ended)
+ writeAfterEnd(this, state, cb);
+ else if (validChunk(this, state, chunk, cb))
+ ret = writeOrBuffer(this, state, chunk, encoding, cb);
+
+ return ret;
+};
+
+function decodeChunk(state, chunk, encoding) {
+ if (!state.objectMode &&
+ state.decodeStrings !== false &&
+ typeof chunk === 'string') {
+ chunk = new Buffer(chunk, encoding);
+ }
+ return chunk;
+}
+
+// if we're already writing something, then just put this
+// in the queue, and wait our turn. Otherwise, call _write
+// If we return false, then we need a drain event, so set that flag.
+function writeOrBuffer(stream, state, chunk, encoding, cb) {
+ chunk = decodeChunk(state, chunk, encoding);
+ if (Buffer.isBuffer(chunk))
+ encoding = 'buffer';
+ var len = state.objectMode ? 1 : chunk.length;
+
+ state.length += len;
+
+ var ret = state.length < state.highWaterMark;
+ state.needDrain = !ret;
+
+ if (state.writing)
+ state.buffer.push(new WriteReq(chunk, encoding, cb));
+ else
+ doWrite(stream, state, len, chunk, encoding, cb);
+
+ return ret;
+}
+
+function doWrite(stream, state, len, chunk, encoding, cb) {
+ state.writelen = len;
+ state.writecb = cb;
+ state.writing = true;
+ state.sync = true;
+ stream._write(chunk, encoding, state.onwrite);
+ state.sync = false;
+}
+
+function onwriteError(stream, state, sync, er, cb) {
+ if (sync)
+ process.nextTick(function() {
+ cb(er);
+ });
+ else
+ cb(er);
+
+ stream.emit('error', er);
+}
+
+function onwriteStateUpdate(state) {
+ state.writing = false;
+ state.writecb = null;
+ state.length -= state.writelen;
+ state.writelen = 0;
+}
+
+function onwrite(stream, er) {
+ var state = stream._writableState;
+ var sync = state.sync;
+ var cb = state.writecb;
+
+ onwriteStateUpdate(state);
+
+ if (er)
+ onwriteError(stream, state, sync, er, cb);
+ else {
+ // Check if we're actually ready to finish, but don't emit yet
+ var finished = needFinish(stream, state);
+
+ if (!finished && !state.bufferProcessing && state.buffer.length)
+ clearBuffer(stream, state);
+
+ if (sync) {
+ process.nextTick(function() {
+ afterWrite(stream, state, finished, cb);
+ });
+ } else {
+ afterWrite(stream, state, finished, cb);
+ }
+ }
+}
+
+function afterWrite(stream, state, finished, cb) {
+ if (!finished)
+ onwriteDrain(stream, state);
+ cb();
+ if (finished)
+ finishMaybe(stream, state);
+}
+
+// Must force callback to be called on nextTick, so that we don't
+// emit 'drain' before the write() consumer gets the 'false' return
+// value, and has a chance to attach a 'drain' listener.
+function onwriteDrain(stream, state) {
+ if (state.length === 0 && state.needDrain) {
+ state.needDrain = false;
+ stream.emit('drain');
+ }
+}
+
+
+// if there's something in the buffer waiting, then process it
+function clearBuffer(stream, state) {
+ state.bufferProcessing = true;
+
+ for (var c = 0; c < state.buffer.length; c++) {
+ var entry = state.buffer[c];
+ var chunk = entry.chunk;
+ var encoding = entry.encoding;
+ var cb = entry.callback;
+ var len = state.objectMode ? 1 : chunk.length;
+
+ doWrite(stream, state, len, chunk, encoding, cb);
+
+ // if we didn't call the onwrite immediately, then
+ // it means that we need to wait until it does.
+ // also, that means that the chunk and cb are currently
+ // being processed, so move the buffer counter past them.
+ if (state.writing) {
+ c++;
+ break;
+ }
+ }
+
+ state.bufferProcessing = false;
+ if (c < state.buffer.length)
+ state.buffer = state.buffer.slice(c);
+ else
+ state.buffer.length = 0;
+}
+
+Writable.prototype._write = function(chunk, encoding, cb) {
+ cb(new Error('not implemented'));
+};
+
+Writable.prototype.end = function(chunk, encoding, cb) {
+ var state = this._writableState;
+
+ if (typeof chunk === 'function') {
+ cb = chunk;
+ chunk = null;
+ encoding = null;
+ } else if (typeof encoding === 'function') {
+ cb = encoding;
+ encoding = null;
+ }
+
+ if (typeof chunk !== 'undefined' && chunk !== null)
+ this.write(chunk, encoding);
+
+ // ignore unnecessary end() calls.
+ if (!state.ending && !state.finished)
+ endWritable(this, state, cb);
+};
+
+
+function needFinish(stream, state) {
+ return (state.ending &&
+ state.length === 0 &&
+ !state.finished &&
+ !state.writing);
+}
+
+function finishMaybe(stream, state) {
+ var need = needFinish(stream, state);
+ if (need) {
+ state.finished = true;
+ stream.emit('finish');
+ }
+ return need;
+}
+
+function endWritable(stream, state, cb) {
+ state.ending = true;
+ finishMaybe(stream, state);
+ if (cb) {
+ if (state.finished)
+ process.nextTick(cb);
+ else
+ stream.once('finish', cb);
+ }
+ state.ended = true;
+}
diff --git a/deps/npm/node_modules/sha/node_modules/readable-stream/package.json b/deps/npm/node_modules/sha/node_modules/readable-stream/package.json
new file mode 100644
index 000000000..206b4806c
--- /dev/null
+++ b/deps/npm/node_modules/sha/node_modules/readable-stream/package.json
@@ -0,0 +1,36 @@
+{
+ "name": "readable-stream",
+ "version": "1.0.24",
+ "description": "An exploration of a new kind of readable streams for Node.js",
+ "main": "readable.js",
+ "dependencies": {},
+ "devDependencies": {
+ "tap": "~0.2.6"
+ },
+ "scripts": {
+ "test": "tap test/simple/*.js"
+ },
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/isaacs/readable-stream"
+ },
+ "keywords": [
+ "readable",
+ "stream",
+ "pipe"
+ ],
+ "author": {
+ "name": "Isaac Z. Schlueter",
+ "email": "i@izs.me",
+ "url": "http://blog.izs.me/"
+ },
+ "license": "BSD",
+ "readme": "# readable-stream\n\nA new class of streams for Node.js\n\nThis module provides the new Stream base classes introduced in Node\nv0.10, for use in Node v0.8. You can use it to have programs that\nhave to work with node v0.8, while being forward-compatible for v0.10\nand beyond. When you drop support for v0.8, you can remove this\nmodule, and only use the native streams.\n\nThis is almost exactly the same codebase as appears in Node v0.10.\nHowever:\n\n1. The exported object is actually the Readable class. Decorating the\n native `stream` module would be global pollution.\n2. In v0.10, you can safely use `base64` as an argument to\n `setEncoding` in Readable streams. However, in v0.8, the\n StringDecoder class has no `end()` method, which is problematic for\n Base64. So, don't use that, because it'll break and be weird.\n\nOther than that, the API is the same as `require('stream')` in v0.10,\nso the API docs are reproduced below.\n\n----------\n\n Stability: 2 - Unstable\n\nA stream is an abstract interface implemented by various objects in\nNode. For example a request to an HTTP server is a stream, as is\nstdout. Streams are readable, writable, or both. All streams are\ninstances of [EventEmitter][]\n\nYou can load the Stream base classes by doing `require('stream')`.\nThere are base classes provided for Readable streams, Writable\nstreams, Duplex streams, and Transform streams.\n\n## Compatibility\n\nIn earlier versions of Node, the Readable stream interface was\nsimpler, but also less powerful and less useful.\n\n* Rather than waiting for you to call the `read()` method, `'data'`\n events would start emitting immediately. If you needed to do some\n I/O to decide how to handle data, then you had to store the chunks\n in some kind of buffer so that they would not be lost.\n* The `pause()` method was advisory, rather than guaranteed. This\n meant that you still had to be prepared to receive `'data'` events\n even when the stream was in a paused state.\n\nIn Node v0.10, the Readable class described below was added. For\nbackwards compatibility with older Node programs, Readable streams\nswitch into \"old mode\" when a `'data'` event handler is added, or when\nthe `pause()` or `resume()` methods are called. The effect is that,\neven if you are not using the new `read()` method and `'readable'`\nevent, you no longer have to worry about losing `'data'` chunks.\n\nMost programs will continue to function normally. However, this\nintroduces an edge case in the following conditions:\n\n* No `'data'` event handler is added.\n* The `pause()` and `resume()` methods are never called.\n\nFor example, consider the following code:\n\n```javascript\n// WARNING! BROKEN!\nnet.createServer(function(socket) {\n\n // we add an 'end' method, but never consume the data\n socket.on('end', function() {\n // It will never get here.\n socket.end('I got your message (but didnt read it)\\n');\n });\n\n}).listen(1337);\n```\n\nIn versions of node prior to v0.10, the incoming message data would be\nsimply discarded. However, in Node v0.10 and beyond, the socket will\nremain paused forever.\n\nThe workaround in this situation is to call the `resume()` method to\ntrigger \"old mode\" behavior:\n\n```javascript\n// Workaround\nnet.createServer(function(socket) {\n\n socket.on('end', function() {\n socket.end('I got your message (but didnt read it)\\n');\n });\n\n // start the flow of data, discarding it.\n socket.resume();\n\n}).listen(1337);\n```\n\nIn addition to new Readable streams switching into old-mode, pre-v0.10\nstyle streams can be wrapped in a Readable class using the `wrap()`\nmethod.\n\n## Class: stream.Readable\n\n<!--type=class-->\n\nA `Readable Stream` has the following methods, members, and events.\n\nNote that `stream.Readable` is an abstract class designed to be\nextended with an underlying implementation of the `_read(size)`\nmethod. (See below.)\n\n### new stream.Readable([options])\n\n* `options` {Object}\n * `highWaterMark` {Number} The maximum number of bytes to store in\n the internal buffer before ceasing to read from the underlying\n resource. Default=16kb\n * `encoding` {String} If specified, then buffers will be decoded to\n strings using the specified encoding. Default=null\n * `objectMode` {Boolean} Whether this stream should behave\n as a stream of objects. Meaning that stream.read(n) returns\n a single value instead of a Buffer of size n\n\nIn classes that extend the Readable class, make sure to call the\nconstructor so that the buffering settings can be properly\ninitialized.\n\n### readable.\\_read(size)\n\n* `size` {Number} Number of bytes to read asynchronously\n\nNote: **This function should NOT be called directly.** It should be\nimplemented by child classes, and called by the internal Readable\nclass methods only.\n\nAll Readable stream implementations must provide a `_read` method\nto fetch data from the underlying resource.\n\nThis method is prefixed with an underscore because it is internal to\nthe class that defines it, and should not be called directly by user\nprograms. However, you **are** expected to override this method in\nyour own extension classes.\n\nWhen data is available, put it into the read queue by calling\n`readable.push(chunk)`. If `push` returns false, then you should stop\nreading. When `_read` is called again, you should start pushing more\ndata.\n\nThe `size` argument is advisory. Implementations where a \"read\" is a\nsingle call that returns data can use this to know how much data to\nfetch. Implementations where that is not relevant, such as TCP or\nTLS, may ignore this argument, and simply provide data whenever it\nbecomes available. There is no need, for example to \"wait\" until\n`size` bytes are available before calling `stream.push(chunk)`.\n\n### readable.push(chunk)\n\n* `chunk` {Buffer | null | String} Chunk of data to push into the read queue\n* return {Boolean} Whether or not more pushes should be performed\n\nNote: **This function should be called by Readable implementors, NOT\nby consumers of Readable subclasses.** The `_read()` function will not\nbe called again until at least one `push(chunk)` call is made. If no\ndata is available, then you MAY call `push('')` (an empty string) to\nallow a future `_read` call, without adding any data to the queue.\n\nThe `Readable` class works by putting data into a read queue to be\npulled out later by calling the `read()` method when the `'readable'`\nevent fires.\n\nThe `push()` method will explicitly insert some data into the read\nqueue. If it is called with `null` then it will signal the end of the\ndata.\n\nIn some cases, you may be wrapping a lower-level source which has some\nsort of pause/resume mechanism, and a data callback. In those cases,\nyou could wrap the low-level source object by doing something like\nthis:\n\n```javascript\n// source is an object with readStop() and readStart() methods,\n// and an `ondata` member that gets called when it has data, and\n// an `onend` member that gets called when the data is over.\n\nvar stream = new Readable();\n\nsource.ondata = function(chunk) {\n // if push() returns false, then we need to stop reading from source\n if (!stream.push(chunk))\n source.readStop();\n};\n\nsource.onend = function() {\n stream.push(null);\n};\n\n// _read will be called when the stream wants to pull more data in\n// the advisory size argument is ignored in this case.\nstream._read = function(n) {\n source.readStart();\n};\n```\n\n### readable.unshift(chunk)\n\n* `chunk` {Buffer | null | String} Chunk of data to unshift onto the read queue\n* return {Boolean} Whether or not more pushes should be performed\n\nThis is the corollary of `readable.push(chunk)`. Rather than putting\nthe data at the *end* of the read queue, it puts it at the *front* of\nthe read queue.\n\nThis is useful in certain use-cases where a stream is being consumed\nby a parser, which needs to \"un-consume\" some data that it has\noptimistically pulled out of the source.\n\n```javascript\n// A parser for a simple data protocol.\n// The \"header\" is a JSON object, followed by 2 \\n characters, and\n// then a message body.\n//\n// Note: This can be done more simply as a Transform stream. See below.\n\nfunction SimpleProtocol(source, options) {\n if (!(this instanceof SimpleProtocol))\n return new SimpleProtocol(options);\n\n Readable.call(this, options);\n this._inBody = false;\n this._sawFirstCr = false;\n\n // source is a readable stream, such as a socket or file\n this._source = source;\n\n var self = this;\n source.on('end', function() {\n self.push(null);\n });\n\n // give it a kick whenever the source is readable\n // read(0) will not consume any bytes\n source.on('readable', function() {\n self.read(0);\n });\n\n this._rawHeader = [];\n this.header = null;\n}\n\nSimpleProtocol.prototype = Object.create(\n Readable.prototype, { constructor: { value: SimpleProtocol }});\n\nSimpleProtocol.prototype._read = function(n) {\n if (!this._inBody) {\n var chunk = this._source.read();\n\n // if the source doesn't have data, we don't have data yet.\n if (chunk === null)\n return this.push('');\n\n // check if the chunk has a \\n\\n\n var split = -1;\n for (var i = 0; i < chunk.length; i++) {\n if (chunk[i] === 10) { // '\\n'\n if (this._sawFirstCr) {\n split = i;\n break;\n } else {\n this._sawFirstCr = true;\n }\n } else {\n this._sawFirstCr = false;\n }\n }\n\n if (split === -1) {\n // still waiting for the \\n\\n\n // stash the chunk, and try again.\n this._rawHeader.push(chunk);\n this.push('');\n } else {\n this._inBody = true;\n var h = chunk.slice(0, split);\n this._rawHeader.push(h);\n var header = Buffer.concat(this._rawHeader).toString();\n try {\n this.header = JSON.parse(header);\n } catch (er) {\n this.emit('error', new Error('invalid simple protocol data'));\n return;\n }\n // now, because we got some extra data, unshift the rest\n // back into the read queue so that our consumer will see it.\n var b = chunk.slice(split);\n this.unshift(b);\n\n // and let them know that we are done parsing the header.\n this.emit('header', this.header);\n }\n } else {\n // from there on, just provide the data to our consumer.\n // careful not to push(null), since that would indicate EOF.\n var chunk = this._source.read();\n if (chunk) this.push(chunk);\n }\n};\n\n// Usage:\nvar parser = new SimpleProtocol(source);\n// Now parser is a readable stream that will emit 'header'\n// with the parsed header data.\n```\n\n### readable.wrap(stream)\n\n* `stream` {Stream} An \"old style\" readable stream\n\nIf you are using an older Node library that emits `'data'` events and\nhas a `pause()` method that is advisory only, then you can use the\n`wrap()` method to create a Readable stream that uses the old stream\nas its data source.\n\nFor example:\n\n```javascript\nvar OldReader = require('./old-api-module.js').OldReader;\nvar oreader = new OldReader;\nvar Readable = require('stream').Readable;\nvar myReader = new Readable().wrap(oreader);\n\nmyReader.on('readable', function() {\n myReader.read(); // etc.\n});\n```\n\n### Event: 'readable'\n\nWhen there is data ready to be consumed, this event will fire.\n\nWhen this event emits, call the `read()` method to consume the data.\n\n### Event: 'end'\n\nEmitted when the stream has received an EOF (FIN in TCP terminology).\nIndicates that no more `'data'` events will happen. If the stream is\nalso writable, it may be possible to continue writing.\n\n### Event: 'data'\n\nThe `'data'` event emits either a `Buffer` (by default) or a string if\n`setEncoding()` was used.\n\nNote that adding a `'data'` event listener will switch the Readable\nstream into \"old mode\", where data is emitted as soon as it is\navailable, rather than waiting for you to call `read()` to consume it.\n\n### Event: 'error'\n\nEmitted if there was an error receiving data.\n\n### Event: 'close'\n\nEmitted when the underlying resource (for example, the backing file\ndescriptor) has been closed. Not all streams will emit this.\n\n### readable.setEncoding(encoding)\n\nMakes the `'data'` event emit a string instead of a `Buffer`. `encoding`\ncan be `'utf8'`, `'utf16le'` (`'ucs2'`), `'ascii'`, or `'hex'`.\n\nThe encoding can also be set by specifying an `encoding` field to the\nconstructor.\n\n### readable.read([size])\n\n* `size` {Number | null} Optional number of bytes to read.\n* Return: {Buffer | String | null}\n\nNote: **This function SHOULD be called by Readable stream users.**\n\nCall this method to consume data once the `'readable'` event is\nemitted.\n\nThe `size` argument will set a minimum number of bytes that you are\ninterested in. If not set, then the entire content of the internal\nbuffer is returned.\n\nIf there is no data to consume, or if there are fewer bytes in the\ninternal buffer than the `size` argument, then `null` is returned, and\na future `'readable'` event will be emitted when more is available.\n\nCalling `stream.read(0)` will always return `null`, and will trigger a\nrefresh of the internal buffer, but otherwise be a no-op.\n\n### readable.pipe(destination, [options])\n\n* `destination` {Writable Stream}\n* `options` {Object} Optional\n * `end` {Boolean} Default=true\n\nConnects this readable stream to `destination` WriteStream. Incoming\ndata on this stream gets written to `destination`. Properly manages\nback-pressure so that a slow destination will not be overwhelmed by a\nfast readable stream.\n\nThis function returns the `destination` stream.\n\nFor example, emulating the Unix `cat` command:\n\n process.stdin.pipe(process.stdout);\n\nBy default `end()` is called on the destination when the source stream\nemits `end`, so that `destination` is no longer writable. Pass `{ end:\nfalse }` as `options` to keep the destination stream open.\n\nThis keeps `writer` open so that \"Goodbye\" can be written at the\nend.\n\n reader.pipe(writer, { end: false });\n reader.on(\"end\", function() {\n writer.end(\"Goodbye\\n\");\n });\n\nNote that `process.stderr` and `process.stdout` are never closed until\nthe process exits, regardless of the specified options.\n\n### readable.unpipe([destination])\n\n* `destination` {Writable Stream} Optional\n\nUndo a previously established `pipe()`. If no destination is\nprovided, then all previously established pipes are removed.\n\n### readable.pause()\n\nSwitches the readable stream into \"old mode\", where data is emitted\nusing a `'data'` event rather than being buffered for consumption via\nthe `read()` method.\n\nCeases the flow of data. No `'data'` events are emitted while the\nstream is in a paused state.\n\n### readable.resume()\n\nSwitches the readable stream into \"old mode\", where data is emitted\nusing a `'data'` event rather than being buffered for consumption via\nthe `read()` method.\n\nResumes the incoming `'data'` events after a `pause()`.\n\n\n## Class: stream.Writable\n\n<!--type=class-->\n\nA `Writable` Stream has the following methods, members, and events.\n\nNote that `stream.Writable` is an abstract class designed to be\nextended with an underlying implementation of the\n`_write(chunk, encoding, cb)` method. (See below.)\n\n### new stream.Writable([options])\n\n* `options` {Object}\n * `highWaterMark` {Number} Buffer level when `write()` starts\n returning false. Default=16kb\n * `decodeStrings` {Boolean} Whether or not to decode strings into\n Buffers before passing them to `_write()`. Default=true\n\nIn classes that extend the Writable class, make sure to call the\nconstructor so that the buffering settings can be properly\ninitialized.\n\n### writable.\\_write(chunk, encoding, callback)\n\n* `chunk` {Buffer | String} The chunk to be written. Will always\n be a buffer unless the `decodeStrings` option was set to `false`.\n* `encoding` {String} If the chunk is a string, then this is the\n encoding type. Ignore chunk is a buffer. Note that chunk will\n **always** be a buffer unless the `decodeStrings` option is\n explicitly set to `false`.\n* `callback` {Function} Call this function (optionally with an error\n argument) when you are done processing the supplied chunk.\n\nAll Writable stream implementations must provide a `_write` method to\nsend data to the underlying resource.\n\nNote: **This function MUST NOT be called directly.** It should be\nimplemented by child classes, and called by the internal Writable\nclass methods only.\n\nCall the callback using the standard `callback(error)` pattern to\nsignal that the write completed successfully or with an error.\n\nIf the `decodeStrings` flag is set in the constructor options, then\n`chunk` may be a string rather than a Buffer, and `encoding` will\nindicate the sort of string that it is. This is to support\nimplementations that have an optimized handling for certain string\ndata encodings. If you do not explicitly set the `decodeStrings`\noption to `false`, then you can safely ignore the `encoding` argument,\nand assume that `chunk` will always be a Buffer.\n\nThis method is prefixed with an underscore because it is internal to\nthe class that defines it, and should not be called directly by user\nprograms. However, you **are** expected to override this method in\nyour own extension classes.\n\n\n### writable.write(chunk, [encoding], [callback])\n\n* `chunk` {Buffer | String} Data to be written\n* `encoding` {String} Optional. If `chunk` is a string, then encoding\n defaults to `'utf8'`\n* `callback` {Function} Optional. Called when this chunk is\n successfully written.\n* Returns {Boolean}\n\nWrites `chunk` to the stream. Returns `true` if the data has been\nflushed to the underlying resource. Returns `false` to indicate that\nthe buffer is full, and the data will be sent out in the future. The\n`'drain'` event will indicate when the buffer is empty again.\n\nThe specifics of when `write()` will return false, is determined by\nthe `highWaterMark` option provided to the constructor.\n\n### writable.end([chunk], [encoding], [callback])\n\n* `chunk` {Buffer | String} Optional final data to be written\n* `encoding` {String} Optional. If `chunk` is a string, then encoding\n defaults to `'utf8'`\n* `callback` {Function} Optional. Called when the final chunk is\n successfully written.\n\nCall this method to signal the end of the data being written to the\nstream.\n\n### Event: 'drain'\n\nEmitted when the stream's write queue empties and it's safe to write\nwithout buffering again. Listen for it when `stream.write()` returns\n`false`.\n\n### Event: 'close'\n\nEmitted when the underlying resource (for example, the backing file\ndescriptor) has been closed. Not all streams will emit this.\n\n### Event: 'finish'\n\nWhen `end()` is called and there are no more chunks to write, this\nevent is emitted.\n\n### Event: 'pipe'\n\n* `source` {Readable Stream}\n\nEmitted when the stream is passed to a readable stream's pipe method.\n\n### Event 'unpipe'\n\n* `source` {Readable Stream}\n\nEmitted when a previously established `pipe()` is removed using the\nsource Readable stream's `unpipe()` method.\n\n## Class: stream.Duplex\n\n<!--type=class-->\n\nA \"duplex\" stream is one that is both Readable and Writable, such as a\nTCP socket connection.\n\nNote that `stream.Duplex` is an abstract class designed to be\nextended with an underlying implementation of the `_read(size)`\nand `_write(chunk, encoding, callback)` methods as you would with a Readable or\nWritable stream class.\n\nSince JavaScript doesn't have multiple prototypal inheritance, this\nclass prototypally inherits from Readable, and then parasitically from\nWritable. It is thus up to the user to implement both the lowlevel\n`_read(n)` method as well as the lowlevel `_write(chunk, encoding, cb)` method\non extension duplex classes.\n\n### new stream.Duplex(options)\n\n* `options` {Object} Passed to both Writable and Readable\n constructors. Also has the following fields:\n * `allowHalfOpen` {Boolean} Default=true. If set to `false`, then\n the stream will automatically end the readable side when the\n writable side ends and vice versa.\n\nIn classes that extend the Duplex class, make sure to call the\nconstructor so that the buffering settings can be properly\ninitialized.\n\n## Class: stream.Transform\n\nA \"transform\" stream is a duplex stream where the output is causally\nconnected in some way to the input, such as a zlib stream or a crypto\nstream.\n\nThere is no requirement that the output be the same size as the input,\nthe same number of chunks, or arrive at the same time. For example, a\nHash stream will only ever have a single chunk of output which is\nprovided when the input is ended. A zlib stream will either produce\nmuch smaller or much larger than its input.\n\nRather than implement the `_read()` and `_write()` methods, Transform\nclasses must implement the `_transform()` method, and may optionally\nalso implement the `_flush()` method. (See below.)\n\n### new stream.Transform([options])\n\n* `options` {Object} Passed to both Writable and Readable\n constructors.\n\nIn classes that extend the Transform class, make sure to call the\nconstructor so that the buffering settings can be properly\ninitialized.\n\n### transform.\\_transform(chunk, encoding, callback)\n\n* `chunk` {Buffer | String} The chunk to be transformed. Will always\n be a buffer unless the `decodeStrings` option was set to `false`.\n* `encoding` {String} If the chunk is a string, then this is the\n encoding type. (Ignore if `decodeStrings` chunk is a buffer.)\n* `callback` {Function} Call this function (optionally with an error\n argument) when you are done processing the supplied chunk.\n\nNote: **This function MUST NOT be called directly.** It should be\nimplemented by child classes, and called by the internal Transform\nclass methods only.\n\nAll Transform stream implementations must provide a `_transform`\nmethod to accept input and produce output.\n\n`_transform` should do whatever has to be done in this specific\nTransform class, to handle the bytes being written, and pass them off\nto the readable portion of the interface. Do asynchronous I/O,\nprocess things, and so on.\n\nCall `transform.push(outputChunk)` 0 or more times to generate output\nfrom this input chunk, depending on how much data you want to output\nas a result of this chunk.\n\nCall the callback function only when the current chunk is completely\nconsumed. Note that there may or may not be output as a result of any\nparticular input chunk.\n\nThis method is prefixed with an underscore because it is internal to\nthe class that defines it, and should not be called directly by user\nprograms. However, you **are** expected to override this method in\nyour own extension classes.\n\n### transform.\\_flush(callback)\n\n* `callback` {Function} Call this function (optionally with an error\n argument) when you are done flushing any remaining data.\n\nNote: **This function MUST NOT be called directly.** It MAY be implemented\nby child classes, and if so, will be called by the internal Transform\nclass methods only.\n\nIn some cases, your transform operation may need to emit a bit more\ndata at the end of the stream. For example, a `Zlib` compression\nstream will store up some internal state so that it can optimally\ncompress the output. At the end, however, it needs to do the best it\ncan with what is left, so that the data will be complete.\n\nIn those cases, you can implement a `_flush` method, which will be\ncalled at the very end, after all the written data is consumed, but\nbefore emitting `end` to signal the end of the readable side. Just\nlike with `_transform`, call `transform.push(chunk)` zero or more\ntimes, as appropriate, and call `callback` when the flush operation is\ncomplete.\n\nThis method is prefixed with an underscore because it is internal to\nthe class that defines it, and should not be called directly by user\nprograms. However, you **are** expected to override this method in\nyour own extension classes.\n\n### Example: `SimpleProtocol` parser\n\nThe example above of a simple protocol parser can be implemented much\nmore simply by using the higher level `Transform` stream class.\n\nIn this example, rather than providing the input as an argument, it\nwould be piped into the parser, which is a more idiomatic Node stream\napproach.\n\n```javascript\nfunction SimpleProtocol(options) {\n if (!(this instanceof SimpleProtocol))\n return new SimpleProtocol(options);\n\n Transform.call(this, options);\n this._inBody = false;\n this._sawFirstCr = false;\n this._rawHeader = [];\n this.header = null;\n}\n\nSimpleProtocol.prototype = Object.create(\n Transform.prototype, { constructor: { value: SimpleProtocol }});\n\nSimpleProtocol.prototype._transform = function(chunk, encoding, done) {\n if (!this._inBody) {\n // check if the chunk has a \\n\\n\n var split = -1;\n for (var i = 0; i < chunk.length; i++) {\n if (chunk[i] === 10) { // '\\n'\n if (this._sawFirstCr) {\n split = i;\n break;\n } else {\n this._sawFirstCr = true;\n }\n } else {\n this._sawFirstCr = false;\n }\n }\n\n if (split === -1) {\n // still waiting for the \\n\\n\n // stash the chunk, and try again.\n this._rawHeader.push(chunk);\n } else {\n this._inBody = true;\n var h = chunk.slice(0, split);\n this._rawHeader.push(h);\n var header = Buffer.concat(this._rawHeader).toString();\n try {\n this.header = JSON.parse(header);\n } catch (er) {\n this.emit('error', new Error('invalid simple protocol data'));\n return;\n }\n // and let them know that we are done parsing the header.\n this.emit('header', this.header);\n\n // now, because we got some extra data, emit this first.\n this.push(b);\n }\n } else {\n // from there on, just provide the data to our consumer as-is.\n this.push(b);\n }\n done();\n};\n\nvar parser = new SimpleProtocol();\nsource.pipe(parser)\n\n// Now parser is a readable stream that will emit 'header'\n// with the parsed header data.\n```\n\n\n## Class: stream.PassThrough\n\nThis is a trivial implementation of a `Transform` stream that simply\npasses the input bytes across to the output. Its purpose is mainly\nfor examples and testing, but there are occasionally use cases where\nit can come in handy.\n\n\n[EventEmitter]: events.html#events_class_events_eventemitter\n",
+ "readmeFilename": "README.md",
+ "bugs": {
+ "url": "https://github.com/isaacs/readable-stream/issues"
+ },
+ "homepage": "https://github.com/isaacs/readable-stream",
+ "_id": "readable-stream@1.0.24",
+ "_from": "readable-stream@1.0"
+}
diff --git a/deps/npm/node_modules/sha/node_modules/readable-stream/passthrough.js b/deps/npm/node_modules/sha/node_modules/readable-stream/passthrough.js
new file mode 100644
index 000000000..27e8d8a55
--- /dev/null
+++ b/deps/npm/node_modules/sha/node_modules/readable-stream/passthrough.js
@@ -0,0 +1 @@
+module.exports = require("./lib/_stream_passthrough.js")
diff --git a/deps/npm/node_modules/sha/node_modules/readable-stream/readable.js b/deps/npm/node_modules/sha/node_modules/readable-stream/readable.js
new file mode 100644
index 000000000..4d1ddfc73
--- /dev/null
+++ b/deps/npm/node_modules/sha/node_modules/readable-stream/readable.js
@@ -0,0 +1,6 @@
+exports = module.exports = require('./lib/_stream_readable.js');
+exports.Readable = exports;
+exports.Writable = require('./lib/_stream_writable.js');
+exports.Duplex = require('./lib/_stream_duplex.js');
+exports.Transform = require('./lib/_stream_transform.js');
+exports.PassThrough = require('./lib/_stream_passthrough.js');
diff --git a/deps/npm/node_modules/sha/node_modules/readable-stream/transform.js b/deps/npm/node_modules/sha/node_modules/readable-stream/transform.js
new file mode 100644
index 000000000..5d482f078
--- /dev/null
+++ b/deps/npm/node_modules/sha/node_modules/readable-stream/transform.js
@@ -0,0 +1 @@
+module.exports = require("./lib/_stream_transform.js")
diff --git a/deps/npm/node_modules/sha/node_modules/readable-stream/writable.js b/deps/npm/node_modules/sha/node_modules/readable-stream/writable.js
new file mode 100644
index 000000000..e1e9efdf3
--- /dev/null
+++ b/deps/npm/node_modules/sha/node_modules/readable-stream/writable.js
@@ -0,0 +1 @@
+module.exports = require("./lib/_stream_writable.js")
diff --git a/deps/npm/node_modules/sha/package.json b/deps/npm/node_modules/sha/package.json
index 3b0e5822e..af9aa7ada 100644
--- a/deps/npm/node_modules/sha/package.json
+++ b/deps/npm/node_modules/sha/package.json
@@ -1,9 +1,9 @@
{
"name": "sha",
- "version": "1.0.1",
+ "version": "1.2.3",
"description": "Check and get file hashes",
"scripts": {
- "test": "mocha -R list"
+ "test": "mocha -R spec"
},
"repository": {
"type": "git",
@@ -11,16 +11,22 @@
},
"license": "BSD",
"optionalDependencies": {
- "graceful-fs": "1.2"
+ "graceful-fs": "2",
+ "readable-stream": "1.0"
},
"devDependencies": {
"mocha": "~1.9.0"
},
- "readme": "# sha\r\n\r\nCheck and get file hashes (using any algorithm)\r\n\r\n[![Build Status](https://travis-ci.org/ForbesLindesay/sha.png?branch=master)](https://travis-ci.org/ForbesLindesay/sha)\r\n[![Dependency Status](https://gemnasium.com/ForbesLindesay/sha.png)](https://gemnasium.com/ForbesLindesay/sha)\r\n\r\n## Installation\r\n\r\n $ npm install sha\r\n\r\n## API\r\n\r\n### check(fileName, expected, [options,] cb)\r\n\r\nAsynchronously check that `fileName` has a \"hash\" of `expected`. The callback will be called with either `null` or an error (indicating that they did not match).\r\n\r\nOptions:\r\n\r\n- algorithm: defaults to `sha1` and can be any of the algorithms supported by `crypto.createHash`\r\n\r\n### get(fileName, [options,] cb)\r\n\r\nAsynchronously get the \"hash\" of `fileName`. The callback will be called with an optional `error` object and the (lower cased) hex digest of the hash.\r\n\r\nOptions:\r\n\r\n- algorithm: defaults to `sha1` and can be any of the algorithms supported by `crypto.createHash`\r\n\r\n## License\r\n\r\nBSD\r\n",
+ "readme": "# sha\r\n\r\nCheck and get file hashes (using any algorithm)\r\n\r\n[![Build Status](https://travis-ci.org/ForbesLindesay/sha.png?branch=master)](https://travis-ci.org/ForbesLindesay/sha)\r\n[![Dependency Status](https://gemnasium.com/ForbesLindesay/sha.png)](https://gemnasium.com/ForbesLindesay/sha)\r\n[![NPM version](https://badge.fury.io/js/sha.png)](http://badge.fury.io/js/sha)\r\n\r\n## Installation\r\n\r\n $ npm install sha\r\n\r\n## API\r\n\r\n### check(fileName, expected, [options,] cb) / checkSync(filename, expected, [options])\r\n\r\nAsynchronously check that `fileName` has a \"hash\" of `expected`. The callback will be called with either `null` or an error (indicating that they did not match).\r\n\r\nOptions:\r\n\r\n- algorithm: defaults to `sha1` and can be any of the algorithms supported by `crypto.createHash`\r\n\r\n### get(fileName, [options,] cb) / getSync(filename, [options])\r\n\r\nAsynchronously get the \"hash\" of `fileName`. The callback will be called with an optional `error` object and the (lower cased) hex digest of the hash.\r\n\r\nOptions:\r\n\r\n- algorithm: defaults to `sha1` and can be any of the algorithms supported by `crypto.createHash`\r\n\r\n### stream(expected, [options])\r\n\r\nCheck the hash of a stream without ever buffering it. This is a pass through stream so you can do things like:\r\n\r\n```js\r\nfs.createReadStream('src')\r\n .pipe(sha.stream('expected'))\r\n .pipe(fs.createWriteStream('dest'))\r\n```\r\n\r\n`dest` will be a complete copy of `src` and an error will be emitted if the hash did not match `'expected'`.\r\n\r\nOptions:\r\n\r\n- algorithm: defaults to `sha1` and can be any of the algorithms supported by `crypto.createHash`\r\n\r\n## License\r\n\r\nYou may use this software under the BSD or MIT. Take your pick. If you want me to release it under another license, open a pull request.",
"readmeFilename": "README.md",
- "_id": "sha@1.0.1",
+ "bugs": {
+ "url": "https://github.com/ForbesLindesay/sha/issues"
+ },
+ "homepage": "https://github.com/ForbesLindesay/sha",
"dependencies": {
- "graceful-fs": "1.2"
+ "graceful-fs": "2",
+ "readable-stream": "1.0"
},
- "_from": "sha@~1.0.1"
+ "_id": "sha@1.2.3",
+ "_from": "sha@~1.2.1"
}
diff --git a/deps/npm/node_modules/slide/LICENSE b/deps/npm/node_modules/slide/LICENSE
index 05a401094..05eeeb88c 100644
--- a/deps/npm/node_modules/slide/LICENSE
+++ b/deps/npm/node_modules/slide/LICENSE
@@ -1,23 +1,15 @@
-Copyright 2009, 2010, 2011 Isaac Z. Schlueter.
-All rights reserved.
+The ISC License
-Permission is hereby granted, free of charge, to any person
-obtaining a copy of this software and associated documentation
-files (the "Software"), to deal in the Software without
-restriction, including without limitation the rights to use,
-copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the
-Software is furnished to do so, subject to the following
-conditions:
+Copyright (c) Isaac Z. Schlueter
-The above copyright notice and this permission notice shall be
-included in all copies or substantial portions of the Software.
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
-OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
-HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
-WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
-OTHER DEALINGS IN THE SOFTWARE.
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
+IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
diff --git a/deps/npm/node_modules/slide/package.json b/deps/npm/node_modules/slide/package.json
index 0ec014041..cc7441182 100644
--- a/deps/npm/node_modules/slide/package.json
+++ b/deps/npm/node_modules/slide/package.json
@@ -1,6 +1,6 @@
{
"name": "slide",
- "version": "1.1.4",
+ "version": "1.1.5",
"author": {
"name": "Isaac Z. Schlueter",
"email": "i@izs.me",
@@ -24,11 +24,12 @@
"type": "git",
"url": "git://github.com/isaacs/slide-flow-control.git"
},
+ "license": "ISC",
"readme": "# Controlling Flow: callbacks are easy\n\n## What's actually hard?\n\n- Doing a bunch of things in a specific order.\n- Knowing when stuff is done.\n- Handling failures.\n- Breaking up functionality into parts (avoid nested inline callbacks)\n\n\n## Common Mistakes\n\n- Abandoning convention and consistency.\n- Putting all callbacks inline.\n- Using libraries without grokking them.\n- Trying to make async code look sync.\n\n## Define Conventions\n\n- Two kinds of functions: *actors* take action, *callbacks* get results.\n- Essentially the continuation pattern. Resulting code *looks* similar\n to fibers, but is *much* simpler to implement.\n- Node works this way in the lowlevel APIs already, and it's very flexible.\n\n## Callbacks\n\n- Simple responders\n- Must always be prepared to handle errors, that's why it's the first argument.\n- Often inline anonymous, but not always.\n- Can trap and call other callbacks with modified data, or pass errors upwards.\n\n## Actors\n\n- Last argument is a callback.\n- If any error occurs, and can't be handled, pass it to the callback and return.\n- Must not throw. Return value ignored.\n- return x ==> return cb(null, x)\n- throw er ==> return cb(er)\n\n```javascript\n// return true if a path is either\n// a symlink or a directory.\nfunction isLinkOrDir (path, cb) {\n fs.lstat(path, function (er, s) {\n if (er) return cb(er)\n return cb(null, s.isDirectory() || s.isSymbolicLink())\n })\n}\n```\n\n# asyncMap\n\n## Usecases\n\n- I have a list of 10 files, and need to read all of them, and then continue when they're all done.\n- I have a dozen URLs, and need to fetch them all, and then continue when they're all done.\n- I have 4 connected users, and need to send a message to all of them, and then continue when that's done.\n- I have a list of n things, and I need to dosomething with all of them, in parallel, and get the results once they're all complete.\n\n\n## Solution\n\n```javascript\nvar asyncMap = require(\"slide\").asyncMap\nfunction writeFiles (files, what, cb) {\n asyncMap(files, function (f, cb) {\n fs.writeFile(f, what, cb)\n }, cb)\n}\nwriteFiles([my, file, list], \"foo\", cb)\n```\n\n# chain\n\n## Usecases\n\n- I have to do a bunch of things, in order. Get db credentials out of a file,\n read the data from the db, write that data to another file.\n- If anything fails, do not continue.\n- I still have to provide an array of functions, which is a lot of boilerplate,\n and a pita if your functions take args like\n\n```javascript\nfunction (cb) {\n blah(a, b, c, cb)\n}\n```\n\n- Results are discarded, which is a bit lame.\n- No way to branch.\n\n## Solution\n\n- reduces boilerplate by converting an array of [fn, args] to an actor\n that takes no arguments (except cb)\n- A bit like Function#bind, but tailored for our use-case.\n- bindActor(obj, \"method\", a, b, c)\n- bindActor(fn, a, b, c)\n- bindActor(obj, fn, a, b, c)\n- branching, skipping over falsey arguments\n\n```javascript\nchain([\n doThing && [thing, a, b, c]\n, isFoo && [doFoo, \"foo\"]\n, subChain && [chain, [one, two]]\n], cb)\n```\n\n- tracking results: results are stored in an optional array passed as argument,\n last result is always in results[results.length - 1].\n- treat chain.first and chain.last as placeholders for the first/last\n result up until that point.\n\n\n## Non-trivial example\n\n- Read number files in a directory\n- Add the results together\n- Ping a web service with the result\n- Write the response to a file\n- Delete the number files\n\n```javascript\nvar chain = require(\"slide\").chain\nfunction myProgram (cb) {\n var res = [], last = chain.last, first = chain.first\n chain([\n [fs, \"readdir\", \"the-directory\"]\n , [readFiles, \"the-directory\", last]\n , [sum, last]\n , [ping, \"POST\", \"example.com\", 80, \"/foo\", last]\n , [fs, \"writeFile\", \"result.txt\", last]\n , [rmFiles, \"./the-directory\", first]\n ], res, cb)\n}\n```\n\n# Conclusion: Convention Profits\n\n- Consistent API from top to bottom.\n- Sneak in at any point to inject functionality. Testable, reusable, ...\n- When ruby and python users whine, you can smile condescendingly.\n",
"readmeFilename": "README.md",
"bugs": {
"url": "https://github.com/isaacs/slide-flow-control/issues"
},
- "_id": "slide@1.1.4",
+ "_id": "slide@1.1.5",
"_from": "slide@latest"
}
diff --git a/deps/npm/node_modules/sorted-object/LICENSE.txt b/deps/npm/node_modules/sorted-object/LICENSE.txt
new file mode 100644
index 000000000..a92a60b82
--- /dev/null
+++ b/deps/npm/node_modules/sorted-object/LICENSE.txt
@@ -0,0 +1,19 @@
+Copyright © 2014 Domenic Denicola <domenic@domenicdenicola.com>
+
+This work is free. You can redistribute it and/or modify it under the
+terms of the Do What The Fuck You Want To Public License, Version 2,
+as published by Sam Hocevar. See below for more details.
+
+ DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
+ Version 2, December 2004
+
+ Copyright (C) 2004 Sam Hocevar <sam@hocevar.net>
+
+ Everyone is permitted to copy and distribute verbatim or modified
+ copies of this license document, and changing it is allowed as long
+ as the name is changed.
+
+ DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. You just DO WHAT THE FUCK YOU WANT TO.
diff --git a/deps/npm/node_modules/sorted-object/README.md b/deps/npm/node_modules/sorted-object/README.md
new file mode 100644
index 000000000..d3f12a278
--- /dev/null
+++ b/deps/npm/node_modules/sorted-object/README.md
@@ -0,0 +1,20 @@
+# Get a Version of an Object with Sorted Keys
+
+Although objects in JavaScript are theoretically unsorted, in practice most engines use insertion order—at least, ignoring numeric keys. This manifests itself most prominently when dealing with an object's JSON serialization.
+
+So, for example, you might be trying to serialize some object to a JSON file. But every time you write it, it ends up being output in a different order, depending on how you created it in the first place! This makes for some ugly diffs.
+
+**sorted-object** gives you the answer. Just use this package to create a version of your object with its keys sorted before serializing, and you'll get a consistent order every time.
+
+```js
+var sortedObject = require("sorted-object");
+
+var objectToSerialize = generateStuffNondeterministically();
+
+// Before:
+fs.writeFileSync("dest.json", JSON.stringify(objectToSerialize));
+
+// After:
+var sortedVersion = sortedObject(objectToSerialize);
+fs.writeFileSync("dest.json", JSON.stringify(sortedVersion));
+```
diff --git a/deps/npm/node_modules/sorted-object/lib/sorted-object.js b/deps/npm/node_modules/sorted-object/lib/sorted-object.js
new file mode 100644
index 000000000..26ebd500a
--- /dev/null
+++ b/deps/npm/node_modules/sorted-object/lib/sorted-object.js
@@ -0,0 +1,11 @@
+"use strict";
+
+module.exports = function (input) {
+ var output = Object.create(null);
+
+ Object.keys(input).sort().forEach(function (key) {
+ output[key] = input[key];
+ });
+
+ return output;
+};
diff --git a/deps/npm/node_modules/sorted-object/package.json b/deps/npm/node_modules/sorted-object/package.json
new file mode 100644
index 000000000..5bd814207
--- /dev/null
+++ b/deps/npm/node_modules/sorted-object/package.json
@@ -0,0 +1,37 @@
+{
+ "name": "sorted-object",
+ "description": "Returns a copy of an object with its keys sorted",
+ "keywords": [
+ "sort",
+ "keys",
+ "object"
+ ],
+ "version": "1.0.0",
+ "author": {
+ "name": "Domenic Denicola",
+ "email": "domenic@domenicdenicola.com",
+ "url": "http://domenic.me/"
+ },
+ "license": "WTFPL",
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/domenic/sorted-object.git"
+ },
+ "bugs": {
+ "url": "http://github.com/domenic/sorted-object/issues"
+ },
+ "main": "lib/sorted-object.js",
+ "scripts": {
+ "test": "tape test/tests.js",
+ "lint": "jshint lib && jshint test"
+ },
+ "devDependencies": {
+ "jshint": "~2.4.3",
+ "tape": "~2.4.2"
+ },
+ "readme": "# Get a Version of an Object with Sorted Keys\n\nAlthough objects in JavaScript are theoretically unsorted, in practice most engines use insertion order—at least, ignoring numeric keys. This manifests itself most prominently when dealing with an object's JSON serialization.\n\nSo, for example, you might be trying to serialize some object to a JSON file. But every time you write it, it ends up being output in a different order, depending on how you created it in the first place! This makes for some ugly diffs.\n\n**sorted-object** gives you the answer. Just use this package to create a version of your object with its keys sorted before serializing, and you'll get a consistent order every time.\n\n```js\nvar sortedObject = require(\"sorted-object\");\n\nvar objectToSerialize = generateStuffNondeterministically();\n\n// Before:\nfs.writeFileSync(\"dest.json\", JSON.stringify(objectToSerialize));\n\n// After:\nvar sortedVersion = sortedObject(objectToSerialize);\nfs.writeFileSync(\"dest.json\", JSON.stringify(sortedVersion));\n```\n",
+ "readmeFilename": "README.md",
+ "homepage": "https://github.com/domenic/sorted-object",
+ "_id": "sorted-object@1.0.0",
+ "_from": "sorted-object@"
+}
diff --git a/deps/npm/node_modules/tar/README.md b/deps/npm/node_modules/tar/README.md
index 7cfe3bbca..5bcc82cd8 100644
--- a/deps/npm/node_modules/tar/README.md
+++ b/deps/npm/node_modules/tar/README.md
@@ -2,49 +2,45 @@
Tar for Node.js.
-## Goals of this project
+[![NPM](https://nodei.co/npm/tar.png)](https://nodei.co/npm/tar/)
-1. Be able to parse and reasonably extract the contents of any tar file
- created by any program that creates tar files, period.
+## API
- At least, this includes every version of:
+See `examples/` for usage examples.
- * bsdtar
- * gnutar
- * solaris posix tar
- * Joerg Schilling's star ("Schilly tar")
+### var tar = require('tar')
-2. Create tar files that can be extracted by any of the following tar
- programs:
+Returns an object with `.Pack`, `.Extract` and `.Parse` methods.
- * bsdtar/libarchive version 2.6.2
- * gnutar 1.15 and above
- * SunOS Posix tar
- * Joerg Schilling's star ("Schilly tar")
+### tar.Pack([properties])
-3. 100% test coverage. Speed is important. Correctness is slightly
- more important.
+Returns a through stream. Use
+[fstream](https://npmjs.org/package/fstream) to write files into the
+pack stream and you will receive tar archive data from the pack
+stream.
-4. Create the kind of tar interface that Node users would want to use.
+The optional `properties` object are used to set properties in the tar
+'Global Extended Header'.
-5. Satisfy npm's needs for a portable tar implementation with a
- JavaScript interface.
+### tar.Extract([options])
-6. No excuses. No complaining. No tolerance for failure.
+Returns a through stream. Write tar data to the stream and the files
+in the tarball will be extracted onto the filesystem.
-## But isn't there already a tar.js?
+`options` can be:
-Yes, there are a few. This one is going to be better, and it will be
-fanatically maintained, because npm will depend on it.
+```js
+{
+ path: '/path/to/extract/tar/into',
+ strip: 0, // how many path segments to strip from the root when extracting
+}
+```
-That's why I need to write it from scratch. Creating and extracting
-tarballs is such a large part of what npm does, I simply can't have it
-be a black box any longer.
+`options` also get passed to the `fstream.Writer` instance that `tar`
+uses internally.
-## Didn't you have something already? Where'd it go?
+### tar.Parse()
-It's in the "old" folder. It's not functional. Don't use it.
-
-It was a useful exploration to learn the issues involved, but like most
-software of any reasonable complexity, node-tar won't be useful until
-it's been written at least 3 times.
+Returns a writable stream. Write tar data to it and it will emit
+`entry` events for each entry parsed from the tarball. This is used by
+`tar.Extract`.
diff --git a/deps/npm/node_modules/tar/lib/buffer-entry.js b/deps/npm/node_modules/tar/lib/buffer-entry.js
index 5322a28ab..6c1da2373 100644
--- a/deps/npm/node_modules/tar/lib/buffer-entry.js
+++ b/deps/npm/node_modules/tar/lib/buffer-entry.js
@@ -20,11 +20,11 @@ function BufferEntry () {
})
}
+inherits(BufferEntry, Entry)
+
// collect the bytes as they come in.
BufferEntry.prototype.write = function (c) {
c.copy(this._buffer, this._offset)
this._offset += c.length
Entry.prototype.write.call(this, c)
}
-
-inherits(BufferEntry, Entry)
diff --git a/deps/npm/node_modules/tar/lib/entry.js b/deps/npm/node_modules/tar/lib/entry.js
index df72313bc..4af5c4108 100644
--- a/deps/npm/node_modules/tar/lib/entry.js
+++ b/deps/npm/node_modules/tar/lib/entry.js
@@ -45,168 +45,169 @@ function Entry (header, extended, global) {
this._setProps()
}
-inherits(Entry, Stream,
-{ write: function (c) {
- if (this._ending) this.error("write() after end()", null, true)
- if (this._remaining === 0) {
- this.error("invalid bytes past eof")
- }
+inherits(Entry, Stream)
- // often we'll get a bunch of \0 at the end of the last write,
- // since chunks will always be 512 bytes when reading a tarball.
- if (c.length > this._remaining) {
- c = c.slice(0, this._remaining)
- }
- this._remaining -= c.length
+Entry.prototype.write = function (c) {
+ if (this._ending) this.error("write() after end()", null, true)
+ if (this._remaining === 0) {
+ this.error("invalid bytes past eof")
+ }
- // put it on the stack.
- var ql = this._queueLen
- this._queue.push(c)
- this._queueLen ++
+ // often we'll get a bunch of \0 at the end of the last write,
+ // since chunks will always be 512 bytes when reading a tarball.
+ if (c.length > this._remaining) {
+ c = c.slice(0, this._remaining)
+ }
+ this._remaining -= c.length
- this._read()
+ // put it on the stack.
+ var ql = this._queueLen
+ this._queue.push(c)
+ this._queueLen ++
- // either paused, or buffered
- if (this._paused || ql > 0) {
- this._needDrain = true
- return false
- }
+ this._read()
- return true
+ // either paused, or buffered
+ if (this._paused || ql > 0) {
+ this._needDrain = true
+ return false
}
-, end: function (c) {
- if (c) this.write(c)
- this._ending = true
- this._read()
- }
+ return true
+}
-, pause: function () {
- this._paused = true
- this.emit("pause")
- }
+Entry.prototype.end = function (c) {
+ if (c) this.write(c)
+ this._ending = true
+ this._read()
+}
-, resume: function () {
- // console.error(" Tar Entry resume", this.path)
- this.emit("resume")
- this._paused = false
- this._read()
- return this._queueLen - this._index > 1
- }
+Entry.prototype.pause = function () {
+ this._paused = true
+ this.emit("pause")
+}
+
+Entry.prototype.resume = function () {
+ // console.error(" Tar Entry resume", this.path)
+ this.emit("resume")
+ this._paused = false
+ this._read()
+ return this._queueLen - this._index > 1
+}
// This is bound to the instance
-, _read: function () {
- // console.error(" Tar Entry _read", this.path)
+Entry.prototype._read = function () {
+ // console.error(" Tar Entry _read", this.path)
- if (this._paused || this._reading || this._ended) return
+ if (this._paused || this._reading || this._ended) return
- // set this flag so that event handlers don't inadvertently
- // get multiple _read() calls running.
- this._reading = true
+ // set this flag so that event handlers don't inadvertently
+ // get multiple _read() calls running.
+ this._reading = true
- // have any data to emit?
- while (this._index < this._queueLen && !this._paused) {
- var chunk = this._queue[this._index ++]
- this.emit("data", chunk)
- }
+ // have any data to emit?
+ while (this._index < this._queueLen && !this._paused) {
+ var chunk = this._queue[this._index ++]
+ this.emit("data", chunk)
+ }
- // check if we're drained
- if (this._index >= this._queueLen) {
- this._queue.length = this._queueLen = this._index = 0
- if (this._needDrain) {
- this._needDrain = false
- this.emit("drain")
- }
- if (this._ending) {
- this._ended = true
- this.emit("end")
- }
+ // check if we're drained
+ if (this._index >= this._queueLen) {
+ this._queue.length = this._queueLen = this._index = 0
+ if (this._needDrain) {
+ this._needDrain = false
+ this.emit("drain")
}
-
- // if the queue gets too big, then pluck off whatever we can.
- // this should be fairly rare.
- var mql = this._maxQueueLen
- if (this._queueLen > mql && this._index > 0) {
- mql = Math.min(this._index, mql)
- this._index -= mql
- this._queueLen -= mql
- this._queue = this._queue.slice(mql)
+ if (this._ending) {
+ this._ended = true
+ this.emit("end")
}
+ }
- this._reading = false
+ // if the queue gets too big, then pluck off whatever we can.
+ // this should be fairly rare.
+ var mql = this._maxQueueLen
+ if (this._queueLen > mql && this._index > 0) {
+ mql = Math.min(this._index, mql)
+ this._index -= mql
+ this._queueLen -= mql
+ this._queue = this._queue.slice(mql)
}
-, _setProps: function () {
- // props = extended->global->header->{}
- var header = this._header
- , extended = this._extended
- , global = this._global
- , props = this.props
-
- // first get the values from the normal header.
- var fields = tar.fields
- for (var f = 0; fields[f] !== null; f ++) {
- var field = fields[f]
- , val = header[field]
- if (typeof val !== "undefined") props[field] = val
- }
+ this._reading = false
+}
- // next, the global header for this file.
- // numeric values, etc, will have already been parsed.
- ;[global, extended].forEach(function (p) {
- Object.keys(p).forEach(function (f) {
- if (typeof p[f] !== "undefined") props[f] = p[f]
- })
- })
+Entry.prototype._setProps = function () {
+ // props = extended->global->header->{}
+ var header = this._header
+ , extended = this._extended
+ , global = this._global
+ , props = this.props
+
+ // first get the values from the normal header.
+ var fields = tar.fields
+ for (var f = 0; fields[f] !== null; f ++) {
+ var field = fields[f]
+ , val = header[field]
+ if (typeof val !== "undefined") props[field] = val
+ }
- // no nulls allowed in path or linkpath
- ;["path", "linkpath"].forEach(function (p) {
- if (props.hasOwnProperty(p)) {
- props[p] = props[p].split("\0")[0]
- }
+ // next, the global header for this file.
+ // numeric values, etc, will have already been parsed.
+ ;[global, extended].forEach(function (p) {
+ Object.keys(p).forEach(function (f) {
+ if (typeof p[f] !== "undefined") props[f] = p[f]
})
+ })
+ // no nulls allowed in path or linkpath
+ ;["path", "linkpath"].forEach(function (p) {
+ if (props.hasOwnProperty(p)) {
+ props[p] = props[p].split("\0")[0]
+ }
+ })
- // set date fields to be a proper date
- ;["mtime", "ctime", "atime"].forEach(function (p) {
- if (props.hasOwnProperty(p)) {
- props[p] = new Date(props[p] * 1000)
- }
- })
- // set the type so that we know what kind of file to create
- var type
- switch (tar.types[props.type]) {
- case "OldFile":
- case "ContiguousFile":
- type = "File"
- break
-
- case "GNUDumpDir":
- type = "Directory"
- break
-
- case undefined:
- type = "Unknown"
- break
-
- case "Link":
- case "SymbolicLink":
- case "CharacterDevice":
- case "BlockDevice":
- case "Directory":
- case "FIFO":
- default:
- type = tar.types[props.type]
+ // set date fields to be a proper date
+ ;["mtime", "ctime", "atime"].forEach(function (p) {
+ if (props.hasOwnProperty(p)) {
+ props[p] = new Date(props[p] * 1000)
}
+ })
- this.type = type
- this.path = props.path
- this.size = props.size
-
- // size is special, since it signals when the file needs to end.
- this._remaining = props.size
+ // set the type so that we know what kind of file to create
+ var type
+ switch (tar.types[props.type]) {
+ case "OldFile":
+ case "ContiguousFile":
+ type = "File"
+ break
+
+ case "GNUDumpDir":
+ type = "Directory"
+ break
+
+ case undefined:
+ type = "Unknown"
+ break
+
+ case "Link":
+ case "SymbolicLink":
+ case "CharacterDevice":
+ case "BlockDevice":
+ case "Directory":
+ case "FIFO":
+ default:
+ type = tar.types[props.type]
}
-, warn: fstream.warn
-, error: fstream.error
-})
+
+ this.type = type
+ this.path = props.path
+ this.size = props.size
+
+ // size is special, since it signals when the file needs to end.
+ this._remaining = props.size
+}
+
+Entry.prototype.warn = fstream.warn
+Entry.prototype.error = fstream.error
diff --git a/deps/npm/node_modules/tar/lib/extended-header-writer.js b/deps/npm/node_modules/tar/lib/extended-header-writer.js
index a130c5b16..1728c4583 100644
--- a/deps/npm/node_modules/tar/lib/extended-header-writer.js
+++ b/deps/npm/node_modules/tar/lib/extended-header-writer.js
@@ -8,7 +8,6 @@ inherits(ExtendedHeaderWriter, EntryWriter)
var tar = require("../tar.js")
, path = require("path")
- , inherits = require("inherits")
, TarHeader = require("./header.js")
// props is the props of the thing we need to write an
diff --git a/deps/npm/node_modules/tar/lib/extended-header.js b/deps/npm/node_modules/tar/lib/extended-header.js
index 4346d6c59..74f432cee 100644
--- a/deps/npm/node_modules/tar/lib/extended-header.js
+++ b/deps/npm/node_modules/tar/lib/extended-header.js
@@ -30,7 +30,8 @@ function ExtendedHeader () {
this._key = ""
}
-inherits(ExtendedHeader, Entry, { _parse: parse })
+inherits(ExtendedHeader, Entry)
+ExtendedHeader.prototype._parse = parse
var s = 0
, states = ExtendedHeader.states = {}
diff --git a/deps/npm/node_modules/tar/package.json b/deps/npm/node_modules/tar/package.json
index 36eae3de6..4c69c4ba2 100644
--- a/deps/npm/node_modules/tar/package.json
+++ b/deps/npm/node_modules/tar/package.json
@@ -6,7 +6,7 @@
},
"name": "tar",
"description": "tar for node",
- "version": "0.1.17",
+ "version": "0.1.19",
"repository": {
"type": "git",
"url": "git://github.com/isaacs/node-tar.git"
@@ -16,7 +16,7 @@
"test": "tap test/*.js"
},
"dependencies": {
- "inherits": "1.x",
+ "inherits": "2",
"block-stream": "*",
"fstream": "~0.1.8"
},
@@ -25,12 +25,16 @@
"rimraf": "1.x"
},
"license": "BSD",
- "readme": "# node-tar\n\nTar for Node.js.\n\n## Goals of this project\n\n1. Be able to parse and reasonably extract the contents of any tar file\n created by any program that creates tar files, period.\n\n At least, this includes every version of:\n\n * bsdtar\n * gnutar\n * solaris posix tar\n * Joerg Schilling's star (\"Schilly tar\")\n\n2. Create tar files that can be extracted by any of the following tar\n programs:\n\n * bsdtar/libarchive version 2.6.2\n * gnutar 1.15 and above\n * SunOS Posix tar\n * Joerg Schilling's star (\"Schilly tar\")\n\n3. 100% test coverage. Speed is important. Correctness is slightly\n more important.\n\n4. Create the kind of tar interface that Node users would want to use.\n\n5. Satisfy npm's needs for a portable tar implementation with a\n JavaScript interface.\n\n6. No excuses. No complaining. No tolerance for failure.\n\n## But isn't there already a tar.js?\n\nYes, there are a few. This one is going to be better, and it will be\nfanatically maintained, because npm will depend on it.\n\nThat's why I need to write it from scratch. Creating and extracting\ntarballs is such a large part of what npm does, I simply can't have it\nbe a black box any longer.\n\n## Didn't you have something already? Where'd it go?\n\nIt's in the \"old\" folder. It's not functional. Don't use it.\n\nIt was a useful exploration to learn the issues involved, but like most\nsoftware of any reasonable complexity, node-tar won't be useful until\nit's been written at least 3 times.\n",
+ "readme": "# node-tar\n\nTar for Node.js.\n\n[![NPM](https://nodei.co/npm/tar.png)](https://nodei.co/npm/tar/)\n\n## API\n\nSee `examples/` for usage examples.\n\n### var tar = require('tar')\n\nReturns an object with `.Pack`, `.Extract` and `.Parse` methods.\n\n### tar.Pack([properties])\n\nReturns a through stream. Use\n[fstream](https://npmjs.org/package/fstream) to write files into the\npack stream and you will receive tar archive data from the pack\nstream.\n\nThe optional `properties` object are used to set properties in the tar\n'Global Extended Header'.\n\n### tar.Extract([options])\n\nReturns a through stream. Write tar data to the stream and the files\nin the tarball will be extracted onto the filesystem.\n\n`options` can be:\n\n```js\n{\n path: '/path/to/extract/tar/into',\n strip: 0, // how many path segments to strip from the root when extracting\n}\n```\n\n`options` also get passed to the `fstream.Writer` instance that `tar`\nuses internally.\n\n### tar.Parse()\n\nReturns a writable stream. Write tar data to it and it will emit\n`entry` events for each entry parsed from the tarball. This is used by\n`tar.Extract`.\n",
"readmeFilename": "README.md",
- "_id": "tar@0.1.17",
+ "bugs": {
+ "url": "https://github.com/isaacs/node-tar/issues"
+ },
+ "homepage": "https://github.com/isaacs/node-tar",
+ "_id": "tar@0.1.19",
"dist": {
- "shasum": "408c8a95deb8e78a65b59b1a51a333183a32badc"
+ "shasum": "fe45941799e660ce1ea52d875d37481b4bf13eac"
},
- "_from": "tar@0.1.17",
- "_resolved": "https://registry.npmjs.org/tar/-/tar-0.1.17.tgz"
+ "_from": "tar@0.1.19",
+ "_resolved": "https://registry.npmjs.org/tar/-/tar-0.1.19.tgz"
}
diff --git a/deps/npm/node_modules/text-table/.travis.yml b/deps/npm/node_modules/text-table/.travis.yml
new file mode 100644
index 000000000..cc4dba29d
--- /dev/null
+++ b/deps/npm/node_modules/text-table/.travis.yml
@@ -0,0 +1,4 @@
+language: node_js
+node_js:
+ - "0.8"
+ - "0.10"
diff --git a/deps/npm/node_modules/text-table/LICENSE b/deps/npm/node_modules/text-table/LICENSE
new file mode 100644
index 000000000..ee27ba4b4
--- /dev/null
+++ b/deps/npm/node_modules/text-table/LICENSE
@@ -0,0 +1,18 @@
+This software is released under the MIT license:
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+the Software, and to permit persons to whom the Software is furnished to do so,
+subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/deps/npm/node_modules/text-table/example/align.js b/deps/npm/node_modules/text-table/example/align.js
new file mode 100644
index 000000000..9be43098c
--- /dev/null
+++ b/deps/npm/node_modules/text-table/example/align.js
@@ -0,0 +1,8 @@
+var table = require('../');
+var t = table([
+ [ 'beep', '1024' ],
+ [ 'boop', '33450' ],
+ [ 'foo', '1006' ],
+ [ 'bar', '45' ]
+], { align: [ 'l', 'r' ] });
+console.log(t);
diff --git a/deps/npm/node_modules/text-table/example/center.js b/deps/npm/node_modules/text-table/example/center.js
new file mode 100644
index 000000000..52b1c69e0
--- /dev/null
+++ b/deps/npm/node_modules/text-table/example/center.js
@@ -0,0 +1,8 @@
+var table = require('../');
+var t = table([
+ [ 'beep', '1024', 'xyz' ],
+ [ 'boop', '3388450', 'tuv' ],
+ [ 'foo', '10106', 'qrstuv' ],
+ [ 'bar', '45', 'lmno' ]
+], { align: [ 'l', 'c', 'l' ] });
+console.log(t);
diff --git a/deps/npm/node_modules/text-table/example/dotalign.js b/deps/npm/node_modules/text-table/example/dotalign.js
new file mode 100644
index 000000000..2cea62993
--- /dev/null
+++ b/deps/npm/node_modules/text-table/example/dotalign.js
@@ -0,0 +1,9 @@
+var table = require('../');
+var t = table([
+ [ 'beep', '1024' ],
+ [ 'boop', '334.212' ],
+ [ 'foo', '1006' ],
+ [ 'bar', '45.6' ],
+ [ 'baz', '123.' ]
+], { align: [ 'l', '.' ] });
+console.log(t);
diff --git a/deps/npm/node_modules/text-table/example/doubledot.js b/deps/npm/node_modules/text-table/example/doubledot.js
new file mode 100644
index 000000000..bab983b66
--- /dev/null
+++ b/deps/npm/node_modules/text-table/example/doubledot.js
@@ -0,0 +1,11 @@
+var table = require('../');
+var t = table([
+ [ '0.1.2' ],
+ [ '11.22.33' ],
+ [ '5.6.7' ],
+ [ '1.22222' ],
+ [ '12345.' ],
+ [ '5555.' ],
+ [ '123' ]
+], { align: [ '.' ] });
+console.log(t);
diff --git a/deps/npm/node_modules/text-table/example/table.js b/deps/npm/node_modules/text-table/example/table.js
new file mode 100644
index 000000000..903ea4c41
--- /dev/null
+++ b/deps/npm/node_modules/text-table/example/table.js
@@ -0,0 +1,6 @@
+var table = require('../');
+var t = table([
+ [ 'master', '0123456789abcdef' ],
+ [ 'staging', 'fedcba9876543210' ]
+]);
+console.log(t);
diff --git a/deps/npm/node_modules/text-table/index.js b/deps/npm/node_modules/text-table/index.js
new file mode 100644
index 000000000..5c0ba9876
--- /dev/null
+++ b/deps/npm/node_modules/text-table/index.js
@@ -0,0 +1,86 @@
+module.exports = function (rows_, opts) {
+ if (!opts) opts = {};
+ var hsep = opts.hsep === undefined ? ' ' : opts.hsep;
+ var align = opts.align || [];
+ var stringLength = opts.stringLength
+ || function (s) { return String(s).length; }
+ ;
+
+ var dotsizes = reduce(rows_, function (acc, row) {
+ forEach(row, function (c, ix) {
+ var n = dotindex(c);
+ if (!acc[ix] || n > acc[ix]) acc[ix] = n;
+ });
+ return acc;
+ }, []);
+
+ var rows = map(rows_, function (row) {
+ return map(row, function (c_, ix) {
+ var c = String(c_);
+ if (align[ix] === '.') {
+ var index = dotindex(c);
+ var size = dotsizes[ix] + (/\./.test(c) ? 1 : 2)
+ - (stringLength(c) - index)
+ ;
+ return c + Array(size).join(' ');
+ }
+ else return c;
+ });
+ });
+
+ var sizes = reduce(rows, function (acc, row) {
+ forEach(row, function (c, ix) {
+ var n = stringLength(c);
+ if (!acc[ix] || n > acc[ix]) acc[ix] = n;
+ });
+ return acc;
+ }, []);
+
+ return map(rows, function (row) {
+ return map(row, function (c, ix) {
+ var n = (sizes[ix] - stringLength(c)) || 0;
+ var s = Array(Math.max(n + 1, 1)).join(' ');
+ if (align[ix] === 'r' || align[ix] === '.') {
+ return s + c;
+ }
+ if (align[ix] === 'c') {
+ return Array(Math.ceil(n / 2 + 1)).join(' ')
+ + c + Array(Math.floor(n / 2 + 1)).join(' ')
+ ;
+ }
+
+ return c + s;
+ }).join(hsep).replace(/\s+$/, '');
+ }).join('\n');
+};
+
+function dotindex (c) {
+ var m = /\.[^.]*$/.exec(c);
+ return m ? m.index + 1 : c.length;
+}
+
+function reduce (xs, f, init) {
+ if (xs.reduce) return xs.reduce(f, init);
+ var i = 0;
+ var acc = arguments.length >= 3 ? init : xs[i++];
+ for (; i < xs.length; i++) {
+ f(acc, xs[i], i);
+ }
+ return acc;
+}
+
+function forEach (xs, f) {
+ if (xs.forEach) return xs.forEach(f);
+ for (var i = 0; i < xs.length; i++) {
+ f.call(xs, xs[i], i);
+ }
+}
+
+function map (xs, f) {
+ if (xs.map) return xs.map(f);
+ var res = [];
+ for (var i = 0; i < xs.length; i++) {
+ res.push(f.call(xs, xs[i], i));
+ }
+ return res;
+}
diff --git a/deps/npm/node_modules/text-table/package.json b/deps/npm/node_modules/text-table/package.json
new file mode 100644
index 000000000..1eacd78e2
--- /dev/null
+++ b/deps/npm/node_modules/text-table/package.json
@@ -0,0 +1,52 @@
+{
+ "name": "text-table",
+ "version": "0.2.0",
+ "description": "borderless text tables with alignment",
+ "main": "index.js",
+ "devDependencies": {
+ "tap": "~0.4.0",
+ "tape": "~1.0.2",
+ "cli-color": "~0.2.3"
+ },
+ "scripts": {
+ "test": "tap test/*.js"
+ },
+ "testling": {
+ "files": "test/*.js",
+ "browsers": [
+ "ie/6..latest",
+ "chrome/20..latest",
+ "firefox/10..latest",
+ "safari/latest",
+ "opera/11.0..latest",
+ "iphone/6",
+ "ipad/6"
+ ]
+ },
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/substack/text-table.git"
+ },
+ "homepage": "https://github.com/substack/text-table",
+ "keywords": [
+ "text",
+ "table",
+ "align",
+ "ascii",
+ "rows",
+ "tabular"
+ ],
+ "author": {
+ "name": "James Halliday",
+ "email": "mail@substack.net",
+ "url": "http://substack.net"
+ },
+ "license": "MIT",
+ "readme": "# text-table\n\ngenerate borderless text table strings suitable for printing to stdout\n\n[![build status](https://secure.travis-ci.org/substack/text-table.png)](http://travis-ci.org/substack/text-table)\n\n[![browser support](https://ci.testling.com/substack/text-table.png)](http://ci.testling.com/substack/text-table)\n\n# example\n\n## default align\n\n``` js\nvar table = require('text-table');\nvar t = table([\n [ 'master', '0123456789abcdef' ],\n [ 'staging', 'fedcba9876543210' ]\n]);\nconsole.log(t);\n```\n\n```\nmaster 0123456789abcdef\nstaging fedcba9876543210\n```\n\n## left-right align\n\n``` js\nvar table = require('text-table');\nvar t = table([\n [ 'beep', '1024' ],\n [ 'boop', '33450' ],\n [ 'foo', '1006' ],\n [ 'bar', '45' ]\n], { align: [ 'l', 'r' ] });\nconsole.log(t);\n```\n\n```\nbeep 1024\nboop 33450\nfoo 1006\nbar 45\n```\n\n## dotted align\n\n``` js\nvar table = require('text-table');\nvar t = table([\n [ 'beep', '1024' ],\n [ 'boop', '334.212' ],\n [ 'foo', '1006' ],\n [ 'bar', '45.6' ],\n [ 'baz', '123.' ]\n], { align: [ 'l', '.' ] });\nconsole.log(t);\n```\n\n```\nbeep 1024\nboop 334.212\nfoo 1006\nbar 45.6\nbaz 123.\n```\n\n## centered\n\n``` js\nvar table = require('text-table');\nvar t = table([\n [ 'beep', '1024', 'xyz' ],\n [ 'boop', '3388450', 'tuv' ],\n [ 'foo', '10106', 'qrstuv' ],\n [ 'bar', '45', 'lmno' ]\n], { align: [ 'l', 'c', 'l' ] });\nconsole.log(t);\n```\n\n```\nbeep 1024 xyz\nboop 3388450 tuv\nfoo 10106 qrstuv\nbar 45 lmno\n```\n\n# methods\n\n``` js\nvar table = require('text-table')\n```\n\n## var s = table(rows, opts={})\n\nReturn a formatted table string `s` from an array of `rows` and some options\n`opts`.\n\n`rows` should be an array of arrays containing strings, numbers, or other\nprintable values.\n\noptions can be:\n\n* `opts.hsep` - separator to use between columns, default `' '`\n* `opts.align` - array of alignment types for each column, default `['l','l',...]`\n* `opts.stringLength` - callback function to use when calculating the string length\n\nalignment types are:\n\n* `'l'` - left\n* `'r'` - right\n* `'c'` - center\n* `'.'` - decimal\n\n# install\n\nWith [npm](https://npmjs.org) do:\n\n```\nnpm install text-table\n```\n\n# Use with ANSI-colors\n\nSince the string length of ANSI color schemes does not equal the length\nJavaScript sees internally it is necessary to pass the a custom string length\ncalculator during the main function call.\n\nSee the `test/ansi-colors.js` file for an example.\n\n# license\n\nMIT\n",
+ "readmeFilename": "readme.markdown",
+ "bugs": {
+ "url": "https://github.com/substack/text-table/issues"
+ },
+ "_id": "text-table@0.2.0",
+ "_from": "text-table@~0.2.0"
+}
diff --git a/deps/npm/node_modules/text-table/readme.markdown b/deps/npm/node_modules/text-table/readme.markdown
new file mode 100644
index 000000000..18806acd9
--- /dev/null
+++ b/deps/npm/node_modules/text-table/readme.markdown
@@ -0,0 +1,134 @@
+# text-table
+
+generate borderless text table strings suitable for printing to stdout
+
+[![build status](https://secure.travis-ci.org/substack/text-table.png)](http://travis-ci.org/substack/text-table)
+
+[![browser support](https://ci.testling.com/substack/text-table.png)](http://ci.testling.com/substack/text-table)
+
+# example
+
+## default align
+
+``` js
+var table = require('text-table');
+var t = table([
+ [ 'master', '0123456789abcdef' ],
+ [ 'staging', 'fedcba9876543210' ]
+]);
+console.log(t);
+```
+
+```
+master 0123456789abcdef
+staging fedcba9876543210
+```
+
+## left-right align
+
+``` js
+var table = require('text-table');
+var t = table([
+ [ 'beep', '1024' ],
+ [ 'boop', '33450' ],
+ [ 'foo', '1006' ],
+ [ 'bar', '45' ]
+], { align: [ 'l', 'r' ] });
+console.log(t);
+```
+
+```
+beep 1024
+boop 33450
+foo 1006
+bar 45
+```
+
+## dotted align
+
+``` js
+var table = require('text-table');
+var t = table([
+ [ 'beep', '1024' ],
+ [ 'boop', '334.212' ],
+ [ 'foo', '1006' ],
+ [ 'bar', '45.6' ],
+ [ 'baz', '123.' ]
+], { align: [ 'l', '.' ] });
+console.log(t);
+```
+
+```
+beep 1024
+boop 334.212
+foo 1006
+bar 45.6
+baz 123.
+```
+
+## centered
+
+``` js
+var table = require('text-table');
+var t = table([
+ [ 'beep', '1024', 'xyz' ],
+ [ 'boop', '3388450', 'tuv' ],
+ [ 'foo', '10106', 'qrstuv' ],
+ [ 'bar', '45', 'lmno' ]
+], { align: [ 'l', 'c', 'l' ] });
+console.log(t);
+```
+
+```
+beep 1024 xyz
+boop 3388450 tuv
+foo 10106 qrstuv
+bar 45 lmno
+```
+
+# methods
+
+``` js
+var table = require('text-table')
+```
+
+## var s = table(rows, opts={})
+
+Return a formatted table string `s` from an array of `rows` and some options
+`opts`.
+
+`rows` should be an array of arrays containing strings, numbers, or other
+printable values.
+
+options can be:
+
+* `opts.hsep` - separator to use between columns, default `' '`
+* `opts.align` - array of alignment types for each column, default `['l','l',...]`
+* `opts.stringLength` - callback function to use when calculating the string length
+
+alignment types are:
+
+* `'l'` - left
+* `'r'` - right
+* `'c'` - center
+* `'.'` - decimal
+
+# install
+
+With [npm](https://npmjs.org) do:
+
+```
+npm install text-table
+```
+
+# Use with ANSI-colors
+
+Since the string length of ANSI color schemes does not equal the length
+JavaScript sees internally it is necessary to pass the a custom string length
+calculator during the main function call.
+
+See the `test/ansi-colors.js` file for an example.
+
+# license
+
+MIT
diff --git a/deps/npm/node_modules/text-table/test/align.js b/deps/npm/node_modules/text-table/test/align.js
new file mode 100644
index 000000000..245357f26
--- /dev/null
+++ b/deps/npm/node_modules/text-table/test/align.js
@@ -0,0 +1,18 @@
+var test = require('tape');
+var table = require('../');
+
+test('align', function (t) {
+ t.plan(1);
+ var s = table([
+ [ 'beep', '1024' ],
+ [ 'boop', '33450' ],
+ [ 'foo', '1006' ],
+ [ 'bar', '45' ]
+ ], { align: [ 'l', 'r' ] });
+ t.equal(s, [
+ 'beep 1024',
+ 'boop 33450',
+ 'foo 1006',
+ 'bar 45'
+ ].join('\n'));
+});
diff --git a/deps/npm/node_modules/text-table/test/ansi-colors.js b/deps/npm/node_modules/text-table/test/ansi-colors.js
new file mode 100644
index 000000000..fbc5bb10a
--- /dev/null
+++ b/deps/npm/node_modules/text-table/test/ansi-colors.js
@@ -0,0 +1,32 @@
+var test = require('tape');
+var table = require('../');
+var color = require('cli-color');
+var ansiTrim = require('cli-color/lib/trim');
+
+test('center', function (t) {
+ t.plan(1);
+ var opts = {
+ align: [ 'l', 'c', 'l' ],
+ stringLength: function(s) { return ansiTrim(s).length }
+ };
+ var s = table([
+ [
+ color.red('Red'), color.green('Green'), color.blue('Blue')
+ ],
+ [
+ color.bold('Bold'), color.underline('Underline'),
+ color.italic('Italic')
+ ],
+ [
+ color.inverse('Inverse'), color.strike('Strike'),
+ color.blink('Blink')
+ ],
+ [ 'bar', '45', 'lmno' ]
+ ], opts);
+ t.equal(ansiTrim(s), [
+ 'Red Green Blue',
+ 'Bold Underline Italic',
+ 'Inverse Strike Blink',
+ 'bar 45 lmno'
+ ].join('\n'));
+});
diff --git a/deps/npm/node_modules/text-table/test/center.js b/deps/npm/node_modules/text-table/test/center.js
new file mode 100644
index 000000000..c2c7a62a8
--- /dev/null
+++ b/deps/npm/node_modules/text-table/test/center.js
@@ -0,0 +1,18 @@
+var test = require('tape');
+var table = require('../');
+
+test('center', function (t) {
+ t.plan(1);
+ var s = table([
+ [ 'beep', '1024', 'xyz' ],
+ [ 'boop', '3388450', 'tuv' ],
+ [ 'foo', '10106', 'qrstuv' ],
+ [ 'bar', '45', 'lmno' ]
+ ], { align: [ 'l', 'c', 'l' ] });
+ t.equal(s, [
+ 'beep 1024 xyz',
+ 'boop 3388450 tuv',
+ 'foo 10106 qrstuv',
+ 'bar 45 lmno'
+ ].join('\n'));
+});
diff --git a/deps/npm/node_modules/text-table/test/dotalign.js b/deps/npm/node_modules/text-table/test/dotalign.js
new file mode 100644
index 000000000..f804f9281
--- /dev/null
+++ b/deps/npm/node_modules/text-table/test/dotalign.js
@@ -0,0 +1,20 @@
+var test = require('tape');
+var table = require('../');
+
+test('dot align', function (t) {
+ t.plan(1);
+ var s = table([
+ [ 'beep', '1024' ],
+ [ 'boop', '334.212' ],
+ [ 'foo', '1006' ],
+ [ 'bar', '45.6' ],
+ [ 'baz', '123.' ]
+ ], { align: [ 'l', '.' ] });
+ t.equal(s, [
+ 'beep 1024',
+ 'boop 334.212',
+ 'foo 1006',
+ 'bar 45.6',
+ 'baz 123.'
+ ].join('\n'));
+});
diff --git a/deps/npm/node_modules/text-table/test/doubledot.js b/deps/npm/node_modules/text-table/test/doubledot.js
new file mode 100644
index 000000000..659b57c93
--- /dev/null
+++ b/deps/npm/node_modules/text-table/test/doubledot.js
@@ -0,0 +1,24 @@
+var test = require('tape');
+var table = require('../');
+
+test('dot align', function (t) {
+ t.plan(1);
+ var s = table([
+ [ '0.1.2' ],
+ [ '11.22.33' ],
+ [ '5.6.7' ],
+ [ '1.22222' ],
+ [ '12345.' ],
+ [ '5555.' ],
+ [ '123' ]
+ ], { align: [ '.' ] });
+ t.equal(s, [
+ ' 0.1.2',
+ '11.22.33',
+ ' 5.6.7',
+ ' 1.22222',
+ '12345.',
+ ' 5555.',
+ ' 123'
+ ].join('\n'));
+});
diff --git a/deps/npm/node_modules/text-table/test/table.js b/deps/npm/node_modules/text-table/test/table.js
new file mode 100644
index 000000000..9c6701464
--- /dev/null
+++ b/deps/npm/node_modules/text-table/test/table.js
@@ -0,0 +1,14 @@
+var test = require('tape');
+var table = require('../');
+
+test('table', function (t) {
+ t.plan(1);
+ var s = table([
+ [ 'master', '0123456789abcdef' ],
+ [ 'staging', 'fedcba9876543210' ]
+ ]);
+ t.equal(s, [
+ 'master 0123456789abcdef',
+ 'staging fedcba9876543210'
+ ].join('\n'));
+});
diff --git a/deps/npm/node_modules/uid-number/LICENSE b/deps/npm/node_modules/uid-number/LICENSE
new file mode 100644
index 000000000..05eeeb88c
--- /dev/null
+++ b/deps/npm/node_modules/uid-number/LICENSE
@@ -0,0 +1,15 @@
+The ISC License
+
+Copyright (c) Isaac Z. Schlueter
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
+IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
diff --git a/deps/npm/node_modules/uid-number/package.json b/deps/npm/node_modules/uid-number/package.json
index babe6f43e..0b10753b1 100644
--- a/deps/npm/node_modules/uid-number/package.json
+++ b/deps/npm/node_modules/uid-number/package.json
@@ -6,7 +6,7 @@
},
"name": "uid-number",
"description": "Convert a username/group name to a uid/gid number",
- "version": "0.0.3",
+ "version": "0.0.5",
"repository": {
"type": "git",
"url": "git://github.com/isaacs/uid-number.git"
@@ -18,18 +18,13 @@
"engines": {
"node": "*"
},
- "license": "BSD",
- "_npmUser": {
- "name": "isaacs",
- "email": "i@izs.me"
+ "license": "ISC",
+ "readme": "Use this module to convert a username/groupname to a uid/gid number.\n\nUsage:\n\n```\nnpm install uid-number\n```\n\nThen, in your node program:\n\n```javascript\nvar uidNumber = require(\"uid-number\")\nuidNumber(\"isaacs\", function (er, uid, gid) {\n // gid is null because we didn't ask for a group name\n // uid === 24561 because that's my number.\n})\n```\n",
+ "readmeFilename": "README.md",
+ "bugs": {
+ "url": "https://github.com/isaacs/uid-number/issues"
},
- "_id": "uid-number@0.0.3",
- "_engineSupported": true,
- "_npmVersion": "1.1.23",
- "_nodeVersion": "v0.7.10-pre",
- "_defaultsLoaded": true,
- "dist": {
- "shasum": "cefb0fa138d8d8098da71a40a0d04a8327d6e1cc"
- },
- "_from": "../uid-number"
+ "homepage": "https://github.com/isaacs/uid-number",
+ "_id": "uid-number@0.0.5",
+ "_from": "uid-number@latest"
}
diff --git a/deps/npm/node_modules/uid-number/uid-number.js b/deps/npm/node_modules/uid-number/uid-number.js
index 93f372bb9..2ae421ede 100644
--- a/deps/npm/node_modules/uid-number/uid-number.js
+++ b/deps/npm/node_modules/uid-number/uid-number.js
@@ -18,7 +18,7 @@ function uidNumber (uid, gid, cb) {
if (typeof cb !== "function") cb = uid, uid = null
if (gid == null) gid = process.getgid()
if (uid == null) uid = process.getuid()
- if (!isNaN(gid)) gid = uidCache[gid] = +gid
+ if (!isNaN(gid)) gid = gidCache[gid] = +gid
if (!isNaN(uid)) uid = uidCache[uid] = +uid
if (uidCache.hasOwnProperty(uid)) uid = uidCache[uid]
@@ -49,6 +49,6 @@ function uidNumber (uid, gid, cb) {
if (isNaN(out.uid) || isNaN(out.gid)) return cb(new Error(
"Could not get uid/gid: "+JSON.stringify(out)))
- cb(null, uidCache[uid] = +out.uid, uidCache[gid] = +out.gid)
+ cb(null, uidCache[uid] = +out.uid, gidCache[gid] = +out.gid)
})
}
diff --git a/deps/npm/package.json b/deps/npm/package.json
index 387af2018..a2b0667ab 100644
--- a/deps/npm/package.json
+++ b/deps/npm/package.json
@@ -1,5 +1,5 @@
{
- "version": "1.2.30",
+ "version": "1.4.10",
"name": "npm",
"publishConfig": {
"proprietary-attribs": false
@@ -19,11 +19,11 @@
"author": "Isaac Z. Schlueter <i@izs.me> (http://blog.izs.me)",
"repository": {
"type": "git",
- "url": "https://github.com/isaacs/npm"
+ "url": "https://github.com/npm/npm"
},
"bugs": {
"email": "npm-@googlegroups.com",
- "url": "http://github.com/isaacs/npm/issues"
+ "url": "http://github.com/npm/npm/issues"
},
"directories": {
"doc": "./doc",
@@ -34,110 +34,126 @@
"main": "./lib/npm.js",
"bin": "./bin/npm-cli.js",
"dependencies": {
- "semver": "~1.1.2",
- "ini": "~1.1.0",
- "slide": "~1.1.4",
"abbrev": "~1.0.4",
- "graceful-fs": "~1.2.2",
- "minimatch": "~0.2.12",
- "nopt": "~2.1.1",
- "rimraf": "2",
- "request": "~2.21.0",
- "which": "1",
- "tar": "~0.1.17",
- "fstream": "~0.1.22",
- "block-stream": "*",
- "inherits": "1",
- "mkdirp": "~0.3.3",
- "read": "~1.0.4",
- "lru-cache": "~2.3.0",
- "node-gyp": "~0.10.0",
- "fstream-npm": "~0.1.3",
- "uid-number": "0",
+ "ansi": "~0.2.1",
+ "ansicolors": "~0.3.2",
+ "ansistyles": "~0.1.3",
"archy": "0",
+ "block-stream": "0.0.7",
+ "child-process-close": "~0.1.1",
+ "chmodr": "~0.1.0",
"chownr": "0",
- "npmlog": "0",
- "ansi": "~0.1.2",
- "npm-registry-client": "~0.2.22",
- "read-package-json": "~0.4.1",
- "read-installed": "0",
- "glob": "~3.2.1",
- "init-package-json": "0.0.8",
+ "cmd-shim": "~1.1.1",
+ "columnify": "0.1.2",
+ "editor": "0.0.5",
+ "fstream": "~0.1.25",
+ "fstream-npm": "~0.1.6",
+ "github-url-from-git": "1.1.1",
+ "github-url-from-username-repo": "~0.1.0",
+ "glob": "~3.2.9",
+ "graceful-fs": "~2.0.2",
+ "ini": "~1.1.0",
+ "init-package-json": "0.0.16",
+ "lockfile": "~0.4.0",
+ "lru-cache": "~2.5.0",
+ "minimatch": "~0.2.14",
+ "mkdirp": "~0.3.5",
+ "node-gyp": "~0.13.0",
+ "nopt": "~2.2.1",
+ "npm-install-checks": "~1.0.0",
+ "npm-registry-client": "~0.4.8",
+ "npm-user-validate": "0.0.3",
+ "npmconf": "~0.1.15",
+ "npmlog": "0.0.6",
+ "once": "~1.3.0",
+ "opener": "~1.3.0",
"osenv": "0",
- "lockfile": "~0.3.2",
+ "path-is-inside": "~1.0.0",
+ "read": "~1.0.4",
+ "read-installed": "~2.0.1",
+ "read-package-json": "~1.1.9",
+ "request": "~2.30.0",
"retry": "~0.6.0",
- "once": "~1.1.1",
- "npmconf": "~0.1.0",
- "opener": "~1.3.0",
- "chmodr": "~0.1.0",
- "cmd-shim": "~1.1.0",
- "sha": "~1.0.1",
- "editor": "0.0.4",
- "child-process-close": "~0.1.1",
- "npm-user-validate": "0"
+ "rimraf": "~2.2.5",
+ "semver": "~2.2.1",
+ "sha": "~1.2.1",
+ "slide": "~1.1.5",
+ "sorted-object": "~1.0.0",
+ "tar": "~0.1.19",
+ "text-table": "~0.2.0",
+ "uid-number": "0.0.5",
+ "which": "1"
},
"bundleDependencies": [
- "semver",
- "ini",
- "slide",
"abbrev",
- "graceful-fs",
- "minimatch",
- "nopt",
- "rimraf",
- "request",
- "which",
- "tar",
- "fstream",
- "block-stream",
- "inherits",
- "mkdirp",
- "read",
- "lru-cache",
- "node-gyp",
- "fstream-npm",
- "uid-number",
+ "ansi",
+ "ansicolors",
+ "ansistyles",
"archy",
+ "block-stream",
+ "child-process-close",
+ "chmodr",
"chownr",
- "npmlog",
- "ansi",
- "npm-registry-client",
- "read-package-json",
- "read-installed",
+ "cmd-shim",
+ "columnify",
+ "editor",
+ "fstream",
+ "fstream-npm",
+ "github-url-from-git",
+ "github-url-from-username-repo",
"glob",
+ "graceful-fs",
+ "inherits",
+ "ini",
"init-package-json",
- "osenv",
"lockfile",
- "retry",
- "once",
+ "lru-cache",
+ "minimatch",
+ "mkdirp",
+ "node-gyp",
+ "nopt",
+ "normalize-package-data",
+ "npm-install-checks",
+ "npm-registry-client",
+ "npm-user-validate",
"npmconf",
+ "npmlog",
+ "once",
"opener",
- "chmodr",
- "cmd-shim",
+ "osenv",
+ "path-is-inside",
+ "read",
+ "read-installed",
+ "read-package-json",
+ "request",
+ "retry",
+ "rimraf",
+ "semver",
"sha",
- "child-process-close",
- "editor",
- "npm-user-validate"
+ "slide",
+ "sorted-object",
+ "tar",
+ "text-table",
+ "uid-number",
+ "which"
],
"devDependencies": {
+ "marked": "~0.3.2",
+ "npm-registry-mock": "~0.6.3",
"ronn": "~0.3.6",
- "tap": "~0.4.0"
+ "tap": "~0.4.9"
},
"engines": {
- "node": ">=0.6",
+ "node": ">=0.8",
"npm": "1"
},
"scripts": {
- "test": "node ./test/run.js && tap test/tap/*.js",
- "tap": "tap test/tap/*.js",
- "prepublish": "node bin/npm-cli.js prune ; rm -rf test/*/*/node_modules ; make -j4 doc",
- "dumpconf": "env | grep npm | sort | uniq",
- "echo": "node bin/npm-cli.js"
+ "test-legacy": "node ./test/run.js",
+ "test": "tap --timeout 120 test/tap/*.js",
+ "tap": "tap --timeout 120 test/tap/*.js",
+ "test-all": "node ./test/run.js && tap test/tap/*.js",
+ "prepublish": "node bin/npm-cli.js prune --prefix=. --no-global && rm -rf test/*/*/node_modules && make -j32 doc",
+ "dumpconf": "env | grep npm | sort | uniq"
},
- "licenses": [
- {
- "type": "MIT +no-false-attribs",
- "url": "https://github.com/isaacs/npm/raw/master/LICENSE"
- }
- ]
+ "license": "Artistic-2.0"
}
diff --git a/deps/npm/scripts/doc-build.sh b/deps/npm/scripts/doc-build.sh
index 9a66d4dbb..98dfa82f6 100755
--- a/deps/npm/scripts/doc-build.sh
+++ b/deps/npm/scripts/doc-build.sh
@@ -1,4 +1,4 @@
-#!/bin/bash
+#!/usr/bin/env bash
if [[ $DEBUG != "" ]]; then
set -x
@@ -41,32 +41,40 @@ version=$(node cli.js -v)
mkdir -p $(dirname $dest)
case $dest in
- *.[13])
+ *.[1357])
./node_modules/.bin/ronn --roff $src \
| sed "s|@VERSION@|$version|g" \
- | perl -pi -e 's/npm\\-([^\(]*)\(1\)/npm help \1/g' \
- | perl -pi -e 's/npm\\-([^\(]*)\(3\)/npm apihelp \1/g' \
+ | perl -pi -e 's/(npm\\-)?([^\(]*)\(1\)/npm help \2/g' \
+ | perl -pi -e 's/(npm\\-)?([^\(]*)\([57]\)/npm help \3 \2/g' \
+ | perl -pi -e 's/(npm\\-)?([^\(]*)\(3\)/npm apihelp \2/g' \
| perl -pi -e 's/npm\(1\)/npm help npm/g' \
| perl -pi -e 's/npm\(3\)/npm apihelp npm/g' \
> $dest
exit $?
;;
*.html)
+ url=${dest/html\//}
(cat html/dochead.html && \
- ./node_modules/.bin/ronn -f $src && \
- cat html/docfoot.html )\
+ cat $src | ./node_modules/.bin/marked &&
+ cat html/docfoot.html)\
| sed "s|@NAME@|$name|g" \
| sed "s|@DATE@|$date|g" \
+ | sed "s|@URL@|$url|g" \
| sed "s|@VERSION@|$version|g" \
- | perl -pi -e 's/<h1>npm(-?[^\(]*\([0-9]\)) -- (.*?)<\/h1>/<h1>npm\1<\/h1> <p>\2<\/p>/g' \
+ | perl -pi -e 's/<h1([^>]*)>([^\(]*\([0-9]\)) -- (.*?)<\/h1>/<h1>\2<\/h1> <p>\3<\/p>/g' \
| perl -pi -e 's/npm-npm/npm/g' \
- | perl -pi -e 's/([^"-])(npm-)?README(\(1\))?/\1<a href="..\/doc\/README.html">README<\/a>/g' \
- | perl -pi -e 's/<title><a href="..\/doc\/README.html">README<\/a><\/title>/<title>README<\/title>/g' \
- | perl -pi -e 's/([^"-])npm-([^\(]+)(\(1\))/\1<a href="..\/doc\/\2.html">\2\3<\/a>/g' \
- | perl -pi -e 's/([^"-])npm-([^\(]+)(\(3\))/\1<a href="..\/api\/\2.html">\2\3<\/a>/g' \
- | perl -pi -e 's/([^"-])npm\(1\)/\1<a href="..\/doc\/npm.html">npm(1)<\/a>/g' \
- | perl -pi -e 's/([^"-])npm\(3\)/\1<a href="..\/api\/npm.html">npm(3)<\/a>/g' \
- | perl -pi -e 's/\([13]\)<\/a><\/h1>/<\/a><\/h1>/g' \
+ | perl -pi -e 's/([^"-])(npm-)?README(?!\.html)(\(1\))?/\1<a href="..\/..\/doc\/README.html">README<\/a>/g' \
+ | perl -pi -e 's/<title><a href="[^"]+README.html">README<\/a><\/title>/<title>README<\/title>/g' \
+ | perl -pi -e 's/([^"-])([^\(> ]+)(\(1\))/\1<a href="..\/cli\/\2.html">\2\3<\/a>/g' \
+ | perl -pi -e 's/([^"-])([^\(> ]+)(\(3\))/\1<a href="..\/api\/\2.html">\2\3<\/a>/g' \
+ | perl -pi -e 's/([^"-])([^\(> ]+)(\(5\))/\1<a href="..\/files\/\2.html">\2\3<\/a>/g' \
+ | perl -pi -e 's/([^"-])([^\(> ]+)(\(7\))/\1<a href="..\/misc\/\2.html">\2\3<\/a>/g' \
+ | perl -pi -e 's/\([1357]\)<\/a><\/h1>/<\/a><\/h1>/g' \
+ | (if [ $(basename $(dirname $dest)) == "doc" ]; then
+ perl -pi -e 's/ href="\.\.\// href="/g'
+ else
+ cat
+ fi) \
> $dest
exit $?
;;
diff --git a/deps/npm/scripts/index-build.js b/deps/npm/scripts/index-build.js
index 551bb1d56..8031fe727 100755
--- a/deps/npm/scripts/index-build.js
+++ b/deps/npm/scripts/index-build.js
@@ -1,63 +1,62 @@
#!/usr/bin/env node
var fs = require("fs")
, path = require("path")
- , cli = path.resolve(__dirname, "..", "doc", "cli")
- , clidocs = null
- , api = path.resolve(__dirname, "..", "doc", "api")
- , apidocs = null
- , readme = path.resolve(__dirname, "..", "README.md")
-
-fs.readdir(cli, done("cli"))
-fs.readdir(api, done("api"))
-
-function done (which) { return function (er, docs) {
- if (er) throw er
- docs.sort()
- if (which === "api") apidocs = docs
- else clidocs = docs
-
- if (apidocs && clidocs) next()
-}}
-
-function filter (d) {
- return d !== "index.md"
- && d.charAt(0) !== "."
- && d.match(/\.md$/)
-}
-
-function next () {
+ , root = path.resolve(__dirname, "..")
+ , glob = require("glob")
+ , conversion = { "cli": 1, "api": 3, "files": 5, "misc": 7 }
+
+glob(root + "/{README.md,doc/*/*.md}", function (er, files) {
+ if (er)
+ throw er
+ output(files.map(function (f) {
+ var b = path.basename(f)
+ if (b === "README.md")
+ return [0, b]
+ if (b === "index.md")
+ return null
+ var s = conversion[path.basename(path.dirname(f))]
+ return [s, f]
+ }).filter(function (f) {
+ return f
+ }).sort(function (a, b) {
+ return (a[0] === b[0])
+ ? ( path.basename(a[1]) === "npm.md" ? -1
+ : path.basename(b[1]) === "npm.md" ? 1
+ : a[1] > b[1] ? 1 : -1 )
+ : a[0] - b[0]
+ }))
+})
+
+return
+
+function output (files) {
console.log(
- "npm-index(1) -- Index of all npm documentation\n" +
+ "npm-index(7) -- Index of all npm documentation\n" +
"==============================================\n")
- apidocs = apidocs.filter(filter).map(function (d) {
- return [3, path.resolve(api, d)]
- })
-
- clidocs = clidocs.filter(filter).map(function (d) {
- return [1, path.resolve(cli, d)]
- })
-
- writeLine([1, readme])
-
- console.log("# Command Line Documentation")
-
- clidocs.forEach(writeLine)
+ writeLines(files, 0)
+ writeLines(files, 1, "Command Line Documentation")
+ writeLines(files, 3, "API Documentation")
+ writeLines(files, 5, "Files")
+ writeLines(files, 7, "Misc")
+}
- console.log("# API Documentation")
- apidocs.forEach(writeLine)
+function writeLines (files, sxn, heading) {
+ if (heading)
+ console.log("# %s\n", heading)
+ files.filter(function (f) {
+ return f[0] === sxn
+ }).forEach(writeLine)
}
+
function writeLine (sd) {
- var sxn = sd[0]
+ var sxn = sd[0] || 1
, doc = sd[1]
, d = path.basename(doc, ".md")
- , s = fs.lstatSync(doc)
-
- if (s.isSymbolicLink()) return
- var content = fs.readFileSync(doc, "utf8").split("\n")[0].split("--")[1]
+ var content = fs.readFileSync(doc, "utf8").split("\n")[0].split("-- ")[1]
- console.log("## npm-%s(%d)\n", d, sxn)
+ console.log("## %s(%d)\n", d, sxn)
console.log(content + "\n")
}
diff --git a/deps/npm/scripts/install.sh b/deps/npm/scripts/install.sh
index a8e588d43..74840459e 100755
--- a/deps/npm/scripts/install.sh
+++ b/deps/npm/scripts/install.sh
@@ -17,7 +17,16 @@ if [ "x$0" = "xsh" ]; then
# on some systems, you can just do cat>npm-install.sh
# which is a bit cuter. But on others, &1 is already closed,
# so catting to another script file won't do anything.
- curl -s https://npmjs.org/install.sh > npm-install-$$.sh
+ # Follow Location: headers, and fail on errors
+ curl -f -L -s https://www.npmjs.org/install.sh > npm-install-$$.sh
+ ret=$?
+ if [ $ret -eq 0 ]; then
+ (exit 0)
+ else
+ rm npm-install-$$.sh
+ echo "Failed to download script" >&2
+ exit $ret
+ fi
sh npm-install-$$.sh
ret=$?
rm npm-install-$$.sh
@@ -152,15 +161,11 @@ if [ -z "$t" ]; then
# switch based on node version.
# note that we can only use strict sh-compatible patterns here.
case $node_version in
- 0.[0123].* | v0.[0123].*)
+ 0.[012345].* | v0.[012345].*)
echo "You are using an outdated and unsupported version of" >&2
echo "node ($node_version). Please update node and try again." >&2
exit 99
;;
- v0.[45].* | 0.[45].*)
- echo "install npm@1.0"
- t=1.0
- ;;
v0.[678].* | 0.[678].*)
echo "install npm@1.1"
t=1.1
diff --git a/deps/npm/test/common-tap.js b/deps/npm/test/common-tap.js
new file mode 100644
index 000000000..d6d09ed9b
--- /dev/null
+++ b/deps/npm/test/common-tap.js
@@ -0,0 +1,32 @@
+var spawn = require("child_process").spawn
+
+var port = exports.port = 1337
+exports.registry = "http://localhost:" + port
+process.env.npm_config_loglevel = "error"
+
+var bin = exports.bin = require.resolve("../bin/npm-cli.js")
+var once = require("once")
+exports.npm = function (cmd, opts, cb) {
+ cb = once(cb)
+ cmd = [bin].concat(cmd)
+ opts = opts || {}
+
+ var stdout = ""
+ , stderr = ""
+ , node = process.execPath
+ , child = spawn(node, cmd, opts)
+
+ if (child.stderr) child.stderr.on("data", function (chunk) {
+ stderr += chunk
+ })
+
+ if (child.stdout) child.stdout.on("data", function (chunk) {
+ stdout += chunk
+ })
+
+ child.on("error", cb)
+
+ child.on("close", function (code, signal) {
+ cb(null, code, stdout, stderr)
+ })
+}
diff --git a/deps/npm/test/disabled/outdated-depth-integer.js b/deps/npm/test/disabled/outdated-depth-integer.js
new file mode 100644
index 000000000..9e4087a4c
--- /dev/null
+++ b/deps/npm/test/disabled/outdated-depth-integer.js
@@ -0,0 +1,52 @@
+var common = require('../common-tap')
+ , test = require('tap').test
+ , rimraf = require('rimraf')
+ , npm = require('../../')
+ , mr = require('npm-registry-mock')
+ , pkg = __dirname + '/outdated-depth'
+
+function cleanup () {
+ rimraf.sync(pkg + '/node_modules')
+ rimraf.sync(pkg + '/cache')
+}
+
+test('outdated depth integer', function (t) {
+ // todo: update with test-package-with-one-dep once the new
+ // npm-registry-mock is published
+ var expected = [
+ pkg,
+ 'underscore',
+ '1.3.1',
+ '1.3.1',
+ '1.5.1',
+ '1.3.1'
+ ]
+
+ process.chdir(pkg)
+
+ mr(common.port, function (s) {
+ npm.load({
+ cache: pkg + '/cache'
+ , loglevel: 'silent'
+ , registry: common.registry
+ , depth: 5
+ }
+ , function () {
+ npm.install('request@0.9.0', function (er) {
+ if (er) throw new Error(er)
+ npm.outdated(function (err, d) {
+ if (err) throw new Error(err)
+ t.deepEqual(d[0], expected)
+ s.close()
+ t.end()
+ })
+ })
+ }
+ )
+ })
+})
+
+test("cleanup", function (t) {
+ cleanup()
+ t.end()
+}) \ No newline at end of file
diff --git a/deps/npm/test/disabled/outdated-depth-integer/README.md b/deps/npm/test/disabled/outdated-depth-integer/README.md
new file mode 100644
index 000000000..aca67ff17
--- /dev/null
+++ b/deps/npm/test/disabled/outdated-depth-integer/README.md
@@ -0,0 +1 @@
+# just a test
diff --git a/deps/npm/test/disabled/outdated-depth-integer/index.js b/deps/npm/test/disabled/outdated-depth-integer/index.js
new file mode 100644
index 000000000..33c1891f8
--- /dev/null
+++ b/deps/npm/test/disabled/outdated-depth-integer/index.js
@@ -0,0 +1 @@
+module.exports = true
diff --git a/deps/npm/test/disabled/outdated-depth-integer/package.json b/deps/npm/test/disabled/outdated-depth-integer/package.json
new file mode 100644
index 000000000..df269dc72
--- /dev/null
+++ b/deps/npm/test/disabled/outdated-depth-integer/package.json
@@ -0,0 +1,10 @@
+{
+ "name": "whatever",
+ "description": "yeah idk",
+ "version": "1.2.3",
+ "main": "index.js",
+ "dependencies": {
+ "underscore": "1.3.1"
+ },
+ "repository": "git://github.com/luk-/whatever"
+}
diff --git a/deps/npm/test/disabled/startstop/package.json b/deps/npm/test/disabled/startstop/package.json
deleted file mode 100644
index bee2a2fd3..000000000
--- a/deps/npm/test/disabled/startstop/package.json
+++ /dev/null
@@ -1,3 +0,0 @@
-{"name":"startstop"
-,"version":"1.2.3"
-,"scripts":{"start":"echo 'start'","stop":"echo 'stop'"}}
diff --git a/deps/npm/test/packages/npm-test-blerg/package.json b/deps/npm/test/packages/npm-test-blerg/package.json
index 0db81d680..04e333891 100644
--- a/deps/npm/test/packages/npm-test-blerg/package.json
+++ b/deps/npm/test/packages/npm-test-blerg/package.json
@@ -1,5 +1,5 @@
{ "name":"npm-test-blerg"
-, "version" : "0.0.0"
+, "version" : "0.0.2"
, "scripts" : { "test" : "node test.js" }
, "publishConfig": {"tag": "foo"}
}
diff --git a/deps/npm/test/packages/npm-test-blerg3/package.json b/deps/npm/test/packages/npm-test-blerg3/package.json
index c88b5a957..87b5bbb96 100644
--- a/deps/npm/test/packages/npm-test-blerg3/package.json
+++ b/deps/npm/test/packages/npm-test-blerg3/package.json
@@ -1,5 +1,5 @@
{ "name":"npm-test-blerg3"
-, "homepage": "https://github.com/isaacs/npm/issues/2658"
+, "homepage": "https://github.com/npm/npm/issues/2658"
, "version" : "0.0.0"
, "scripts" : { "test" : "node test.js" }
}
diff --git a/deps/npm/test/packages/npm-test-peer-deps/README b/deps/npm/test/packages/npm-test-peer-deps/README
deleted file mode 100644
index 8848f0786..000000000
--- a/deps/npm/test/packages/npm-test-peer-deps/README
+++ /dev/null
@@ -1 +0,0 @@
-just an npm test
diff --git a/deps/npm/test/packages/npm-test-peer-deps/npm-ls.json b/deps/npm/test/packages/npm-test-peer-deps/npm-ls.json
deleted file mode 100644
index 25a3ce747..000000000
--- a/deps/npm/test/packages/npm-test-peer-deps/npm-ls.json
+++ /dev/null
@@ -1,17 +0,0 @@
-{
- "npm-test-peer-deps-file": {
- "version": "1.2.3",
- "from": "https://raw.github.com/gist/3971128/3f6aa37b4fa1186c2f47da9b77dcc4ec496e3483/index.js",
- "resolved": "https://raw.github.com/gist/3971128/3f6aa37b4fa1186c2f47da9b77dcc4ec496e3483/index.js",
- "dependencies": {
- "opener": {
- "version": "1.3.0",
- "from": "opener@1.3.0"
- }
- }
- },
- "dict": {
- "version": "1.1.0",
- "from": "dict@1.1.0"
- }
-}
diff --git a/deps/npm/test/packages/npm-test-peer-deps/package.json b/deps/npm/test/packages/npm-test-peer-deps/package.json
deleted file mode 100644
index a132fe1b2..000000000
--- a/deps/npm/test/packages/npm-test-peer-deps/package.json
+++ /dev/null
@@ -1,11 +0,0 @@
-{
- "author": "Domenic Denicola <domenic@domenicdenicola.com> (http://domenicdenicola.com/)",
- "name": "npm-test-peer-deps",
- "version": "0.0.0",
- "dependencies": {
- "npm-test-peer-deps-file": "https://raw.github.com/gist/3971128/3f6aa37b4fa1186c2f47da9b77dcc4ec496e3483/index.js"
- },
- "scripts": {
- "test": "node test.js"
- }
-}
diff --git a/deps/npm/test/packages/npm-test-peer-deps/test.js b/deps/npm/test/packages/npm-test-peer-deps/test.js
deleted file mode 100644
index 2cf9b9701..000000000
--- a/deps/npm/test/packages/npm-test-peer-deps/test.js
+++ /dev/null
@@ -1,36 +0,0 @@
-var path = require("path")
-var assert = require("assert")
-
-process.env.npm_config_prefix = process.cwd()
-delete process.env.npm_config_global
-delete process.env.npm_config_depth
-
-var npm = process.env.npm_execpath
-
-require("child_process").execFile(process.execPath, [npm, "ls", "--json"], {
- env: process.env, cwd: process.cwd() },
- function (err, stdout, stderr) {
-
- if (err) throw err
-
- var actual = JSON.parse(stdout).dependencies
- var expected = require("./npm-ls.json")
-
- // resolved url doesn't matter
- clean(actual)
- clean(expected)
-
- console.error(JSON.stringify(actual, null, 2))
- console.error(JSON.stringify(expected, null, 2))
-
- assert.deepEqual(actual, expected)
-})
-
-function clean (obj) {
- for (var i in obj) {
- if (i === "from" || i === "resolved")
- delete obj[i]
- else if (typeof obj[i] === "object" && obj[i])
- clean(obj[i])
- }
-}
diff --git a/deps/npm/test/packages/npm-test-shrinkwrap/npm-shrinkwrap.json b/deps/npm/test/packages/npm-test-shrinkwrap/npm-shrinkwrap.json
index db5da040c..09a034141 100644
--- a/deps/npm/test/packages/npm-test-shrinkwrap/npm-shrinkwrap.json
+++ b/deps/npm/test/packages/npm-test-shrinkwrap/npm-shrinkwrap.json
@@ -4,7 +4,7 @@
"dependencies": {
"npm-test-single-file": {
"version": "1.2.3",
- "resolved": "https://raw.github.com/gist/1837112/index.js"
+ "resolved": "https://gist.github.com/isaacs/1837112/raw/9ef57a59fc22aeb1d1ca346b68826dcb638b8416/index.js"
},
"glob": {
"version": "3.1.5",
diff --git a/deps/npm/test/packages/npm-test-shrinkwrap/package.json b/deps/npm/test/packages/npm-test-shrinkwrap/package.json
index bbabe89db..a5d446e2d 100644
--- a/deps/npm/test/packages/npm-test-shrinkwrap/package.json
+++ b/deps/npm/test/packages/npm-test-shrinkwrap/package.json
@@ -3,7 +3,7 @@
"name": "npm-test-shrinkwrap",
"version": "0.0.0",
"dependencies": {
- "npm-test-single-file": "https://raw.github.com/gist/1837112/index.js",
+ "npm-test-single-file": "https://gist.github.com/isaacs/1837112/raw/9ef57a59fc22aeb1d1ca346b68826dcb638b8416/index.js",
"glob": "git://github.com/isaacs/node-glob.git#npm-test",
"minimatch": "~0.1.0"
},
diff --git a/deps/npm/test/run.js b/deps/npm/test/run.js
index 697d33980..008cfbac4 100644
--- a/deps/npm/test/run.js
+++ b/deps/npm/test/run.js
@@ -181,44 +181,9 @@ function main (cb) {
// Windows can't handle npm rm npm due to file-in-use issues.
thingsToChain.push([exec, "npm rm npm"])
}
- thingsToChain.push(publishTest)
chain(thingsToChain, cb)
}
-
- function publishTest (cb) {
- if (process.env.npm_package_config_publishtest !== "true") {
- console.error("To test publishing: "+
- "npm config set npm:publishtest true")
- return cb()
- }
-
- chain
- ( [ setup
- , [ execChain, packages.filter(function (p) {
- return !p.match(/private/)
- }).map(function (p) {
- return [ "npm publish packages/"+p
- , "npm install "+p
- , "npm unpublish "+p+" --force"
- ]
- }) ]
- , publishPrivateTest
- ], cb )
-
- }
-
- function publishPrivateTest (cb) {
- exec("npm publish packages/npm-test-private -s", true, function (er) {
- if (er) {
- exec( "npm unpublish npm-test-private --force"
- , function (e2) {
- cb(er || e2)
- })
- }
- cleanup(cb)
- })
- }
}
main(function (er) {
diff --git a/deps/npm/test/tap/00-check-mock-dep.js b/deps/npm/test/tap/00-check-mock-dep.js
new file mode 100644
index 000000000..c4d2ff2c2
--- /dev/null
+++ b/deps/npm/test/tap/00-check-mock-dep.js
@@ -0,0 +1,15 @@
+console.log("TAP Version 13")
+
+process.on("uncaughtException", function(er) {
+ console.log("not ok - Failed checking mock registry dep. Expect much fail!")
+ console.log("1..1")
+ process.exit(1)
+})
+
+var assert = require("assert")
+var semver = require("semver")
+var mock = require("npm-registry-mock/package.json").version
+var req = require("../../package.json").devDependencies["npm-registry-mock"]
+assert(semver.satisfies(mock, req))
+console.log("ok")
+console.log("1..1")
diff --git a/deps/npm/test/tap/404-parent.js b/deps/npm/test/tap/404-parent.js
new file mode 100644
index 000000000..b3c353827
--- /dev/null
+++ b/deps/npm/test/tap/404-parent.js
@@ -0,0 +1,53 @@
+var common = require('../common-tap.js')
+var test = require('tap').test
+var npm = require('../../')
+var osenv = require('osenv')
+var path = require('path')
+var fs = require('fs')
+var rimraf = require('rimraf')
+var mkdirp = require('mkdirp')
+var pkg = path.resolve(__dirname, '404-parent')
+var mr = require("npm-registry-mock")
+
+test('404-parent: if parent exists, specify parent in error message', function(t) {
+ setup()
+ rimraf.sync(path.resolve(pkg, 'node_modules'))
+ performInstall(function(err) {
+ t.ok(err instanceof Error)
+ t.pass('error was returned')
+ t.ok(err.parent === '404-parent-test')
+ t.end()
+ })
+})
+
+test('cleanup', function(t) {
+ process.chdir(osenv.tmpdir())
+ rimraf.sync(pkg)
+ t.end()
+})
+
+function setup() {
+ mkdirp.sync(pkg)
+ mkdirp.sync(path.resolve(pkg, 'cache'))
+ fs.writeFileSync(path.resolve(pkg, 'package.json'), JSON.stringify({
+ author: 'Evan Lucas',
+ name: '404-parent-test',
+ version: '0.0.0',
+ description: 'Test for 404-parent',
+ dependencies: {
+ 'test-npm-404-parent-test': '*'
+ }
+ }), 'utf8')
+ process.chdir(pkg)
+}
+
+function performInstall(cb) {
+ mr(common.port, function (s) { // create mock registry.
+ npm.load({registry: common.registry}, function() {
+ npm.commands.install(pkg, [], function(err) {
+ cb(err)
+ s.close() // shutdown mock npm server.
+ })
+ })
+ })
+}
diff --git a/deps/npm/test/tap/cache-add-unpublished.js b/deps/npm/test/tap/cache-add-unpublished.js
new file mode 100644
index 000000000..e31321314
--- /dev/null
+++ b/deps/npm/test/tap/cache-add-unpublished.js
@@ -0,0 +1,61 @@
+var common = require('../common-tap.js')
+var test = require('tap').test
+
+var server
+
+var port = common.port
+var http = require("http")
+
+var doc = {
+ "_id": "superfoo",
+ "_rev": "5-d11adeec0fdfea6b96b120610d2bed71",
+ "name": "superfoo",
+ "time": {
+ "modified": "2014-02-18T18:35:02.930Z",
+ "created": "2014-02-18T18:34:08.437Z",
+ "1.1.0": "2014-02-18T18:34:08.437Z",
+ "unpublished": {
+ "name": "isaacs",
+ "time": "2014-04-30T18:26:45.584Z",
+ "tags": {
+ "latest": "1.1.0"
+ },
+ "maintainers": [
+ {
+ "name": "foo",
+ "email": "foo@foo.com"
+ }
+ ],
+ "description": "do lots a foo",
+ "versions": [
+ "1.1.0"
+ ]
+ }
+ },
+ "_attachments": {}
+}
+
+test("setup", function (t) {
+ server = http.createServer(function(req, res) {
+ res.end(JSON.stringify(doc))
+ })
+ server.listen(port, function() {
+ t.end()
+ })
+})
+
+test("cache add", function (t) {
+ common.npm(["cache", "add", "superfoo"], {}, function (er, c, so, se) {
+ if (er) throw er
+ t.ok(c)
+ t.equal(so, "")
+ t.similar(se, /404 Not Found: superfoo/)
+ t.end()
+ })
+})
+
+test("cleanup", function (t) {
+ server.close(function() {
+ t.end()
+ })
+})
diff --git a/deps/npm/test/tap/cache-shasum.js b/deps/npm/test/tap/cache-shasum.js
new file mode 100644
index 000000000..460f2ee3f
--- /dev/null
+++ b/deps/npm/test/tap/cache-shasum.js
@@ -0,0 +1,60 @@
+var npm = require.resolve("../../")
+var test = require("tap").test
+var path = require("path")
+var fs = require("fs")
+var rimraf = require("rimraf")
+var mkdirp = require("mkdirp")
+var mr = require("npm-registry-mock")
+var common = require("../common-tap.js")
+var cache = path.resolve(__dirname, "cache-shasum")
+var spawn = require("child_process").spawn
+var sha = require("sha")
+var server
+
+test("mock reg", function(t) {
+ rimraf.sync(cache)
+ mkdirp.sync(cache)
+ mr(common.port, function (s) {
+ server = s
+ t.pass("ok")
+ t.end()
+ })
+})
+
+test("npm cache add request", function(t) {
+ var c = spawn(process.execPath, [
+ npm, "cache", "add", "request@2.27.0",
+ "--cache=" + cache,
+ "--registry=" + common.registry,
+ "--loglevel=quiet"
+ ])
+ c.stderr.pipe(process.stderr)
+
+ c.stdout.on("data", function(d) {
+ t.fail("Should not get data on stdout: " + d)
+ })
+
+ c.on("close", function(code) {
+ t.notOk(code, "exit ok")
+ t.end()
+ })
+})
+
+test("compare", function(t) {
+ var d = path.resolve(__dirname, "cache-shasum/request")
+ var p = path.resolve(d, "2.27.0/package.tgz")
+ var r = require(path.resolve(d, ".cache.json"))
+ var rshasum = r.versions['2.27.0'].dist.shasum
+ sha.get(p, function (er, pshasum) {
+ if (er)
+ throw er
+ t.equal(pshasum, rshasum)
+ t.end()
+ })
+})
+
+test("cleanup", function(t) {
+ server.close()
+ rimraf.sync(cache)
+ t.end()
+})
diff --git a/deps/npm/test/tap/circular-dep.js b/deps/npm/test/tap/circular-dep.js
new file mode 100644
index 000000000..533f46451
--- /dev/null
+++ b/deps/npm/test/tap/circular-dep.js
@@ -0,0 +1,52 @@
+var test = require("tap").test
+ , fs = require("fs")
+ , path = require("path")
+ , existsSync = fs.existsSync || path.existsSync
+ , npm = require("../../")
+ , rimraf = require("rimraf")
+ , osenv = require("osenv")
+ , mr = require("npm-registry-mock")
+ , common = require("../common-tap.js")
+ , server
+
+var pkg = path.resolve(__dirname, "circular-dep")
+
+test("installing a package that depends on the current package", function (t) {
+ t.plan(1)
+
+ setup(function () {
+ npm.install("optimist", function (err) {
+ if (err) return t.fail(err)
+ npm.dedupe(function(err) {
+ if (err) return t.fail(err)
+ t.ok(existsSync(path.resolve(pkg,
+ "minimist", "node_modules", "optimist",
+ "node_modules", "minimist"
+ )))
+ cleanup()
+ server.close()
+ })
+ })
+ })
+})
+
+function setup (cb) {
+ cleanup()
+ process.chdir(path.resolve(pkg, "minimist"))
+
+ fs.mkdirSync(path.resolve(pkg, "minimist/node_modules"))
+ mr(common.port, function (s) {
+ server = s
+ npm.load({
+ loglevel: "silent",
+ registry: common.registry,
+ cache: path.resolve(pkg, "cache")
+ }, cb)
+ })
+}
+
+function cleanup() {
+ process.chdir(osenv.tmpdir())
+ rimraf.sync(path.resolve(pkg, "minimist/node_modules"))
+ rimraf.sync(path.resolve(pkg, "cache"))
+}
diff --git a/deps/npm/test/tap/circular-dep/minimist/package.json b/deps/npm/test/tap/circular-dep/minimist/package.json
new file mode 100644
index 000000000..cdaa1913b
--- /dev/null
+++ b/deps/npm/test/tap/circular-dep/minimist/package.json
@@ -0,0 +1,7 @@
+{
+ "name": "minimist",
+ "version": "0.0.5",
+ "dependencies": {
+ "optimist": "0.6.0"
+ }
+}
diff --git a/deps/npm/test/tap/config-meta.js b/deps/npm/test/tap/config-meta.js
new file mode 100644
index 000000000..63cdd61c4
--- /dev/null
+++ b/deps/npm/test/tap/config-meta.js
@@ -0,0 +1,120 @@
+// this is a weird meta test. It verifies that all the instances of
+// `npm.config.get(...)` are:
+// a) Simple strings, and not variables
+// b) Documented
+// c) Defined in the `npmconf` package.
+
+var test = require("tap").test
+var fs = require("fs")
+var path = require("path")
+var root = path.resolve(__dirname, "..", "..")
+var lib = path.resolve(root, "lib")
+var nm = path.resolve(root, "node_modules")
+var doc = path.resolve(root, "doc/misc/npm-config.md")
+var FILES = []
+var CONFS = {}
+var DOC = {}
+
+var exceptions = [
+ path.resolve(lib, "config.js"),
+ path.resolve(lib, "utils", "lifecycle.js")
+]
+
+test("get files", function (t) {
+ walk(nm)
+ walk(lib)
+ t.pass("got files")
+ t.end()
+
+ function walk(lib) {
+ var files = fs.readdirSync(lib).map(function (f) {
+ return path.resolve(lib, f)
+ })
+ files.forEach(function (f) {
+ if (fs.statSync(f).isDirectory())
+ walk(f)
+ else if (f.match(/\.js$/))
+ FILES.push(f)
+ })
+ }
+})
+
+test("get lines", function (t) {
+ FILES.forEach(function (f) {
+ var lines = fs.readFileSync(f, 'utf8').split('\n')
+ lines.forEach(function (l, i) {
+ var matches = l.split(/conf(?:ig)?\.get\(/g)
+ matches.shift()
+ matches.forEach(function (m) {
+ m = m.split(')').shift()
+ var literal = m.match(/^['"].+['"]$/)
+ if (literal) {
+ m = m.slice(1, -1)
+ if (!m.match(/^\_/) && m !== 'argv')
+ CONFS[m] = {
+ file: f,
+ line: i
+ }
+ } else if (exceptions.indexOf(f) === -1) {
+ t.fail("non-string-literal config used in " + f + ":" + i)
+ }
+ })
+ })
+ })
+ t.pass("got lines")
+ t.end()
+})
+
+test("get docs", function (t) {
+ var d = fs.readFileSync(doc, "utf8").split("\n")
+ // walk down until the "## Config Settings" section
+ for (var i = 0; i < d.length && d[i] !== "## Config Settings"; i++);
+ i++
+ // now gather up all the ^###\s lines until the next ^##\s
+ var doclines = []
+ for (; i < d.length && !d[i].match(/^## /); i++) {
+ if (d[i].match(/^### /))
+ DOC[ d[i].replace(/^### /, '').trim() ] = true
+ }
+ t.pass("read the docs")
+ t.end()
+})
+
+test("check configs", function (t) {
+ var defs = require("npmconf/config-defs.js")
+ var types = Object.keys(defs.types)
+ var defaults = Object.keys(defs.defaults)
+
+ for (var c in CONFS) {
+ if (CONFS[c].file.indexOf(lib) === 0) {
+ t.ok(DOC[c], "should be documented " + c + " "
+ + CONFS[c].file + ":" + CONFS[c].line)
+ t.ok(types.indexOf(c) !== -1, "should be defined in npmconf " + c)
+ t.ok(defaults.indexOf(c) !== -1, "should have default in npmconf " + c)
+ }
+ }
+
+ for (var c in DOC) {
+ if (c !== "versions" && c !== "version") {
+ t.ok(CONFS[c], "config in doc should be used somewhere " + c)
+ t.ok(types.indexOf(c) !== -1, "should be defined in npmconf " + c)
+ t.ok(defaults.indexOf(c) !== -1, "should have default in npmconf " + c)
+ }
+ }
+
+ types.forEach(function(c) {
+ if (!c.match(/^\_/) && c !== 'argv' && !c.match(/^versions?$/)) {
+ t.ok(DOC[c], 'defined type should be documented ' + c)
+ t.ok(CONFS[c], 'defined type should be used ' + c)
+ }
+ })
+
+ defaults.forEach(function(c) {
+ if (!c.match(/^\_/) && c !== 'argv' && !c.match(/^versions?$/)) {
+ t.ok(DOC[c], 'defaulted type should be documented ' + c)
+ t.ok(CONFS[c], 'defaulted type should be used ' + c)
+ }
+ })
+
+ t.end()
+})
diff --git a/deps/npm/test/tap/dedupe.js b/deps/npm/test/tap/dedupe.js
new file mode 100644
index 000000000..b4b7495aa
--- /dev/null
+++ b/deps/npm/test/tap/dedupe.js
@@ -0,0 +1,34 @@
+var test = require("tap").test
+ , fs = require("fs")
+ , path = require("path")
+ , existsSync = fs.existsSync || path.existsSync
+ , npm = require("../../")
+ , rimraf = require("rimraf")
+ , mr = require("npm-registry-mock")
+ , common = require('../common-tap.js')
+
+test("dedupe finds the common module and moves it up one level", function (t) {
+ setup(function (s) {
+ npm.install(".", function (err) {
+ if (err) return t.fail(err)
+ npm.dedupe(function(err) {
+ if (err) return t.fail(err)
+ t.ok(existsSync(path.join(__dirname, "dedupe", "node_modules", "minimist")))
+ t.ok(!existsSync(path.join(__dirname, "dedupe", "node_modules", "checker")))
+ s.close() // shutdown mock registry.
+ t.end()
+ })
+ })
+ })
+})
+
+function setup (cb) {
+ process.chdir(path.join(__dirname, "dedupe"))
+ mr(common.port, function (s) { // create mock registry.
+ npm.load({registry: common.registry}, function() {
+ rimraf.sync(path.join(__dirname, "dedupe", "node_modules"))
+ fs.mkdirSync(path.join(__dirname, "dedupe", "node_modules"))
+ cb(s)
+ })
+ })
+}
diff --git a/deps/npm/test/tap/dedupe/package.json b/deps/npm/test/tap/dedupe/package.json
new file mode 100644
index 000000000..842d4b2b2
--- /dev/null
+++ b/deps/npm/test/tap/dedupe/package.json
@@ -0,0 +1,9 @@
+{
+ "author": "Dedupe tester",
+ "name": "dedupe",
+ "version": "0.0.0",
+ "dependencies": {
+ "optimist": "0.6.0",
+ "clean": "2.1.6"
+ }
+}
diff --git a/deps/npm/test/tap/false_name.js b/deps/npm/test/tap/false_name.js
index 968b6e74b..5ab1a67ec 100644
--- a/deps/npm/test/tap/false_name.js
+++ b/deps/npm/test/tap/false_name.js
@@ -1,3 +1,12 @@
+// this is a test for fix #2538
+
+// the false_name-test-package has the name property "test-package" set
+// in the package.json and a dependency named "test-package" is also a
+// defined dependency of "test-package-with-one-dep".
+//
+// this leads to a conflict during installation and the fix is covered
+// by this test
+
var test = require("tap").test
, fs = require("fs")
, path = require("path")
@@ -5,24 +14,38 @@ var test = require("tap").test
, spawn = require("child_process").spawn
, npm = require("../../")
, rimraf = require("rimraf")
+ , common = require("../common-tap.js")
+ , mr = require("npm-registry-mock")
+ , pkg = __dirname + "/false_name"
test("not every pkg.name can be required", function (t) {
- t.plan(1)
+ rimraf.sync(pkg + "/cache")
- setup(function () {
- npm.install(".", function (err) {
- if (err) return t.fail(err)
- t.ok(existsSync(__dirname +
- "/false_name/node_modules/tap/node_modules/buffer-equal"))
+ t.plan(1)
+ mr(common.port, function (s) {
+ setup(function () {
+ npm.install(".", function (err) {
+ if (err) return t.fail(err)
+ s.close()
+ t.ok(existsSync(pkg + "/node_modules/test-package-with-one-dep/" +
+ "node_modules/test-package"))
+ })
})
})
})
+test("cleanup", function (t) {
+ rimraf.sync(pkg + "/cache")
+ rimraf.sync(pkg + "/node_modules")
+ t.end()
+})
+
function setup (cb) {
- process.chdir(__dirname + "/false_name")
- npm.load(function () {
- rimraf.sync(__dirname + "/false_name/node_modules")
- fs.mkdirSync(__dirname + "/false_name/node_modules")
- cb()
- })
+ process.chdir(pkg)
+ npm.load({cache: pkg + "/cache", registry: common.registry},
+ function () {
+ rimraf.sync(pkg + "/node_modules")
+ fs.mkdirSync(pkg + "/node_modules")
+ cb()
+ })
}
diff --git a/deps/npm/test/tap/false_name/package.json b/deps/npm/test/tap/false_name/package.json
index 7f95e2867..9c321e853 100644
--- a/deps/npm/test/tap/false_name/package.json
+++ b/deps/npm/test/tap/false_name/package.json
@@ -1,8 +1,8 @@
{
- "name": "buffer-equal",
+ "name": "test-package",
"version": "0.0.0",
"main": "index.js",
"dependencies": {
- "tap": "0.2.5"
+ "test-package-with-one-dep": "0.0.0"
}
}
diff --git a/deps/npm/test/tap/git-cache-locking.js b/deps/npm/test/tap/git-cache-locking.js
new file mode 100644
index 000000000..b9b328f30
--- /dev/null
+++ b/deps/npm/test/tap/git-cache-locking.js
@@ -0,0 +1,52 @@
+var test = require("tap").test
+ , path = require("path")
+ , rimraf = require("rimraf")
+ , mkdirp = require("mkdirp")
+ , spawn = require("child_process").spawn
+ , npm = require.resolve("../../bin/npm-cli.js")
+ , node = process.execPath
+ , pkg = path.resolve(__dirname, "git-cache-locking")
+ , tmp = path.join(pkg, "tmp")
+ , cache = path.join(pkg, "cache")
+
+
+test("setup", function (t) {
+ rimraf.sync(pkg)
+ mkdirp.sync(pkg)
+ mkdirp.sync(cache)
+ mkdirp.sync(tmp)
+ mkdirp.sync(path.resolve(pkg, 'node_modules'))
+ t.end()
+})
+
+test("git-cache-locking: install a git dependency", function (t) {
+
+ // disable git integration tests on Travis.
+ if (process.env.TRAVIS) return t.end()
+
+ // package c depends on a.git#master and b.git#master
+ // package b depends on a.git#master
+ var child = spawn(node, [npm, "install", "git://github.com/nigelzor/npm-4503-c.git"], {
+ cwd: pkg,
+ env: {
+ npm_config_cache: cache,
+ npm_config_tmp: tmp,
+ npm_config_prefix: pkg,
+ npm_config_global: "false",
+ HOME: process.env.HOME,
+ Path: process.env.PATH,
+ PATH: process.env.PATH
+ },
+ stdio: "inherit"
+ })
+
+ child.on("close", function (code) {
+ t.equal(0, code, "npm install should succeed")
+ t.end()
+ })
+})
+
+test('cleanup', function(t) {
+ rimraf.sync(pkg)
+ t.end()
+})
diff --git a/deps/npm/test/tap/ignore-install-link.js b/deps/npm/test/tap/ignore-install-link.js
new file mode 100644
index 000000000..226221375
--- /dev/null
+++ b/deps/npm/test/tap/ignore-install-link.js
@@ -0,0 +1,122 @@
+var common = require('../common-tap.js')
+var test = require('tap').test
+var osenv = require('osenv')
+var npm = require.resolve("../../bin/npm-cli.js")
+var node = process.execPath
+var path = require('path')
+var fs = require('fs')
+var rimraf = require('rimraf')
+var mkdirp = require('mkdirp')
+var pkg = path.resolve(__dirname, 'ignore-install-link')
+var spawn = require('child_process').spawn
+var linkDir = path.resolve(osenv.tmpdir(), 'npm-link-issue')
+
+test('ignore-install-link: ignore install if a package is linked', function(t) {
+ setup(function(err) {
+ if (err) {
+ t.ifError(err)
+ t.end()
+ return
+ }
+
+ var p = path.resolve(pkg, 'node_modules', 'npm-link-issue')
+ fs.lstat(p, function(err, s) {
+ t.ifError(err)
+
+ t.ok(true === s.isSymbolicLink(), 'child is a symlink')
+ t.end()
+ })
+ })
+})
+
+test('cleanup', function(t) {
+ process.chdir(osenv.tmpdir())
+ rimraf.sync(pkg)
+ rimraf.sync(linkDir)
+ t.end()
+})
+
+
+function setup(cb) {
+ rimraf.sync(linkDir)
+ mkdirp.sync(pkg)
+ mkdirp.sync(path.resolve(pkg, 'cache'))
+ mkdirp.sync(path.resolve(pkg, 'node_modules'))
+ mkdirp.sync(linkDir)
+ fs.writeFileSync(path.resolve(pkg, 'package.json'), JSON.stringify({
+ author: 'Evan Lucas',
+ name: 'ignore-install-link',
+ version: '0.0.0',
+ description: 'Test for ignoring install when a package has been linked',
+ dependencies: {
+ 'npm-link-issue': 'git+https://github.com/lancefisher/npm-link-issue.git#0.0.1'
+ }
+ }), 'utf8')
+ fs.writeFileSync(path.resolve(linkDir, 'package.json'), JSON.stringify({
+ author: 'lancefisher',
+ name: 'npm-link-issue',
+ version: '0.0.1',
+ description: 'Sample Dependency'
+ }), 'utf8')
+
+ clone(cb)
+}
+
+function clone (cb) {
+ var child = createChild(process.cwd(), 'git', ['--git-dir', linkDir, 'init'])
+ child.on('close', function(c) {
+ if (c !== 0)
+ return cb(new Error('Failed to init the git repository'))
+
+ process.chdir(linkDir)
+ performLink(cb)
+ })
+}
+
+function performLink (cb) {
+ var child = createChild(linkDir, node, [npm, 'link', '.'])
+ child.on('close', function(c) {
+ if (c !== 0)
+ return cb(new Error('Failed to link ' + linkDir + ' globally'))
+
+ performLink2(cb)
+ })
+}
+
+function performLink2 (cb) {
+ var child = createChild(pkg, node, [npm, 'link', 'npm-link-issue'])
+ child.on('close', function(c) {
+ if (c !== 0)
+ return cb(new Error('Failed to link ' + linkDir + ' to local node_modules'))
+
+ performInstall(cb)
+ })
+}
+
+function performInstall (cb) {
+ var child = createChild(pkg, node, [npm, 'install'])
+ child.on('close', function(c) {
+ if (c !== 0)
+ return cb(new Error('Failed to install'))
+
+ cb()
+ })
+}
+
+function createChild (cwd, cmd, args) {
+ var env = {
+ HOME: process.env.HOME,
+ Path: process.env.PATH,
+ PATH: process.env.PATH,
+ npm_config_loglevel: "silent"
+ }
+
+ if (process.platform === "win32")
+ env.npm_config_cache = "%APPDATA%\\npm-cache"
+
+ return spawn(cmd, args, {
+ cwd: cwd,
+ stdio: "pipe",
+ env: env
+ })
+}
diff --git a/deps/npm/test/tap/ignore-scripts.js b/deps/npm/test/tap/ignore-scripts.js
new file mode 100644
index 000000000..0115b7571
--- /dev/null
+++ b/deps/npm/test/tap/ignore-scripts.js
@@ -0,0 +1,72 @@
+var test = require("tap").test
+var npm = require.resolve("../../bin/npm-cli.js")
+
+var spawn = require("child_process").spawn
+var node = process.execPath
+
+// ignore-scripts/package.json has scripts that always exit with non-zero error
+// codes. The "install" script is omitted so that npm tries to run node-gyp,
+// which should also fail.
+var pkg = __dirname + "/ignore-scripts"
+
+test("ignore-scripts: install using the option", function(t) {
+ createChild([npm, "install", "--ignore-scripts"]).on("close", function(code) {
+ t.equal(code, 0)
+ t.end()
+ })
+})
+
+test("ignore-scripts: install NOT using the option", function(t) {
+ createChild([npm, "install"]).on("close", function(code) {
+ t.notEqual(code, 0)
+ t.end()
+ })
+})
+
+var scripts = [
+ "prepublish", "publish", "postpublish",
+ "preinstall", "install", "postinstall",
+ "preuninstall", "uninstall", "postuninstall",
+ "preupdate", "update", "postupdate",
+ "pretest", "test", "posttest",
+ "prestop", "stop", "poststop",
+ "prestart", "start", "poststart",
+ "prerestart", "restart", "postrestart"
+]
+
+scripts.forEach(function(script) {
+ test("ignore-scripts: run-script "+script+" using the option", function(t) {
+ createChild([npm, "--ignore-scripts", "run-script", script])
+ .on("close", function(code) {
+ t.equal(code, 0)
+ t.end()
+ })
+ })
+})
+
+scripts.forEach(function(script) {
+ test("ignore-scripts: run-script "+script+" NOT using the option", function(t) {
+ createChild([npm, "run-script", script]).on("close", function(code) {
+ t.notEqual(code, 0)
+ t.end()
+ })
+ })
+})
+
+function createChild (args) {
+ var env = {
+ HOME: process.env.HOME,
+ Path: process.env.PATH,
+ PATH: process.env.PATH,
+ npm_config_loglevel: "silent"
+ }
+
+ if (process.platform === "win32")
+ env.npm_config_cache = "%APPDATA%\\npm-cache"
+
+ return spawn(node, args, {
+ cwd: pkg,
+ stdio: "inherit",
+ env: env
+ })
+}
diff --git a/deps/npm/test/tap/ignore-scripts/binding.gyp b/deps/npm/test/tap/ignore-scripts/binding.gyp
new file mode 100644
index 000000000..9348f0f94
--- /dev/null
+++ b/deps/npm/test/tap/ignore-scripts/binding.gyp
@@ -0,0 +1 @@
+bad_binding_file
diff --git a/deps/npm/test/tap/ignore-scripts/package.json b/deps/npm/test/tap/ignore-scripts/package.json
new file mode 100644
index 000000000..45336caed
--- /dev/null
+++ b/deps/npm/test/tap/ignore-scripts/package.json
@@ -0,0 +1,30 @@
+{
+ "author": "Milton the Aussie",
+ "name": "ignore-scripts",
+ "version": "0.0.0",
+ "scripts": {
+ "prepublish": "exit 123",
+ "publish": "exit 123",
+ "postpublish": "exit 123",
+ "preinstall": "exit 123",
+ "postinstall": "exit 123",
+ "preuninstall": "exit 123",
+ "uninstall": "exit 123",
+ "postuninstall": "exit 123",
+ "preupdate": "exit 123",
+ "update": "exit 123",
+ "postupdate": "exit 123",
+ "pretest": "exit 123",
+ "test": "exit 123",
+ "posttest": "exit 123",
+ "prestop": "exit 123",
+ "stop": "exit 123",
+ "poststop": "exit 123",
+ "prestart": "exit 123",
+ "start": "exit 123",
+ "poststart": "exit 123",
+ "prerestart": "exit 123",
+ "restart": "exit 123",
+ "postrestart": "exit 123"
+ }
+}
diff --git a/deps/npm/test/tap/ignore-shrinkwrap.js b/deps/npm/test/tap/ignore-shrinkwrap.js
index b5b89a56c..ce1c66425 100644
--- a/deps/npm/test/tap/ignore-shrinkwrap.js
+++ b/deps/npm/test/tap/ignore-shrinkwrap.js
@@ -1,61 +1,59 @@
+var common = require("../common-tap.js")
var test = require("tap").test
-var npm = require("../../")
var pkg = './ignore-shrinkwrap'
-var http = require("http")
+var mr = require("npm-registry-mock")
-var server, child
+var child
var spawn = require("child_process").spawn
var npm = require.resolve("../../bin/npm-cli.js")
var node = process.execPath
-test("ignore-shrinkwrap: using the option", function(t) {
- t.plan(1)
- server = http.createServer(function (req, res) {
- res.setHeader("content-type", "application/javascript")
- switch (req.url) {
- case "/shrinkwrap.js":
- t.fail()
- break
- case "/package.js":
- t.pass("package.json used")
+var customMocks = {
+ "get": {
+ "/package.js": [200, {"ente" : true}],
+ "/shrinkwrap.js": [200, {"ente" : true}]
+ }
+}
- }
- t.end()
- this.close()
- child.kill()
- res.statusCode = 500
- res.end('{"error":"Rocko Artischocko - oh oh oh oh!"}')
- })
- server.listen(1337, function() {
- child = createChild(true)
+test("ignore-shrinkwrap: using the option", function (t) {
+ mr({port: common.port, mocks: customMocks}, function (s) {
+ s._server.on("request", function (req, res) {
+ switch (req.url) {
+ case "/shrinkwrap.js":
+ t.fail()
+ break
+ case "/package.js":
+ t.pass("package.json used")
+ }
+ })
+ var child = createChild(true)
+ child.on("close", function (m) {
+ s.close()
+ t.end()
+ })
})
})
-test("ignore-shrinkwrap: NOT using the option", function(t) {
- t.plan(1)
- server = http.createServer(function (req, res) {
- res.setHeader("content-type", "application/javascript")
- switch (req.url) {
- case "/shrinkwrap.js":
- t.pass("shrinkwrap used")
- break
- case "/package.js":
- t.fail()
-
- }
- t.end()
- this.close()
- child.kill()
- res.statusCode = 500
- res.end('{"error":"Rocko Artischocko - oh oh oh oh!"}')
- })
- server.listen(1337, function() {
- child = createChild(false)
+test("ignore-shrinkwrap: NOT using the option", function (t) {
+ mr({port: common.port, mocks: customMocks}, function (s) {
+ s._server.on("request", function (req, res) {
+ switch (req.url) {
+ case "/shrinkwrap.js":
+ t.pass("shrinkwrap used")
+ break
+ case "/package.js":
+ t.fail()
+ }
+ })
+ var child = createChild(false)
+ child.on("close", function (m) {
+ s.close()
+ t.end()
+ })
})
})
-
function createChild (ignoreShrinkwrap) {
var args
if (ignoreShrinkwrap) {
@@ -64,11 +62,10 @@ function createChild (ignoreShrinkwrap) {
args = [npm, "install"]
}
- console.log(args)
-
return spawn(node, args, {
cwd: pkg,
env: {
+ npm_config_registry: common.registry,
npm_config_cache_lock_stale: 1000,
npm_config_cache_lock_wait: 1000,
HOME: process.env.HOME,
diff --git a/deps/npm/test/tap/install-at-locally.js b/deps/npm/test/tap/install-at-locally.js
new file mode 100644
index 000000000..18ea6c3a6
--- /dev/null
+++ b/deps/npm/test/tap/install-at-locally.js
@@ -0,0 +1,43 @@
+var common = require('../common-tap.js')
+var test = require('tap').test
+var npm = require('../../')
+var osenv = require('osenv')
+var path = require('path')
+var fs = require('fs')
+var rimraf = require('rimraf')
+var mkdirp = require('mkdirp')
+var pkg = path.join(__dirname, 'install-at-locally')
+
+test("setup", function (t) {
+ mkdirp.sync(pkg)
+ mkdirp.sync(path.resolve(pkg, 'node_modules'))
+ process.chdir(pkg)
+ t.end()
+})
+
+test('"npm install ./package@1.2.3" should install local pkg', function(t) {
+ npm.load(function() {
+ npm.commands.install(['./package@1.2.3'], function(err) {
+ var p = path.resolve(pkg, 'node_modules/install-at-locally/package.json')
+ t.ok(JSON.parse(fs.readFileSync(p, 'utf8')))
+ t.end()
+ })
+ })
+})
+
+test('"npm install install/at/locally@./package@1.2.3" should install local pkg', function(t) {
+ npm.load(function() {
+ npm.commands.install(['./package@1.2.3'], function(err) {
+ var p = path.resolve(pkg, 'node_modules/install-at-locally/package.json')
+ t.ok(JSON.parse(fs.readFileSync(p, 'utf8')))
+ t.end()
+ })
+ })
+})
+
+test('cleanup', function(t) {
+ process.chdir(__dirname)
+ rimraf.sync(path.resolve(pkg, 'node_modules'))
+ t.end()
+})
+
diff --git a/deps/npm/test/tap/install-at-locally/package@1.2.3/package.json b/deps/npm/test/tap/install-at-locally/package@1.2.3/package.json
new file mode 100644
index 000000000..b11d00c65
--- /dev/null
+++ b/deps/npm/test/tap/install-at-locally/package@1.2.3/package.json
@@ -0,0 +1,5 @@
+{
+ "name": "install-at-locally",
+ "version": "0.0.0",
+ "description": "Test for 404-parent"
+}
diff --git a/deps/npm/test/tap/install-cli-unicode.js b/deps/npm/test/tap/install-cli-unicode.js
new file mode 100644
index 000000000..bb9b4f5ee
--- /dev/null
+++ b/deps/npm/test/tap/install-cli-unicode.js
@@ -0,0 +1,38 @@
+var common = require('../common-tap.js')
+var test = require('tap').test
+var npm = require('../../')
+var mkdirp = require('mkdirp')
+var mr = require('npm-registry-mock')
+var exec = require('child_process').exec
+
+var pkg = __dirname + '/install-cli'
+var NPM_BIN = __dirname + '/../../bin/npm-cli.js'
+
+function hasOnlyAscii (s) {
+ return /^[\000-\177]*$/.test(s) ;
+}
+
+test('does not use unicode with --unicode false', function (t) {
+ t.plan(3)
+ mr(common.port, function (s) {
+ exec('node ' + NPM_BIN + ' install --unicode false read', {
+ cwd: pkg
+ }, function(err, stdout) {
+ t.ifError(err)
+ t.ok(stdout, stdout.length)
+ t.ok(hasOnlyAscii(stdout))
+ s.close()
+ })
+ })
+})
+
+test('cleanup', function (t) {
+ mr(common.port, function (s) {
+ exec('node ' + NPM_BIN + ' uninstall read', {
+ cwd: pkg
+ }, function(err, stdout) {
+ s.close()
+ })
+ })
+ t.end()
+})
diff --git a/deps/npm/test/tap/install-cli/README.md b/deps/npm/test/tap/install-cli/README.md
new file mode 100644
index 000000000..dbdfb5aa0
--- /dev/null
+++ b/deps/npm/test/tap/install-cli/README.md
@@ -0,0 +1 @@
+# Tests for `npm install` CLI output.
diff --git a/deps/npm/test/tap/install-cli/index.js b/deps/npm/test/tap/install-cli/index.js
new file mode 100644
index 000000000..33c1891f8
--- /dev/null
+++ b/deps/npm/test/tap/install-cli/index.js
@@ -0,0 +1 @@
+module.exports = true
diff --git a/deps/npm/test/tap/install-cli/package.json b/deps/npm/test/tap/install-cli/package.json
new file mode 100644
index 000000000..3d7e41d46
--- /dev/null
+++ b/deps/npm/test/tap/install-cli/package.json
@@ -0,0 +1,10 @@
+{
+ "name": "install-cli",
+ "description": "fixture",
+ "version": "0.0.1",
+ "main": "index.js",
+ "dependencies": {
+ "read": "1.0.5"
+ },
+ "repository": "git://github.com/robertkowalski/bogusfixture"
+}
diff --git a/deps/npm/test/tap/install-save-exact.js b/deps/npm/test/tap/install-save-exact.js
new file mode 100644
index 000000000..cf25b779b
--- /dev/null
+++ b/deps/npm/test/tap/install-save-exact.js
@@ -0,0 +1,92 @@
+var common = require('../common-tap.js')
+var test = require('tap').test
+var npm = require('../../')
+var osenv = require('osenv')
+var path = require('path')
+var fs = require('fs')
+var rimraf = require('rimraf')
+var mkdirp = require('mkdirp')
+var pkg = path.join(__dirname, 'install-save-exact')
+var mr = require("npm-registry-mock")
+
+test("setup", function (t) {
+ mkdirp.sync(pkg)
+ mkdirp.sync(path.resolve(pkg, 'node_modules'))
+ process.chdir(pkg)
+ t.end()
+})
+
+test('"npm install --save --save-exact should install local pkg', function(t) {
+ resetPackageJSON(pkg)
+ mr(common.port, function (s) {
+ npm.load({
+ cache: pkg + "/cache",
+ loglevel: 'silent',
+ registry: common.registry }, function(err) {
+ t.ifError(err)
+ npm.config.set('save', true)
+ npm.config.set('save-exact', true)
+ npm.commands.install(['underscore@1.3.1'], function(err) {
+ t.ifError(err)
+ var p = path.resolve(pkg, 'node_modules/underscore/package.json')
+ t.ok(JSON.parse(fs.readFileSync(p)))
+ var pkgJson = JSON.parse(fs.readFileSync(pkg + '/package.json', 'utf8'))
+ t.deepEqual(pkgJson.dependencies, {
+ 'underscore': '1.3.1'
+ }, 'Underscore dependency should specify exactly 1.3.1')
+ npm.config.set('save', undefined)
+ npm.config.set('save-exact', undefined)
+ s.close()
+ t.end()
+ })
+ })
+ })
+})
+
+test('"npm install --save-dev --save-exact should install local pkg', function(t) {
+ resetPackageJSON(pkg)
+
+ mr(common.port, function (s) {
+ npm.load({
+ cache: pkg + "/cache",
+ loglevel: 'silent',
+ registry: common.registry }, function(err) {
+ t.ifError(err)
+ npm.config.set('save-dev', true)
+ npm.config.set('save-exact', true)
+ npm.commands.install(['underscore@1.3.1'], function(err) {
+ t.ifError(err)
+ var p = path.resolve(pkg, 'node_modules/underscore/package.json')
+ t.ok(JSON.parse(fs.readFileSync(p)))
+ var pkgJson = JSON.parse(fs.readFileSync(pkg + '/package.json', 'utf8'))
+ console.log(pkgJson)
+ t.deepEqual(pkgJson.devDependencies, {
+ 'underscore': '1.3.1'
+ }, 'underscore devDependency should specify exactly 1.3.1')
+ s.close()
+ npm.config.set('save-dev', undefined)
+ npm.config.set('save-exact', undefined)
+ t.end()
+ })
+ })
+ })
+})
+
+test('cleanup', function(t) {
+ process.chdir(__dirname)
+ rimraf.sync(path.resolve(pkg, 'node_modules'))
+ rimraf.sync(path.resolve(pkg, 'cache'))
+ resetPackageJSON(pkg)
+ t.end()
+})
+
+function resetPackageJSON(pkg) {
+ var pkgJson = JSON.parse(fs.readFileSync(pkg + '/package.json', 'utf8'))
+ delete pkgJson.dependencies
+ delete pkgJson.devDependencies
+ delete pkgJson.optionalDependencies
+ var json = JSON.stringify(pkgJson, null, 2) + "\n"
+ fs.writeFileSync(pkg + '/package.json', json, "ascii")
+}
+
+
diff --git a/deps/npm/test/tap/install-save-exact/README.md b/deps/npm/test/tap/install-save-exact/README.md
new file mode 100644
index 000000000..aca67ff17
--- /dev/null
+++ b/deps/npm/test/tap/install-save-exact/README.md
@@ -0,0 +1 @@
+# just a test
diff --git a/deps/npm/test/tap/install-save-exact/index.js b/deps/npm/test/tap/install-save-exact/index.js
new file mode 100644
index 000000000..33c1891f8
--- /dev/null
+++ b/deps/npm/test/tap/install-save-exact/index.js
@@ -0,0 +1 @@
+module.exports = true
diff --git a/deps/npm/test/tap/install-save-exact/package.json b/deps/npm/test/tap/install-save-exact/package.json
new file mode 100644
index 000000000..84789fc22
--- /dev/null
+++ b/deps/npm/test/tap/install-save-exact/package.json
@@ -0,0 +1,7 @@
+{
+ "name": "bla",
+ "description": "fixture",
+ "version": "0.0.1",
+ "main": "index.js",
+ "repository": "git://github.com/robertkowalski/bogusfixture"
+}
diff --git a/deps/npm/test/tap/install-save-prefix.js b/deps/npm/test/tap/install-save-prefix.js
new file mode 100644
index 000000000..753150924
--- /dev/null
+++ b/deps/npm/test/tap/install-save-prefix.js
@@ -0,0 +1,140 @@
+var common = require('../common-tap.js')
+var test = require('tap').test
+var npm = require('../../')
+var osenv = require('osenv')
+var path = require('path')
+var fs = require('fs')
+var rimraf = require('rimraf')
+var mkdirp = require('mkdirp')
+var pkg = path.join(__dirname, 'install-save-prefix')
+var mr = require("npm-registry-mock")
+
+test("setup", function (t) {
+ mkdirp.sync(pkg)
+ mkdirp.sync(path.resolve(pkg, 'node_modules'))
+ process.chdir(pkg)
+ t.end()
+})
+
+test('"npm install --save with default save-prefix should install local pkg versioned to allow minor updates', function(t) {
+ resetPackageJSON(pkg)
+ mr(common.port, function (s) {
+ npm.load({
+ cache: pkg + "/cache",
+ loglevel: 'silent',
+ registry: common.registry }, function(err) {
+ t.ifError(err)
+ npm.config.set('save', true)
+ npm.commands.install(['underscore@latest'], function(err) {
+ t.ifError(err)
+ var p = path.resolve(pkg, 'node_modules/underscore/package.json')
+ t.ok(JSON.parse(fs.readFileSync(p)))
+ var pkgJson = JSON.parse(fs.readFileSync(pkg + '/package.json', 'utf8'))
+ t.deepEqual(pkgJson.dependencies, {
+ 'underscore': '^1.5.1'
+ }, 'Underscore dependency should specify ^1.5.1')
+ npm.config.set('save', undefined)
+ s.close()
+ t.end()
+ })
+ })
+ })
+})
+
+test('"npm install --save-dev with default save-prefix should install local pkg to dev dependencies versioned to allow minor updates', function(t) {
+ resetPackageJSON(pkg)
+ mr(common.port, function (s) {
+ npm.load({
+ cache: pkg + "/cache",
+ loglevel: 'silent',
+ registry: common.registry }, function(err) {
+ t.ifError(err)
+ npm.config.set('save-dev', true)
+ npm.commands.install(['underscore@1.3.1'], function(err) {
+ t.ifError(err)
+ var p = path.resolve(pkg, 'node_modules/underscore/package.json')
+ t.ok(JSON.parse(fs.readFileSync(p)))
+ var pkgJson = JSON.parse(fs.readFileSync(pkg + '/package.json', 'utf8'))
+ t.deepEqual(pkgJson.devDependencies, {
+ 'underscore': '^1.3.1'
+ }, 'Underscore devDependency should specify ^1.3.1')
+ npm.config.set('save-dev', undefined)
+ s.close()
+ t.end()
+ })
+ })
+ })
+})
+
+test('"npm install --save with "~" save-prefix should install local pkg versioned to allow patch updates', function(t) {
+ resetPackageJSON(pkg)
+ mr(common.port, function (s) {
+ npm.load({
+ cache: pkg + "/cache",
+ loglevel: 'silent',
+ registry: common.registry }, function(err) {
+ t.ifError(err)
+ npm.config.set('save', true)
+ npm.config.set('save-prefix', '~')
+ npm.commands.install(['underscore@1.3.1'], function(err) {
+ t.ifError(err)
+ var p = path.resolve(pkg, 'node_modules/underscore/package.json')
+ t.ok(JSON.parse(fs.readFileSync(p)))
+ var pkgJson = JSON.parse(fs.readFileSync(pkg + '/package.json', 'utf8'))
+ t.deepEqual(pkgJson.dependencies, {
+ 'underscore': '~1.3.1'
+ }, 'Underscore dependency should specify ~1.3.1')
+ npm.config.set('save', undefined)
+ npm.config.set('save-prefix', undefined)
+ s.close()
+ t.end()
+ })
+ })
+ })
+})
+
+test('"npm install --save-dev with "~" save-prefix should install local pkg to dev dependencies versioned to allow patch updates', function(t) {
+ resetPackageJSON(pkg)
+ mr(common.port, function (s) {
+ npm.load({
+ cache: pkg + "/cache",
+ loglevel: 'silent',
+ registry: common.registry }, function(err) {
+ t.ifError(err)
+ npm.config.set('save-dev', true)
+ npm.config.set('save-prefix', '~')
+ npm.commands.install(['underscore@1.3.1'], function(err) {
+ t.ifError(err)
+ var p = path.resolve(pkg, 'node_modules/underscore/package.json')
+ t.ok(JSON.parse(fs.readFileSync(p)))
+ var pkgJson = JSON.parse(fs.readFileSync(pkg + '/package.json', 'utf8'))
+ t.deepEqual(pkgJson.devDependencies, {
+ 'underscore': '~1.3.1'
+ }, 'Underscore devDependency should specify ~1.3.1')
+ npm.config.set('save-dev', undefined)
+ npm.config.set('save-prefix', undefined)
+ s.close()
+ t.end()
+ })
+ })
+ })
+})
+
+test('cleanup', function(t) {
+ process.chdir(__dirname)
+ rimraf.sync(path.resolve(pkg, 'node_modules'))
+ rimraf.sync(path.resolve(pkg, 'cache'))
+ resetPackageJSON(pkg)
+ t.end()
+})
+
+function resetPackageJSON(pkg) {
+ var pkgJson = JSON.parse(fs.readFileSync(pkg + '/package.json', 'utf8'))
+ delete pkgJson.dependencies
+ delete pkgJson.devDependencies
+ delete pkgJson.optionalDependencies
+ var json = JSON.stringify(pkgJson, null, 2) + "\n"
+ fs.writeFileSync(pkg + '/package.json', json, "ascii")
+}
+
+
diff --git a/deps/npm/test/tap/install-save-prefix/README.md b/deps/npm/test/tap/install-save-prefix/README.md
new file mode 100644
index 000000000..aca67ff17
--- /dev/null
+++ b/deps/npm/test/tap/install-save-prefix/README.md
@@ -0,0 +1 @@
+# just a test
diff --git a/deps/npm/test/tap/install-save-prefix/index.js b/deps/npm/test/tap/install-save-prefix/index.js
new file mode 100644
index 000000000..33c1891f8
--- /dev/null
+++ b/deps/npm/test/tap/install-save-prefix/index.js
@@ -0,0 +1 @@
+module.exports = true
diff --git a/deps/npm/test/tap/install-save-prefix/package.json b/deps/npm/test/tap/install-save-prefix/package.json
new file mode 100644
index 000000000..84789fc22
--- /dev/null
+++ b/deps/npm/test/tap/install-save-prefix/package.json
@@ -0,0 +1,7 @@
+{
+ "name": "bla",
+ "description": "fixture",
+ "version": "0.0.1",
+ "main": "index.js",
+ "repository": "git://github.com/robertkowalski/bogusfixture"
+}
diff --git a/deps/npm/test/tap/invalid-cmd-exit-code.js b/deps/npm/test/tap/invalid-cmd-exit-code.js
new file mode 100644
index 000000000..14db8669e
--- /dev/null
+++ b/deps/npm/test/tap/invalid-cmd-exit-code.js
@@ -0,0 +1,29 @@
+var test = require("tap").test
+var node = process.execPath
+var common = require("../common-tap.js")
+
+var opts = { cwd: process.cwd() }
+
+test("npm asdf should return exit code 1", function(t) {
+ common.npm(["asdf"], opts, function (er, c) {
+ if (er) throw er
+ t.ok(c, "exit code should not be zero")
+ t.end()
+ })
+})
+
+test("npm help should return exit code 0", function(t) {
+ common.npm(["help"], opts, function (er, c) {
+ if (er) throw er
+ t.equal(c, 0, "exit code should be 0")
+ t.end()
+ })
+})
+
+test("npm help fadf should return exit code 0", function(t) {
+ common.npm(["help", "fadf"], opts, function (er, c) {
+ if (er) throw er
+ t.equal(c, 0, "exit code should be 0")
+ t.end()
+ })
+})
diff --git a/deps/npm/test/tap/lifecycle-signal.js b/deps/npm/test/tap/lifecycle-signal.js
new file mode 100644
index 000000000..9d88fbd79
--- /dev/null
+++ b/deps/npm/test/tap/lifecycle-signal.js
@@ -0,0 +1,27 @@
+var test = require("tap").test
+var npm = require.resolve("../../bin/npm-cli.js")
+var node = process.execPath
+var spawn = require("child_process").spawn
+var path = require("path")
+var pkg = path.resolve(__dirname, "lifecycle-signal")
+
+test("lifecycle signal abort", function (t) {
+ // windows does not use lifecycle signals, abort
+ if (process.platform === "win32" || process.env.TRAVIS) return t.end()
+
+ var child = spawn(node, [npm, "install"], {
+ cwd: pkg
+ })
+ child.on("close", function (code, signal) {
+ // GNU shell returns a code, no signal
+ if (process.platform === "linux") {
+ t.equal(code, 1)
+ t.equal(signal, null)
+ return t.end()
+ }
+
+ t.equal(code, null)
+ t.equal(signal, "SIGSEGV")
+ t.end()
+ })
+})
diff --git a/deps/npm/test/tap/lifecycle-signal/package.json b/deps/npm/test/tap/lifecycle-signal/package.json
new file mode 100644
index 000000000..6b7f2f1c5
--- /dev/null
+++ b/deps/npm/test/tap/lifecycle-signal/package.json
@@ -0,0 +1,3 @@
+{ "name":"lifecycle-signal",
+ "version":"1.2.5",
+ "scripts": {"preinstall":"node -e 'process.kill(process.pid,\"SIGSEGV\")'"}}
diff --git a/deps/npm/test/tap/lifecycle.js b/deps/npm/test/tap/lifecycle.js
new file mode 100644
index 000000000..288329c24
--- /dev/null
+++ b/deps/npm/test/tap/lifecycle.js
@@ -0,0 +1,12 @@
+var test = require("tap").test
+var npm = require('../../')
+var lifecycle = require('../../lib/utils/lifecycle')
+
+test("lifecycle: make env correctly", function (t) {
+ npm.load({enteente: Infinity}, function() {
+ var env = lifecycle.makeEnv({}, null, process.env)
+
+ t.equal('Infinity', env.npm_config_enteente)
+ t.end()
+ })
+})
diff --git a/deps/npm/test/tap/ls-depth-cli.js b/deps/npm/test/tap/ls-depth-cli.js
new file mode 100644
index 000000000..fcbc4364f
--- /dev/null
+++ b/deps/npm/test/tap/ls-depth-cli.js
@@ -0,0 +1,79 @@
+var common = require('../common-tap')
+ , test = require('tap').test
+ , path = require('path')
+ , rimraf = require('rimraf')
+ , osenv = require('osenv')
+ , mkdirp = require('mkdirp')
+ , pkg = __dirname + '/ls-depth'
+ , cache = pkg + '/cache'
+ , tmp = pkg + '/tmp'
+ , node = process.execPath
+ , npm = path.resolve(__dirname, '../../cli.js')
+ , mr = require('npm-registry-mock')
+ , opts = {cwd: pkg}
+
+
+function cleanup () {
+ process.chdir(osenv.tmpdir())
+ rimraf.sync(pkg + '/cache')
+ rimraf.sync(pkg + '/tmp')
+ rimraf.sync(pkg + '/node_modules')
+}
+
+test('setup', function (t) {
+ cleanup()
+ mkdirp.sync(pkg + '/cache')
+ mkdirp.sync(pkg + '/tmp')
+ mr(common.port, function (s) {
+ var cmd = ['install', '--registry=' + common.registry]
+ common.npm(cmd, opts, function (er, c) {
+ if (er) throw er
+ t.equal(c, 0)
+ s.close()
+ t.end()
+ })
+ })
+})
+
+test('npm ls --depth=0', function (t) {
+ common.npm(['ls', '--depth=0'], opts, function (er, c, out) {
+ if (er) throw er
+ t.equal(c, 0)
+ t.has(out, /test-package-with-one-dep@0\.0\.0/
+ , "output contains test-package-with-one-dep@0.0.0")
+ t.doesNotHave(out, /test-package@0\.0\.0/
+ , "output not contains test-package@0.0.0")
+ t.end()
+ })
+})
+
+test('npm ls --depth=1', function (t) {
+ common.npm(['ls', '--depth=1'], opts, function (er, c, out) {
+ if (er) throw er
+ t.equal(c, 0)
+ t.has(out, /test-package-with-one-dep@0\.0\.0/
+ , "output contains test-package-with-one-dep@0.0.0")
+ t.has(out, /test-package@0\.0\.0/
+ , "output contains test-package@0.0.0")
+ t.end()
+ })
+})
+
+test('npm ls --depth=Infinity', function (t) {
+ // travis has a preconfigured depth=0, in general we can not depend
+ // on the default value in all environments, so explictly set it here
+ common.npm(['ls', '--depth=Infinity'], opts, function (er, c, out) {
+ if (er) throw er
+ t.equal(c, 0)
+ t.has(out, /test-package-with-one-dep@0\.0\.0/
+ , "output contains test-package-with-one-dep@0.0.0")
+ t.has(out, /test-package@0\.0\.0/
+ , "output contains test-package@0.0.0")
+ t.end()
+ })
+})
+
+test('cleanup', function (t) {
+ cleanup()
+ t.end()
+})
diff --git a/deps/npm/test/tap/ls-depth/package.json b/deps/npm/test/tap/ls-depth/package.json
new file mode 100644
index 000000000..06f8e48a9
--- /dev/null
+++ b/deps/npm/test/tap/ls-depth/package.json
@@ -0,0 +1,8 @@
+{
+ "author": "Rocko Artischocko",
+ "name": "ls-depth",
+ "version": "0.0.0",
+ "dependencies": {
+ "test-package-with-one-dep": "0.0.0"
+ }
+}
diff --git a/deps/npm/test/tap/ls-no-results.js b/deps/npm/test/tap/ls-no-results.js
new file mode 100644
index 000000000..9792774c6
--- /dev/null
+++ b/deps/npm/test/tap/ls-no-results.js
@@ -0,0 +1,12 @@
+var test = require('tap').test
+var spawn = require('child_process').spawn
+var node = process.execPath
+var npm = require.resolve('../../')
+var args = [ npm, 'ls', 'ceci n’est pas une package' ]
+test('ls exits non-zero when nothing found', function (t) {
+ var child = spawn(node, args)
+ child.on('exit', function (code) {
+ t.notEqual(code, 0)
+ t.end()
+ })
+})
diff --git a/deps/npm/test/tap/noargs-install-config-save.js b/deps/npm/test/tap/noargs-install-config-save.js
new file mode 100644
index 000000000..ceff77bd4
--- /dev/null
+++ b/deps/npm/test/tap/noargs-install-config-save.js
@@ -0,0 +1,86 @@
+var common = require("../common-tap.js")
+var test = require("tap").test
+var npm = require.resolve("../../bin/npm-cli.js")
+var osenv = require("osenv")
+var path = require("path")
+var fs = require("fs")
+var rimraf = require("rimraf")
+var mkdirp = require("mkdirp")
+
+var mr = require("npm-registry-mock")
+
+var child
+var spawn = require("child_process").spawn
+var node = process.execPath
+
+var pkg = process.env.npm_config_tmp || "/tmp"
+pkg += path.sep + "noargs-install-config-save"
+
+function writePackageJson() {
+ rimraf.sync(pkg)
+ mkdirp.sync(pkg)
+ mkdirp.sync(pkg + "/cache")
+
+ fs.writeFileSync(pkg + "/package.json", JSON.stringify({
+ "author": "Rocko Artischocko",
+ "name": "noargs",
+ "version": "0.0.0",
+ "devDependencies": {
+ "underscore": "1.3.1"
+ }
+ }), 'utf8')
+}
+
+function createChild (args) {
+ var env = {
+ npm_config_save: true,
+ npm_config_registry: common.registry,
+ npm_config_cache: pkg + "/cache",
+ HOME: process.env.HOME,
+ Path: process.env.PATH,
+ PATH: process.env.PATH
+ }
+
+ if (process.platform === "win32")
+ env.npm_config_cache = "%APPDATA%\\npm-cache"
+
+ return spawn(node, args, {
+ cwd: pkg,
+ env: env
+ })
+}
+
+test("does not update the package.json with empty arguments", function (t) {
+ writePackageJson()
+ t.plan(1)
+
+ mr(common.port, function (s) {
+ var child = createChild([npm, "install"])
+ child.on("close", function (m) {
+ var text = JSON.stringify(fs.readFileSync(pkg + "/package.json", "utf8"))
+ t.ok(text.indexOf('"dependencies') === -1)
+ s.close()
+ t.end()
+ })
+ })
+})
+
+test("updates the package.json (adds dependencies) with an argument", function (t) {
+ writePackageJson()
+ t.plan(1)
+
+ mr(common.port, function (s) {
+ var child = createChild([npm, "install", "underscore"])
+ child.on("close", function (m) {
+ var text = JSON.stringify(fs.readFileSync(pkg + "/package.json", "utf8"))
+ t.ok(text.indexOf('"dependencies') !== -1)
+ s.close()
+ t.end()
+ })
+ })
+})
+
+test("cleanup", function (t) {
+ rimraf.sync(pkg + "/cache")
+ t.end()
+})
diff --git a/deps/npm/test/tap/npm-api-not-loaded-error.js b/deps/npm/test/tap/npm-api-not-loaded-error.js
new file mode 100644
index 000000000..3fd073110
--- /dev/null
+++ b/deps/npm/test/tap/npm-api-not-loaded-error.js
@@ -0,0 +1,47 @@
+var test = require("tap").test
+var npm = require("../..")
+var path = require("path")
+var rimraf = require("rimraf")
+var npmrc = path.join(__dirname, "npmrc")
+var fs = require("fs")
+
+test("setup", function (t) {
+ fs.writeFileSync(npmrc, "foo = bar\n", "ascii")
+ t.end()
+})
+
+test("calling set/get on config pre-load should throw", function (t) {
+ var threw = true
+ try {
+ npm.config.get("foo")
+ threw = false
+ } catch (er) {
+ t.equal(er.message, "npm.load() required")
+ } finally {
+ t.ok(threw, "get before load should throw")
+ }
+
+ var threw = true
+ try {
+ npm.config.set("foo", "bar")
+ threw = false
+ } catch (er) {
+ t.equal(er.message, "npm.load() required")
+ } finally {
+ t.ok(threw, "set before load should throw")
+ }
+
+ npm.load({ userconfig: npmrc }, function (er) {
+ if (er)
+ throw er
+ t.equal(npm.config.get("foo"), "bar")
+ npm.config.set("foo", "baz")
+ t.equal(npm.config.get("foo"), "baz")
+ t.end()
+ })
+})
+
+test("cleanup", function (t) {
+ rimraf.sync(npmrc)
+ t.end()
+})
diff --git a/deps/npm/test/tap/outdated-color.js b/deps/npm/test/tap/outdated-color.js
new file mode 100644
index 000000000..f20bcea93
--- /dev/null
+++ b/deps/npm/test/tap/outdated-color.js
@@ -0,0 +1,44 @@
+var common = require("../common-tap.js")
+var test = require("tap").test
+var npm = require("../../")
+var mkdirp = require("mkdirp")
+var rimraf = require("rimraf")
+var mr = require("npm-registry-mock")
+var exec = require('child_process').exec
+var mr = require("npm-registry-mock")
+
+var pkg = __dirname + '/outdated'
+var NPM_BIN = __dirname + '/../../bin/npm-cli.js'
+mkdirp.sync(pkg + "/cache")
+
+function hasControlCodes(str) {
+ return str.length !== ansiTrim(str).length
+}
+
+function ansiTrim (str) {
+ var r = new RegExp("\x1b(?:\\[(?:\\d+[ABCDEFGJKSTm]|\\d+;\\d+[Hfm]|" +
+ "\\d+;\\d+;\\d+m|6n|s|u|\\?25[lh])|\\w)", "g");
+ return str.replace(r, "")
+}
+
+// note hard to automate tests for color = true
+// as npm kills the color config when it detects
+// it's not running in a tty
+test("does not use ansi styling", function (t) {
+ t.plan(3)
+ mr(common.port, function (s) { // create mock registry.
+ exec('node ' + NPM_BIN + ' outdated --registry ' + common.registry + ' --color false underscore', {
+ cwd: pkg
+ }, function(err, stdout) {
+ t.ifError(err)
+ t.ok(stdout, stdout.length)
+ t.ok(!hasControlCodes(stdout))
+ s.close()
+ })
+ })
+})
+
+test("cleanup", function (t) {
+ rimraf.sync(pkg + "/cache")
+ t.end()
+})
diff --git a/deps/npm/test/tap/outdated-depth.js b/deps/npm/test/tap/outdated-depth.js
new file mode 100644
index 000000000..7ccc0c625
--- /dev/null
+++ b/deps/npm/test/tap/outdated-depth.js
@@ -0,0 +1,51 @@
+var common = require('../common-tap')
+ , path = require('path')
+ , test = require('tap').test
+ , rimraf = require('rimraf')
+ , npm = require('../../')
+ , mr = require('npm-registry-mock')
+ , pkg = path.resolve(__dirname, 'outdated-depth')
+
+function cleanup () {
+ rimraf.sync(pkg + '/node_modules')
+ rimraf.sync(pkg + '/cache')
+}
+
+test('outdated depth zero', function (t) {
+ var expected = [
+ pkg,
+ 'underscore',
+ '1.3.1',
+ '1.3.1',
+ '1.5.1',
+ '1.3.1'
+ ]
+
+ process.chdir(pkg)
+
+ mr(common.port, function (s) {
+ npm.load({
+ cache: pkg + '/cache'
+ , loglevel: 'silent'
+ , registry: common.registry
+ , depth: 0
+ }
+ , function () {
+ npm.install('.', function (er) {
+ if (er) throw new Error(er)
+ npm.outdated(function (err, d) {
+ if (err) throw new Error(err)
+ t.deepEqual(d[0], expected)
+ s.close()
+ t.end()
+ })
+ })
+ }
+ )
+ })
+})
+
+test("cleanup", function (t) {
+ cleanup()
+ t.end()
+})
diff --git a/deps/npm/test/tap/outdated-depth/README.md b/deps/npm/test/tap/outdated-depth/README.md
new file mode 100644
index 000000000..aca67ff17
--- /dev/null
+++ b/deps/npm/test/tap/outdated-depth/README.md
@@ -0,0 +1 @@
+# just a test
diff --git a/deps/npm/test/tap/outdated-depth/index.js b/deps/npm/test/tap/outdated-depth/index.js
new file mode 100644
index 000000000..33c1891f8
--- /dev/null
+++ b/deps/npm/test/tap/outdated-depth/index.js
@@ -0,0 +1 @@
+module.exports = true
diff --git a/deps/npm/test/tap/outdated-depth/package.json b/deps/npm/test/tap/outdated-depth/package.json
new file mode 100644
index 000000000..df269dc72
--- /dev/null
+++ b/deps/npm/test/tap/outdated-depth/package.json
@@ -0,0 +1,10 @@
+{
+ "name": "whatever",
+ "description": "yeah idk",
+ "version": "1.2.3",
+ "main": "index.js",
+ "dependencies": {
+ "underscore": "1.3.1"
+ },
+ "repository": "git://github.com/luk-/whatever"
+}
diff --git a/deps/npm/test/tap/outdated-git.js b/deps/npm/test/tap/outdated-git.js
new file mode 100644
index 000000000..933e3b0b4
--- /dev/null
+++ b/deps/npm/test/tap/outdated-git.js
@@ -0,0 +1,30 @@
+var common = require("../common-tap.js")
+var test = require("tap").test
+var npm = require("../../")
+var mkdirp = require("mkdirp")
+var rimraf = require("rimraf")
+var mr = require("npm-registry-mock")
+
+// config
+var pkg = __dirname + "/outdated-git"
+mkdirp.sync(pkg + "/cache")
+
+
+test("dicovers new versions in outdated", function (t) {
+ process.chdir(pkg)
+ t.plan(5)
+ npm.load({cache: pkg + "/cache", registry: common.registry}, function () {
+ npm.outdated(function (er, d) {
+ t.equal('git', d[0][3])
+ t.equal('git', d[0][4])
+ t.equal('git://github.com/robertkowalski/foo-private.git', d[0][5])
+ t.equal('git://user:pass@github.com/robertkowalski/foo-private.git', d[1][5])
+ t.equal('git://github.com/robertkowalski/foo', d[2][5])
+ })
+ })
+})
+
+test("cleanup", function (t) {
+ rimraf.sync(pkg + "/cache")
+ t.end()
+})
diff --git a/deps/npm/test/tap/outdated-git/README.md b/deps/npm/test/tap/outdated-git/README.md
new file mode 100644
index 000000000..d173390cb
--- /dev/null
+++ b/deps/npm/test/tap/outdated-git/README.md
@@ -0,0 +1 @@
+just a test
diff --git a/deps/npm/test/tap/outdated-git/package.json b/deps/npm/test/tap/outdated-git/package.json
new file mode 100644
index 000000000..209936dde
--- /dev/null
+++ b/deps/npm/test/tap/outdated-git/package.json
@@ -0,0 +1,12 @@
+{
+ "name": "outdated-git",
+ "author": "Rocko Artischocko",
+ "description": "fixture",
+ "version": "0.0.1",
+ "main": "index.js",
+ "dependencies": {
+ "foo-private": "git://github.com/robertkowalski/foo-private.git",
+ "foo-private-credentials": "git://user:pass@github.com/robertkowalski/foo-private.git",
+ "foo-github": "robertkowalski/foo"
+ }
+}
diff --git a/deps/npm/test/tap/outdated-include-devdependencies.js b/deps/npm/test/tap/outdated-include-devdependencies.js
new file mode 100644
index 000000000..b78948a24
--- /dev/null
+++ b/deps/npm/test/tap/outdated-include-devdependencies.js
@@ -0,0 +1,28 @@
+var common = require("../common-tap.js")
+var test = require("tap").test
+var npm = require("../../")
+var mkdirp = require("mkdirp")
+var rimraf = require("rimraf")
+var mr = require("npm-registry-mock")
+
+// config
+var pkg = __dirname + '/outdated-include-devdependencies'
+mkdirp.sync(pkg + "/cache")
+
+test("includes devDependencies in outdated", function (t) {
+ process.chdir(pkg)
+ mr(common.port, function (s) {
+ npm.load({cache: pkg + "/cache", registry: common.registry}, function () {
+ npm.outdated(function (er, d) {
+ t.equal("1.5.1", d[0][3])
+ s.close()
+ t.end()
+ })
+ })
+ })
+})
+
+test("cleanup", function (t) {
+ rimraf.sync(pkg + "/cache")
+ t.end()
+})
diff --git a/deps/npm/test/tap/outdated-include-devdependencies/package.json b/deps/npm/test/tap/outdated-include-devdependencies/package.json
new file mode 100644
index 000000000..70998419b
--- /dev/null
+++ b/deps/npm/test/tap/outdated-include-devdependencies/package.json
@@ -0,0 +1,8 @@
+{
+ "author": "Rocko Artischocko",
+ "name": "ignore-shrinkwrap",
+ "version": "0.0.0",
+ "devDependencies": {
+ "underscore": ">=1.3.1"
+ }
+} \ No newline at end of file
diff --git a/deps/npm/test/tap/outdated-json.js b/deps/npm/test/tap/outdated-json.js
new file mode 100644
index 000000000..7c19561ee
--- /dev/null
+++ b/deps/npm/test/tap/outdated-json.js
@@ -0,0 +1,73 @@
+var common = require("../common-tap.js")
+ , test = require("tap").test
+ , rimraf = require("rimraf")
+ , npm = require("../../")
+ , mr = require("npm-registry-mock")
+ , path = require("path")
+ , osenv = require("osenv")
+ , spawn = require('child_process').spawn
+ , node = process.execPath
+ , npmc = require.resolve('../../')
+ , pkg = path.resolve(__dirname, 'outdated-new-versions')
+ , args = [ npmc
+ , 'outdated'
+ , '--json'
+ , '--silent'
+ , '--registry=' + common.registry
+ , '--cache=' + pkg + '/cache'
+ ]
+
+var expected = { underscore:
+ { current: '1.3.3'
+ , wanted: '1.3.3'
+ , latest: '1.5.1'
+ , location: 'node_modules' + path.sep + 'underscore'
+ }
+ , request:
+ { current: '0.9.5'
+ , wanted: '0.9.5'
+ , latest: '2.27.0'
+ , location: 'node_modules' + path.sep + 'request'
+ }
+ }
+
+test("it should log json data", function (t) {
+ cleanup()
+ process.chdir(pkg)
+
+ mr(common.port, function (s) {
+ npm.load({
+ cache: pkg + "/cache",
+ loglevel: 'silent',
+ registry: common.registry }
+ , function () {
+ npm.install(".", function (err) {
+ var child = spawn(node, args)
+ , out = ''
+ child.stdout
+ .on('data', function (buf) {
+ out += buf.toString()
+ })
+ .pipe(process.stdout)
+ child.on('exit', function () {
+ out = JSON.parse(out)
+ t.deepEqual(out, expected)
+ s.close()
+ t.end()
+ })
+ })
+ })
+ })
+})
+
+test("cleanup", function (t) {
+ cleanup()
+ t.end()
+})
+
+function cleanup () {
+ // windows fix for locked files
+ process.chdir(osenv.tmpdir())
+ rimraf.sync(pkg + "/node_modules")
+ rimraf.sync(pkg + "/cache")
+}
diff --git a/deps/npm/test/tap/outdated-new-versions.js b/deps/npm/test/tap/outdated-new-versions.js
new file mode 100644
index 000000000..177973617
--- /dev/null
+++ b/deps/npm/test/tap/outdated-new-versions.js
@@ -0,0 +1,36 @@
+var common = require("../common-tap.js")
+var test = require("tap").test
+var npm = require("../../")
+var mkdirp = require("mkdirp")
+var rimraf = require("rimraf")
+
+var mr = require("npm-registry-mock")
+
+var pkg = __dirname + "/outdated-new-versions"
+mkdirp.sync(pkg + "/cache")
+
+
+test("dicovers new versions in outdated", function (t) {
+ process.chdir(pkg)
+ t.plan(2)
+
+ mr(common.port, function (s) {
+ npm.load({cache: pkg + "/cache", registry: common.registry}, function () {
+ npm.outdated(function (er, d) {
+ for (var i = 0; i < d.length; i++) {
+ if (d[i][1] === "underscore")
+ t.equal("1.5.1", d[i][4])
+ if (d[i][1] === "request")
+ t.equal("2.27.0", d[i][4])
+ }
+ s.close()
+ t.end()
+ })
+ })
+ })
+})
+
+test("cleanup", function (t) {
+ rimraf.sync(pkg + "/cache")
+ t.end()
+})
diff --git a/deps/npm/test/tap/outdated-new-versions/package.json b/deps/npm/test/tap/outdated-new-versions/package.json
new file mode 100644
index 000000000..2bfcdc5ab
--- /dev/null
+++ b/deps/npm/test/tap/outdated-new-versions/package.json
@@ -0,0 +1,11 @@
+{
+ "name": "new-versions-with-outdated",
+ "author": "Rockbert",
+ "version": "0.0.0",
+ "dependencies": {
+ "underscore": "~1.3.1"
+ },
+ "devDependencies": {
+ "request": "~0.9.0"
+ }
+}
diff --git a/deps/npm/test/tap/outdated-notarget.js b/deps/npm/test/tap/outdated-notarget.js
new file mode 100644
index 000000000..79fb88c67
--- /dev/null
+++ b/deps/npm/test/tap/outdated-notarget.js
@@ -0,0 +1,47 @@
+// Fixes Issue #1770
+var common = require('../common-tap.js')
+var test = require('tap').test
+var npm = require('../../')
+var osenv = require('osenv')
+var path = require('path')
+var fs = require('fs')
+var rimraf = require('rimraf')
+var mkdirp = require('mkdirp')
+var pkg = path.resolve(__dirname, 'outdated-notarget')
+var cache = path.resolve(pkg, 'cache')
+var mr = require('npm-registry-mock')
+
+test('outdated-target: if no viable version is found, show error', function(t) {
+ t.plan(1)
+ setup()
+ mr({port: common.port}, function(s) {
+ npm.load({ cache: cache, registry: common.registry}, function() {
+ npm.commands.update(function(er, d) {
+ t.equal(er.code, 'ETARGET')
+ s.close()
+ t.end()
+ })
+ })
+ })
+})
+
+test('cleanup', function(t) {
+ process.chdir(osenv.tmpdir())
+ rimraf.sync(pkg)
+ t.end()
+})
+
+function setup() {
+ mkdirp.sync(pkg)
+ mkdirp.sync(cache)
+ fs.writeFileSync(path.resolve(pkg, 'package.json'), JSON.stringify({
+ author: 'Evan Lucas',
+ name: 'outdated-notarget',
+ version: '0.0.0',
+ description: 'Test for outdated-target',
+ dependencies: {
+ underscore: '~199.7.1'
+ }
+ }), 'utf8')
+ process.chdir(pkg)
+}
diff --git a/deps/npm/test/tap/outdated.js b/deps/npm/test/tap/outdated.js
new file mode 100644
index 000000000..dddec77ea
--- /dev/null
+++ b/deps/npm/test/tap/outdated.js
@@ -0,0 +1,62 @@
+var common = require("../common-tap.js")
+var fs = require("fs")
+var test = require("tap").test
+var rimraf = require("rimraf")
+var npm = require("../../")
+
+var mr = require("npm-registry-mock")
+// config
+var pkg = __dirname + '/outdated'
+
+var path = require("path")
+
+test("it should not throw", function (t) {
+ cleanup()
+ process.chdir(pkg)
+
+ var originalLog = console.log
+ var output = []
+ var expOut = [ path.resolve(__dirname, "outdated/node_modules/underscore")
+ , path.resolve(__dirname, "outdated/node_modules/underscore")
+ + ":underscore@1.3.1"
+ + ":underscore@1.3.1"
+ + ":underscore@1.5.1" ]
+ var expData = [ [ path.resolve(__dirname, "outdated")
+ , "underscore"
+ , "1.3.1"
+ , "1.3.1"
+ , "1.5.1"
+ , "1.3.1" ] ]
+
+ console.log = function () {
+ output.push.apply(output, arguments)
+ }
+ mr(common.port, function (s) {
+ npm.load({
+ cache: pkg + "/cache",
+ loglevel: 'silent',
+ parseable: true,
+ registry: common.registry }
+ , function () {
+ npm.install(".", function (err) {
+ npm.outdated(function (er, d) {
+ console.log = originalLog
+ t.same(output, expOut)
+ t.same(d, expData)
+ s.close()
+ t.end()
+ })
+ })
+ })
+ })
+})
+
+test("cleanup", function (t) {
+ cleanup()
+ t.end()
+})
+
+function cleanup () {
+ rimraf.sync(pkg + "/node_modules")
+ rimraf.sync(pkg + "/cache")
+}
diff --git a/deps/npm/test/tap/outdated/README.md b/deps/npm/test/tap/outdated/README.md
new file mode 100644
index 000000000..aca67ff17
--- /dev/null
+++ b/deps/npm/test/tap/outdated/README.md
@@ -0,0 +1 @@
+# just a test
diff --git a/deps/npm/test/tap/outdated/index.js b/deps/npm/test/tap/outdated/index.js
new file mode 100644
index 000000000..33c1891f8
--- /dev/null
+++ b/deps/npm/test/tap/outdated/index.js
@@ -0,0 +1 @@
+module.exports = true
diff --git a/deps/npm/test/tap/outdated/package.json b/deps/npm/test/tap/outdated/package.json
new file mode 100644
index 000000000..821a94b88
--- /dev/null
+++ b/deps/npm/test/tap/outdated/package.json
@@ -0,0 +1,10 @@
+{
+ "name": "bla",
+ "description": "fixture",
+ "version": "0.0.1",
+ "main": "index.js",
+ "dependencies": {
+ "underscore": "1.3.1"
+ },
+ "repository": "git://github.com/robertkowalski/bogusfixture"
+}
diff --git a/deps/npm/test/tap/peer-deps-invalid.js b/deps/npm/test/tap/peer-deps-invalid.js
index 3b823db01..c28736550 100644
--- a/deps/npm/test/tap/peer-deps-invalid.js
+++ b/deps/npm/test/tap/peer-deps-invalid.js
@@ -1,76 +1,46 @@
+var common = require('../common-tap.js')
var fs = require("fs")
+var path = require("path")
var test = require("tap").test
var rimraf = require("rimraf")
var npm = require("../../")
-var http = require("http")
+var mr = require("npm-registry-mock")
+var pkg = __dirname + "/peer-deps-invalid"
-var okFile = new Buffer(
-'/**package\n' +
-' * { "name": "npm-test-peer-deps-file"\n' +
-' * , "main": "index.js"\n' +
-' * , "version": "1.2.3"\n' +
-' * , "description":"No package.json in sight!"\n' +
-' * , "peerDependencies": { "dict": "1.1.0" }\n' +
-' * , "dependencies": { "opener": "1.3.0" }\n' +
-' * }\n' +
-' **/\n' +
-'\n' +
-'module.exports = "I\'m just a lonely index, naked as the day I was born."\n'
-)
+var okFile = fs.readFileSync(path.join(pkg, "file-ok.js"), "utf8")
+var failFile = fs.readFileSync(path.join(pkg, "file-fail.js"), "utf8")
-var failFile = new Buffer(
-'/**package\n' +
-' * { "name": "npm-test-peer-deps-file-invalid"\n' +
-' * , "main": "index.js"\n' +
-' * , "version": "1.2.3"\n' +
-' * , "description":"This one should conflict with the other one"\n' +
-' * , "peerDependencies": { "dict": "1.0.0" }\n' +
-' * }\n' +
-' **/\n' +
-'\n' +
-'module.exports = "I\'m just a lonely index, naked as the day I was born."\n'
-)
+test("installing dependencies that have conflicting peerDependencies", function (t) {
+ rimraf.sync(pkg + "/node_modules")
+ rimraf.sync(pkg + "/cache")
+ process.chdir(pkg)
-var server
-test("setup", function(t) {
- server = http.createServer(function (req, res) {
- res.setHeader('content-type', 'application/javascript')
- switch (req.url) {
- case "/ok.js":
- return res.end(okFile)
- default:
- return res.end(failFile)
+ var customMocks = {
+ "get": {
+ "/ok.js": [200, okFile],
+ "/invalid.js": [200, failFile]
}
- })
- server.listen(1337, function() {
- t.pass("listening")
- t.end()
- })
-})
-
-
-
-test("installing dependencies that having conflicting peerDependencies", function (t) {
- rimraf.sync(__dirname + "/peer-deps-invalid/node_modules")
- process.chdir(__dirname + "/peer-deps-invalid")
-
- npm.load(function () {
- console.error('back from load')
- npm.commands.install([], function (err) {
- console.error('back from install')
- if (!err) {
- t.fail("No error!")
- } else {
- t.equal(err.code, "EPEERINVALID")
- }
- t.end()
+ }
+ mr({port: common.port, mocks: customMocks}, function (s) { // create mock registry.
+ npm.load({
+ cache: pkg + "/cache",
+ registry: common.registry
+ }, function () {
+ npm.commands.install([], function (err) {
+ if (!err) {
+ t.fail("No error!")
+ } else {
+ t.equal(err.code, "EPEERINVALID")
+ }
+ t.end()
+ s.close() // shutdown mock registry.
+ })
})
})
})
-test("shutdown", function(t) {
- server.close(function() {
- t.pass("closed")
- t.end()
- })
+test("cleanup", function (t) {
+ rimraf.sync(pkg + "/node_modules")
+ rimraf.sync(pkg + "/cache")
+ t.end()
})
diff --git a/deps/npm/test/tap/peer-deps-invalid/file-fail.js b/deps/npm/test/tap/peer-deps-invalid/file-fail.js
new file mode 100644
index 000000000..5a78d0f84
--- /dev/null
+++ b/deps/npm/test/tap/peer-deps-invalid/file-fail.js
@@ -0,0 +1,10 @@
+/**package
+* { "name": "npm-test-peer-deps-file-invalid"
+* , "main": "index.js"
+* , "version": "1.2.3"
+* , "description":"This one should conflict with the other one"
+* , "peerDependencies": { "underscore": "1.3.3" }
+* }
+**/
+
+module.exports = "I\'m just a lonely index, naked as the day I was born."
diff --git a/deps/npm/test/tap/peer-deps-invalid/file-ok.js b/deps/npm/test/tap/peer-deps-invalid/file-ok.js
new file mode 100644
index 000000000..957e20e41
--- /dev/null
+++ b/deps/npm/test/tap/peer-deps-invalid/file-ok.js
@@ -0,0 +1,11 @@
+/**package
+* { "name": "npm-test-peer-deps-file"
+* , "main": "index.js"
+* , "version": "1.2.3"
+* , "description":"No package.json in sight!"
+* , "peerDependencies": { "underscore": "1.3.1" }
+* , "dependencies": { "mkdirp": "0.3.5" }
+* }
+**/
+
+module.exports = "I\'m just a lonely index, naked as the day I was born."
diff --git a/deps/npm/test/tap/peer-deps-without-package-json.js b/deps/npm/test/tap/peer-deps-without-package-json.js
index 8c5b5483a..ce01be4d0 100644
--- a/deps/npm/test/tap/peer-deps-without-package-json.js
+++ b/deps/npm/test/tap/peer-deps-without-package-json.js
@@ -1,58 +1,47 @@
+var common = require('../common-tap.js')
var fs = require("fs")
+var path = require("path")
var test = require("tap").test
var rimraf = require("rimraf")
var npm = require("../../")
+var mr = require("npm-registry-mock")
+var pkg = __dirname + "/peer-deps-without-package-json"
-var http = require("http")
-
-
-var js = new Buffer(
-'/**package\n' +
-' * { "name": "npm-test-peer-deps-file"\n' +
-' * , "main": "index.js"\n' +
-' * , "version": "1.2.3"\n' +
-' * , "description":"No package.json in sight!"\n' +
-' * , "peerDependencies": { "dict": "1.1.0" }\n' +
-' * , "dependencies": { "opener": "1.3.0" }\n' +
-' * }\n' +
-' **/\n' +
-'\n' +
-'module.exports = "I\'m just a lonely index, naked as the day I was born."\n')
-
-var server
-test("setup", function(t) {
- server = http.createServer(function (q, s) {
- s.setHeader('content-type', 'application/javascript')
- s.end(js)
- })
- server.listen(1337, function() {
- t.pass('listening')
- t.end()
- })
-})
-
+var js = fs.readFileSync(path.join(pkg, "file-js.js"), "utf8")
test("installing a peerDependencies-using package without a package.json present (GH-3049)", function (t) {
- rimraf.sync(__dirname + "/peer-deps-without-package-json/node_modules")
- fs.mkdirSync(__dirname + "/peer-deps-without-package-json/node_modules")
- process.chdir(__dirname + "/peer-deps-without-package-json")
-
- npm.load(function () {
- npm.install('http://localhost:1337/', function (err) {
- if (err) {
- t.fail(err)
- } else {
- t.ok(fs.existsSync(__dirname + "/peer-deps-without-package-json/node_modules/npm-test-peer-deps-file"))
- t.ok(fs.existsSync(__dirname + "/peer-deps-without-package-json/node_modules/dict"))
- }
- t.end()
+ rimraf.sync(pkg + "/node_modules")
+ rimraf.sync(pkg + "/cache")
+
+ fs.mkdirSync(pkg + "/node_modules")
+ process.chdir(pkg)
+
+ var customMocks = {
+ "get": {
+ "/ok.js": [200, js],
+ }
+ }
+ mr({port: common.port, mocks: customMocks}, function (s) { // create mock registry.
+ npm.load({
+ registry: common.registry,
+ cache: pkg + "/cache"
+ }, function () {
+ npm.install(common.registry + "/ok.js", function (err) {
+ if (err) {
+ t.fail(err)
+ } else {
+ t.ok(fs.existsSync(pkg + "/node_modules/npm-test-peer-deps-file"))
+ t.ok(fs.existsSync(pkg + "/node_modules/underscore"))
+ }
+ t.end()
+ s.close() // shutdown mock registry.
+ })
})
})
})
test("cleanup", function (t) {
- server.close(function() {
- t.pass("closed")
- t.end()
- })
+ rimraf.sync(pkg + "/node_modules")
+ rimraf.sync(pkg + "/cache")
+ t.end()
})
diff --git a/deps/npm/test/tap/peer-deps-without-package-json/file-js.js b/deps/npm/test/tap/peer-deps-without-package-json/file-js.js
new file mode 100644
index 000000000..957e20e41
--- /dev/null
+++ b/deps/npm/test/tap/peer-deps-without-package-json/file-js.js
@@ -0,0 +1,11 @@
+/**package
+* { "name": "npm-test-peer-deps-file"
+* , "main": "index.js"
+* , "version": "1.2.3"
+* , "description":"No package.json in sight!"
+* , "peerDependencies": { "underscore": "1.3.1" }
+* , "dependencies": { "mkdirp": "0.3.5" }
+* }
+**/
+
+module.exports = "I\'m just a lonely index, naked as the day I was born."
diff --git a/deps/npm/test/tap/peer-deps.js b/deps/npm/test/tap/peer-deps.js
new file mode 100644
index 000000000..097a92179
--- /dev/null
+++ b/deps/npm/test/tap/peer-deps.js
@@ -0,0 +1,57 @@
+var npm = npm = require("../../")
+var test = require("tap").test
+var path = require("path")
+var fs = require("fs")
+var osenv = require("osenv")
+var rimraf = require("rimraf")
+var mr = require("npm-registry-mock")
+var common = require("../common-tap.js")
+
+var pkg = path.resolve(__dirname, "peer-deps")
+var desiredResultsPath = path.resolve(pkg, "desired-ls-results.json")
+
+test("installs the peer dependency directory structure", function (t) {
+ t.plan(1)
+
+ mr(common.port, function (s) {
+ setup(function (err) {
+ if (err) return t.fail(err)
+
+ npm.install(".", function (err) {
+ if (err) return t.fail(err)
+
+ npm.commands.ls([], true, function (err, _, results) {
+ if (err) return t.fail(err)
+
+ fs.readFile(desiredResultsPath, function (err, desired) {
+ if (err) return t.fail(err)
+
+ t.deepEqual(results, JSON.parse(desired))
+ s.close()
+ t.end()
+ })
+ })
+ })
+ })
+ })
+})
+
+test("cleanup", function (t) {
+ cleanup()
+ t.end()
+})
+
+
+function setup (cb) {
+ cleanup()
+ process.chdir(pkg)
+
+ var opts = { cache: path.resolve(pkg, "cache"), registry: common.registry};
+ npm.load(opts, cb)
+}
+
+function cleanup () {
+ process.chdir(osenv.tmpdir())
+ rimraf.sync(path.resolve(pkg, "node_modules"))
+ rimraf.sync(path.resolve(pkg, "cache"))
+}
diff --git a/deps/npm/test/tap/peer-deps/desired-ls-results.json b/deps/npm/test/tap/peer-deps/desired-ls-results.json
new file mode 100644
index 000000000..9c1033af0
--- /dev/null
+++ b/deps/npm/test/tap/peer-deps/desired-ls-results.json
@@ -0,0 +1,17 @@
+{
+ "name": "npm-test-peer-deps-installer",
+ "version": "0.0.0",
+ "dependencies": {
+ "npm-test-peer-deps": {
+ "version": "0.0.0",
+ "dependencies": {
+ "underscore": {
+ "version": "1.3.1"
+ }
+ }
+ },
+ "request": {
+ "version": "0.9.5"
+ }
+ }
+}
diff --git a/deps/npm/test/tap/peer-deps/package.json b/deps/npm/test/tap/peer-deps/package.json
new file mode 100644
index 000000000..e78a1a7e1
--- /dev/null
+++ b/deps/npm/test/tap/peer-deps/package.json
@@ -0,0 +1,8 @@
+{
+ "author": "Domenic Denicola",
+ "name": "npm-test-peer-deps-installer",
+ "version": "0.0.0",
+ "dependencies": {
+ "npm-test-peer-deps": "*"
+ }
+}
diff --git a/deps/npm/test/tap/prepublish.js b/deps/npm/test/tap/prepublish.js
new file mode 100644
index 000000000..f80085d92
--- /dev/null
+++ b/deps/npm/test/tap/prepublish.js
@@ -0,0 +1,97 @@
+// verify that prepublish runs on pack and publish
+var test = require('tap').test
+var npm = require('../../')
+var fs = require('fs')
+var pkg = __dirname + '/prepublish_package'
+var tmp = pkg + '/tmp'
+var cache = pkg + '/cache'
+var mkdirp = require('mkdirp')
+var rimraf = require('rimraf')
+var path = require('path')
+var os = require('os')
+
+test('setup', function (t) {
+ var n = 0
+ mkdirp(pkg, then())
+ mkdirp(cache, then())
+ mkdirp(tmp, then())
+ function then (er) {
+ n ++
+ return function (er) {
+ if (er)
+ throw er
+ if (--n === 0)
+ next()
+ }
+ }
+
+ function next () {
+ fs.writeFile(pkg + '/package.json', JSON.stringify({
+ name: 'npm-test-prepublish',
+ version: '1.2.5',
+ scripts: { prepublish: 'echo ok' }
+ }), 'ascii', function (er) {
+ if (er)
+ throw er
+ t.pass('setup done')
+ t.end()
+ })
+ }
+})
+
+test('test', function (t) {
+ var spawn = require('child_process').spawn
+ var node = process.execPath
+ var npm = path.resolve(__dirname, '../../cli.js')
+ var env = {
+ npm_config_cache: cache,
+ npm_config_tmp: tmp,
+ npm_config_prefix: pkg,
+ npm_config_global: 'false'
+ }
+ for (var i in process.env) {
+ if (!/^npm_config_/.test(i))
+ env[i] = process.env[i]
+ }
+ var child = spawn(node, [npm, 'pack'], {
+ cwd: pkg,
+ env: env
+ })
+ child.stdout.setEncoding('utf8')
+ child.stderr.on('data', onerr)
+ child.stdout.on('data', ondata)
+ child.on('close', onend)
+ var c = ''
+ , e = ''
+ function ondata (chunk) {
+ c += chunk
+ }
+ function onerr (chunk) {
+ e += chunk
+ }
+ function onend () {
+ if (e) {
+ throw new Error('got stderr data: ' + JSON.stringify('' + e))
+ }
+ c = c.trim()
+ var regex = new RegExp("" +
+ "> npm-test-prepublish@1.2.5 prepublish [^\\r\\n]+\\r?\\n" +
+ "> echo ok\\r?\\n" +
+ "\\r?\\n" +
+ "ok\\r?\\n" +
+ "npm-test-prepublish-1.2.5.tgz", "ig")
+
+ t.ok(c.match(regex))
+ t.end()
+ }
+})
+
+test('cleanup', function (t) {
+ rimraf(pkg, function(er) {
+ if (er)
+ throw er
+ t.pass('cleaned up')
+ t.end()
+ })
+})
+
diff --git a/deps/npm/test/tap/prune.js b/deps/npm/test/tap/prune.js
new file mode 100644
index 000000000..a303d840c
--- /dev/null
+++ b/deps/npm/test/tap/prune.js
@@ -0,0 +1,115 @@
+var test = require("tap").test
+var fs = require("fs")
+var node = process.execPath
+var npm = require.resolve("../../bin/npm-cli.js")
+var rimraf = require("rimraf")
+var mr = require("npm-registry-mock")
+var common = require("../common-tap.js")
+var spawn = require("child_process").spawn
+var env = process.env
+process.env.npm_config_depth = "Infinity"
+
+var pkg = __dirname + "/prune"
+var cache = pkg + "/cache"
+
+var server
+
+test("reg mock", function (t) {
+ mr(common.port, function (s) {
+ server = s
+ t.pass("registry mock started")
+ t.end()
+ })
+})
+
+
+test("npm install", function (t) {
+ rimraf.sync(pkg + "/node_modules")
+ var c = spawn(node, [
+ npm, "install",
+ "--cache=" + cache,
+ "--registry=" + common.registry,
+ "--loglevel=silent",
+ "--production=false"
+ ], { cwd: pkg, env: env })
+ c.stderr.on("data", function(d) {
+ t.fail("Should not get data on stderr: " + d)
+ })
+ c.on("close", function(code) {
+ t.notOk(code, "exit ok")
+ t.end()
+ })
+})
+
+test("npm install test-package", function (t) {
+ var c = spawn(node, [
+ npm, "install", "test-package",
+ "--cache=" + cache,
+ "--registry=" + common.registry,
+ "--loglevel=silent",
+ "--production=false"
+ ], { cwd: pkg, env: env })
+ c.stderr.on("data", function(d) {
+ t.fail("Should not get data on stderr: " + d)
+ })
+ c.on("close", function(code) {
+ t.notOk(code, "exit ok")
+ t.end()
+ })
+})
+
+test("verify installs", function (t) {
+ var dirs = fs.readdirSync(pkg + "/node_modules").sort()
+ t.same(dirs, [ "test-package", "mkdirp", "underscore" ].sort())
+ t.end()
+})
+
+test("npm prune", function (t) {
+ var c = spawn(node, [
+ npm, "prune",
+ "--loglevel=silent",
+ "--production=false"
+ ], { cwd: pkg, env: env })
+ c.stderr.on("data", function(d) {
+ t.fail("Should not get data on stderr: " + d)
+ })
+ c.on("close", function(code) {
+ t.notOk(code, "exit ok")
+ t.end()
+ })
+})
+
+test("verify installs", function (t) {
+ var dirs = fs.readdirSync(pkg + "/node_modules").sort()
+ t.same(dirs, [ "mkdirp", "underscore" ])
+ t.end()
+})
+
+test("npm prune", function (t) {
+ var c = spawn(node, [
+ npm, "prune",
+ "--loglevel=silent",
+ "--production"
+ ], { cwd: pkg, env: env })
+ c.stderr.on("data", function(d) {
+ t.fail("Should not get data on stderr: " + d)
+ })
+ c.on("close", function(code) {
+ t.notOk(code, "exit ok")
+ t.end()
+ })
+})
+
+test("verify installs", function (t) {
+ var dirs = fs.readdirSync(pkg + "/node_modules").sort()
+ t.same(dirs, [ "underscore" ])
+ t.end()
+})
+
+test("cleanup", function (t) {
+ server.close()
+ rimraf.sync(pkg + "/node_modules")
+ rimraf.sync(pkg + "/cache")
+ t.pass("cleaned up")
+ t.end()
+})
diff --git a/deps/npm/test/tap/prune/package.json b/deps/npm/test/tap/prune/package.json
new file mode 100644
index 000000000..641ab6580
--- /dev/null
+++ b/deps/npm/test/tap/prune/package.json
@@ -0,0 +1,13 @@
+{
+ "name": "bla",
+ "description": "fixture",
+ "version": "0.0.1",
+ "main": "index.js",
+ "dependencies": {
+ "underscore": "1.3.1"
+ },
+ "devDependencies": {
+ "mkdirp": "*"
+ },
+ "repository": "git://github.com/robertkowalski/bogusfixture"
+}
diff --git a/deps/npm/test/tap/publish-config.js b/deps/npm/test/tap/publish-config.js
index c9d52c8fc..3c4624eea 100644
--- a/deps/npm/test/tap/publish-config.js
+++ b/deps/npm/test/tap/publish-config.js
@@ -1,5 +1,7 @@
+var common = require('../common-tap.js')
var test = require('tap').test
var fs = require('fs')
+var osenv = require('osenv')
var pkg = process.env.npm_config_tmp || '/tmp'
pkg += '/npm-test-publish-config'
@@ -8,7 +10,7 @@ require('mkdirp').sync(pkg)
fs.writeFileSync(pkg + '/package.json', JSON.stringify({
name: 'npm-test-publish-config',
version: '1.2.3',
- publishConfig: { registry: 'http://localhost:13370' }
+ publishConfig: { registry: common.registry }
}), 'utf8')
var spawn = require('child_process').spawn
@@ -24,7 +26,7 @@ test(function (t) {
res.statusCode = 500
res.end('{"error":"sshhh. naptime nao. \\^O^/ <(YAWWWWN!)"}')
child.kill()
- }).listen(13370, function () {
+ }).listen(common.port, function () {
t.pass('server is listening')
// don't much care about listening to the child's results
@@ -34,14 +36,15 @@ test(function (t) {
// itself functions normally.
//
// Make sure that we don't sit around waiting for lock files
- child = spawn(node, [npm, 'publish'], {
+ child = spawn(node, [npm, 'publish', '--email=fancy', '--_auth=feast'], {
cwd: pkg,
env: {
npm_config_cache_lock_stale: 1000,
npm_config_cache_lock_wait: 1000,
HOME: process.env.HOME,
Path: process.env.PATH,
- PATH: process.env.PATH
+ PATH: process.env.PATH,
+ USERPROFILE: osenv.home()
}
})
})
diff --git a/deps/npm/test/tap/referer.js b/deps/npm/test/tap/referer.js
new file mode 100644
index 000000000..1b55ab026
--- /dev/null
+++ b/deps/npm/test/tap/referer.js
@@ -0,0 +1,24 @@
+var common = require("../common-tap.js")
+var test = require("tap").test
+var http = require("http")
+var server
+
+test("should send referer http header", function (t) {
+ var server = http.createServer(function (q, s) {
+ t.equal(q.headers.referer, "install foo")
+ s.statusCode = 404
+ s.end(JSON.stringify({error: "whatever"}))
+ this.close()
+ }).listen(common.port, function () {
+ var reg = "--registry=http://localhost:" + common.port
+ var args = [ "install", "foo", reg ]
+ common.npm(args, {}, function (er, code, so, se) {
+ if (er) {
+ throw er
+ }
+ // should not have ended nicely, since we returned an error
+ t.ok(code)
+ t.end()
+ })
+ })
+})
diff --git a/deps/npm/test/tap/repo.js b/deps/npm/test/tap/repo.js
new file mode 100644
index 000000000..44671e7d5
--- /dev/null
+++ b/deps/npm/test/tap/repo.js
@@ -0,0 +1,52 @@
+if (process.platform === "win32") {
+ console.error("skipping test, because windows and shebangs")
+ return
+}
+
+var common = require("../common-tap.js")
+var mr = require("npm-registry-mock")
+
+var test = require("tap").test
+var npm = require.resolve("../../bin/npm-cli.js")
+var node = process.execPath
+var rimraf = require("rimraf")
+var spawn = require("child_process").spawn
+var fs = require("fs")
+
+test("setup", function (t) {
+ var s = "#!/usr/bin/env bash\n" +
+ "echo \"$@\" > " + JSON.stringify(__dirname) + "/_output\n"
+ fs.writeFileSync(__dirname + "/_script.sh", s, "ascii")
+ fs.chmodSync(__dirname + "/_script.sh", "0755")
+ t.pass("made script")
+ t.end()
+})
+
+test("npm repo underscore", function (t) {
+ mr(common.port, function (s) {
+ var c = spawn(node, [
+ npm, "repo", "underscore",
+ "--registry=" + common.registry,
+ "--loglevel=silent",
+ "--browser=" + __dirname + "/_script.sh",
+ ])
+ c.stdout.on("data", function(d) {
+ t.fail("Should not get data on stdout: " + d)
+ })
+ c.stderr.pipe(process.stderr)
+ c.on("close", function(code) {
+ t.equal(code, 0, "exit ok")
+ var res = fs.readFileSync(__dirname + "/_output", "ascii")
+ s.close()
+ t.equal(res, "https://github.com/jashkenas/underscore\n")
+ t.end()
+ })
+ })
+})
+
+test("cleanup", function (t) {
+ fs.unlinkSync(__dirname + "/_script.sh")
+ fs.unlinkSync(__dirname + "/_output")
+ t.pass("cleaned up")
+ t.end()
+})
diff --git a/deps/npm/test/tap/scripts-whitespace-windows.js b/deps/npm/test/tap/scripts-whitespace-windows.js
new file mode 100644
index 000000000..97bed98cb
--- /dev/null
+++ b/deps/npm/test/tap/scripts-whitespace-windows.js
@@ -0,0 +1,71 @@
+var test = require('tap').test
+var path = require('path')
+var npm = path.resolve(__dirname, '../../cli.js')
+var pkg = __dirname + '/scripts-whitespace-windows'
+var tmp = pkg + '/tmp'
+var cache = pkg + '/cache'
+var modules = pkg + '/node_modules'
+var dep = pkg + '/dep'
+
+var mkdirp = require('mkdirp')
+var rimraf = require('rimraf')
+var node = process.execPath
+var spawn = require('child_process').spawn
+
+test('setup', function (t) {
+ mkdirp.sync(cache)
+ mkdirp.sync(tmp)
+ rimraf.sync(modules)
+
+ var env = {
+ npm_config_cache: cache,
+ npm_config_tmp: tmp,
+ npm_config_prefix: pkg,
+ npm_config_global: 'false'
+ }
+
+ var child = spawn(node, [npm, 'i', dep], {
+ cwd: pkg,
+ env: env
+ })
+
+ child.stdout.setEncoding('utf8')
+ child.stderr.on('data', function(chunk) {
+ throw new Error('got stderr data: ' + JSON.stringify('' + chunk))
+ })
+ child.on('close', function () {
+ t.end()
+ })
+})
+
+test('test', function (t) {
+
+ var child = spawn(node, [npm, 'run', 'foo'], {
+ cwd: pkg,
+ env: process.env
+ })
+
+ child.stdout.setEncoding('utf8')
+ child.stderr.on('data', function(chunk) {
+ throw new Error('got stderr data: ' + JSON.stringify('' + chunk))
+ })
+ child.stdout.on('data', ondata)
+ child.on('close', onend)
+ var c = ''
+ function ondata (chunk) {
+ c += chunk
+ }
+ function onend () {
+ c = c.trim()
+
+ t.ok(/npm-test-fine/.test(c))
+ t.end()
+ }
+})
+
+test('cleanup', function (t) {
+ rimraf.sync(cache)
+ rimraf.sync(tmp)
+ rimraf.sync(modules)
+ t.end()
+})
diff --git a/deps/npm/test/tap/scripts-whitespace-windows/README.md b/deps/npm/test/tap/scripts-whitespace-windows/README.md
new file mode 100644
index 000000000..76f177f19
--- /dev/null
+++ b/deps/npm/test/tap/scripts-whitespace-windows/README.md
@@ -0,0 +1 @@
+# Hi
diff --git a/deps/npm/test/tap/scripts-whitespace-windows/dep/README.md b/deps/npm/test/tap/scripts-whitespace-windows/dep/README.md
new file mode 100644
index 000000000..0d9d64f27
--- /dev/null
+++ b/deps/npm/test/tap/scripts-whitespace-windows/dep/README.md
@@ -0,0 +1 @@
+# Hi!
diff --git a/deps/npm/test/tap/scripts-whitespace-windows/dep/bin/foo b/deps/npm/test/tap/scripts-whitespace-windows/dep/bin/foo
new file mode 100644
index 000000000..d6708417d
--- /dev/null
+++ b/deps/npm/test/tap/scripts-whitespace-windows/dep/bin/foo
@@ -0,0 +1,4 @@
+#!/usr/bin/env node
+
+if (process.argv.length === 8)
+ console.log('npm-test-fine')
diff --git a/deps/npm/test/tap/scripts-whitespace-windows/dep/package.json b/deps/npm/test/tap/scripts-whitespace-windows/dep/package.json
new file mode 100644
index 000000000..4ff982913
--- /dev/null
+++ b/deps/npm/test/tap/scripts-whitespace-windows/dep/package.json
@@ -0,0 +1,6 @@
+{
+ "name": "scripts-whitespace-windows-dep",
+ "version": "0.0.1",
+ "bin": [ "bin/foo" ],
+ "repository": "git://github.com/robertkowalski/bogusfixture"
+}
diff --git a/deps/npm/test/tap/scripts-whitespace-windows/package.json b/deps/npm/test/tap/scripts-whitespace-windows/package.json
new file mode 100644
index 000000000..06e1a572b
--- /dev/null
+++ b/deps/npm/test/tap/scripts-whitespace-windows/package.json
@@ -0,0 +1,11 @@
+{
+ "name": "scripts-whitespace-windows",
+ "scripts": {
+ "foo": "foo --title \"Analysis of\" --recurse -d report src"
+ },
+ "description": "a test",
+ "repository": "git://github.com/robertkowalski/bogus",
+ "dependencies": {
+ "scripts-whitespace-windows-dep": "0.0.1"
+ }
+}
diff --git a/deps/npm/test/tap/semver-doc.js b/deps/npm/test/tap/semver-doc.js
new file mode 100644
index 000000000..5133f4659
--- /dev/null
+++ b/deps/npm/test/tap/semver-doc.js
@@ -0,0 +1,12 @@
+var test = require("tap").test
+
+test("semver doc is up to date", function(t) {
+ var path = require("path")
+ var moddoc = path.join(__dirname, "../../node_modules/semver/README.md")
+ var mydoc = path.join(__dirname, "../../doc/misc/semver.md")
+ var fs = require("fs")
+ var mod = fs.readFileSync(moddoc, "utf8").replace(/semver\(1\)/, 'semver(7)')
+ var my = fs.readFileSync(mydoc, "utf8")
+ t.equal(my, mod)
+ t.end()
+})
diff --git a/deps/npm/test/tap/shrinkwrap-dev-dependency.js b/deps/npm/test/tap/shrinkwrap-dev-dependency.js
new file mode 100644
index 000000000..fc606cf40
--- /dev/null
+++ b/deps/npm/test/tap/shrinkwrap-dev-dependency.js
@@ -0,0 +1,66 @@
+var npm = npm = require("../../")
+var test = require("tap").test
+var path = require("path")
+var fs = require("fs")
+var osenv = require("osenv")
+var rimraf = require("rimraf")
+var mr = require("npm-registry-mock")
+var common = require("../common-tap.js")
+
+var pkg = path.resolve(__dirname, "shrinkwrap-dev-dependency")
+var desiredResultsPath = path.resolve(pkg, "desired-shrinkwrap-results.json")
+
+test("shrinkwrap doesn't strip out the dependency", function (t) {
+ t.plan(1)
+
+ mr(common.port, function (s) {
+ setup({ production: true }, function (err) {
+ if (err) return t.fail(err)
+
+ npm.install(".", function (err) {
+ if (err) return t.fail(err)
+
+ npm.commands.shrinkwrap([], true, function (err, results) {
+ if (err) return t.fail(err)
+
+ fs.readFile(desiredResultsPath, function (err, desired) {
+ if (err) return t.fail(err)
+
+ t.deepEqual(results, JSON.parse(desired))
+ s.close()
+ t.end()
+ })
+ })
+ })
+ })
+ })
+})
+
+test("cleanup", function (t) {
+ cleanup()
+ t.end()
+})
+
+
+function setup (opts, cb) {
+ cleanup()
+ process.chdir(pkg)
+
+ var allOpts = {
+ cache: path.resolve(pkg, "cache"),
+ registry: common.registry
+ }
+
+ for (var key in opts) {
+ allOpts[key] = opts[key]
+ }
+
+ npm.load(allOpts, cb)
+}
+
+function cleanup () {
+ process.chdir(osenv.tmpdir())
+ rimraf.sync(path.resolve(pkg, "node_modules"))
+ rimraf.sync(path.resolve(pkg, "cache"))
+ rimraf.sync(path.resolve(pkg, "npm-shrinkwrap.json"))
+}
diff --git a/deps/npm/test/tap/shrinkwrap-dev-dependency/desired-shrinkwrap-results.json b/deps/npm/test/tap/shrinkwrap-dev-dependency/desired-shrinkwrap-results.json
new file mode 100644
index 000000000..7f87e833e
--- /dev/null
+++ b/deps/npm/test/tap/shrinkwrap-dev-dependency/desired-shrinkwrap-results.json
@@ -0,0 +1,12 @@
+{
+ "name": "npm-test-shrinkwrap-dev-dependency",
+ "version": "0.0.0",
+ "dependencies": {
+ "request": {
+ "version": "0.9.0"
+ },
+ "underscore": {
+ "version": "1.3.1"
+ }
+ }
+}
diff --git a/deps/npm/test/tap/shrinkwrap-dev-dependency/package.json b/deps/npm/test/tap/shrinkwrap-dev-dependency/package.json
new file mode 100644
index 000000000..e325a4731
--- /dev/null
+++ b/deps/npm/test/tap/shrinkwrap-dev-dependency/package.json
@@ -0,0 +1,12 @@
+{
+ "author": "Domenic Denicola",
+ "name": "npm-test-shrinkwrap-dev-dependency",
+ "version": "0.0.0",
+ "dependencies": {
+ "request": "0.9.0",
+ "underscore": "1.3.1"
+ },
+ "devDependencies": {
+ "underscore": "1.5.1"
+ }
+}
diff --git a/deps/npm/test/tap/shrinkwrap-empty-deps.js b/deps/npm/test/tap/shrinkwrap-empty-deps.js
new file mode 100644
index 000000000..9ec8e71e0
--- /dev/null
+++ b/deps/npm/test/tap/shrinkwrap-empty-deps.js
@@ -0,0 +1,47 @@
+var test = require("tap").test
+ , npm = require("../../")
+ , mr = require("npm-registry-mock")
+ , common = require("../common-tap.js")
+ , path = require("path")
+ , fs = require("fs")
+ , osenv = require("osenv")
+ , rimraf = require("rimraf")
+ , pkg = __dirname + "/shrinkwrap-empty-deps"
+
+test("returns a list of removed items", function (t) {
+ var desiredResultsPath = path.resolve(pkg, "npm-shrinkwrap.json")
+
+ cleanup()
+
+ mr(common.port, function (s) {
+ setup(function () {
+ npm.shrinkwrap([], function (err) {
+ if (err) return t.fail(err)
+ fs.readFile(desiredResultsPath, function (err, desired) {
+ if (err) return t.fail(err)
+ t.deepEqual({
+ "name": "npm-test-shrinkwrap-empty-deps",
+ "version": "0.0.0",
+ "dependencies": {}
+ }, JSON.parse(desired))
+ cleanup()
+ s.close()
+ t.end()
+ })
+ })
+ })
+ })
+})
+
+function setup (cb) {
+ cleanup()
+ process.chdir(pkg)
+ npm.load({cache: pkg + "/cache", registry: common.registry}, function () {
+ cb()
+ })
+}
+
+function cleanup () {
+ process.chdir(osenv.tmpdir())
+ rimraf.sync(path.resolve(pkg, "npm-shrinkwrap.json"))
+}
diff --git a/deps/npm/test/tap/shrinkwrap-empty-deps/package.json b/deps/npm/test/tap/shrinkwrap-empty-deps/package.json
new file mode 100644
index 000000000..9a51088c7
--- /dev/null
+++ b/deps/npm/test/tap/shrinkwrap-empty-deps/package.json
@@ -0,0 +1,7 @@
+{
+ "author": "Rockbert",
+ "name": "npm-test-shrinkwrap-empty-deps",
+ "version": "0.0.0",
+ "dependencies": {},
+ "devDependencies": {}
+}
diff --git a/deps/npm/test/tap/shrinkwrap-shared-dev-dependency.js b/deps/npm/test/tap/shrinkwrap-shared-dev-dependency.js
new file mode 100644
index 000000000..75f1765fc
--- /dev/null
+++ b/deps/npm/test/tap/shrinkwrap-shared-dev-dependency.js
@@ -0,0 +1,58 @@
+var npm = npm = require("../../")
+var test = require("tap").test
+var path = require("path")
+var fs = require("fs")
+var osenv = require("osenv")
+var rimraf = require("rimraf")
+var mr = require("npm-registry-mock")
+var common = require("../common-tap.js")
+
+var pkg = path.resolve(__dirname, "shrinkwrap-shared-dev-dependency")
+var desiredResultsPath = path.resolve(pkg, "desired-shrinkwrap-results.json")
+
+test("shrinkwrap doesn't strip out the shared dependency", function (t) {
+ t.plan(1)
+
+ mr(common.port, function (s) {
+ setup(function (err) {
+ if (err) return t.fail(err)
+
+ npm.install(".", function (err) {
+ if (err) return t.fail(err)
+
+ npm.commands.shrinkwrap([], true, function (err, results) {
+ if (err) return t.fail(err)
+
+ fs.readFile(desiredResultsPath, function (err, desired) {
+ if (err) return t.fail(err)
+
+ t.deepEqual(results, JSON.parse(desired))
+ s.close()
+ t.end()
+ })
+ })
+ })
+ })
+ })
+})
+
+test("cleanup", function (t) {
+ cleanup()
+ t.end()
+})
+
+
+function setup (cb) {
+ cleanup()
+ process.chdir(pkg)
+
+ var opts = { cache: path.resolve(pkg, "cache"), registry: common.registry }
+ npm.load(opts, cb)
+}
+
+function cleanup () {
+ process.chdir(osenv.tmpdir())
+ rimraf.sync(path.resolve(pkg, "node_modules"))
+ rimraf.sync(path.resolve(pkg, "cache"))
+ rimraf.sync(path.resolve(pkg, "npm-shrinkwrap.json"))
+}
diff --git a/deps/npm/test/tap/shrinkwrap-shared-dev-dependency/desired-shrinkwrap-results.json b/deps/npm/test/tap/shrinkwrap-shared-dev-dependency/desired-shrinkwrap-results.json
new file mode 100644
index 000000000..230b68761
--- /dev/null
+++ b/deps/npm/test/tap/shrinkwrap-shared-dev-dependency/desired-shrinkwrap-results.json
@@ -0,0 +1,12 @@
+{
+ "name": "npm-test-shrinkwrap-shared-dev-dependency",
+ "version": "0.0.0",
+ "dependencies": {
+ "test-package-with-one-dep": {
+ "version": "0.0.0"
+ },
+ "test-package": {
+ "version": "0.0.0"
+ }
+ }
+}
diff --git a/deps/npm/test/tap/shrinkwrap-shared-dev-dependency/package.json b/deps/npm/test/tap/shrinkwrap-shared-dev-dependency/package.json
new file mode 100644
index 000000000..41260accf
--- /dev/null
+++ b/deps/npm/test/tap/shrinkwrap-shared-dev-dependency/package.json
@@ -0,0 +1,11 @@
+{
+ "author": "Domenic Denicola",
+ "name": "npm-test-shrinkwrap-shared-dev-dependency",
+ "version": "0.0.0",
+ "dependencies": {
+ "test-package-with-one-dep": "0.0.0"
+ },
+ "devDependencies": {
+ "test-package": "0.0.0"
+ }
+}
diff --git a/deps/npm/test/tap/sorted-package-json.js b/deps/npm/test/tap/sorted-package-json.js
new file mode 100644
index 000000000..41c90855a
--- /dev/null
+++ b/deps/npm/test/tap/sorted-package-json.js
@@ -0,0 +1,93 @@
+var test = require("tap").test
+ , path = require("path")
+ , rimraf = require("rimraf")
+ , mkdirp = require("mkdirp")
+ , spawn = require("child_process").spawn
+ , npm = require.resolve("../../bin/npm-cli.js")
+ , node = process.execPath
+ , pkg = path.resolve(__dirname, "sorted-package-json")
+ , tmp = path.join(pkg, "tmp")
+ , cache = path.join(pkg, "cache")
+ , fs = require("fs")
+ , common = require("../common-tap.js")
+ , mr = require("npm-registry-mock")
+ , osenv = require("osenv")
+
+
+test("sorting dependencies", function (t) {
+ var packageJson = path.resolve(pkg, "package.json")
+
+ cleanup()
+ mkdirp.sync(cache)
+ mkdirp.sync(tmp)
+ setup()
+
+ var before = JSON.parse(fs.readFileSync(packageJson).toString())
+
+ mr(common.port, function (s) {
+ // underscore is already in the package.json,
+ // but --save will trigger a rewrite with sort
+ var child = spawn(node, [npm, "install", "--save", "underscore@1.3.3"], {
+ cwd: pkg,
+ env: {
+ npm_config_registry: common.registry,
+ npm_config_cache: cache,
+ npm_config_tmp: tmp,
+ npm_config_prefix: pkg,
+ npm_config_global: "false",
+ HOME: process.env.HOME,
+ Path: process.env.PATH,
+ PATH: process.env.PATH
+ }
+ })
+
+ child.on("close", function (code) {
+ var result = fs.readFileSync(packageJson).toString()
+ , resultAsJson = JSON.parse(result)
+
+ s.close()
+
+ t.same(Object.keys(resultAsJson.dependencies),
+ Object.keys(before.dependencies).sort())
+
+ t.notSame(Object.keys(resultAsJson.dependencies),
+ Object.keys(before.dependencies))
+
+ t.ok(resultAsJson.dependencies.underscore)
+ t.ok(resultAsJson.dependencies.request)
+ t.end()
+ })
+ })
+})
+
+test("cleanup", function (t) {
+ cleanup()
+ t.pass("cleaned up")
+ t.end()
+})
+
+function setup() {
+ mkdirp.sync(pkg)
+
+ fs.writeFileSync(path.resolve(pkg, "package.json"), JSON.stringify({
+ "name": "sorted-package-json",
+ "version": "0.0.0",
+ "description": "",
+ "main": "index.js",
+ "scripts": {
+ "test": "echo \"Error: no test specified\" && exit 1"
+ },
+ "author": "Rocko Artischocko",
+ "license": "ISC",
+ "dependencies": {
+ "underscore": "^1.3.3",
+ "request": "^0.9.0"
+ }
+ }, null, 2), 'utf8')
+}
+
+function cleanup() {
+ process.chdir(osenv.tmpdir())
+ rimraf.sync(cache)
+ rimraf.sync(pkg)
+}
diff --git a/deps/npm/test/tap/startstop.js b/deps/npm/test/tap/startstop.js
new file mode 100644
index 000000000..4ac8fd000
--- /dev/null
+++ b/deps/npm/test/tap/startstop.js
@@ -0,0 +1,64 @@
+var common = require('../common-tap')
+ , test = require('tap').test
+ , path = require('path')
+ , spawn = require('child_process').spawn
+ , rimraf = require('rimraf')
+ , mkdirp = require('mkdirp')
+ , pkg = __dirname + '/startstop'
+ , cache = pkg + '/cache'
+ , tmp = pkg + '/tmp'
+ , node = process.execPath
+ , npm = path.resolve(__dirname, '../../cli.js')
+ , opts = { cwd: pkg }
+
+function testOutput (t, command, er, code, stdout, stderr) {
+ if (er)
+ throw er
+
+ if (stderr)
+ throw new Error('npm ' + command + ' stderr: ' + stderr.toString())
+
+ stdout = stdout.trim().split('\n')
+ stdout = stdout[stdout.length - 1]
+ t.equal(stdout, command)
+ t.end()
+}
+
+function cleanup () {
+ rimraf.sync(pkg + '/cache')
+ rimraf.sync(pkg + '/tmp')
+}
+
+test('setup', function (t) {
+ cleanup()
+ mkdirp.sync(pkg + '/cache')
+ mkdirp.sync(pkg + '/tmp')
+ t.end()
+})
+
+test('npm start', function (t) {
+ common.npm(['start'], opts, testOutput.bind(null, t, "start"))
+})
+
+test('npm stop', function (t) {
+ common.npm(['stop'], opts, testOutput.bind(null, t, "stop"))
+})
+
+test('npm restart', function (t) {
+ common.npm(['restart'], opts, function (er, c, stdout, stderr) {
+ if (er)
+ throw er
+
+ var output = stdout.split('\n').filter(function (val) {
+ return val.match(/^s/)
+ })
+
+ t.same(output.sort(), ['start', 'stop'].sort())
+ t.end()
+ })
+})
+
+test('cleanup', function (t) {
+ cleanup()
+ t.end()
+})
diff --git a/deps/npm/test/tap/startstop/package.json b/deps/npm/test/tap/startstop/package.json
new file mode 100644
index 000000000..3be0cf375
--- /dev/null
+++ b/deps/npm/test/tap/startstop/package.json
@@ -0,0 +1,7 @@
+{"name":"startstop"
+,"version":"1.2.3"
+,"scripts":{
+ "start":"node -e 'console.log(\"start\")'",
+ "stop":"node -e 'console.log(\"stop\")'"
+ }
+}
diff --git a/deps/npm/test/tap/test-run-ls.js b/deps/npm/test/tap/test-run-ls.js
new file mode 100644
index 000000000..4c869e5e2
--- /dev/null
+++ b/deps/npm/test/tap/test-run-ls.js
@@ -0,0 +1,33 @@
+var common = require("../common-tap.js")
+var test = require("tap").test
+var path = require("path")
+var cwd = path.resolve(__dirname, "..", "..")
+var testscript = require("../../package.json").scripts.test
+var tsregexp = testscript.replace(/([\[\.\*\]])/g, "\\$1")
+
+test("default", function (t) {
+ common.npm(["run"], { cwd: cwd }, function (er, code, so, se) {
+ if (er) throw er
+ t.notOk(code)
+ t.similar(so, new RegExp("\\n test\\n " + tsregexp + "\\n"))
+ t.end()
+ })
+})
+
+test("parseable", function (t) {
+ common.npm(["run", "-p"], { cwd: cwd }, function (er, code, so, se) {
+ if (er) throw er
+ t.notOk(code)
+ t.similar(so, new RegExp("\\ntest:" + tsregexp + "\\n"))
+ t.end()
+ })
+})
+
+test("parseable", function (t) {
+ common.npm(["run", "--json"], { cwd: cwd }, function (er, code, so, se) {
+ if (er) throw er
+ t.notOk(code)
+ t.equal(JSON.parse(so).test, testscript)
+ t.end()
+ })
+})
diff --git a/deps/npm/test/tap/uninstall-package.js b/deps/npm/test/tap/uninstall-package.js
new file mode 100644
index 000000000..068270125
--- /dev/null
+++ b/deps/npm/test/tap/uninstall-package.js
@@ -0,0 +1,41 @@
+var test = require("tap").test
+ , npm = require("../../")
+ , rimraf = require("rimraf")
+ , mr = require("npm-registry-mock")
+ , common = require("../common-tap.js")
+ , pkg = __dirname + "/uninstall-package"
+
+test("returns a list of removed items", function (t) {
+ t.plan(1)
+ mr(common.port, function (s) {
+ setup(function () {
+ npm.install(".", function (err) {
+ if (err) return t.fail(err)
+ npm.uninstall("underscore", "request", "lala", function (err, d) {
+ if (err) return t.fail(err)
+ t.same(d.sort(), ["underscore", "request"].sort())
+ s.close()
+ t.end()
+ })
+ })
+ })
+ })
+})
+
+test("cleanup", function (t) {
+ cleanup()
+ t.end()
+})
+
+function setup (cb) {
+ cleanup()
+ process.chdir(pkg)
+ npm.load({cache: pkg + "/cache", registry: common.registry}, function () {
+ cb()
+ })
+}
+
+function cleanup () {
+ rimraf.sync(pkg + "/node_modules")
+ rimraf.sync(pkg + "/cache")
+}
diff --git a/deps/npm/test/tap/uninstall-package/package.json b/deps/npm/test/tap/uninstall-package/package.json
new file mode 100644
index 000000000..49ce42a89
--- /dev/null
+++ b/deps/npm/test/tap/uninstall-package/package.json
@@ -0,0 +1,11 @@
+{
+ "name": "beep",
+ "version": "0.0.0",
+ "author": "Rockbert",
+ "description": "i am a fixture",
+ "main": "index.js",
+ "dependencies": {
+ "underscore": "~1.3.1",
+ "request": "~0.9.0"
+ }
+}
diff --git a/deps/npm/test/tap/url-dependencies.js b/deps/npm/test/tap/url-dependencies.js
new file mode 100644
index 000000000..c3e1fa2a3
--- /dev/null
+++ b/deps/npm/test/tap/url-dependencies.js
@@ -0,0 +1,79 @@
+var test = require("tap").test
+var rimraf = require("rimraf")
+var path = require("path")
+var osenv = require("osenv")
+var mr = require("npm-registry-mock")
+var spawn = require("child_process").spawn
+var npm = require.resolve("../../bin/npm-cli.js")
+var node = process.execPath
+var pkg = path.resolve(__dirname, "url-dependencies")
+var common = require('../common-tap')
+
+var mockRoutes = {
+ "get": {
+ "/underscore/-/underscore-1.3.1.tgz": [200]
+ }
+}
+
+test("url-dependencies: download first time", function(t) {
+ cleanup()
+
+ performInstall(function(output){
+ if(!tarballWasFetched(output)){
+ t.fail("Tarball was not fetched")
+ }else{
+ t.pass("Tarball was fetched")
+ }
+ t.end()
+ })
+})
+
+test("url-dependencies: do not download subsequent times", function(t) {
+ cleanup()
+
+ performInstall(function(){
+ performInstall(function(output){
+ if(tarballWasFetched(output)){
+ t.fail("Tarball was fetched second time around")
+ }else{
+ t.pass("Tarball was not fetched")
+ }
+ t.end()
+ })
+ })
+})
+
+function tarballWasFetched(output){
+ return output.indexOf("http GET " + common.registry + "/underscore/-/underscore-1.3.1.tgz") > -1
+}
+
+function performInstall (cb) {
+ mr({port: common.port, mocks: mockRoutes}, function(s){
+ var output = ""
+ , child = spawn(node, [npm, "install"], {
+ cwd: pkg,
+ env: {
+ npm_config_registry: common.registry,
+ npm_config_cache_lock_stale: 1000,
+ npm_config_cache_lock_wait: 1000,
+ HOME: process.env.HOME,
+ Path: process.env.PATH,
+ PATH: process.env.PATH
+ }
+ })
+
+ child.stderr.on("data", function(data){
+ output += data.toString()
+ })
+ child.on("close", function () {
+ s.close()
+ cb(output)
+ })
+ })
+}
+
+function cleanup() {
+ // windows fix for locked files
+ process.chdir(osenv.tmpdir())
+ rimraf.sync(path.resolve(pkg, "node_modules"))
+}
diff --git a/deps/npm/test/tap/url-dependencies/package.json b/deps/npm/test/tap/url-dependencies/package.json
new file mode 100644
index 000000000..96ae3e247
--- /dev/null
+++ b/deps/npm/test/tap/url-dependencies/package.json
@@ -0,0 +1,8 @@
+{
+ "author": "Steve Mason",
+ "name": "url-dependencies",
+ "version": "0.0.0",
+ "dependencies": {
+ "underscore": "http://localhost:1337/underscore/-/underscore-1.3.1.tgz"
+ }
+}
diff --git a/deps/npm/test/tap/version-no-tags.js b/deps/npm/test/tap/version-no-tags.js
new file mode 100644
index 000000000..e731c3154
--- /dev/null
+++ b/deps/npm/test/tap/version-no-tags.js
@@ -0,0 +1,73 @@
+var common = require('../common-tap.js')
+var test = require('tap').test
+var npm = require('../../')
+var npmc = require.resolve('../../')
+var osenv = require('osenv')
+var path = require('path')
+var fs = require('fs')
+var rimraf = require('rimraf')
+var mkdirp = require('mkdirp')
+var which = require('which')
+var util = require('util')
+var spawn = require('child_process').spawn
+var args = [ npmc
+ , 'version'
+ , 'patch'
+ , '--no-git-tag-version'
+ ]
+var pkg = __dirname + '/version-no-tags'
+
+test("npm version <semver> without git tag", function (t) {
+ setup()
+ npm.load({ cache: pkg + '/cache', registry: common.registry}, function () {
+ which('git', function(err, git) {
+ function tagExists(tag, _cb) {
+ var child = spawn(git, ['tag', '-l', tag])
+ var out = ''
+ child.stdout.on('data', function(d) {
+ out += data.toString()
+ })
+ child.on('exit', function() {
+ return _cb(null, Boolean(~out.indexOf(tag)))
+ })
+ }
+
+ var child = spawn(git, ['init'])
+ child.stdout.pipe(process.stdout)
+ child.on('exit', function() {
+ npm.config.set('git-tag-version', false)
+ npm.commands.version(['patch'], function(err) {
+ if (err) return t.fail('Error perform version patch')
+ var testPkg = require(pkg+'/package')
+ if (testPkg.version !== '0.0.1') t.fail(testPkg.version+' !== \'0.0.1\'')
+ t.ok('0.0.1' === testPkg.version)
+ tagExists('v0.0.1', function(err, exists) {
+ t.equal(exists, false, 'git tag DOES exist')
+ t.pass('git tag does not exist')
+ t.end()
+ })
+ })
+ })
+ })
+ })
+})
+
+test('cleanup', function(t) {
+ // windows fix for locked files
+ process.chdir(osenv.tmpdir())
+
+ rimraf.sync(pkg)
+ t.end()
+})
+
+function setup() {
+ mkdirp.sync(pkg)
+ mkdirp.sync(pkg + '/cache')
+ fs.writeFileSync(pkg + '/package.json', JSON.stringify({
+ author: "Evan Lucas",
+ name: "version-no-tags-test",
+ version: "0.0.0",
+ description: "Test for git-tag-version flag"
+ }), 'utf8')
+ process.chdir(pkg)
+}
diff --git a/deps/npm/wercker.yml b/deps/npm/wercker.yml
new file mode 100644
index 000000000..f944a9552
--- /dev/null
+++ b/deps/npm/wercker.yml
@@ -0,0 +1,22 @@
+box: wercker/nodejs
+# Build definition
+build:
+ # The steps that will be executed on build
+ steps:
+ # A step that executes `npm install` command
+ - npm-install
+ # A step that executes `npm test` command
+ - npm-test
+
+ # A custom script step, name value is used in the UI
+ # and the code value contains the command that get executed
+ - script:
+ name: echo nodejs information
+ code: |
+ echo "node version $(node -v) running"
+ echo "npm version $(npm -v) running"
+ after-steps:
+ - sherzberg/slack-notify:
+ subdomain: npm-inc
+ token: $SLACK_TOKEN
+ channel: github-commits